fix(bedrock): strip client_metadata from additionalModelRequestFields

Responses API clients (e.g. Codex CLI) send a `client_metadata` field in
the request body. This leaks through kwargs into Bedrock's
`additionalModelRequestFields`, causing a 400 error:
`client_metadata: Extra inputs are not permitted`.

Strip it in `_prepare_request_params`, following the same pattern used
for `parallel_tool_calls`.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
FelixLyl 2026-04-21 20:37:46 +08:00 committed by yanlong.lin
parent 26fcbc93e5
commit bb131c86c2
2 changed files with 22 additions and 0 deletions

View file

@ -1249,6 +1249,8 @@ class AmazonConverseConfig(BaseConfig):
additional_request_params
)
additional_request_params.pop("client_metadata", None)
return (
inference_params,
additional_request_params,

View file

@ -4146,3 +4146,23 @@ def test_transform_response_finish_reason_stop_when_json_mode_filters_all_tools(
# finish_reason must be "stop", not "tool_calls"
assert result.choices[0].finish_reason == "stop"
def test_client_metadata_not_in_additional_model_request_fields():
"""client_metadata from Responses API clients (e.g. Codex) must not leak into additionalModelRequestFields."""
config = AmazonConverseConfig()
model = "anthropic.claude-sonnet-4-5-20250929-v1:0"
messages = [{"role": "user", "content": "Hello"}]
optional_params = {"client_metadata": {"client": "codex", "version": "0.121.0"}}
request_data = config.transform_request(
model=model,
messages=messages,
optional_params=optional_params,
litellm_params={},
headers={},
)
additional = request_data.get("additionalModelRequestFields", {})
assert "client_metadata" not in additional