File size: 1,116 Bytes
5a3b322 |
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 |
export type ChatRequest = {
query: string;
clarification_answer?: string | null;
verbose?: boolean;
};
export type RecommendRequest = {
query: string;
llm_model?: string | null;
verbose?: boolean;
};
export async function fetchChat(base: string, body: ChatRequest, signal?: AbortSignal) {
return request(`${base.replace(/\/$/, "")}/chat`, body, signal);
}
export async function fetchRecommend(base: string, body: RecommendRequest, signal?: AbortSignal) {
return request(`${base.replace(/\/$/, "")}/recommend`, body, signal);
}
async function request(url: string, body: any, signal?: AbortSignal) {
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 30000);
try {
const res = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
signal: signal || controller.signal,
});
if (!res.ok) {
const text = await res.text();
throw new Error(`HTTP ${res.status}: ${text}`);
}
return res.json();
} finally {
clearTimeout(timeout);
}
}
|