Rewrite stream parse logic
This commit is contained in:
@@ -149,39 +149,32 @@ class Chat {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let receiving = true;
|
let receiving = true;
|
||||||
|
let buffer = "";
|
||||||
while (receiving) {
|
while (receiving) {
|
||||||
let lastText = "";
|
|
||||||
const { value, done } = await reader.read();
|
const { value, done } = await reader.read();
|
||||||
if (done) break;
|
if (done) break;
|
||||||
const lines = (lastText + value)
|
|
||||||
|
buffer += value;
|
||||||
|
console.log("begin buffer", buffer);
|
||||||
|
if (!buffer.includes("\n")) continue;
|
||||||
|
const lines = buffer
|
||||||
.trim()
|
.trim()
|
||||||
.split("\n")
|
.split("\n")
|
||||||
.filter((line) => line.trim())
|
.filter((line) => line.trim())
|
||||||
.map((line) => line.slice("data:".length))
|
.map((line) => line.trim());
|
||||||
.map((line) => line.trim())
|
|
||||||
.filter((i) => {
|
buffer = "";
|
||||||
if (i === "[DONE]") {
|
|
||||||
receiving = false;
|
for (const line of lines) {
|
||||||
return false;
|
console.log("line", line);
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
const jsons: ChunkMessage[] = lines
|
|
||||||
.map((line) => {
|
|
||||||
try {
|
try {
|
||||||
const ret = JSON.parse(lastText + line.trim());
|
const jsonStr = line.slice("data:".length).trim();
|
||||||
lastText = "";
|
const json = JSON.parse(jsonStr);
|
||||||
return ret;
|
yield json;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(`Chunk parse error at: ${line}`);
|
console.log(`Chunk parse error at: ${line}`);
|
||||||
lastText = line;
|
buffer += line;
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
})
|
|
||||||
.filter((i) => i.choices[0].delta.content);
|
|
||||||
|
|
||||||
for (const j of jsons) {
|
|
||||||
yield j;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user