Skip to main content

widemem

widemem fish   Goldfish memory? ¬_¬ Fixed.

PyPI version PyPI downloads CI OpenSSF Scorecard License Python

widemem is a local-first memory layer for LLM apps. It extracts facts from conversations, ranks them by importance and recency, resolves contradictions in one LLM call, and tells your agent how confident it is before it answers. By default everything runs on your machine: Ollama for the LLM, sentence-transformers for embeddings, FAISS and SQLite for storage. Cloud providers (OpenAI, Anthropic) are optional add-ons.

Install

pip install "widemem-ai[local]"   # FAISS, Ollama client, sentence-transformers
ollama pull llama3.1:8b           # the default local model, 4.9 GB

You need Ollama installed and running. The first run also downloads the all-MiniLM-L6-v2 embedding model (about 90 MB) from Hugging Face; after that, set HF_HUB_OFFLINE=1 and widemem runs fully offline. Python 3.10+.

What local costs: [local] pulls PyTorch through sentence-transformers (about 550 MB on macOS; more on Linux with CUDA wheels), and each add() makes two LLM calls, extract then resolve. On an Apple M4 with 32 GB, an add() took 5 to 17 seconds and a search 0.04 seconds. The default is llama3.1:8b because llama3.2 (3B) kept the stale fact and split "I'm allergic to penicillin" into one fact per word in every one of our test runs.

Upgrading from 1.6 or earlier: the defaults moved from OpenAI to local, and a 1536-dimension FAISS index will not load under the 384-dimension default embedder. Set provider="openai" on both LLMConfig and EmbeddingConfig to keep the old behavior. Details in the changelog.

Quick start

from widemem import WideMemory, MemoryConfig
from widemem.core.types import VectorStoreConfig

memory = WideMemory(MemoryConfig(
    vector_store=VectorStoreConfig(provider="faiss", path="./widemem_data"),
))

memory.add("I live in San Francisco and work as a software engineer", user_id="alice")
memory.add("I just moved to Boston", user_id="alice")   # checked against stored facts: ADD, UPDATE or DELETE

results = memory.search("where does alice live", user_id="alice")
if results:
    print(results[0].memory.content)                   # results.confidence says how sure it is
    history = memory.get_history(results[0].memory.id) # every write is logged

Without a path, FAISS keeps vectors in RAM and they are gone when the process exits; the SQLite history persists either way. WideMemory also works as a context manager.

Cloud providers, if you want them

No memory, prompt or embedding leaves your machine unless you configure a cloud provider. Each provider picks its own default model.

pip install "widemem-ai[openai,faiss]"      # or [anthropic,local] for Claude + local embeddings
from widemem import WideMemory, MemoryConfig
from widemem.core.types import EmbeddingConfig, LLMConfig

# OpenAI for both: gpt-4o-mini and text-embedding-3-small
memory = WideMemory(MemoryConfig(
    llm=LLMConfig(provider="openai"),
    embedding=EmbeddingConfig(provider="openai"),
))

# Claude for extraction; embeddings and vectors stay local
memory = WideMemory(MemoryConfig(llm=LLMConfig(provider="anthropic")))

Set OPENAI_API_KEY or ANTHROPIC_API_KEY. Mixing is fine: a cloud LLM with local embeddings keeps every vector on your machine.

widemem architecture: the default stack runs on your machine; OpenAI, Anthropic, Qdrant and pgvector are optional

Layer Default (local) Options
LLM Ollama llama3.1:8b OpenAI, Anthropic, any Ollama model
Embeddings sentence-transformers all-MiniLM-L6-v2 Ollama nomic-embed-text, OpenAI
Vectors FAISS Qdrant (embedded or localhost:6333), pgvector
History SQLite

Every field and default: docs/configuration.md.

How widemem differs

Feature What it does
Importance and decay The LLM rates each fact 1 to 10. Search blends similarity, importance and recency, with weights adapted to the question type.
Batch conflict resolution New facts and the related stored memories go to the LLM in one call, which decides ADD, UPDATE, DELETE or no-op for each.
YMYL protection Opt-in. Health, financial, legal and safety facts get an importance floor of 8, no decay, and forced contradiction checks. Regex catches the obvious cases; the extraction LLM tags the implied ones.
Confidence Every search returns HIGH, MODERATE, LOW or NONE, so an agent can say "I don't have that" instead of guessing.
Hierarchy summarize() rolls facts into summaries and themes (a no-op under 10 facts unless force=True). In balanced and deep mode, broad questions then get themes and specific ones get facts.
Retrieval modes fast, balanced and deep retrieve 10, 25 or 50 memories.
Audit log Adds, updates, deletes, imports and pins are logged to SQLite with the content on both sides. Entries record what changed and when, not who.

