Mem0
haystack_integrations.components.retrievers.mem0.retriever
Mem0MemoryRetriever
Retrieves memories from a Mem0MemoryStore as a list of ChatMessage objects.
Use this component in a Haystack Pipeline to fetch relevant memories before passing context to a language model or Agent. The returned memories are system messages.
Provide either filters or at least one Mem0 entity ID (user_id, run_id, agent_id, or app_id)
when running the component. If both are provided, the filters and entity IDs are combined.
Usage example
from haystack_integrations.components.retrievers.mem0 import Mem0MemoryRetriever
from haystack_integrations.memory_stores.mem0 import Mem0MemoryStore
store = Mem0MemoryStore()
retriever = Mem0MemoryRetriever(memory_store=store, top_k=3)
result = retriever.run(query="What does Alice like?", user_id="alice")
memories = result["memories"]
print([message.text for message in memories])
# Pass query=None to retrieve all memories in scope.
all_memories = retriever.run(query=None, user_id="alice")["memories"]
init
Initialize the Mem0MemoryRetriever.
Parameters:
- memory_store (
Mem0MemoryStore) – The Mem0MemoryStore instance to retrieve memories from. - top_k (
int) – Default maximum number of memories to return per query.
run
run(
query: str | None,
*,
user_id: str | None = None,
run_id: str | None = None,
agent_id: str | None = None,
app_id: str | None = None,
filters: dict[str, Any] | None = None,
top_k: int | None = None
) -> dict[str, list[ChatMessage]]
Retrieve memories matching the query from Mem0.
Parameters:
- query (
str | None) – Text query used to search for relevant memories. PassNoneto retrieve all memories matching the scope. - user_id (
str | None) – User ID to scope the search. - run_id (
str | None) – Run ID to scope the search. - agent_id (
str | None) – Agent ID to scope the search. - app_id (
str | None) – App ID to scope the search. - filters (
dict[str, Any] | None) – Haystack-style filters to apply. When provided with ID parameters, they are combined. Mem0 requires entity IDs inside filters and supports a fixed set of native fields and operators: Search Memories API and Memory Filters. Fields that are not native Mem0 filter fields are treated as Mem0 metadata fields. - top_k (
int | None) – Maximum number of memories to return. Overrides the init-time default.
Returns:
dict[str, list[ChatMessage]]– Dictionary with keymemoriescontaining a list of ChatMessage objects. User-provided Mem0 metadata is included in each message's meta. Mem0 retrieval fields such asmemory_id,user_id,score, and timestamps are included undermeta["mem0"].
to_dict
Serialize this component to a dictionary.
from_dict
Deserialize this component from a dictionary.
haystack_integrations.components.writers.mem0.writer
Mem0MemoryWriter
Writes ChatMessage objects as memories to a Mem0MemoryStore.
Use this component in a Haystack Pipeline to persist conversation messages.
Scoping IDs (user_id, run_id, agent_id, app_id) are runtime parameters so the
same pipeline instance can serve multiple users or agents. The infer setting controls whether
Mem0 extracts memories from messages or stores message text as-is.
Usage example
from haystack.dataclasses import ChatMessage
from haystack_integrations.components.writers.mem0 import Mem0MemoryWriter
from haystack_integrations.memory_stores.mem0 import Mem0MemoryStore
store = Mem0MemoryStore()
writer = Mem0MemoryWriter(memory_store=store, infer=False)
result = writer.run(
messages=[ChatMessage.from_user("Alice prefers concise Python examples.")],
user_id="alice",
)
print(result["memories_written"])
init
Initialize the Mem0MemoryWriter.
Parameters:
- memory_store (
Mem0MemoryStore) – The Mem0MemoryStore instance to write memories to. - infer (
bool) – If True, Mem0 extracts memories from messages. If False, Mem0 stores message text as-is.
run
run(
messages: list[ChatMessage],
*,
user_id: str | None = None,
run_id: str | None = None,
agent_id: str | None = None,
app_id: str | None = None
) -> dict[str, int]
Write messages as memories to the Mem0 store.
Parameters:
- messages (
list[ChatMessage]) – List of ChatMessage objects to store. - user_id (
str | None) – User ID to scope the stored memories. - run_id (
str | None) – Run ID to scope the stored memories. - agent_id (
str | None) – Agent ID to scope the stored memories. - app_id (
str | None) – App ID to scope the stored memories.
Returns:
dict[str, int]– Dictionary with keymemories_writtencontaining the count of stored memory items.
to_dict
Serialize this component to a dictionary.
from_dict
Deserialize this component from a dictionary.
haystack_integrations.memory_stores.mem0.errors
Mem0MemoryStoreError
Bases: RuntimeError
Raised when a Mem0 API operation fails.
haystack_integrations.memory_stores.mem0.memory_store
Mem0MemoryStore
A memory store backed by the Mem0 cloud API.
Stores and retrieves ChatMessage-based memories scoped by user_id, run_id, agent_id, or app_id. The Mem0 client is created lazily on first use (or explicitly via warm_up()). Requires a Mem0 API key set via the MEM0_API_KEY environment variable or passed explicitly.
init
Initialize the Mem0 memory store.
The Mem0 client is not created until warm_up() is called (or the first method that needs the client is invoked).
Parameters:
- api_key (
Secret) – The Mem0 API key. Defaults to the MEM0_API_KEY environment variable.
warm_up
Create the Mem0 client. Called automatically on first use if not called explicitly.
Calling this method explicitly is useful when you want to validate the API key or pre-connect before the first pipeline run.
client
Return the initialized client, calling warm_up() if necessary.
to_dict
Serialize the store configuration to a dictionary.
from_dict
Deserialize the store from a dictionary.
add_memories
add_memories(
*,
messages: list[ChatMessage],
user_id: str | None = None,
run_id: str | None = None,
agent_id: str | None = None,
app_id: str | None = None,
infer: bool = True,
**kwargs: Any
) -> list[dict[str, Any]]
Add ChatMessage memories to Mem0.
Parameters:
- messages (
list[ChatMessage]) – List of ChatMessage objects to store as memories. - user_id (
str | None) – User ID to scope these memories. - run_id (
str | None) – Run ID to scope these memories. - agent_id (
str | None) – Agent ID to scope these memories. Required for Mem0 to store assistant messages. - app_id (
str | None) – App ID to scope these memories. - infer (
bool) – If True, Mem0 extracts memories from messages. If False, Mem0 stores message text as-is. - kwargs (
Any) – Additional keyword arguments forwarded to the Mem0 client add method. Note: ChatMessage.meta is ignored because Mem0 doesn't support per-message metadata. Passmetadataas a kwarg to attach metadata to the whole batch instead.
Returns:
list[dict[str, Any]]– List of objects withmemory_idandmemorytext for each stored memory.
Raises:
Mem0MemoryStoreError– If the Mem0 API call fails.
search_memories
search_memories(
*,
query: str | None = None,
filters: dict[str, Any] | None = None,
top_k: int = 5,
user_id: str | None = None,
run_id: str | None = None,
agent_id: str | None = None,
app_id: str | None = None,
**kwargs: Any
) -> list[ChatMessage]
Search for memories in Mem0.
Either filters or at least one of user_id, run_id, agent_id, or app_id must be provided.
When both filters and IDs are provided, they are combined with an AND condition.
Parameters:
- query (
str | None) – Text query to search. If omitted, returns all memories matching the scope. - filters (
dict[str, Any] | None) – Haystack-style filters to apply. See Haystack metadata filtering. Mem0 requires entity IDs inside filters and supports a fixed set of native fields and operators: Search Memories API and Memory Filters. Fields that are not native Mem0 filter fields are treated as Mem0 metadata fields. - top_k (
int) – Maximum number of results to return. - user_id (
str | None) – User ID to scope the search. - run_id (
str | None) – Run ID to scope the search. - agent_id (
str | None) – Agent ID to scope the search. - app_id (
str | None) – App ID to scope the search. - kwargs (
Any) – Additional keyword arguments forwarded to the Mem0 client.
Returns:
list[ChatMessage]– List of ChatMessage (system role) objects containing the retrieved memories. User-provided Mem0 metadata is included in each message's meta. Mem0 retrieval fields such asmemory_id,user_id,score, and timestamps are included undermeta["mem0"].
Raises:
Mem0MemoryStoreError– If the Mem0 API call fails.
haystack_integrations.tools.mem0.retriever_tool
Mem0MemoryRetrieverTool
Bases: Tool
A tool that searches a Mem0MemoryStore for memories.
The user_id is injected at runtime from Agent State via inputs_from_state,
so a single tool instance can serve many users. The LLM only sees query and top_k by default.
If the LLM omits query or passes None, Mem0 returns all memories matching the injected scope.
Pass a custom inputs_from_state mapping to inject other supported Mem0 entity IDs such as
run_id, agent_id, or app_id. The mapping keys are Agent State keys and the values are this
tool's parameter names. For example, use
inputs_from_state={"user_id": "user_id", "session_id": "run_id"} to pass state["session_id"]
to the tool's run_id parameter at runtime.
Usage example
from haystack.components.agents import Agent
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.dataclasses import ChatMessage
from haystack_integrations.memory_stores.mem0 import Mem0MemoryStore
from haystack_integrations.tools.mem0 import Mem0MemoryRetrieverTool
store = Mem0MemoryStore()
retrieve_memories = Mem0MemoryRetrieverTool(memory_store=store, top_k=5)
agent = Agent(
chat_generator=OpenAIChatGenerator(model="gpt-4o-mini"),
tools=[retrieve_memories],
state_schema={"user_id": {"type": str}, "session_id": {"type": str}},
)
# The Agent can call retrieve_memories with a query for targeted recall,
# or without a query when it needs all scoped memories.
result = agent.run(
messages=[ChatMessage.from_user("What do you remember about me?")],
user_id="alice",
session_id="chat-42",
)
print(result["last_message"].text)
init
__init__(
*,
memory_store: Mem0MemoryStore,
top_k: int = 5,
name: str = "retrieve_memories",
description: str = _DEFAULT_DESCRIPTION,
parameters: dict[str, Any] = _PARAMETERS,
inputs_from_state: dict[str, str] = _DEFAULT_INPUTS_FROM_STATE
) -> None
Initialize the Mem0MemoryRetrieverTool.
Parameters:
- memory_store (
Mem0MemoryStore) – The Mem0MemoryStore instance to query. - top_k (
int) – Default maximum number of memories to return. The LLM may override this. - name (
str) – Tool name exposed to the LLM. - description (
str) – Tool description exposed to the LLM. - parameters (
dict[str, Any]) – JSON schema for the parameters exposed to the LLM. Defaults to optionalqueryandtop_k. - inputs_from_state (
dict[str, str]) – Mapping from Agent State keys to this tool's parameter names. Defaults to{"user_id": "user_id"}, which injectsstate["user_id"]into theuser_idparameter. To pass more Mem0 IDs at runtime, add the state fields to the Agent'sstate_schemaand map them to the corresponding tool parameters, for example{"user_id": "user_id", "session_id": "run_id", "agent_name": "agent_id", "app_name": "app_id"}.
warm_up
Initialize the Mem0 client. Subsequent calls are no-ops.
retrieve
retrieve(
query: str | None = None,
*,
top_k: int | None = None,
user_id: str | None = None,
run_id: str | None = None,
agent_id: str | None = None,
app_id: str | None = None
) -> str
Retrieve memories relevant to a query, or all memories when no query is provided.
Parameters:
- query (
str | None) – Text query used to search for relevant memories. If omitted orNone, all memories matching the scope are returned. - top_k (
int | None) – Maximum number of memories to return for query searches. Overrides the tool default. - user_id (
str | None) – User ID to scope the search. Injected from Agent State by default. - run_id (
str | None) – Run ID to scope the search. Can be injected with a custominputs_from_statemapping. - agent_id (
str | None) – Agent ID to scope the search. Can be injected with a custominputs_from_statemapping. - app_id (
str | None) – App ID to scope the search. Can be injected with a custominputs_from_statemapping.
Returns:
str– Retrieved memories formatted for the Agent, or a message when no memories were found.
to_dict
Serialize this tool to a dictionary.
from_dict
Deserialize this tool from a dictionary.
haystack_integrations.tools.mem0.writer_tool
Mem0MemoryWriterTool
Bases: Tool
A tool that writes a memory to a Mem0MemoryStore.
The user_id is injected at runtime from Agent State via inputs_from_state,
so a single tool instance can serve many users. The LLM only sees text and infer.
Pass a custom inputs_from_state mapping to inject other supported Mem0 entity IDs such as
run_id, agent_id, or app_id. The mapping keys are Agent State keys and the values are this
tool's parameter names. For example, use
inputs_from_state={"user_id": "user_id", "session_id": "run_id"} to pass state["session_id"]
to the tool's run_id parameter at runtime.
Usage example
from haystack.components.agents import Agent
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.dataclasses import ChatMessage
from haystack_integrations.memory_stores.mem0 import Mem0MemoryStore
from haystack_integrations.tools.mem0 import Mem0MemoryWriterTool
store = Mem0MemoryStore()
store_memory = Mem0MemoryWriterTool(memory_store=store)
agent = Agent(
chat_generator=OpenAIChatGenerator(model="gpt-4o-mini"),
tools=[store_memory],
state_schema={"user_id": {"type": str}, "session_id": {"type": str}},
)
result = agent.run(
messages=[ChatMessage.from_user("Remember that I prefer concise Python examples.")],
user_id="alice",
session_id="chat-42",
)
print(result["last_message"].text)
init
__init__(
*,
memory_store: Mem0MemoryStore,
name: str = "store_memory",
description: str = _DEFAULT_DESCRIPTION,
parameters: dict[str, Any] = _PARAMETERS,
inputs_from_state: dict[str, str] = _DEFAULT_INPUTS_FROM_STATE
) -> None
Initialize the Mem0MemoryWriterTool.
Parameters:
- memory_store (
Mem0MemoryStore) – The Mem0MemoryStore instance to write to. - name (
str) – Tool name exposed to the LLM. - description (
str) – Tool description exposed to the LLM. - parameters (
dict[str, Any]) – JSON schema for the parameters exposed to the LLM. Defaults totextandinfer. - inputs_from_state (
dict[str, str]) – Mapping from Agent State keys to this tool's parameter names. Defaults to{"user_id": "user_id"}, which injectsstate["user_id"]into theuser_idparameter. To pass more Mem0 IDs at runtime, add the state fields to the Agent'sstate_schemaand map them to the corresponding tool parameters, for example{"user_id": "user_id", "session_id": "run_id", "agent_name": "agent_id", "app_name": "app_id"}.
warm_up
Initialize the Mem0 client. Subsequent calls are no-ops.
store
store(
text: str,
*,
infer: bool = False,
user_id: str | None = None,
run_id: str | None = None,
agent_id: str | None = None,
app_id: str | None = None
) -> str
Store text as a memory.
Parameters:
- text (
str) – The information to store as a memory. - infer (
bool) – If True, Mem0 extracts memories from the text. If False, Mem0 stores the text as-is. - user_id (
str | None) – User ID to scope the stored memory. Injected from Agent State by default. - run_id (
str | None) – Run ID to scope the stored memory. Can be injected with a custominputs_from_statemapping. - agent_id (
str | None) – Agent ID to scope the stored memory. Can be injected with a custominputs_from_statemapping. - app_id (
str | None) – App ID to scope the stored memory. Can be injected with a custominputs_from_statemapping.
Returns:
str– A string indicating how many memory items were stored.
to_dict
Serialize this tool to a dictionary.
from_dict
Deserialize this tool from a dictionary.