Skip to main content

MongoDB Atlas-backed persistent memory capability for Pydantic AI / pydantic-ai-harness.

Project description

pydantic-ai-mongodb-memory

A MongoDB Atlas–backed memory capability for Pydantic AI and pydantic-ai-harness.

Drop MongoDBMemoryCapability into an agent's capabilities=[...] array and it gains durable, cross-session, semantically-searchable memory — backed by MongoDB documents + Atlas Vector Search. Anchored to pydantic-ai-harness#255.

Why

In a stateless agent, every new session forgets the user. Re-injecting the full transcript inflates tokens and hits context limits. This capability gives the agent a tiered memory:

  • Short-term / episodic — recent turns, semantically searchable via $vectorSearch.
  • Long-term structured profile — durable user preferences (always injected).
  • Semantic recall — Voyage 3.5 embeddings + Atlas Vector Search, with prefiltering.

Install

pip install -e ".[embeddings]"   # pymongo + pydantic-ai-slim + voyageai

Quickstart

from pydantic_ai import Agent
from pydantic_ai_mongodb_memory import MongoDBMemoryCapability

memory = MongoDBMemoryCapability(
    connection_string="mongodb+srv://...",
    database_name="agent_memory",
    semantic_recall=True,            # uses Atlas Vector Search + voyage-3.5
)

agent = Agent("google:gemini-2.0-flash", capabilities=[memory])

The capability implements two AbstractCapability lifecycle hooks:

  • before_model_request → recalls memories for the active scope and injects them.
  • after_model_request → persists the latest turn(s) back to MongoDB.

How it maps to MongoDB

Method MongoDB operation
add_memory(scope, role, content) insert_one (+ voyage-3.5 embed if semantic)
get_recent(scope, n) find({scope}).sort([(ts,-1),(_id,-1)])
recall_semantic(scope, query, k, filters=…) $vectorSearch on embedding + prefilter
set_preference(scope, k, v) update_one(upsert) on user_profiles
get_profile(scope) find_one on user_profiles

Conventions: the store always constructs and owns its own MongoClient from your connection string, so connection appName = devrel-integ-pydanticai-python and handshake driver_info name pydantic-ai-mongodb-memory are always present and non-overridable; embeddings voyage-3.5 (1024-dim). Extra MongoClient options (e.g. tls=True, maxPoolSize=…) can be passed through as keyword args.

v0.1.1: the store now always owns its client — pass connection_string (the former client= parameter was removed) so appName + driver-info are guaranteed on every connection.

Demos

Both auto-load demo/.env (ATLAS_URI, VOYAGE_API_KEY, GEMINI_API_KEY).

python demo/main.py        # data-level: seed team dataset, multi-turn, scope isolation, $vectorSearch
python demo/agent_demo.py  # a Gemini agent: cross-session memory + Atlas Vector Search w/ department prefilter

agent_demo.py proves the headline value: an agent told "only staff Engineering" in session 1 answers a fresh session-2 staffing question using $vectorSearch prefiltered to Engineering — recalling the constraint from MongoDB with no history passed in.

Tests

PYTHONPATH=src pytest tests/ -v

Non-search tests run on mongomock (offline). test_vector_recall needs ATLAS_URI + VOYAGE_API_KEY and is skipped otherwise. Suite: round-trip, scope isolation, profile upsert, TTL index, vector recall, appName present, driver-info present.

Layout

src/pydantic_ai_mongodb_memory/
  capability.py   # MongoDBMemoryCapability (AbstractCapability subclass)
  store.py        # MongoDBMemoryStore — connection, indexes, CRUD, $vectorSearch
  embeddings.py   # voyage-3.5 helper
demo/             # main.py (data) + agent_demo.py (Gemini agent)
tests/            # acceptance suite
PLAN.md           # the 7-phase build plan

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

pydantic_ai_mongodb_memory-0.1.1.tar.gz (19.8 kB view details)

Uploaded Source

Built Distribution

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

pydantic_ai_mongodb_memory-0.1.1-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for pydantic_ai_mongodb_memory-0.1.1.tar.gz
Algorithm Hash digest
SHA256 7b65482b2a6f4777d58416497a7605c28315b4cc5257e9d06ff6372a16078476
MD5 c218ba925f954347e7b738f207f04602
BLAKE2b-256 369c48788fdec6e90fbb0ca00ec017b902f17018efdcfa87cbbf82f95ba69fae

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydantic_ai_mongodb_memory-0.1.1.tar.gz:

Publisher: release.yml on mongodb-developer/pydantic-ai-mongodb-memory

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

File hashes

Hashes for pydantic_ai_mongodb_memory-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 021a7f959cf400a813da6423c0cc43a4906af6821b1149f1f1e3cc8a74675c74
MD5 8960ad15844fe2414aa87adf118a7a78
BLAKE2b-256 0b79d4542ce6161107dda7b16d06e49999df3a341dbdb65296e58f44eecc9100

See more details on using hashes here.

Provenance

The following attestation bundles were made for pydantic_ai_mongodb_memory-0.1.1-py3-none-any.whl:

Publisher: release.yml on mongodb-developer/pydantic-ai-mongodb-memory

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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