docs(platform): align Platform docs with v3 SDK behavior (#5849)
This commit is contained in:
@@ -238,11 +238,11 @@ client.search("preferences", filters={
|
||||
- **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
|
||||
- **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)
|
||||
- **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
|
||||
- **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">
|
||||
**MCP Alternative**: With <Link href="/platform/mem0-mcp">Mem0 MCP</Link>, AI agents can search their own memories proactively when needed.
|
||||
|
||||
@@ -60,7 +60,7 @@ import os
|
||||
|
||||
from mem0 import Memory
|
||||
|
||||
memory = Memory(api_key=os.environ["MEM0_API_KEY"])
|
||||
memory = Memory()
|
||||
|
||||
# Sticky note: conversation memory
|
||||
memory.add(
|
||||
@@ -72,8 +72,7 @@ memory.add(
|
||||
# Later in the session, pull long-term + session context
|
||||
results = memory.search(
|
||||
"Any hotel preferences?",
|
||||
user_id="alex",
|
||||
run_id="trip-planning-2025",
|
||||
filters={"user_id": "alex", "run_id": "trip-planning-2025"},
|
||||
)
|
||||
```
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ description: "Run richer add/search/update/delete flows on the managed platform
|
||||
**Prerequisites**
|
||||
- Platform workspace with API key
|
||||
- Python 3.10+ and Node.js 18+
|
||||
- Async memories enabled in your dashboard (Settings → Memory Options)
|
||||
</Info>
|
||||
|
||||
<Tip>
|
||||
@@ -21,9 +20,9 @@ description: "Run richer add/search/update/delete flows on the managed platform
|
||||
<Tabs>
|
||||
<Tab title="Python">
|
||||
<Steps>
|
||||
<Step title="Install the SDK with async extras">
|
||||
<Step title="Install the SDK">
|
||||
```bash
|
||||
pip install "mem0ai[async]"
|
||||
pip install mem0ai
|
||||
```
|
||||
</Step>
|
||||
<Step title="Export your API key">
|
||||
@@ -55,9 +54,9 @@ export MEM0_API_KEY="sk-platform-..."
|
||||
</Step>
|
||||
<Step title="Instantiate the client">
|
||||
```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>
|
||||
</Steps>
|
||||
@@ -121,10 +120,8 @@ const result = await memory.add(conversation, {
|
||||
```python
|
||||
matches = await memory.search(
|
||||
"Any food alerts?",
|
||||
user_id="traveler-42",
|
||||
filters={"metadata.trip": "japan-2025"},
|
||||
filters={"user_id": "traveler-42", "metadata.trip": "japan-2025"},
|
||||
rerank=True,
|
||||
include_vectors=False,
|
||||
)
|
||||
```
|
||||
</Step>
|
||||
@@ -132,7 +129,7 @@ matches = await memory.search(
|
||||
```python
|
||||
await memory.update(
|
||||
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>
|
||||
@@ -143,17 +140,15 @@ await memory.update(
|
||||
<Step title="Search with metadata filters">
|
||||
```typescript
|
||||
const matches = await memory.search("Any food alerts?", {
|
||||
userId: "traveler-42",
|
||||
filters: { "metadata.trip": "japan-2025" },
|
||||
filters: { user_id: "traveler-42", "metadata.trip": "japan-2025" },
|
||||
rerank: true,
|
||||
includeVectors: false,
|
||||
});
|
||||
```
|
||||
</Step>
|
||||
<Step title="Apply an update">
|
||||
```typescript
|
||||
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>
|
||||
|
||||
@@ -26,7 +26,7 @@ Reorders results using deep semantic understanding to put the most relevant memo
|
||||
results = client.search(
|
||||
query="What are my upcoming travel plans?",
|
||||
rerank=True,
|
||||
user_id="user123"
|
||||
filters={"user_id": "user123"},
|
||||
)
|
||||
|
||||
# Before reranking: After reranking:
|
||||
@@ -52,7 +52,7 @@ results = client.search(
|
||||
results = client.search(
|
||||
query="How do I like my bedroom temperature?",
|
||||
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.
|
||||
@@ -63,7 +63,7 @@ results = client.search(
|
||||
# Find specific product issues with high precision
|
||||
results = client.search(
|
||||
query="Problems with premium subscription billing",
|
||||
user_id="customer456"
|
||||
filters={"user_id": "customer456"},
|
||||
)
|
||||
|
||||
# Returns only relevant billing problems, not general questions
|
||||
@@ -75,7 +75,7 @@ results = client.search(
|
||||
results = client.search(
|
||||
query="Patient allergies and contraindications",
|
||||
rerank=True, # Most important info first
|
||||
user_id="patient789"
|
||||
filters={"user_id": "patient789"},
|
||||
)
|
||||
|
||||
# Ensures critical allergy info appears first
|
||||
@@ -87,7 +87,7 @@ results = client.search(
|
||||
results = client.search(
|
||||
query="Python programming progress and difficulties",
|
||||
rerank=True, # Recent progress first
|
||||
user_id="student123"
|
||||
filters={"user_id": "student123"},
|
||||
)
|
||||
|
||||
# Gets comprehensive view of Python learning journey
|
||||
@@ -105,7 +105,7 @@ results = client.search(
|
||||
def quick_search(query, user_id):
|
||||
return client.search(
|
||||
query=query,
|
||||
user_id=user_id
|
||||
filters={"user_id": user_id},
|
||||
)
|
||||
|
||||
# Reranked search - good for most applications
|
||||
@@ -113,7 +113,7 @@ def standard_search(query, user_id):
|
||||
return client.search(
|
||||
query=query,
|
||||
rerank=True,
|
||||
user_id=user_id
|
||||
filters={"user_id": user_id},
|
||||
)
|
||||
|
||||
# Reranked search - good for critical applications
|
||||
@@ -121,7 +121,7 @@ def precise_search(query, user_id):
|
||||
return client.search(
|
||||
query=query,
|
||||
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
|
||||
function quickSearch(query, userId) {
|
||||
return client.search(query, {
|
||||
user_id: userId
|
||||
filters: { user_id: userId },
|
||||
});
|
||||
}
|
||||
|
||||
// Reranked search - good for most applications
|
||||
function standardSearch(query, userId) {
|
||||
return client.search(query, {
|
||||
user_id: userId,
|
||||
rerank: true
|
||||
filters: { user_id: userId },
|
||||
rerank: true,
|
||||
});
|
||||
}
|
||||
|
||||
// Reranked search - good for critical applications
|
||||
function preciseSearch(query, userId) {
|
||||
return client.search(query, {
|
||||
user_id: userId,
|
||||
rerank: true
|
||||
filters: { user_id: userId },
|
||||
rerank: true,
|
||||
});
|
||||
}
|
||||
```
|
||||
@@ -178,7 +178,7 @@ start_time = time.time()
|
||||
results = client.search(
|
||||
query="user preferences",
|
||||
rerank=True, # +150ms
|
||||
user_id="user123"
|
||||
filters={"user_id": "user123"},
|
||||
)
|
||||
latency = time.time() - start_time
|
||||
print(f"Search completed in {latency:.2f}s")
|
||||
|
||||
@@ -25,7 +25,7 @@ const messages = [
|
||||
{"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>
|
||||
|
||||
@@ -65,14 +65,14 @@ 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", version: "v2" });
|
||||
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", version: "v2" });
|
||||
await client.add(messages2, { userId: "sarah" });
|
||||
// Mem0 automatically knows Sarah is from New York and can use this context
|
||||
```
|
||||
</CodeGroup>
|
||||
@@ -104,7 +104,7 @@ const messages = [
|
||||
{"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
|
||||
```
|
||||
</CodeGroup>
|
||||
@@ -143,21 +143,21 @@ 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", version: "v2" });
|
||||
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", version: "v2" });
|
||||
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", version: "v2" });
|
||||
await client.add(workMessages, { userId: "user123", runId: "q4-marketing" });
|
||||
```
|
||||
</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.
|
||||
|
||||
<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>
|
||||
|
||||
|
||||
|
||||
@@ -150,7 +150,7 @@ Handle potential errors when submitting feedback:
|
||||
|
||||
```python Python
|
||||
from mem0 import MemoryClient
|
||||
from mem0.exceptions import MemoryNotFoundError, APIError
|
||||
from mem0.exceptions import MemoryNotFoundError, NetworkError
|
||||
|
||||
client = MemoryClient(api_key="your_api_key")
|
||||
|
||||
@@ -163,8 +163,8 @@ try:
|
||||
print("Feedback submitted successfully")
|
||||
except MemoryNotFoundError:
|
||||
print("Memory not found")
|
||||
except APIError as e:
|
||||
print(f"API error: {e}")
|
||||
except NetworkError as e:
|
||||
print(f"Network error: {e}")
|
||||
except Exception as e:
|
||||
print(f"Unexpected error: {e}")
|
||||
```
|
||||
|
||||
@@ -111,32 +111,37 @@ print(all_memories)
|
||||
```
|
||||
|
||||
```json Output
|
||||
[
|
||||
{
|
||||
"id": "147559a8-c5f7-44d0-9418-91f53f7a89a4",
|
||||
"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"
|
||||
},
|
||||
{
|
||||
"id": "1d8b8f39-7b17-4d18-8632-ab1c64fa35b9",
|
||||
"memory": "prefers Vue.js for our use case",
|
||||
"user_id": "bob",
|
||||
"run_id": "group_chat_1",
|
||||
"created_at": "2025-06-21T05:51:08.675301-07:00",
|
||||
"updated_at": "2025-06-21T05:51:09.319269-07:00",
|
||||
},
|
||||
{
|
||||
"id": "4d82478a-8d50-47e6-9324-1f65efff5829",
|
||||
"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",
|
||||
}
|
||||
]
|
||||
{
|
||||
"count": 3,
|
||||
"next": null,
|
||||
"previous": null,
|
||||
"results": [
|
||||
{
|
||||
"id": "147559a8-c5f7-44d0-9418-91f53f7a89a4",
|
||||
"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"
|
||||
},
|
||||
{
|
||||
"id": "1d8b8f39-7b17-4d18-8632-ab1c64fa35b9",
|
||||
"memory": "prefers Vue.js for our use case",
|
||||
"user_id": "bob",
|
||||
"run_id": "group_chat_1",
|
||||
"created_at": "2025-06-21T05:51:08.675301-07:00",
|
||||
"updated_at": "2025-06-21T05:51:09.319269-07:00"
|
||||
},
|
||||
{
|
||||
"id": "4d82478a-8d50-47e6-9324-1f65efff5829",
|
||||
"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>
|
||||
@@ -161,17 +166,21 @@ print(charlie_memories)
|
||||
```
|
||||
|
||||
```json Output
|
||||
[
|
||||
{
|
||||
"id": "147559a8-c5f7-44d0-9418-91f53f7a89a4",
|
||||
"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",
|
||||
|
||||
}
|
||||
]
|
||||
{
|
||||
"count": 1,
|
||||
"next": null,
|
||||
"previous": null,
|
||||
"results": [
|
||||
{
|
||||
"id": "147559a8-c5f7-44d0-9418-91f53f7a89a4",
|
||||
"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>
|
||||
@@ -199,16 +208,18 @@ print(search_response)
|
||||
```
|
||||
|
||||
```json Output
|
||||
[
|
||||
{
|
||||
"id": "147559a8-c5f7-44d0-9418-91f53f7a89a4",
|
||||
"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",
|
||||
}
|
||||
]
|
||||
{
|
||||
"results": [
|
||||
{
|
||||
"id": "147559a8-c5f7-44d0-9418-91f53f7a89a4",
|
||||
"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>
|
||||
|
||||
@@ -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
|
||||
- `agent_id`: Filter memories by specific agent
|
||||
- `run_id`: Filter memories by specific run
|
||||
- `session_id`: Filter memories by specific session
|
||||
- `created_at`: Filter memories by date
|
||||
|
||||
<Note>
|
||||
|
||||
@@ -9,7 +9,7 @@ estimatedTime: "~2 minutes"
|
||||
**Prerequisites**
|
||||
- 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>)
|
||||
- Node.js 14+ (for npx)
|
||||
- Node.js 18+ (for npx)
|
||||
- An MCP-compatible client (Claude, Claude Code, Codex, Cursor, Windsurf, VS Code, OpenCode)
|
||||
</Info>
|
||||
|
||||
|
||||
@@ -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>)
|
||||
- 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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user