export type RouteMode = "priority" | "weighted" | "speed" | "auto-task" | "cost-budget"; export interface ProviderBinding { /** "/",与 openclaw.json#models.providers.* 对齐 */ id: string; /** 数值越小越优先;priority 模式下选最小,auto-task 模式下 tier 内 tiebreaker */ priority: number; /** 0-100 权重,weighted 模式下抽样用;speed 模式下被 latency 自动调整 */ weight: number; enabled: boolean; } export interface ModelTierConfig { providers: ProviderBinding[]; } /** * v5.8.5 speed mode 用:每个 provider 的最近运行时统计(auto 维护,用户只读) */ export interface SpeedSample { p50Ms: number; p95Ms: number; errRate: number; samples: number; /** ISO 时间戳;超过 1h 视为陈旧需要重置 */ windowStartedAt: string; } export interface ModelRouteConfig { mode: RouteMode; /** task tier 名(flash / pro / reasoner / fast / vl / hailuo)→ provider 列表 */ models: Record; /** v5.8.5 占位:providerId → 最近延迟 + 错误率 */ speedTracking?: Record; /** schema 版本,方便未来 migration */ schemaVersion?: number; } export declare function getModelRouteConfigPath(): string; /** * v6.1.2 默认值——和 PROVIDER_REGISTRY 保持一致。 * * 之前的默认(deepseek/* + google-ai-studio/* + custom-sidus-ai/*)三个 provider * 都不存在于通用 OpenClaw 配置里,导致 selectProvider 选了它们后 runtime 找不到 * provider,把 model id 整串塞给 fallback provider,被远端拒 400。 * * 新默认只用通用名 sidus(DeepSeek/GLM 全家)+ minimax(M2.7);vl/hailuo 留空, * 让上层走 OpenClaw 原生 fallback,避免发不存在的 model id。 */ export declare function getDefaultModelRouteConfig(): ModelRouteConfig; export declare function loadModelRouteConfig(): ModelRouteConfig; export declare function saveModelRouteConfig(config: ModelRouteConfig): void; /** * 按当前 mode 从给定 tier 选一个 provider。 * 返回 null 表示该 tier 无可用 provider(让调用方走 openclaw fallback)。 */ export declare function selectProvider(config: ModelRouteConfig, taskTier: string): { id: string; reason: string; } | null; /** * 修改单个 provider 字段(tier + providerId 定位)。返回是否找到。 */ export declare function patchProvider(config: ModelRouteConfig, tier: string, providerId: string, patch: Partial>): boolean; /** * 列所有 tier × provider 的当前状态。 */ export declare function listAllProviders(config: ModelRouteConfig): Array<{ tier: string; provider: ProviderBinding; speed?: SpeedSample; }>;