/** * Pool-axis VoI scorer — pure functions, no LLM, no I/O (IND-417). * * VoI = H_norm × coverage^1.5 × novelty * * H_norm score-weighted entropy over the axis sides, normalized by * log2(k). Entropy is computed over candidate *score mass* * (confidence weights), not head counts, so a balanced split of * low-confidence junk-tail candidates doesn't inflate VoI. * coverage fraction of total pool score mass with a verified side * assignment. The ^1.5 exponent is the anti-vague-axis knob: * axes the LLM couldn't ground in evidence lose fast. * novelty 1 − max cosine similarity between the axis embedding and * reference embeddings (existing premises, intent sentences). * An axis the user has already answered elsewhere scores ~0. */ import type { MinedDiscriminator, PoolCandidate, ScoredDiscriminator } from "./discriminator.types.js"; /** Cosine similarity of two equal-length vectors, in [-1, 1]. 0 for degenerate input. */ export declare function cosineSimilarity(a: number[], b: number[]): number; /** * Novelty of an axis vs reference texts: 1 − max cosine similarity, clamped * to [0, 1]. No references → 1 (fully novel). */ export declare function computeNovelty(axisEmbedding: number[], referenceEmbeddings: number[][]): number; /** * Score one mined axis against its pool. * * @param axis Mined axis with verified assignments (one per candidate). * @param candidates The pool (provides score mass per candidate id). * @param novelty Precomputed novelty in [0,1] (see {@link computeNovelty}). */ export declare function scoreDiscriminator(axis: MinedDiscriminator, candidates: PoolCandidate[], novelty: number): ScoredDiscriminator;