chore: import upstream snapshot with attribution
CodeQL / Analyze (python) (push) Has been cancelled
Update Platform Components Table / update (push) Has been cancelled
Docker image release / Build base image (push) Has been cancelled
Sync docs with Docusaurus / sync (push) Has been cancelled
Tests / Check if changed (push) Has been cancelled
Tests / format (push) Has been cancelled
Tests / check-imports (push) Has been cancelled
Tests / Unit / macos-latest (push) Has been cancelled
Tests / Unit / ubuntu-latest (push) Has been cancelled
Tests / Unit / windows-latest (push) Has been cancelled
Tests / mypy (push) Has been cancelled
Tests / Integration / ubuntu-latest (push) Has been cancelled
Tests / Integration / macos-latest (push) Has been cancelled
Tests / Integration / windows-latest (push) Has been cancelled
Tests / notify-slack-on-failure (push) Has been cancelled
Tests / Mark tests as completed (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Update Platform Components Table / update (push) Has been cancelled
Docker image release / Build base image (push) Has been cancelled
Sync docs with Docusaurus / sync (push) Has been cancelled
Tests / Check if changed (push) Has been cancelled
Tests / format (push) Has been cancelled
Tests / check-imports (push) Has been cancelled
Tests / Unit / macos-latest (push) Has been cancelled
Tests / Unit / ubuntu-latest (push) Has been cancelled
Tests / Unit / windows-latest (push) Has been cancelled
Tests / mypy (push) Has been cancelled
Tests / Integration / ubuntu-latest (push) Has been cancelled
Tests / Integration / macos-latest (push) Has been cancelled
Tests / Integration / windows-latest (push) Has been cancelled
Tests / notify-slack-on-failure (push) Has been cancelled
Tests / Mark tests as completed (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
---
|
||||
title: "CogneeMemoryStore"
|
||||
id: cogneememorystore
|
||||
slug: "/cogneememorystore"
|
||||
description: "A persistent memory store backed by Cognee's knowledge graph API."
|
||||
---
|
||||
|
||||
# CogneeMemoryStore
|
||||
|
||||
`CogneeMemoryStore` is a persistent memory store backed by Cognee's knowledge graph API. It is the shared data layer used by [`CogneeRetriever`](../pipeline-components/retrievers/cogneeretriever.mdx) and [`CogneeWriter`](../pipeline-components/writers/cogneewriter.mdx).
|
||||
|
||||
<div className="key-value-table">
|
||||
|
||||
| | |
|
||||
| --- | --- |
|
||||
| **Used by** | [`CogneeRetriever`](../pipeline-components/retrievers/cogneeretriever.mdx), [`CogneeWriter`](../pipeline-components/writers/cogneewriter.mdx) |
|
||||
| **Optional init variables** | `search_type`, `top_k`, `dataset_name`, `session_id`, `self_improvement`, `timeout` |
|
||||
| **API reference** | [Cognee](/reference/integrations-cognee#cogneememorystore) |
|
||||
| **GitHub link** | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/cognee |
|
||||
| **Package name** | `cognee-haystack` |
|
||||
|
||||
</div>
|
||||
|
||||
## Overview
|
||||
|
||||
`CogneeMemoryStore` wraps Cognee's V2 memory API:
|
||||
|
||||
- `add_memories` → `cognee.remember`
|
||||
- `search_memories` → `cognee.recall`
|
||||
- `improve` → `cognee.improve`
|
||||
- `delete_all_memories` → `cognee.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](https://docs.cognee.ai) 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))
|
||||
```
|
||||
@@ -0,0 +1,103 @@
|
||||
---
|
||||
title: "Mem0MemoryStore"
|
||||
id: mem0memorystore
|
||||
slug: "/mem0memorystore"
|
||||
description: "A memory store backed by the Mem0 cloud API."
|
||||
---
|
||||
|
||||
# Mem0MemoryStore
|
||||
|
||||
`Mem0MemoryStore` is a memory store backed by the Mem0 cloud API. It is the shared data layer used by [`Mem0MemoryRetriever`](../pipeline-components/retrievers/mem0memoryretriever.mdx), [`Mem0MemoryWriter`](../pipeline-components/writers/mem0memorywriter.mdx), and the [Mem0 Memory Tools](../tools/ready-made-tools/mem0memorytools.mdx).
|
||||
|
||||
<div className="key-value-table">
|
||||
|
||||
| | |
|
||||
| --- | --- |
|
||||
| **Used by** | [`Mem0MemoryRetriever`](../pipeline-components/retrievers/mem0memoryretriever.mdx), [`Mem0MemoryWriter`](../pipeline-components/writers/mem0memorywriter.mdx), [`Mem0MemoryRetrieverTool`, `Mem0MemoryWriterTool`](../tools/ready-made-tools/mem0memorytools.mdx) |
|
||||
| **Optional init variables** | `api_key`: Defaults to `MEM0_API_KEY` environment variable |
|
||||
| **API reference** | [Mem0](/reference/integrations-mem0#mem0memorystore) |
|
||||
| **GitHub link** | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/mem0 |
|
||||
| **Package name** | `mem0-haystack` |
|
||||
|
||||
</div>
|
||||
|
||||
## Overview
|
||||
|
||||
`Mem0MemoryStore` wraps the Mem0 cloud API and provides two core methods:
|
||||
|
||||
- `add_memories` — stores a list of `ChatMessage` objects as memories in Mem0.
|
||||
- `search_memories` — retrieves memories from Mem0 that are relevant to a query.
|
||||
|
||||
Scope memories with at least one Mem0 entity ID: `user_id`, `run_id`, `agent_id`, or `app_id`. These are runtime parameters, so a single store instance can serve multiple users or sessions.
|
||||
|
||||
The `infer` parameter on `add_memories` controls how Mem0 processes incoming messages:
|
||||
|
||||
- `infer=True` lets Mem0 extract memories from the messages automatically. This is useful when storing a full Agent turn.
|
||||
- `infer=False` stores the supplied message text as-is. This is useful when the exact memory text has already been selected upstream.
|
||||
|
||||
### Installation
|
||||
|
||||
Install the Mem0 integration:
|
||||
|
||||
```bash
|
||||
pip install mem0-haystack
|
||||
```
|
||||
|
||||
Set your Mem0 API key:
|
||||
|
||||
```bash
|
||||
export MEM0_API_KEY="your-mem0-api-key"
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### On its own
|
||||
|
||||
```python
|
||||
from haystack.dataclasses import ChatMessage
|
||||
from haystack_integrations.memory_stores.mem0 import Mem0MemoryStore
|
||||
|
||||
store = Mem0MemoryStore()
|
||||
|
||||
store.add_memories(
|
||||
messages=[ChatMessage.from_user("Alice prefers concise Python examples.")],
|
||||
user_id="alice",
|
||||
infer=False,
|
||||
)
|
||||
|
||||
memories = store.search_memories(
|
||||
query="What does Alice prefer?",
|
||||
user_id="alice",
|
||||
top_k=3,
|
||||
)
|
||||
print([msg.text for msg in memories])
|
||||
```
|
||||
|
||||
### Scoping with multiple entity IDs
|
||||
|
||||
Mem0 supports narrowing the scope of reads and writes with `user_id`, `run_id`, `agent_id`, and `app_id`. Pass any combination at call time:
|
||||
|
||||
```python
|
||||
store.add_memories(
|
||||
messages=[ChatMessage.from_user("Alice is working on a documentation search system.")],
|
||||
user_id="alice",
|
||||
run_id="docs-assistant-session-1",
|
||||
infer=True,
|
||||
)
|
||||
|
||||
memories = store.search_memories(
|
||||
query="What project is Alice working on?",
|
||||
user_id="alice",
|
||||
run_id="docs-assistant-session-1",
|
||||
)
|
||||
print([msg.text for msg in memories])
|
||||
```
|
||||
|
||||
### Retrieving all memories in scope
|
||||
|
||||
Pass `query=None` to return all memories matching the provided scope without a relevance search:
|
||||
|
||||
```python
|
||||
all_memories = store.search_memories(query=None, user_id="alice")
|
||||
print([msg.text for msg in all_memories])
|
||||
```
|
||||
Reference in New Issue
Block a user