diff --git a/litellm/completion_extras/litellm_responses_transformation/transformation.py b/litellm/completion_extras/litellm_responses_transformation/transformation.py index b060f22d355..cb358498968 100644 --- a/litellm/completion_extras/litellm_responses_transformation/transformation.py +++ b/litellm/completion_extras/litellm_responses_transformation/transformation.py @@ -538,16 +538,20 @@ class LiteLLMResponsesTransformationHandler(CompletionTransformationBridge): return cast(List["ALL_RESPONSES_API_TOOL_PARAMS"], responses_tools) - def _map_reasoning_effort(self, reasoning_effort: str) -> Optional[Reasoning]: + def _map_reasoning_effort(self, reasoning_effort: Union[str, Dict[str, Any]]) -> Optional[Reasoning]: + # If dict is passed, convert it directly to Reasoning object + if isinstance(reasoning_effort, dict): + return Reasoning(**reasoning_effort) + + # If string is passed, map without summary (default) if reasoning_effort == "high": - return Reasoning(effort="high", summary="detailed") + return Reasoning(effort="high") elif reasoning_effort == "medium": - # docs say "summary": "concise" is also an option, but it was rejected in practice, so defaulting "auto" - return Reasoning(effort="medium", summary="auto") + return Reasoning(effort="medium") elif reasoning_effort == "low": - return Reasoning(effort="low", summary="auto") + return Reasoning(effort="low") elif reasoning_effort == "minimal": - return Reasoning(effort="minimal", summary="auto") + return Reasoning(effort="minimal") return None def _map_responses_status_to_finish_reason(self, status: Optional[str]) -> str: