forked from Karylab-cklius/vllm
[Rust Frontend] Fix DeepSeek V3.2 continue_final_message rendering (#45155)
Signed-off-by: reidliu41 <reid201711@gmail.com>
This commit is contained in:
@@ -49,6 +49,7 @@ pub(super) fn render_request(request: &ChatRequest) -> Result<String> {
|
||||
let last_user_render_index =
|
||||
find_last_user_render_index(request.messages.as_slice(), render_offset);
|
||||
let last_user_actual_index = find_last_user_actual_index(request.messages.as_slice());
|
||||
let continue_final_message = request.chat_options.continue_final_message();
|
||||
let mut prompt = String::from(BOS_TOKEN);
|
||||
|
||||
if request.tool_parsing_enabled() {
|
||||
@@ -66,6 +67,7 @@ pub(super) fn render_request(request: &ChatRequest) -> Result<String> {
|
||||
last_user_actual_index,
|
||||
thinking_mode,
|
||||
drop_thinking,
|
||||
continue_final_message,
|
||||
)?;
|
||||
}
|
||||
|
||||
@@ -96,6 +98,7 @@ fn render_message(
|
||||
last_user_actual_index: usize,
|
||||
thinking_mode: ThinkingMode,
|
||||
drop_thinking: bool,
|
||||
continue_final_message: bool,
|
||||
) -> Result<()> {
|
||||
let render_index = message_index as isize + render_offset;
|
||||
let opens_thinking = render_index == last_user_render_index;
|
||||
@@ -125,9 +128,7 @@ fn render_message(
|
||||
thinking_mode,
|
||||
drop_thinking,
|
||||
),
|
||||
// TODO: Respect `continue_final_message` and map it to DeepSeek's
|
||||
// prefix-style final-assistant continuation behavior.
|
||||
false,
|
||||
continue_final_message && message_index + 1 == messages.len(),
|
||||
),
|
||||
ChatMessage::ToolResponse { content, .. } => render_tool_message(
|
||||
out,
|
||||
|
||||
@@ -404,6 +404,24 @@ fn assistant_after_last_user_requires_reasoning_or_tool_calls() {
|
||||
expect!["chat template error: invalid DeepSeek V3.2 assistant message after last user message: expected reasoning or tool calls"]
|
||||
.assert_eq(&error.to_report_string());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn continue_final_assistant_omits_final_eos() {
|
||||
let mut request = ChatRequest {
|
||||
messages: vec![
|
||||
ChatMessage::user("write"),
|
||||
ChatMessage::assistant_text("partial answer"),
|
||||
],
|
||||
..ChatRequest::for_test()
|
||||
};
|
||||
request.chat_options.generation_prompt_mode = GenerationPromptMode::ContinueFinalAssistant;
|
||||
|
||||
let rendered = render_request(&request);
|
||||
|
||||
expect!["<|begin▁of▁sentence|><|User|>write<|Assistant|></think>partial answer"]
|
||||
.assert_eq(&rendered);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn render_rejects_multimodal_input() {
|
||||
let request = ChatRequest {
|
||||
|
||||
Reference in New Issue
Block a user