/** * Self-contained feature evaluation suite for hippo. * * Creates a synthetic memory corpus with known ground truth, runs searches * per feature category, and reports per-feature metrics with regression * detection against a saved baseline. * * Design goals: * - Zero API calls (no LLM judge, no embeddings) * - Deterministic (fixed timestamps, content, IDs) * - Fast (<60s for full suite) * - Per-feature breakdown so you see exactly what a change helped/hurt */ import { type MemoryEntry } from './memory.js'; export type FeatureCategory = 'direct-recall' | 'extraction-preference' | 'dag-drilldown' | 'temporal' | 'noise-resistance' | 'multi-hop'; export interface FeatureTestCase { id: string; category: FeatureCategory; query: string; expectedIds: string[]; description: string; } export interface FeatureResult { category: FeatureCategory; cases: number; mrr: number; recallAt5: number; ndcgAt5: number; passed: boolean; } export interface EvalSuiteResult { version: string; timestamp: string; features: FeatureResult[]; overall: { mrr: number; recallAt5: number; ndcgAt5: number; }; totalCases: number; durationMs: number; } export interface EvalBaseline { version: string; timestamp: string; features: Record; overall: { mrr: number; recallAt5: number; ndcgAt5: number; }; } export interface RegressionReport { regressions: Array<{ category: FeatureCategory; metric: string; baseline: number; current: number; delta: number; }>; improvements: Array<{ category: FeatureCategory; metric: string; baseline: number; current: number; delta: number; }>; verdict: 'PASS' | 'REGRESSION'; } export declare function buildSyntheticCorpus(): { entries: MemoryEntry[]; cases: FeatureTestCase[]; }; export declare function runFeatureEval(version: string): Promise; export declare function detectRegressions(baseline: EvalBaseline, current: EvalSuiteResult): RegressionReport; export declare function resultToBaseline(result: EvalSuiteResult): EvalBaseline; export declare function formatResult(result: EvalSuiteResult, baseline?: EvalBaseline): string; //# sourceMappingURL=eval-suite.d.ts.map