google / google/adk-python-community

feat: add FirestoreSessionService for serverless session persistence

Ouverte
#103 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.