模型声明与已审查文件预览¶
这是一个本地优先的声明与审查基础。目前没有任何生产模型已准备就绪可供审查。 许可证接受(见下文)在模型被使用时强制执行;安装路径不变。此处任何内容均不构成商业、再分发、版权或声音权利方面的许可。现有模型和引擎偏好均予以保留。
使用前的许可证接受¶
VoiceStudio 不是任何模型的所有者或许可方,也无法授予模型访问权或使用权。任何许可证类别并非允许商业使用(MIT、Apache-2.0、BSD、ISC、CC0、CC-BY)的模型都必须在使用前被接受,包括已下载的模型。这涵盖了非商业、有条件及未识别的许可证,因此默认的 OmniVoice 模型需要一次接受。接受即确认你拥有该模型的许可证为你的用途所要求的权利,例如仅限非商业使用,或从权利持有者处获得单独的许可证以进行商业使用。
- 在接受之前,模型卡片会显示接受许可证以使用,而每个会加载模型的功能(生成、转录、听写、配音、翻译、批处理、工作流、API)都会弹出接受对话框并停止执行,而不是加载模型。不会重新安装任何内容。
- 接受记录会在本地按每个模型单独保存:记录你接受或撤回的时间、你当时所看到确切条款的指纹,以及应用版本。最近 20 次操作会保留为历史记录,显示在许可证对话框的技术详情下。
- 指纹涵盖对话框显示的关于条款的所有内容:许可证、权利持有者、类别、商业、输出、再分发和声音字段、备注、变体条款、链接、证据和模型版本,以及已存储许可证文档的哈希值。如果这些内容中的任何一项在后续应用更新中发生变化,模型将再次被阻止,对话框会说明哪些部分发生了变化。如果复查没有任何变化(仅检查日期变化),则不会再次询问。撤回接受会阻止该模型,直到你再次接受。
- 当一个功能同时需要多个未被接受的模型时(例如 OmniVoice 及其分词器),对话框会显示每个模型的完整许可证,并要求对每个模型分别进行单独确认。
- 之前对 Supertonic-3 的许可证接受会延续有效。
- API 和无界面(headless)用户会收到 HTTP 403,响应体为
{"code": "model_licence_required", "models": [...]},其中列出每个模型的repo_id和条款fingerprint。在查看条款后,通过POST /models/licenses/accept并附带请求体{"repo_id": "...", "fingerprint": "...", "accepted": true}进行接受;GET /models/licenses/acceptance/{repo_id}可报告状态(not_required、accepted、not_accepted、withdrawn或terms_updated),GET /models/licenses/details/{repo_id}提供完整披露和历史记录,而POST /models/licenses/revoke可撤回接受。在共享服务器上,接受和撤回需要管理员权限。
在模型管理器中¶
每个模型卡片都有一个带彩色图标的许可证:按钮。其形状和颜色显示声明许可证的类别,工具提示和可访问名称中包含许可证名称、类别和审查状态:
| 图标 | 类别 | 已声明的许可证 |
|---|---|---|
| 绿色公文包 | 允许商业使用 | MIT、Apache-2.0、BSD、ISC、CC0、CC-BY |
带 ! 的琥珀色公文包 |
有条件商业使用 | OpenRAIL、CC-BY-SA、GPL 系列、Llama 社区许可证 |
| 带删除线的红色公文包 | 仅限个人和研究使用 | 任何 -NC 许可证或已记录的非商业限制 |
| 灰色问号 | 未识别许可证 | NOASSERTION、other,或任何尚未被映射的许可证 ID |
记录采用其最具限制性的部分,包括受限制的文件变体。类别仅概括已声明的文本;它不是审查结果,在记录被清除之前,“未审查”会一直显示。新的许可证 ID 必须在 backend/services/model_licenses.py 中进行映射(否则 CI 会失败)。
点击它会打开许可证对话框,对话框以纯色背景显示,顺序如下:
- 摘要:用平实的语言说明许可证类别、已声明的许可证、审查状态以及你的接受状态(已接受并附日期和条款指纹、已撤回、条款已更新并说明变更内容,或未接受)。
- 该许可证允许的内容:模型的商业使用、生成音频的商业使用、共享模型文件,以及声音和录音同意(始终由你负责),每项都带有状态。
- 来源:权利持有者以及指向许可证和模型页面的链接。
- 可折叠部分:文件与变体(具有自身条款的文件;适用最具限制性的条款)、已记录备注、技术详情(模型和证据版本、证据日期、条款指纹、注册表版本和接受历史;长哈希值会缩短显示,并带有复制按钮)以及已核验安装(预览)。
- 始终可见的页脚:关于 VoiceStudio 不是许可方且无法授予访问权的声明、确认复选框,以及接受许可证或撤回接受。
当另一个功能需要未被接受的模型时所打开的对话框,会为涉及的每个模型显示相同的完整视图。未映射或冲突的许可证数据会回退到未知类别,绝不会回退到商业类别。仅凭许可证标签并不能确立完整工作流的权利。
置顶的证据链接与当前上游页面是分开的。打开外部链接会使用浏览器;当前页面可能描述的是较新版本。应用将上游文档渲染为静态文本,并且只接受不含内嵌凭据的 HTTPS 链接。法律文档文本不会被解释为代码。
准备已审查安装是一个可选预览,不是普通的“下载”按钮。它读取随附的证据,不会下载模型的字节数据。初始注册表会返回被阻止的计划,因为组件闭包、精确文件清单、文档字节、修订版本一致性或提供方访问权限仍未得到验证。被阻止的计划没有确认复选框或传输操作。该预览目前仅支持本地目标。
为了将来进行完全有证据支持的选择,预览界面会显示精确的来源、目标、组件、修订版本、文件哈希、完整文档和通知版本。复选框默认为未选中状态。确认并验证文件会在将这些确切文件传输到单独的已审核缓存之前,记录本地的确认操作。成功意味着这些字节已被验证;它们不会被激活用于正常使用。原型传输是同步的,一旦开始便无法取消。对话框会防止重复提交,并且在该传输过程中不允许关闭。它不集成常规的下载进度任务。
关闭预览或更改目录摘要/目标会使 UI 中准备好的计划和复选框失效。已更改或过期的计划会被后端拒绝;请重新准备后再重试。传输失败可能会留下已记录的精确回执,但绝不会静默确认不同的选择。
确认的含义¶
回执记录了针对精确准备的通知所执行的明确本地操作。它并不证明用户已逐字阅读、以组织授权行事或获得了单独的许可。它不代表接受提供商条款、授予门控访问权限、建立语音同意、重新许可输出或放弃任何人的权利。应用的 AGPL 许可证和任何商业应用许可证涵盖各自独立的权利。
后端的原始通知为英文(locale: en)并按原文显示。回执的提示摘要涵盖的是该版本化的原始文本,而非本地化的周边控件或说明性复选框标签。UI 控件在所有受维护的渲染器语言环境中均已翻译;上游文档和记录的证据说明保持其原始语言。本预览不声称提供任何翻译后的法律协议。
旧版 Supertonic/PocketTTS 引擎的布尔值保持不变。它们不会被追溯日期、转换为回执或被视作提供商接受。现有已安装的修订版本不会被此变更删除、撤销或被认定为已接受。
API 与本地记录¶
- 使用
repo_id和target调用POST /models/install/prepare会返回版本化计划、阻塞项和readiness。它不会下载任何模型。 POST /models/install/commit需要精确的plan_id、plan_digest、完整的acknowledged_document_ids、字面布尔值acknowledged: true和target: local。它会重新检查当前计划,在传输前存储本地回执,并验证每个已下载的文件。它不会调用常规的模型安装器或 SDK 回退。GET /models/licenses/receipts/{plan_digest}导出已有的本地回执及其存档证据,无需网络访问。响应为no-store,并受应用浏览器来源保护的限制。DELETE /models/licenses/receipts/{plan_digest}删除该本地确认记录。它保留模型文件和存档证据。删除并不会消除法律义务或撤销许可证;后续的已审核文件操作不得假定被删除的确认记录仍然存在。POST /models/licenses/verify/{plan_digest}离线检查记录的精确文件。它是一个显式辅助工具;常规的首次使用加载器不会调用它。
记录存放在当前 OS 配置文件的应用数据目录下的 model-notices 中。预览不会为此目的传输回执,也不会收集姓名、电子邮件、IP 地址、设备指纹、令牌、提示词、音频、语音样本或私有商业合同。文件下载仍使用所选提供商端点及其正常的身份验证规则。本地文件和设备时间戳并非防篡改的法律交易证据。导出/删除目前使用 API;尚未实现专门的回执管理界面。
计划摘要使用后端文档化的 Python 规范 JSON 格式 v1;不声称跨语言 RFC 8785 互操作性。原始条款和工件字节使用 SHA-256。测试文档和哈希仅保留在测试中,不能替换到生产注册表中。
尚待完成的边界¶
许可证接受在模型被使用时强制执行(见上文)。以下现有路径不受已审核安装预览的影响,保持不变,因此其精确文件证据不适用于这些路径:
- 常规的
/models/install、推荐、模型包、修复和缓存恢复;引擎安装和 sidecar 引导 - 直接 SDK 辅助和回退下载,包括 PocketTTS 非克隆权重和选定的语音嵌入
- 没有注册表记录的动态资产(WhisperX 对齐和 VAD、FunASR VAD、Argos 包、TTS 插件、用户覆盖和导入的模型)
提供商特定的协议/访问、用户选择的变体/语音解析、私有商业政策决策、模型激活以及完整的可执行依赖/再分发通知覆盖均未实现。宽松的引擎许可证并不能解决任何这些模型或输出问题。
在启用任何生产环境选择或更广泛的强制执行之前,请验证:
- [ ] 精确的生产组件/变体闭包和来源;可复现的不可变工件清单、原始文档哈希和所需通知
- [ ] 范围化的上游许可和条件审查,包括输出使用、再分发和兼容性;单独的提供商同意/访问协议
- [ ] 所有适用的 UI/API/CLI/worker/SDK 路径在未声明或更改的字节之前停止;回退和首次使用不能绕过相同的边界
- [ ] 中断的传输、重复提交、更改的计划、持久化失败、离线重用、回执删除和历史版本行为均已测试
- [ ] 精确的应用/网站/存储库投影一致性和过期输出检查通过
- [ ] 真实应用键盘操作、焦点返回、屏幕阅读器播报、200–400% 缩放、小窗口、RTL、长条款以及 macOS/Windows/Linux 行为均已验证
检查¶
在空模型缓存下运行离线后端/清单检查,以及 electron/package.json 中描述的常规 Electron 语言环境、测试和类型检查命令。重点回归覆盖位于 tests/test_model_license_workflow.py 和 electron/src/renderer/src/features/settings/model-license.test.tsx。
python scripts/check_model_licenses.py
python scripts/generate_model_license_data.py --check
HF_HUB_OFFLINE=1 pytest tests/test_model_license_workflow.py tests/test_model_licenses.py
cd electron
bun run locale:check
bun run typecheck
bun run test
聚焦的 UI 测试仅使用合成计划。通过这些测试并不代表生产模型证据已经完整,也不代表完整的打包应用已通过跨平台无障碍性或首次使用集成测试。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 om/VoiceStudio