|
4 | 4 | import traceback |
5 | 5 |
|
6 | 6 | from abc import ABC, abstractmethod |
7 | | -from collections.abc import AsyncGenerator, Callable |
| 7 | +from collections.abc import AsyncGenerator, Awaitable, Callable |
| 8 | +from inspect import isawaitable |
8 | 9 | from typing import TYPE_CHECKING, Any |
9 | 10 |
|
10 | 11 | from pydantic import ValidationError |
@@ -178,9 +179,10 @@ def __init__( # noqa: PLR0913 |
178 | 179 | http_handler: RequestHandler, |
179 | 180 | extended_agent_card: AgentCard | None = None, |
180 | 181 | context_builder: CallContextBuilder | None = None, |
181 | | - card_modifier: Callable[[AgentCard], AgentCard] | None = None, |
| 182 | + card_modifier: Callable[[AgentCard], Awaitable[AgentCard] | AgentCard] |
| 183 | + | None = None, |
182 | 184 | extended_card_modifier: Callable[ |
183 | | - [AgentCard, ServerCallContext], AgentCard |
| 185 | + [AgentCard, ServerCallContext], Awaitable[AgentCard] | AgentCard |
184 | 186 | ] |
185 | 187 | | None = None, |
186 | 188 | max_content_length: int | None = 10 * 1024 * 1024, # 10MB |
@@ -576,7 +578,8 @@ async def _handle_get_agent_card(self, request: Request) -> JSONResponse: |
576 | 578 |
|
577 | 579 | card_to_serve = self.agent_card |
578 | 580 | if self.card_modifier: |
579 | | - card_to_serve = self.card_modifier(card_to_serve) |
| 581 | + result = self.card_modifier(card_to_serve) |
| 582 | + card_to_serve = await result if isawaitable(result) else result |
580 | 583 |
|
581 | 584 | return JSONResponse( |
582 | 585 | card_to_serve.model_dump( |
@@ -605,7 +608,8 @@ async def _handle_get_authenticated_extended_agent_card( |
605 | 608 | context = self._context_builder.build(request) |
606 | 609 | # If no base extended card is provided, pass the public card to the modifier |
607 | 610 | base_card = card_to_serve if card_to_serve else self.agent_card |
608 | | - card_to_serve = self.extended_card_modifier(base_card, context) |
| 611 | + result = await self.extended_card_modifier(base_card, context) |
| 612 | + card_to_serve = await result if isawaitable(result) else result |
609 | 613 |
|
610 | 614 | if card_to_serve: |
611 | 615 | return JSONResponse( |
|
0 commit comments