Files
gcp_solution_architecture_a…/app/adk/sessions.py
Jonathan Boniface a24a44e28c
Some checks failed
validation / verify (push) Failing after 10s
refactored: to utilise the google adk and production grade agent
2026-09-02 21:42:10 +01:00

57 lines
1.9 KiB
Python

"""ADK Postgres Session Service for GCP Solution Architecture Agent.
Uses google.adk.sessions.SessionService backed by external PostgreSQL database.
"""
import logging
import uuid
from typing import Any, Dict, Optional
from app.adk.compat import Session, SessionService
from app.database import get_db_manager
logger = logging.getLogger(__name__)
class PostgresSessionService(SessionService):
"""ADK Session Service persisting state to PostgreSQL."""
def __init__(self) -> None:
self.db_manager = get_db_manager()
def create_session(self, agent_name: str, session_id: Optional[str] = None) -> Session:
"""Create a new session record in PostgreSQL database."""
sid = session_id or str(uuid.uuid4())
session = Session(session_id=sid, agent_name=agent_name, state={})
self.db_manager.save_session(
session_id=sid,
agent_name=agent_name,
state_data=session.state,
metadata={"created_via": "PostgresSessionService"},
)
logger.info("Created ADK session %s in PostgreSQL database.", sid)
return session
def get_session(self, session_id: str) -> Optional[Session]:
"""Fetch session state from PostgreSQL database."""
sess_data = self.db_manager.get_session(session_id)
if not sess_data:
return None
return Session(
session_id=sess_data["session_id"],
agent_name=sess_data["agent_name"],
state=sess_data.get("state_data", {}),
)
def save_session(self, session: Session) -> bool:
"""Update session state in PostgreSQL database."""
success = self.db_manager.save_session(
session_id=session.session_id,
agent_name=session.agent_name,
state_data=session.state,
)
if success:
logger.info("Updated ADK session %s in PostgreSQL database.", session.session_id)
return success