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