fix: fliter tool confirmation request (#2198)

This commit is contained in:
Yingjie He
2025-04-15 09:29:05 -07:00
committed by GitHub
parent be4f2082c1
commit beb5d4a63e

View File

@@ -14,6 +14,12 @@ use serde_json::{json, Map, Value};
pub fn format_messages(messages: &[Message]) -> Vec<Value> { pub fn format_messages(messages: &[Message]) -> Vec<Value> {
messages messages
.iter() .iter()
.filter(|message| {
message
.content
.iter()
.any(|content| !matches!(content, MessageContent::ToolConfirmationRequest(_)))
})
.map(|message| { .map(|message| {
let role = if message.role == Role::User { let role = if message.role == Role::User {
"user" "user"
@@ -333,6 +339,19 @@ mod tests {
} }
} }
fn set_up_tool_confirmation_message(id: &str, tool_call: ToolCall) -> Message {
Message {
role: Role::User,
created: 0,
content: vec![MessageContent::tool_confirmation_request(
id.to_string(),
tool_call.name.clone(),
tool_call.arguments.clone(),
Some("Goose would like to call the above tool. Allow? (y/n):".to_string()),
)],
}
}
fn set_up_tool_response_message(id: &str, tool_response: Vec<Content>) -> Message { fn set_up_tool_response_message(id: &str, tool_response: Vec<Content>) -> Message {
Message { Message {
role: Role::Assistant, role: Role::Assistant,
@@ -389,10 +408,10 @@ mod tests {
let arguments = json!({ let arguments = json!({
"param1": "value1" "param1": "value1"
}); });
let messages = vec![set_up_tool_request_message( let messages = vec![
"id", set_up_tool_request_message("id", ToolCall::new("tool_name", json!(arguments))),
ToolCall::new("tool_name", json!(arguments)), set_up_tool_confirmation_message("id2", ToolCall::new("tool_name_2", json!(arguments))),
)]; ];
let payload = format_messages(&messages); let payload = format_messages(&messages);
assert_eq!(payload.len(), 1); assert_eq!(payload.len(), 1);
assert_eq!(payload[0]["role"], "user"); assert_eq!(payload[0]["role"], "user");