import type { ModelInfo, ModelRef, TokenUsage, ChorusVoice } from "../types.js"; export interface RunBudget { maxUsd?: number; maxInputTokens?: number; maxOutputTokens?: number; maxVoices?: number; conductorReserveUsd?: number; } export interface BudgetEstimate { usd: number | null; inputTokens: number; outputTokens: number; voices: number; unknownPricing: boolean; } export declare function estimateBudget(args: { voices: ChorusVoice[]; conductor: ModelRef; prompt: string; registry: ModelInfo[]; outputTokens?: number; }): BudgetEstimate; export declare function budgetAllows(estimate: BudgetEstimate, budget: RunBudget): boolean; export declare class BudgetTracker { readonly budget: RunBudget; private readonly reservedUsd; constructor(budget: RunBudget, reservedUsd?: number); private spentUsd; private inputTokens; private outputTokens; record(usage: TokenUsage | undefined, costUsd: number | null): void; canSpend(estimatedUsd: number): boolean; canStart(estimate: { usd: number | null; inputTokens: number; outputTokens: number; }, reserveConductor?: boolean): { allowed: boolean; reason?: string; }; get actual(): { usd: number; inputTokens: number; outputTokens: number; }; } export declare function estimateModelBudget(model: ModelRef, prompt: string, registry: ModelInfo[], outputTokens?: number): { usd: number | null; inputTokens: number; outputTokens: number; };