export interface RecommendedModel { id: string; name: string; type: 'llm' | 'embedding'; sizeHint: string; } export interface LocalModelInfo { filename: string; /** 文件大小(字节) */ size: number; /** 最后修改时间 ISO 字符串 */ updatedAt: string; /** 推断的模型类型:llm / embedding(根据文件名关键词) */ inferredType: 'llm' | 'embedding' | 'unknown'; /** 与推荐列表一致的展示名称(能匹配到预设时),否则为 filename */ displayName: string; } export interface DownloadProgress { status: string; completed?: number; total?: number; percent?: number; } export declare class LocalModelsService { private readonly cacheDir; private recommendedCache; /** 正在下载的任务:modelUri → 进度 */ private downloadingMap; constructor(); /** 从 presets/recommended-local-models.json 加载推荐列表,失败则用内置默认 */ private getRecommendedModelsFromPreset; /** 列出本地已缓存的 GGUF 模型文件,displayName 与推荐列表一致(来自 preset 匹配) */ listModels(): Promise; /** 删除本地缓存的 GGUF 模型文件 */ deleteModel(filename: string): Promise; /** 获取推荐模型列表(来自 preset,与已安装展示名称一致) */ getRecommendedModels(): Promise; /** 仅返回尚未安装的推荐模型;已安装的视为「推荐列表中的一员」不再出现在备下载区 */ getRecommendedToDownload(): Promise; /** 检查指定模型(uri 或文件名)是否已在缓存目录存在 */ isModelFilePresent(modelIdOrUri: string): boolean; /** 正在下载任务的 AbortController,用于取消 */ private abortControllerMap; /** 获取某个 modelUri 的下载进度(不存在则表示未在下载) */ getDownloadProgress(modelUri: string): DownloadProgress | null; /** * 取消指定 modelUri 的下载(若正在下载)。 */ cancelDownload(modelUri: string): void; /** * 返回所有推荐模型及是否已安装,用于前端展示「已下载」或下载按钮。 */ getRecommendedWithStatus(): Promise>; /** * 后台下载模型(通过 node-llama-cpp resolveModelFile)。 * useMirror=true 使用国内镜像 hf-mirror.com,false 使用官方 huggingface.co。 * 返回后立即响应,进度通过 getDownloadProgress 轮询获取。 */ startDownload(modelUri: string, options?: { useMirror?: boolean; }): Promise<{ filename: string; }>; private runDownload; }