export type Paradigm = 'bm25' | 'dense' | 'splade' | 'rerank'; // Re-export corpus domain types export type * from './types/corpus'; export interface Document { id: string; title?: string; text: string; goldRelevance: number; // 0 = not relevant, 1 = relevant, 2 = highly relevant // Optional pre-computed or derived fields length?: number; termFreqs?: Record; denseVector?: number[]; spladeTokens?: Record; } export interface Query { id: string; text: string; dataset: 'MS MARCO Passage' | 'NFCorpus' | 'Custom'; denseVector?: number[]; spladeTokens?: Record; relevantDocIds?: string[]; } export interface ScoredDoc { doc: Document; score: number; rank: number; scoreBreakdown?: { termContributions?: { term: string; tf: number; idf: number; numerator?: number; denominator?: number; contribution: number; }[]; vectorDotProduct?: { querySlice: number[]; docSlice: number[]; terms: number[]; dotProduct: number; model?: string; dim?: number; querySource?: string; docSource?: string; topDimensions?: { dim: number; q_val: number; d_val: number; product: number }[]; latencyMs?: number; positiveCount?: number; negativeCount?: number; positiveSum?: number; negativeSum?: number; }; spladeOverlap?: { term: string; qWeight: number; dWeight: number; product: number; }[]; spladeMeta?: { model?: string; totalActivatedDocTokens?: number; docMlmExpansionsCount?: number; docSource?: string; latencyMs?: number; }; rerankDelta?: number; rerankDetails?: { baseScore: number; baseRank?: number; crossAttentionLogit: number; relevanceProbability: number; rationale: string; jointTokens: { term: string; contextualRole: string; impact: 'positive' | 'neutral' | 'negative' }[]; scoringFormula?: string; }; explanation?: string; }; } export interface EvaluationMetrics { mrr10: number; ndcg10: number; precision1: number; recall10: number; reciprocalRank: number; firstRelevantRank?: number; }