Unverified Commit 0f137de4 authored by milesial's avatar milesial Committed by GitHub
Browse files

feat: remove ser/deser in gather_multi_model_data (#5485)


Signed-off-by: default avatarAlexandre Milesi <milesial@users.noreply.github.com>
parent 34e58224
......@@ -294,31 +294,24 @@ impl OpenAIPreprocessor {
request: &R,
builder: &mut PreprocessedRequestBuilder,
) -> Result<()> {
let messages = request.messages();
let message_count = messages.len().unwrap_or(0);
let mut media_map: MultimodalDataMap = HashMap::new();
#[cfg(feature = "media-nixl")]
let mut fetch_tasks: Vec<(String, ChatCompletionRequestUserMessageContentPart)> =
Vec::new();
for idx in 0..message_count {
let msg = messages
.get_item_by_index(idx)
.map_err(|_| anyhow::Error::msg(format!("Cannot get message at index {idx}")))?;
let msg_json: serde_json::Value = serde_json::to_value(&msg)?;
let message: ChatCompletionRequestMessage = serde_json::from_value(msg_json)?;
let content_parts = match &message {
let Some(messages) = request.typed_messages() else {
return Ok(());
};
for message in messages.iter() {
let content_parts = match message {
ChatCompletionRequestMessage::User(u) => match &u.content {
ChatCompletionRequestUserMessageContent::Array(parts) => parts,
_ => continue,
},
_ => continue,
};
// Iterate over content parts
for content_part in content_parts {
for content_part in content_parts.iter() {
let (type_str, url) = match content_part {
ChatCompletionRequestUserMessageContentPart::ImageUrl(image_part) => {
("image_url".to_string(), image_part.image_url.url.clone())
......@@ -371,7 +364,7 @@ impl OpenAIPreprocessor {
// Preserve original messages in extra_args for multimodal workers that need them
// (e.g., TRT-LLM multimodal processor needs raw messages for proper tokenization)
let messages_json = serde_json::to_value(&messages)?;
let messages_json = serde_json::to_value(request.messages())?;
let extra_args = serde_json::json!({
"messages": messages_json
});
......
......@@ -52,6 +52,11 @@ pub enum PromptInput {
pub trait OAIChatLikeRequest {
fn model(&self) -> String;
fn messages(&self) -> Value;
fn typed_messages(
&self,
) -> Option<&[dynamo_async_openai::types::ChatCompletionRequestMessage]> {
None
}
fn tools(&self) -> Option<Value> {
None
}
......
......@@ -213,6 +213,12 @@ impl OAIChatLikeRequest for NvCreateChatCompletionRequest {
Value::from_serialize(&messages_json)
}
fn typed_messages(
&self,
) -> Option<&[dynamo_async_openai::types::ChatCompletionRequestMessage]> {
Some(self.inner.messages.as_slice())
}
fn tools(&self) -> Option<Value> {
if self.inner.tools.is_none() {
None
......
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