Skip to main content
Version: 2.30

CogneeMemoryStore

CogneeMemoryStore is a persistent memory store backed by Cognee's knowledge graph API. It is the shared data layer used by CogneeRetriever and CogneeWriter.

Used byCogneeRetriever, CogneeWriter
Optional init variablessearch_type, top_k, dataset_name, session_id, self_improvement, timeout
API referenceCognee
GitHub linkhttps://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/cognee
Package namecognee-haystack

Overview

CogneeMemoryStore wraps Cognee's V2 memory API:

  • add_memoriescognee.remember
  • search_memoriescognee.recall
  • improvecognee.improve
  • delete_all_memoriescognee.forget

Cognee supports two memory tiers. Set session_id to use the session cache — fast writes with no LLM extraction, session-aware recall. Leave session_id as None to write to the permanent knowledge graph, which uses LLM extraction during ingestion and supports richer graph-completion queries.

Cognee configuration (LLM provider, database, vector store) is read from environment variables. See the Cognee documentation for setup instructions.

Parameters

  • search_type is optional and defaults to "GRAPH_COMPLETION". Controls which Cognee recall strategy is used. Other useful values include "CHUNKS" for raw retrieval and "SUMMARIES" for summarized graph nodes.
  • top_k is optional and defaults to 5. Sets the default maximum number of memories returned per search.
  • dataset_name is optional and defaults to "haystack_memory". Names the Cognee dataset backing this store.
  • session_id is optional and defaults to None. When set, reads and writes target the session-cache tier. When None, the permanent knowledge graph is used.
  • self_improvement is optional and defaults to True. When True, Cognee runs graph improvement inline after every write. Set to False when you want improve() to be the sole improvement trigger.
  • timeout is optional and defaults to 300. Per-call timeout in seconds for any Cognee operation.

Installation

Install the Cognee integration:

bash
pip install cognee-haystack

Set your LLM API key (used by Cognee for graph extraction and queries):

bash
export LLM_API_KEY="your-llm-api-key"

Optionally, set a separate embedding API key (defaults to LLM_API_KEY when unset):

bash
export EMBEDDING_API_KEY="your-embedding-api-key"

Usage

On its own

python
from haystack.dataclasses import ChatMessage
from haystack_integrations.memory_stores.cognee import CogneeMemoryStore

store = CogneeMemoryStore(search_type="GRAPH_COMPLETION", top_k=5)

store.add_memories(
messages=[ChatMessage.from_user("Alice enjoys hiking and outdoor activities.")],
user_id="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
)

memories = store.search_memories(
query="What does Alice like?",
user_id="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
)
print([msg.text for msg in memories])

Session tier vs permanent graph

Use session_id to control which memory tier is targeted. A single store can serve both tiers — the writer's session_id overrides the store's session_id per call.

python
from haystack.dataclasses import ChatMessage
from haystack_integrations.memory_stores.cognee import CogneeMemoryStore

store = CogneeMemoryStore(dataset_name="my_agent_memory", self_improvement=False)

# Write long-lived facts to the permanent graph (no session_id).
store.add_memories(
messages=[ChatMessage.from_user("Alice is a senior data scientist at Acme Corp.")],
)

# Write transient session context to the session cache.
store.add_memories(
messages=[ChatMessage.from_user("Alice is currently debugging a vector store issue.")],
session_id="alice_session_1",
)

# Promote the session cache into the permanent graph.
store.improve(session_id="alice_session_1")

Delete all memories

python
# Delete only this store's dataset (session cache is unaffected).
store.delete_all_memories()

# To wipe everything including the session cache, call cognee directly:
import asyncio
import cognee

asyncio.run(cognee.forget(everything=True))