import { getDefaultDatabasePath } from "../db/connection"; import { getAppCloudflareEnv } from "../runtime/cloudflare"; import { createD1TraceRepository } from "./d1-trace-repository"; import { createSqliteTraceRepository } from "./sqlite-trace-repository"; import type { LlmTraceCall, LlmTraceRun } from "./trace-types"; export interface LlmTraceRepository { putRun(run: LlmTraceRun): Promise; putCall(call: LlmTraceCall): Promise; getRun(jobId: string): Promise; getLatestRun(): Promise; listCalls(jobId: string): Promise; listTerminalRunsExcept(jobId: string): Promise; deleteRun(jobId: string): Promise; } export function getLlmTraceRepositoryFromRuntime(): LlmTraceRepository { if (process.env.APP_RUNTIME === "cloudflare") { const env = getAppCloudflareEnv(); if (!env?.DB) throw new Error("Cloudflare D1 binding DB is required"); return createD1TraceRepository(env.DB); } return createSqliteTraceRepository(getDefaultDatabasePath()); }