4.5 KiB
4.5 KiB
Python SDK (mem0/)
The mem0ai package on PyPI. Memory core plus five pluggable provider categories.
Commands
hatch shell dev_py_3_11 # or dev_py_3_9 / dev_py_3_10 / dev_py_3_12
pre-commit install # first time only; runs ruff + isort on commit
make lint # ruff check
make format # ruff format
make sort # isort mem0/
make test # pytest tests/
make test-py-3.9 # pin a Python version (3.9 through 3.12)
make install_all # optional deps; run before the full test suite
make build # hatch build
Use hatch for environments and dependencies. Do not use pip or conda.
Conventions
- Python 3.9 through 3.12. Code must run on 3.9.
- Ruff, line length 120.
cli/python/uses 100; do not carry that config across. - isort,
profile = "black", first-partymem0andmem0_cli. - Pydantic v2 for every data model and config class.
- pytest with pytest-mock and pytest-asyncio. Tests live in
../tests/. - Source files are
snake_case.py.
Layout
mem0/
├── memory/ Memory, AsyncMemory
├── client/ MemoryClient, AsyncMemoryClient
├── configs/ MemoryConfig and per-category config models
├── llms/ 24 providers
├── embeddings/ 15 providers
├── vector_stores/ 30 providers
├── graphs/ 4 providers
└── reranker/ 5 providers
Provider pattern
Every category follows the same shape: a base.py with the abstract class, one module per provider, config models in configs.py, registration in __init__.py.
| Category | Count | Examples |
|---|---|---|
| LLMs | 24 | OpenAI, Anthropic, AWS Bedrock, Azure OpenAI, Gemini, Groq, Ollama, Together, DeepSeek, vLLM, LiteLLM, LM Studio, xAI |
| Vector stores | 30 | Qdrant, Pinecone, Chroma, Weaviate, Milvus, MongoDB, Redis, Elasticsearch, pgvector, Supabase, Faiss, S3 Vectors |
| Embeddings | 15 | OpenAI, Azure OpenAI, Gemini, HuggingFace, FastEmbed, Together, AWS Bedrock, Ollama, Vertex AI |
| Graph stores | 4 | Neo4j, Memgraph, Kuzu, Apache AGE |
| Rerankers | 5 | Cohere, HuggingFace, LLM-based, Sentence Transformer, Zero Entropy |
Adding a provider
- Create
mem0/<category>/<provider_name>.py. - Inherit the abstract base class from
mem0/<category>/base.py. - Add its config to
mem0/<category>/configs.pyif the category uses one. - Register it in
mem0/<category>/__init__.py. - Add tests under
tests/<category>/<provider_name>/. - Put new dependencies in an optional group in
pyproject.toml, never in coredependencies. - Match an existing provider in the same category exactly: method signatures, error handling, config structure.
- Add an integration guide under
docs/integrations/.
Public API
| Class | Purpose | Import |
|---|---|---|
Memory |
Self-hosted, sync | from mem0 import Memory |
AsyncMemory |
Self-hosted, async | from mem0 import AsyncMemory |
MemoryClient |
Hosted platform, sync | from mem0 import MemoryClient |
AsyncMemoryClient |
Hosted platform, async | from mem0 import AsyncMemoryClient |
Both Memory and MemoryClient expose the same surface:
| Method | Purpose |
|---|---|
add(messages, *, user_id, agent_id, run_id, metadata) |
Store a memory |
search(query, *, user_id, agent_id, run_id, limit, filters) |
Search memories |
get(memory_id) |
Fetch one memory |
get_all(*, user_id, agent_id, run_id, limit) |
List memories |
update(memory_id, data) |
Update a memory |
delete(memory_id) |
Delete a memory |
delete_all(*, user_id, agent_id, run_id) |
Delete a scope |
history(memory_id) |
Change history for a memory |
Changing any of these signatures means updating docs/ in the same PR.
Import paths
| What | Import |
|---|---|
| Memory classes | from mem0 import Memory, AsyncMemory |
| Platform client | from mem0 import MemoryClient, AsyncMemoryClient |
| Configuration | from mem0.configs.base import MemoryConfig |
| LLM provider | from mem0.llms.<provider> import <ProviderLLM> |
| Embedding provider | from mem0.embeddings.<provider> import <ProviderEmbedding> |
| Vector store provider | from mem0.vector_stores.<provider> import <ProviderVectorStore> |
Graph memory
An optional layer on top of vector memory for relationship-aware retrieval, configured through the graph section of MemoryConfig. It supplements vector search rather than replacing it.