Anthropic

Memori supports all Anthropic Claude models. Register your client once and every conversation is automatically captured and stored. Note: max_tokens is required for all Anthropic API calls.

Want a zero-setup option? The Memori Cloud at app.memorilabs.ai.

Quick Start

Anthropic Integration
from anthropic import Anthropic
from memori import Memori
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("sqlite:///memori.db")
SessionLocal = sessionmaker(bind=engine)

client = Anthropic()
mem = Memori(conn=SessionLocal).llm.register(client)
mem.config.storage.build()
mem.attribution(entity_id="user_123", process_id="claude_assistant")

response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello!"}]
)
print(response.content[0].text)

Supported Modes

ModePythonTypeScript
Syncclient.messages.create()
Asyncawait client.messages.create()await client.messages.create()
Streamedclient.messages.stream()await client.messages.create({ stream: true })

Additional Modes

Async (Python)

import asyncio
from anthropic import AsyncAnthropic
from memori import Memori
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("sqlite:///memori.db")
SessionLocal = sessionmaker(bind=engine)

client = AsyncAnthropic()
mem = Memori(conn=SessionLocal).llm.register(client)
mem.config.storage.build()
mem.attribution(entity_id="user_123", process_id="claude_assistant")

async def main():
    response = await client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=1024,
        messages=[{"role": "user", "content": "Hello!"}]
    )
    print(response.content[0].text)

asyncio.run(main())

Streaming (Python)

from anthropic import Anthropic
from memori import Memori
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("sqlite:///memori.db")
SessionLocal = sessionmaker(bind=engine)

client = Anthropic()
mem = Memori(conn=SessionLocal).llm.register(client)
mem.config.storage.build()
mem.attribution(entity_id="user_123", process_id="claude_assistant")

with client.messages.stream(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello!"}]
) as stream:
    for text in stream.text_stream:
        print(text, end="")

Multi-Turn Conversations

Multi-Turn Conversations
from anthropic import Anthropic
from memori import Memori
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("sqlite:///memori.db")
SessionLocal = sessionmaker(bind=engine)

client = Anthropic()
mem = Memori(conn=SessionLocal).llm.register(client)
mem.attribution(entity_id="user_123", process_id="claude_assistant")

messages = [{"role": "user", "content": "My favorite color is blue."}]
first = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=messages
)
print(f"Assistant: {first.content[0].text}")
messages.append({"role": "assistant", "content": first.content[0].text})

messages.append({"role": "user", "content": "What did I just tell you?"})
second = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=messages
)
print(f"Assistant: {second.content[0].text}")

System Prompts

Anthropic supports a top-level system parameter separate from the messages array. Memori captures both.

System Prompts
response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system="You are a helpful coding assistant.",
    messages=[{"role": "user", "content": "Explain Python decorators."}]
)
print(response.content[0].text)