fix(gigachat): don't claim stop support the provider lacks

get_supported_openai_params listed stop, but map_openai_params discarded it
with a comment saying GigaChat has no stop sequences. Listing it suppresses
the UnsupportedParamsError litellm raises for unsupported params, so the
sequences went missing with no error and generation ran on.

Dropping stop from the list restores the normal path: an error naming the
param, or a quiet drop under drop_params=True.
This commit is contained in:
mkzung 2026-07-19 18:46:35 +05:00
parent 46d2c2a6ea
commit 6252f1098a
No known key found for this signature in database
2 changed files with 30 additions and 5 deletions

View file

@ -135,14 +135,16 @@ class GigaChatConfig(BaseConfig):
return headers
def get_supported_openai_params(self, model: str) -> list[str]: # mutable-ok: base class contract returns list
"""Return list of supported OpenAI parameters."""
"""Return list of supported OpenAI parameters.
No stop: the GigaChat request body has no stop field.
"""
return [
"stream",
"temperature",
"top_p",
"max_tokens",
"max_completion_tokens",
"stop",
"tools",
"tool_choice",
"functions",
@ -171,9 +173,6 @@ class GigaChatConfig(BaseConfig):
optional_params["top_p"] = value
elif param in ("max_tokens", "max_completion_tokens"):
optional_params["max_tokens"] = value
elif param == "stop":
# GigaChat doesn't support stop sequences
pass
elif param == "tools":
# Convert tools to functions format
if isinstance(value, Sequence):

View file

@ -359,6 +359,32 @@ class TestGigaChatSupportedParams:
assert "response_format" in supported
assert "stream" in supported
def test_stop_not_supported(self, config):
"""Claiming stop would silence UnsupportedParamsError and drop the sequences."""
assert "stop" not in config.get_supported_openai_params("GigaChat")
def test_stop_raises_instead_of_being_dropped(self, config):
"""stop raises UnsupportedParamsError."""
import litellm
from litellm.utils import get_optional_params
with pytest.raises(litellm.UnsupportedParamsError):
get_optional_params(
model="GigaChat", custom_llm_provider="gigachat", stop=["END"]
)
def test_stop_dropped_with_drop_params(self, config):
"""drop_params=True drops stop."""
from litellm.utils import get_optional_params
params = get_optional_params(
model="GigaChat",
custom_llm_provider="gigachat",
stop=["END"],
drop_params=True,
)
assert "stop" not in params
class TestGigaChatToolChoiceMapping:
"""Tests for tool_choice -> function_call mapping"""