A FastAPI service that stores conversational facts and hands back relevant context, so an agent can appear to remember a user without you building the plumbing yourself.
That's the official, harsh unigram-overlap F1 the LoCoMo paper itself uses, not a lenient LLM-judge score. The README's full writeup includes the two experiments that made the number worse before the one that actually moved it, and a ranking bug the benchmark itself found and that's now fixed in code. Nothing here is dressed up.
Multi-tenancy resolved server-side from a hashed API key, one pooled collection with payload-filter isolation, an audit log on every access. Cloud-first by design, not a deployment detail bolted on later.
Semantic memory. Every fact embedded locally, cosine similarity, one pooled collection across tenants.
Working memory: last 10 turns, retrieval-frequency counters, a short-lived semantic query cache.
Entities and LLM-extracted relationships, powering one-hop graph expansion at recall time.
The control plane: tenants, API keys, audit log. Survived the move off a sqlite file that couldn't handle a second replica.
Memory systems are the textbook case for prompt injection: anything a user says gets stored and replayed into every future prompt. Rather than just reasoning about it, these were run as real attacks against the live API.
Full write-up, including the one dependency finding that's documented but not yet patched, is in the README under Verified live and Known gaps.
Qdrant, Redis, Neo4j, and Postgres in one compose file. Register a tenant, write a memory, search for it, all documented in the README with copy-pasteable curl examples.