Fix/GitHub copilot error handling 5845 (#6771)
Signed-off-by: albina-popova <97168987+albina-popova@users.noreply.github.com> Co-authored-by: albina-popova <97168987+albina-popova@users.noreply.github.com> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: Douwe Osinga <douwe@squareup.com>
This commit is contained in:
@@ -72,10 +72,14 @@ pub fn format_messages(messages: &[Message], image_format: &ImageFormat) -> Vec<
|
|||||||
match content {
|
match content {
|
||||||
MessageContent::Text(text) => {
|
MessageContent::Text(text) => {
|
||||||
if !text.text.is_empty() {
|
if !text.text.is_empty() {
|
||||||
if let Some(image_path) = detect_image_path(&text.text) {
|
if message.role == Role::User {
|
||||||
if let Ok(image) = load_image_file(image_path) {
|
if let Some(image_path) = detect_image_path(&text.text) {
|
||||||
content_array.push(json!({"type": "text", "text": text.text}));
|
if let Ok(image) = load_image_file(image_path) {
|
||||||
content_array.push(convert_image(&image, image_format));
|
content_array.push(json!({"type": "text", "text": text.text}));
|
||||||
|
content_array.push(convert_image(&image, image_format));
|
||||||
|
} else {
|
||||||
|
text_array.push(text.text.clone());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
text_array.push(text.text.clone());
|
text_array.push(text.text.clone());
|
||||||
}
|
}
|
||||||
@@ -204,7 +208,14 @@ pub fn format_messages(messages: &[Message], image_format: &ImageFormat) -> Vec<
|
|||||||
MessageContent::ToolConfirmationRequest(_) => {}
|
MessageContent::ToolConfirmationRequest(_) => {}
|
||||||
MessageContent::ActionRequired(_) => {}
|
MessageContent::ActionRequired(_) => {}
|
||||||
MessageContent::Image(image) => {
|
MessageContent::Image(image) => {
|
||||||
content_array.push(convert_image(image, image_format));
|
if message.role == Role::User {
|
||||||
|
content_array.push(convert_image(image, image_format));
|
||||||
|
} else {
|
||||||
|
content_array.push(json!({
|
||||||
|
"type": "text",
|
||||||
|
"text": "[Image content removed - not supported in assistant messages]"
|
||||||
|
}));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
MessageContent::FrontendToolRequest(request) => match &request.tool_call {
|
MessageContent::FrontendToolRequest(request) => match &request.tool_call {
|
||||||
Ok(tool_call) => {
|
Ok(tool_call) => {
|
||||||
@@ -1031,9 +1042,9 @@ mod tests {
|
|||||||
std::fs::write(&png_path, png_data)?;
|
std::fs::write(&png_path, png_data)?;
|
||||||
let png_path_str = png_path.to_str().unwrap();
|
let png_path_str = png_path.to_str().unwrap();
|
||||||
|
|
||||||
// Create message with image path
|
// Create user message with image path - should load the image
|
||||||
let message = Message::user().with_text(format!("Here is an image: {}", png_path_str));
|
let user_message = Message::user().with_text(format!("Here is an image: {}", png_path_str));
|
||||||
let spec = format_messages(&[message], &ImageFormat::OpenAi);
|
let spec = format_messages(&[user_message], &ImageFormat::OpenAi);
|
||||||
|
|
||||||
assert_eq!(spec.len(), 1);
|
assert_eq!(spec.len(), 1);
|
||||||
assert_eq!(spec[0]["role"], "user");
|
assert_eq!(spec[0]["role"], "user");
|
||||||
@@ -1049,6 +1060,22 @@ mod tests {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
.starts_with("data:image/png;base64,"));
|
.starts_with("data:image/png;base64,"));
|
||||||
|
|
||||||
|
// Create assistant message with same text - should NOT load the image
|
||||||
|
let assistant_message =
|
||||||
|
Message::assistant().with_text(format!("I saved the output to {}", png_path_str));
|
||||||
|
let spec = format_messages(&[assistant_message], &ImageFormat::OpenAi);
|
||||||
|
|
||||||
|
assert_eq!(spec.len(), 1);
|
||||||
|
assert_eq!(spec[0]["role"], "assistant");
|
||||||
|
|
||||||
|
// Content should be plain text, NOT an array with image
|
||||||
|
let content = spec[0]["content"].as_str();
|
||||||
|
assert!(
|
||||||
|
content.is_some(),
|
||||||
|
"Assistant message content should be a string, not an array with image"
|
||||||
|
);
|
||||||
|
assert!(content.unwrap().contains(png_path_str));
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user