import { request } from "./client"; import type { TraceDetailResponse, TraceListResponse } from "../types/trace"; export const traceApi = { fetchTraces(params?: { status?: string; mode?: string; limit?: number }) { const query = new URLSearchParams(); if (params?.status) query.set("status", params.status); if (params?.mode) query.set("mode", params.mode); if (typeof params?.limit === "number") query.set("limit", String(params.limit)); const suffix = query.toString() ? `?${query.toString()}` : ""; return request(`/api/traces${suffix}`); }, fetchTraceDetail(traceId: string) { return request(`/api/traces/${traceId}`); }, createTrace(data: { messages: Array<{ role: "system" | "user" | "assistant" | "tool"; content: unknown }>; model?: string; temperature?: number; max_iterations?: number; tools?: string[] | null; name?: string; uid?: string; project_name?: string; }) { return request<{ trace_id: string }>("/api/traces", { method: "POST", data, }); }, runTrace( traceId: string, data?: { messages?: Array<{ role: "system" | "user" | "assistant" | "tool"; content: unknown }>; after_message_id?: string | null; }, ) { return request(`/api/traces/${traceId}/run`, { method: "POST", data, }); }, stopTrace(traceId: string) { return request(`/api/traces/${traceId}/stop`, { method: "POST", }); }, compactTrace(traceId: string) { return request<{ previous_count: number; new_count: number; message: string }>(`/api/traces/${traceId}/compact`, { method: "POST", }); }, reflectTrace(traceId: string, data: { focus?: string | null } = {}) { return request<{ trace_id: string; reflection: string }>(`/api/traces/${traceId}/reflect`, { method: "POST", data, }); }, getExperiences() { return request("/api/experiences"); }, fetchExamples() { return request<{ projects: Array<{ name: string; path: string; has_prompt: boolean }> }>("/api/examples"); }, fetchExamplePrompt(projectName: string) { return request<{ system_prompt: string; user_prompt: string; model?: string; temperature?: number; }>(`/api/examples/${projectName}/prompt`); }, uploadTraces(file: File) { const formData = new FormData(); formData.append("file", file); return request<{ success: boolean; message: string; imported_traces: string[]; failed_traces: Array<{ trace_id: string; reason: string }>; }>("/api/traces/upload", { method: "POST", data: formData, headers: { "Content-Type": "multipart/form-data", }, }); }, };