]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
server: fix SSE and OpenAI compatibility for error messages when streaming (#16109)
authorBenni <redacted>
Sat, 20 Sep 2025 05:56:30 +0000 (07:56 +0200)
committerGitHub <redacted>
Sat, 20 Sep 2025 05:56:30 +0000 (07:56 +0200)
* server: fix SSE and OpenAI compatibility for error messages when streaming

* server: remove obsolete event parameter and use required data fieldname instead

tools/server/server.cpp
tools/server/utils.hpp

index c0ffe17692ddf934fa912e4a107e748e7bb2fa0d..d6072e5ece266a14bd49fa3b0241800324147513 100644 (file)
@@ -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();
index 85fe25e0085fb676c4e2bb36e384e784a0de6bab..64d702930ce96a2cb18595e8d4d0cab057c37455 100644 (file)
@@ -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).