Skip to main content

Persistent, queryable AI memory for any Python app — local-first, zero API cost

Project description

retainr

CI

Persistent, queryable memory for any Python AI app — local-first, zero API cost.

PyPI version License: MIT Python 3.10+


What is it?

retainr gives any AI app a long-term memory layer — without needing an API key, a cloud service, or a database server.

Store things. Recall them semantically. Forget them. All locally.

from retainr import Memory

mem = Memory(user_id="arjun")

mem.remember("I prefer dark mode and use VS Code")
mem.remember("Currently building a job application assistant")
mem.remember("I like concise answers over long explanations")

results = mem.recall("what tools does the user prefer?")
for r in results:
    print(f"[{r['score']:.3f}] {r['text']}")
[0.412] I prefer dark mode and use VS Code
[0.289] I like concise answers over long explanations

CLI Demo

alt text

Stats

alt text


Install

pip install retainr

Features

  • 🧠 Semantic recall — finds memories by meaning, not exact keywords
  • 📉 Memory decay — old memories fade in relevance automatically
  • Importance scoring — weight memories by how significant they are
  • 🏷️ Tags — organize memories into namespaces
  • 🗑️ Forget & clear — GDPR-friendly deletion
  • 💾 Local-first — uses FAISS + SQLite, no external services
  • 🆓 Zero cost — no API keys, no cloud, runs on your machine

API Reference

Memory(user_id, db_path)

from retainr import Memory

mem = Memory(user_id="alice", db_path="memory.db")
Param Default Description
user_id "default" Isolates memories per user
db_path "memory.db" SQLite file path. Use ":memory:" for in-RAM (tests)

remember(text, tags, importance, decay_days)

Store a memory.

mid = mem.remember(
    "User just got promoted to SDE-2",
    tags=["career", "milestone"],
    importance=0.9,   # 0.0–1.0, default 0.5
    decay_days=90,    # score halves every 90 days, 0 = no decay
)

Returns: str — the memory ID (use it to forget() later)


recall(query, top_k)

Find the most semantically relevant memories.

results = mem.recall("what is the user's job status?", top_k=3)
# [{"id": ..., "text": ..., "score": 0.87, "tags": [...], ...}]

forget(memory_id)

Delete a specific memory.

mem.forget(mid)

clear()

Wipe all memories for this user.

mem.clear()

export(filepath)

Backup all memories to JSON.

mem.export("my_memories.json")

How it works

  1. remember() → text is embedded using sentence-transformers (all-MiniLM-L6-v2, runs locally) → vector stored in FAISS, metadata in SQLite
  2. recall() → query is embedded → FAISS finds top-k nearest vectors → SQLite returns the original text
  3. Scoring → final score = cosine similarity × (0.7 + 0.3 × decayed importance)

Why not mem0 / Zep / etc.?

retainr mem0 Zep
Local-first
API key needed
Cost Free Paid tiers Paid tiers
Memory decay
pip install

Stack


License

MIT © Devarajan

Project details


Download files

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

Source Distribution

retainr-0.4.0.tar.gz (346.3 kB view details)

Uploaded Source

Built Distribution

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

retainr-0.4.0-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file retainr-0.4.0.tar.gz.

File metadata

  • Download URL: retainr-0.4.0.tar.gz
  • Upload date:
  • Size: 346.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.9

File hashes

Hashes for retainr-0.4.0.tar.gz
Algorithm Hash digest
SHA256 a2fc278b80680c903488d7382a5c22b1a0e9bb2510cdef66e41fdc1899df90be
MD5 dbed3fdcc4510feb62e2b0e975afdbed
BLAKE2b-256 b06a367963d5e9dd41a8a58ccdd8933d52ef0954563fa6ecafbe8ec732a3c9aa

See more details on using hashes here.

File details

Details for the file retainr-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: retainr-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 9.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.9

File hashes

Hashes for retainr-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 44630c2295ef41fbedb4dcf48310ac2ca582e9d36a0b67b5f3357a026ec7fc7d
MD5 172cb66fdbe39a57acef4dbc5f40ed77
BLAKE2b-256 22473c5b2e586dd20c88b0dc4851ba2b21ed1faadd47dc92ce1a1dcc97029390

See more details on using hashes here.

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