From 23820043b7b71f7051c5073bb8be576b60c83b78 Mon Sep 17 00:00:00 2001 From: ucfjoe Date: Mon, 7 Sep 2026 21:55:14 +0200 Subject: [PATCH 1/2] fix(baseten): forward reasoning_effort to Baseten Model API Baseten's Model API accepts a top-level reasoning_effort parameter and validates it server-side (https://docs.baseten.co/inference/model-apis/reasoning), but BasetenConfig.get_supported_openai_params did not list it, so LiteLLM silently dropped it when drop_params=True and raised UnsupportedParamsError otherwise. Add reasoning_effort to the supported params so map_openai_params forwards it verbatim, mirroring the hosted_vllm and deepseek providers. Baseten returns a clear 400 for values outside a model's supported set and ignores the parameter on non-reasoning models, so verbatim passthrough is safe for the whole catalog. [Claude_Code] --- litellm/llms/baseten/chat.py | 1 + .../baseten/chat/test_baseten_completions.py | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+) 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__]) From f9957c7eb0b95b178db2198f00cd2fea1e890583 Mon Sep 17 00:00:00 2001 From: Yousef Joe Date: Wed, 7 Oct 2026 11:42:00 +0200 Subject: [PATCH 2/2] fix(baseten): forward reasoning_effort to Baseten Model API Baseten's Model API accepts a top-level reasoning_effort parameter and validates it server-side (https://docs.baseten.co/inference/model-apis/reasoning), but BasetenConfig.get_supported_openai_params did not list it, so LiteLLM silently dropped it when drop_params=True and raised UnsupportedParamsError otherwise. Add reasoning_effort to the supported params so map_openai_params forwards it verbatim, mirroring the hosted_vllm and deepseek providers. Baseten returns a clear 400 for values outside a model's supported set and ignores the parameter on non-reasoning models, so verbatim passthrough is safe for the whole catalog. --- .../baseten/chat/test_baseten_completions.py | 25 ++----------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/tests/unit/llms/baseten/chat/test_baseten_completions.py b/tests/unit/llms/baseten/chat/test_baseten_completions.py index d3fe92be75c..9195df13242 100644 --- a/tests/unit/llms/baseten/chat/test_baseten_completions.py +++ b/tests/unit/llms/baseten/chat/test_baseten_completions.py @@ -18,10 +18,7 @@ class TestBasetenRouting: ) # Model API (non-8-character) - assert ( - config.get_api_base_for_model("openai/gpt-oss-120b") - == "https://inference.baseten.co/v1" - ) + assert config.get_api_base_for_model("openai/gpt-oss-120b") == "https://inference.baseten.co/v1" class TestBasetenModelAPI: @@ -47,30 +44,13 @@ class TestBasetenModelAPI: assert result["top_p"] == 0.9 # Test provider info - api_base, api_key = config._get_openai_compatible_provider_info( - None, "test-key" - ) + api_base, api_key = config._get_openai_compatible_provider_info(None, "test-key") assert api_base == "https://inference.baseten.co/v1" 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( @@ -84,7 +64,6 @@ class TestBasetenReasoningEffort: 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(