From: Benni Date: Sat, 20 Sep 2025 05:56:30 +0000 (+0200) Subject: server: fix SSE and OpenAI compatibility for error messages when streaming (#16109) X-Git-Tag: upstream/0.0.6527~4 X-Git-Url: https://git.djapps.eu/?a=commitdiff_plain;h=459c0c2c1a400f960d7b8e8d94d31a8426f80986;p=pkg%2Fggml%2Fsources%2Fllama.cpp server: fix SSE and OpenAI compatibility for error messages when streaming (#16109) * server: fix SSE and OpenAI compatibility for error messages when streaming * server: remove obsolete event parameter and use required data fieldname instead --- diff --git a/tools/server/server.cpp b/tools/server/server.cpp index c0ffe176..d6072e5e 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -4679,17 +4679,17 @@ int main(int argc, char ** argv) { json res_json = result->to_json(); if (res_json.is_array()) { for (const auto & res : res_json) { - if (!server_sent_event(sink, "data", res)) { + if (!server_sent_event(sink, res)) { // sending failed (HTTP connection closed), cancel the generation return false; } } return true; } else { - return server_sent_event(sink, "data", res_json); + return server_sent_event(sink, res_json); } }, [&](const json & error_data) { - server_sent_event(sink, "error", error_data); + server_sent_event(sink, json{{"error", error_data}}); }, [&sink]() { // note: do not use req.is_connection_closed here because req is already destroyed return !sink.is_writable(); diff --git a/tools/server/utils.hpp b/tools/server/utils.hpp index 85fe25e0..64d70293 100644 --- a/tools/server/utils.hpp +++ b/tools/server/utils.hpp @@ -459,9 +459,9 @@ static std::string tokens_to_output_formatted_string(const llama_context * ctx, return out; } -static bool server_sent_event(httplib::DataSink & sink, const char * event, const json & data) { +static bool server_sent_event(httplib::DataSink & sink, const json & data) { const std::string str = - std::string(event) + ": " + + "data: " + data.dump(-1, ' ', false, json::error_handler_t::replace) + "\n\n"; // required by RFC 8895 - A message is terminated by a blank line (two line terminators in a row).