fix(snowflake): reject invalid Claude tool_choice strings

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: arpan sahu <28574248+arpansahu@users.noreply.github.com>
This commit is contained in:
arpan sahu 2026-08-27 07:28:13 +05:30
parent d8595cb647
commit 6f4fbe4121
2 changed files with 21 additions and 1 deletions

View file

@ -322,7 +322,12 @@ class SnowflakeConfig(SnowflakeBaseConfig, OpenAIGPTConfig):
"required": {"type": "any"}, "required": {"type": "any"},
"none": {"type": "none"}, "none": {"type": "none"},
} }
return mapping.get(tool_choice, {"type": "auto"}) if tool_choice not in mapping:
raise ValueError(
"Unsupported tool_choice value for Snowflake Claude model: "
f"{tool_choice!r}. Expected one of: auto, required, none."
)
return mapping[tool_choice]
elif isinstance(tool_choice, dict): elif isinstance(tool_choice, dict):
if tool_choice.get("type") == "function": if tool_choice.get("type") == "function":
func: Final = tool_choice.get("function", {}) func: Final = tool_choice.get("function", {})

View file

@ -118,6 +118,21 @@ class TestSnowflakeToolTransformation:
f"got {transformed_request['tool_choice']}" f"got {transformed_request['tool_choice']}"
) )
def test_claude_rejects_invalid_string_tool_choice(self):
"""
Test that invalid string tool_choice values are not silently downgraded to auto.
"""
config = SnowflakeConfig()
with pytest.raises(ValueError, match="Unsupported tool_choice value"):
config.transform_request(
model="snowflake/claude-sonnet-4-5",
messages=[{"role": "user", "content": "Test"}],
optional_params={"tool_choice": "requried"},
litellm_params={},
headers={},
)
def test_transform_response_with_tool_calls(self): def test_transform_response_with_tool_calls(self):
""" """
Test that standard OpenAI tool_calls response format is parsed correctly. Test that standard OpenAI tool_calls response format is parsed correctly.