22import json
33import logging
44import traceback
5-
65from abc import ABC , abstractmethod
7- from collections .abc import AsyncGenerator , Callable
6+ from collections .abc import AsyncGenerator , Awaitable , Callable
87from typing import TYPE_CHECKING , Any
98
109from pydantic import ValidationError
5251)
5352from a2a .utils .errors import MethodNotImplementedError
5453
55-
5654logger = logging .getLogger (__name__ )
5755
5856if TYPE_CHECKING :
@@ -178,9 +176,10 @@ def __init__( # noqa: PLR0913
178176 http_handler : RequestHandler ,
179177 extended_agent_card : AgentCard | None = None ,
180178 context_builder : CallContextBuilder | None = None ,
181- card_modifier : Callable [[AgentCard ], AgentCard ] | None = None ,
179+ card_modifier : Callable [[AgentCard ], Awaitable [AgentCard ]]
180+ | None = None ,
182181 extended_card_modifier : Callable [
183- [AgentCard , ServerCallContext ], AgentCard
182+ [AgentCard , ServerCallContext ], Awaitable [ AgentCard ]
184183 ]
185184 | None = None ,
186185 max_content_length : int | None = 10 * 1024 * 1024 , # 10MB
@@ -196,9 +195,9 @@ def __init__( # noqa: PLR0913
196195 context_builder: The CallContextBuilder used to construct the
197196 ServerCallContext passed to the http_handler. If None, no
198197 ServerCallContext is passed.
199- card_modifier: An optional callback to dynamically modify the public
198+ card_modifier: An optional async callback to dynamically modify the public
200199 agent card before it is served.
201- extended_card_modifier: An optional callback to dynamically modify
200+ extended_card_modifier: An optional async callback to dynamically modify
202201 the extended agent card before it is served. It receives the
203202 call context.
204203 max_content_length: The maximum allowed content length for incoming
@@ -576,7 +575,7 @@ async def _handle_get_agent_card(self, request: Request) -> JSONResponse:
576575
577576 card_to_serve = self .agent_card
578577 if self .card_modifier :
579- card_to_serve = self .card_modifier (card_to_serve )
578+ card_to_serve = await self .card_modifier (card_to_serve )
580579
581580 return JSONResponse (
582581 card_to_serve .model_dump (
@@ -605,7 +604,9 @@ async def _handle_get_authenticated_extended_agent_card(
605604 context = self ._context_builder .build (request )
606605 # If no base extended card is provided, pass the public card to the modifier
607606 base_card = card_to_serve if card_to_serve else self .agent_card
608- card_to_serve = self .extended_card_modifier (base_card , context )
607+ card_to_serve = await self .extended_card_modifier (
608+ base_card , context
609+ )
609610
610611 if card_to_serve :
611612 return JSONResponse (
0 commit comments