Add notification service using Google ADK

This commit is contained in:
2026-03-03 22:24:31 +00:00
parent ba97ab3fc7
commit 12c91b7c25
5 changed files with 392 additions and 6 deletions

View File

@@ -1,37 +1,61 @@
"""ADK agent with vector search RAG tool."""
from functools import partial
from google import genai
from google.adk.agents.llm_agent import Agent
from google.adk.runners import Runner
from google.adk.tools.mcp_tool import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams
from google.cloud.firestore_v1.async_client import AsyncClient
from google.genai.types import Content, Part
from va_agent.auth import auth_headers_provider
from va_agent.config import settings
from va_agent.dynamic_instruction import provide_dynamic_instruction
from va_agent.notifications import NotificationService
from va_agent.session import FirestoreSessionService
from va_agent.governance import GovernancePlugin
# MCP Toolset for RAG knowledge search
toolset = McpToolset(
connection_params=StreamableHTTPConnectionParams(url=settings.mcp_remote_url),
header_provider=auth_headers_provider,
)
# Shared Firestore client for session service and notifications
firestore_db = AsyncClient(database=settings.firestore_db)
# Session service with compaction
session_service = FirestoreSessionService(
db=firestore_db,
compaction_token_threshold=10_000,
genai_client=genai.Client(),
)
# Notification service
notification_service = NotificationService(
db=firestore_db,
collection_path=settings.notifications_collection_path,
max_to_notify=settings.notifications_max_to_notify,
)
# Agent with static and dynamic instructions
governance = GovernancePlugin()
agent = Agent(
model=settings.agent_model,
name=settings.agent_name,
static_instruction=Content(
role="user",
parts=[Part(text=settings.agent_instructions)],
),
instruction=settings.agent_instructions,
tools=[toolset],
after_model_callback=governance.after_model_callback,
)
session_service = FirestoreSessionService(
db=AsyncClient(database=settings.firestore_db),
compaction_token_threshold=10_000,
genai_client=genai.Client(),
)
# Runner
runner = Runner(
app_name="va_agent",
agent=agent,