Skip to main content

Config

Everything is one frozen object. Nothing in this package reads the environment unless you call Config.from_env(), and the OpenAI key is never written back into os.environ. Only two fields are required.
Config.prefetch and Config.writer are nested objects covering the speculative retrieval thresholds and the background write queue. Both have working defaults.
writer.drain_timeout_s defaults to 12 seconds because it must exceed the p95 of a full ingest. A shorter value silently discards the last turn of every call.

Python API

build

Constructs the pool, the OpenAI client, both stores and the classifier, verifies the database was migrated for the configured embedding model, and warns if tenant isolation is not actually in force. Returns a Runtime, which is process-scoped and shared by every session in the worker.

Runtime

VoiceMemory

MemoryHooks

The only LiveKit-aware surface.
An uncaught exception inside on_user_turn_completed is swallowed by LiveKit and drops the user’s turn entirely, producing no reply at all. Every failure path in this method is contained for that reason: a memory failure degrades to no memory, never to silence.

Protocols

Four seams, defined with typing.Protocol. Structural typing means your implementation never imports anything from this package. container.py is the only module that names a concrete class.

voicemem-db

Schema management. Run it with a role that has DDL rights, not your runtime role.
status reports whether row-level security is actually enforced for the role you connected as, rather than only whether the policies exist. Those are different things, and the difference is easy to miss.