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.

Metadata

Release files for AbstractMemory 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for AbstractMemory 0.3.0
File Size Uploaded
abstractmemory-0.3.0.tar.gz 916.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for AbstractMemory 0.3.0
File Interpreter ABI Platform
abstractmemory-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.3 MB

Release files / abstractmemory-0.3.0.tar.gz

Download URL abstractmemory-0.3.0.tar.gz
Size 916.9 kB
Tags Source
SHA-256 checksum
How to use checksums
48e9d859c4a194a14fc329a3875058bab2d90f88014401b781a7126b436fa2a9
BLAKE2b-256 checksum
How to use checksums
9db4b8d0dc9a1253dcf1a40497d8fe84f16a5db13a34ae4cf3e64fd640e2b209
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.

Transparency log

Release files / abstractmemory-0.3.0-py3-none-any.whl

Download URL abstractmemory-0.3.0-py3-none-any.whl
Size 408.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f1984dcd4b8623ef2c918e8bcd3ced43f1a67ddaaca7a2ba92f3d11ad17e458b
BLAKE2b-256 checksum
How to use checksums
864630d1c05af7fe01fa8255659765aa2ca37a59e6701e66465658bafbc7591c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.1.0

2 release files

0.0.2

2 release files

0.0.1

2 release 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