diff --git a/src/client/bedrock.rs b/src/client/bedrock.rs index 1b978de..2f1afe3 100644 --- a/src/client/bedrock.rs +++ b/src/client/bedrock.rs @@ -1,3 +1,5 @@ +use std::mem; + use super::*; use crate::utils::{base64_decode, encode_uri, hex_encode, hmac_sha256, sha256, strip_think_tag}; @@ -275,10 +277,11 @@ async fn chat_completions_streaming( format!("Tool call '{function_name}' has non-JSON arguments '{function_arguments}'") })?; handler.tool_call(ToolCall::new( - function_name.clone(), + mem::take(&mut function_name), arguments, - Some(function_id.clone()), + Some(mem::take(&mut function_id)), ))?; + function_arguments.clear(); } } _ => {} @@ -529,7 +532,11 @@ fn extract_chat_completions(data: &Value) -> Result { bail!("Invalid response data: {data}"); } - let output = ChatCompletionsOutput { text, tool_calls, ..Default::default() }; + let output = ChatCompletionsOutput { + text, + tool_calls, + ..Default::default() + }; Ok(output) } diff --git a/src/client/claude.rs b/src/client/claude.rs index f9854c8..c927fa4 100644 --- a/src/client/claude.rs +++ b/src/client/claude.rs @@ -1,3 +1,5 @@ +use std::mem; + use super::access_token::get_access_token; use super::claude_oauth::ClaudeOAuthProvider; use super::oauth::{self, OAuthProvider}; @@ -232,8 +234,8 @@ pub async fn claude_chat_completions_streaming( handler.text("\n\n\n")?; reasoning_state = 0; handler.thinking_block(ThinkingBlock::Thinking { - thinking: std::mem::take(&mut thinking_text), - signature: std::mem::take(&mut thinking_signature), + thinking: mem::take(&mut thinking_text), + signature: mem::take(&mut thinking_signature), }); } if !function_name.is_empty() { @@ -245,10 +247,11 @@ pub async fn claude_chat_completions_streaming( })? }; handler.tool_call(ToolCall::new( - function_name.clone(), + mem::take(&mut function_name), arguments, - Some(function_id.clone()), + Some(mem::take(&mut function_id)), ))?; + function_arguments.clear(); } } _ => {}