347 lines
9.0 KiB
Markdown
347 lines
9.0 KiB
Markdown
# Migration Guide: Upgrading to mem0ai 1.0.0
|
|
|
|
This guide will help you migrate from mem0ai 0.x to the new 1.0.0 version.
|
|
|
|
## Breaking Changes
|
|
|
|
### 1. API Version Changes
|
|
|
|
**Before (0.x):**
|
|
```python
|
|
# Multiple API versions supported
|
|
memory = Memory(config=MemoryConfig(version="v1.1"))
|
|
|
|
# Client with output_format parameter
|
|
client.add(messages, output_format="v1.1")
|
|
client.search(query, version="v1", output_format="v1.1")
|
|
client.get_all(version="v1", output_format="v1.1")
|
|
```
|
|
|
|
**After (1.0.0):**
|
|
```python
|
|
# v1.1 format is default (v1.0 is deprecated)
|
|
memory = Memory() # Defaults to v1.1 format
|
|
|
|
# Client API with correct versioning behavior:
|
|
client.add(messages) # Uses v1 API endpoint, returns v1.1 format
|
|
client.search(query) # Uses v2 API endpoint, returns v1.1 format
|
|
client.get_all() # Uses v2 API endpoint, returns v1.1 format
|
|
```
|
|
|
|
### 2. API Versioning Strategy Clarification
|
|
|
|
**IMPORTANT: Understanding the New Versioning Strategy**
|
|
|
|
The API versioning strategy in mem0ai 1.0.0 has been unified and simplified:
|
|
|
|
#### **Endpoint vs Format Distinction**
|
|
- **API Endpoints** (`/v1/`, `/v2/`): Control which REST API version to use
|
|
- **Response Formats** (v1.0, v1.1): Control the structure of the returned data
|
|
|
|
#### **New Unified Strategy:**
|
|
- **Add operations**: Always use `/v1/` endpoint with v1.1 response format (no more output_format parameter)
|
|
- **Search operations**: Always use `/v2/` endpoint with v1.1 response format
|
|
- **Get_all operations**: Always use `/v2/` endpoint with v1.1 response format
|
|
- **Response format**: All operations now return v1.1 format (`{"results": [...]}`)
|
|
|
|
#### **What Changed:**
|
|
- ✅ **Consistent response format**: Everything returns v1.1 format
|
|
- ✅ **Simplified API**: No more `output_format` or `version` parameters to manage
|
|
- ✅ **Endpoint optimization**: Add uses v1, Search/Get use v2 for best performance
|
|
- ❌ **Removed v1.0 support**: v1.0 response format is no longer supported
|
|
|
|
### 3. Response Format Standardization
|
|
|
|
**Before (0.x):**
|
|
```python
|
|
# Inconsistent response formats based on api_version
|
|
result = memory.add(messages)
|
|
# Could return list or dict depending on version
|
|
|
|
memories = memory.get_all()
|
|
# Could return list or dict depending on version
|
|
```
|
|
|
|
**After (1.0.0):**
|
|
```python
|
|
# v1.1 format is now default (consistent dict format)
|
|
result = memory.add(messages)
|
|
# Returns: {"results": [...], "relations": [...] (if graph enabled)}
|
|
|
|
memories = memory.get_all()
|
|
# Returns: {"results": [...], "relations": [...] (if graph enabled)}
|
|
|
|
# v1.0 format still works but shows deprecation warning
|
|
memory_v1 = Memory(config=MemoryConfig(version="v1.0"))
|
|
result = memory_v1.add(messages) # Returns raw list [{...}] (with warning)
|
|
```
|
|
|
|
## Migration Steps
|
|
|
|
### Step 1: Update Dependencies
|
|
|
|
```bash
|
|
pip install mem0ai==1.0.0
|
|
```
|
|
|
|
### Step 2: Update Code
|
|
|
|
#### Memory API Changes
|
|
|
|
```python
|
|
# Before
|
|
from mem0 import Memory
|
|
|
|
memory = Memory(config=MemoryConfig(version="v1.1"))
|
|
|
|
# After - no changes needed, v1.1 is automatic
|
|
from mem0 import Memory
|
|
|
|
memory = Memory() # Defaults to v1.1 format
|
|
```
|
|
|
|
#### Client API Changes
|
|
|
|
```python
|
|
# Before
|
|
from mem0 import MemoryClient
|
|
|
|
client = MemoryClient(api_key="your-key")
|
|
|
|
# Remove all version and output_format parameters
|
|
result = client.add(messages, output_format="v1.1")
|
|
memories = client.search(query, version="v2", output_format="v1.1")
|
|
all_memories = client.get_all(version="v2", output_format="v1.1")
|
|
|
|
# After
|
|
from mem0 import MemoryClient
|
|
|
|
client = MemoryClient(api_key="your-key")
|
|
|
|
# Simplified API calls
|
|
result = client.add(messages)
|
|
memories = client.search(query)
|
|
all_memories = client.get_all()
|
|
```
|
|
|
|
#### Response Handling
|
|
|
|
```python
|
|
# Before - inconsistent response formats
|
|
result = memory.add(messages)
|
|
if isinstance(result, list):
|
|
# Handle v1.0 format
|
|
for item in result:
|
|
print(item)
|
|
else:
|
|
# Handle v1.1+ format
|
|
for item in result["results"]:
|
|
print(item)
|
|
|
|
# After - consistent response format
|
|
result = memory.add(messages)
|
|
for item in result["results"]:
|
|
print(item)
|
|
|
|
# Access graph relations if enabled
|
|
if "relations" in result:
|
|
for relation in result["relations"]:
|
|
print(relation)
|
|
```
|
|
|
|
### Step 3: Remove Deprecated Code
|
|
|
|
Remove any code that handled multiple API versions:
|
|
|
|
```python
|
|
# Remove these patterns
|
|
if version == "v1.0":
|
|
# handle old format
|
|
elif version == "v1.1":
|
|
# handle new format
|
|
|
|
# Remove version-specific logic
|
|
def handle_response(response, api_version):
|
|
if api_version == "v1.0":
|
|
return response # list format
|
|
else:
|
|
return response["results"] # dict format
|
|
```
|
|
|
|
### Step 4: Update Configuration
|
|
|
|
#### Vector Store Configuration
|
|
|
|
```python
|
|
# Before - version in config
|
|
config = MemoryConfig(
|
|
version="v1.1",
|
|
vector_store=VectorStoreConfig(...)
|
|
)
|
|
|
|
# After - no version needed
|
|
config = MemoryConfig(
|
|
vector_store=VectorStoreConfig(...)
|
|
)
|
|
```
|
|
|
|
#### Enhanced GCP Support
|
|
|
|
```python
|
|
# New: Enhanced Vertex AI configuration options
|
|
from mem0.configs.vector_stores.vertex_ai_vector_search import GoogleMatchingEngineConfig
|
|
|
|
# Option 1: Using credentials file (existing)
|
|
config = GoogleMatchingEngineConfig(
|
|
project_id="your-project",
|
|
credentials_path="/path/to/service-account.json",
|
|
# ... other params
|
|
)
|
|
|
|
# Option 2: Using credentials dict (new in v1.0.0)
|
|
service_account_info = {
|
|
"type": "service_account",
|
|
"project_id": "your-project",
|
|
# ... rest of service account JSON
|
|
}
|
|
|
|
config = GoogleMatchingEngineConfig(
|
|
project_id="your-project",
|
|
service_account_json=service_account_info,
|
|
# ... other params
|
|
)
|
|
```
|
|
|
|
## Testing Your Migration
|
|
|
|
### 1. Test Basic Functionality
|
|
|
|
```python
|
|
from mem0 import Memory
|
|
|
|
# Test memory operations
|
|
memory = Memory()
|
|
|
|
# Test adding memories
|
|
result = memory.add("I like pizza")
|
|
assert "results" in result
|
|
assert len(result["results"]) > 0
|
|
|
|
# Test searching
|
|
search_result = memory.search("food preferences", user_id="test_user")
|
|
assert "results" in search_result
|
|
|
|
# Test listing all
|
|
all_memories = memory.get_all(user_id="test_user")
|
|
assert "results" in all_memories
|
|
```
|
|
|
|
### 2. Test Client Operations
|
|
|
|
```python
|
|
from mem0 import MemoryClient
|
|
|
|
client = MemoryClient(api_key="your-api-key")
|
|
|
|
# Test all client methods work without deprecated parameters
|
|
messages = [{"role": "user", "content": "I love traveling"}]
|
|
result = client.add(messages, user_id="test_user")
|
|
assert "results" in result or isinstance(result, list) # Platform may vary
|
|
|
|
memories = client.search("travel", user_id="test_user")
|
|
all_memories = client.get_all(user_id="test_user")
|
|
```
|
|
|
|
## New Features in v1.0.0
|
|
|
|
### 1. Improved Vector Store Support
|
|
|
|
- Fixed OpenSearch vector store integration
|
|
- Enhanced error handling across all vector stores
|
|
- Better performance and reliability
|
|
|
|
### 2. Enhanced GCP Integration
|
|
|
|
- Support for service account JSON dict (in addition to file path)
|
|
- Improved Vertex AI Vector Search configuration
|
|
|
|
### 3. Simplified API
|
|
|
|
- Default API version is now v1.1 (v1.0 deprecated)
|
|
- Removed deprecated parameters
|
|
- Standardized response formats
|
|
|
|
## Deprecation Warning for v1.0 Users
|
|
|
|
If you're currently using `version="v1.0"`, you'll see a deprecation warning:
|
|
|
|
```
|
|
DeprecationWarning: The v1.0 API format is deprecated and will be removed in mem0ai 2.0.0.
|
|
Please upgrade to v1.1 format which returns a dict with 'results' key.
|
|
Set version='v1.1' in your MemoryConfig.
|
|
```
|
|
|
|
**To resolve this:**
|
|
```python
|
|
# Before (shows warning)
|
|
memory = Memory(config=MemoryConfig(version="v1.0"))
|
|
|
|
# After (no warning)
|
|
memory = Memory() # Uses v1.1 by default
|
|
# OR explicitly set v1.1
|
|
memory = Memory(config=MemoryConfig(version="v1.1"))
|
|
```
|
|
|
|
## Common Issues and Solutions
|
|
|
|
### Issue 1: "KeyError: 'results'"
|
|
|
|
**Problem:** Your code expects the old list format response.
|
|
|
|
**Solution:** Update response handling:
|
|
```python
|
|
# Before
|
|
for memory in response: # Assuming response is a list
|
|
print(memory)
|
|
|
|
# After
|
|
for memory in response["results"]:
|
|
print(memory)
|
|
```
|
|
|
|
### Issue 2: "TypeError: unexpected keyword argument 'output_format'"
|
|
|
|
**Problem:** Code still passing deprecated parameters.
|
|
|
|
**Solution:** Remove all deprecated parameters:
|
|
```python
|
|
# Before
|
|
client.add(messages, output_format="v1.1", async_mode=True)
|
|
|
|
# After
|
|
client.add(messages)
|
|
```
|
|
|
|
### Issue 3: Vector Store Connection Issues
|
|
|
|
**Problem:** Vector store tests failing after upgrade.
|
|
|
|
**Solution:** The OpenSearch integration has been fixed. Update your test configurations and retry.
|
|
|
|
## Support
|
|
|
|
If you encounter issues during migration:
|
|
|
|
1. Check the [GitHub Issues](https://github.com/mem0ai/mem0/issues) for similar problems
|
|
2. Review the updated [API documentation](https://docs.mem0.ai/)
|
|
3. Create a new issue with your specific migration problem
|
|
|
|
## Summary
|
|
|
|
mem0ai 1.0.0 provides a cleaner, more consistent API while removing deprecated features. The migration primarily involves:
|
|
|
|
1. Removing deprecated parameters (`output_format`, `version`, `async_mode`)
|
|
2. Updating response handling to expect consistent `{"results": [...]}` format
|
|
3. Updating dependencies to v1.0.0
|
|
|
|
Most applications will require minimal changes, mainly removing deprecated parameters and updating response parsing logic. |