55 Client ,
66 ClientCallContext ,
77 ClientConfig ,
8- ClientEvent ,
9- Consumer ,
108)
11- from a2a .client .client_task_manager import ClientTaskManager
129from a2a .client .interceptors import (
1310 AfterArgs ,
1411 BeforeArgs ,
@@ -42,10 +39,9 @@ def __init__(
4239 card : AgentCard ,
4340 config : ClientConfig ,
4441 transport : ClientTransport ,
45- consumers : list [Consumer ],
4642 interceptors : list [ClientCallInterceptor ],
4743 ):
48- super ().__init__ (consumers , interceptors )
44+ super ().__init__ (interceptors )
4945 self ._card = card
5046 self ._config = config
5147 self ._transport = transport
@@ -56,7 +52,7 @@ async def send_message(
5652 request : SendMessageRequest ,
5753 * ,
5854 context : ClientCallContext | None = None ,
59- ) -> AsyncIterator [ClientEvent ]:
55+ ) -> AsyncIterator [StreamResponse ]:
6056 """Sends a message to the agent.
6157
6258 This method handles both streaming and non-streaming (polling) interactions
@@ -68,7 +64,7 @@ async def send_message(
6864 context: Optional client call context.
6965
7066 Yields:
71- An async iterator of `ClientEvent `
67+ An async iterator of `StreamResponse `
7268 """
7369 self ._apply_client_config (request )
7470 if not self ._config .streaming or not self ._card .capabilities .streaming :
@@ -84,19 +80,14 @@ async def send_message(
8480 # In non-streaming case we convert to a StreamResponse so that the
8581 # client always sees the same iterator.
8682 stream_response = StreamResponse ()
87- client_event : ClientEvent
8883 if response .HasField ('task' ):
8984 stream_response .task .CopyFrom (response .task )
90- client_event = (stream_response , response .task )
9185 elif response .HasField ('message' ):
9286 stream_response .message .CopyFrom (response .message )
93- client_event = (stream_response , None )
9487 else :
95- # Response must have either task or message
9688 raise ValueError ('Response has neither task nor message' )
9789
98- await self .consume (client_event , self ._card )
99- yield client_event
90+ yield stream_response
10091 return
10192
10293 async for event in self ._execute_stream_with_interceptors (
@@ -130,8 +121,7 @@ async def _process_stream(
130121 self ,
131122 stream : AsyncIterator [StreamResponse ],
132123 before_args : BeforeArgs ,
133- ) -> AsyncGenerator [ClientEvent ]:
134- tracker = ClientTaskManager ()
124+ ) -> AsyncGenerator [StreamResponse , None ]:
135125 async for stream_response in stream :
136126 after_args = AfterArgs (
137127 result = stream_response ,
@@ -140,12 +130,8 @@ async def _process_stream(
140130 context = before_args .context ,
141131 )
142132 await self ._intercept_after (after_args )
143- intercepted_response = after_args .result
144- client_event = await self ._format_stream_event (
145- intercepted_response , tracker
146- )
147- yield client_event
148- if intercepted_response .HasField ('message' ):
133+ yield after_args .result
134+ if after_args .result .HasField ('message' ):
149135 return
150136
151137 async def get_task (
@@ -318,7 +304,7 @@ async def subscribe(
318304 request : SubscribeToTaskRequest ,
319305 * ,
320306 context : ClientCallContext | None = None ,
321- ) -> AsyncIterator [ClientEvent ]:
307+ ) -> AsyncIterator [StreamResponse ]:
322308 """Resubscribes to a task's event stream.
323309
324310 This is only available if both the client and server support streaming.
@@ -328,7 +314,7 @@ async def subscribe(
328314 context: Optional client call context.
329315
330316 Yields:
331- An async iterator of `ClientEvent ` objects.
317+ An async iterator of `StreamResponse ` objects.
332318
333319 Raises:
334320 NotImplementedError: If streaming is not supported by the client or server.
@@ -436,7 +422,7 @@ async def _execute_stream_with_interceptors(
436422 transport_call : Callable [
437423 [Any , ClientCallContext | None ], AsyncIterator [StreamResponse ]
438424 ],
439- ) -> AsyncIterator [ClientEvent ]:
425+ ) -> AsyncIterator [StreamResponse ]:
440426
441427 before_args = BeforeArgs (
442428 input = input_data ,
@@ -446,7 +432,7 @@ async def _execute_stream_with_interceptors(
446432 )
447433 before_result = await self ._intercept_before (before_args )
448434
449- if before_result :
435+ if before_result is not None :
450436 after_args = AfterArgs (
451437 result = before_result ['early_return' ],
452438 method = method ,
@@ -455,8 +441,7 @@ async def _execute_stream_with_interceptors(
455441 )
456442 await self ._intercept_after (after_args , before_result ['executed' ])
457443
458- tracker = ClientTaskManager ()
459- yield await self ._format_stream_event (after_args .result , tracker )
444+ yield after_args .result
460445 return
461446
462447 stream = transport_call (before_args .input , before_args .context )
@@ -495,19 +480,3 @@ async def _intercept_after(
495480 await interceptor .after (args )
496481 if args .early_return :
497482 return
498-
499- async def _format_stream_event (
500- self , stream_response : StreamResponse , tracker : ClientTaskManager
501- ) -> ClientEvent :
502- client_event : ClientEvent
503- if stream_response .HasField ('message' ):
504- client_event = (stream_response , None )
505- await self .consume (client_event , self ._card )
506- return client_event
507-
508- await tracker .process (stream_response )
509- updated_task = tracker .get_task_or_raise ()
510- client_event = (stream_response , updated_task )
511-
512- await self .consume (client_event , self ._card )
513- return client_event
0 commit comments