From e3ee218da59040a30e67aa2c83b2b8f7279f8b26 Mon Sep 17 00:00:00 2001 From: ctrlz526 <143257420+ctrlz526@users.noreply.github.com> Date: Mon, 18 May 2026 16:14:49 +0800 Subject: [PATCH] fix(volcengine): raise on unknown reasoning_effort when drop_params=False Addresses greptile review concern: unknown reasoning_effort values (future or misspelled) were silently dropped, which violates LiteLLM's drop_params semantic where False should surface unsupported params as errors instead of no-ops. - Raise UnsupportedParamsError when reasoning_effort is unrecognized AND drop_params=False AND litellm.drop_params=False. - Continue silently dropping when drop_params=True (or global flag set). - Add test_reasoning_effort_unknown_value covering both branches. --- .../llms/volcengine/chat/transformation.py | 17 ++++++++++- .../llms/volcengine/test_volcengine.py | 28 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/litellm/llms/volcengine/chat/transformation.py b/litellm/llms/volcengine/chat/transformation.py index 21661c0ab5c..e266d7edb56 100644 --- a/litellm/llms/volcengine/chat/transformation.py +++ b/litellm/llms/volcengine/chat/transformation.py @@ -1,5 +1,7 @@ from typing import Optional, Union +import litellm +from litellm.exceptions import UnsupportedParamsError from litellm.llms.openai_like.chat.transformation import OpenAILikeChatConfig @@ -103,7 +105,20 @@ class VolcEngineChatConfig(OpenAILikeChatConfig): optional_params["thinking"] = {"type": "enabled"} elif reasoning_effort == "auto": optional_params["thinking"] = {"type": "auto"} - # Unknown values: silently drop (super() already handles drop_params semantics) + else: + # Unknown reasoning_effort value: respect drop_params semantics. + # When drop_params=True (or litellm.drop_params=True): silently drop. + # Otherwise: raise so callers don't silently get default thinking behavior. + if not (drop_params or litellm.drop_params): + raise UnsupportedParamsError( + status_code=400, + message=( + f"VolcEngine does not support reasoning_effort=" + f"{reasoning_effort!r}. Supported values: 'none', " + f"'minimal', 'low', 'medium', 'high', 'xhigh', 'auto'. " + f"Pass drop_params=True to silently drop unknown values." + ), + ) if "thinking" in optional_params: """ diff --git a/tests/test_litellm/llms/volcengine/test_volcengine.py b/tests/test_litellm/llms/volcengine/test_volcengine.py index e3a46f8672a..dddea2c19ef 100644 --- a/tests/test_litellm/llms/volcengine/test_volcengine.py +++ b/tests/test_litellm/llms/volcengine/test_volcengine.py @@ -176,6 +176,34 @@ class TestVolcEngineConfig: ) assert e2e["extra_body"]["thinking"] == {"type": "disabled"} + def test_reasoning_effort_unknown_value(self): + """Unknown reasoning_effort values must respect drop_params semantics.""" + import pytest + + from litellm.exceptions import UnsupportedParamsError + + config = VolcEngineConfig() + + # drop_params=False: raise on unknown value (not silently drop) + with pytest.raises(UnsupportedParamsError) as exc_info: + config.map_openai_params( + non_default_params={"reasoning_effort": "ultra"}, + optional_params={}, + model="doubao-seed-1.6", + drop_params=False, + ) + assert "reasoning_effort" in str(exc_info.value) + assert "ultra" in str(exc_info.value) + + # drop_params=True: silently drop unknown value, no thinking written + out = config.map_openai_params( + non_default_params={"reasoning_effort": "ultra"}, + optional_params={}, + model="doubao-seed-1.6", + drop_params=True, + ) + assert out == {} + def test_e2e_completion(self): from openai import OpenAI