You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.8 KiB
Python

from __future__ import annotations
from typing import Any
from fastapi import Request
from app.config import Settings
def build_agent_card(settings: Settings, request: Request) -> dict[str, Any]:
base_url = _resolve_base_url(settings=settings, request=request)
return {
"name": settings.a2a_agent_name,
"description": settings.a2a_agent_description,
"url": f"{base_url}/a2a/rpc",
"version": "0.1.0",
"protocolVersion": "1.0",
"defaultInputModes": ["application/json"],
"defaultOutputModes": ["application/json"],
"capabilities": {
"streaming": False,
"pushNotifications": False,
"stateTransitionHistory": False,
},
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"description": "Use the same Bearer/API key auth as the REST API.",
}
},
"security": [{"bearerAuth": []}],
"skills": [
{
"id": "availability.query",
"name": "Check Availability",
"description": "Checks Google Calendar availability for a given time range.",
"tags": ["calendar", "availability", "scheduling"],
"examples": [
"SendMessage with params.start/end/calendar_ids to check free/busy for a time window."
],
"inputModes": ["application/json"],
"outputModes": ["application/json"],
}
],
}
def _resolve_base_url(*, settings: Settings, request: Request) -> str:
if settings.a2a_public_base_url:
return settings.a2a_public_base_url.rstrip("/")
return str(request.base_url).rstrip("/")