App-Based Examples
Production-ready patterns for integrating Memori into web frameworks.
FastAPI
pip install memori openai fastapi uvicorn
import os
from fastapi import FastAPI
from pydantic import BaseModel
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from memori import Memori
from openai import OpenAI
app = FastAPI()
engine = create_engine("sqlite:///memori.db", connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(bind=engine)
Memori(conn=SessionLocal).config.storage.build()
class ChatRequest(BaseModel):
message: str
@app.post("/chat/{user_id}")
def chat(user_id: str, req: ChatRequest):
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
mem = Memori(conn=SessionLocal).llm.register(client)
mem.attribution(entity_id=user_id, process_id="fastapi_chat")
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": req.message}]
)
return {"response": response.choices[0].message.content}
@app.get("/recall/{user_id}")
def recall(user_id: str, query: str):
mem = Memori(conn=SessionLocal)
mem.attribution(entity_id=user_id, process_id="fastapi_chat")
return {"facts": mem.recall(query, limit=5)}
Flask
pip install memori openai flask
import os
from flask import Flask, request, jsonify
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from memori import Memori
from openai import OpenAI
def create_app():
app = Flask(__name__)
engine = create_engine("sqlite:///memori.db")
SessionLocal = sessionmaker(bind=engine)
Memori(conn=SessionLocal).config.storage.build()
@app.route("/chat", methods=["POST"])
def chat():
data = request.get_json()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
mem = Memori(conn=SessionLocal).llm.register(client)
mem.attribution(entity_id=data["user_id"], process_id="flask_chat")
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": data["message"]}]
)
return jsonify({"response": response.choices[0].message.content})
@app.route("/recall", methods=["GET"])
def recall():
mem = Memori(conn=SessionLocal)
mem.attribution(entity_id=request.args["user_id"], process_id="flask_chat")
return jsonify({"facts": mem.recall(request.args["query"], limit=5)})
return app
Django
pip install memori openai django
Memori uses its own SQLAlchemy connection alongside Django's ORM — no conflict.
# settings.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
MEMORI_ENGINE = create_engine("sqlite:///memori.db")
MEMORI_SESSION = sessionmaker(bind=MEMORI_ENGINE)
# views.py
import os, json
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings
from memori import Memori
from openai import OpenAI
Memori(conn=settings.MEMORI_SESSION).config.storage.build()
@csrf_exempt
def chat(request):
data = json.loads(request.body)
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
mem = Memori(conn=settings.MEMORI_SESSION).llm.register(client)
mem.attribution(entity_id=str(request.user.id), process_id="django_chat")
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": data["message"]}]
)
return JsonResponse({"response": response.choices[0].message.content})