TTS MultiModel v2.2.4
这个版本里用户能感觉到的两处
- 12GB 显存档直切引擎不再 503(#84):切换路径原先是"先预检再清场",于是预检永远看见上一个引擎还占着显存。改成先清场再预检,报错文案给可操作下一步。
真机复验:voxcpm2 → indextts2 → indextts20 → voxcpm2连续四次直切(全程不手动 unload,load 前空闲最低 609 MiB)→ 四步全HTTP 200 / status=ok,一次 503 都没有;末了真合成一段并回读/api/audio/*.wav,得 206,580 B 的 RIFF 音频。 - persona / 历史卡片的
onclick注入面收口(#99):数据不再拼进 HTML 属性,改事件闭包接线;信息面板的同源裸插值一并处理。服务端吐出的command_palette.js现在只有gotoTab(activateTab0 处)。
发布链路(这个版本的另一半内容)
- 性能门禁(issue #118):判据从
mean:20%双向换成median单向 >50%,并逐条打印对比表。同一份代码在 runner 间的实测摆动是 17%–80%,而旧判据抓到的"回退"全是变快。 - 顺着查下去发现门禁的三级基线原本三条都不通:Actions 缓存 10.23 GB / 配额 10 GB,main 存的基线两小时就被驱逐;Release 资产那两步的
if startsWith(ref,'refs/tags/')在现有触发器下永不成立;仓内benchmarks/baseline.json是 0 条占位且没人读。现在按 L1 → L3 退让、空占位单独告警,L3 已用 main 真 run 填了 5 条 median。 - release-please 的
extra-files第一次在真 release PR 上验证:type: yaml会整份重写config.yaml(160 增 / 160 删,注释行 96 → 0),已摘掉,并加闸要求每条自动位"今天确实命中"。 - 记一条会咬人的机制:release PR 拿不到任何 CI 检查(
GITHUB_TOKEN产生的提交不级联触发 workflow)→ 手工同步位不会红在 PR 上,只会红在发布之后的 main 上。本次因此走手工路径(关掉 #120)。 - §7b 依赖复算跑完 ①②③:候选锁与真锁不同源(97 vs 92 条),复算会把
transformers抬到 4.52.4 而 IndexTTS 要 4.52.1 → 候选锁未采纳;④ 的 GB 级真装仍待验收。 - 治理文件锁 LF;
.mailmap补上此前漏掉的 249 个提交(第三个"贡献者");CODEOWNERS指到真实路径(注意它现在拦不住合并,require_code_owner_reviews未开)。
验收数字
| 项 | 结果 |
|---|---|
| 全量测试(非 e2e,与 CI 同口径) | 2131 passed / 38 skipped / 0 failed(collected 2169) |
| Playwright E2E | 在该改动合入的那次 push 上 completed/success(本 PR 未触发改模板) |
python -m build + twine check |
双 PASSED |
| wheel 内容 | 1065 条;完整性三件套(清单 / Ed25519 签名 / 验签公钥)全部在场 |
解包后 run_startup_selfcheck(enforce=True) |
total=16 passed=16 failed=0 manifest_signed=true |
| 卸载与收尾 | nvidia-smi used 9489 → 3344 MiB;停服后 7869 无监听、无进程,used 2790 MiB |
已知未覆盖(说清楚,别让人自己踩)
- 资产只有 wheel + sdist + SHA256SUMS:不含 26 GB 便携分卷(core / torch / 13 个 model 卷)与桌面增量包。
Setup.exe的真机安装验收没做过(NSIS 那条链路零 workflow 覆盖)。- tag 是注解 tag、无 GPG 签名(仓库没有
GPG_PRIVATE_KEY这个 secret,与 v2.0.1–v2.2.3 一致)。 ghcr.io/.../tts-multimodel:2.2.4由docker-publish.yml在本次 tag push 时构建(Trivy 阻断逻辑在前),发布说明这边不预先声称镜像已在 —— 本机的 token 看不到 ghcr(匿名 403、gh api packages404)。- §7b 的 ④(复算锁真装 + 三引擎复验)未做,#89/#90/#91 三条 dependabot 因此仍挂着。
- 新立的账:issue #130 —— 服务端模板里还有 7 处在
onclick属性内用 HTML 转义保护 JS 字符串(persona 名可截断字符串字面量)。它需要浏览器侧验收,所以没有塞进这个被 tag 的构建里。
装法
本仓不往 PyPI 发布(包名只是 sdist/wheel 的元数据),装的是本 Release 的资产:
pip install ./tts_multimodel-2.2.4-py3-none-any.whl # 或 gh release download v2.2.4
sha256sum -c SHA256SUMS.txt # 装前先比哈希
python scripts/generate_integrity_manifest.py && python scripts/sign_integrity_manifest.py # 源码检出想开 enforce 时权重不随包分发(约 26 GB),按 README 的 model/ 说明挂载。