buffers partial SSE messages from Readable

This commit is contained in:
unknown
2023-05-19 03:17:42 -05:00
parent db439be897
commit 7e59745dfc

View File

@ -555,13 +555,19 @@ async function sendOpenAIRequest(type, openai_msgs_tosend, signal) {
const decoder = new TextDecoder(); const decoder = new TextDecoder();
const reader = response.body.getReader(); const reader = response.body.getReader();
let getMessage = ""; let getMessage = "";
let messageBuffer = "";
while (true) { while (true) {
const { done, value } = await reader.read(); const { done, value } = await reader.read();
let response = decoder.decode(value); let response = decoder.decode(value);
tryParseStreamingError(response); 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) { for (let event of eventList) {
if (!event.startsWith("data")) if (!event.startsWith("data"))