/** * @zhin.js/ai - Model Registry * 模型发现、能力检测与本地缓存 * * 启动时通过 Provider API 查询可用模型并持久化到本地 JSON 文件, * 二次启动时直接读取缓存,仅在模型列表变化时增量更新详情。 */ import type { AIProvider } from './types.js'; /** 单个模型的详细信息 */ export interface AIModelInfo { /** 模型 ID(如 gpt-4o、qwen2.5:14b) */ id: string; /** 所属 Provider 名称 */ provider: string; /** 上下文窗口大小(token 数);0 或 undefined 表示未知 */ contextWindow?: number; /** 参数规模(如 "7.6B"、"14B") */ parameterSize?: string; /** 模型家族(如 "llama"、"qwen2") */ family?: string; /** 量化级别(如 "Q4_K_M"、"Q8_0") */ quantization?: string; /** 模型能力列表 (Ollama: ["completion","tools","vision"]) */ capabilities?: string[]; /** 缓存时间戳 */ cachedAt: number; } /** 模型选择任务类型 */ export type ModelTask = 'chat' | 'vision' | 'tool_call' | 'summary'; export declare class ModelRegistry { private models; private cachePath; constructor(dataDir?: string); /** 从本地文件加载缓存 */ loadCache(): boolean; /** 持久化缓存到本地文件 */ saveCache(): void; /** * 发现单个 Provider 的所有可用模型。 * * 1. 调用 provider.listModels() 获取模型 ID 列表 * 2. 和缓存比对,仅对新模型调用 getModelDetails(增量更新) * 3. 更新内存缓存 */ discover(provider: AIProvider): Promise; /** * 发现所有 Provider 的模型。 */ discoverAll(providers: AIProvider[]): Promise; /** 获取单个模型的详细信息 */ private fetchModelDetails; /** Ollama /api/show 获取模型详情 */ private fetchOllamaModelDetails; /** 从模型名推断信息(适用于 OpenAI 兼容 API,含 router prefix 格式) */ private inferFromModelName; /** * 根据任务类型选择最合适的模型。 * * 优先级: * 1. 匹配任务所需能力(vision 任务需要 vision 能力) * 2. 参数规模越大越好(更强的推理能力) * 3. 如果都满足,选上下文窗口最大的 * * @param providerName 指定 provider,默认取第一个 * @param task 任务类型 * @param preferredModel 用户显式指定的模型(最高优先级) */ selectModel(providerName: string, task?: ModelTask, preferredModel?: string): string | undefined; /** * 返回按优先级排序的候选模型列表(用于自动降级)。 * 第一个是最优选择,后续为降级候选。 */ selectModels(providerName: string, task?: ModelTask, maxCandidates?: number): string[]; /** 按 parameterSize → tierScore → contextWindow 排序 */ private rankCandidates; /** 获取某个 provider 的所有模型信息 */ getModels(providerName: string): AIModelInfo[]; /** 用配置白名单覆盖某 provider 的模型缓存(yaml 显式 models 列表时用) */ seedProviderModels(providerName: string, modelIds: string[]): void; /** 获取所有 provider 的模型信息 */ getAllModels(): Map; /** 获取单个模型信息 */ getModel(providerName: string, modelId: string): AIModelInfo | undefined; /** 查找支持特定能力的模型 */ findModelsWithCapability(capability: string, providerName?: string): AIModelInfo[]; /** 缓存是否为空 */ isEmpty(): boolean; /** 清除缓存 */ clear(): void; } /** 从 router 模型 ID 中提取实际模型名(去掉 prefix/) */ export declare function extractModelRoot(modelId: string): string; /** * 计算模型层级分数(0-100),用于在缺少 parameterSize 时排序。 * 分数越高表示模型越强。适用于 router 聚合 API 返回的模型列表。 */ export declare function computeTierScore(modelId: string): number; //# sourceMappingURL=model-registry.d.ts.map