agent: Fix Mistral tool use error message (#34692)
Closes #32675 Exactly the same changes as in #33640 by @sviande The PR has been in WIP state for 3 weeks with no activity, and the issue basically makes Mistral models unusable. I have tested the changes locally, and it does indeed work. Full credit goes to @sviande, I just want this feature to be finished. Release Notes: - agent: Fixed an issue with tool calling with the Mistral provider (thanks [@sviande](https://github.com/sviande) and [@armyhaylenko](https://github.com/armyhaylenko)) Co-authored-by: sviande <sviande@gmail.com>
This commit is contained in:
parent
8da6604165
commit
44946231aa
1 changed files with 14 additions and 20 deletions
|
@ -410,8 +410,20 @@ pub fn into_mistral(
|
||||||
.push_part(mistral::MessagePart::Text { text: text.clone() });
|
.push_part(mistral::MessagePart::Text { text: text.clone() });
|
||||||
}
|
}
|
||||||
MessageContent::RedactedThinking(_) => {}
|
MessageContent::RedactedThinking(_) => {}
|
||||||
MessageContent::ToolUse(_) | MessageContent::ToolResult(_) => {
|
MessageContent::ToolUse(_) => {
|
||||||
// Tool content is not supported in User messages for Mistral
|
// Tool use is not supported in User messages for Mistral
|
||||||
|
}
|
||||||
|
MessageContent::ToolResult(tool_result) => {
|
||||||
|
let tool_content = match &tool_result.content {
|
||||||
|
LanguageModelToolResultContent::Text(text) => text.to_string(),
|
||||||
|
LanguageModelToolResultContent::Image(_) => {
|
||||||
|
"[Tool responded with an image, but Zed doesn't support these in Mistral models yet]".to_string()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
messages.push(mistral::RequestMessage::Tool {
|
||||||
|
content: tool_content,
|
||||||
|
tool_call_id: tool_result.tool_use_id.to_string(),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -482,24 +494,6 @@ pub fn into_mistral(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for message in &request.messages {
|
|
||||||
for content in &message.content {
|
|
||||||
if let MessageContent::ToolResult(tool_result) = content {
|
|
||||||
let content = match &tool_result.content {
|
|
||||||
LanguageModelToolResultContent::Text(text) => text.to_string(),
|
|
||||||
LanguageModelToolResultContent::Image(_) => {
|
|
||||||
"[Tool responded with an image, but Zed doesn't support these in Mistral models yet]".to_string()
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
messages.push(mistral::RequestMessage::Tool {
|
|
||||||
content,
|
|
||||||
tool_call_id: tool_result.tool_use_id.to_string(),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// The Mistral API requires that tool messages be followed by assistant messages,
|
// The Mistral API requires that tool messages be followed by assistant messages,
|
||||||
// not user messages. When we have a tool->user sequence in the conversation,
|
// not user messages. When we have a tool->user sequence in the conversation,
|
||||||
// we need to insert a placeholder assistant message to maintain proper conversation
|
// we need to insert a placeholder assistant message to maintain proper conversation
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue