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)