From c6ff58675f79d7846c7a2f4cd7518c872032bf1f Mon Sep 17 00:00:00 2001 From: Vladimir Kuznichenkov <5330267+kuzaxak@users.noreply.github.com> Date: Wed, 25 Jun 2025 14:28:36 +0300 Subject: [PATCH] bedrock: Fix empty tool input on project diagnostic in bedrock (#33369) Bedrock [do not accept][1] `null` as a JSON value input for the tool call when called back. Instead of passing null, we will pass back an empty object, which is accepted by API Closes #33204 Release Notes: - Fixed project diagnostic tool call for bedrock [1]: https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolUseBlock.html --- .../language_models/src/provider/bedrock.rs | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/crates/language_models/src/provider/bedrock.rs b/crates/language_models/src/provider/bedrock.rs index f0e644721e7f058525129e0fc216a3d21aea4729..e305569ce27b31285aa04077cc7cb35d96836477 100644 --- a/crates/language_models/src/provider/bedrock.rs +++ b/crates/language_models/src/provider/bedrock.rs @@ -648,14 +648,22 @@ pub fn into_bedrock( Some(BedrockInnerContent::ReasoningContent(redacted)) } - MessageContent::ToolUse(tool_use) => BedrockToolUseBlock::builder() - .name(tool_use.name.to_string()) - .tool_use_id(tool_use.id.to_string()) - .input(value_to_aws_document(&tool_use.input)) - .build() - .context("failed to build Bedrock tool use block") - .log_err() - .map(BedrockInnerContent::ToolUse), + MessageContent::ToolUse(tool_use) => { + let input = if tool_use.input.is_null() { + // Bedrock API requires valid JsonValue, not null, for tool use input + value_to_aws_document(&serde_json::json!({})) + } else { + value_to_aws_document(&tool_use.input) + }; + BedrockToolUseBlock::builder() + .name(tool_use.name.to_string()) + .tool_use_id(tool_use.id.to_string()) + .input(input) + .build() + .context("failed to build Bedrock tool use block") + .log_err() + .map(BedrockInnerContent::ToolUse) + }, MessageContent::ToolResult(tool_result) => { BedrockToolResultBlock::builder() .tool_use_id(tool_result.tool_use_id.to_string())