Skip to main content

KAOS Memory

kaos-memory is the production-grade agent memory library for KAOS: one package that owns the wire contract, the tiered storage engine and HTTP service, the service client, and an optional Pydantic AI integration. It is packaged so consumers only pull what they use.

Install Modules Dependencies
kaos-memory (core) kaos_memory.contract, kaos_memory.client Pydantic + httpx only
kaos-memory[service] kaos_memory.app, kaos_memory.stores, kaos_memory.config + Mem0, Chroma/pgvector, tiktoken, FastAPI
kaos-memory[pydantic-ai] kaos_memory.pydantic_ai + Pydantic AI
  • kaos_memory.contract — the HTTP contract: Scope selects reads/erasure, while level-less Attribution carries write identities.
  • kaos_memory.clientMemoryServiceClient, the framework-agnostic best-effort HTTP client for the service (recall degrades to empty; write/forget are fail-soft unless failure_mode="strict").
  • kaos_memory.pydantic_ai — direct Pydantic AI integration: message/turn adapters (pydantic_message_to_turns, reconstruct_message_history), server-side scope derivation (scope_from_deps), and the opt-in memory toolset (MemoryTools, build_memory_toolset).

The service ([service] extra) composes two atomic, independently-testable stores:

  • LongTermStore — wraps Mem0 as a library and exposes scope-mapped write / recall / delete / delete_scope. It is the only importer of mem0. Writes preserve compound user/agent attribution plus session/group metadata, and scope filters are applied inside vector queries so recall never crosses the selected boundary.
  • ShortTermStore — a per-session relational short-term buffer bounding a verbatim recency window by a token budget, with an opt-in fold that compacts evicted turns into a versioned per-session medium-term digest rather than truncating them. Every key combines the store group and session id, never the writing agent or principal, so the same run is addressable through any entitled recall scope while concurrent sessions never interleave raw turns. Folding is amortised by high/low water marks (evict down to the low mark on crossing the high mark), the digest is kept as append-only versions under a retention cap, and each fold's evicted batch is returned so callers can cascade it to long-term extraction. On Postgres the window is an UNLOGGED table and folds are serialised per session by an advisory lock so replicas cannot double-fold.

Both bind their models to a resolved OpenAI-compatible endpoint (a KAOS ModelAPI) via a single ModelConfig, and run in one of two storage modes:

Mode Vector store Short-term table Topology
local embedded Chroma SQLite single container on one PVC
external pgvector Postgres stateless, shared Postgres

Scope model

A Scope selects long-term read visibility and erasure. An Attribution write carries every verified contributor (user_id and real agent_id) plus session/group metadata, with no scope level. The service authoritatively enforces KAOS_MEMORY_REQUIRE_PRINCIPAL and KAOS_MEMORY_REQUIRE_AGENT_IDENTITY; runtime checks are defence in depth.

Scope level Long-term read filter
agent agent_id = <real agent identity> and, when present, user_id = <principal>
user user_id = <principal>; includes everything that user contributed through any agent/session
session kaos_run = <session id> and, when present, user_id = <principal>
store user_id = "*", kaos_group = <active collection name>; admin plane only

The wildcard is the pinned Mem0 2.0.10 convention required for custom-metadata filters. The internal kaos_group value is the configured collection name because one MemoryStore is the physical boundary; there is no synthetic agent sentinel. User/agent erasure uses native entity deletion, while session/store erasure filters custom attribution and deletes matching ids when Mem0 lacks a filtered-delete surface.

Short- and medium-term keys have the form kaos_group:<store group>|run:<session id> (or just run:<session id> without a configured group). A principal-bound read must match the session's attribution; a mismatch returns empty. A separate attribution index preserves user-, agent-, and store-level erasure without putting those identities into the session key.

Recall and list requests select tiers with include: ["short_term", "medium_term", "long_term"]. Responses contain only requested tier objects: long_term.{facts,block}, medium_term.summary, and short_term.window, plus top-level degraded.

Development

make build            # install with dev extras into the active venv
make test             # run the unit tests
make lint             # black --check + ty type check
make format           # black

Running the pgvector / Postgres tests

The external-mode tests are gated behind the pgvector marker and a DSN env var. Start a local container and point the tests at it:

docker run -d --name kaos-pgv \
  -e POSTGRES_PASSWORD=pw -e POSTGRES_DB=memdb \
  -p 55432:5432 pgvector/pgvector:pg16

export KAOS_TEST_PGVECTOR_DSN=postgresql://postgres:pw@localhost:55432/memdb
pytest tests/ -v

Without the DSN set, the pgvector-marked tests are skipped and the local Chroma/SQLite tests run on their own.

Layout

Module Purpose
config.py typed storage, model and short-term tier configuration
stores.py the whole storage layer: the Scope value object and Mem0 owner mapping, token counting, the OpenAI-compatible model client, the relational short-term store, and the Mem0-backed long-term adapter

The HTTP service, the agent-runtime client, and the operator wiring that resolves this configuration from a MemoryStore resource are built in subsequent phases.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kaos_memory-0.7.3.tar.gz (266.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kaos_memory-0.7.3-py3-none-any.whl (38.3 kB view details)

Uploaded Python 3

File details

Details for the file kaos_memory-0.7.3.tar.gz.

File metadata

  • Download URL: kaos_memory-0.7.3.tar.gz
  • Upload date:
  • Size: 266.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for kaos_memory-0.7.3.tar.gz
Algorithm Hash digest
SHA256 58f3457983c997467f6705f62868c06bbc842efe17d6e824227762bcae9f0b2a
MD5 f51243d282598e4b562c4af2138cce86
BLAKE2b-256 589cf3b5d6e38d3114bc5e2a08680302540a6b3937caca47eb1db9f6f2439535

See more details on using hashes here.

Provenance

The following attestation bundles were made for kaos_memory-0.7.3.tar.gz:

Publisher: release.yaml on axsaucedo/kaos

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kaos_memory-0.7.3-py3-none-any.whl.

File metadata

  • Download URL: kaos_memory-0.7.3-py3-none-any.whl
  • Upload date:
  • Size: 38.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for kaos_memory-0.7.3-py3-none-any.whl
Algorithm Hash digest
SHA256 05e30968c1fccfbd0de2198588dd68e7ee03cd544a6ded65735ba8413c31342e
MD5 19079c84c211f67da9d954dcc327e5f5
BLAKE2b-256 79d1529681179d77c67711f728b4b9457f6c43b9b01dddf30729d618df9989da

See more details on using hashes here.

Provenance

The following attestation bundles were made for kaos_memory-0.7.3-py3-none-any.whl:

Publisher: release.yaml on axsaucedo/kaos

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.7.4

2 files

This release

0.7.3 This release

2 files

0.7.2

2 files

0.7.1

2 files

0.7.0

2 files

0.6.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page