traceApi.ts 3.5 KB

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