@@ -155,6 +155,20 @@ class JSONRPCApplication(ABC):
155155 (SSE).
156156 """
157157
158+ # Method-to-model mapping for centralized routing
159+ METHOD_TO_MODEL = {
160+ 'message/send' : SendMessageRequest ,
161+ 'message/stream' : SendStreamingMessageRequest ,
162+ 'tasks/get' : GetTaskRequest ,
163+ 'tasks/cancel' : CancelTaskRequest ,
164+ 'tasks/pushNotificationConfig/set' : SetTaskPushNotificationConfigRequest ,
165+ 'tasks/pushNotificationConfig/get' : GetTaskPushNotificationConfigRequest ,
166+ 'tasks/pushNotificationConfig/list' : ListTaskPushNotificationConfigRequest ,
167+ 'tasks/pushNotificationConfig/delete' : DeleteTaskPushNotificationConfigRequest ,
168+ 'tasks/resubscribe' : TaskResubscriptionRequest ,
169+ 'agent/getAuthenticatedExtendedCard' : GetAuthenticatedExtendedCardRequest ,
170+ }
171+
158172 def __init__ ( # noqa: PLR0913
159173 self ,
160174 agent_card : AgentCard ,
@@ -293,7 +307,7 @@ async def _handle_requests(self, request: Request) -> Response: # noqa: PLR0911
293307 try :
294308 base_request = JSONRPCRequest .model_validate (body )
295309 except ValidationError as e :
296- traceback . print_exc ( )
310+ logger . exception ( 'Failed to validate base JSON-RPC request' )
297311 return self ._generate_error_response (
298312 request_id ,
299313 A2AError (
@@ -303,58 +317,16 @@ async def _handle_requests(self, request: Request) -> Response: # noqa: PLR0911
303317
304318 # 2) Route by method name; unknown -> -32601, known -> validate params (-32602 on failure)
305319 method = base_request .method
320+
306321 try :
307- match method :
308- case 'message/send' :
309- specific_request = SendMessageRequest .model_validate (
310- body
311- )
312- case 'message/stream' :
313- specific_request = (
314- SendStreamingMessageRequest .model_validate (body )
315- )
316- case 'tasks/get' :
317- specific_request = GetTaskRequest .model_validate (body )
318- case 'tasks/cancel' :
319- specific_request = CancelTaskRequest .model_validate (
320- body
321- )
322- case 'tasks/pushNotificationConfig/set' :
323- specific_request = (
324- SetTaskPushNotificationConfigRequest .model_validate (
325- body
326- )
327- )
328- case 'tasks/pushNotificationConfig/get' :
329- specific_request = (
330- GetTaskPushNotificationConfigRequest .model_validate (
331- body
332- )
333- )
334- case 'tasks/pushNotificationConfig/list' :
335- specific_request = ListTaskPushNotificationConfigRequest .model_validate (
336- body
337- )
338- case 'tasks/pushNotificationConfig/delete' :
339- specific_request = DeleteTaskPushNotificationConfigRequest .model_validate (
340- body
341- )
342- case 'tasks/resubscribe' :
343- specific_request = (
344- TaskResubscriptionRequest .model_validate (body )
345- )
346- case 'agent/getAuthenticatedExtendedCard' :
347- specific_request = (
348- GetAuthenticatedExtendedCardRequest .model_validate (
349- body
350- )
351- )
352- case _:
353- return self ._generate_error_response (
354- request_id , A2AError (root = MethodNotFoundError ())
355- )
322+ model_class = self .METHOD_TO_MODEL .get (method )
323+ if not model_class :
324+ return self ._generate_error_response (
325+ request_id , A2AError (root = MethodNotFoundError ())
326+ )
327+ specific_request = model_class .model_validate (body )
356328 except ValidationError as e :
357- traceback . print_exc ( )
329+ logger . exception ( 'Failed to validate base JSON-RPC request' )
358330 return self ._generate_error_response (
359331 request_id ,
360332 A2AError (
0 commit comments