fix(responses_bridge): forward verbosity as text.verbosity

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
kerry 2026-09-16 23:32:32 +00:00
parent 15c18ad6cd
commit e8f246bb6b
2 changed files with 38 additions and 1 deletions

View file

@ -502,7 +502,11 @@ class LiteLLMResponsesTransformationHandler(CompletionTransformationBridge):
elif key == "response_format":
text_format = self._transform_response_format_to_text_format(value)
if text_format:
responses_api_request["text"] = text_format
existing_text = cast("dict[str, object]", responses_api_request["text"] if "text" in responses_api_request else {})
responses_api_request["text"] = cast("ResponseText", {**existing_text, **text_format})
elif key == "verbosity":
existing_text = cast("dict[str, object]", responses_api_request["text"] if "text" in responses_api_request else {})
responses_api_request["text"] = cast("ResponseText", {**existing_text, "verbosity": value})
elif key == "tool_choice":
responses_api_request["tool_choice"] = self._normalize_tool_choice_for_responses_api(value)
elif key == "stream_options":

View file

@ -4287,3 +4287,36 @@ def test_system_string_after_a_developer_message_stays_in_input_in_client_order(
assert instructions is None
assert [item["role"] for item in input_items] == ["developer", "system", "user"]
assert input_items[1] == _system_input_item("Be brief.")
def test_map_optional_params_verbosity_merges_into_text():
"""Chat verbosity must land on Responses text.verbosity alongside text.format regardless of key order."""
from litellm.completion_extras.litellm_responses_transformation.transformation import (
LiteLLMResponsesTransformationHandler,
)
from litellm.types.llms.openai import ResponsesAPIOptionalRequestParams
handler: Final = LiteLLMResponsesTransformationHandler()
responses_api_request = ResponsesAPIOptionalRequestParams()
handler._map_optional_params_to_responses_api_request(
{"verbosity": "low", "response_format": {"type": "json_object"}},
responses_api_request,
)
assert responses_api_request["text"]["verbosity"] == "low"
assert responses_api_request["text"]["format"]["type"] == "json_object"
reversed_request = ResponsesAPIOptionalRequestParams()
handler._map_optional_params_to_responses_api_request(
{"response_format": {"type": "json_object"}, "verbosity": "low"},
reversed_request,
)
assert reversed_request["text"]["verbosity"] == "low"
assert reversed_request["text"]["format"]["type"] == "json_object"
verbosity_only_request = ResponsesAPIOptionalRequestParams()
handler._map_optional_params_to_responses_api_request(
{"verbosity": "low"},
verbosity_only_request,
)
assert verbosity_only_request["text"] == {"verbosity": "low"}