What changed? We simplified the API by removing confusing version parameters. Now everything returns a consistent format: {"results": [...]}.
What you need to do:
- Upgrade:
pip install mem0ai==1.0.0 - Remove
versionandoutput_formatparameters from your code - Update response handling to use
result["results"]instead of treating responses as lists
Time needed: ~5-10 minutes for most projects
pip install mem0ai==1.0.0If 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:
- ✅ No more
versionoroutput_formatparameters - ✅ Consistent
{"results": [...]}response format - ✅ Cleaner, simpler API
Getting 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()- Better vector stores: Fixed OpenSearch and improved reliability across all stores
- Cleaner API: One way to do things, no more confusing options
- Enhanced GCP support: Better Vertex AI configuration options
- Flexible message input: Platform client now accepts strings, dicts, and lists (aligned with OSS)
- Configurable async_mode: Now defaults to
Truebut users can override if needed
- Check GitHub Issues
- Read the documentation
- Open a new issue if you're stuck
If 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!")