Unverified Commit f49df565 authored by KrishnanPrash's avatar KrishnanPrash Committed by GitHub
Browse files

perf: avoid cloning content parts in gather_multi_modal_data (#8009)

parent 9b3e9249
...@@ -413,12 +413,14 @@ impl OpenAIPreprocessor { ...@@ -413,12 +413,14 @@ impl OpenAIPreprocessor {
formatted_prompt: Option<String>, formatted_prompt: Option<String>,
) -> Result<()> { ) -> Result<()> {
let mut media_map: MultimodalDataMap = HashMap::new(); let mut media_map: MultimodalDataMap = HashMap::new();
let mut fetch_tasks: Vec<(String, ChatCompletionRequestUserMessageContentPart)> = let mut fetch_tasks: Vec<(String, &ChatCompletionRequestUserMessageContentPart)> =
Vec::new(); Vec::new();
let Some(messages) = request.typed_messages() else { let Some(messages) = request.typed_messages() else {
return Ok(()); return Ok(());
}; };
let has_media_loader = self.media_loader.is_some();
for message in messages.iter() { for message in messages.iter() {
let content_parts = match message { let content_parts = match message {
ChatCompletionRequestMessage::User(u) => match &u.content { ChatCompletionRequestMessage::User(u) => match &u.content {
...@@ -427,31 +429,33 @@ impl OpenAIPreprocessor { ...@@ -427,31 +429,33 @@ impl OpenAIPreprocessor {
}, },
_ => continue, _ => continue,
}; };
// Iterate over content parts
for content_part in content_parts.iter() { for content_part in content_parts.iter() {
let (type_str, url) = match content_part { if has_media_loader {
ChatCompletionRequestUserMessageContentPart::ImageUrl(image_part) => { let type_str = match content_part {
("image_url".to_string(), image_part.image_url.url.clone()) ChatCompletionRequestUserMessageContentPart::ImageUrl(_) => "image_url",
} ChatCompletionRequestUserMessageContentPart::VideoUrl(_) => "video_url",
ChatCompletionRequestUserMessageContentPart::VideoUrl(video_part) => { ChatCompletionRequestUserMessageContentPart::AudioUrl(_) => "audio_url",
("video_url".to_string(), video_part.video_url.url.clone()) _ => continue,
} };
ChatCompletionRequestUserMessageContentPart::AudioUrl(audio_part) => { fetch_tasks.push((type_str.to_string(), content_part));
("audio_url".to_string(), audio_part.audio_url.url.clone()) } else {
} let (type_str, url) = match content_part {
_ => continue, ChatCompletionRequestUserMessageContentPart::ImageUrl(p) => {
}; ("image_url", p.image_url.url.clone())
}
if self.media_loader.is_some() { ChatCompletionRequestUserMessageContentPart::VideoUrl(p) => {
fetch_tasks.push((type_str, content_part.clone())); ("video_url", p.video_url.url.clone())
continue; }
ChatCompletionRequestUserMessageContentPart::AudioUrl(p) => {
("audio_url", p.audio_url.url.clone())
}
_ => continue,
};
media_map
.entry(type_str.to_string())
.or_default()
.push(MultimodalData::Url(url));
} }
//Fallback: ust pass the URL through
media_map
.entry(type_str)
.or_default()
.push(MultimodalData::Url(url));
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment