1111 from starlette .requests import Request
1212 from starlette .responses import JSONResponse , Response
1313
14+ from a2a .server .context import ServerCallContext
1415 from a2a .server .request_handlers .request_handler import RequestHandler
15- from a2a .types .a2a_pb2 import AgentCard
1616
1717 _package_starlette_installed = True
1818else :
3131 _package_starlette_installed = False
3232
3333
34- from a2a .compat .v0_3 import conversions
3534from a2a .compat .v0_3 .rest_handler import REST03Handler
36- from a2a .server .context import ServerCallContext
3735from a2a .server .routes import CallContextBuilder , DefaultCallContextBuilder
3836from a2a .utils .error_handlers import (
3937 rest_error_handler ,
4038 rest_stream_error_handler ,
4139)
4240from a2a .utils .errors import (
43- ExtendedAgentCardNotConfiguredError ,
4441 InvalidRequestError ,
4542)
46- from a2a .utils .helpers import maybe_await
4743
4844
4945logger = logging .getLogger (__name__ )
@@ -55,22 +51,12 @@ class REST03Adapter:
5551 Defines v0.3 REST request processors and their routes, as well as managing response generation including Server-Sent Events (SSE).
5652 """
5753
58- def __init__ ( # noqa: PLR0913
54+ def __init__ (
5955 self ,
60- agent_card : 'AgentCard' ,
6156 http_handler : 'RequestHandler' ,
62- extended_agent_card : 'AgentCard | None' = None ,
6357 context_builder : 'CallContextBuilder | None' = None ,
64- card_modifier : 'Callable[[AgentCard], Awaitable[AgentCard] | AgentCard] | None' = None ,
65- extended_card_modifier : 'Callable[[AgentCard, ServerCallContext], Awaitable[AgentCard] | AgentCard] | None' = None ,
6658 ):
67- self .agent_card = agent_card
68- self .extended_agent_card = extended_agent_card
69- self .card_modifier = card_modifier
70- self .extended_card_modifier = extended_card_modifier
71- self .handler = REST03Handler (
72- agent_card = agent_card , request_handler = http_handler
73- )
59+ self .handler = REST03Handler (request_handler = http_handler )
7460 self ._context_builder = context_builder or DefaultCallContextBuilder ()
7561
7662 @rest_error_handler
@@ -108,39 +94,6 @@ async def event_generator(
10894 event_generator (method (request , call_context ))
10995 )
11096
111- async def handle_get_agent_card (
112- self , request : Request , call_context : ServerCallContext
113- ) -> dict [str , Any ]:
114- """Handles GET requests for the agent card endpoint."""
115- card_to_serve = self .agent_card
116- if self .card_modifier :
117- card_to_serve = await maybe_await (self .card_modifier (card_to_serve ))
118- v03_card = conversions .to_compat_agent_card (card_to_serve )
119- return v03_card .model_dump (mode = 'json' , exclude_none = True )
120-
121- async def handle_authenticated_agent_card (
122- self , request : Request , call_context : ServerCallContext
123- ) -> dict [str , Any ]:
124- """Hook for per credential agent card response."""
125- if not self .agent_card .capabilities .extended_agent_card :
126- raise ExtendedAgentCardNotConfiguredError (
127- message = 'Authenticated card not supported'
128- )
129- card_to_serve = self .extended_agent_card
130-
131- if not card_to_serve :
132- card_to_serve = self .agent_card
133-
134- if self .extended_card_modifier :
135- card_to_serve = await maybe_await (
136- self .extended_card_modifier (card_to_serve , call_context )
137- )
138- elif self .card_modifier :
139- card_to_serve = await maybe_await (self .card_modifier (card_to_serve ))
140-
141- v03_card = conversions .to_compat_agent_card (card_to_serve )
142- return v03_card .model_dump (mode = 'json' , exclude_none = True )
143-
14497 def routes (self ) -> dict [tuple [str , str ], Callable [[Request ], Any ]]:
14598 """Constructs a dictionary of API routes and their corresponding handlers."""
14699 routes : dict [tuple [str , str ], Callable [[Request ], Any ]] = {
@@ -186,10 +139,9 @@ def routes(self) -> dict[tuple[str, str], Callable[[Request], Any]]:
186139 ('/v1/tasks' , 'GET' ): functools .partial (
187140 self ._handle_request , self .handler .list_tasks
188141 ),
142+ ('/v1/card' , 'GET' ): functools .partial (
143+ self ._handle_request , self .handler .on_get_extended_agent_card
144+ ),
189145 }
190- if self .agent_card .capabilities .extended_agent_card :
191- routes [('/v1/card' , 'GET' )] = functools .partial (
192- self ._handle_request , self .handle_authenticated_agent_card
193- )
194146
195147 return routes
0 commit comments