Spaces:
Running
Running
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); | |
} | |
} |