Quickstart

Wire SQLSpec stores into your ADK agent to persist sessions and memory across restarts.

How It Works

  1. Create a SQLSpec database config.

  2. Initialize ADK stores (session, memory, event) backed by that config.

  3. Pass the stores to your ADK agent.

Session Store

The session store persists agent state between conversations. When a user returns, the agent can resume from where it left off.

adk session store
    from sqlspec.adapters.aiosqlite import AiosqliteConfig
    from sqlspec.adapters.aiosqlite.adk import AiosqliteADKStore

    config = AiosqliteConfig(connection_config={"database": ":memory:"})
    store = AiosqliteADKStore(config)
    await store.ensure_tables()

    session = await store.create_session(
        session_id="session_1", app_name="docs", user_id="user_1", state={"mode": "demo"}
    )

    event_record = {
        "id": "evt_1",
        "app_name": "docs",
        "user_id": "user_1",
        "session_id": session["id"],
        "invocation_id": "inv_1",
        "author": "user",
        "branch": "main",
        "actions": b"",
        "long_running_tool_ids_json": None,
        "timestamp": datetime.now(timezone.utc),
        "content": {"text": "Hello"},
        "grounding_metadata": None,
        "custom_metadata": None,
        "partial": False,
        "turn_complete": True,
        "interrupted": None,
        "error_code": None,
        "error_message": None,
    }
    await store.append_event(event_record)
    events = await store.get_events(session_id=session["id"])

Memory Store Integration

The memory store retains context that the agent can reference later. This enables long-term memory across sessions.

adk memory integration
    from sqlspec.adapters.aiosqlite import AiosqliteConfig
    from sqlspec.adapters.aiosqlite.adk import AiosqliteADKMemoryStore

    config = AiosqliteConfig(
        connection_config={"database": ":memory:"}, extension_config={"adk": {"memory_use_fts": True}}
    )
    store = AiosqliteADKMemoryStore(config)
    await store.ensure_tables()

    record = {
        "id": "mem_1",
        "session_id": "session_1",
        "app_name": "docs",
        "user_id": "user_1",
        "event_id": "evt_1",
        "author": "tool",
        "timestamp": datetime.now(timezone.utc),
        "content_json": {"tool": "search", "query": "sqlspec"},
        "content_text": "tool:search query=sqlspec",
        "metadata_json": None,
        "inserted_at": datetime.now(timezone.utc),
    }
    await store.insert_memory_entries([record])
    results = await store.search_entries(query="sqlspec", app_name="docs", user_id="user_1")

Schema Setup

Stores create their tables automatically on first use. For production, run migrations ahead of time:

await session_store.create_tables()
await memory_store.create_tables()

Next Steps

  • Backends for adapter-specific configuration.

  • Schema for table layouts and indexes.