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