import type { TranscriptEntry } from '../llm/providers/recording.provider.js'; import type { LLMCompletionResult, LLMMessage } from '../types/llm.types.js'; export interface OutputShape { minLength: number; mustContainAny: string[]; } export interface RegressionBaseline { capturedAt: string; model: string; modelVersion: string; scenarioId: string; transcript: TranscriptEntry[]; } export interface RegressionDeviation { reason: string; scenarioId: string; similarity?: number; } export interface RegressionRunResult { deviations: RegressionDeviation[]; passed: string[]; skipped: string[]; } export interface RegressionScenario { description: string; expectedOutputShape: OutputShape; id: string; messages: LLMMessage[]; } /** * Word-level Jaccard similarity between two strings. * Used as a soft structural similarity check — not cryptographic. */ export declare function jaccardWordSimilarity(a: string, b: string): number; /** * Returns true when content satisfies the given output shape constraints. */ type LLMCallFn = (messages: LLMMessage[]) => Promise; export declare function meetsOutputShape(content: string, shape: OutputShape): boolean; /** * Runs regression scenarios against a provided LLM call function, * comparing results to stored baselines. */ export declare class RegressionRunner { private readonly baselines; /** Jaccard similarity threshold — deviations reported below this value */ private readonly similarityThreshold; constructor(baselines: RegressionBaseline[], /** Jaccard similarity threshold — deviations reported below this value */ similarityThreshold?: number); run(scenarios: RegressionScenario[], llmCall: LLMCallFn): Promise; } export {}; //# sourceMappingURL=regression-runner.d.ts.map