Quickstart¶
Wire SQLSpec stores into your ADK agent to persist sessions and memory across restarts.
How It Works¶
Create a SQLSpec database config.
Initialize ADK stores (session, memory, event) backed by that config.
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()