Spaces:
Sleeping
Sleeping
| export type AnalysisRow = { | |
| icon?: string; | |
| left: string; | |
| right: string; | |
| right_style?: string; | |
| }; | |
| export type Candidate = { | |
| commodity_code: number; | |
| path: string; | |
| reason?: string; | |
| }; | |
| export type SelectedDetails = { | |
| commodity_code: number; | |
| path: string; | |
| segment_code?: number; | |
| family_code?: number; | |
| class_code?: number; | |
| commodity_title?: string; | |
| commodity_definition?: string; | |
| }; | |
| export type ChatResponse = { | |
| status: "found" | "choose" | "not_found"; | |
| summary: string; | |
| commodity_code: number | null; | |
| candidates: Candidate[]; | |
| analysis_rows: AnalysisRow[]; | |
| form_intro: string; | |
| selected_details?: SelectedDetails; | |
| error?: string; | |
| }; | |
| const base = () => | |
| (import.meta.env.VITE_API_BASE as string | undefined)?.replace(/\/$/, "") ?? ""; | |
| export async function chatApi(body: { | |
| message: string; | |
| selected_commodity_code?: number | null; | |
| }): Promise<ChatResponse> { | |
| const url = `${base()}/api/chat`; | |
| const res = await fetch(url, { | |
| method: "POST", | |
| headers: { "Content-Type": "application/json" }, | |
| body: JSON.stringify({ | |
| message: body.message ?? "", | |
| selected_commodity_code: body.selected_commodity_code ?? null, | |
| }), | |
| }); | |
| if (!res.ok) { | |
| const t = await res.text(); | |
| throw new Error(t || `HTTP ${res.status}`); | |
| } | |
| return res.json() as Promise<ChatResponse>; | |
| } | |