130 lines
4.9 KiB
Markdown
130 lines
4.9 KiB
Markdown
# Python vs TypeScript SDK Differences
|
|
|
|
Quick-reference cheatsheet for developers working across both Mem0 SDKs.
|
|
|
|
## Constructor
|
|
|
|
| Aspect | Python | TypeScript |
|
|
|--------|--------|------------|
|
|
| Import (Platform) | `from mem0 import MemoryClient` | `import MemoryClient from 'mem0ai'` |
|
|
| Import (OSS) | `from mem0 import Memory` | `import { Memory } from 'mem0ai/oss'` |
|
|
| Constructor | `MemoryClient(api_key="m0-xxx")` | `new MemoryClient({ apiKey: 'm0-xxx' })` |
|
|
| Required param | `api_key` (positional or kwarg) | `apiKey` (in options object) |
|
|
|
|
Both read from `MEM0_API_KEY` env var if no key provided.
|
|
|
|
## Method Naming
|
|
|
|
| Operation | Python | TypeScript |
|
|
|-----------|--------|------------|
|
|
| Add | `add()` | `add()` |
|
|
| Search | `search()` | `search()` |
|
|
| Get | `get()` | `get()` |
|
|
| Get all | `get_all()` | `getAll()` |
|
|
| Update | `update()` | `update()` |
|
|
| Delete | `delete()` | `delete()` |
|
|
| Delete all | `delete_all()` | `deleteAll()` |
|
|
| History | `history()` | `history()` |
|
|
| Batch update | `batch_update()` | `batchUpdate()` |
|
|
| Batch delete | `batch_delete()` | `batchDelete()` |
|
|
| List users | `users()` | `users()` |
|
|
| Delete users | `delete_users()` | `deleteUsers()` |
|
|
| Get project | `project.get()` | `getProject()` |
|
|
| Update project | `project.update()` | `updateProject()` |
|
|
| Create webhook | `create_webhook()` | `createWebhook()` |
|
|
| Get webhooks | `get_webhooks()` | `getWebhooks()` |
|
|
| Update webhook | `update_webhook()` | `updateWebhook()` |
|
|
| Delete webhook | `delete_webhook()` | `deleteWebhook()` |
|
|
| Create export | `create_memory_export()` | `createMemoryExport()` |
|
|
| Get export | `get_memory_export()` | `getMemoryExport()` |
|
|
| Feedback | `feedback()` | `feedback()` |
|
|
|
|
**Rule:** Python uses `snake_case`, TypeScript uses `camelCase` for method names.
|
|
|
|
## Parameter Passing
|
|
|
|
```python
|
|
# Python: kwargs
|
|
client.add(messages, user_id="alice", metadata={"source": "chat"})
|
|
client.search("query", filters={"user_id": "alice"}, top_k=5, rerank=True)
|
|
```
|
|
|
|
```typescript
|
|
// TypeScript: options object with camelCase for top-level params, snake_case for filter keys
|
|
await client.add(messages, { userId: 'alice', metadata: { source: 'chat' } });
|
|
await client.search('query', { filters: { user_id: 'alice' }, topK: 5, rerank: true });
|
|
```
|
|
|
|
**v3:** Python uses `snake_case` everywhere. TypeScript uses `camelCase` for top-level params (`userId`, `topK`) but `snake_case` for filter keys (`user_id`, `agent_id`).
|
|
|
|
## Architectural Differences
|
|
|
|
| Aspect | Python | TypeScript |
|
|
|--------|--------|------------|
|
|
| HTTP library | httpx | axios |
|
|
| Default timeout | 300s | 60s |
|
|
| Sync support | Yes (`MemoryClient`) | No (all async) |
|
|
| Async support | Yes (`AsyncMemoryClient`) | All methods are async |
|
|
| Project management | `client.project.*` (separate class) | `client.getProject()` / `client.updateProject()` |
|
|
| Context manager | `async with AsyncMemoryClient()` | Not supported |
|
|
|
|
## Platform Features: Python-only
|
|
|
|
These methods exist in Python but not TypeScript:
|
|
|
|
| Method | Description |
|
|
|--------|-------------|
|
|
| `get_summary(filters)` | Get summary of memories |
|
|
| `reset()` | Delete ALL data (users + memories) |
|
|
| `project.create(name)` | Create a new project |
|
|
| `project.delete()` | Delete current project |
|
|
| `project.get_members()` | List project members |
|
|
| `project.add_member(email, role)` | Add member to project |
|
|
| `project.update_member(email, role)` | Change member role |
|
|
| `project.remove_member(email)` | Remove member |
|
|
|
|
## Platform Features: TypeScript-only
|
|
|
|
| Method | Description |
|
|
|--------|-------------|
|
|
| `deleteUser(data)` | Convenience method for single entity deletion |
|
|
| `ping()` | Health check endpoint |
|
|
|
|
## OSS Config Naming
|
|
|
|
| Python config key | TypeScript config key |
|
|
|-------------------|----------------------|
|
|
| `vector_store` | `vectorStore` |
|
|
| `history_db_path` | `historyDbPath` |
|
|
| `custom_instructions` | `customInstructions` |
|
|
|
|
## OSS Scope Parameter Naming
|
|
|
|
| Python | TypeScript |
|
|
|--------|------------|
|
|
| `user_id="alice"` | `userId: 'alice'` |
|
|
| `agent_id="bot"` | `agentId: 'bot'` |
|
|
| `run_id="session"` | `runId: 'session'` |
|
|
|
|
## Entity ID Passing (v3)
|
|
|
|
| Method | Python | TypeScript |
|
|
|--------|--------|------------|
|
|
| add() | Top-level: `user_id="alice"` | Top-level: `{ userId: 'alice' }` |
|
|
| search() | In filters: `filters={"user_id": "alice"}` | In filters: `{ filters: { user_id: 'alice' } }` |
|
|
| get_all() | In filters: `filters={"user_id": "alice"}` | In filters: `{ filters: { user_id: 'alice' } }` |
|
|
|
|
## Common Gotcha
|
|
|
|
When searching/filtering, both Python and TypeScript use `snake_case` for filter keys. TypeScript only uses `camelCase` for top-level method parameters:
|
|
|
|
```python
|
|
# Python - snake_case in filters
|
|
results = client.search("query", filters={"user_id": "alice"})
|
|
```
|
|
|
|
```typescript
|
|
// TypeScript - snake_case in filters, camelCase for top-level params
|
|
const results = await client.search('query', { filters: { user_id: 'alice' }, topK: 20 });
|
|
```
|