class MemoryState(TypedDict):
messages: Annotated[Sequence[BaseMessage], add_messages]
user_id: str
memories: list[str]
def extract_memories(state: MemoryState, *, store: BaseStore):
"""Extract and store important information."""
messages = state["messages"]
user_id = state["user_id"]
# Use LLM to extract facts
facts = extract_facts_from_conversation(messages)
# Store each fact
for fact in facts:
store.put(
namespace=("memories", user_id),
key=str(uuid.uuid4()),
value={"fact": fact, "timestamp": datetime.now()},
)
return {}
def recall_memories(state: MemoryState, *, store: BaseStore):
"""Retrieve relevant memories."""
user_id = state["user_id"]
current_message = state["messages"][-1].content
# Search memories
items = store.search(
namespace=("memories", user_id),
query=current_message, # Semantic search if supported
limit=5,
)
memories = [item.value["fact"] for item in items]
return {"memories": memories}