Framework Examples
Add persistent memory to AI agent frameworks. Memori wraps the underlying LLM client so conversations are captured automatically.
LangChain Agent
pip install memori openai langchain langchain-openai
import os
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from memori import Memori
from openai import OpenAI
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate
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="langchain_agent")
mem.config.storage.build()
# Recall memories for context
memories = mem.recall("user preferences and history", limit=5)
memory_context = "\n".join([str(m) for m in memories]) if memories else "No prior memories."
# Create agent with memory context
llm = ChatOpenAI(model="gpt-4o-mini", client=client)
prompt = ChatPromptTemplate.from_messages([
("system", f"You are a helpful assistant.\n\nUser memories:\n{memory_context}"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}")
])
agent = create_tool_calling_agent(llm, tools=[], prompt=prompt)
executor = AgentExecutor(agent=agent, tools=[])
result = executor.invoke({"input": "Remember that I prefer Python over JavaScript."})
print(result["output"])
mem.augmentation.wait()
Pydantic AI Agent
pip install memori openai pydantic-ai
import os
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from memori import Memori
from openai import OpenAI
from pydantic_ai import Agent
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="pydantic_agent")
mem.config.storage.build()
memories = mem.recall("user information", limit=5)
memory_str = "\n".join([str(m) for m in memories]) if memories else "No prior memories."
agent = Agent(
"openai:gpt-4o-mini",
system_prompt=f"You are a helpful assistant.\n\nKnown facts:\n{memory_str}"
)
result = agent.run_sync("My favorite food is sushi and I'm allergic to peanuts.")
print(result.data)
mem.augmentation.wait()
Multi-Agent Workflow
Multiple agents share memory through the same entity_id but different process_id values.
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.config.storage.build()
# Agent 1: Intake — gathers info
mem.attribution(entity_id="customer_42", process_id="intake_agent")
client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "I need help migrating from MySQL to PostgreSQL. 50GB of data, 200 tables."}]
)
mem.augmentation.wait()
# Agent 2: Specialist — uses intake context
mem.attribution(entity_id="customer_42", process_id="migration_agent")
context = mem.recall("migration requirements", limit=10)
context_str = "\n".join([str(c) for c in context]) if context else ""
client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": f"Known context:\n{context_str}"},
{"role": "user", "content": "Create a migration plan for this customer."}
]
)
mem.augmentation.wait()
More examples on GitHub.