From 9fe534aff2ab78bdc18df18af28f12d1b3013cfc Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Thu, 2 Apr 2026 19:23:37 +0530 Subject: [PATCH] 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 --- .../transformation.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/litellm/responses/litellm_completion_transformation/transformation.py b/litellm/responses/litellm_completion_transformation/transformation.py index 0eb2b5123ff..32bda43eb63 100644 --- a/litellm/responses/litellm_completion_transformation/transformation.py +++ b/litellm/responses/litellm_completion_transformation/transformation.py @@ -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