/**
 * src/compute/strategies/best-of-n.ts
 *
 * Best-of-N (BoN) compute strategy.
 *
 * Samples N candidates from the generator, scores each via either a
 * caller-supplied {@link Verifier} OR a {@link BestOfNRewardModel}, and
 * returns the highest-scoring candidate.
 *
 * Caller MUST supply exactly one of `verifier` or `rewardModel`. Supplying
 * both, or neither, throws at strategy-construction time.
 *
 * Tie-break: stable — the first candidate (by sampling order) wins among ties.
 */
import type { Strategy } from "../types.js";
import type { Verifier } from "../verifier.js";
/**
 * Lightweight reward-model interface — score a candidate output in [0, 1].
 *
 * Distinct from {@link Verifier}: a reward model returns only a scalar score,
 * with no rationale. Use a {@link Verifier} when audit trails / rationales
 * are required; use a reward model when only ranking matters.
 */
export interface BestOfNRewardModel<TOutput> {
    /** Score the candidate. `[0, 1]` is preferred but not enforced — higher is better. */
    score(output: TOutput): Promise<number> | number;
}
export interface BestOfNOptions<_TInput, TOutput> {
    /** Number of candidates to sample. `n >= 1`. */
    n: number;
    /** Domain-specific verifier (mutually exclusive with `rewardModel`). */
    verifier?: Verifier<TOutput>;
    /** Reward model (mutually exclusive with `verifier`). */
    rewardModel?: BestOfNRewardModel<TOutput>;
    /** Sample candidates concurrently via `Promise.all` (default `true`). */
    parallel?: boolean;
}
/**
 * Returns a {@link Strategy} that samples N candidates and returns the
 * highest-scoring one.
 *
 * @throws RangeError when `n < 1`.
 * @throws Error when neither or both of `verifier`/`rewardModel` are supplied.
 */
export declare function bestOfNStrategy<TInput, TOutput>(opts: BestOfNOptions<TInput, TOutput>): Strategy<TInput, TOutput>;
//# sourceMappingURL=best-of-n.d.ts.map