import { RouterConfig, Provider, RouterInput, RouterResult, RawRouterResult } from './types.js';

/**
 * Core implementation for intelligent model routing
 */

declare abstract class BaseRouter {
    protected config: Required<Omit<RouterConfig, 'apiKey' | 'retryConfig'>> & Pick<RouterConfig, 'apiKey' | 'retryConfig'>;
    protected provider: Provider;
    constructor(provider: Provider, config?: RouterConfig);
    /**
     * Select the optimal model for a given input and mode
     */
    selectModel(input: RouterInput): Promise<RouterResult>;
}
/**
 * OpenAI model router for GPT-5 series
 */
declare class OpenAIRouter extends BaseRouter {
    constructor(config?: RouterConfig);
    /**
     * Select optimal GPT-5 model
     *
     * @param input - User input and mode
     * @returns Selected model name (gpt-5-mini | gpt-5-low | gpt-5-medium | gpt-5-high)
     */
    selectModel(input: RouterInput): Promise<RouterResult>;
}
/**
 * Anthropic model router for Claude 4.5 series
 */
declare class AnthropicRouter extends BaseRouter {
    constructor(config?: RouterConfig);
    /**
     * Select optimal Claude model
     *
     * @param input - User input and mode
     * @returns Selected model name (claude-4.5-haiku | claude-4.5-sonnet)
     */
    selectModel(input: RouterInput): Promise<RouterResult>;
}
/**
 * Google Gemini model router
 */
declare class GeminiRouter extends BaseRouter {
    constructor(config?: RouterConfig);
    /**
     * Select optimal Gemini model
     *
     * @param input - User input and mode
     * @returns Selected model name (gemini-2.5-flash | gemini-2.5-pro)
     */
    selectModel(input: RouterInput): Promise<RouterResult>;
}
/**
 * Raw difficulty classification router (no provider-specific mapping)
 */
declare class RawRouter extends BaseRouter {
    constructor(config?: RouterConfig);
    /**
     * Get raw difficulty classification
     *
     * @param input - User input and mode
     * @returns Raw difficulty (easy | medium | hard | needs_info)
     */
    classify(input: RouterInput): Promise<RawRouterResult>;
}

export { AnthropicRouter, GeminiRouter, OpenAIRouter, RawRouter };
