Skip to content

Commit 368a6fc

Browse files
feat: add FirestoreSessionService for serverless session persistence
Adds a new session service backed by Google Cloud Firestore, providing persistent, serverless session storage. This addresses the gap between InMemorySessionService (dev-only) and DatabaseSessionService (requires managing SQL infrastructure) for GCP-native deployments. The implementation follows established ADK patterns: - Extends BaseSessionService with all CRUD operations - Supports three-tier state management (app/user/session) - Events stored in Firestore subcollections (avoids 1MB doc limit) - Lazy import via __getattr__ (same pattern as DatabaseSessionService) - google-cloud-firestore added as optional 'firestore' extra Ref: #3776 Co-authored-by: Cursor <[email protected]>
1 parent ec660ed commit 368a6fc

File tree

4 files changed

+891
-0
lines changed

4 files changed

+891
-0
lines changed

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ extensions = [
164164
"toolbox-adk>=0.5.7, <0.6.0", # For tools.toolbox_toolset.ToolboxToolset
165165
]
166166

167+
firestore = ["google-cloud-firestore>=2.19.0, <3.0.0"]
168+
167169
otel-gcp = ["opentelemetry-instrumentation-google-genai>=0.6b0, <1.0.0"]
168170

169171
toolbox = ["toolbox-adk>=0.5.7, <0.6.0"]

src/google/adk/sessions/__init__.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
__all__ = [
2121
'BaseSessionService',
2222
'DatabaseSessionService',
23+
'FirestoreSessionService',
2324
'InMemorySessionService',
2425
'Session',
2526
'State',
@@ -38,4 +39,14 @@ def __getattr__(name: str):
3839
'DatabaseSessionService requires sqlalchemy>=2.0, please ensure it is'
3940
' installed correctly.'
4041
) from e
42+
if name == 'FirestoreSessionService':
43+
try:
44+
from .firestore_session_service import FirestoreSessionService
45+
46+
return FirestoreSessionService
47+
except ImportError as e:
48+
raise ImportError(
49+
'FirestoreSessionService requires google-cloud-firestore, please'
50+
' install it with: pip install google-cloud-firestore'
51+
) from e
4152
raise AttributeError(f'module {__name__!r} has no attribute {name!r}')

0 commit comments

Comments
 (0)