From a275e6d5755fddb8be53321803f5c36cc26dc527 Mon Sep 17 00:00:00 2001 From: Ryan Loney Date: Thu, 20 Aug 2026 12:41:38 -0700 Subject: [PATCH] fix(cerebras): preserve current request parameters --- litellm/llms/cerebras/chat.py | 43 +++++++++++++++++++----- tests/llm_translation/test_cerebras.py | 46 ++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 8 deletions(-) create mode 100644 tests/llm_translation/test_cerebras.py diff --git a/litellm/llms/cerebras/chat.py b/litellm/llms/cerebras/chat.py index c3aa26ade35..691d16b365a 100644 --- a/litellm/llms/cerebras/chat.py +++ b/litellm/llms/cerebras/chat.py @@ -17,29 +17,49 @@ class CerebrasConfig(OpenAIGPTConfig): Below are the parameters: """ + max_completion_tokens: int | None = None max_tokens: int | None = None response_format: dict | None = None seed: int | None = None stream: bool | None = None - top_p: int | None = None - tool_choice: str | None = None + top_p: float | None = None + tool_choice: str | dict | None = None tools: list | None = None user: str | None = None reasoning_effort: str | None = None + parallel_tool_calls: bool | None = None + logprobs: bool | None = None + top_logprobs: int | None = None + frequency_penalty: float | None = None + presence_penalty: float | None = None + logit_bias: dict | None = None + service_tier: str | None = None + prompt_cache_key: str | None = None + prediction: dict | None = None def __init__( self, + max_completion_tokens: int | None = None, max_tokens: int | None = None, response_format: dict | None = None, seed: int | None = None, - stop: str | None = None, + stop: str | list[str] | None = None, stream: bool | None = None, temperature: float | None = None, - top_p: int | None = None, - tool_choice: str | None = None, + top_p: float | None = None, + tool_choice: str | dict | None = None, tools: list | None = None, user: str | None = None, reasoning_effort: str | None = None, + parallel_tool_calls: bool | None = None, + logprobs: bool | None = None, + top_logprobs: int | None = None, + frequency_penalty: float | None = None, + presence_penalty: float | None = None, + logit_bias: dict | None = None, + service_tier: str | None = None, + prompt_cache_key: str | None = None, + prediction: dict | None = None, ) -> None: locals_: Final = locals().copy() for key, value in locals_.items(): @@ -70,6 +90,15 @@ class CerebrasConfig(OpenAIGPTConfig): "user", "max_retries", "extra_headers", + "parallel_tool_calls", + "logprobs", + "top_logprobs", + "frequency_penalty", + "presence_penalty", + "logit_bias", + "service_tier", + "prompt_cache_key", + "prediction", ] # Only add reasoning_effort for models that support it @@ -87,8 +116,6 @@ class CerebrasConfig(OpenAIGPTConfig): ) -> dict: supported_openai_params: Final = self.get_supported_openai_params(model=model) for param, value in non_default_params.items(): - if param == "max_completion_tokens": - optional_params["max_tokens"] = value - elif param in supported_openai_params: + if param in supported_openai_params: optional_params[param] = value return optional_params diff --git a/tests/llm_translation/test_cerebras.py b/tests/llm_translation/test_cerebras.py new file mode 100644 index 00000000000..15a500fb1e6 --- /dev/null +++ b/tests/llm_translation/test_cerebras.py @@ -0,0 +1,46 @@ +import pytest + +from litellm.llms.cerebras.chat import CerebrasConfig + + +@pytest.mark.parametrize( + ("parameter", "value"), + [ + ("max_completion_tokens", 64), + ("max_tokens", 32), + ("parallel_tool_calls", False), + ("logprobs", True), + ("top_logprobs", 3), + ("frequency_penalty", 0.2), + ("presence_penalty", 0.3), + ("logit_bias", {"42": -1}), + ("service_tier", "default"), + ("prompt_cache_key", "conversation-1"), + ("prediction", {"type": "content", "content": "expected"}), + ], +) +def test_cerebras_preserves_supported_parameters(parameter, value): + config = CerebrasConfig() + + mapped = config.map_openai_params( + non_default_params={parameter: value}, + optional_params={}, + model="gpt-oss-120b", + drop_params=False, + ) + + assert mapped == {parameter: value} + + +def test_cerebras_does_not_alias_max_completion_tokens(): + config = CerebrasConfig() + + mapped = config.map_openai_params( + non_default_params={"max_completion_tokens": 64}, + optional_params={}, + model="gpt-oss-120b", + drop_params=False, + ) + + assert mapped["max_completion_tokens"] == 64 + assert "max_tokens" not in mapped