GitHub
Memory System

Long-term Memory (LTM)

Consolidated, permanent archive of important episodes and knowledge.

Storage: Neo4j (:LongTerm), Qdrant

Purpose

Long-term Memory serves as the permanent storage for high-value information. It is populated through a consolidation process that synthesizes multiple transient episodes into lasting wisdom.

Key Features

  • Consolidation: Background jobs merge multiple related Episodes into a single, denser LTM item.
  • Versioning: Tracks knowledge evolution over time using :VERSION_OF relationships.

Functional Deep Dive

Consolidation

The system runs background jobs (or triggers) that look for clusters of related episodes (e.g., multiple chats about a specific project). It asks an LLM to synthesize these into a single LongTermItem, effectively compressing history while retaining wisdom.

Versioning

LTM items are versioned. If knowledge evolves (e.g., "The project deployment script changed"), a new version is created and linked to the old one: (:LTM_Item)-[:VERSION_OF]->(:LTM_Item_Old). This preserves the history of knowledge itself.

Consolidation Flow

API Reference

Long-term Memory provides endpoints for archiving and retrieving consolidated memories.

MethodEndpointDescription
POST/api/memory/v1/long-term/archiveArchive episode to LTM
POST/api/memory/v1/long-term/retrieveRetrieve from LTM
GET/api/memory/v1/long-termList LTM items
GET/api/memory/v1/long-term/item_idGet LTM item
GET/api/memory/v1/long-term/item_id/versionsGet version history
PUT/api/memory/v1/long-term/item_idUpdate LTM item
DELETE/api/memory/v1/long-term/item_idDelete LTM item

SDK Reference

The Functor SDK provides a Python interface for long-term memory operations.

Archiving and Retrieving

from functor_sdk import FunctorClient
client = FunctorClient(api_key="your-api-key")
# Archive to long-term memory
archived = client.memory.long_term.archive(
episode_id="ep_123",
kg_name="user_knowledge",
data={"consolidated_facts": [...]},
version=1,
user_id="user_456"
)
# Retrieve from long-term memory
results = client.memory.long_term.retrieve(
query="project deployment knowledge",
user_id="user_456",
limit=10
)
# Get version history
versions = client.memory.long_term.get_versions(item_id="ltm_123")
# List LTM items
items = client.memory.long_term.list(
user_id="user_456",
kg_name="user_knowledge"
)