diff --git a/litellm/exceptions.py b/litellm/exceptions.py index 8b005291556..825ae2528d8 100644 --- a/litellm/exceptions.py +++ b/litellm/exceptions.py @@ -955,7 +955,12 @@ class MidStreamFallbackError(ServiceUnavailableError): # type: ignore is_pre_first_chunk: bool = False, ): original_status = getattr(original_exception, "status_code", None) - self.status_code = int(original_status) if original_status is not None else 503 + try: + self.status_code = ( + int(original_status) if original_status is not None else 503 + ) + except (ValueError, TypeError): + self.status_code = 503 self.message = f"litellm.MidStreamFallbackError: {message}" self.model = model self.llm_provider = llm_provider @@ -997,7 +1002,12 @@ class MidStreamFallbackError(ServiceUnavailableError): # type: ignore ) # Restore the propagated status and original response/request objects - self.status_code = int(original_status) if original_status is not None else 503 + try: + self.status_code = ( + int(original_status) if original_status is not None else 503 + ) + except (ValueError, TypeError): + self.status_code = 503 self.response = _saved_response self.request = _saved_request self.message = _saved_message diff --git a/tests/test_litellm/test_exception_header_preservation.py b/tests/test_litellm/test_exception_header_preservation.py index 6ea478c633b..bafa1ad38d3 100644 --- a/tests/test_litellm/test_exception_header_preservation.py +++ b/tests/test_litellm/test_exception_header_preservation.py @@ -254,6 +254,27 @@ class TestExceptionAttributes: assert midstream_fallback.response.status_code == 503 assert str(midstream_fallback.response.request.url) == "https://openai.com/v1/" + def test_midstream_fallback_error_non_integer_status_code(self): + """ + MidStreamFallbackError must not crash when original_exception.status_code + is a non-integer string (e.g. 'litellm_error'). Before the fix, int() + raised ValueError and the error handler returned HTTP 500 instead of + engaging the fallback chain. + """ + + class _FakeException(Exception): + status_code = "litellm_error" + + midstream_error = MidStreamFallbackError( + message="stream broke", + model="gpt-4o-mini", + llm_provider="openai", + original_exception=_FakeException("boom"), + ) + + assert midstream_error.status_code == 503 + assert midstream_error.response.status_code == 503 + class TestProxyHeaderExtraction: """Test that proxy correctly extracts headers from exceptions."""