google / google/adk-python-community

feat: add FirestoreSessionService for serverless session persistence

Abierto
#103 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Python
Estrellas
182
Forks
75
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

## Summary

Add a `FirestoreSessionService` — a `BaseSessionService` implementation backed by Google Cloud Firestore, providing persistent, serverless session storage with zero database management.

This was originally submitted as [google/adk-python#4439](https://github.com/google/adk-python/pull/4439), where maintainer @rohityan directed it to this community repo.

## Motivation

The ADK currently has:
- `InMemorySessionService` — dev-only, no persistence
- `DatabaseSessionService` — requires SQL infrastructure (PostgreSQL, MySQL, SQLite)
- `VertexAiSessionService` — requires a Reasoning Engine
- `RedisSessionService` (community) — requires a Redis instance

For GCP-native deployments (Cloud Run, Cloud Functions), Firestore offers a fully managed, serverless alternative with no infrastructure to provision.

## Design

- Events stored in Firestore subcollections (avoids 1MB document size limit)
- Three-tier state management (app/user/session) matching ADK conventions
- Atomic state updates via Firestore transactions (addresses race conditions)
- Batch writes for bulk event deletion
- Server-side query limits for `num_recent_events`
- `google-cloud-firestore` as an optional dependency
- Async context manager support for clean client lifecycle

## Implementation Plan

1. `src/google/adk_community/sessions/firestore_session_service.py`
2. `tests/unittests/sessions/test_firestore_session_service.py`
3. Update `__init__.py` exports and `pyproject.toml` optional dependencies

Ref: [google/adk-python#3776](https://github.com/google/adk-python/issues/3776)

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.