Skip to content

feat: 增加完全离线长音频转写 - #72

Open
damingishere-coder wants to merge 7 commits into
masterfrom
codex/feat-offline-local-transcription
Open

feat: 增加完全离线长音频转写#72
damingishere-coder wants to merge 7 commits into
masterfrom
codex/feat-offline-local-transcription

Conversation

@damingishere-coder

@damingishere-coder damingishere-coder commented Aug 31, 2026

Copy link
Copy Markdown
Owner

改动摘要

  • 默认语音转写改为完全离线 local faster-whisper,固定 large-v3@edaa852e / CUDA / float16。
  • 离线锁在创建任务和发送 HTTP 前阻断显式火山请求,并保留原火山配置供人工回滚。
  • 增加固定版本模型初始化、断点续传、官方大小与 SHA-256 校验、Windows cuBLAS DLL 加载和 medium / CPU / int8 兜底。
  • 保留 120 秒分块、5 秒重叠和 SQLite checkpoint;模型版本写入 run,音频指纹升级为完整 SHA-256。
  • 本地转写段落与逐词文本新增 OpenCC t2s 字形转换,固定输出简体并保留台湾用词;转换版本进入 checkpoint 身份,旧繁体分块不会复用。
  • AI 完整性门禁前移到 AI_ANALYZING;不完整结果直接失败,选片阶段保留二次防护。
  • 全自动重试新增计费不确定 409 确认:同输入只补不确定单元,transcript 变化则创建独立 AI Job;有下游切片或发布记录时拒绝覆盖。
  • Codex 单窗口默认超时从 300 秒调整为 600 秒,任务详情增加明确的二次确认交互。
  • 增加状态 API、系统状态 UI、诊断/基准/转写备份转换脚本、专项测试与项目文档。

验证结果

  • 最终完整 pytest:825 passed,9 个既有弃用警告。
  • 专项回归:66 passed,覆盖段落/逐词繁转简、台湾用词、非中文、旧 checkpoint 失效、AI 阶段失败、409 确认、同输入续跑、变输入新 Job和下游保护。
  • Ruff、compileall、app/static/js/app.js 语法和 git diff --check 全部通过。
  • release_gate.ps1 按设计拒绝:当前任务分支没有正式版 acceptance-results/latest.json;没有伪造发布验收证据。
  • 20 秒真实中文音频:large-v3 / CUDA / float16 成功,无 CPU 回退。
  • 10 分钟样本:83.2 秒,336 条时间戳。
  • 41 分 18 秒素材:先在 1/22 分块后中断,再复用 checkpoint;续跑 291.85 秒,1085 条时间戳,22/22 完成。
  • 转写进程采样 TCP 连接数 0;RTX 4070 Ti 采样 GPU 65%、显存约 8.1GB。
  • large-v3 与 medium 模型均通过固定大小、官方 SHA-256 和实际设备加载验证。

风险与待确认

  • 任务 614fb38401e0 的现场恢复会在活动 SQLite 与 transcript 备份后执行;不触发真实平台发布。
  • OpenCC 为新增固定运行依赖,部署时必须在项目虚拟环境安装 1.4.2。
  • 本轮不包含说话人分离,不修改发布 Worker、平台登录、排期或投稿策略。
  • PR 不自动合并;等待 CI 和用户确认。

回滚

  • 代码回滚可撤销本次 3 个提交;运行 .env 的 Codex 超时可恢复到备份值。
  • 当前 transcript 转换前会保存到任务 transcripts/backups/,可原位恢复。
  • 恢复旧 TRANSCRIPTION_PROVIDER 并设置 TRANSCRIPTION_OFFLINE_ONLY=false,可回滚离线 Provider;不删除火山配置、模型缓存、历史 transcript、旧 AI Job 或 SQLite checkpoint。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant