From ddf62e0651d493a6bde3798027dc8feb6eb4ad3e Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Mon, 16 Mar 2026 19:20:03 +0530 Subject: [PATCH] fix(critical): add HTTP error checks before parsing response bodies in video handlers Add response.raise_for_status() before transform_*_response() calls in all eight video character/edit/extension handler methods (sync and async): - video_create_character_handler / async_video_create_character_handler - video_get_character_handler / async_video_get_character_handler - video_edit_handler / async_video_edit_handler - video_extension_handler / async_video_extension_handler Without these checks, httpx does not raise on 4xx/5xx responses, so provider errors (e.g., 401 Unauthorized) pass directly to Pydantic model constructors, causing ValidationError instead of meaningful HTTP errors. The raise_for_status() ensures the exception handler receives proper HTTPStatusError for translation into actionable messages. Made-with: Cursor --- litellm/llms/custom_httpx/llm_http_handler.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/litellm/llms/custom_httpx/llm_http_handler.py b/litellm/llms/custom_httpx/llm_http_handler.py index ab95001a2e9..204fa4d0cca 100644 --- a/litellm/llms/custom_httpx/llm_http_handler.py +++ b/litellm/llms/custom_httpx/llm_http_handler.py @@ -6187,6 +6187,7 @@ class BaseLLMHTTPHandler: files=files_list, timeout=timeout, ) + response.raise_for_status() return video_provider_config.transform_video_create_character_response( raw_response=response, logging_obj=logging_obj, @@ -6254,6 +6255,7 @@ class BaseLLMHTTPHandler: files=files_list, timeout=timeout, ) + response.raise_for_status() return video_provider_config.transform_video_create_character_response( raw_response=response, logging_obj=logging_obj, @@ -6327,6 +6329,7 @@ class BaseLLMHTTPHandler: headers=headers, params=params ) + response.raise_for_status() return video_provider_config.transform_video_get_character_response( raw_response=response, logging_obj=logging_obj, @@ -6387,6 +6390,7 @@ class BaseLLMHTTPHandler: headers=headers, params=params ) + response.raise_for_status() return video_provider_config.transform_video_get_character_response( raw_response=response, logging_obj=logging_obj, @@ -6472,6 +6476,7 @@ class BaseLLMHTTPHandler: json=data, timeout=timeout, ) + response.raise_for_status() return video_provider_config.transform_video_edit_response( raw_response=response, logging_obj=logging_obj, @@ -6543,6 +6548,7 @@ class BaseLLMHTTPHandler: json=data, timeout=timeout, ) + response.raise_for_status() return video_provider_config.transform_video_edit_response( raw_response=response, logging_obj=logging_obj, @@ -6632,6 +6638,7 @@ class BaseLLMHTTPHandler: json=data, timeout=timeout, ) + response.raise_for_status() return video_provider_config.transform_video_extension_response( raw_response=response, logging_obj=logging_obj, @@ -6705,6 +6712,7 @@ class BaseLLMHTTPHandler: json=data, timeout=timeout, ) + response.raise_for_status() return video_provider_config.transform_video_extension_response( raw_response=response, logging_obj=logging_obj,