|
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 iscoroutinefunction |
8 | 9 | from typing import TYPE_CHECKING, Any |
9 | 10 |
|
10 | 11 | from pydantic import ValidationError |
@@ -178,10 +179,13 @@ 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]] |
| 183 | + | Callable[[AgentCard], AgentCard] |
| 184 | + | None = None, |
182 | 185 | extended_card_modifier: Callable[ |
183 | | - [AgentCard, ServerCallContext], AgentCard |
| 186 | + [AgentCard, ServerCallContext], Awaitable[AgentCard] |
184 | 187 | ] |
| 188 | + | Callable[[AgentCard, ServerCallContext], AgentCard] |
185 | 189 | | None = None, |
186 | 190 | max_content_length: int | None = 10 * 1024 * 1024, # 10MB |
187 | 191 | ) -> None: |
@@ -576,7 +580,10 @@ async def _handle_get_agent_card(self, request: Request) -> JSONResponse: |
576 | 580 |
|
577 | 581 | card_to_serve = self.agent_card |
578 | 582 | if self.card_modifier: |
579 | | - card_to_serve = self.card_modifier(card_to_serve) |
| 583 | + if iscoroutinefunction(self.card_modifier): |
| 584 | + card_to_serve = await self.card_modifier(card_to_serve) |
| 585 | + else: |
| 586 | + card_to_serve = self.card_modifier(card_to_serve) |
580 | 587 |
|
581 | 588 | return JSONResponse( |
582 | 589 | card_to_serve.model_dump( |
@@ -605,7 +612,12 @@ async def _handle_get_authenticated_extended_agent_card( |
605 | 612 | context = self._context_builder.build(request) |
606 | 613 | # If no base extended card is provided, pass the public card to the modifier |
607 | 614 | base_card = card_to_serve if card_to_serve else self.agent_card |
608 | | - card_to_serve = self.extended_card_modifier(base_card, context) |
| 615 | + if iscoroutinefunction(self.extended_card_modifier): |
| 616 | + card_to_serve = await self.extended_card_modifier( |
| 617 | + base_card, context |
| 618 | + ) |
| 619 | + else: |
| 620 | + card_to_serve = self.extended_card_modifier(base_card, context) |
609 | 621 |
|
610 | 622 | if card_to_serve: |
611 | 623 | return JSONResponse( |
|
0 commit comments