From 41bdd865552c9b592e7ab1b77e453485d295238d Mon Sep 17 00:00:00 2001 From: Viktor Ivakin Date: Mon, 13 Oct 2025 16:25:29 +0300 Subject: [PATCH] Fix incomplete utf-8 characters in streaming text completions (#810) --- examples/server/server.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/examples/server/server.cpp b/examples/server/server.cpp index a6f5d38d..be396890 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -1968,7 +1968,9 @@ struct server_context { slot.generated_text.erase( slot.generated_text.begin() + pos + stop_pos, slot.generated_text.end()); - pos = std::min(slot.n_sent_text, slot.generated_text.size()); + // Update n_sent_text to not exceed the new generated_text size + slot.n_sent_text = std::min(slot.n_sent_text, slot.generated_text.size()); + pos = slot.n_sent_text; } else { is_stop_full = false; stop_pos = slot.find_stopping_strings(str_test, token_str.size(), false); @@ -1980,6 +1982,9 @@ struct server_context { result.text_to_send = slot.generated_text.substr(pos, std::string::npos); slot.n_sent_text += result.text_to_send.size(); // add the token to slot queue and cache + } else if (stop_pos != std::string::npos) { + // Handle partial stop - update n_sent_text to the end of the current text + slot.n_sent_text = slot.generated_text.size(); } slot.add_token_string(result);