Essential Examples

Core patterns for every Memori application. All examples use SQLite — swap the connection string for any supported database.

Basic Memory Creation

Register a client, set attribution, send a message — Memori captures it automatically.

import os
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from memori import Memori
from openai import OpenAI

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

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
mem = Memori(conn=SessionLocal).llm.register(client)
mem.attribution(entity_id="user_123", process_id="my_agent")
mem.config.storage.build()

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "My name is Alice and I love Python."}]
)
print(response.choices[0].message.content)

mem.augmentation.wait()  # Wait for background processing

Manual Recall

Search stored memories using natural language — semantic search, no exact keyword matching needed.

mem = Memori(conn=SessionLocal)
mem.attribution(entity_id="user_123", process_id="my_agent")

facts = mem.recall("user's name", limit=5)
preferences = mem.recall("programming languages", limit=3)
everything = mem.recall("tell me about this user", limit=10)

Multi-Turn Conversation

Each message adds to Memori's knowledge. The augmentation engine processes all turns cumulatively.

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
mem = Memori(conn=SessionLocal).llm.register(client)
mem.attribution(entity_id="user_456", process_id="chat_bot")
mem.config.storage.build()

messages = [{"role": "user", "content": "Hi, I'm Bob. I'm a data scientist."}]
r1 = client.chat.completions.create(model="gpt-4o-mini", messages=messages)
messages.append({"role": "assistant", "content": r1.choices[0].message.content})

messages.append({"role": "user", "content": "I mainly use PyTorch for my work."})
r2 = client.chat.completions.create(model="gpt-4o-mini", messages=messages)
messages.append({"role": "assistant", "content": r2.choices[0].message.content})

messages.append({"role": "user", "content": "I want to learn Rust this year."})
r3 = client.chat.completions.create(model="gpt-4o-mini", messages=messages)

mem.augmentation.wait()
facts = mem.recall("Bob's job and tools", limit=5)

Session Management

Sessions group related interactions. Use new_session() and set_session() to manage them.

mem.attribution(entity_id="user_789", process_id="assistant")

# Start a new session
session_1 = mem.new_session()
client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Book a meeting at 2pm."}]
)

# Start another session
session_2 = mem.new_session()
client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Cancel the 2pm meeting."}]
)

# Resume the first session
mem.set_session(session_1)

Multiple Entities

Switch entity_id to track different users. Each entity's memories are fully isolated.

mem.config.storage.build()

# Alice's memories
mem.attribution(entity_id="alice", process_id="assistant")
client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "I prefer dark mode in all my apps."}]
)

# Bob's memories
mem.attribution(entity_id="bob", process_id="assistant")
client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "I like light mode and large fonts."}]
)

mem.augmentation.wait()

# Recall is scoped — Alice's facts never appear in Bob's results
mem.attribution(entity_id="alice", process_id="assistant")
alice_prefs = mem.recall("UI preferences", limit=5)