/** * Expected-cost tier selection — SP-106, #68; virtual cost v2 — SP-149, #78. * * E[cost_T] = P(success | T) × directCost(T) * + (1 - P(success | T)) × E[cost_escalation] * * directCost uses SP-148 virtual cost v2 (λ decay, quota premiums, KV credit). * Selects the tier minimizing adjusted expected cost subject to context-fit, * local readiness, and pin/cache economics (FR-008). */ import type { ModelProfile, PriceCatalog, SessionPin, Tier } from '../types/index.js'; import type { QuotaWindowPosition } from '../types/entities.js'; import type { VirtualCostV2Config } from '../types/schemas.js'; import { type CacheEconomicsConfig } from '../pinning/cache-economics.js'; /** Frontier-tier success probability when evaluating escalation terminal cost. */ export declare const FRONTIER_P_SUCCESS = 1; /** Minimum per-1M-token spread required before economical tiers compete. */ export declare const MIN_PRICE_DELTA_PER_1M = 0.25; /** * Maximum soft heat-affinity discount (SP-215, #115). Caps the expected-cost * discount a workload heat map may apply so serve-time affinity can never * dominate hard gates (price delta, pin cache economics, capability * shortfall) — matches the Colibri-style ~25% hysteresis band. */ export declare const MAX_HEAT_BIAS_STRENGTH = 0.25; /** * Soft first-turn / cold-start heat affinity (SP-215, #115). Discounts the * adjusted expected cost of `tier` by `strength` (fraction, clamped to * [0, MAX_HEAT_BIAS_STRENGTH]). Applied AFTER expected-cost computation and * BEFORE the price-delta and pin-economics gates, so it can only ever soften * — never override — hard routing gates. */ export interface ExpectedCostHeatBias { readonly tier: Tier; readonly strength: number; } /** V2 virtual-cost breakdown attached to expected-cost explain (SP-149). */ export interface ExpectedCostVirtualCostV2 { readonly baseCostUsd: number; readonly quotaDecayLambda: number; readonly quotaArbitragePremium: number; readonly exhaustionRiskPremium: number; readonly kvCacheSavings: number; readonly effectiveCostUsd: number; readonly effectiveCostPer1M: number; } export interface ExpectedCostBreakdown { readonly tier: Tier; readonly pSuccess: number; readonly costPer1M: number; readonly directCostUsd: number; readonly escalationCostUsd: number; readonly expectedCostUsd: number; readonly adjustedExpectedCostUsd: number; readonly virtualCostV2: ExpectedCostVirtualCostV2 | null; /** True when the SP-215 soft heat bias discounted this tier's cost. */ readonly heatBiasApplied?: boolean; } export interface SelectTierByExpectedCostInput { readonly fleet: readonly ModelProfile[]; readonly priceCatalog: PriceCatalog | null; readonly estTokens: number; readonly pSuccessCheap: number; /** Cost-quality tradeoff in [0, 1]; higher favors economical tiers (SP-106). */ readonly alpha: number; readonly localZeroReady: boolean; readonly pinnedModel?: ModelProfile; readonly sessionPin?: SessionPin; readonly cacheEconomicsConfig?: CacheEconomicsConfig; /** Rolling subscription quota position for v2 λ and premiums (SP-149). */ readonly quotaWindowPosition?: QuotaWindowPosition; readonly virtualCostV2Config?: VirtualCostV2Config; /** Soft heat affinity for first-turn / cold-start bias (SP-215, #115). */ readonly heatBias?: ExpectedCostHeatBias; } export interface SelectTierByExpectedCostResult { readonly tierHint: Tier | null; readonly reasonCode: string; readonly tierCosts: readonly ExpectedCostBreakdown[]; readonly rationale: string; readonly blockedByPinEconomics: boolean; /** True when the SP-215 soft heat bias changed the winning tier. */ readonly heatBiasApplied?: boolean; } /** * Resolve representative per-1M cost for a tier using subscription-aware pricing (SP-096). */ export declare function resolveTierCostPer1M(tier: Tier, fleet: readonly ModelProfile[], priceCatalog: PriceCatalog | null): number; export interface ResolveTierVirtualCostInput { readonly tier: Tier; readonly fleet: readonly ModelProfile[]; readonly priceCatalog: PriceCatalog | null; readonly estTokens: number; readonly quotaWindowPosition?: QuotaWindowPosition; readonly virtualCostV2Config?: VirtualCostV2Config; readonly sessionPin?: SessionPin; readonly pinnedModel?: ModelProfile; } /** * Resolve SP-148 virtual cost v2 for a tier representative model (SP-149). */ export declare function resolveTierVirtualCost(input: ResolveTierVirtualCostInput): { readonly costPer1M: number; readonly directCostUsd: number; readonly virtualCostV2: ExpectedCostVirtualCostV2; }; /** * Format v2 cost breakdown for operator explain output (SP-149). */ export declare function formatVirtualCostV2Explain(virtualCostV2: ExpectedCostVirtualCostV2 | null): string; /** * Compute per-tier expected routing cost under uncertainty. * * Tier direct cost uses SP-148 virtual cost v2 when resolved via fleet/catalog. */ export declare function computeExpectedCost(tier: Tier, pSuccess: number, priceCatalog: PriceCatalog | null, estTokens: number, escalationCostUsd: number, options?: { readonly alpha?: number; readonly costPer1M?: number; readonly directCostUsd?: number; readonly fleet?: readonly ModelProfile[]; readonly virtualCostV2?: ExpectedCostVirtualCostV2 | null; readonly quotaWindowPosition?: QuotaWindowPosition; readonly virtualCostV2Config?: VirtualCostV2Config; readonly sessionPin?: SessionPin; readonly pinnedModel?: ModelProfile; readonly heatBias?: ExpectedCostHeatBias; }): ExpectedCostBreakdown; /** * Compare expected cost across context-fit-viable tiers and return argmin tier hint. */ export declare function selectTierByExpectedCost(input: SelectTierByExpectedCostInput): SelectTierByExpectedCostResult; //# sourceMappingURL=expected-cost.d.ts.map