126 lines
4.4 KiB
Markdown
126 lines
4.4 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", user_id="alice", top_k=5, rerank=True)
|
|
```
|
|
|
|
```typescript
|
|
// TypeScript: options object
|
|
await client.add(messages, { user_id: 'alice', metadata: { source: 'chat' } });
|
|
await client.search('query', { user_id: 'alice', top_k: 5, rerank: true });
|
|
```
|
|
|
|
**Important:** Both use `snake_case` for API parameter names (`user_id`, `agent_id`, `top_k`, etc.). Only method names differ.
|
|
|
|
Exception: OSS TypeScript uses `camelCase` for config params (`userId`, `agentId`, `runId`).
|
|
|
|
## 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` |
|
|
| `graph_store` | `graphStore` |
|
|
| `history_db_path` | `historyDbPath` |
|
|
| `custom_instructions` | `customInstructions` |
|
|
| `enable_graph` | `enableGraph` |
|
|
|
|
## OSS Scope Parameter Naming
|
|
|
|
| Python | TypeScript |
|
|
|--------|------------|
|
|
| `user_id="alice"` | `userId: 'alice'` |
|
|
| `agent_id="bot"` | `agentId: 'bot'` |
|
|
| `run_id="session"` | `runId: 'session'` |
|
|
|
|
## Common Gotcha
|
|
|
|
When searching/filtering, **both SDKs use `snake_case`** for filter keys:
|
|
|
|
```python
|
|
# Python
|
|
filters = {"AND": [{"user_id": "alice"}, {"categories": {"contains": "health"}}]}
|
|
```
|
|
|
|
```typescript
|
|
// TypeScript -- same snake_case in filter objects!
|
|
const filters = { AND: [{ user_id: 'alice' }, { categories: { contains: 'health' } }] };
|
|
```
|