docs(platform): align Platform docs with v3 SDK behavior (#5849)

This commit is contained in:
Kartik
2026-06-27 18:41:47 +05:30
committed by GitHub
parent 49061718bd
commit 4b39d01ccb
11 changed files with 97 additions and 93 deletions
@@ -238,11 +238,11 @@ client.search("preferences", filters={
- **Use natural language**: Mem0 understands intent, so describe what you're looking for naturally - **Use natural language**: Mem0 understands intent, so describe what you're looking for naturally
- **Scope with user ID**: Always provide `user_id` to scope search to relevant memories - **Scope with user ID**: Always provide `user_id` to scope search to relevant memories
- **Platform API**: Use `filters={"user_id": "alice"}` - **Platform API**: Use `filters={"user_id": "alice"}`
- **OSS**: Use `user_id="alice"` as parameter - **OSS**: Use `filters={"user_id": "alice"}` (passing `user_id` as a top-level kwarg raises `ValueError` in v3)
- **Combine filters**: Use AND/OR logic to create precise queries (Platform) - **Combine filters**: Use AND/OR logic to create precise queries (Platform)
- **Consider wildcard filters**: Use wildcard filters (e.g., `run_id: "*"`) for broader matches - **Consider wildcard filters**: Use wildcard filters (e.g., `run_id: "*"`) for broader matches
- **Tune parameters**: Adjust `top_k` for result count, `threshold` for relevance cutoff - **Tune parameters**: Adjust `top_k` for result count, `threshold` for relevance cutoff
- **Enable reranking**: Use `rerank=True` (default) when you have a reranker configured - **Enable reranking**: Use `rerank=True` (default is `False`) when you have a reranker configured
<Callout type="tip" icon="plug"> <Callout type="tip" icon="plug">
**MCP Alternative**: With <Link href="/platform/mem0-mcp">Mem0 MCP</Link>, AI agents can search their own memories proactively when needed. **MCP Alternative**: With <Link href="/platform/mem0-mcp">Mem0 MCP</Link>, AI agents can search their own memories proactively when needed.
+2 -3
View File
@@ -60,7 +60,7 @@ import os
from mem0 import Memory from mem0 import Memory
memory = Memory(api_key=os.environ["MEM0_API_KEY"]) memory = Memory()
# Sticky note: conversation memory # Sticky note: conversation memory
memory.add( memory.add(
@@ -72,8 +72,7 @@ memory.add(
# Later in the session, pull long-term + session context # Later in the session, pull long-term + session context
results = memory.search( results = memory.search(
"Any hotel preferences?", "Any hotel preferences?",
user_id="alex", filters={"user_id": "alex", "run_id": "trip-planning-2025"},
run_id="trip-planning-2025",
) )
``` ```
+8 -13
View File
@@ -9,7 +9,6 @@ description: "Run richer add/search/update/delete flows on the managed platform
**Prerequisites** **Prerequisites**
- Platform workspace with API key - Platform workspace with API key
- Python 3.10+ and Node.js 18+ - Python 3.10+ and Node.js 18+
- Async memories enabled in your dashboard (Settings → Memory Options)
</Info> </Info>
<Tip> <Tip>
@@ -21,9 +20,9 @@ description: "Run richer add/search/update/delete flows on the managed platform
<Tabs> <Tabs>
<Tab title="Python"> <Tab title="Python">
<Steps> <Steps>
<Step title="Install the SDK with async extras"> <Step title="Install the SDK">
```bash ```bash
pip install "mem0ai[async]" pip install mem0ai
``` ```
</Step> </Step>
<Step title="Export your API key"> <Step title="Export your API key">
@@ -55,9 +54,9 @@ export MEM0_API_KEY="sk-platform-..."
</Step> </Step>
<Step title="Instantiate the client"> <Step title="Instantiate the client">
```typescript ```typescript
import { Memory } from "mem0ai"; import MemoryClient from 'mem0ai';
const memory = new Memory({ apiKey: process.env.MEM0_API_KEY!, async: true }); const memory = new MemoryClient({ apiKey: process.env.MEM0_API_KEY! });
``` ```
</Step> </Step>
</Steps> </Steps>
@@ -121,10 +120,8 @@ const result = await memory.add(conversation, {
```python ```python
matches = await memory.search( matches = await memory.search(
"Any food alerts?", "Any food alerts?",
user_id="traveler-42", filters={"user_id": "traveler-42", "metadata.trip": "japan-2025"},
filters={"metadata.trip": "japan-2025"},
rerank=True, rerank=True,
include_vectors=False,
) )
``` ```
</Step> </Step>
@@ -132,7 +129,7 @@ matches = await memory.search(
```python ```python
await memory.update( await memory.update(
memory_id=matches["results"][0]["id"], memory_id=matches["results"][0]["id"],
content="Morgan avoids shellfish and prefers boutique hotels in central Tokyo.", data="Morgan avoids shellfish and prefers boutique hotels in central Tokyo.",
) )
``` ```
</Step> </Step>
@@ -143,17 +140,15 @@ await memory.update(
<Step title="Search with metadata filters"> <Step title="Search with metadata filters">
```typescript ```typescript
const matches = await memory.search("Any food alerts?", { const matches = await memory.search("Any food alerts?", {
userId: "traveler-42", filters: { user_id: "traveler-42", "metadata.trip": "japan-2025" },
filters: { "metadata.trip": "japan-2025" },
rerank: true, rerank: true,
includeVectors: false,
}); });
``` ```
</Step> </Step>
<Step title="Apply an update"> <Step title="Apply an update">
```typescript ```typescript
await memory.update(matches.results[0].id, { await memory.update(matches.results[0].id, {
content: "Morgan avoids shellfish and prefers boutique hotels in central Tokyo.", text: "Morgan avoids shellfish and prefers boutique hotels in central Tokyo.",
}); });
``` ```
</Step> </Step>
+14 -14
View File
@@ -26,7 +26,7 @@ Reorders results using deep semantic understanding to put the most relevant memo
results = client.search( results = client.search(
query="What are my upcoming travel plans?", query="What are my upcoming travel plans?",
rerank=True, rerank=True,
user_id="user123" filters={"user_id": "user123"},
) )
# Before reranking: After reranking: # Before reranking: After reranking:
@@ -52,7 +52,7 @@ results = client.search(
results = client.search( results = client.search(
query="How do I like my bedroom temperature?", query="How do I like my bedroom temperature?",
rerank=True, # Get most recent preferences first rerank=True, # Get most recent preferences first
user_id="user123" filters={"user_id": "user123"},
) )
# Finds: "Keep bedroom at 68°F", "Too cold last night at 65°F", etc. # Finds: "Keep bedroom at 68°F", "Too cold last night at 65°F", etc.
@@ -63,7 +63,7 @@ results = client.search(
# Find specific product issues with high precision # Find specific product issues with high precision
results = client.search( results = client.search(
query="Problems with premium subscription billing", query="Problems with premium subscription billing",
user_id="customer456" filters={"user_id": "customer456"},
) )
# Returns only relevant billing problems, not general questions # Returns only relevant billing problems, not general questions
@@ -75,7 +75,7 @@ results = client.search(
results = client.search( results = client.search(
query="Patient allergies and contraindications", query="Patient allergies and contraindications",
rerank=True, # Most important info first rerank=True, # Most important info first
user_id="patient789" filters={"user_id": "patient789"},
) )
# Ensures critical allergy info appears first # Ensures critical allergy info appears first
@@ -87,7 +87,7 @@ results = client.search(
results = client.search( results = client.search(
query="Python programming progress and difficulties", query="Python programming progress and difficulties",
rerank=True, # Recent progress first rerank=True, # Recent progress first
user_id="student123" filters={"user_id": "student123"},
) )
# Gets comprehensive view of Python learning journey # Gets comprehensive view of Python learning journey
@@ -105,7 +105,7 @@ results = client.search(
def quick_search(query, user_id): def quick_search(query, user_id):
return client.search( return client.search(
query=query, query=query,
user_id=user_id filters={"user_id": user_id},
) )
# Reranked search - good for most applications # Reranked search - good for most applications
@@ -113,7 +113,7 @@ def standard_search(query, user_id):
return client.search( return client.search(
query=query, query=query,
rerank=True, rerank=True,
user_id=user_id filters={"user_id": user_id},
) )
# Reranked search - good for critical applications # Reranked search - good for critical applications
@@ -121,7 +121,7 @@ def precise_search(query, user_id):
return client.search( return client.search(
query=query, query=query,
rerank=True, rerank=True,
user_id=user_id filters={"user_id": user_id},
) )
``` ```
@@ -129,23 +129,23 @@ def precise_search(query, user_id):
// Basic search - good for exploration // Basic search - good for exploration
function quickSearch(query, userId) { function quickSearch(query, userId) {
return client.search(query, { return client.search(query, {
user_id: userId filters: { user_id: userId },
}); });
} }
// Reranked search - good for most applications // Reranked search - good for most applications
function standardSearch(query, userId) { function standardSearch(query, userId) {
return client.search(query, { return client.search(query, {
user_id: userId, filters: { user_id: userId },
rerank: true rerank: true,
}); });
} }
// Reranked search - good for critical applications // Reranked search - good for critical applications
function preciseSearch(query, userId) { function preciseSearch(query, userId) {
return client.search(query, { return client.search(query, {
user_id: userId, filters: { user_id: userId },
rerank: true rerank: true,
}); });
} }
``` ```
@@ -178,7 +178,7 @@ start_time = time.time()
results = client.search( results = client.search(
query="user preferences", query="user preferences",
rerank=True, # +150ms rerank=True, # +150ms
user_id="user123" filters={"user_id": "user123"},
) )
latency = time.time() - start_time latency = time.time() - start_time
print(f"Search completed in {latency:.2f}s") print(f"Search completed in {latency:.2f}s")
+7 -7
View File
@@ -25,7 +25,7 @@ const messages = [
{"role": "assistant", "content": "Great! I'll remember your preference for Italian cuisine."} {"role": "assistant", "content": "Great! I'll remember your preference for Italian cuisine."}
]; ];
await client.add(messages, { userId: "user123", version: "v2" }); await client.add(messages, { userId: "user123" });
``` ```
</CodeGroup> </CodeGroup>
@@ -65,14 +65,14 @@ const messages1 = [
{"role": "user", "content": "Hi, I'm Sarah from New York"}, {"role": "user", "content": "Hi, I'm Sarah from New York"},
{"role": "assistant", "content": "Hello Sarah! Nice to meet you."} {"role": "assistant", "content": "Hello Sarah! Nice to meet you."}
]; ];
await client.add(messages1, { userId: "sarah", version: "v2" }); await client.add(messages1, { userId: "sarah" });
// Later interaction - just send new messages // Later interaction - just send new messages
const messages2 = [ const messages2 = [
{"role": "user", "content": "I'm planning a trip to Italy next month"}, {"role": "user", "content": "I'm planning a trip to Italy next month"},
{"role": "assistant", "content": "How exciting! Italy is beautiful this time of year."} {"role": "assistant", "content": "How exciting! Italy is beautiful this time of year."}
]; ];
await client.add(messages2, { userId: "sarah", version: "v2" }); await client.add(messages2, { userId: "sarah" });
// Mem0 automatically knows Sarah is from New York and can use this context // Mem0 automatically knows Sarah is from New York and can use this context
``` ```
</CodeGroup> </CodeGroup>
@@ -104,7 +104,7 @@ const messages = [
{"role": "assistant", "content": "I've noted your allergies for future reference."} {"role": "assistant", "content": "I've noted your allergies for future reference."}
]; ];
await client.add(messages, { userId: "user123", version: "v2" }); await client.add(messages, { userId: "user123" });
// This allergy info will be available in ALL future interactions // This allergy info will be available in ALL future interactions
``` ```
</CodeGroup> </CodeGroup>
@@ -143,21 +143,21 @@ const messages1 = [
{"role": "user", "content": "I want to plan a 5-day trip to Tokyo"}, {"role": "user", "content": "I want to plan a 5-day trip to Tokyo"},
{"role": "assistant", "content": "Perfect! Let's plan your Tokyo adventure."} {"role": "assistant", "content": "Perfect! Let's plan your Tokyo adventure."}
]; ];
await client.add(messages1, { userId: "user123", runId: "tokyo-trip-2024", version: "v2" }); await client.add(messages1, { userId: "user123", runId: "tokyo-trip-2024" });
// Later in the same trip planning session // Later in the same trip planning session
const messages2 = [ const messages2 = [
{"role": "user", "content": "I prefer staying near Shibuya"}, {"role": "user", "content": "I prefer staying near Shibuya"},
{"role": "assistant", "content": "Great choice! Shibuya is very convenient."} {"role": "assistant", "content": "Great choice! Shibuya is very convenient."}
]; ];
await client.add(messages2, { userId: "user123", runId: "tokyo-trip-2024", version: "v2" }); await client.add(messages2, { userId: "user123", runId: "tokyo-trip-2024" });
// Different session for work project (separate context) // Different session for work project (separate context)
const workMessages = [ const workMessages = [
{"role": "user", "content": "Let's discuss the Q4 marketing strategy"}, {"role": "user", "content": "Let's discuss the Q4 marketing strategy"},
{"role": "assistant", "content": "Sure! What are your main goals for Q4?"} {"role": "assistant", "content": "Sure! What are your main goals for Q4?"}
]; ];
await client.add(workMessages, { userId: "user123", runId: "q4-marketing", version: "v2" }); await client.add(workMessages, { userId: "user123", runId: "q4-marketing" });
``` ```
</CodeGroup> </CodeGroup>
@@ -182,7 +182,7 @@ If no criteria are defined for a project, search behaves normally based on seman
This lets you prioritize memories that align with your agent's goals and not just those that look similar to the query. This lets you prioritize memories that align with your agent's goals and not just those that look similar to the query.
<Note> <Note>
Criteria retrieval is automatically enabled when criteria are defined in your project. Use `use_criteria=False` in search to temporarily disable it for a specific query. Criteria retrieval is automatically enabled when criteria are defined in your project. Use `use_criteria=False` in search to temporarily disable it for a specific query. `use_criteria` is a server-side parameter passed through to the Platform API — it is not a typed option in the SDK's `SearchMemoryOptions` interface, but the server accepts and processes it when included in the request body.
</Note> </Note>
@@ -150,7 +150,7 @@ Handle potential errors when submitting feedback:
```python Python ```python Python
from mem0 import MemoryClient from mem0 import MemoryClient
from mem0.exceptions import MemoryNotFoundError, APIError from mem0.exceptions import MemoryNotFoundError, NetworkError
client = MemoryClient(api_key="your_api_key") client = MemoryClient(api_key="your_api_key")
@@ -163,8 +163,8 @@ try:
print("Feedback submitted successfully") print("Feedback submitted successfully")
except MemoryNotFoundError: except MemoryNotFoundError:
print("Memory not found") print("Memory not found")
except APIError as e: except NetworkError as e:
print(f"API error: {e}") print(f"Network error: {e}")
except Exception as e: except Exception as e:
print(f"Unexpected error: {e}") print(f"Unexpected error: {e}")
``` ```
+58 -47
View File
@@ -111,32 +111,37 @@ print(all_memories)
``` ```
```json Output ```json Output
[ {
{ "count": 3,
"id": "147559a8-c5f7-44d0-9418-91f53f7a89a4", "next": null,
"memory": "suggests considering Angular because it has great enterprise support", "previous": null,
"user_id": "charlie", "results": [
"run_id": "group_chat_1", {
"created_at": "2025-06-21T05:51:11.007223-07:00", "id": "147559a8-c5f7-44d0-9418-91f53f7a89a4",
"updated_at": "2025-06-21T05:51:11.626562-07:00" "memory": "suggests considering Angular because it has great enterprise support",
}, "user_id": "charlie",
{ "run_id": "group_chat_1",
"id": "1d8b8f39-7b17-4d18-8632-ab1c64fa35b9", "created_at": "2025-06-21T05:51:11.007223-07:00",
"memory": "prefers Vue.js for our use case", "updated_at": "2025-06-21T05:51:11.626562-07:00"
"user_id": "bob", },
"run_id": "group_chat_1", {
"created_at": "2025-06-21T05:51:08.675301-07:00", "id": "1d8b8f39-7b17-4d18-8632-ab1c64fa35b9",
"updated_at": "2025-06-21T05:51:09.319269-07:00", "memory": "prefers Vue.js for our use case",
}, "user_id": "bob",
{ "run_id": "group_chat_1",
"id": "4d82478a-8d50-47e6-9324-1f65efff5829", "created_at": "2025-06-21T05:51:08.675301-07:00",
"memory": "prefers using React for the frontend", "updated_at": "2025-06-21T05:51:09.319269-07:00"
"user_id": "alice", },
"run_id": "group_chat_1", {
"created_at": "2025-06-21T05:51:05.943223-07:00", "id": "4d82478a-8d50-47e6-9324-1f65efff5829",
"updated_at": "2025-06-21T05:51:06.982539-07:00", "memory": "prefers using React for the frontend",
} "user_id": "alice",
] "run_id": "group_chat_1",
"created_at": "2025-06-21T05:51:05.943223-07:00",
"updated_at": "2025-06-21T05:51:06.982539-07:00"
}
]
}
``` ```
</CodeGroup> </CodeGroup>
@@ -161,17 +166,21 @@ print(charlie_memories)
``` ```
```json Output ```json Output
[ {
{ "count": 1,
"id": "147559a8-c5f7-44d0-9418-91f53f7a89a4", "next": null,
"memory": "suggests considering Angular because it has great enterprise support", "previous": null,
"user_id": "charlie", "results": [
"run_id": "group_chat_1", {
"created_at": "2025-06-21T05:51:11.007223-07:00", "id": "147559a8-c5f7-44d0-9418-91f53f7a89a4",
"updated_at": "2025-06-21T05:51:11.626562-07:00", "memory": "suggests considering Angular because it has great enterprise support",
"user_id": "charlie",
} "run_id": "group_chat_1",
] "created_at": "2025-06-21T05:51:11.007223-07:00",
"updated_at": "2025-06-21T05:51:11.626562-07:00"
}
]
}
``` ```
</CodeGroup> </CodeGroup>
@@ -199,16 +208,18 @@ print(search_response)
``` ```
```json Output ```json Output
[ {
{ "results": [
"id": "147559a8-c5f7-44d0-9418-91f53f7a89a4", {
"memory": "suggests considering Angular because it has great enterprise support", "id": "147559a8-c5f7-44d0-9418-91f53f7a89a4",
"user_id": "charlie", "memory": "suggests considering Angular because it has great enterprise support",
"run_id": "group_chat_1", "user_id": "charlie",
"created_at": "2025-06-21T05:51:11.007223-07:00", "run_id": "group_chat_1",
"updated_at": "2025-06-21T05:51:11.626562-07:00", "created_at": "2025-06-21T05:51:11.007223-07:00",
} "updated_at": "2025-06-21T05:51:11.626562-07:00"
] }
]
}
``` ```
</CodeGroup> </CodeGroup>
-1
View File
@@ -251,7 +251,6 @@ You can apply various filters to customize which memories are included in the ex
- `user_id`: Filter memories by specific user - `user_id`: Filter memories by specific user
- `agent_id`: Filter memories by specific agent - `agent_id`: Filter memories by specific agent
- `run_id`: Filter memories by specific run - `run_id`: Filter memories by specific run
- `session_id`: Filter memories by specific session
- `created_at`: Filter memories by date - `created_at`: Filter memories by date
<Note> <Note>
+1 -1
View File
@@ -9,7 +9,7 @@ estimatedTime: "~2 minutes"
**Prerequisites** **Prerequisites**
- Mem0 Platform account (<a href="https://app.mem0.ai?utm_source=oss&utm_medium=platform-mem0-mcp" rel="nofollow">Sign up here</a>) - Mem0 Platform account (<a href="https://app.mem0.ai?utm_source=oss&utm_medium=platform-mem0-mcp" rel="nofollow">Sign up here</a>)
- API key (<a href="https://app.mem0.ai/settings/api-keys?utm_source=oss&utm_medium=platform-mem0-mcp" rel="nofollow">Get one from dashboard</a>) - API key (<a href="https://app.mem0.ai/settings/api-keys?utm_source=oss&utm_medium=platform-mem0-mcp" rel="nofollow">Get one from dashboard</a>)
- Node.js 14+ (for npx) - Node.js 18+ (for npx)
- An MCP-compatible client (Claude, Claude Code, Codex, Cursor, Windsurf, VS Code, OpenCode) - An MCP-compatible client (Claude, Claude Code, Codex, Cursor, Windsurf, VS Code, OpenCode)
</Info> </Info>
+1 -1
View File
@@ -15,7 +15,7 @@ Get started with Mem0 Platform's hosted API in under 5 minutes. This guide shows
- Mem0 Platform account (<a href="https://app.mem0.ai?utm_source=oss&utm_medium=platform-quickstart" rel="nofollow">Sign up here</a>) - Mem0 Platform account (<a href="https://app.mem0.ai?utm_source=oss&utm_medium=platform-quickstart" rel="nofollow">Sign up here</a>)
- API key (<a href="https://app.mem0.ai/dashboard/settings?tab=api-keys&subtab=configuration" rel="nofollow">Get one from dashboard</a>) - API key (<a href="https://app.mem0.ai/dashboard/settings?tab=api-keys&subtab=configuration" rel="nofollow">Get one from dashboard</a>)
- Python 3.10+, Node.js 14+, or cURL - Python 3.10+, Node.js 18+, or cURL
## Installation ## Installation