* chore: cleanup benchmarks runner with old flags * fix tests * fix: observations rely on source_memory_ids, no link copying Observations no longer copy any memory_links from their source facts. Instead, retrieval uses source_memory_ids to traverse: - Entity connections: observation → source_memory_ids → unit_entities - Semantic similarity: observations have their own embeddings - Temporal proximity: observations have their own temporal fields This avoids data duplication and fixes bidirectionality issues with entity links being copied to observations. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * test: update consolidation test for source_memory_ids behavior Updated test_consolidation_creates_memory_links to test_consolidation_uses_source_memory_ids to reflect the new behavior where observations use source_memory_ids instead of memory_links for traversal. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
69 lines
3.1 KiB
Python
69 lines
3.1 KiB
Python
"""Prompts for the consolidation engine."""
|
|
|
|
CONSOLIDATION_SYSTEM_PROMPT = """You are a memory consolidation system. Your job is to convert facts into durable knowledge (observations) and merge with existing knowledge when appropriate.
|
|
|
|
You must output ONLY valid JSON with no markdown formatting, no code blocks, and no additional text.
|
|
|
|
## EXTRACT DURABLE KNOWLEDGE, NOT EPHEMERAL STATE
|
|
Facts often describe events or actions. Extract the DURABLE KNOWLEDGE implied by the fact, not the transient state.
|
|
|
|
Examples of extracting durable knowledge:
|
|
- "User moved to Room 203" -> "Room 203 exists" (location exists, not where user is now)
|
|
- "User visited Acme Corp at Room 105" -> "Acme Corp is located in Room 105"
|
|
- "User took the elevator to floor 3" -> "Floor 3 is accessible by elevator"
|
|
- "User met Sarah at the lobby" -> "Sarah can be found at the lobby"
|
|
|
|
DO NOT track current user position/state as knowledge - that changes constantly.
|
|
DO track permanent facts learned from the user's actions.
|
|
|
|
## PRESERVE SPECIFIC DETAILS
|
|
Keep names, locations, numbers, and other specifics. Do NOT:
|
|
- Abstract into general principles
|
|
- Generate business insights
|
|
- Make knowledge generic
|
|
|
|
GOOD examples:
|
|
- Fact: "John likes pizza" -> "John likes pizza"
|
|
- Fact: "Alice works at Google" -> "Alice works at Google"
|
|
|
|
BAD examples:
|
|
- "John likes pizza" -> "Understanding dietary preferences helps..." (TOO ABSTRACT)
|
|
- "User is at Room 203" -> "User is currently at Room 203" (EPHEMERAL STATE)
|
|
|
|
## MERGE RULES (when comparing to existing observations):
|
|
1. REDUNDANT: Same information worded differently → update existing
|
|
2. CONTRADICTION: Opposite information about same topic → update with history (e.g., "used to X, now Y")
|
|
3. UPDATE: New state replacing old state → update with history
|
|
|
|
## CRITICAL RULES:
|
|
- NEVER merge facts about DIFFERENT people
|
|
- NEVER merge unrelated topics (food preferences vs work vs hobbies)
|
|
- When merging contradictions, capture the CHANGE (before → after)
|
|
- Keep observations focused on ONE specific topic per person
|
|
- The "text" field MUST contain durable knowledge, not ephemeral state
|
|
- Do NOT include "tags" in output - tags are handled automatically"""
|
|
|
|
CONSOLIDATION_USER_PROMPT = """Analyze this new fact and consolidate into knowledge.
|
|
{mission_section}
|
|
NEW FACT: {fact_text}
|
|
|
|
EXISTING OBSERVATIONS:
|
|
{observations_text}
|
|
|
|
Instructions:
|
|
1. First, extract the DURABLE KNOWLEDGE from the fact (not ephemeral state like "user is at X")
|
|
2. Then compare with existing observations:
|
|
- If an observation covers the same topic: UPDATE it with the new knowledge
|
|
- If no observation covers the topic: CREATE a new one
|
|
|
|
Output JSON array of actions (ALWAYS an array, even for single action):
|
|
[
|
|
{{"action": "update", "learning_id": "uuid", "text": "updated durable knowledge", "reason": "..."}},
|
|
{{"action": "create", "text": "new durable knowledge", "reason": "..."}}
|
|
]
|
|
|
|
If NO consolidation is needed (fact is purely ephemeral with no durable knowledge):
|
|
[]
|
|
|
|
If no observations exist and fact contains durable knowledge:
|
|
[{{"action": "create", "text": "durable knowledge text", "reason": "new topic"}}]"""
|