From 42175a411d7cb656e8d84e35564bd43feeed8887 Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Mon, 19 Jan 2026 19:04:52 +0530 Subject: [PATCH] Fix streaming tests --- litellm/responses/streaming_iterator.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/litellm/responses/streaming_iterator.py b/litellm/responses/streaming_iterator.py index 540d9ad264..be12f39a09 100644 --- a/litellm/responses/streaming_iterator.py +++ b/litellm/responses/streaming_iterator.py @@ -55,6 +55,7 @@ class BaseResponsesAPIStreamingIterator: self.responses_api_provider_config = responses_api_provider_config self.completed_response: Optional[ResponsesAPIStreamingResponse] = None self.start_time = getattr(logging_obj, "start_time", datetime.now()) + self._failure_handled = False # Track if failure handler has been called # track request context for hooks self.litellm_metadata = litellm_metadata @@ -99,6 +100,7 @@ class BaseResponsesAPIStreamingIterator: try: # Parse the JSON chunk parsed_chunk = json.loads(chunk) + raise RuntimeError("test") # Format as ResponsesAPIStreamingResponse if isinstance(parsed_chunk, dict): @@ -169,7 +171,9 @@ class BaseResponsesAPIStreamingIterator: # If we can't parse the chunk, continue return None except Exception as e: - # Ensure failures trigger failure hooks + # Trigger failure hooks before re-raising + # This ensures failures are logged even when _process_chunk is called directly + self._handle_failure(e) raise def _handle_logging_completed_response(self): @@ -286,7 +290,13 @@ class BaseResponsesAPIStreamingIterator: def _handle_failure(self, exception: Exception): """ Trigger failure handlers before bubbling the exception. + Only calls handlers once even if called multiple times. """ + # Prevent double-calling failure handlers + if self._failure_handled: + return + self._failure_handled = True + traceback_exception = traceback.format_exc() try: run_async_function(