From 2c4d376d235e9fb75977da953c1e394a9a222ec5 Mon Sep 17 00:00:00 2001 From: Jimmy <29097382+jimmy-evo@users.noreply.github.com> Date: Fri, 12 Dec 2025 00:09:09 +0800 Subject: [PATCH] [SMG][DS32][fix] support dsv32, add role developer (#14307) --- sgl-model-gateway/src/protocols/chat.rs | 21 +++++++++++-------- .../src/routers/grpc/harmony/builder.rs | 20 ++++++++++++++++++ .../src/routers/http/pd_router.rs | 4 ++++ 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/sgl-model-gateway/src/protocols/chat.rs b/sgl-model-gateway/src/protocols/chat.rs index 33dbf668b..0a0900165 100644 --- a/sgl-model-gateway/src/protocols/chat.rs +++ b/sgl-model-gateway/src/protocols/chat.rs @@ -56,6 +56,14 @@ pub enum ChatMessage { }, #[serde(rename = "function")] Function { content: String, name: String }, + #[serde(rename = "developer")] + Developer { + content: MessageContent, + #[serde(skip_serializing_if = "Option::is_none")] + tools: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + name: Option, + }, } #[derive(Debug, Clone, Deserialize, Serialize, PartialEq)] @@ -638,7 +646,10 @@ impl GenerationRequest for ChatCompletionRequest { for msg in &self.messages { match msg { - ChatMessage::System { content, .. } | ChatMessage::User { content, .. } => { + ChatMessage::System { content, .. } + | ChatMessage::User { content, .. } + | ChatMessage::Tool { content, .. } + | ChatMessage::Developer { content, .. } => { if has_content && content.has_text() { buffer.push(' '); } @@ -671,14 +682,6 @@ impl GenerationRequest for ChatCompletionRequest { } } } - ChatMessage::Tool { content, .. } => { - if has_content && content.has_text() { - buffer.push(' '); - } - if content.append_text_to(&mut buffer) { - has_content = true; - } - } ChatMessage::Function { content, .. } => { if !content.is_empty() { if has_content { diff --git a/sgl-model-gateway/src/routers/grpc/harmony/builder.rs b/sgl-model-gateway/src/routers/grpc/harmony/builder.rs index d51da4ed9..4939524c8 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/builder.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/builder.rs @@ -711,6 +711,26 @@ impl HarmonyBuilder { }; harmony_messages.push(harmony_msg); } + ChatMessage::Developer { + content, + name, + tools: _, + } => { + // Developer messages stay as-is + let harmony_msg = HarmonyMessage { + author: Author { + role: Role::Developer, + name: name.clone(), + }, + recipient: None, + content: vec![Content::Text(TextContent { + text: content.to_simple_string(), + })], + channel: None, + content_type: None, + }; + harmony_messages.push(harmony_msg); + } ChatMessage::User { content, name } => { // Extract text from user content diff --git a/sgl-model-gateway/src/routers/http/pd_router.rs b/sgl-model-gateway/src/routers/http/pd_router.rs index 09e5b65d3..534755918 100644 --- a/sgl-model-gateway/src/routers/http/pd_router.rs +++ b/sgl-model-gateway/src/routers/http/pd_router.rs @@ -1132,6 +1132,10 @@ impl RouterTrait for PDRouter { MessageContent::Text(text) => Some(text.clone()), MessageContent::Parts(_) => None, }, + ChatMessage::Developer { content, .. } => match content { + MessageContent::Text(text) => Some(text.clone()), + MessageContent::Parts(_) => None, + }, ChatMessage::System { content, .. } => Some(content.to_simple_string()), _ => None, })