Spaces:
Running
Running
File size: 2,805 Bytes
372531f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
import { createParser, ParsedEvent, ReconnectInterval } from "eventsource-parser";
export async function handleSourcesAndAnswer(question: string) {
let sourcesResponse = await fetch("/api/getSources", {
method: "POST",
body: JSON.stringify({ question }),
});
let sources = await sourcesResponse.json();
const response = await fetch("/api/getAnswer", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ question, sources }),
});
if (!response.ok) {
throw new Error(response.statusText);
}
if (response.status === 202) {
const fullAnswer = await response.text();
return fullAnswer;
}
// This data is a ReadableStream
const data = response.body;
if (!data) {
return;
}
const onParse = (event: ParsedEvent | ReconnectInterval) => {
if (event.type === "event") {
const data = event.data;
try {
const text = JSON.parse(data).text ?? "";
return text;
} catch (e) {
console.error(e);
}
}
};
// https://web.dev/streams/#the-getreader-and-read-methods
const reader = data.getReader();
const decoder = new TextDecoder();
const parser = createParser(onParse);
let done = false;
while (!done) {
const { value, done: doneReading } = await reader.read();
done = doneReading;
const chunkValue = decoder.decode(value);
parser.feed(chunkValue);
}
}
export async function handleSimilarQuestions(question: string) {
let res = await fetch("/api/getSimilarQuestions", {
method: "POST",
body: JSON.stringify({ question }),
});
let questions = await res.json();
return questions;
}
export async function handleLanggraphAnswer(question: string) {
const response = await fetch("/api/generateLanggraph", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ question }),
});
if (!response.ok) {
throw new Error(response.statusText);
}
// This data is a ReadableStream
const data = response.body;
if (!data) {
return;
}
const onParse = (event: ParsedEvent | ReconnectInterval) => {
if (event.type === "event") {
const data = event.data;
try {
const text = JSON.parse(data).text ?? "";
return text;
} catch (e) {
console.error(e);
}
}
};
const reader = data.getReader();
const decoder = new TextDecoder();
const parser = createParser(onParse);
let done = false;
while (!done) {
const { value, done: doneReading } = await reader.read();
done = doneReading;
const chunkValue = decoder.decode(value);
parser.feed(chunkValue);
}
} |