Add support for gpt-5.4 mini and nano

This commit is contained in:
Sameer Kankute
2026-03-17 23:20:59 +05:30
parent 28506edd49
commit 1b91e1656a
4 changed files with 202 additions and 59 deletions
@@ -200,14 +200,14 @@ class OpenAIGPT5Config(OpenAIGPTConfig):
if "reasoning_effort" in optional_params:
optional_params["reasoning_effort"] = normalized
if effective_effort is not None and effective_effort == "xhigh":
if not self._supports_reasoning_effort_level(model, "xhigh"):
if effective_effort is not None and effective_effort == "xhigh" or effective_effort == "minimal":
if not self._supports_reasoning_effort_level(model, effective_effort):
if litellm.drop_params or drop_params:
non_default_params.pop("reasoning_effort", None)
else:
raise litellm.utils.UnsupportedParamsError(
message=(
"reasoning_effort='xhigh' is only supported for gpt-5.1-codex-max, gpt-5.2, and gpt-5.4+ models."
f"reasoning_effort={effective_effort} is not supported for this model."
),
status_code=400,
)
@@ -18333,7 +18333,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": true,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5.2": {
"cache_read_input_token_cost": 1.75e-07,
@@ -18373,7 +18374,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": true,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.2-2025-12-11": {
"cache_read_input_token_cost": 1.75e-07,
@@ -18413,7 +18415,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": true,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.2-chat-latest": {
"cache_read_input_token_cost": 1.75e-07,
@@ -18450,7 +18453,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5.3-chat-latest": {
"cache_read_input_token_cost": 1.75e-07,
@@ -18487,7 +18491,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5.2-pro": {
"input_cost_per_token": 2.1e-05,
@@ -18520,7 +18525,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.2-pro-2025-12-11": {
"input_cost_per_token": 2.1e-05,
@@ -18553,7 +18559,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.4": {
"cache_read_input_token_cost": 2.5e-07,
@@ -18602,7 +18609,8 @@
"supports_service_tier": true,
"supports_vision": true,
"supports_none_reasoning_effort": true,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.4-2026-03-05": {
"cache_read_input_token_cost": 2.5e-07,
@@ -18697,7 +18705,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.4-pro-2026-03-05": {
"cache_read_input_token_cost": 3e-06,
@@ -18745,7 +18754,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.4-mini": {
"cache_read_input_token_cost": 7.5e-08,
@@ -18786,7 +18796,8 @@
"supports_service_tier": true,
"supports_vision": true,
"supports_none_reasoning_effort": true,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": false
},
"gpt-5.4-nano": {
"cache_read_input_token_cost": 2e-08,
@@ -18827,7 +18838,8 @@
"supports_service_tier": true,
"supports_vision": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": false
},
"gpt-5-pro": {
"input_cost_per_token": 1.5e-05,
@@ -18862,7 +18874,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-pro-2025-10-06": {
"input_cost_per_token": 1.5e-05,
@@ -18897,7 +18910,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-2025-08-07": {
"cache_read_input_token_cost": 1.25e-07,
@@ -18939,7 +18953,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-chat": {
"cache_read_input_token_cost": 1.25e-07,
@@ -18973,7 +18988,8 @@
"supports_tool_choice": false,
"supports_vision": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-chat-latest": {
"cache_read_input_token_cost": 1.25e-07,
@@ -19007,7 +19023,8 @@
"supports_tool_choice": false,
"supports_vision": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-codex": {
"cache_read_input_token_cost": 1.25e-07,
@@ -19040,7 +19057,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5.1-codex": {
"cache_read_input_token_cost": 1.25e-07,
@@ -19076,7 +19094,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5.1-codex-max": {
"cache_read_input_token_cost": 1.25e-07,
@@ -19109,7 +19128,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.1-codex-mini": {
"cache_read_input_token_cost": 2.5e-08,
@@ -19145,7 +19165,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5.2-codex": {
"cache_read_input_token_cost": 1.75e-07,
@@ -19181,7 +19202,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.3-codex": {
"cache_read_input_token_cost": 1.75e-07,
@@ -19217,7 +19239,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-mini": {
"cache_read_input_token_cost": 2.5e-08,
@@ -19259,7 +19282,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-mini-2025-08-07": {
"cache_read_input_token_cost": 2.5e-08,
@@ -19301,7 +19325,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-nano": {
"cache_read_input_token_cost": 5e-09,
@@ -19340,7 +19365,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-nano-2025-08-07": {
"cache_read_input_token_cost": 5e-09,
@@ -19378,7 +19404,9 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-image-1": {
"cache_read_input_image_token_cost": 2.5e-06,
@@ -36349,7 +36377,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-search-api-2025-10-14": {
"cache_read_input_token_cost": 1.25e-07,
+57 -28
View File
@@ -18333,7 +18333,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": true,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5.2": {
"cache_read_input_token_cost": 1.75e-07,
@@ -18373,7 +18374,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": true,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.2-2025-12-11": {
"cache_read_input_token_cost": 1.75e-07,
@@ -18413,7 +18415,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": true,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.2-chat-latest": {
"cache_read_input_token_cost": 1.75e-07,
@@ -18450,7 +18453,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5.3-chat-latest": {
"cache_read_input_token_cost": 1.75e-07,
@@ -18487,7 +18491,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5.2-pro": {
"input_cost_per_token": 2.1e-05,
@@ -18520,7 +18525,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.2-pro-2025-12-11": {
"input_cost_per_token": 2.1e-05,
@@ -18553,7 +18559,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.4": {
"cache_read_input_token_cost": 2.5e-07,
@@ -18602,7 +18609,8 @@
"supports_service_tier": true,
"supports_vision": true,
"supports_none_reasoning_effort": true,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.4-2026-03-05": {
"cache_read_input_token_cost": 2.5e-07,
@@ -18697,7 +18705,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.4-pro-2026-03-05": {
"cache_read_input_token_cost": 3e-06,
@@ -18745,7 +18754,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.4-mini": {
"cache_read_input_token_cost": 7.5e-08,
@@ -18786,7 +18796,8 @@
"supports_service_tier": true,
"supports_vision": true,
"supports_none_reasoning_effort": true,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": false
},
"gpt-5.4-nano": {
"cache_read_input_token_cost": 2e-08,
@@ -18827,7 +18838,8 @@
"supports_service_tier": true,
"supports_vision": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": false
},
"gpt-5-pro": {
"input_cost_per_token": 1.5e-05,
@@ -18862,7 +18874,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-pro-2025-10-06": {
"input_cost_per_token": 1.5e-05,
@@ -18897,7 +18910,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-2025-08-07": {
"cache_read_input_token_cost": 1.25e-07,
@@ -18939,7 +18953,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-chat": {
"cache_read_input_token_cost": 1.25e-07,
@@ -18973,7 +18988,8 @@
"supports_tool_choice": false,
"supports_vision": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-chat-latest": {
"cache_read_input_token_cost": 1.25e-07,
@@ -19007,7 +19023,8 @@
"supports_tool_choice": false,
"supports_vision": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-codex": {
"cache_read_input_token_cost": 1.25e-07,
@@ -19040,7 +19057,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5.1-codex": {
"cache_read_input_token_cost": 1.25e-07,
@@ -19076,7 +19094,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5.1-codex-max": {
"cache_read_input_token_cost": 1.25e-07,
@@ -19109,7 +19128,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.1-codex-mini": {
"cache_read_input_token_cost": 2.5e-08,
@@ -19145,7 +19165,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5.2-codex": {
"cache_read_input_token_cost": 1.75e-07,
@@ -19181,7 +19202,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": true
"supports_xhigh_reasoning_effort": true,
"supports_minimal_reasoning_effort": true
},
"gpt-5.3-codex": {
"cache_read_input_token_cost": 1.75e-07,
@@ -19217,7 +19239,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-mini": {
"cache_read_input_token_cost": 2.5e-08,
@@ -19259,7 +19282,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-mini-2025-08-07": {
"cache_read_input_token_cost": 2.5e-08,
@@ -19301,7 +19325,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-nano": {
"cache_read_input_token_cost": 5e-09,
@@ -19340,7 +19365,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-nano-2025-08-07": {
"cache_read_input_token_cost": 5e-09,
@@ -19378,7 +19404,9 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-image-1": {
"cache_read_input_image_token_cost": 2.5e-06,
@@ -36349,7 +36377,8 @@
"supports_vision": true,
"supports_web_search": true,
"supports_none_reasoning_effort": false,
"supports_xhigh_reasoning_effort": false
"supports_xhigh_reasoning_effort": false,
"supports_minimal_reasoning_effort": true
},
"gpt-5-search-api-2025-10-14": {
"cache_read_input_token_cost": 1.25e-07,
@@ -324,6 +324,91 @@ def test_gpt5_4_pro_allows_reasoning_effort_xhigh(config: OpenAIConfig):
assert params["reasoning_effort"] == "xhigh"
def test_gpt5_4_allows_reasoning_effort_minimal(config: OpenAIConfig):
"""gpt-5.4 supports reasoning_effort='minimal'."""
params = config.map_openai_params(
non_default_params={"reasoning_effort": "minimal"},
optional_params={},
model="gpt-5.4",
drop_params=False,
)
assert params["reasoning_effort"] == "minimal"
def test_gpt5_4_pro_allows_reasoning_effort_minimal(config: OpenAIConfig):
"""gpt-5.4-pro supports reasoning_effort='minimal'."""
params = config.map_openai_params(
non_default_params={"reasoning_effort": "minimal"},
optional_params={},
model="gpt-5.4-pro",
drop_params=False,
)
assert params["reasoning_effort"] == "minimal"
def test_gpt5_4_mini_rejects_reasoning_effort_minimal(config: OpenAIConfig):
"""gpt-5.4-mini does not support reasoning_effort='minimal'."""
with pytest.raises(litellm.utils.UnsupportedParamsError):
config.map_openai_params(
non_default_params={"reasoning_effort": "minimal"},
optional_params={},
model="gpt-5.4-mini",
drop_params=False,
)
def test_gpt5_4_nano_rejects_reasoning_effort_minimal(config: OpenAIConfig):
"""gpt-5.4-nano does not support reasoning_effort='minimal'."""
with pytest.raises(litellm.utils.UnsupportedParamsError):
config.map_openai_params(
non_default_params={"reasoning_effort": "minimal"},
optional_params={},
model="gpt-5.4-nano",
drop_params=False,
)
def test_gpt5_drops_reasoning_effort_minimal_when_requested(config: OpenAIConfig):
"""reasoning_effort='minimal' is dropped for unsupported models when drop_params=True."""
params = config.map_openai_params(
non_default_params={"reasoning_effort": "minimal"},
optional_params={},
model="gpt-5.4-mini",
drop_params=True,
)
assert "reasoning_effort" not in params
def test_gpt5_minimal_dict_triggers_validation(config: OpenAIConfig):
"""Dict with effort='minimal' triggers minimal model-support validation."""
with pytest.raises(litellm.utils.UnsupportedParamsError):
config.map_openai_params(
non_default_params={"reasoning_effort": {"effort": "minimal", "summary": "detailed"}},
optional_params={},
model="gpt-5.4-mini",
drop_params=False,
)
def test_gpt5_minimal_dict_accepted_for_supported_model(config: OpenAIConfig):
"""Dict with effort='minimal' passes through for gpt-5.4+."""
params = config.map_openai_params(
non_default_params={"reasoning_effort": {"effort": "minimal", "summary": "detailed"}},
optional_params={},
model="gpt-5.4",
drop_params=False,
)
assert params["reasoning_effort"] == "minimal"
def test_gpt5_supports_reasoning_effort_level_minimal(gpt5_config: OpenAIGPT5Config):
"""Test that _supports_reasoning_effort_level correctly identifies minimal support."""
assert gpt5_config._supports_reasoning_effort_level("gpt-5.4", "minimal")
assert gpt5_config._supports_reasoning_effort_level("gpt-5.4-pro", "minimal")
assert not gpt5_config._supports_reasoning_effort_level("gpt-5.4-mini", "minimal")
assert not gpt5_config._supports_reasoning_effort_level("gpt-5.4-nano", "minimal")
def test_gpt5_normalizes_reasoning_effort_dict_with_summary(config: OpenAIConfig):
"""Dict with summary/generate_summary is normalized for chat completions."""
params = config.map_openai_params(