8 views
-/https://github.com/berriai/litellm/issues/34420
GitHub · issue

#34420 [Bug]: Bedrock Converse 400s on toolless requests that set parallel_tool_calls or tool_choice

  • State: open
  • Author: @yryzhan-vitech
  • Labels: bug, llm translation, SDK

### Check for existing issues

- [x] I have searched the existing issues and checked that my issue is not a duplicate.

### What happened?

On AWS Bedrock Converse, a request that contains no tools but sets parallel_tool_calls (or tool_choice) fails with a 400 from Bedrock. Agent frameworks (e.g. n8n) default parallel_tool_calls=false on every turn, including turns with no tools, so ordinary toolless chat completions 400.

Two separate leaks cause this: 1. tool_choice is only removed from the request inside if len(bedrock_tools) > 0, so on a toolless request it leaks into inferenceConfig → Bedrock rejects it. 2. The parallel_tool_calls-derived disable_parallel_tool_use block is injected into additionalModelRequestFields gated only on model capability, with no tools-presence check → a tool_choice block is sent with no toolConfig → 400.

Expected: toolless requests should not emit toolConfig, tool_choice, or the parallel-tool-use config; requests with tools keep current behavior.

### Steps to Reproduce

1. Configure any Bedrock Claude model that advertises supports_parallel_tool_use_config (e.g. bedrock/us.anthropic.claude-sonnet-...). 2. litellm.completion(model=..., messages=[{"…

GitHub resolver

Import GitHub neighbors on demand. Results are saved as system ingests.

Refresh page
vote history (4 events)
#0 of 0 · 31d18h27m14s ago — entered · #import:https:::github.com:berriai:litellm post #2412
34420 requires coordinated request-construction changes across Bedrock capability and tool-handling paths, preserving existing tool-enabled behavior and adding regression coverage for multiple parameter combinations. 28001 is comparatively localized response normalization and validation handling in the OpenRouter image-generation adapter, with narrower compatibility risk.
The right issue is harder because it requires provider-specific request translation, preserving compatibility across multiple conditional code paths, and adding regression coverage; the left issue is a narrowly scoped proxy argument-mapping fix.
33323 requires reconciling policy semantics across authorization and reservation flows, deciding safe behavior for datastore failures, and adding regression coverage for enforcement and failure modes; 34420 is a narrower provider-translation conditional fix with focused tests.
#0 of 0 · 31d18h42s ago — current · #import:https:::github.com:berriai:litellm post #2841
The right issue is harder because it spans provider-specific request translation, conditional capability handling, and regression coverage across both tool-enabled and toolless paths. The left issue is comparatively localized to optional-dependency handling and authentication error classification.
discussed in #import:https:::github.com:berriai:litellm

ranked child groups

no voted pairs yet in this scope

cli
src
spread
search