traceApi.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { request } from "./client";
  2. import type { TraceDetailResponse, TraceListResponse } from "../types/trace";
  3. export const traceApi = {
  4. fetchTraces(params?: { status?: string; mode?: string; limit?: number }) {
  5. const query = new URLSearchParams();
  6. if (params?.status) query.set("status", params.status);
  7. if (params?.mode) query.set("mode", params.mode);
  8. if (typeof params?.limit === "number") query.set("limit", String(params.limit));
  9. const suffix = query.toString() ? `?${query.toString()}` : "";
  10. return request<TraceListResponse>(`/api/traces${suffix}`);
  11. },
  12. fetchTraceDetail(traceId: string) {
  13. return request<TraceDetailResponse>(`/api/traces/${traceId}`);
  14. },
  15. createTrace(data: {
  16. messages: Array<{ role: "system" | "user" | "assistant" | "tool"; content: unknown }>;
  17. model?: string;
  18. temperature?: number;
  19. max_iterations?: number;
  20. tools?: string[] | null;
  21. name?: string;
  22. uid?: string;
  23. project_name?: string;
  24. }) {
  25. return request<{ trace_id: string }>("/api/traces", {
  26. method: "POST",
  27. data,
  28. });
  29. },
  30. runTrace(
  31. traceId: string,
  32. data?: {
  33. messages?: Array<{ role: "system" | "user" | "assistant" | "tool"; content: unknown }>;
  34. after_message_id?: string | null;
  35. },
  36. ) {
  37. return request<void>(`/api/traces/${traceId}/run`, {
  38. method: "POST",
  39. data,
  40. });
  41. },
  42. stopTrace(traceId: string) {
  43. return request<void>(`/api/traces/${traceId}/stop`, {
  44. method: "POST",
  45. });
  46. },
  47. compactTrace(traceId: string) {
  48. return request<{ previous_count: number; new_count: number; message: string }>(`/api/traces/${traceId}/compact`, {
  49. method: "POST",
  50. });
  51. },
  52. reflectTrace(traceId: string, data: { focus?: string | null } = {}) {
  53. return request<{ trace_id: string; reflection: string }>(`/api/traces/${traceId}/reflect`, {
  54. method: "POST",
  55. data,
  56. });
  57. },
  58. getExperiences() {
  59. return request<string>("/api/experiences");
  60. },
  61. fetchExamples() {
  62. return request<{ projects: Array<{ name: string; path: string; has_prompt: boolean }> }>("/api/examples");
  63. },
  64. fetchExamplePrompt(projectName: string) {
  65. return request<{
  66. system_prompt: string;
  67. user_prompt: string;
  68. model?: string;
  69. temperature?: number;
  70. }>(`/api/examples/${projectName}/prompt`);
  71. },
  72. uploadTraces(file: File) {
  73. const formData = new FormData();
  74. formData.append("file", file);
  75. return request<{
  76. success: boolean;
  77. message: string;
  78. imported_traces: string[];
  79. failed_traces: Array<{ trace_id: string; reason: string }>;
  80. }>("/api/traces/upload", {
  81. method: "POST",
  82. data: formData,
  83. headers: {
  84. "Content-Type": "multipart/form-data",
  85. },
  86. });
  87. },
  88. };