diff --git a/litellm/completion_extras/litellm_responses_transformation/transformation.py b/litellm/completion_extras/litellm_responses_transformation/transformation.py index f94bf34e8d3..d1228ac2610 100644 --- a/litellm/completion_extras/litellm_responses_transformation/transformation.py +++ b/litellm/completion_extras/litellm_responses_transformation/transformation.py @@ -1114,8 +1114,9 @@ class LiteLLMResponsesTransformationHandler(CompletionTransformationBridge): ) # Level-agnostic: providers own effort validation, so an unknown level (max, ultra, future - # ones) passes through instead of being silently dropped here. - if reasoning_effort: + # ones) passes through instead of being silently dropped here. "default" means no override, + # so it maps to nothing rather than reaching a provider as a literal effort value. + if reasoning_effort and reasoning_effort != "default": return ( Reasoning(effort=reasoning_effort, summary="detailed") if auto_summary_enabled diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index a66b7963e1f..e6c76983e91 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -6640,8 +6640,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/gpt-5.6-sol": { "cache_read_input_token_cost": 5e-07, @@ -6693,8 +6692,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/gpt-5.6-terra": { "cache_read_input_token_cost": 2e-07, @@ -6746,8 +6744,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/gpt-5.6-luna": { "cache_read_input_token_cost": 2e-08, @@ -6799,8 +6796,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/us/gpt-5.6": { "cache_read_input_token_cost": 5.5e-07, @@ -6848,8 +6844,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/us/gpt-5.6-sol": { "cache_read_input_token_cost": 5.5e-07, @@ -6898,8 +6893,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/us/gpt-5.6-terra": { "cache_read_input_token_cost": 2.2e-07, @@ -6948,8 +6942,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/us/gpt-5.6-luna": { "cache_read_input_token_cost": 2.2e-08, @@ -6998,8 +6991,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/eu/gpt-5.6": { "cache_read_input_token_cost": 5.5e-07, @@ -7047,8 +7039,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/eu/gpt-5.6-sol": { "cache_read_input_token_cost": 5.5e-07, @@ -7097,8 +7088,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/eu/gpt-5.6-terra": { "cache_read_input_token_cost": 2.2e-07, @@ -7147,8 +7137,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/eu/gpt-5.6-luna": { "cache_read_input_token_cost": 2.2e-08, @@ -7197,8 +7186,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/gpt-5.5": { "deprecation_date": "2027-10-26", @@ -26430,8 +26418,7 @@ "supports_vision": true, "supports_web_search": true, "supports_xhigh_reasoning_effort": true, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "gpt-5.6-sol": { "cache_creation_input_token_cost": 5e-06, @@ -26496,8 +26483,7 @@ "supports_vision": true, "supports_web_search": true, "supports_xhigh_reasoning_effort": true, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "gpt-5.6-terra": { "cache_creation_input_token_cost": 2.5e-06, @@ -26561,8 +26547,7 @@ "supports_vision": true, "supports_web_search": true, "supports_xhigh_reasoning_effort": true, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "gpt-5.6-luna": { "cache_creation_input_token_cost": 2.5e-07, @@ -26626,8 +26611,7 @@ "supports_vision": true, "supports_web_search": true, "supports_xhigh_reasoning_effort": true, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "gpt-5.6-cyber": { "cache_creation_input_token_cost": 1.5625e-05, diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index a66b7963e1f..e6c76983e91 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -6640,8 +6640,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/gpt-5.6-sol": { "cache_read_input_token_cost": 5e-07, @@ -6693,8 +6692,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/gpt-5.6-terra": { "cache_read_input_token_cost": 2e-07, @@ -6746,8 +6744,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/gpt-5.6-luna": { "cache_read_input_token_cost": 2e-08, @@ -6799,8 +6796,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/us/gpt-5.6": { "cache_read_input_token_cost": 5.5e-07, @@ -6848,8 +6844,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/us/gpt-5.6-sol": { "cache_read_input_token_cost": 5.5e-07, @@ -6898,8 +6893,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/us/gpt-5.6-terra": { "cache_read_input_token_cost": 2.2e-07, @@ -6948,8 +6942,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/us/gpt-5.6-luna": { "cache_read_input_token_cost": 2.2e-08, @@ -6998,8 +6991,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/eu/gpt-5.6": { "cache_read_input_token_cost": 5.5e-07, @@ -7047,8 +7039,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/eu/gpt-5.6-sol": { "cache_read_input_token_cost": 5.5e-07, @@ -7097,8 +7088,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/eu/gpt-5.6-terra": { "cache_read_input_token_cost": 2.2e-07, @@ -7147,8 +7137,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/eu/gpt-5.6-luna": { "cache_read_input_token_cost": 2.2e-08, @@ -7197,8 +7186,7 @@ "supports_none_reasoning_effort": true, "supports_xhigh_reasoning_effort": true, "supports_minimal_reasoning_effort": false, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "azure/gpt-5.5": { "deprecation_date": "2027-10-26", @@ -26430,8 +26418,7 @@ "supports_vision": true, "supports_web_search": true, "supports_xhigh_reasoning_effort": true, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "gpt-5.6-sol": { "cache_creation_input_token_cost": 5e-06, @@ -26496,8 +26483,7 @@ "supports_vision": true, "supports_web_search": true, "supports_xhigh_reasoning_effort": true, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "gpt-5.6-terra": { "cache_creation_input_token_cost": 2.5e-06, @@ -26561,8 +26547,7 @@ "supports_vision": true, "supports_web_search": true, "supports_xhigh_reasoning_effort": true, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "gpt-5.6-luna": { "cache_creation_input_token_cost": 2.5e-07, @@ -26626,8 +26611,7 @@ "supports_vision": true, "supports_web_search": true, "supports_xhigh_reasoning_effort": true, - "supports_max_reasoning_effort": true, - "supports_ultra_reasoning_effort": true + "supports_max_reasoning_effort": true }, "gpt-5.6-cyber": { "cache_creation_input_token_cost": 1.5625e-05, diff --git a/model_prices_and_context_window.schema.json b/model_prices_and_context_window.schema.json index 75bf3d47f35..f7f60c7666d 100644 --- a/model_prices_and_context_window.schema.json +++ b/model_prices_and_context_window.schema.json @@ -702,9 +702,6 @@ "supports_tool_search": { "type": "boolean" }, - "supports_ultra_reasoning_effort": { - "type": "boolean" - }, "supports_url_context": { "type": "boolean" }, diff --git a/tests/test_litellm/completion_extras/litellm_responses_transformation/test_completion_extras_litellm_responses_transformation_transformation.py b/tests/test_litellm/completion_extras/litellm_responses_transformation/test_completion_extras_litellm_responses_transformation_transformation.py index a0aecfafdbc..5c76fe5e7da 100644 --- a/tests/test_litellm/completion_extras/litellm_responses_transformation/test_completion_extras_litellm_responses_transformation_transformation.py +++ b/tests/test_litellm/completion_extras/litellm_responses_transformation/test_completion_extras_litellm_responses_transformation_transformation.py @@ -1593,6 +1593,7 @@ def test_map_reasoning_effort_adds_summary_detailed(monkeypatch): result_passthrough = handler._map_reasoning_effort(effort) assert result_passthrough == Reasoning(effort=effort) assert handler._map_reasoning_effort("") is None + assert handler._map_reasoning_effort("default") is None print("✓ Unenumerated reasoning_effort levels pass through to the provider") print( diff --git a/tests/test_litellm/llms/openai/test_gpt5_transformation.py b/tests/test_litellm/llms/openai/test_gpt5_transformation.py index 7595c64da07..5af767f0a86 100644 --- a/tests/test_litellm/llms/openai/test_gpt5_transformation.py +++ b/tests/test_litellm/llms/openai/test_gpt5_transformation.py @@ -1311,15 +1311,27 @@ def test_responses_gpt54_allow_temperature_effort_none( assert params["temperature"] == 0.7 -@pytest.mark.parametrize("effort", ["max", "ultra"]) -def test_gpt5_6_allows_opt_in_reasoning_efforts(config: OpenAIConfig, effort: str): +def test_gpt5_6_allows_reasoning_effort_max(config: OpenAIConfig): params = config.map_openai_params( - non_default_params={"reasoning_effort": effort}, + non_default_params={"reasoning_effort": "max"}, optional_params={}, model="gpt-5.6", drop_params=False, ) - assert params["reasoning_effort"] == effort + assert params["reasoning_effort"] == "max" + + +def test_gpt5_6_rejects_reasoning_effort_ultra_until_the_map_opts_in(config: OpenAIConfig): + # ultra is plumbed as an opt-in level but no map entry asserts it: OpenAI's model guidance + # documents effort values only up to max, and the builder guide frames ultra as multi-agent + # orchestration. A verified supports_ultra_reasoning_effort flag lights this up with no code. + with pytest.raises(litellm.utils.UnsupportedParamsError): + config.map_openai_params( + non_default_params={"reasoning_effort": "ultra"}, + optional_params={}, + model="gpt-5.6", + drop_params=False, + ) @pytest.mark.parametrize("effort", ["max", "ultra"])