-
Notifications
You must be signed in to change notification settings - Fork 41
Description
Feature Request
Add a durable, SQL-backed DatabaseMemoryService to google-adk-community as a self-hosted alternative to the volatile InMemoryMemoryService.
Problem
The existing InMemoryMemoryService is explicitly test-only and loses all data on process restart. Developers not using Vertex AI RAG or Memory Bank have no persistent, self-hosted memory option out of the box.
Related: #46 (Add self-hosted option to manage working memory)
Proposed Solution
A DatabaseMemoryService backed by SQLAlchemy async — the same ORM pattern already used by DatabaseSessionService in the core ADK. This enables any SQLAlchemy-compatible async database (SQLite, PostgreSQL, MySQL, MariaDB) as a memory backend.
Components
DatabaseMemoryService— implementsBaseMemoryServicewith lazy table creation, idempotent session ingest (add_session_to_memory), and delta event ingestion (add_events_to_memory)MemorySearchBackendABC +KeywordSearchBackend— pluggable search with LIKE/ILIKE and AND-first → OR-fallback tokenisation- Scratchpad subsystem — KV store + append-only log exposed as four
BaseToolsubclasses (ScratchpadGetTool,ScratchpadSetTool,ScratchpadAppendLogTool,ScratchpadGetLogTool) for agent intermediate working memory
Usage
from google.adk_community.memory import DatabaseMemoryService
from google.adk_community.tools import scratchpad_get_tool, scratchpad_set_tool
# SQLite (zero config)
memory_service = DatabaseMemoryService("sqlite+aiosqlite:///agent_memory.db")
# PostgreSQL
memory_service = DatabaseMemoryService(
"postgresql+asyncpg://user:pass@host/dbname"
)Origin
This was originally submitted to google/adk-python (#4736) and redirected here by maintainer @rohityan.
Implementation
PR: #98