diff options
| author | sigoden <sigoden@gmail.com> | 2024-11-13 18:24:43 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-13 18:24:43 +0800 |
| commit | ff0ea19b48a18e9a1849bd2a653173a3ed4e4560 (patch) | |
| tree | b8a8b9d15639649f2fa6e7dc72adcfae770bfc4e /src/client | |
| parent | 163ab626cd2b8875161b2598e9400df201eacaa8 (diff) | |
| download | aichat-ff0ea19b48a18e9a1849bd2a653173a3ed4e4560.tar.gz | |
fix: invalid request on qianwen multi tool-calls (#993)
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/bedrock.rs | 5 | ||||
| -rw-r--r-- | src/client/claude.rs | 5 | ||||
| -rw-r--r-- | src/client/cohere.rs | 4 | ||||
| -rw-r--r-- | src/client/ernie.rs | 4 | ||||
| -rw-r--r-- | src/client/openai.rs | 9 | ||||
| -rw-r--r-- | src/client/vertexai.rs | 3 |
6 files changed, 21 insertions, 9 deletions
diff --git a/src/client/bedrock.rs b/src/client/bedrock.rs index f7b3019..e1d6c65 100644 --- a/src/client/bedrock.rs +++ b/src/client/bedrock.rs @@ -363,7 +363,10 @@ fn build_chat_completions_body(data: ChatCompletionsData, model: &Model) -> Resu "content": content, })] } - MessageContent::ToolResults((tool_results, text)) => { + MessageContent::ToolResults(results) => { + let ToolResults { + tool_results, text, .. + } = results; let mut assistant_parts = vec![]; let mut user_parts = vec![]; if !text.is_empty() { diff --git a/src/client/claude.rs b/src/client/claude.rs index 7b472a7..0c905b1 100644 --- a/src/client/claude.rs +++ b/src/client/claude.rs @@ -202,7 +202,10 @@ pub fn claude_build_chat_completions_body( "content": content, })] } - MessageContent::ToolResults((tool_results, text)) => { + MessageContent::ToolResults(results) => { + let ToolResults { + tool_results, text, .. + } = results; let mut assistant_parts = vec![]; let mut user_parts = vec![]; if !text.is_empty() { diff --git a/src/client/cohere.rs b/src/client/cohere.rs index f471e7a..c5a31f5 100644 --- a/src/client/cohere.rs +++ b/src/client/cohere.rs @@ -213,8 +213,8 @@ fn build_chat_completions_body(data: ChatCompletionsData, model: &Model) -> Resu .collect(); Some(json!({ "role": role, "message": list.join("\n\n") })) } - MessageContent::ToolResults((results, _)) => { - tool_results = Some(results); + MessageContent::ToolResults(results) => { + tool_results = Some(results.tool_results); None } } diff --git a/src/client/ernie.rs b/src/client/ernie.rs index d7f1ffb..0c325e5 100644 --- a/src/client/ernie.rs +++ b/src/client/ernie.rs @@ -231,9 +231,9 @@ fn build_chat_completions_body(data: ChatCompletionsData, model: &Model) -> Valu .flat_map(|message| { let Message { role, content } = message; match content { - MessageContent::ToolResults((tool_results, _)) => { + MessageContent::ToolResults(results) => { let mut list = vec![]; - for tool_result in tool_results { + for tool_result in results.tool_results { list.push(json!({ "role": "assistant", "content": format!("Action: {}\nAction Input: {}", tool_result.call.name, tool_result.call.arguments) diff --git a/src/client/openai.rs b/src/client/openai.rs index c4c2b0c..0f01e36 100644 --- a/src/client/openai.rs +++ b/src/client/openai.rs @@ -205,8 +205,13 @@ pub fn openai_build_chat_completions_body(data: ChatCompletionsData, model: &Mod .flat_map(|message| { let Message { role, content } = message; match content { - MessageContent::ToolResults((tool_results, text)) => { - if let Some(true) = tool_results.first().map(|v| v.call.id.is_some()) { + MessageContent::ToolResults(results) => { + let ToolResults { + tool_results, + text, + sequence, + } = results; + if !sequence { let tool_calls: Vec<_> = tool_results.iter().map(|tool_result| { json!({ "id": tool_result.call.id, diff --git a/src/client/vertexai.rs b/src/client/vertexai.rs index 7ba205e..452eb09 100644 --- a/src/client/vertexai.rs +++ b/src/client/vertexai.rs @@ -342,7 +342,8 @@ pub fn gemini_build_chat_completions_body( .collect(); vec![json!({ "role": role, "parts": parts })] }, - MessageContent::ToolResults((tool_results, _)) => { + MessageContent::ToolResults(results) => { + let tool_results = results.tool_results; let model_parts: Vec<Value> = tool_results.iter().map(|tool_result| { json!({ "functionCall": { |
