```
feat(AI): 切换模型下载源至魔搭官方仓库 - 添加 modelScopeRepo 函数,为不同模型类型配置魔搭官方仓库ID - 修改 fileURL 函数,主模型(MNN/MLX)优先使用魔搭官方源, 已废弃的VL模型回退自建镜像 - 更新文档注释,说明魔搭OSS支持Range请求和断点续传特性 refactor(i18n): 优化AI相关界面文本和提示信息 - 新增数值验证相关的国际化字符串 - 调整AI整理失败提示文案,更明确表达原意 - 更新AI解读不可用提示,引导用户前往模型管理页面 - 补充删除操作的相关确认提示文本 - 添加录音权限错误提示和识别失败重试建议 chore(i18n): 清理过时的解析失败提示文本 ```
This commit is contained in:
@@ -11,10 +11,21 @@ struct ModelFile: Equatable, Sendable {
|
||||
/// 字节数与服务器素材逐一核对一致,见
|
||||
/// docs/superpowers/specs/2026-05-29-model-download-design.md 附录 A。
|
||||
nonisolated enum ModelManifest {
|
||||
/// 自建 Caddy 静态服务(用户自建 HTTPS 反代)。
|
||||
/// 自建 Caddy 静态镜像。现仅 `.vl`(已废弃,不再下载)回退用;主模型 / MLX 兜底已切魔搭官方。
|
||||
/// 备选纯 IP(需 App 端 ATS 例外): http://101.132.124.52:5244/
|
||||
static let baseURL = URL(string: "https://file.myv0.com/")!
|
||||
|
||||
/// 各模型的魔搭(ModelScope)官方仓库 id。大陆可达;`resolve/master` 会 302 跳阿里 OSS,
|
||||
/// OSS 支持 Range,断点续传穿透重定向(实测 206 + 精确分片)。各文件大小与本清单逐一核对一致(2026-06 实测)。
|
||||
/// 注意组织名:MNN 模型在魔搭组织为 `MNN`(非 HuggingFace 的 taobao-mnn);MLX 沿用 mlx-community。
|
||||
static func modelScopeRepo(for kind: ModelKind) -> String? {
|
||||
switch kind {
|
||||
case .mnnLLM: return "MNN/Qwen3.5-2B-MNN"
|
||||
case .llm: return "mlx-community/Qwen3.5-2B-4bit"
|
||||
case .vl: return nil // 已废弃,不再下载 / 分发,不提供魔搭源
|
||||
}
|
||||
}
|
||||
|
||||
static func files(for kind: ModelKind) -> [ModelFile] {
|
||||
switch kind {
|
||||
case .llm:
|
||||
@@ -79,9 +90,14 @@ nonisolated enum ModelManifest {
|
||||
files(for: kind).reduce(0) { $0 + $1.bytes }
|
||||
}
|
||||
|
||||
/// 单个文件的下载 URL = baseURL / <仓库名> / <相对路径>。
|
||||
/// 单个文件的下载 URL。主模型 MNN / MLX 兜底走魔搭官方 `resolve/master`;
|
||||
/// 已废弃的 `.vl` 回退自建镜像(实际不会被下载)。
|
||||
static func fileURL(for kind: ModelKind, file: ModelFile) -> URL {
|
||||
baseURL
|
||||
if let repo = modelScopeRepo(for: kind) {
|
||||
return URL(string: "https://modelscope.cn/models/\(repo)/resolve/master/")!
|
||||
.appendingPathComponent(file.path)
|
||||
}
|
||||
return baseURL
|
||||
.appendingPathComponent(kind.rawValue, isDirectory: true)
|
||||
.appendingPathComponent(file.path)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user