Python SDK

Official Python client for Memoid

Installation

pip install memoid

Quick Start

from memoid import MemoryClient

client = MemoryClient("your-api-key")

# Add memory
client.add(
    messages=[
        {"role": "user", "content": "I love hiking"}
    ],
    user_id="user_123"
)

# Search
results = client.search(
    query="hobbies",
    user_id="user_123"
)

Client Configuration

from memoid import MemoryClient

client = MemoryClient(
    api_key="your-api-key",
    base_url="https://api.memoid.dev",  # Custom endpoint
    timeout=30,  # Request timeout in seconds
)

Memory Operations

Add Memories

result = client.add(
    messages=[
        {"role": "user", "content": "My name is Alex"},
        {"role": "assistant", "content": "Nice to meet you!"}
    ],
    user_id="user_123",
    agent_id="assistant_1",  # Optional
    metadata={"source": "chat"},  # Optional
    infer=True,  # Extract facts (default)
    extract_graph=False  # Extract entities (default)
)

for memory in result.memories:
    print(f"Added: {memory.memory}")

List Memories

memories = client.list(
    user_id="user_123",
    limit=50
)

for m in memories:
    print(f"{m.id}: {m.memory}")

Get Memory

memory = client.get("mem_abc123")
print(memory.memory)

Update Memory

client.update(
    "mem_abc123",
    memory="Updated text",
    metadata={"updated": True}
)

Delete Memory

client.delete("mem_abc123")

Delete All

client.delete_all(user_id="user_123")

Search

results = client.search(
    query="What does the user like?",
    user_id="user_123",
    limit=10,
    threshold=0.7
)

for r in results:
    print(f"{r.memory} (score: {r.score:.2f})")

Knowledge Graph

Extract Knowledge

result = client.extract_knowledge(
    text="John works at Acme Corp",
    store=True
)

for entity in result.entities:
    print(f"Entity: {entity.name} ({entity.type})")

Add Entity

client.add_entity(
    name="Acme Corp",
    type="organization",
    attributes={"industry": "tech"}
)

Add Relationship

client.add_relationship(
    source="John",
    relation="works_at",
    target="Acme Corp"
)

Query Graph

result = client.graph_query(
    entity="John",
    depth=2
)

for entity in result.entities:
    print(entity.name)

Async Support

import asyncio
from memoid import AsyncMemoryClient

async def main():
    client = AsyncMemoryClient("your-api-key")

    result = await client.add(
        messages=[{"role": "user", "content": "Hello"}],
        user_id="user_123"
    )

    results = await client.search(
        query="greetings",
        user_id="user_123"
    )

asyncio.run(main())

Error Handling

from memoid import MemoryClient, MemoidError, RateLimitError

client = MemoryClient("your-api-key")

try:
    client.add(messages=[...], user_id="user_123")
except RateLimitError as e:
    print(f"Rate limited. Retry after {e.retry_after} seconds")
except MemoidError as e:
    print(f"Error: {e.message}")

Complete Example

import openai
from memoid import MemoryClient

memory = MemoryClient("memoid-key")
openai.api_key = "openai-key"

def chat(user_id: str, message: str) -> str:
    # Get context
    memories = memory.search(query=message, user_id=user_id, limit=5)
    context = "\n".join([f"- {m.memory}" for m in memories])

    # Generate response
    response = openai.chat.completions.create(
        model="gpt-4",
        messages=[
            {"role": "system", "content": f"Context:\n{context}"},
            {"role": "user", "content": message}
        ]
    )

    reply = response.choices[0].message.content

    # Store conversation
    memory.add(
        messages=[
            {"role": "user", "content": message},
            {"role": "assistant", "content": reply}
        ],
        user_id=user_id
    )

    return reply