From d5a9022f45002127d7f85f56c4d16716719983b9 Mon Sep 17 00:00:00 2001 From: Yingjie He Date: Fri, 11 Apr 2025 16:02:37 -0700 Subject: [PATCH] fix: add default content for gemini tool response (#2169) --- crates/goose/src/providers/formats/google.rs | 45 +++++++++++++++----- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/crates/goose/src/providers/formats/google.rs b/crates/goose/src/providers/formats/google.rs index 10137f72..407f7cae 100644 --- a/crates/goose/src/providers/formats/google.rs +++ b/crates/goose/src/providers/formats/google.rs @@ -88,17 +88,16 @@ pub fn format_messages(messages: &[Message]) -> Vec { }) .collect::>() .join("\n"); - if !tool_content.is_empty() { - if text.is_empty() { - text = "Tool call is done.".to_string(); - } - parts.push(json!({ - "functionResponse": { - "name": response.id, - "response": {"content": {"text": text}}, - }} - )); + + if text.is_empty() { + text = "Tool call is done.".to_string(); } + parts.push(json!({ + "functionResponse": { + "name": response.id, + "response": {"content": {"text": text}}, + }} + )); } Err(e) => { parts.push(json!({"text":format!("Error: {}", e)})); @@ -584,4 +583,30 @@ mod tests { panic!("Expected valid tool request"); } } + + #[test] + fn test_response_to_message_with_empty_content() { + let tool_result: Vec = Vec::new(); + + let messages = vec![set_up_tool_response_message("response_id", tool_result)]; + let payload = format_messages(&messages); + + let expected_payload = vec![json!({ + "role": "model", + "parts": [ + { + "functionResponse": { + "name": "response_id", + "response": { + "content": { + "text": "Tool call is done." + } + } + } + } + ] + })]; + + assert_eq!(payload, expected_payload); + } }