mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
buffers partial SSE messages from Readable
This commit is contained in:
@ -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"))
|
||||||
|
Reference in New Issue
Block a user