import type { ExecutorFn, ProgressCallback, Task, VariantResult } from '../types/index.js';
export interface ExecuteTasksOptions {
    tasks: Task[];
    executor: ExecutorFn;
    /** Executor name (e.g. 'claude' / 'codex' / 'openai-api'). Used in cache key
     *  to prevent cross-executor pollution when same model name is used. */
    executorName?: string;
    model: string;
    noJudge: boolean;
    samplesPath: string;
    /** Sample bundle 根目录 — 单文件模式 = dirname(samplesPath),目录模式 = 目录自身。
     *  传给 grade 当 samplesDir(custom assertion fn 相对路径锚点),也用作 mocksBaseDir 兜底。
     *  缺省时仍 fallback dirname(resolve(samplesPath)),不破单文件老用法。 */
    samplesBaseDir?: string;
    concurrency: number;
    timeoutMs?: number;
    noCache: boolean;
    verbose: boolean;
    onProgress?: ProgressCallback | null;
    /** Max retries per task on failure (default 0 = no retry) */
    retry?: number;
    /** Pre-loaded results to skip (for --resume) */
    existingResults?: Record<string, Record<string, VariantResult>>;
    /** Number of times to call the LLM judge per (sample × dimension); default 1. */
    judgeRepeat?: number;
    /** Unified judge config — always non-empty. `length === 1` runs single-judge
     *  quick path; `length >= 2` runs ensemble + agreement metrics. */
    judgeModels: import('../types/index.js').JudgeConfig[];
    /** Pre-built executor map covering every executor referenced in `judgeModels`.
     *  Pipeline must populate this before calling executeTasks. */
    judgeExecutors: Record<string, ExecutorFn>;
    /** v0.21 length-debias toggle. Default true; CLI's --no-debias-length sets it false. */
    lengthDebias?: boolean;
    /** hard budget caps. When totalUSD is exceeded mid-run, remaining
     *  tasks are skipped and the partial result set is returned with
     *  budgetExhausted: true. Per-sample caps don't abort but mark offending
     *  tasks as failed. */
    budget?: import('../types/index.js').EvalBudget;
    /** Reasoning effort for executor LLM。透传到 ExecutorInput.effort,
     *  默认 'low'(在 parseRunConfig 兜底)。 */
    effort?: 'low' | 'medium' | 'high' | 'xhigh' | 'max';
    /** 关闭 diagnostic LLM call。Default false。失败用例(任意 assertion fail)
     *  默认会跑 diagnostic 给"哪错了 + 怎么改 skill"建议。跟 noJudge 完全独立。 */
    noDiagnostic?: boolean;
}
export declare function executeTasks({ tasks, executor, executorName, model, noJudge, samplesPath, samplesBaseDir, concurrency, timeoutMs, noCache, verbose, onProgress, retry, existingResults, judgeRepeat, judgeModels, judgeExecutors, lengthDebias, budget, effort, noDiagnostic, }: ExecuteTasksOptions): Promise<{
    results: Record<string, Record<string, VariantResult>>;
    totalCostUSD: number;
    skipped: number;
    budgetExhausted: boolean;
}>;
export declare function preflight(executor: ExecutorFn, model: string, timeoutMs?: number): Promise<void>;
/**
 * Preflight every unique `(executor, model)` judge in `judgeModels`. Used by the
 * eval pipeline to fail fast when any ensemble member is misconfigured (404 model,
 * missing binary, auth failure) — without this, judge #2/#3 errors would only surface
 * mid-grading, after the run had already incurred task-execution cost and produced
 * partial reports without `judgeAgreement`.
 *
 * - Dedupes by normalized `executor:model` key — repeated entries probe once.
 * - Fails fast on the first failing judge; does NOT continue probing.
 * - Throws when an entry's executor is not present in `judgeExecutors` map (the
 *   pipeline must build the map covering every judge before calling this).
 */
export declare function preflightAllJudges(judgeModels: import('../types/index.js').JudgeConfig[], judgeExecutors: Record<string, ExecutorFn>, timeoutMs?: number): Promise<void>;
//# sourceMappingURL=evaluation-execution.d.ts.map