import type { LLMProvider, ProviderRuntimeMetadataDeps } from './interface.js'; import type { ProviderCapabilityRegistry } from './capabilities.js'; import type { ConfigManager } from '../config/manager.js'; import type { RuntimeEventBus } from '../runtime/events/index.js'; import type { SubscriptionManager } from '../config/subscriptions.js'; import type { CacheHitTracker } from './cache-strategy.js'; import type { FeatureFlagManager } from '../runtime/feature-flags/index.js'; import type { FavoritesStore } from './favorites.js'; import type { BenchmarkStore } from './model-benchmarks.js'; import type { ModelLimitsService } from './model-limits.js'; import type { ManualModelPrice } from './model-pricing.js'; import type { ReasoningEffortSpec } from './reasoning-effort.js'; /** Model capability tier, controls system prompt verbosity. */ export type ModelTier = 'free' | 'standard' | 'premium' | 'subscription'; /** Per-model token limits for output, tool results, tool calls, and reasoning. */ export interface TokenLimits { maxOutputTokens?: number | undefined; maxToolResultTokens?: number | undefined; maxToolCalls?: number | undefined; maxReasoningTokens?: number | undefined; } /** Provenance of a resolved context window value. */ export type ContextWindowProvenance = 'provider_api' | 'configured_cap' | 'observed_limit' | 'fallback'; /** Describes a selectable model and its capabilities. */ export interface ModelDefinition { id: string; provider: string; /** Compound unique key: `${provider}:${id}`. Safe separator since model IDs use `/` not `:`. */ registryKey: string; displayName: string; description: string; capabilities: { toolCalling: boolean; codeEditing: boolean; reasoning: boolean; multimodal: boolean; }; contextWindow: number; contextWindowProvenance?: ContextWindowProvenance | undefined; selectable: boolean; /** * What this exact model accepts for reasoning effort, and which request * field carries it. Absent means the model does not reason at all; a spec * of kind `unavailable` means it reasons at a depth nobody can configure. */ reasoningEffort?: ReasoningEffortSpec | undefined; tier?: ModelTier | undefined; tokenLimits?: TokenLimits | undefined; /** * Registration-supplied rates (USD per 1M tokens), set by custom * provider/model files or runtime registration. Resolves as a user-origin * price, outranked only by a manual config price. Absent means the * registration stated no price (NOT free): pricing falls through to * provider/catalog sources or honest unknown. */ pricing?: ManualModelPrice | undefined; } export interface RuntimeProviderRegistration { readonly provider: LLMProvider; readonly models?: readonly ModelDefinition[] | undefined; readonly suppressCatalogModelRegistryKeys?: readonly string[] | undefined; readonly replace?: boolean | undefined; } export interface ProviderRegistryOptions { readonly configManager: Pick; readonly subscriptionManager: Pick; readonly secretsManager: ProviderRuntimeMetadataDeps['secretsManager']; readonly serviceRegistry: ProviderRuntimeMetadataDeps['serviceRegistry']; readonly capabilityRegistry: ProviderCapabilityRegistry; readonly cacheHitTracker: CacheHitTracker; readonly favoritesStore: Pick; readonly benchmarkStore: Pick; readonly modelLimitsService?: ModelLimitsService | undefined; readonly featureFlags?: Pick | null | undefined; readonly runtimeBus?: RuntimeEventBus | null | undefined; } //# sourceMappingURL=registry-types.d.ts.map