File tree Expand file tree Collapse file tree
src/a2a/client/transports Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -81,19 +81,20 @@ async def send_http_stream_request(
8181 try :
8282 event_source .response .raise_for_status ()
8383 except httpx .HTTPStatusError as e :
84+ # Read upfront streaming error content immediately, otherwise lower-level handlers
85+ # (e.g. response.json()) crash with 'ResponseNotRead' Access errors.
8486 await event_source .response .aread ()
8587 raise e
8688
87- try :
88- async for sse in event_source .aiter_sse ():
89- if not sse .data :
90- continue
91- yield sse .data
92- except SSEError as e :
93- if 'application/json' in event_source .response .headers .get (
94- 'content-type' , ''
95- ):
96- content = await event_source .response .aread ()
97- yield content .decode ('utf-8' )
98- else :
99- raise e
89+ # If the response is not a stream, read it standardly (e.g., upfront JSON-RPC error payload)
90+ if 'text/event-stream' not in event_source .response .headers .get (
91+ 'content-type' , ''
92+ ):
93+ content = await event_source .response .aread ()
94+ yield content .decode ('utf-8' )
95+ return
96+
97+ async for sse in event_source .aiter_sse ():
98+ if not sse .data :
99+ continue
100+ yield sse .data
Original file line number Diff line number Diff line change @@ -464,6 +464,7 @@ async def test_send_message_streaming_request_error(
464464 request = create_send_message_request ()
465465 mock_event_source = AsyncMock ()
466466 mock_event_source .response .raise_for_status = MagicMock ()
467+ mock_event_source .response .headers = {}
467468 mock_event_source .aiter_sse = MagicMock (
468469 side_effect = httpx .RequestError (
469470 'Simulated request error' , request = MagicMock ()
@@ -487,6 +488,7 @@ async def test_send_message_streaming_timeout(
487488 request = create_send_message_request ()
488489 mock_event_source = AsyncMock ()
489490 mock_event_source .response .raise_for_status = MagicMock ()
491+ mock_event_source .response .headers = {}
490492 mock_event_source .aiter_sse = MagicMock (
491493 side_effect = httpx .TimeoutException ('Timeout' )
492494 )
You can’t perform that action at this time.
0 commit comments