Shreyas094's picture
Upload 528 files
372531f verified
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);
}
}