fix: keep ultra plumbed but unasserted, and stop the bridge forwarding default

This commit is contained in:
Tin Chi Lo 2026-08-21 15:53:55 -07:00
parent 764a112d68
commit a5dd020023
6 changed files with 52 additions and 73 deletions

View file

@ -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

View file

@ -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,

View file

@ -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,

View file

@ -702,9 +702,6 @@
"supports_tool_search": {
"type": "boolean"
},
"supports_ultra_reasoning_effort": {
"type": "boolean"
},
"supports_url_context": {
"type": "boolean"
},

View file

@ -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(

View file

@ -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"])