Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/MemoriLabs/Memori/llms.txt

Use this file to discover all available pages before exploring further.

MySQL

If your infrastructure already runs MySQL or MariaDB, you can use it directly with Memori without setting up a separate database.

Install

pip install memori pymysql

Quick Start

from memori import Memori
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine(
    "mysql+pymysql://user:password@localhost:3306/memori_db",
    pool_pre_ping=True
)
SessionLocal = sessionmaker(bind=engine)

mem = Memori(conn=SessionLocal)
mem.config.storage.build()

Connection Strings

DriverConnection String
PyMySQLmysql+pymysql://user:pass@host:3306/database
mysqlclientmysql+mysqldb://user:pass@host:3306/database
With charsetmysql+pymysql://user:pass@host:3306/database?charset=utf8mb4
With SSLmysql+pymysql://user:pass@host:3306/database?ssl_ca=/path/to/ca.pem

Complete Example

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

# Setup MySQL with connection pooling
engine = create_engine(
    "mysql+pymysql://user:password@localhost:3306/memori_db"
    "?charset=utf8mb4",
    pool_pre_ping=True,
    pool_size=5,
    max_overflow=10,
    pool_recycle=1800
)
SessionLocal = sessionmaker(bind=engine)

# Setup Memori with OpenAI
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": "I work at Acme Corp as a designer."}]
)
print(response.choices[0].message.content)

mem.augmentation.wait()
facts = mem.recall("workplace")
print(facts)

MariaDB

MariaDB uses the same drivers and connection strings as MySQL:
engine = create_engine(
    "mysql+pymysql://user:password@mariadb-host:3306/memori_db",
    pool_pre_ping=True
)
Always use charset=utf8mb4 to ensure proper Unicode support for storing text embeddings and multilingual content.

Connection Pooling

Recommended settings for production:
engine = create_engine(
    "mysql+pymysql://user:password@localhost:3306/memori_db",
    pool_pre_ping=True,       # Check connection health
    pool_size=5,              # Minimum pool connections
    max_overflow=10,          # Additional connections under load
    pool_recycle=1800         # Recycle connections after 30 min
)

Build docs developers (and LLMs) love