/** * v2 variant 补齐 * * 2.x 宿主遇到 `model.variants` 里不存在的 variant 会抛 `VariantUnavailableError` * (1.x 只是静默降级),导致子代理加载失败。这里的做法是把 agent 配置声明的 * variant 直接补进模型目录,让宿主能找到它。 * * 本模块刻意保持**零依赖**(不 import 宿主包、不 import `node:*`、不 import * `../index`),以便单独单测。 */ /** 目录里单个模型的只读视图(仅取我们需要的部分) */ export interface CatalogModelInfo { /** 宿主 schema:variants 是数组(不是字典)。这里声明宽松,靠运行时形状判断 */ variants?: unknown; /** 模型所属 AI SDK 包名,用于生成正确的 variant body */ api?: { package?: string; }; } /** * 补齐所需的最小目录能力。 * * - `get` 用于确认模型**已存在**——这一步不可省略:宿主 `update` 是 upsert, * 对未知 provider/model 会创建一个能力与 limit 都不完整的空模型,污染全局目录。 * - `update` 只用于就地修改**已存在**的模型。 */ export interface VariantBackfillCatalog { model?: { get?(providerID: string, modelID: string): CatalogModelInfo | undefined; update?(providerID: string, modelID: string, fn: (draft: CatalogModelInfo) => void): void; }; } /** 一条待补齐的声明 */ export interface DeclaredVariant { providerID: string; modelID: string; variant: string; } /** * 按 provider 的 AI SDK 包名生成 variant 的请求体片段。 * 与宿主内置生成器逻辑对齐(packages/core/src/plugin/variant.ts:34-38 对应 * openai-compatible 的 snake_case 写法)。 * 拿不到包名时返回空对象:只占位、不改请求,至少不会触发 VariantUnavailableError。 */ export declare function buildVariantBody(apiPackage: string | undefined, variant: string): Record; /** * 把声明的 variant 补进 catalog。 * - 模型不存在 → 跳过(宿主 update 是 upsert,绝不能创建空模型) * - 同 id 已存在 → 跳过(用户显式声明优先,不覆盖) * - 幂等:重复调用不产生重复条目 */ export declare function backfillVariants(catalog: VariantBackfillCatalog, declared: DeclaredVariant[], onDiag?: (message: string) => void): void; //# sourceMappingURL=variant-backfill.d.ts.map