google / google/adk-python-community
feat: add FirestoreSessionService for serverless session persistence
- Langage dominant
- Python
- Étoiles
- 182
- Forks
- 75
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
## 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)
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez par les conventions du service de sessions et le point d’entrée prévu dans src/google/adk_community/sessions/firestore_session_service.py, puis comparez les implémentations de sessions existantes. Exécutez ou ajoutez de la couverture dans tests/unittests/sessions/test_firestore_session_service.py et vérifiez les exports de __init__.py ainsi que les dépendances optionnelles de pyproject.toml. Le travail est terminé lorsque le service prévu reposant sur Firestore, les tests, les exports et la configuration des dépendances sont complets.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- google-cloud, python
- Domaine
- backend, databases
- Type d'issue
- Fonctionnalité
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Calme
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 55/100