import { type ClassificationInputV3 } from "@velum-labs/routekit-gateway/routing"; import { Effect } from "effect"; import { HttpClient } from "effect/unstable/http"; import type { EvalLabClassifyPlan, EvalLabClassifyResult, EvalLabComparePlan, EvalLabCompareRow } from "../../effect/eval-lab-contracts.js"; type ClassificationLabExecutionInput = { readonly plan: EvalLabClassifyPlan; readonly classifierInput: ClassificationInputV3; readonly outputPath?: string; }; export type ClassificationLabJob = { readonly caseId: string; readonly repetition: number; readonly preset: EvalLabCompareRow["preset"]; readonly labVariantDigest: string; readonly classifierInput: ClassificationInputV3; }; export type ClassificationLabCompareInput = { readonly plan: Pick; readonly jobs: readonly ClassificationLabJob[]; readonly concurrency: number; readonly onRow?: (row: EvalLabCompareRow) => Effect.Effect; }; /** Owns paid classifier session, transport, ledger reconciliation, and output persistence. */ export declare class ClassificationLab { execute(input: ClassificationLabExecutionInput): Effect.Effect; compare(input: ClassificationLabCompareInput): Effect.Effect<{ readonly rows: ({ caseId: string; repetition: number; preset: "quality-v1" | "quality-snippets-offline-v1" | "context-16k-offline-v1"; classifierConfigurationDigest: string; labVariantDigest: string; status: "completed"; classification: { classifier: { costUsd?: number | undefined; model: string; attemptCount: 1 | 2; implementation: "luna-direct-v1"; configurationDigest: string; callId?: string | undefined; durationMs?: number | undefined; }; version: 3; basisDigest: string; scores: readonly { readonly dimensionId: string; readonly score: number; }[]; unknownProbability: number; }; attempts: readonly { callId: string; status: "completed" | "measurement-unavailable"; inputTokens?: number; outputTokens?: number; costUsd?: number; durationMs?: number; }[]; observed: { attemptCount: number; callIds: readonly string[]; knownInputTokens: number; knownOutputTokens: number; knownCostUsd?: number; unpricedCalls: number; unknownUsageCalls: number; }; error?: undefined; } | { caseId: string; repetition: number; preset: "quality-v1" | "quality-snippets-offline-v1" | "context-16k-offline-v1"; classifierConfigurationDigest: string; labVariantDigest: string; status: "failed"; error: { name: string; message: string; code?: string; attemptCount?: number; }; attempts: readonly { callId: string; status: "completed" | "measurement-unavailable"; inputTokens?: number; outputTokens?: number; costUsd?: number; durationMs?: number; }[]; observed: { unpricedCalls: number; unknownUsageCalls: number; knownCostUsd?: number | undefined; attemptCount: number; callIds: readonly string[]; knownInputTokens: number; knownOutputTokens: number; }; classification?: undefined; })[]; readonly observed: { readonly unpricedCalls: number; readonly unknownUsageCalls: number; readonly knownCostUsd?: number | undefined; readonly primaryRows: number; readonly attemptCount: number; readonly knownInputTokens: number; readonly knownOutputTokens: number; }; readonly cleanup: { readonly sessionOpened: boolean; readonly sessionClosed: boolean; readonly detail?: string | undefined; }; }, unknown, HttpClient.HttpClient>; } export {};