import axios from "axios"; import type { AdversarialPoint, BenchmarksResponse, DatasetInfo, DetectResponse, ExplainabilityExample, HealthResponse, MetricInfo, ModelEvaluation, ModelsListResponse, RadarResponse, SamplesResponse, VisualizeResponse, } from "@/types/inference"; const API_BASE_URL = (import.meta as ImportMeta & { env?: Record }).env ?.VITE_API_BASE_URL || "http://localhost:8000"; const WS_BASE_URL = (import.meta as ImportMeta & { env?: Record }).env ?.VITE_WS_BASE_URL || "ws://localhost:8000"; export const apiBaseUrl = API_BASE_URL; export const wsBaseUrl = WS_BASE_URL; export const api = axios.create({ baseURL: API_BASE_URL, timeout: 120_000, // first HF download can take a while }); // ---------------------------------------------------------------- meta -- // export async function getHealth(): Promise { const { data } = await api.get("/api/health"); return data; } export async function listModels(): Promise { const { data } = await api.get("/api/models"); return data; } export async function listSamples(): Promise { const { data } = await api.get("/api/samples"); return data; } export function sampleDownloadUrl(sampleId: string): string { return `${API_BASE_URL}/api/samples/${encodeURIComponent(sampleId)}/download`; } // ----------------------------------------------------------- benchmarks -- // export async function getBenchmarks(): Promise { const { data } = await api.get("/api/benchmarks"); return data; } export async function getRadar(): Promise { const { data } = await api.get("/api/benchmarks/radar"); return data; } export async function getHighlights(): Promise<{ highlights: string[] }> { const { data } = await api.get<{ highlights: string[] }>( "/api/benchmarks/highlights" ); return data; } export async function getBenchmarkDatasets(): Promise<{ datasets: DatasetInfo[] }> { const { data } = await api.get<{ datasets: DatasetInfo[] }>("/api/benchmarks/datasets"); return data; } export async function getBenchmarkMetrics(): Promise<{ metrics: MetricInfo[] }> { const { data } = await api.get<{ metrics: MetricInfo[] }>("/api/benchmarks/metrics"); return data; } export async function getModelEvaluations(): Promise<{ evaluations: ModelEvaluation[] }> { const { data } = await api.get<{ evaluations: ModelEvaluation[] }>("/api/benchmarks/evaluations"); return data; } export async function getAdversarialCurve(): Promise<{ epsilon_curve: AdversarialPoint[] }> { const { data } = await api.get<{ epsilon_curve: AdversarialPoint[] }>("/api/benchmarks/adversarial"); return data; } export async function getExplainabilityExamples(): Promise<{ examples: ExplainabilityExample[] }> { const { data } = await api.get<{ examples: ExplainabilityExample[] }>( "/api/benchmarks/explainability" ); return data; } // ------------------------------------------------------------ inference -- // export async function detectAudio( file: File, models?: string[], returnFeatures = true ): Promise { const fd = new FormData(); fd.append("audio_file", file); if (models && models.length) fd.append("models", JSON.stringify(models)); fd.append("return_features", String(returnFeatures)); const { data } = await api.post("/api/detect", fd, { headers: { "Content-Type": "multipart/form-data" }, }); return data; } export async function detectSample( sampleId: string, models?: string[], returnFeatures = true ): Promise { const fd = new FormData(); if (models && models.length) fd.append("models", JSON.stringify(models)); fd.append("return_features", String(returnFeatures)); const { data } = await api.post( `/api/detect/sample/${encodeURIComponent(sampleId)}`, fd ); return data; } export async function visualizeAudio(file: File): Promise { const fd = new FormData(); fd.append("audio_file", file); const { data } = await api.post("/api/visualize", fd, { headers: { "Content-Type": "multipart/form-data" }, }); return data; } export function inferenceWebSocketUrl(sessionId: string): string { return `${WS_BASE_URL}/ws/inference/${encodeURIComponent(sessionId)}`; }