From 1acee6bf8939948f9bcbf4b14034e4b475f06069 Mon Sep 17 00:00:00 2001 From: Aldehir Rojas Date: Fri, 22 May 2026 11:58:15 -0400 Subject: [PATCH] server: only parse empty msg if continuing an assistant msg (#23506) --- common/chat.h | 1 + tools/server/server-task.cpp | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/common/chat.h b/common/chat.h index 8ace3e6ba..b29c627e6 100644 --- a/common/chat.h +++ b/common/chat.h @@ -219,6 +219,7 @@ struct common_chat_parser_params { bool reasoning_in_content = false; std::string generation_prompt; bool parse_tool_calls = true; + bool is_continuation = false; bool echo = false; // Include assistant prefilled msg in output bool debug = false; // Enable debug output for PEG parser common_peg_arena parser = {}; diff --git a/tools/server/server-task.cpp b/tools/server/server-task.cpp index d45513dbe..abc00c82b 100644 --- a/tools/server/server-task.cpp +++ b/tools/server/server-task.cpp @@ -149,7 +149,7 @@ task_result_state::task_result_state(const common_chat_parser_params & chat_pars , oai_resp_id("resp_" + random_string()) , oai_resp_reasoning_id("rs_" + random_string()) , oai_resp_message_id("msg_" + random_string()) { - if (!chat_parser_params.echo) { + if (chat_parser_params.is_continuation && !chat_parser_params.echo) { // initialize chat_msg to avoid emitting a delta containing the assistant prefill chat_msg = common_chat_parse("", true, chat_parser_params); } @@ -432,6 +432,10 @@ task_params server_task::params_from_json_cmpl( if (data.contains("chat_parser")) { params.chat_parser_params.parser.load(data.at("chat_parser").get()); } + if (data.contains("continue_final_message")) { + auto continuation = common_chat_continuation_parse(data.at("continue_final_message")); + params.chat_parser_params.is_continuation = continuation != COMMON_CHAT_CONTINUATION_NONE; + } params.chat_parser_params.echo = json_value(data, "echo", false); }