From 17d9d74cccff6278f1d51c57cb4a3cd2488b0429 Mon Sep 17 00:00:00 2001 From: Xubin Ren Date: Sat, 4 Apr 2026 12:15:05 +0000 Subject: [PATCH] fix(provider): omit temperature for GPT-5 models --- nanobot/providers/openai_compat_provider.py | 2 +- tests/providers/test_litellm_kwargs.py | 32 +++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/nanobot/providers/openai_compat_provider.py b/nanobot/providers/openai_compat_provider.py index 3702d2745..1dca0248b 100644 --- a/nanobot/providers/openai_compat_provider.py +++ b/nanobot/providers/openai_compat_provider.py @@ -236,7 +236,7 @@ class OpenAICompatProvider(LLMProvider): if reasoning_effort and reasoning_effort.lower() != "none": return False name = model_name.lower() - return not any(token in name for token in ("o1", "o3", "o4")) + return not any(token in name for token in ("gpt-5", "o1", "o3", "o4")) def _build_kwargs( self, diff --git a/tests/providers/test_litellm_kwargs.py b/tests/providers/test_litellm_kwargs.py index 35ab56f92..1be505872 100644 --- a/tests/providers/test_litellm_kwargs.py +++ b/tests/providers/test_litellm_kwargs.py @@ -226,6 +226,38 @@ def test_openai_model_passthrough() -> None: assert provider.get_default_model() == "gpt-4o" +def test_openai_compat_supports_temperature_matches_reasoning_model_rules() -> None: + assert OpenAICompatProvider._supports_temperature("gpt-4o") is True + assert OpenAICompatProvider._supports_temperature("gpt-5-chat") is False + assert OpenAICompatProvider._supports_temperature("o3-mini") is False + assert OpenAICompatProvider._supports_temperature("gpt-4o", reasoning_effort="medium") is False + + +def test_openai_compat_build_kwargs_uses_gpt5_safe_parameters() -> None: + spec = find_by_name("openai") + with patch("nanobot.providers.openai_compat_provider.AsyncOpenAI"): + provider = OpenAICompatProvider( + api_key="sk-test-key", + default_model="gpt-5-chat", + spec=spec, + ) + + kwargs = provider._build_kwargs( + messages=[{"role": "user", "content": "hello"}], + tools=None, + model="gpt-5-chat", + max_tokens=4096, + temperature=0.7, + reasoning_effort=None, + tool_choice=None, + ) + + assert kwargs["model"] == "gpt-5-chat" + assert kwargs["max_completion_tokens"] == 4096 + assert "max_tokens" not in kwargs + assert "temperature" not in kwargs + + def test_openai_compat_preserves_message_level_reasoning_fields() -> None: with patch("nanobot.providers.openai_compat_provider.AsyncOpenAI"): provider = OpenAICompatProvider()