Skip to main content

Open Source memory infrastructure for AI agents

Project description

MemVault

Open-source memory infrastructure for AI agents.

Tests Python License: MIT

Most AI applications are stateless — they forget users, forget context, and treat every conversation as if it's the first. MemVault solves this by providing a production-grade memory layer that AI agents can plug into.

What it does

  • Stores memories with rich metadata (type, importance, confidence, tags)
  • Retrieves semantically — finds relevant memories by meaning, not keyword matching
  • Ranks intelligently — combines embedding similarity with recency, importance, and frequency signals
  • Consolidates automatically — detects near-duplicate memories and merges them
  • Decays over time — unaccessed memories fade; accessed memories are reinforced
  • Isolates by namespace — per-user, per-agent, per-project memory pools

Architecture

┌─────────────────────────────────────┐ │ Service Layer │ │ REST API (FastAPI) · CLI (Typer) │ └─────────────────┬───────────────────┘ │ ┌─────────────────▼───────────────────┐ │ Intelligence Layer │ │ Hybrid Retrieval · Scoring · Decay │ │ Consolidation · Reinforcement │ └──────────┬──────────────┬───────────┘ │ │ ┌──────────▼──────┐ ┌─────▼──────────┐ │ Storage Layer │ │ Embedding Layer │ │ SQLite/Postgres│ │ BGE-small (local│ │ In-Memory │ │ or bring your │ │ (adapter-based)│ │ own embedder) │ └─────────────────┘ └────────────────┘

Quick start

As a library

pip install memvault
pip install memvault[local]  # for local BGE embeddings
from memvault.core.models import MemoryItem, MemoryQuery, MemoryType
from memvault.core.retrieval import retrieve
from memvault.embeddings.local import LocalEmbedder
from memvault.storage.sqlite import SQLiteStorage
from memvault.storage.base import EmbeddingStorageWrapper

# Set up the stack
backend = SQLiteStorage("memories.db")
embedder = LocalEmbedder()
store = EmbeddingStorageWrapper(backend=backend, embedder=embedder)

# Store a memory
item = MemoryItem(
    agent_id="my-agent",
    user_id="user-123",
    type=MemoryType.SEMANTIC,
    content="User prefers Python over JavaScript",
    importance=0.8,
)
store.insert(item)

# Retrieve semantically
query = MemoryQuery(text="programming language preferences", user_id="user-123")
results = retrieve(query=query, backend=backend, embedder=embedder)

for r in results:
    print(f"[{r.final_score:.3f}] {r.item.content}")

As a REST API

# With Docker (recommended)
docker compose -f docker/docker-compose.yml up

# Or directly
uvicorn memvault.api.app:app --reload --port 8000
# Store a memory
curl -X POST http://localhost:8000/memories \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id": "my-agent",
    "user_id": "user-123",
    "content": "User prefers Python over JavaScript",
    "type": "semantic",
    "importance": 0.8
  }'

# Search semantically
curl -X POST http://localhost:8000/memories/search \
  -H "Content-Type: application/json" \
  -d '{
    "text": "programming language preferences",
    "user_id": "user-123"
  }'

API docs available at http://localhost:8000/docs.

As a CLI

memvault remember "User prefers dark mode" --user aryan
memvault recall "display preferences" --user aryan
memvault consolidate --user aryan
memvault doctor

Installation

Requirements

  • Python 3.10+
  • Docker (optional, for containerized deployment)

Local development

git clone https://github.com/Aryaneviloo/memvault.git
cd memvault

python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

pip install -e ".[local,dev]"

Environment variables

cp .env.example .env
# Edit .env with your values

Running tests

# Core test suite (no external dependencies)
pytest

# With PostgreSQL backend
docker compose -f docker/docker-compose.yml up postgres -d
TEST_POSTGRES_DSN="postgresql://memvault:memvault@localhost:5433/memvault" pytest

Memory types

Type Description Example
episodic Concrete events and interactions "User asked about Python on Jan 1"
semantic Stable facts and preferences "User prefers Python over JavaScript"
procedural Useful workflows and patterns "Run tests before committing"
working Short-term session context "Current task: debugging auth module"
consolidated Summaries merged from repeated episodes Auto-generated by consolidation

Storage backends

Backend Use case Setup
InMemoryStorage Tests, experimentation Zero setup
SQLiteStorage Local dev, single-process production Zero setup
PostgresStorage Production, multi-process Postgres instance required

All backends implement the same interface — swap them with one line of code.

Retrieval scoring

Each retrieved memory is scored by: final_score = (similarity_weight × cosine_similarity)

  • (relevance_weight × relevance_score) relevance_score = (0.4 × recency) + (0.4 × importance) + (0.2 × frequency)

All weights are configurable via RetrievalConfig and ScoringWeights.

Project structure

src/memvault/ ├── core/ │ ├── models.py # MemoryItem, MemoryQuery, MemoryType │ ├── scoring.py # Relevance scoring, decay, reinforcement │ ├── retrieval.py # Hybrid retrieval pipeline │ └── consolidation.py # Near-duplicate detection and merging ├── storage/ │ ├── base.py # StorageBackend ABC + EmbeddingStorageWrapper │ ├── memory.py # In-memory backend (tests/dev) │ ├── sqlite.py # SQLite backend │ └── postgres.py # PostgreSQL backend ├── embeddings/ │ ├── base.py # BaseEmbedder ABC │ ├── local.py # BGE-small via sentence-transformers │ └── provider.py # Embedder factory ├── api/ │ ├── app.py # FastAPI application factory │ ├── routes.py # API endpoints │ ├── schemas.py # Request/response models │ └── dependencies.py # Dependency injection ├── cli/ │ └── main.py # Typer CLI └── observability/ ├── logging.py # Structured logging (structlog) └── metrics.py # In-process metrics

Roadmap

  • Core memory engine (storage, scoring, retrieval, consolidation)
  • SQLite and PostgreSQL backends
  • Local BGE embeddings
  • REST API (FastAPI)
  • CLI (Typer)
  • Docker support
  • MemVault facade class (simple single-import API)
  • LLM-based re-ranking
  • Auto-ingest from conversation turns
  • OpenAI / Cohere embedding providers
  • pgvector support for native vector search
  • Web dashboard

Contributing

See CONTRIBUTING.md.

License

MIT — see LICENSE.

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

eviloomemvault-0.1.1.tar.gz (32.8 kB view details)

Uploaded Source

Built Distribution

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

eviloomemvault-0.1.1-py3-none-any.whl (29.9 kB view details)

Uploaded Python 3

File details

Details for the file eviloomemvault-0.1.1.tar.gz.

File metadata

  • Download URL: eviloomemvault-0.1.1.tar.gz
  • Upload date:
  • Size: 32.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for eviloomemvault-0.1.1.tar.gz
Algorithm Hash digest
SHA256 7a663458227b456beb860baee8677011fd0812f4453a623d8f68494659e204f8
MD5 1c79a84613005fc4cbea7dcd51594bd6
BLAKE2b-256 85ad94de924a05e5fdf993083cd7ebb0724cdead5a5fd4af37dbf01df29ee3e1

See more details on using hashes here.

File details

Details for the file eviloomemvault-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: eviloomemvault-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 29.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for eviloomemvault-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3fe573f6c6245cb3365f73847df2b2601a17b5fc0c10731cd16d67b73ab5d4c7
MD5 36c101e3a67e4f5d150121b76189cf1f
BLAKE2b-256 ada43cca63250a60a25fd746c8e160d29aa20c748767e1288206b675dfc41d58

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