Skip to main content

AbstractMemory

AbstractMemory is a Python library for durable, append-only agent memory. It provides two layers:

  • Layer 1 — triple truth: append-only, temporal, provenance-aware triple assertions with deterministic structured queries and optional vector/semantic retrieval, over in-memory, SQLite, or LanceDB backends.
  • Layer 2 — the memory system: a MemorySystem facade that turns those triples plus an append-only journal into a usage-weighted memory graph: typed record formation, stimulus-driven reconstruction (working memory that emerges from use), attention and decay, identity cores for long-lived entities, valence/gradation (how experience felt), diary conventions, sleep/consolidation, and a replay stream for observability.

Storage never decays and nothing is ever deleted; only retrieval strength changes. Reads are pure — rendering a memory does not strengthen it; only committed use does.

Status

Ecosystem (AbstractFramework)

AbstractMemory is a component of the AbstractFramework ecosystem. It has no dependency on AbstractCore or AbstractRuntime; embeddings for semantic retrieval can come from any OpenAI-compatible /embeddings endpoint (OpenAICompatTextEmbedder), from an AbstractGateway deployment (AbstractGatewayTextEmbedder), or from your own TextEmbedder implementation.

flowchart LR
  APP["Your app or agent"] --> MS["MemorySystem (layer 2)"]
  MS --> ST["Triple store (layer 1)"]
  MS --> J["Journal (append-only)"]
  ST --> IM["InMemoryTripleStore"]
  ST --> SQL["SQLiteTripleStore"]
  ST --> LDB["LanceDBTripleStore"]
  SQL --> F[("one SQLite file")]
  J --> F
  MS -. "optional embeddings" .-> E["TextEmbedder (OpenAI-compatible / Gateway / custom)"]

Related projects:

  • AbstractFramework: https://github.com/lpalbou/abstractframework
  • AbstractCore: https://github.com/lpalbou/abstractcore
  • AbstractRuntime: https://github.com/lpalbou/abstractruntime

Install

From source (recommended inside the AbstractFramework monorepo):

python -m pip install -e .

Optional LanceDB backend:

python -m pip install -e ".[lancedb]"

PyPI (packaged release):

python -m pip install AbstractMemory
python -m pip install "AbstractMemory[lancedb]"

The distribution name is AbstractMemory (pip is case-insensitive); the import name is abstractmemory. The [apple]/[gpu] extras are no-op compatibility aliases; [all], [all-apple], and [all-gpu] install the LanceDB backend.

Quick example — layer 1 (triples)

from abstractmemory import InMemoryTripleStore, TripleAssertion, TripleQuery

store = InMemoryTripleStore()
store.add([
    TripleAssertion(
        subject="Scrooge",
        predicate="related_to",
        object="Christmas",
        scope="session",
        owner_id="sess-1",
        provenance={"span_id": "span_123"},
    )
])

hits = store.query(TripleQuery(subject="scrooge", scope="session", owner_id="sess-1"))
assert hits[0].object == "christmas"      # terms are canonicalized (trim + lowercase)
assert hits[0].assertion_id is not None   # stores stamp read-side identity on results

Quick example — layer 2 (the memory system)

from abstractmemory import (
    MemorySystem, MemoryRecordInput, SQLiteTripleStore, SQLiteJournal, Stimulus,
)

store = SQLiteTripleStore("memory.sqlite3")
journal = SQLiteJournal("memory.sqlite3")   # sidecar tables in the same file
system = MemorySystem(store=store, journal=journal)

# Form a typed record (idempotent by key; forming is not using).
[record_id] = system.remember_many(
    [MemoryRecordInput(kind="episode", title="Pool outage",
                       digest="The connection pool saturated at noon.",
                       keywords=("pool", "outage"))],
    scope="session", owner_id="s1", idempotency_key="turn-1",
)

# Reconstruct working memory for a cue (pure read), then commit what you used.
result = system.reconstruct(Stimulus(cue_text="pool outage"), scopes=[("session", "s1")])
system.commit_selection(result.trace_id, [h.record_id for h in result.handles[:2]])

Documentation

Project

Design principles

  • Append-only, no deletion: updates are new assertions; belief revision is closure records (retract/supersede); forgetting is decay of retrieval strength plus closures and silencing — the substrate is lossless.
  • Reads are pure: reconstruction, inspection, replay, and the entity card deposit nothing. commit_selection is the only strengthening path.
  • One seq axis: the journal assigns a monotonic seq to every record; any past state is reproducible by anchoring reads at as_of.
  • Works-or-loud: degraded paths are labeled #FALLBACK in result warnings; invalid inputs raise actionable errors instead of silently meaning something else.
  • No heavy dependencies: SQLite persistence and vector scoring use the standard library; LanceDB and embedders are optional.

Download files

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

Source Distribution

abstractmemory-0.3.0.tar.gz (916.9 kB view details)

Uploaded Source

Built Distribution

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

abstractmemory-0.3.0-py3-none-any.whl (408.4 kB view details)

Uploaded Python 3

File details

Details for the file abstractmemory-0.3.0.tar.gz.

File metadata

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

File hashes

Hashes for abstractmemory-0.3.0.tar.gz
Algorithm Hash digest
SHA256 48e9d859c4a194a14fc329a3875058bab2d90f88014401b781a7126b436fa2a9
MD5 db212849f9d9b7fce1e1de7693571d02
BLAKE2b-256 9db4b8d0dc9a1253dcf1a40497d8fe84f16a5db13a34ae4cf3e64fd640e2b209

See more details on using hashes here.

Provenance

The following attestation bundles were made for abstractmemory-0.3.0.tar.gz:

Publisher: release.yml on lpalbou/AbstractMemory

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

File details

Details for the file abstractmemory-0.3.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for abstractmemory-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f1984dcd4b8623ef2c918e8bcd3ced43f1a67ddaaca7a2ba92f3d11ad17e458b
MD5 cba14be8c1dfc21c83324c7e859aec85
BLAKE2b-256 864630d1c05af7fe01fa8255659765aa2ca37a59e6701e66465658bafbc7591c

See more details on using hashes here.

Provenance

The following attestation bundles were made for abstractmemory-0.3.0-py3-none-any.whl:

Publisher: release.yml on lpalbou/AbstractMemory

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

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page