Observed since 20 Oct, 17:41 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
AbstractMemory: temporal, provenance-aware semantic memory primitives for AbstractFramework.
AbstractMemory is a Python library for durable, append-only agent memory. It provides two layers:
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.
pyproject.toml.src/abstractmemory/__init__.py; docs/api.md documents it.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:
https://github.com/lpalbou/abstractframeworkhttps://github.com/lpalbou/abstractcorehttps://github.com/lpalbou/abstractruntimeFrom 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.
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
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]])
docs/getting-started.mddocs/architecture.mddocs/memory-system.mddocs/api.mddocs/stores.mddocs/operator.mddocs/faq.mddocs/troubleshooting.mddocs/development.mdCHANGELOG.mdCONTRIBUTING.mdCODE_OF_CONDUCT.mdSECURITY.mdLICENSEACKNOWLEDGMENTS.mdcommit_selection is the only strengthening path.seq to every record; any past state is reproducible by anchoring reads at as_of.#FALLBACK in result warnings; invalid inputs raise actionable errors instead of silently meaning something else.Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.3.2 | 20 Oct 2026 | 2 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 17:41 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:d0bcbc2e31855236b66ee990c2eebdfec6a616f544a86c2babd0ca2afb25dc60