Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
13eed06b46 | ||
|
|
7e7acb1d43 | ||
|
|
287051cc58 | ||
|
|
d87e210f78 | ||
|
|
6b347102df | ||
|
|
879367f993 | ||
|
|
2b45dc5e5f |
@@ -153,7 +153,6 @@ See the [self-hosted docs](https://docs.mem0.ai/open-source/overview) for config
|
|||||||
|
|
||||||
1. Sign up on [Mem0 Platform](https://app.mem0.ai?utm_source=oss&utm_medium=readme)
|
1. Sign up on [Mem0 Platform](https://app.mem0.ai?utm_source=oss&utm_medium=readme)
|
||||||
2. Embed the memory layer via SDK or API keys
|
2. Embed the memory layer via SDK or API keys
|
||||||
3. Using hosted Qdrant vectors? See the [Platform migration guide](https://docs.mem0.ai/migration/oss-to-platform) to import them into Mem0 Platform.
|
|
||||||
|
|
||||||
### CLI
|
### CLI
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,6 @@ Move your Mem0 implementation to managed infrastructure with enterprise features
|
|||||||
| --------------------- | -------------- | ---------------------------- |
|
| --------------------- | -------------- | ---------------------------- |
|
||||||
| Infrastructure & Code | Low (~30 mins) | None (Parallel run possible) |
|
| Infrastructure & Code | Low (~30 mins) | None (Parallel run possible) |
|
||||||
|
|
||||||
<Info>
|
|
||||||
Using Mem0 Open Source with **hosted Qdrant**? You can migrate your existing memories to Mem0 Platform with a one-line script below.
|
|
||||||
</Info>
|
|
||||||
|
|
||||||
<Info>
|
<Info>
|
||||||
**Why migrate to Platform?**
|
**Why migrate to Platform?**
|
||||||
|
|
||||||
@@ -38,21 +34,7 @@ Move your Mem0 implementation to managed infrastructure with enterprise features
|
|||||||
|
|
||||||
## Migrate
|
## Migrate
|
||||||
|
|
||||||
### 1. Import Memories Into Platform
|
### 1. Install or Update SDK
|
||||||
|
|
||||||
If your Mem0 Open Source setup uses **hosted Qdrant** as the vector store, you can import your existing memories to Mem0 Platform with one command:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
curl -fsSL https://raw.githubusercontent.com/mem0ai/mem0/main/scripts/oss-to-platform-migrate.sh | bash
|
|
||||||
```
|
|
||||||
|
|
||||||
<Note>
|
|
||||||
This migration script currently supports **hosted Qdrant only**. Support for local Qdrant, pgvector, and other vector stores is coming soon.
|
|
||||||
</Note>
|
|
||||||
|
|
||||||
If you are using a different vector store and want to migrate to Platform, please contact Mem0 support and we’ll send you a custom migration script for your setup.
|
|
||||||
|
|
||||||
### 2. Install or Update SDK
|
|
||||||
|
|
||||||
Ensure you have the latest version of the SDK, which supports both OSS and Platform clients.
|
Ensure you have the latest version of the SDK, which supports both OSS and Platform clients.
|
||||||
|
|
||||||
@@ -60,7 +42,7 @@ Ensure you have the latest version of the SDK, which supports both OSS and Platf
|
|||||||
pip install mem0ai --upgrade
|
pip install mem0ai --upgrade
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Update Initialization
|
### 2. Update Initialization
|
||||||
|
|
||||||
Switch from the local `Memory` class to the managed `MemoryClient`.
|
Switch from the local `Memory` class to the managed `MemoryClient`.
|
||||||
|
|
||||||
@@ -93,7 +75,7 @@ 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.
|
Run `client.get_all(filters={"user_id": "test_connection"})` to verify your API key works. It should return an empty list or valid results.
|
||||||
</Info>
|
</Info>
|
||||||
|
|
||||||
### 4. Update Retrieval Calls (Critical)
|
### 3. Update Retrieval Calls (Critical)
|
||||||
|
|
||||||
<Warning>
|
<Warning>
|
||||||
**Critical Change**: Platform uses v2 endpoints that require filtering parameters to be nested inside a `filters` dictionary.
|
**Critical Change**: Platform uses v2 endpoints that require filtering parameters to be nested inside a `filters` dictionary.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ icon: "robot"
|
|||||||
iconType: "solid"
|
iconType: "solid"
|
||||||
---
|
---
|
||||||
|
|
||||||
If you're an AI agent (Claude Code, Cursor, Codex, Cline, Aider, Windsurf, or any other autonomous coding tool), you don't need a human to set up Mem0 for you. Four commands — install, sign up, push a memory, search it — and you have persistent memory.
|
If you're an AI agent (Claude Code, Cursor, Codex, Cline, Aider, or any other autonomous coding tool), you don't need a human to set up Mem0 for you. Four commands — install, sign up, push a memory, search it — and you have persistent memory.
|
||||||
|
|
||||||
## The 4-command demo
|
## The 4-command demo
|
||||||
|
|
||||||
|
|||||||
@@ -142,24 +142,6 @@ iconType: "solid"
|
|||||||
Setting this environment variable will prevent Mem0 from collecting and sending any usage data, ensuring complete privacy for your application.
|
Setting this environment variable will prevent Mem0 from collecting and sending any usage data, ensuring complete privacy for your application.
|
||||||
</Accordion>
|
</Accordion>
|
||||||
|
|
||||||
<Accordion title="How do I delete my Mem0 account?">
|
|
||||||
You can delete your Mem0 account at any time directly from the dashboard:
|
|
||||||
|
|
||||||
1. Sign in at [app.mem0.ai](https://app.mem0.ai).
|
|
||||||
2. Go to **Settings → Account**.
|
|
||||||
3. Click **Delete account** and confirm.
|
|
||||||
|
|
||||||
Deletion is immediate and irreversible. The following is removed:
|
|
||||||
|
|
||||||
- Your user profile and login credentials
|
|
||||||
- All memories, agents, and runs you created
|
|
||||||
- API keys and access tokens issued to your account
|
|
||||||
- Organizations you solely own, along with their data
|
|
||||||
- Your membership in any shared organizations (the orgs themselves are not affected)
|
|
||||||
|
|
||||||
Any application still using your old API keys will start receiving `401 Unauthorized` responses immediately. If you'd like to use Mem0 again later, you can create a new account at any time — it will start fresh with no data carried over.
|
|
||||||
</Accordion>
|
|
||||||
|
|
||||||
</AccordionGroup>
|
</AccordionGroup>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ export interface SearchMemoryOptions {
|
|||||||
topK?: number;
|
topK?: number;
|
||||||
threshold?: number;
|
threshold?: number;
|
||||||
rerank?: boolean;
|
rerank?: boolean;
|
||||||
latestOnly?: boolean;
|
|
||||||
fields?: string[];
|
fields?: string[];
|
||||||
categories?: string[];
|
categories?: string[];
|
||||||
}
|
}
|
||||||
@@ -33,7 +32,6 @@ export interface GetAllMemoryOptions {
|
|||||||
pageSize?: number;
|
pageSize?: number;
|
||||||
startDate?: string;
|
startDate?: string;
|
||||||
endDate?: string;
|
endDate?: string;
|
||||||
latestOnly?: boolean;
|
|
||||||
categories?: string[];
|
categories?: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,24 +63,6 @@ describe("MemoryClient - search()", () => {
|
|||||||
expect(getFetchBody(call!).filters).toEqual({ user_id: "u1" });
|
expect(getFetchBody(call!).filters).toEqual({ user_id: "u1" });
|
||||||
});
|
});
|
||||||
|
|
||||||
test("serializes latestOnly as latest_only", async () => {
|
|
||||||
const extra = new Map<string, { status: number; body: unknown }>();
|
|
||||||
extra.set("/v3/memories/search/", {
|
|
||||||
status: 200,
|
|
||||||
body: { results: [] },
|
|
||||||
});
|
|
||||||
const mock = setupMockFetch(extra);
|
|
||||||
|
|
||||||
const client = new MemoryClient({ apiKey: TEST_API_KEY });
|
|
||||||
await client.search("test", {
|
|
||||||
filters: { user_id: "u1" },
|
|
||||||
latestOnly: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
const call = findFetchCall(mock, "/v3/memories/search/", "POST");
|
|
||||||
expect(getFetchBody(call!).latest_only).toBe(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
test("passes complex OR filters through to the API body", async () => {
|
test("passes complex OR filters through to the API body", async () => {
|
||||||
const extra = new Map<string, { status: number; body: unknown }>();
|
const extra = new Map<string, { status: number; body: unknown }>();
|
||||||
extra.set("/v3/memories/search/", {
|
extra.set("/v3/memories/search/", {
|
||||||
@@ -282,22 +264,4 @@ describe("MemoryClient - getAll() entity param rejection", () => {
|
|||||||
await client.getAll({ filters: { user_id: "u1" } });
|
await client.getAll({ filters: { user_id: "u1" } });
|
||||||
expect(findFetchCall(mock, "/v3/memories/", "POST")).toBeDefined();
|
expect(findFetchCall(mock, "/v3/memories/", "POST")).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
test("serializes latestOnly as latest_only", async () => {
|
|
||||||
const extra = new Map<string, { status: number; body: unknown }>();
|
|
||||||
extra.set("/v3/memories/", {
|
|
||||||
status: 200,
|
|
||||||
body: { results: [] },
|
|
||||||
});
|
|
||||||
const mock = setupMockFetch(extra);
|
|
||||||
|
|
||||||
const client = new MemoryClient({ apiKey: TEST_API_KEY });
|
|
||||||
await client.getAll({
|
|
||||||
filters: { user_id: "u1" },
|
|
||||||
latestOnly: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
const call = findFetchCall(mock, "/v3/memories/", "POST");
|
|
||||||
expect(getFetchBody(call!).latest_only).toBe(true);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -4,3 +4,4 @@ __version__ = importlib.metadata.version("mem0ai")
|
|||||||
|
|
||||||
from mem0.client.main import AsyncMemoryClient, MemoryClient # noqa
|
from mem0.client.main import AsyncMemoryClient, MemoryClient # noqa
|
||||||
from mem0.memory.main import AsyncMemory, Memory # noqa
|
from mem0.memory.main import AsyncMemory, Memory # noqa
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user