diff --git a/litellm/llms/baseten/chat.py b/litellm/llms/baseten/chat.py index 0374646f2f3..e92f47c41c0 100644 --- a/litellm/llms/baseten/chat.py +++ b/litellm/llms/baseten/chat.py @@ -54,6 +54,7 @@ class BasetenConfig(OpenAIGPTConfig): return [ "max_tokens", "max_completion_tokens", + "reasoning_effort", "response_format", "seed", "stop", diff --git a/tests/unit/llms/baseten/chat/test_baseten_completions.py b/tests/unit/llms/baseten/chat/test_baseten_completions.py index caf96987933..d3fe92be75c 100644 --- a/tests/unit/llms/baseten/chat/test_baseten_completions.py +++ b/tests/unit/llms/baseten/chat/test_baseten_completions.py @@ -54,5 +54,48 @@ class TestBasetenModelAPI: assert api_key == "test-key" +class TestBasetenReasoningEffort: + """Test reasoning_effort support for Baseten reasoning models. + + Baseten's Model API accepts a top-level `reasoning_effort` parameter and + validates it server-side (invalid values return 400), so LiteLLM should + forward it verbatim instead of dropping it: + https://docs.baseten.co/inference/model-apis/reasoning + """ + + def test_reasoning_effort_is_supported(self): + """reasoning_effort is advertised as a supported param""" + config = BasetenConfig() + + assert "reasoning_effort" in config.get_supported_openai_params(model="moonshotai/Kimi-K3") + + def test_reasoning_effort_passthrough_with_drop_params(self): + """reasoning_effort survives drop_params=True and is forwarded verbatim""" + config = BasetenConfig() + + result = config.map_openai_params( + non_default_params={"reasoning_effort": "high", "max_tokens": 100}, + optional_params={}, + model="deepseek-ai/DeepSeek-V4-Flash-0731", + drop_params=True, + ) + + assert result["reasoning_effort"] == "high" + assert result["max_tokens"] == 100 + + def test_reasoning_effort_none_passthrough(self): + """reasoning_effort="none" (disable thinking) is forwarded verbatim""" + config = BasetenConfig() + + result = config.map_openai_params( + non_default_params={"reasoning_effort": "none"}, + optional_params={}, + model="moonshotai/Kimi-K3", + drop_params=True, + ) + + assert result["reasoning_effort"] == "none" + + if __name__ == "__main__": pytest.main([__file__])