How each one works, with snippets: docs/guide.md. YMYL details and limits: YMYL.md.

Benchmark

On LoCoMo's 1,540 answerable questions (the adversarial category excluded, as for every system on the comparison page), widemem 1.5.0 scored 55.15% with an independent GPT-4o judge (56.32% self-graded), using about 213 tokens of context per query. That run used OpenAI (gpt-4o-mini, text-embedding-3-small) with top_k=10 per speaker; the local default has not been benchmarked yet. It places widemem in the lower half of the eight systems on widemem.ai/benchmarks, at a small fraction of the context most of them use.

Per-category labels published before 2026-07-06 were wrong; the correction is in the corrections log.

The runner (benchmark/run_ws1.py) and question split are in this repo. To re-run it, clone snap-research/locomo into benchmark/locomo-data/ (the runner reads data/locomo10.json) and set OPENAI_API_KEY.

Integrations

MCP server for Claude Desktop, Cursor and other MCP clients. Runs on the local stack by default.

pip install "widemem-ai[mcp,local]"
python -m widemem.mcp_server

Tools exposed: widemem_add, widemem_search, widemem_delete, widemem_count, widemem_pin, widemem_export, widemem_health. Setup and environment variables: docs/mcp.md.

LangChain. widemem.integrations.langchain.WidememRetriever is a BaseRetriever. Install [langchain]; example in examples/langchain_retriever.py.

REST server. pip install "widemem-ai[server,local]", then python -m widemem.server. It refuses to start when WIDEMEM_HOST is non-local and WIDEMEM_API_KEY is unset. The check reads WIDEMEM_HOST, not the bind address, so set it even when you launch uvicorn yourself.

API

Method Does
add(text, user_id, ...) / add_batch(texts, ...) Extract, resolve and store facts
search(query, user_id, top_k, mode, explain, ...) Ranked results with .confidence; explain=True returns a scored breakdown
search_stream(...) Async generator, approximate order
pin(text, user_id, importance=9.0) Store a fact the user flagged as important
get, delete, count, get_history The usual
purge_expired(older_than_days, ...) Delete old memories for good (YMYL kept unless asked)
export_json / import_json Move memories between stores
summarize(user_id, force) Build summaries and themes

Full signatures: docs/api.md.

Scope and safety

widemem is developer infrastructure, provided under Apache 2.0 as is. It is not medical, legal, tax or financial advice, and not a medical device. YMYL handling is a best-effort heuristic, the prompt-injection sanitizer is a baseline defense on extraction input, and the history log does not record callers. Keep a human in the loop for high-stakes decisions. When you self-host, your data stays in your environment and we receive nothing. The software may be subject to export-control and sanctions laws (including the US EAR and OFAC lists).

Roadmap

Open issues; vote with reactions:

Not planned: more vector backends beyond FAISS, Qdrant and pgvector; a hosted multi-tenant service; a web UI; a GraphQL API; a memory-management CLI.

Development

git clone https://github.com/remete618/widemem-ai
cd widemem-ai
pip install -e ".[all,dev]"
pytest

Further reading

Contact and license

hello@widemem.ai · widemem.ai · issues

Apache 2.0, see LICENSE. Website terms: widemem.ai/terms.

Metadata

Release files for widemem-ai 2.0.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 widemem-ai 2.0.0
File Size Uploaded
widemem_ai-2.0.0.tar.gz 2.0 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for widemem-ai 2.0.0
File Interpreter ABI Platform
widemem_ai-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 2.2 MB

Release files / widemem_ai-2.0.0.tar.gz

Download URL widemem_ai-2.0.0.tar.gz
Size 2.0 MB
Tags Source
SHA-256 checksum
How to use checksums
0e495123b430b9cf4896fb8fec852becf0669a24345d7e5512433fcb1cfe9c14
BLAKE2b-256 checksum
How to use checksums
eb73df8e1451fb9579b1821fd0e4da0e72a69961ee8c302e62ba2737ccb84241
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 Oct 4, 2026.

Transparency log

Release files / widemem_ai-2.0.0-py3-none-any.whl

Download URL widemem_ai-2.0.0-py3-none-any.whl
Size 106.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d9c8792cd951d0e7a7166d1bb78a4de8d49cec2be10e1a7bb990917a72c36aa1
BLAKE2b-256 checksum
How to use checksums
f203102d6a8c328f72bc4f22ea6d68319bd22b59d0543cc992c29d99e4af06cc
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 Oct 4, 2026.

Transparency log

Release history Release notifications | RSS feed

2.0.2

2 release files

2.0.1

2 release files

This release

2.0.0 This release

2 release files

1.6.0

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.0

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