address greptile review: remove unused import, normalize model lookup, add xhigh tests

- Remove unused _get_model_info_helper import
- Normalize model via get_llm_provider in _is_reasoning_effort_level_explicitly_disabled
  so provider-prefixed names (openai/gpt-5.4-mini) resolve correctly
- Add test_gpt5_4_mini_allows_reasoning_effort_xhigh
- Add test_gpt5_4_nano_allows_reasoning_effort_xhigh
- Add test_gpt5_4_mini_provider_prefixed_rejects_minimal
- Extend test_gpt5_minimal_explicitly_disabled_check for openai/gpt-5.4-mini
This commit is contained in:
Sameer Kankute
2026-03-18 09:37:19 +05:30
parent a41239cb96
commit 5dd89f16f5
2 changed files with 45 additions and 3 deletions
@@ -3,7 +3,7 @@
from typing import Optional, Union
import litellm
from litellm.utils import _get_model_cost_key, _get_model_info_helper, _supports_factory
from litellm.utils import _get_model_cost_key, _supports_factory
from .gpt_transformation import OpenAIGPTConfig
@@ -125,11 +125,16 @@ class OpenAIGPT5Config(OpenAIGPTConfig):
supported (i.e. this method returns False = not disabled).
Use this for opt-out checks where unknown models should be allowed through.
Normalizes the model via get_llm_provider so provider-prefixed names
(e.g. openai/gpt-5.4-mini) resolve correctly.
"""
try:
normalized_model, _, _, _ = litellm.get_llm_provider(
model=model, custom_llm_provider=None
)
key = f"supports_{level}_reasoning_effort"
cost_key = _get_model_cost_key(model)
entry = litellm.model_cost.get(cost_key or model) or {}
cost_key = _get_model_cost_key(normalized_model)
entry = litellm.model_cost.get(cost_key or normalized_model) or {}
val = entry.get(key)
return val is False
except Exception:
@@ -324,6 +324,28 @@ def test_gpt5_4_pro_allows_reasoning_effort_xhigh(config: OpenAIConfig):
assert params["reasoning_effort"] == "xhigh"
def test_gpt5_4_mini_allows_reasoning_effort_xhigh(config: OpenAIConfig):
"""gpt-5.4-mini supports reasoning_effort='xhigh'."""
params = config.map_openai_params(
non_default_params={"reasoning_effort": "xhigh"},
optional_params={},
model="gpt-5.4-mini",
drop_params=False,
)
assert params["reasoning_effort"] == "xhigh"
def test_gpt5_4_nano_allows_reasoning_effort_xhigh(config: OpenAIConfig):
"""gpt-5.4-nano supports reasoning_effort='xhigh'."""
params = config.map_openai_params(
non_default_params={"reasoning_effort": "xhigh"},
optional_params={},
model="gpt-5.4-nano",
drop_params=False,
)
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(
@@ -368,6 +390,17 @@ def test_gpt5_4_nano_rejects_reasoning_effort_minimal(config: OpenAIConfig):
)
def test_gpt5_4_mini_provider_prefixed_rejects_minimal(config: OpenAIConfig):
"""openai/gpt-5.4-mini correctly rejects minimal (model lookup normalizes prefix)."""
with pytest.raises(litellm.utils.UnsupportedParamsError):
config.map_openai_params(
non_default_params={"reasoning_effort": "minimal"},
optional_params={},
model="openai/gpt-5.4-mini",
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(
@@ -414,6 +447,7 @@ def test_gpt5_minimal_explicitly_disabled_check(gpt5_config: OpenAIGPT5Config):
Models with supports_minimal_reasoning_effort=false → disabled.
Models with supports_minimal_reasoning_effort=true (or missing) → not disabled.
Provider-prefixed models (openai/gpt-5.4-mini) are normalized before lookup.
"""
assert gpt5_config._is_reasoning_effort_level_explicitly_disabled(
"gpt-5.4-mini", "minimal"
@@ -421,6 +455,9 @@ def test_gpt5_minimal_explicitly_disabled_check(gpt5_config: OpenAIGPT5Config):
assert gpt5_config._is_reasoning_effort_level_explicitly_disabled(
"gpt-5.4-nano", "minimal"
)
assert gpt5_config._is_reasoning_effort_level_explicitly_disabled(
"openai/gpt-5.4-mini", "minimal"
)
assert not gpt5_config._is_reasoning_effort_level_explicitly_disabled(
"gpt-5.4", "minimal"
)