本地模型 JSON 清单选择器
App 设置的本地模型从已配置的 JSON 清单读取候选,管理员选择模型,版本、总大小、文件校验和与地址自动展示。多文件模型保持完整文件列表,不把模型简化成单个 URL,也不再手填下载基础地址。
数据与兼容
- 清单地址仍保存于
groups.endpoints.modelManifestUrl。模型 ID 是models对象的稳定键;选中后仅保存 ID 和启用状态,文件地址、大小与 hash 仍以清单为准,不复制到配置。 - 公开配置的 canonical 字段为
groups.models.asr/refine.{lite,pro}.{id,enabled};后台同时保持groups.models.local.*.{modelId,enabled}兼容别名。二者一起提交时必须一致。 - 选择/启用模型后,兼容
models.manifest.source记为cdn。打开页面不修改配置、不默认选中首个模型。旧modelBaseUrl/modelDownloadBaseUrl/signedUrlRequired值继续保留,常用界面不再提供这些手填控件。 - “官方 CDN”来自经过验证的文件 URL,不是读取旧
source=oss/cdn开关猜测。文件可存于 OSS、由 CDN 回源;这里不会上传文件、配置 CDN 或生成签名。 - 清单新增/修改模型 ID,或重新启用模型时,后端重新核对清单成员与用途;改变清单地址时先校验域名和路径,即使全部模型已禁用也不能保存不可信地址;存在启用项时还会重新核对清单。全部禁用时可以清空地址。未改的历史禁用占位值(例如尚未提供文件的 Pro ID)可以保留。清单失败保留已有编辑并提供重试,过期请求不会覆盖最新结果。
管理接口
GET /admin/app-settings/local-model-options?manifestUrl=<URL> 需要 JWT 和 site:admin,返回 Cache-Control: no-store。省略 URL 时读取已保存配置;传入 URL 可预览尚未保存的清单。只读,不下载模型文件。
响应 data 包含 manifestUrl、fetchedAt 和 options;每项包含 id/name/kind/version/addressType/sizeBytes/files。文件项包含 name/displayUrl/signed/sizeBytes/sha256。displayUrl 只用于后台展示,已剥离 query;signed=true 表示原 URL 带查询参数。客户端实际下载必须读取原清单的完整 url,不能使用脱敏展示地址。
清单保留 schemaVersion: 1 和现有 models -> version/files 格式,可选 name(显示名)和 kind(asr 或 refine)为目录元信息,不是客户端运行能力授权。没有 name 时展示 ID。历史清单没有用途字段时,仅 sensevoice-small-int8=asr、qwen3.5-0.8b-q4=refine 使用经核对的兼容表;未知用途模型可见但不可配置进特定用途槽位。不根据文件扩展名或模型名字猜用途。
下载信任与错误
当前命名策略 LOCAL_MODEL_DOWNLOAD_POLICY 仅允许 HTTPS dl.wainao.chat 的 /reai/models/model-manifest.json,文件须位于同域 /reai/models/。其他域名/路径不能靠后台改来源开关接入,须先扩充服务端及客户端信任合同。海外节点当前暂停发布。
获取时先验证公网 DNS 并固定连接 IP,保留 TLS SNI/Host;无认证转发、不跟随重定向;含 DNS 在内 10 秒超时,JSON 响应流上限 2 MiB,最多 256 个模型、每模型 64 个文件。文件要求正整数大小(单文件不超过 2 GiB)及 SHA-256。
错误码包括 local_model_url_invalid、local_model_manifest_invalid、local_model_manifest_unavailable(503)、local_model_selection_unavailable、local_model_selection_invalid、local_model_alias_conflict;不降级为虚假的空目录成功。
Driver 接入边界
2026-09-09 与 ai-vibe-board 只读核对:当前 Driver 本地 Voice 固定运行 SenseVoice,读取上述清单但不消费这里的本地槽位。Qwen 文件存在不代表 Driver 已具备本地润色运行能力;Driver 润色仍跟随 Agent。Driver/Voice 解析配置、按实际 runtime 能力过滤、安装与切换由 ai-vibe-board 自己负责。后台配置保存不能作为 Driver 端到端生效证据。客户端最终候选须满足:管理员启用、清单有效、客户端实际支持;下架/不支持不得悄悄切到首项。