diff --git a/docs/docs.json b/docs/docs.json index 2f3d2f566..5befd49e5 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -24,9 +24,7 @@ { "group": "Start Here", "icon": "home", - "pages": [ - "introduction" - ] + "pages": ["introduction"] } ] }, @@ -107,14 +105,13 @@ { "group": "Support & Troubleshooting", "icon": "life-buoy", - "pages": [ - "platform/faqs" - ] + "pages": ["platform/faqs"] }, { "group": "Migration Guide", "icon": "arrow-right", "pages": [ + "migration/oss-to-platform", "migration/v0-to-v1", "migration/breaking-changes", "migration/api-changes" @@ -123,9 +120,7 @@ { "group": "Contribute", "icon": "clipboard-list", - "pages": [ - "platform/contribute" - ] + "pages": ["platform/contribute"] } ] }, @@ -280,10 +275,7 @@ { "group": "Community & Support", "icon": "users", - "pages": [ - "contributing/development", - "contributing/documentation" - ] + "pages": ["contributing/development", "contributing/documentation"] } ] }, @@ -307,9 +299,7 @@ { "group": "Getting Started", "icon": "lightbulb", - "pages": [ - "cookbooks/overview" - ] + "pages": ["cookbooks/overview"] }, { "group": "Essentials", @@ -381,9 +371,7 @@ { "group": "Overview", "icon": "plug", - "pages": [ - "integrations" - ] + "pages": ["integrations"] }, { "group": "Agent Frameworks", @@ -413,9 +401,7 @@ { "group": "Cloud & Infrastructure", "icon": "cloud", - "pages": [ - "integrations/aws-bedrock" - ] + "pages": ["integrations/aws-bedrock"] }, { "group": "Developer Tools", @@ -437,10 +423,7 @@ { "group": "Getting Started", "icon": "rocket", - "pages": [ - "api-reference", - "api-reference/organizations-projects" - ] + "pages": ["api-reference", "api-reference/organizations-projects"] }, { "group": "Core Memory Operations", @@ -470,10 +453,7 @@ { "group": "Events APIs", "icon": "clock", - "pages": [ - "api-reference/events/get-events", - "api-reference/events/get-event" - ] + "pages": ["api-reference/events/get-events", "api-reference/events/get-event"] }, { "group": "Entities APIs", @@ -525,16 +505,12 @@ { "group": "Changelog", "icon": "rocket", - "pages": [ - "changelog" - ] + "pages": ["changelog"] }, { "group": "Legacy Docs", "icon": "archive", - "pages": [ - "v0x/introduction" - ] + "pages": ["v0x/introduction"] } ] } @@ -555,11 +531,7 @@ { "group": "Getting Started", "icon": "rocket", - "pages": [ - "v0x/introduction", - "v0x/quickstart", - "v0x/faqs" - ] + "pages": ["v0x/introduction", "v0x/quickstart", "v0x/faqs"] }, { "group": "Core Concepts", @@ -1075,4 +1047,4 @@ "destination": "/platform/features/memory-export" } ] -} \ No newline at end of file +} diff --git a/docs/migration/oss-to-platform.mdx b/docs/migration/oss-to-platform.mdx new file mode 100644 index 000000000..e9efea36e --- /dev/null +++ b/docs/migration/oss-to-platform.mdx @@ -0,0 +1,388 @@ +--- +title: "Migrate from Open Source to Platform" +description: "Migrate your Mem0 Open Source implementation to Mem0 Platform for managed infrastructure and advanced features." +icon: "cloud-arrow-up" +versionFrom: "Open Source" +versionTo: "Platform" +--- + +# Migrate from Open Source to Platform + +Move your Mem0 implementation to managed infrastructure with enterprise features. + +| Scope | Effort | Downtime | +| --------------------- | -------------- | ---------------------------- | +| Infrastructure & Code | Low (~30 mins) | None (Parallel run possible) | + + + **Why migrate to Platform?** + + - **Time to Market**: Set up in 5 minutes vs 30+ minutes for OSS configuration + - **Enterprise Ready**: SOC2 Type II compliance, GDPR support, audit logs + - **Advanced Features**: Webhooks, memory export, analytics dashboard, custom categories + - **Multi-tenancy**: Organizations, projects, and team management out of the box + - **Zero Infrastructure**: No vector database, LLM provider, or maintenance overhead + - **Enhanced Search**: Reranking, keyword expansion, and advanced filters + - **Production Grade**: Auto-scaling, high availability, dedicated support + + +## Plan + +1. **Sign up**: Create an account on [Mem0 Platform](https://app.mem0.ai). +2. **Get API Key**: Navigate to **Settings > API Keys** and generate a new key. +3. **Review Usage**: Identify where you instantiate `Memory` and where you call `search` or `get_all`. + +## Migrate + +### 1. Install or Update SDK + +Ensure you have the latest version of the SDK, which supports both OSS and Platform clients. + +```bash +pip install mem0ai --upgrade +``` + +### 2. Update Initialization + +Switch from the local `Memory` class to the managed `MemoryClient`. + +```python Open Source (Old) +from mem0 import Memory + +config = { + "vector_store": { + "provider": "qdrant", + "config": {"host": "localhost", "port": 6333} + }, + "llm": { + "provider": "openai", + "config": {"model": "gpt-4"} + } +} + +m = Memory.from_config(config) +``` + +```python Platform (New) +from mem0 import MemoryClient +import os + +# Set MEM0_API_KEY in environment or pass explicitly +client = MemoryClient(api_key="m0-...") +``` + + + Run `client.get_all(filters={"user_id": "test_connection"})` to verify your API key works. It should return an empty list or valid results. + + +### 3. Update Retrieval Calls (Critical) + + + **Critical Change**: Platform uses v2 endpoints that require filtering parameters to be nested inside a `filters` dictionary. + + +| Method | Open Source | Platform | +| ------ | ----------- | -------- | +| `search()` | `m.search(query, user_id="alex")` | `client.search(query, filters={"user_id": "alex"})` | +| `get_all()` | `m.get_all(user_id="alex")` | `client.get_all(filters={"user_id": "alex"})` | +| `add()` | `m.add(memory, user_id="alex")` | `client.add(memory, user_id="alex")` | +| `delete()` | `m.delete(memory_id)` | `client.delete(memory_id)` | +| `delete_all()` | `m.delete_all(user_id="alex")` | `client.delete_all(user_id="alex")` | + +Note: `add()` and `delete()` methods remain unchanged. The `update()` method is not available in Platform - use delete + add pattern instead. + + + + + ```python Open Source (Old) + # Basic search with user filter + results = m.search("user's preferences", user_id="alex") + + # Search with multiple filters + results = m.search("meeting notes", user_id="alex", agent_id="assistant") + ``` + + ```python Platform (New) + # Basic search with user filter in filters dict + results = client.search("user's preferences", filters={"user_id": "alex"}) + + # Search with multiple filters + results = client.search("meeting notes", filters={ + "AND": [ + {"user_id": "alex"}, + {"agent_id": "assistant"} + ] + }) + ``` + + + + + + ```python Open Source (Old) + # Get all memories for a user + memories = m.get_all(user_id="alex", limit=10) + + # Get memories with pagination + memories = m.get_all(user_id="alex", limit=5, offset=10) + ``` + + ```python Platform (New) + # Get all memories for a user + memories = client.get_all(filters={"user_id": "alex"}, limit=10) + + # Get memories with pagination + memories = client.get_all(filters={"user_id": "alex"}, limit=5, offset=10) + ``` + + + + + + ```python Open Source (Old) + # Add a simple memory + m.add("Loves coffee", user_id="alex") + + # Add memory with metadata + m.add("Completed marathon", user_id="alex", metadata={"category": "achievement"}) + ``` + + ```python Platform (New) + # Add a simple memory (no change) + client.add("Loves coffee", user_id="alex") + + # Add memory with metadata (no change) + client.add("Completed marathon", user_id="alex", metadata={"category": "achievement"}) + ``` + + + + + + ```python Open Source (Old) + # Delete specific memory + m.delete(memory_id="mem_123") + + # Delete all memories for user + m.delete_all(user_id="alex") + ``` + + ```python Platform (New) + # Delete specific memory (no change) + client.delete(memory_id="mem_123") + + # Delete all memories for user (no change) + client.delete_all(user_id="alex") + ``` + + + + + + ```python Open Source (Old) + # Update memory content + m.update(memory_id="mem_123", new_memory="Updated content") + ``` + + ```python Platform (New) + # Update memory (not available in Platform) + # Use delete + add pattern instead + client.delete(memory_id="mem_123") + client.add("Updated content", user_id="alex") + ``` + + + + +## Platform-Exclusive Features + +The Platform introduces powerful capabilities not available in OSS: + + + + + **Why it matters**: Manage multiple teams and projects with hierarchical access control. + + ```python + # Create an organization + org = client.organizations.create(name="Acme Corp") + + # Create projects within the organization + project = client.projects.create( + name="Customer Support Bot", + org_id=org.id + ) + + # Add team members + client.organizations.add_member( + org_id=org.id, + email="team@acme.com", + role="admin" + ) + ``` + + + + + **Why it matters**: Instantly react to memory changes in your application. Build features like notifications, audit logs, or sync with external systems. + + ```python + # Create webhook for memory events + webhook = client.webhooks.create( + project_id="proj_123", + name="Memory Events", + url="https://your-app.com/webhooks/mem0", + events=["memory_add", "memory_delete"] + ) + + # Webhook payload example: + # { + # "event": "memory_add", + # "memory_id": "mem_456", + # "user_id": "user_789", + # "memory": "User prefers dark mode", + # "timestamp": "2024-01-15T10:30:00Z" + # } + ``` + + + + + **Why it matters**: Export your data for compliance, analytics, or migration with custom schemas and filters. + + ```python + # Export memories with custom schema + export_job = client.memories.export( + filters={ + "AND": [ + {"user_id": "user_123"}, + {"created_at": {"gte": "2024-01-01"}} + ] + }, + output_format="json", + schema={ + "memory": str, + "categories": list[str], + "timestamp": str + } + ) + + # Download when ready + if client.memories.get_export(export_job.id).status == "completed": + data = client.memories.download_export(export_job.id) + ``` + + + + + **Why it matters**: Get better search results with AI-powered reranking and keyword expansion. + + ```python + # Search with reranking for better results + results = client.search( + "user preferences", + filters={"user_id": "alex"}, + rerank=True, # Platform exclusive + limit=5 + ) + + # Search with keyword expansion + results = client.search( + "coffee order", + filters={"user_id": "alex"}, + keywords=["latte", "espresso", "cappuccino"], + expand_keywords=True + ) + ``` + + + + + **Why it matters**: Use domain-specific categories instead of generic ones for better organization. + + ```python + # Set custom categories for your project + client.projects.update_categories( + project_id="proj_123", + categories=[ + "Customer Preferences", + "Product Feedback", + "Support Issues", + "Feature Requests" + ] + ) + + # Memories will use these categories + client.add( + "User wants dark mode in dashboard", + user_id="alex", + categories=["Customer Preferences"] + ) + ``` + + + + + **Why it matters**: Track all memory operations for audit trails, usage analytics, and debugging. + + ```python + # Get audit trail of all memory operations + events = client.events.list( + filters={ + "AND": [ + {"user_id": "alex"}, + {"event_type": "memory_add"}, + {"timestamp": {"gte": "2024-01-01"}} + ] + }, + limit=100 + ) + + # Monitor usage patterns + for event in events: + print(f"{event.timestamp}: {event.event_type} - {event.memory_id}") + ``` + + + +## Summary of Changes + +| Feature | Open Source | Platform | Action Required | +| ------- | ----------- | -------- | --------------- | +| **Initialization** | `Memory.from_config(config)` | `MemoryClient(api_key)` | Replace config object with API key | +| **Search Method** | `m.search(query, user_id="x")` | `client.search(query, filters={"user_id": "x"})` | Move filtering params into `filters` dict | +| **Get All Method** | `m.get_all(user_id="x")` | `client.get_all(filters={"user_id": "x"})` | Move filtering params into `filters` dict | +| **Add Method** | `m.add(memory, user_id="x")` | `client.add(memory, user_id="x")` | No change | +| **Delete Method** | `m.delete(memory_id)` | `client.delete(memory_id)` | No change | +| **Delete All** | `m.delete_all(user_id="x")` | `client.delete_all(user_id="x")` | No change | +| **Update Method** | `m.update(memory_id, new_memory)` | Use delete + add pattern | Replace with delete then add | +| **Config** | Local vector store + LLM config | Managed cloud infrastructure | Remove local config setup | + +## Rollback plan + +If you encounter issues, you can revert immediately by switching your import back. + +1. **Revert Code**: Change `MemoryClient` back to `Memory`. +2. **Restore Config**: Uncomment your local vector store and LLM configuration. +3. **Verify**: Ensure your local vector database is still running and accessible. + +## Next Steps + +- [Platform Dashboard](https://app.mem0.ai) - Monitor usage and manage settings. +- [Webhooks Setup](/platform/features/webhooks) - Configure real-time event notifications. +- [Organizations & Projects](/platform/features/organizations-projects) - Set up multi-tenancy for your team. + + + + +