From d7997db912b38fb22130e2b18bfa388d90c5601f Mon Sep 17 00:00:00 2001 From: Nate Tessman <140846984+ntessman-capsule@users.noreply.github.com> Date: Sat, 31 Jan 2026 15:30:10 -0800 Subject: [PATCH] fix: Include hidden params in chat response to responses api response transformation (#20084) * Include hidden_params in chat completion to responses transformation * add tests --- .../transformation.py | 1 + .../test_litellm_completion_responses.py | 71 +++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/litellm/responses/litellm_completion_transformation/transformation.py b/litellm/responses/litellm_completion_transformation/transformation.py index 74cc87713d..df298f7c44 100644 --- a/litellm/responses/litellm_completion_transformation/transformation.py +++ b/litellm/responses/litellm_completion_transformation/transformation.py @@ -1413,6 +1413,7 @@ class LiteLLMCompletionResponsesConfig: ), user=getattr(chat_completion_response, "user", None), ) + responses_api_response._hidden_params = getattr(chat_completion_response, "_hidden_params", {}) return responses_api_response @staticmethod diff --git a/tests/test_litellm/responses/litellm_completion_transformation/test_litellm_completion_responses.py b/tests/test_litellm/responses/litellm_completion_transformation/test_litellm_completion_responses.py index f7a1984d32..5074bbf439 100644 --- a/tests/test_litellm/responses/litellm_completion_transformation/test_litellm_completion_responses.py +++ b/tests/test_litellm/responses/litellm_completion_transformation/test_litellm_completion_responses.py @@ -468,6 +468,77 @@ class TestLiteLLMCompletionResponsesConfig: ] assert item.status != "stop" + def test_transform_chat_completion_response_preserves_hidden_params(self): + """Test that _hidden_params from chat completion response are preserved in responses API response""" + # Setup + chat_completion_response = ModelResponse( + id="test-response-id", + created=1234567890, + model="test-model", + object="chat.completion", + choices=[ + Choices( + finish_reason="stop", + index=0, + message=Message( + content="Test response", + role="assistant", + ), + ) + ], + ) + # Set hidden params on the chat completion response + chat_completion_response._hidden_params = { + "model_id": "abc123", + "cache_key": "some-cache-key", + "custom_llm_provider": "openai", + } + + # Execute + responses_api_response = LiteLLMCompletionResponsesConfig.transform_chat_completion_response_to_responses_api_response( + request_input="Test", + responses_api_request={}, + chat_completion_response=chat_completion_response, + ) + + # Assert + assert hasattr(responses_api_response, "_hidden_params") + assert responses_api_response._hidden_params == { + "model_id": "abc123", + "cache_key": "some-cache-key", + "custom_llm_provider": "openai", + } + + def test_transform_chat_completion_response_handles_missing_hidden_params(self): + """Test that missing _hidden_params defaults to empty dict""" + # Setup - no _hidden_params set + chat_completion_response = ModelResponse( + id="test-response-id", + created=1234567890, + model="test-model", + object="chat.completion", + choices=[ + Choices( + finish_reason="stop", + index=0, + message=Message( + content="Test response", + role="assistant", + ), + ) + ], + ) + + # Execute + responses_api_response = LiteLLMCompletionResponsesConfig.transform_chat_completion_response_to_responses_api_response( + request_input="Test", + responses_api_request={}, + chat_completion_response=chat_completion_response, + ) + + # Assert - should default to empty dict + assert hasattr(responses_api_response, "_hidden_params") + assert responses_api_response._hidden_params == {} class TestFunctionCallTransformation: """Test cases for function_call input transformation"""