MIGRATION_GUIDE_v1.0.md
What changed? We simplified the API by removing confusing version parameters. Now everything returns a consistent format: {"results": [...]}.
What you need to do:
pip install mem0ai==1.0.0version and output_format parameters from your coderesult["results"] instead of treating responses as listsTime needed: ~5-10 minutes for most projects
pip install mem0ai==1.0.0
If you're using the Memory API:
# Before
memory = Memory(config=MemoryConfig(version="v1.1"))
result = memory.add("I like pizza")
# After
memory = Memory() # That's it - version is automatic now
result = memory.add("I like pizza")
If you're using the Client API:
# Before
client.add(messages, output_format="v1.1")
client.search(query, version="v2", output_format="v1.1")
# After
client.add(messages) # Just remove those extra parameters
client.search(query)
All responses now use the same format: a dictionary with "results" key.
# Before - you might have done this
result = memory.add("I like pizza")
for item in result: # Treating it as a list
print(item)
# After - do this instead
result = memory.add("I like pizza")
for item in result["results"]: # Access the results key
print(item)
# Graph relations (if you use them)
if "relations" in result:
for relation in result["relations"]:
print(relation)
The platform client (MemoryClient) now supports the same flexible message formats as the OSS version:
from mem0 import MemoryClient
client = MemoryClient(api_key="your-key")
# All three formats now work:
# 1. Single string (automatically converted to user message)
client.add("I like pizza", user_id="alice")
# 2. Single message dictionary
client.add({"role": "user", "content": "I like pizza"}, user_id="alice")
# 3. List of messages (conversation)
client.add([
{"role": "user", "content": "I like pizza"},
{"role": "assistant", "content": "I'll remember that!"}
], user_id="alice")
The async_mode parameter now defaults to True but can be configured:
# Default behavior (async_mode=True)
client.add(messages, user_id="alice")
# Explicitly set async mode
client.add(messages, user_id="alice", async_mode=True)
# Disable async mode if needed
client.add(messages, user_id="alice", async_mode=False)
Note: async_mode=True provides better performance for most use cases. Only set it to False if you have specific synchronous processing requirements.
For most users, that's all you need to know. The changes are:
version or output_format parameters{"results": [...]} response formatGetting KeyError: 'results'?
Your code is still treating the response as a list. Update it:
# Change this:
for memory in response:
# To this:
for memory in response["results"]:
Getting TypeError: unexpected keyword argument?
You're still passing old parameters. Remove them:
# Change this:
client.add(messages, output_format="v1.1")
# To this:
client.add(messages)
Seeing deprecation warnings?
Remove any explicit version="v1.0" from your config:
# Change this:
memory = Memory(config=MemoryConfig(version="v1.0"))
# To this:
memory = Memory()
True but users can override if neededIf you configured vector stores with version:
# Before
config = MemoryConfig(
version="v1.1",
vector_store=VectorStoreConfig(...)
)
# After
config = MemoryConfig(
vector_store=VectorStoreConfig(...)
)
Quick sanity check:
from mem0 import Memory
memory = Memory()
# Add should return a dict with "results"
result = memory.add("I like pizza", user_id="test")
assert "results" in result
# Search should return a dict with "results"
search = memory.search("food", user_id="test")
assert "results" in search
# Get all should return a dict with "results"
all_memories = memory.get_all(user_id="test")
assert "results" in all_memories
print("✅ Migration successful!")