From b7b700e4f7fc10b5ac8b8cb22e382977eb41ff22 Mon Sep 17 00:00:00 2001 From: "gcp-cherry-pick-bot[bot]" <98988430+gcp-cherry-pick-bot[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 16:18:28 -0500 Subject: [PATCH] language_models: Remove `.unwrap`s in Bedrock provider (cherry-pick #26238) (#26241) Cherry-picked language_models: Remove `.unwrap`s in Bedrock provider (#26238) This PR removes a number of `.unwrap`s in the Bedrock provider. We must not `.unwrap` in situations where it is not provably safe to do so, which it was not in any of these cases. Release Notes: - Fixed some potential panics in the AWS Bedrock model provider. Co-authored-by: Marshall Bowers --- .../language_models/src/provider/bedrock.rs | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/crates/language_models/src/provider/bedrock.rs b/crates/language_models/src/provider/bedrock.rs index 99453386e34766aec957be39cd682e3470a55b1c..ca0495a28f846fa50b8c4594a6e3ff506f40c474 100644 --- a/crates/language_models/src/provider/bedrock.rs +++ b/crates/language_models/src/provider/bedrock.rs @@ -400,7 +400,7 @@ impl LanguageModel for BedrockModel { let request = self.stream_completion(request, cx); let future = self.request_limiter.stream(async move { - let response = request.map_err(|e| anyhow!(e)).unwrap().await; + let response = request.map_err(|err| anyhow!(err))?.await; Ok(map_to_language_model_completion_events( response, owned_handle, @@ -424,26 +424,28 @@ impl LanguageModel for BedrockModel { self.model.max_output_tokens(), ); - request.tool_choice = Some(BedrockToolChoice::Tool( - BedrockSpecificTool::builder() - .name(name.clone()) - .build() - .unwrap(), - )); + request.tool_choice = BedrockSpecificTool::builder() + .name(name.clone()) + .build() + .log_err() + .map(BedrockToolChoice::Tool); - request.tools = vec![BedrockTool::builder() + if let Some(tool) = BedrockTool::builder() .name(name.clone()) .description(description.clone()) .input_schema(BedrockToolInputSchema::Json(value_to_aws_document(&schema))) .build() - .unwrap()]; + .log_err() + { + request.tools.push(tool); + } let handle = self.handler.clone(); let request = self.stream_completion(request, _cx); self.request_limiter .run(async move { - let response = request.map_err(|e| anyhow!(e)).unwrap().await; + let response = request.map_err(|err| anyhow!(err))?.await; Ok(extract_tool_args_from_events(name, response, handle) .await? .boxed()) @@ -757,7 +759,8 @@ pub fn map_to_language_model_completion_events( None }) .await - .unwrap() + .log_err() + .flatten() } }, )