fix(responses): map reasoning dict to reasoning_effort string by default

Extract effort from reasoning payloads without a summary key so chat
completion providers receive a string. Preserve the full dict when
summary is present for the Responses API bridge in main.py.

Made-with: Cursor
This commit is contained in:
Sameer Kankute 2026-04-02 19:23:37 +05:30
parent 890c927c82
commit 9fe534aff2
No known key found for this signature in database

View file

@ -185,9 +185,13 @@ class LiteLLMCompletionResponsesConfig:
reasoning_param = responses_api_request.get("reasoning")
if reasoning_param:
if isinstance(reasoning_param, dict):
# reasoning can be {"effort": "low|medium|high", "summary": "detailed"}
# Preserve the full dict structure for reasoning_effort
reasoning_effort = reasoning_param
# reasoning can be {"effort": "low|medium|high"} or include "summary"
# for OpenAI Responses; providers expect reasoning_effort as a string unless
# summary is present (main.py preserves dict for responses_api_bridge).
if "summary" in reasoning_param:
reasoning_effort = reasoning_param
else:
reasoning_effort = reasoning_param.get("effort")
elif isinstance(reasoning_param, str):
# reasoning could be a string directly
reasoning_effort = reasoning_param
@ -2124,9 +2128,9 @@ class LiteLLMCompletionResponsesConfig:
hasattr(completion_details, "reasoning_tokens")
and completion_details.reasoning_tokens is not None
):
output_details_dict[
"reasoning_tokens"
] = completion_details.reasoning_tokens
output_details_dict["reasoning_tokens"] = (
completion_details.reasoning_tokens
)
else:
output_details_dict["reasoning_tokens"] = 0