Skip to content

feat(memory): add DatabaseMemoryService with SQL backend and agent scratchpad #99

@Raman369AI

Description

@Raman369AI

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 — implements BaseMemoryService with lazy table creation, idempotent session ingest (add_session_to_memory), and delta event ingestion (add_events_to_memory)
  • MemorySearchBackend ABC + KeywordSearchBackend — pluggable search with LIKE/ILIKE and AND-first → OR-fallback tokenisation
  • Scratchpad subsystem — KV store + append-only log exposed as four BaseTool subclasses (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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions