diff --git a/docs/core-concepts/memory-operations/add.mdx b/docs/core-concepts/memory-operations/add.mdx index 23d9f772d..1c4485775 100644 --- a/docs/core-concepts/memory-operations/add.mdx +++ b/docs/core-concepts/memory-operations/add.mdx @@ -83,6 +83,50 @@ await client.add(messages, { Expect a `status: "PENDING"` response with an `event_id`. Poll `GET /v1/event/{event_id}/` to confirm completion. +### Automatic conversation context + +On the Platform, you only send new messages. Mem0 automatically pulls the earlier messages that share the same identifiers (`user_id`, and `run_id` if you use one) and uses them as context when extracting memories, so you never need to resend conversation history. + +This means a follow-up turn is understood against what came before it: + + +```python Python +# First interaction +client.add( + [{"role": "user", "content": "My dog's name is Biscuit. He's a golden retriever."}], + user_id="alice", +) + +# Later — send only the new turn, no history +client.add( + [{"role": "user", "content": "He turned 5 today, and I'm taking him to the vet on Friday."}], + user_id="alice", +) +# Stored as: "User's dog Biscuit turned 5" — "He" is resolved against the earlier turn. +``` + +```javascript JavaScript +// First interaction +await client.add( + [{ role: "user", content: "My dog's name is Biscuit. He's a golden retriever." }], + { userId: "alice" }, +); + +// Later — send only the new turn, no history +await client.add( + [{ role: "user", content: "He turned 5 today, and I'm taking him to the vet on Friday." }], + { userId: "alice" }, +); +// Stored as: "User's dog Biscuit turned 5" — "He" is resolved against the earlier turn. +``` + + +Without that earlier turn, the same message can only be stored as "User's male pet turned 5", because there is nothing to resolve "He" against. Scope each conversation with a consistent `user_id` (plus `run_id` for a distinct session) and Mem0 handles the rest. + + + This is default behavior and needs no configuration. Earlier SDK versions gated it behind a `version="v2"` argument on `add`; that argument no longer exists and is ignored if sent. + + ## Add with Mem0 Open Source diff --git a/docs/docs.json b/docs/docs.json index e28f6558e..8b64c9ed3 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -85,7 +85,6 @@ "platform/features/advanced-retrieval", "platform/advanced-memory-operations", "platform/features/criteria-retrieval", - "platform/features/contextual-add", "platform/features/custom-instructions", "platform/features/memory-decay" ] @@ -609,6 +608,10 @@ ] }, "redirects": [ + { + "source": "/platform/features/contextual-add", + "destination": "/core-concepts/memory-operations/add" + }, { "source": "/changelog/openclaw", "destination": "/changelog/sdk" diff --git a/docs/llms.txt b/docs/llms.txt index 6280449ea..755cae4d7 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -206,7 +206,6 @@ If the user is on a pre-current major (Python < 2, TS < 3, or Platform `output_f - [Advanced Retrieval](https://docs.mem0.ai/platform/features/advanced-retrieval) [Platform]: Use when the user needs keyword search, reranking, or hybrid retrieval. - [Criteria-Based Retrieval](https://docs.mem0.ai/platform/features/criteria-retrieval) [Platform]: Use when targeting memories by custom criteria, not just semantic similarity. - [Temporal Reasoning](https://docs.mem0.ai/platform/features/temporal-reasoning) [Platform]: Use when time-aware searches like last week, upcoming, or right now need better result ordering. -- [Contextual Add](https://docs.mem0.ai/platform/features/contextual-add) [Platform]: Use when `add()` should consider the surrounding conversation, not just the latest turn. - [Custom Instructions](https://docs.mem0.ai/platform/features/custom-instructions) [Platform]: Use when tailoring what Mem0 extracts and stores on Platform. - [Memory Decay](https://docs.mem0.ai/platform/features/memory-decay) [Platform]: Use when search results should boost recently-reinforced memories and dampen stale ones. Opt in per project; applies at search time and never filters candidates out. - [Advanced Memory Operations](https://docs.mem0.ai/platform/advanced-memory-operations) [Platform]: Use when basic CRUD is not enough - batch ops, complex filters, workflows. diff --git a/docs/platform/features/contextual-add.mdx b/docs/platform/features/contextual-add.mdx deleted file mode 100644 index bf55a1a30..000000000 --- a/docs/platform/features/contextual-add.mdx +++ /dev/null @@ -1,251 +0,0 @@ ---- -title: Contextual Memory Creation -description: "Add messages with automatic context management - no manual history tracking required" ---- - -## What is Contextual Memory Creation? - -Contextual memory creation automatically manages message history, allowing you to focus on building AI experiences without manually tracking interactions. Simply send new messages, and Mem0 handles the context automatically. - - -```python Python -# Just send new messages - Mem0 handles the context -messages = [ - {"role": "user", "content": "I love Italian food, especially pasta"}, - {"role": "assistant", "content": "Great! I'll remember your preference for Italian cuisine."} -] - -client.add(messages, user_id="user123") -``` - -```javascript JavaScript -// Just send new messages - Mem0 handles the context -const messages = [ - {"role": "user", "content": "I love Italian food, especially pasta"}, - {"role": "assistant", "content": "Great! I'll remember your preference for Italian cuisine."} -]; - -await client.add(messages, { userId: "user123" }); -``` - - -## Why Use Contextual Memory Creation? - -- **Simple**: Send only new messages, no manual history tracking -- **Efficient**: Smaller payloads and faster processing -- **Automatic**: Context management handled by Mem0 -- **Reliable**: No risk of missing interaction history -- **Scalable**: Works seamlessly as your application grows - -## How It Works - -### Basic Usage - - -```python Python -# First interaction -messages1 = [ - {"role": "user", "content": "Hi, I'm Sarah from New York"}, - {"role": "assistant", "content": "Hello Sarah! Nice to meet you."} -] -client.add(messages1, user_id="sarah") - -# Later interaction - just send new messages -messages2 = [ - {"role": "user", "content": "I'm planning a trip to Italy next month"}, - {"role": "assistant", "content": "How exciting! Italy is beautiful this time of year."} -] -client.add(messages2, user_id="sarah") -# Mem0 automatically knows Sarah is from New York and can use this context -``` - -```javascript JavaScript -// First interaction -const messages1 = [ - {"role": "user", "content": "Hi, I'm Sarah from New York"}, - {"role": "assistant", "content": "Hello Sarah! Nice to meet you."} -]; -await client.add(messages1, { userId: "sarah" }); - -// Later interaction - just send new messages -const messages2 = [ - {"role": "user", "content": "I'm planning a trip to Italy next month"}, - {"role": "assistant", "content": "How exciting! Italy is beautiful this time of year."} -]; -await client.add(messages2, { userId: "sarah" }); -// Mem0 automatically knows Sarah is from New York and can use this context -``` - - -## Organization Strategies - -Choose the right approach based on your application's needs: - -### User-Level Memories (`user_id` only) - -**Best for:** Personal preferences, profile information, long-term user data - - -```python Python -# Persistent user memories across all interactions -messages = [ - {"role": "user", "content": "I'm allergic to nuts and dairy"}, - {"role": "assistant", "content": "I've noted your allergies for future reference."} -] - -client.add(messages, user_id="user123") -# This allergy info will be available in ALL future interactions -``` - -```javascript JavaScript -// Persistent user memories across all interactions -const messages = [ - {"role": "user", "content": "I'm allergic to nuts and dairy"}, - {"role": "assistant", "content": "I've noted your allergies for future reference."} -]; - -await client.add(messages, { userId: "user123" }); -// This allergy info will be available in ALL future interactions -``` - - -### Session-Specific Memories (`user_id` + `run_id`) - -**Best for:** Task-specific context, separate interaction threads, project-based sessions - - -```python Python -# Trip planning session -messages1 = [ - {"role": "user", "content": "I want to plan a 5-day trip to Tokyo"}, - {"role": "assistant", "content": "Perfect! Let's plan your Tokyo adventure."} -] -client.add(messages1, user_id="user123", run_id="tokyo-trip-2024") - -# Later in the same trip planning session -messages2 = [ - {"role": "user", "content": "I prefer staying near Shibuya"}, - {"role": "assistant", "content": "Great choice! Shibuya is very convenient."} -] -client.add(messages2, user_id="user123", run_id="tokyo-trip-2024") - -# Different session for work project (separate context) -work_messages = [ - {"role": "user", "content": "Let's discuss the Q4 marketing strategy"}, - {"role": "assistant", "content": "Sure! What are your main goals for Q4?"} -] -client.add(work_messages, user_id="user123", run_id="q4-marketing") -``` - -```javascript JavaScript -// Trip planning session -const messages1 = [ - {"role": "user", "content": "I want to plan a 5-day trip to Tokyo"}, - {"role": "assistant", "content": "Perfect! Let's plan your Tokyo adventure."} -]; -await client.add(messages1, { userId: "user123", runId: "tokyo-trip-2024" }); - -// Later in the same trip planning session -const messages2 = [ - {"role": "user", "content": "I prefer staying near Shibuya"}, - {"role": "assistant", "content": "Great choice! Shibuya is very convenient."} -]; -await client.add(messages2, { userId: "user123", runId: "tokyo-trip-2024" }); - -// Different session for work project (separate context) -const workMessages = [ - {"role": "user", "content": "Let's discuss the Q4 marketing strategy"}, - {"role": "assistant", "content": "Sure! What are your main goals for Q4?"} -]; -await client.add(workMessages, { userId: "user123", runId: "q4-marketing" }); -``` - - -## Real-World Use Cases - - - -```python Python -# Support ticket context - keeps interaction focused -messages = [ - {"role": "user", "content": "My subscription isn't working"}, - {"role": "assistant", "content": "I can help with that. What specific issue are you experiencing?"}, - {"role": "user", "content": "I can't access premium features even though I paid"} -] - -# Each support ticket gets its own run_id -client.add(messages, - user_id="customer123", - run_id="ticket-2024-001" -) -``` - - -```python Python -# Personal preferences (persistent across all interactions) -preference_messages = [ - {"role": "user", "content": "I prefer morning workouts and vegetarian meals"}, - {"role": "assistant", "content": "Got it! I'll keep your fitness and dietary preferences in mind."} -] - -client.add(preference_messages, user_id="user456") - -# Daily planning session (session-specific) -planning_messages = [ - {"role": "user", "content": "Help me plan tomorrow's schedule"}, - {"role": "assistant", "content": "Of course! I'll consider your morning workout preference."} -] - -client.add(planning_messages, - user_id="user456", - run_id="daily-plan-2024-01-15" -) -``` - - -```python Python -# Student profile (persistent) -profile_messages = [ - {"role": "user", "content": "I'm studying computer science and struggle with math"}, - {"role": "assistant", "content": "I'll tailor explanations to help with math concepts."} -] - -client.add(profile_messages, user_id="student789") - -# Specific lesson session -lesson_messages = [ - {"role": "user", "content": "Can you explain algorithms?"}, - {"role": "assistant", "content": "Sure! I'll explain algorithms with math-friendly examples."} -] - -client.add(lesson_messages, - user_id="student789", - run_id="algorithms-lesson-1" -) -``` - - - -## Best Practices - -### ✅ Do -- **Organize by context scope**: Use `user_id` only for persistent data, add `run_id` for session-specific context -- **Keep messages focused** on the current interaction -- **Test with real interaction flows** to ensure context works as expected - -### ❌ Don't -- Send duplicate messages or interaction history -- Skip identifiers like `user_id` or `run_id` that scope the memory -- Mix contextual and non-contextual approaches in the same application - -## Troubleshooting - -| Issue | Solution | -|-------|----------| -| **Context not working** | Ensure each call uses the same `user_id` / `run_id` combo; version is automatic | -| **Wrong context retrieved** | Check if you need separate `run_id` values for different interaction topics | -| **Missing interaction history** | Verify all messages in the interaction thread use the same `user_id` and `run_id` | -| **Too much irrelevant context** | Use more specific `run_id` values to separate different interaction types | - - -