fix(google): add MessageContent::Image support for user messages (#6986)

This commit is contained in:
Rizel Scarlett
2026-02-05 11:41:59 -05:00
committed by GitHub
parent 2e2462a23d
commit b4e5d64c69
@@ -182,6 +182,14 @@ pub fn format_messages(messages: &[Message]) -> Vec<Value> {
}
parts.push(json!(part));
}
MessageContent::Image(image) => {
parts.push(json!({
"inline_data": {
"mime_type": image.mime_type,
"data": image.data,
}
}));
}
_ => {}
}
@@ -719,6 +727,38 @@ mod tests {
assert_eq!(payload[1]["parts"][0]["text"], "World");
}
#[test]
fn test_message_to_google_spec_image_message() {
use rmcp::model::{AnnotateAble, RawImageContent};
let image = RawImageContent {
mime_type: "image/png".to_string(),
data: "base64encodeddata".to_string(),
meta: None,
};
let messages = vec![Message::new(
Role::User,
0,
vec![
MessageContent::text("What is in this image?".to_string()),
MessageContent::Image(image.no_annotation()),
],
)];
let payload = format_messages(&messages);
assert_eq!(payload.len(), 1);
assert_eq!(payload[0]["role"], "user");
assert_eq!(payload[0]["parts"][0]["text"], "What is in this image?");
assert_eq!(
payload[0]["parts"][1]["inline_data"]["mime_type"],
"image/png"
);
assert_eq!(
payload[0]["parts"][1]["inline_data"]["data"],
"base64encodeddata"
);
}
#[test]
fn test_message_to_google_spec_tool_request_message() {
let arguments = json!({