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 {
formatted_prompt: Option<String>,
) -> Result<()> {
let mut media_map: MultimodalDataMap = HashMap::new();
let mut fetch_tasks: Vec<(String, ChatCompletionRequestUserMessageContentPart)> =
let mut fetch_tasks: Vec<(String, &ChatCompletionRequestUserMessageContentPart)> =
Vec::new();
let Some(messages) = request.typed_messages() else {
return Ok(());
};
let has_media_loader = self.media_loader.is_some();
for message in messages.iter() {
let content_parts = match message {
ChatCompletionRequestMessage::User(u) => match &u.content {
......@@ -427,33 +429,35 @@ impl OpenAIPreprocessor {
},
_ => continue,
};
// Iterate over content parts
for content_part in content_parts.iter() {
if has_media_loader {
let type_str = match content_part {
ChatCompletionRequestUserMessageContentPart::ImageUrl(_) => "image_url",
ChatCompletionRequestUserMessageContentPart::VideoUrl(_) => "video_url",
ChatCompletionRequestUserMessageContentPart::AudioUrl(_) => "audio_url",
_ => continue,
};
fetch_tasks.push((type_str.to_string(), content_part));
} else {
let (type_str, url) = match content_part {
ChatCompletionRequestUserMessageContentPart::ImageUrl(image_part) => {
("image_url".to_string(), image_part.image_url.url.clone())
ChatCompletionRequestUserMessageContentPart::ImageUrl(p) => {
("image_url", p.image_url.url.clone())
}
ChatCompletionRequestUserMessageContentPart::VideoUrl(video_part) => {
("video_url".to_string(), video_part.video_url.url.clone())
ChatCompletionRequestUserMessageContentPart::VideoUrl(p) => {
("video_url", p.video_url.url.clone())
}
ChatCompletionRequestUserMessageContentPart::AudioUrl(audio_part) => {
("audio_url".to_string(), audio_part.audio_url.url.clone())
ChatCompletionRequestUserMessageContentPart::AudioUrl(p) => {
("audio_url", p.audio_url.url.clone())
}
_ => continue,
};
if self.media_loader.is_some() {
fetch_tasks.push((type_str, content_part.clone()));
continue;
}
//Fallback: ust pass the URL through
media_map
.entry(type_str)
.entry(type_str.to_string())
.or_default()
.push(MultimodalData::Url(url));
}
}
}
// Execute all fetch tasks
if !fetch_tasks.is_empty() {
......
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