Skip to main content

adk-database-memory

SQL-backed memory service for the Google Agent Development Kit (ADK).

Drop-in durable replacement for InMemoryMemoryService. Works with any async SQLAlchemy dialect: SQLite, PostgreSQL, MySQL/MariaDB, and more.

PyPI Python License

Why

ADK ships an in-memory memory service for development and a Vertex-hosted one for production on GCP. If you want durable memory on your own Postgres/SQLite/MySQL, there was no built-in option. This package fills that gap with the same BaseMemoryService contract, so you can swap it in without changing agent code.

Install

pip install adk-database-memory[sqlite]       # SQLite (via aiosqlite)
pip install adk-database-memory[postgres]     # PostgreSQL (via asyncpg)
pip install adk-database-memory[mysql]        # MySQL / MariaDB (via aiomysql)

The base install does not pull any database driver. Pick the extra that matches your backend, or install your own async SQLAlchemy driver separately.

Quick start

import asyncio
from adk_database_memory import DatabaseMemoryService

async def main():
    # SQLite, zero-config
    async with DatabaseMemoryService("sqlite+aiosqlite:///memory.db") as memory:
        await memory.add_session_to_memory(session)

        result = await memory.search_memory(
            app_name="my_app",
            user_id="u1",
            query="what did we decide about the pricing model?",
        )
        for entry in result.memories:
            print(entry.author, entry.timestamp, entry.content)

asyncio.run(main())

With an ADK Runner

from google.adk.runners import Runner
from adk_database_memory import DatabaseMemoryService

memory = DatabaseMemoryService(
    "postgresql+asyncpg://user:pass@localhost:5432/agentdb"
)

runner = Runner(
    app_name="my_app",
    agent=my_agent,
    memory_service=memory,
    session_service=session_service,
)

Supported backends

Backend URL example Extra
SQLite sqlite+aiosqlite:///memory.db [sqlite]
SQLite (in-memory) sqlite+aiosqlite:///:memory: [sqlite]
PostgreSQL postgresql+asyncpg://user:pass@host/db [postgres]
MySQL / MariaDB mysql+aiomysql://user:pass@host/db [mysql]
Any async SQLAlchemy dialect depends on driver bring your own

API

The service implements google.adk.memory.base_memory_service.BaseMemoryService, so it exposes the same three methods used everywhere else in ADK:

  • add_session_to_memory(session) - index every event of a session.
  • add_events_to_memory(app_name, user_id, events, ...) - index a delta slice of events (useful for streaming ingestion).
  • search_memory(app_name, user_id, query) - return MemoryEntrys whose indexed keywords overlap with the query, scoped to the given app and user.

Constructor:

DatabaseMemoryService(
    db_url: str,
    *,
    stop_words: set[str] | None = None,   # override the default English stop-words list
    **engine_kwargs,                       # forwarded to create_async_engine
)

Lifecycle:

async with DatabaseMemoryService(db_url) as memory:
    ...
# equivalent to:
memory = DatabaseMemoryService(db_url)
try:
    ...
finally:
    await memory.close()

How it works

  • On first write, a single table adk_memory_entries is created (lazy, with an async double-checked lock) with an index on (app_name, user_id).
  • Each event's text content is lower-cased, tokenized ([A-Za-z]+), and filtered against the stop-words set to produce a keyword bag.
  • Search extracts keywords from the query the same way and returns rows where the bags overlap, scoped by app_name and user_id, then de-duplicates on (author, text, timestamp).
  • JSON content is stored as JSONB on PostgreSQL, LONGTEXT on MySQL, and TEXT on SQLite/others via a DynamicJSON type decorator.

This is intentionally the same keyword-matching approach as the in-memory and Firestore memory services in ADK; it is a durable, zero-infra starting point, not a semantic retriever. If you need embedding-based recall, pair this package with Vertex AI Memory Bank or a vector store.

Development

git clone https://github.com/anmolg1997/adk-database-memory
cd adk-database-memory
pip install -e ".[dev]"
pytest
ruff check .
mypy src

License

Apache 2.0 - see LICENSE.

Metadata

Release files for adk-database-memory 0.1.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 adk-database-memory 0.1.0
File Size Uploaded Provenance
adk_database_memory-0.1.0.tar.gz 14.4 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for adk-database-memory 0.1.0
File Interpreter ABI Platform
adk_database_memory-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 32.8 kB

Release files / adk_database_memory-0.1.0.tar.gz

Download URL adk_database_memory-0.1.0.tar.gz
Size 14.4 kB
Tags Source
SHA-256 checksum
How to use checksums
d46b6b40d6f26fce141085c9c31425d34a767cc82e0c3e3a95d3c026f29d4738
BLAKE2b-256 checksum
How to use checksums
5d374bfb6d98ea919803d0db33726022c76f5586ad15a5ab158e30fb5192bb16
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Apr 21, 2026.

Transparency log

Release files / adk_database_memory-0.1.0-py3-none-any.whl

Download URL adk_database_memory-0.1.0-py3-none-any.whl
Size 18.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5ecf5d9d198a7ebf9846375a3dfe79cd4fa8e3c83719a46f3902ddb6a92855cb
BLAKE2b-256 checksum
How to use checksums
228a99bc9c2eb4a01978d01787706e4bdbb21351d0efc18ae54a63365e5c0e5c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Apr 21, 2026.

Transparency log

Security for adk-database-memory 0.1.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for adk_database_memory-0.1.0.tar.gz

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 Apr 21, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

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