SDKsPython

Python SDK

pip install mnemosyne-sdk
# or
uv add mnemosyne-sdk

Construct

from mnemo import MnemosyneClient
 
mnemo = MnemosyneClient(
    base_url="http://localhost:3000",
    api_key="mns_live_xxx",
    timeout=10.0,        # seconds
    retries=3,
)

Core methods

# Recall
result = mnemo.recall(query="coffee preferences", top_k=3)
for hit in result.hits:
    print(f"{hit.score:.3f}  {hit.statement}")
 
# Remember
fact = mnemo.facts.create(content="user prefers espresso", tags=["coffee"])
 
# Forget
mnemo.facts.forget(fact.id, reason="user told us they switched to tea")
 
# Pin
mnemo.facts.pin(fact.id, pinned=True)
 
# Timeline
items = mnemo.timeline(from_=datetime.utcnow() - timedelta(days=7))

Async

from mnemo import AsyncMnemosyneClient
 
async with AsyncMnemosyneClient(...) as mnemo:
    result = await mnemo.recall(query="coffee preferences", top_k=3)

The async client is preferred inside FastAPI / Starlette / Litestar applications — it lets you stream multiple recalls concurrently.

Iterators

for fact in mnemo.facts.list(page_size=100):
    process(fact)

Cursor pagination handled internally.

Typed errors

from mnemo import MnemoConflictError, MnemoRateLimitError
 
try:
    mnemo.facts.create(content="redis is at 6.2")
except MnemoConflictError as e:
    print("Conflicting fact:", e.conflicts[0].id)
except MnemoRateLimitError as e:
    time.sleep(e.retry_after)

Idempotency

mnemo.facts.create(
    content="user prefers espresso",
    idempotency_key=str(uuid.uuid4()),
)

LangChain / LlamaIndex adapters

from mnemosyne.langchain import MnemosyneMemory
from mnemosyne.llamaindex import MnemosyneRetriever

Thin wrappers around recall. Drop into any chain or retriever pipeline.

Python >=3.9 required. The SDK uses httpx for transport and pydantic for the response models.