handle partial chunk
This commit is contained in:
@@ -40,13 +40,14 @@ export default function ChatBOX(props: {
|
|||||||
const allChunkMessage: string[] = [];
|
const allChunkMessage: string[] = [];
|
||||||
new ReadableStream({
|
new ReadableStream({
|
||||||
async start() {
|
async start() {
|
||||||
|
let lastText = "";
|
||||||
while (true) {
|
while (true) {
|
||||||
let responseDone = false;
|
let responseDone = false;
|
||||||
let state = await reader?.read();
|
let state = await reader?.read();
|
||||||
let done = state?.done;
|
let done = state?.done;
|
||||||
let value = state?.value;
|
let value = state?.value;
|
||||||
if (done) break;
|
if (done) break;
|
||||||
let text = new TextDecoder().decode(value);
|
let text = lastText + new TextDecoder().decode(value);
|
||||||
// console.log("text:", text);
|
// console.log("text:", text);
|
||||||
const lines = text
|
const lines = text
|
||||||
.trim()
|
.trim()
|
||||||
@@ -63,7 +64,15 @@ export default function ChatBOX(props: {
|
|||||||
console.log("lines", lines);
|
console.log("lines", lines);
|
||||||
const jsons: ChunkMessage[] = lines
|
const jsons: ChunkMessage[] = lines
|
||||||
.map((line) => {
|
.map((line) => {
|
||||||
return JSON.parse(line.trim().slice("data:".length));
|
try {
|
||||||
|
const ret = JSON.parse(line.trim().slice("data:".length));
|
||||||
|
lastText = "";
|
||||||
|
return ret;
|
||||||
|
} catch (e) {
|
||||||
|
console.log(`Chunk parse error at: ${line}`);
|
||||||
|
lastText = line;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.filter((i) => i);
|
.filter((i) => i);
|
||||||
console.log("jsons", jsons);
|
console.log("jsons", jsons);
|
||||||
|
|||||||
Reference in New Issue
Block a user