/**
 * ModelPool types — multi-provider failover with per-member cooldown.
 *
 * A ModelPool holds an ordered list of (provider, model, region) members and
 * selects among them per-turn using a configurable strategy. On provider
 * failure, the pool cools down the failed member and retries with the next
 * available one, using error-class-aware logic to distinguish retryable from
 * permanent failures.
 */
/** One candidate provider/model/region tuple in a pool. */
export type ModelPoolMember = {
    provider: string;
    model?: string;
    region?: string;
    /** Relative weight used by the "weighted" strategy. Default: 1. */
    weight?: number;
};
/** Member-selection strategy when picking the next candidate. */
export type ModelPoolStrategy = "priority" | "round-robin" | "weighted";
/**
 * Coarse error class returned by `classifyProviderError`.
 * Drives the cooldown decision inside ModelPool.
 */
export type ProviderErrorClass = "rate_limit" | "auth" | "context_window" | "server" | "network" | "unknown";
/** Constructor-level configuration for a ModelPool instance. */
export type ModelPoolConfig = {
    /** Ordered list of provider/model/region candidates. */
    members: ModelPoolMember[];
    /**
     * How to pick among available members.
     * - "priority"     — always try the first available member (default).
     * - "round-robin"  — rotate through members in order.
     * - "weighted"     — prefer members with higher weight, varies by cursor.
     */
    strategy?: ModelPoolStrategy;
    /**
     * How long (ms) a failed member stays in cooldown before it is eligible
     * again. Applies to retryable error classes (rate_limit, server, network).
     * Default: 60_000 (1 minute).
     */
    cooldownMs?: number;
    /**
     * Maximum total attempts across all pool members per call.
     * Default: members.length (try every member once).
     */
    maxAttempts?: number;
};
