Back to Mem0

Python vs TypeScript SDK Differences

skills/mem0/client/differences.md

2.0.54.9 KB
Original Source

Python vs TypeScript SDK Differences

Quick-reference cheatsheet for developers working across both Mem0 SDKs.

Constructor

AspectPythonTypeScript
Import (Platform)from mem0 import MemoryClientimport MemoryClient from 'mem0ai'
Import (OSS)from mem0 import Memoryimport { Memory } from 'mem0ai/oss'
ConstructorMemoryClient(api_key="m0-xxx")new MemoryClient({ apiKey: 'm0-xxx' })
Required paramapi_key (positional or kwarg)apiKey (in options object)

Both read from MEM0_API_KEY env var if no key provided.

Method Naming

OperationPythonTypeScript
Addadd()add()
Searchsearch()search()
Getget()get()
Get allget_all()getAll()
Updateupdate()update()
Deletedelete()delete()
Delete alldelete_all()deleteAll()
Historyhistory()history()
Batch updatebatch_update()batchUpdate()
Batch deletebatch_delete()batchDelete()
List usersusers()users()
Delete usersdelete_users()deleteUsers()
Get projectproject.get()getProject()
Update projectproject.update()updateProject()
Create webhookcreate_webhook()createWebhook()
Get webhooksget_webhooks()getWebhooks()
Update webhookupdate_webhook()updateWebhook()
Delete webhookdelete_webhook()deleteWebhook()
Create exportcreate_memory_export()createMemoryExport()
Get exportget_memory_export()getMemoryExport()
Feedbackfeedback()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

AspectPythonTypeScript
HTTP libraryhttpxaxios
Default timeout300s60s
Sync supportYes (MemoryClient)No (all async)
Async supportYes (AsyncMemoryClient)All methods are async
Project managementclient.project.* (separate class)client.getProject() / client.updateProject()
Context managerasync with AsyncMemoryClient()Not supported

Platform Features: Python-only

These methods exist in Python but not TypeScript:

MethodDescription
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

MethodDescription
deleteUser(data)Convenience method for single entity deletion
ping()Health check endpoint

OSS Config Naming

Python config keyTypeScript config key
vector_storevectorStore
history_db_pathhistoryDbPath
custom_instructionscustomInstructions

OSS Scope Parameter Naming

PythonTypeScript
user_id="alice"userId: 'alice'
agent_id="bot"agentId: 'bot'
run_id="session"runId: 'session'

Entity ID Passing (v3)

MethodPythonTypeScript
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 });