import type { AccountModelCategory, AccountModelDescriptor } from './account-model-catalog.ts'; import type { TaskAssessment } from './auto-task-assessment.ts'; import type { AutoModelPreference } from './copilot-identity.ts'; import type { RequestBudgetPolicy } from './request-budget.ts'; import type { AutoAllocation } from './auto-allocation.ts'; export type AutoModelClass = 'fast' | 'balanced' | 'strong'; export interface AutoModelFeatures { readonly taskClass: AutoModelClass; readonly textLength: number; readonly codeFenceCount: number; readonly requiresImage: boolean; } export type AutoModelInputFitDiagnostic = 'fitting-candidate-selected' | 'compaction-eligible' | 'compaction-unavailable' | 'attempted-but-still-oversized' | 'fixed-content-cannot-fit'; export interface AutoModelDecision { readonly model: AccountModelDescriptor; readonly preference: AutoModelPreference; readonly taskClass: AutoModelClass; readonly reason: 'short-text-turn' | 'standard-turn' | 'large-structured-turn' | 'image-capability'; readonly candidateCount: number; readonly fittingCandidateCount: number; readonly estimatedInputTokens: number; readonly selectedInputBudget: number; readonly inputFitDiagnostic: AutoModelInputFitDiagnostic; readonly explanation: AutoSelectionExplanation; } export interface AutoSelectionExplanation { readonly assessment: TaskAssessment; readonly targetCategory: AccountModelCategory; readonly selectedCategory: AccountModelCategory | 'unknown'; readonly categoryCandidateCount: number; readonly method: 'continuity' | 'equal-distribution' | 'weighted-distribution' | 'only-candidate' | 'no-fit'; readonly fallback: boolean; readonly allocation?: AutoAllocation; } export interface AutoModelRoutingContext { readonly estimateMessage?: (message: unknown) => number; readonly inputTokenFloor?: number; readonly sessionId?: string; readonly turn?: number; readonly requestedMaxTokens?: number; readonly requestBudgetPolicy?: Readonly; readonly seed?: string | number; readonly compactionAvailable?: boolean; readonly hasCompactionSummary?: boolean; readonly assessment?: TaskAssessment; readonly previousModelId?: string; readonly highCostModelIds?: readonly string[]; readonly collectAllocationEvidence?: boolean; } export declare class AutoModelRoutingError extends Error { readonly code: 'COPILOT_AUTO_NO_ELIGIBLE_MODEL' | 'COPILOT_AUTO_TOKEN_METER_UNAVAILABLE' | 'COPILOT_AUTO_TOKEN_ESTIMATE_INVALID'; constructor(code: 'COPILOT_AUTO_NO_ELIGIBLE_MODEL' | 'COPILOT_AUTO_TOKEN_METER_UNAVAILABLE' | 'COPILOT_AUTO_TOKEN_ESTIMATE_INVALID'); } export declare function classifyAutoModelTurn(messages: readonly unknown[]): AutoModelFeatures; export declare function estimateTurnInputTokens(messages: readonly unknown[], estimateMessage?: (message: unknown) => number): number; /** * Filter input headroom before task-aware supplier categories. * Apply finite continuity and positive cost weights within the fitting category. * Preserves Core compaction ownership if no candidate currently fits. */ export declare function selectAutoModel(models: readonly AccountModelDescriptor[], messages: readonly unknown[], preference?: AutoModelPreference, context?: AutoModelRoutingContext): AutoModelDecision; export declare function autoModelInputModalities(models: readonly AccountModelDescriptor[]): readonly ('text' | 'image')[]; //# sourceMappingURL=auto-model-routing.d.ts.map