From 7e59745dfc13abe8e70aafaa7857da769a245d4d Mon Sep 17 00:00:00 2001 From: unknown <92774204+nai-degen@users.noreply.github.com> Date: Fri, 19 May 2023 03:17:42 -0500 Subject: [PATCH] buffers partial SSE messages from Readable --- public/scripts/openai.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/public/scripts/openai.js b/public/scripts/openai.js index e8053b44a..82a0c7849 100644 --- a/public/scripts/openai.js +++ b/public/scripts/openai.js @@ -555,13 +555,19 @@ async function sendOpenAIRequest(type, openai_msgs_tosend, signal) { const decoder = new TextDecoder(); const reader = response.body.getReader(); let getMessage = ""; + let messageBuffer = ""; while (true) { const { done, value } = await reader.read(); let response = decoder.decode(value); tryParseStreamingError(response); - - let eventList = response.split("\n"); + + // ReadableStream's buffer is not guaranteed to contain full SSE messages as they arrive in chunks + // We need to buffer chunks until we have one or more full messages (separated by double newlines) + messageBuffer += response; + let eventList = messageBuffer.split("\n\n"); + // Last element will be an empty string or a leftover partial message + messageBuffer = eventList.pop(); for (let event of eventList) { if (!event.startsWith("data"))