Python SDK
pip install mnemosyne-sdk
# or
uv add mnemosyne-sdkConstruct
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 MnemosyneRetrieverThin 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.