/**
 * Inference-time PRM scoring — pick the best of N candidate trajectories
 * using a trained reward model (or a rule-based PRM as a proxy).
 *
 * The canonical Best-of-N pattern: generate N completions, score each
 * with a PRM, pick the winner. Here the scoring loop is framework-agnostic
 * — supply a TraceStore + PrmGrader + N run IDs → get ranking + winner.
 */
import type { TraceStore } from '../trace/store';
import type { PrmGradedTrace, PrmGrader } from './rubric';
export interface BestOfNResult {
    winner: PrmGradedTrace;
    ranked: PrmGradedTrace[];
    /** Standard deviation of aggregate scores — small = candidates were homogenous. */
    stdDev: number;
}
export interface PrmBestOfNOptions {
    /** Max concurrent `grader.grade` calls. Default 4. */
    concurrency?: number;
}
export declare function prmBestOfN(store: TraceStore, grader: PrmGrader, runIds: string[], options?: PrmBestOfNOptions): Promise<BestOfNResult>;
/**
 * Weighted vote across multiple graders — use when you want a PRM ensemble
 * (e.g. rule-based + LLM-based + trained model). Each grader produces its
 * own ranking; we aggregate via rank-sum (Borda count) so no single grader
 * dominates via a different score scale.
 */
export declare function prmEnsembleBestOfN(store: TraceStore, graders: PrmGrader[], runIds: string[], options?: PrmBestOfNOptions): Promise<BestOfNResult>;
//# sourceMappingURL=inference.d.ts.map