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.