mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-06 02:48:13 +00:00
fix(bedrock): forward a non-string reasoning_effort on the native route instead of crashing
Some checks failed
LiteLLM Rust / rust-lint (push) Waiting to run
LiteLLM Rust / rust-test (push) Waiting to run
LiteLLM Rust / rust-wheel (push) Waiting to run
Terraform Provider / gofmt, vet, build, test (push) Has been cancelled
Terraform Provider / Provider endpoints vs proxy OpenAPI schema (push) Has been cancelled
Some checks failed
LiteLLM Rust / rust-lint (push) Waiting to run
LiteLLM Rust / rust-test (push) Waiting to run
LiteLLM Rust / rust-wheel (push) Waiting to run
Terraform Provider / gofmt, vet, build, test (push) Has been cancelled
Terraform Provider / Provider endpoints vs proxy OpenAPI schema (push) Has been cancelled
A list or dict reasoning_effort hit a frozenset membership test in without_refused_reasoning_effort and raised TypeError, which the proxy surfaced as a 500 APIConnectionError with no upstream call. The value is now left alone unless it is a string Bedrock's native endpoint refuses, so AWS answers the malformed value with its own 400 like it does for an int
This commit is contained in:
parent
19176f6754
commit
a0cef91f0b
2 changed files with 15 additions and 1 deletions
|
|
@ -108,7 +108,8 @@ def chat_completions_reasoning_efforts_refused_for(model: str) -> frozenset[str]
|
||||||
|
|
||||||
|
|
||||||
def without_refused_reasoning_effort(model: str, params: Mapping[str, object]) -> Mapping[str, object]:
|
def without_refused_reasoning_effort(model: str, params: Mapping[str, object]) -> Mapping[str, object]:
|
||||||
if params.get("reasoning_effort") not in chat_completions_reasoning_efforts_refused_for(model):
|
effort: Final = params.get("reasoning_effort")
|
||||||
|
if not isinstance(effort, str) or effort not in chat_completions_reasoning_efforts_refused_for(model):
|
||||||
return params
|
return params
|
||||||
return _without_params(params, frozenset(("reasoning_effort",)))
|
return _without_params(params, frozenset(("reasoning_effort",)))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -573,6 +573,19 @@ def test_map_openai_params_keeps_reasoning_effort_low_for_grok():
|
||||||
assert mapped["reasoning_effort"] == "low"
|
assert mapped["reasoning_effort"] == "low"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("model", ["us.xai.grok-4.6", "global.openai.gpt-5.6-sol"])
|
||||||
|
@pytest.mark.parametrize("reasoning_effort", [["low"], {"effort": "low"}, 5])
|
||||||
|
def test_map_openai_params_forwards_a_malformed_reasoning_effort_for_aws_to_refuse(model, reasoning_effort):
|
||||||
|
cfg = AmazonBedrockRuntimeChatCompletionsConfig()
|
||||||
|
mapped = cfg.map_openai_params(
|
||||||
|
non_default_params={"reasoning_effort": reasoning_effort, "max_tokens": 64},
|
||||||
|
optional_params={},
|
||||||
|
model=model,
|
||||||
|
drop_params=False,
|
||||||
|
)
|
||||||
|
assert mapped["reasoning_effort"] == reasoning_effort
|
||||||
|
|
||||||
|
|
||||||
def test_map_openai_params_keeps_reasoning_effort_none_for_gpt56():
|
def test_map_openai_params_keeps_reasoning_effort_none_for_gpt56():
|
||||||
cfg = AmazonBedrockRuntimeChatCompletionsConfig()
|
cfg = AmazonBedrockRuntimeChatCompletionsConfig()
|
||||||
mapped = cfg.map_openai_params(
|
mapped = cfg.map_openai_params(
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue