/**
 * Model Routing Facade
 *
 * Encapsulates model routing and cost tracking operations.
 * This facade handles:
 * - Model selection and routing decisions
 * - Cost tracking and limits
 * - Routing statistics and savings calculation
 */
import type { ModelRouter, RoutingDecision } from '../../optimization/model-routing.js';
import type { CostTracker } from '../../utils/cost-tracker.js';
/**
 * Statistics about model routing usage
 */
export interface ModelRoutingStats {
    enabled: boolean;
    totalCost: number;
    savings: {
        saved: number;
        percentage: number;
    };
    usageByModel: Record<string, unknown>;
    lastDecision: RoutingDecision | null;
}
/**
 * Dependencies required by ModelRoutingFacade
 */
export interface ModelRoutingFacadeDeps {
    modelRouter: ModelRouter;
    costTracker: CostTracker;
}
/**
 * Facade for model routing and cost management in agents.
 *
 * Responsibilities:
 * - Enabling/disabling model routing
 * - Tracking routing decisions
 * - Calculating costs and savings
 * - Providing routing statistics
 */
export declare class ModelRoutingFacade {
    private readonly modelRouter;
    private readonly costTracker;
    private useModelRouting;
    private lastRoutingDecision;
    private sessionCostLimit;
    private sessionCost;
    constructor(deps: ModelRoutingFacadeDeps);
    /**
     * Enable or disable model routing
     */
    setModelRouting(enabled: boolean): void;
    /**
     * Check if model routing is enabled
     */
    isModelRoutingEnabled(): boolean;
    /**
     * Get the model router instance (for advanced operations)
     */
    getModelRouter(): ModelRouter;
    /**
     * Get the last routing decision
     */
    getLastRoutingDecision(): RoutingDecision | null;
    /**
     * Set the last routing decision (called after routing)
     */
    setLastRoutingDecision(decision: RoutingDecision): void;
    /**
     * Get comprehensive model routing statistics
     */
    getStats(): ModelRoutingStats;
    /**
     * Format routing statistics as a human-readable string
     */
    formatStats(): string;
    /**
     * Get current session cost
     */
    getSessionCost(): number;
    /**
     * Add to session cost
     */
    addSessionCost(cost: number): void;
    /**
     * Set session cost directly
     */
    setSessionCost(cost: number): void;
    /**
     * Get session cost limit
     */
    getSessionCostLimit(): number;
    /**
     * Set session cost limit
     */
    setSessionCostLimit(limit: number): void;
    /**
     * Check if session cost limit has been reached
     */
    isSessionCostLimitReached(): boolean;
    /**
     * Get the cost tracker instance (for advanced operations)
     */
    getCostTracker(): CostTracker;
}
