diff --git a/crates/copilot/src/copilot_chat.rs b/crates/copilot/src/copilot_chat.rs index 19cff56c911b2d85f91b5075f238f8320f846e3f..b1fa1565f30ed79fdff763964708fe01c62d023f 100644 --- a/crates/copilot/src/copilot_chat.rs +++ b/crates/copilot/src/copilot_chat.rs @@ -698,16 +698,16 @@ async fn stream_completion( completion_url: Arc, request: Request, ) -> Result>> { - let is_vision_request = request.messages.last().map_or(false, |message| match message { - ChatMessage::User { content } - | ChatMessage::Assistant { content, .. } - | ChatMessage::Tool { content, .. } => { - matches!(content, ChatMessageContent::Multipart(parts) if parts.iter().any(|part| matches!(part, ChatMessagePart::Image { .. }))) - } - _ => false, - }); - - let request_builder = HttpRequest::builder() + let is_vision_request = request.messages.iter().any(|message| match message { + ChatMessage::User { content } + | ChatMessage::Assistant { content, .. } + | ChatMessage::Tool { content, .. } => { + matches!(content, ChatMessageContent::Multipart(parts) if parts.iter().any(|part| matches!(part, ChatMessagePart::Image { .. }))) + } + _ => false, + }); + + let mut request_builder = HttpRequest::builder() .method(Method::POST) .uri(completion_url.as_ref()) .header( @@ -719,8 +719,12 @@ async fn stream_completion( ) .header("Authorization", format!("Bearer {}", api_key)) .header("Content-Type", "application/json") - .header("Copilot-Integration-Id", "vscode-chat") - .header("Copilot-Vision-Request", is_vision_request.to_string()); + .header("Copilot-Integration-Id", "vscode-chat"); + + if is_vision_request { + request_builder = + request_builder.header("Copilot-Vision-Request", is_vision_request.to_string()); + } let is_streaming = request.stream;