Episodic Memory
Autobiographical history of user interactions, storing user sessions as linked episodes.
Purpose
The Episodic Memory module acts as the system's autobiographical memory. It preserves the timeline of user interactions, allowing the agent to recall past conversations ("What did we discuss yesterday?") and maintain continuity across sessions.
Key Features
- LLM Summarization: Compresses raw chat logs into semantic summaries (e.g., "User asked for Python debugging tips").
- Utility Scoring: Assigns a 0-1 score for importance/information density. Low-utility episodes are candidates for early pruning.
- Temporal Chaining: Episodes are linked in a chain
(:Episode)-[:NEXT]->(:Episode)to preserve timeline continuity.
Functional Deep Dive
Summarization
Agents don't store raw chat logs directly in the graph as nodes. Instead, the LLMService processes the interaction to generate a concise semantic summary. This reduces noise and improves retrieval relevance.
Temporal Chaining
Episodes form a linked list in Neo4j using the [:NEXT] relationship. This structure enables the system to traverse history sequentially when reconstructing a conversation context.
Utility Scoring
Each episode is assigned a utility score (0-1).
- High Score: Important decisions, new facts, or user preferences.
- Low Score: Phatic communication (e.g., "Hello", "Thanks"), which can be pruned safely later.
Information Flow
The following diagram illustrates how an interaction becomes an episode:
Codebase Interaction
- Invocation: Called by
MainOrchestrator.process_query→_post_response_hooks. - Inputs:
user_id,session_id,query,response. - Outputs:
episode_id,summary,utility_score.
API Reference
Episodic Memory provides RESTful endpoints for managing temporal interaction events.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/memory/v1/episodes | Create a new episode |
| GET | /api/memory/v1/episodes | List episodes with filters |
| GET | /api/memory/v1/episodes/{episode_id} | Get specific episode by ID |
| PUT | /api/memory/v1/episodes/{episode_id} | Update episode metadata |
| DELETE | /api/memory/v1/episodes/{episode_id} | Delete an episode |
| POST | /api/memory/v1/episodes/search | Semantic search for episodes |
| GET | /api/memory/v1/episodes/session/{session_id} | Get all episodes for a session |
SDK Reference
The Functor SDK provides a convenient Python interface for episodic memory operations.