import type { ClassificationResult, RouterMetadataInput, RoutingFeatures } from '../types.js';
import type { RoutingInstructionState } from '../routing-instructions.js';
import type { VirtualRouterEngine } from '../engine-legacy.js';
export declare function selectProvider(engine: VirtualRouterEngine, requestedRoute: string, metadata: RouterMetadataInput, classification: ClassificationResult, features: RoutingFeatures, routingState?: RoutingInstructionState): {
    providerKey: string;
    routeUsed: string;
    pool: string[];
    poolId?: string;
};
export declare function selectFromCandidates(engine: VirtualRouterEngine, routes: string[], metadata: RouterMetadataInput, classification: ClassificationResult, features: RoutingFeatures, state: RoutingInstructionState, requiredProviderKeys?: Set<string>, allowAliasRotation?: boolean): {
    providerKey: string;
    routeUsed: string;
    pool: string[];
    poolId?: string;
};
/**
 * 在 sticky 模式下，仅在 sticky 池内选择 Provider：
 * - stickyKeySet 表示已经解析并通过健康检查的 providerKey 集合；
 * - 不再依赖 routing[*].targets 中是否挂载这些 key，避免「未初始化路由池」导致 sticky 池为空；
 * - 仍然尊重 allowed/disabledProviders、disabledKeys、disabledModels 以及上下文长度。
 */
export declare function selectFromStickyPool(engine: VirtualRouterEngine, stickyKeySet: Set<string>, metadata: RouterMetadataInput, features: RoutingFeatures, state: RoutingInstructionState, allowAliasRotation?: boolean): {
    providerKey: string;
    routeUsed: string;
    pool: string[];
    poolId?: string;
} | null;
export declare function extractExcludedProviderKeySet(engine: VirtualRouterEngine, metadata: RouterMetadataInput | undefined): Set<string>;
