fix(transcriber): 修复 large-v3-turbo 因仓库 404 无法下载

Systran/faster-whisper-large-v3-turbo 已从 HuggingFace 下架(API 返回
401/404,仓库不存在)。用户点击下载后,后台 snapshot_download 立即抛错
被吞掉,_downloading 置为 failed 但状态接口只回传 downloading/downloaded
两个布尔,于是表现为:无进度转圈、状态一直「未下载」、前端无错误提示。

改用社区维护的 CT2 转换版 deepdml/faster-whisper-large-v3-turbo-ct2:
HF 直链可达(200,无重定向,保证缓存目录名与存在性检测一致),含
model.bin 等全部所需文件,与 faster-whisper 的 large-v3-turbo 等价。

附回归测试,断言 large-v3-turbo 解析到存活仓库而非已失效的 Systran 仓库。

Closes #402

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
huangjianwu
2026-06-23 10:01:00 +08:00
parent f072996db5
commit 3841719d5a
2 changed files with 21 additions and 4 deletions

View File

@@ -6,7 +6,8 @@
检测三处,用户想用命名不符合该约定的模型(比如社区微调版、或自己下到本地的模型)就接不上。
本模块把映射**显式化 + 可配置**(对齐 mlx_whisper_transcriber.MLX_MODEL_MAP 的模式):
- 内置size → Systran/faster-whisper-{size}
- 内置size → faster-whisper 兼容的 CT2 repo_id多数为 Systran/faster-whisper-{size}
turbo 用社区维护版,见 BUILTIN_WHISPER_MODELS
- 自定义:用户在 config/whisper_models.json 登记 {名称: "<repo_id 或本地路径>"}
JSON 持久化Docker 下随 config 卷持久化)
@@ -22,7 +23,8 @@ from app.utils.logger import get_logger
logger = get_logger(__name__)
# 内置模型size → faster-whisper 兼容的 HF repo_idCTranslate2 转换版Systran 官方维护)。
# 内置模型size → faster-whisper 兼容的 HF repo_idCTranslate2 转换版)。
# 多数档位用 Systran 官方维护的转换版turbo 例外见下。
BUILTIN_WHISPER_MODELS: Dict[str, str] = {
"tiny": "Systran/faster-whisper-tiny",
"base": "Systran/faster-whisper-base",
@@ -31,7 +33,10 @@ BUILTIN_WHISPER_MODELS: Dict[str, str] = {
"large-v1": "Systran/faster-whisper-large-v1",
"large-v2": "Systran/faster-whisper-large-v2",
"large-v3": "Systran/faster-whisper-large-v3",
"large-v3-turbo": "Systran/faster-whisper-large-v3-turbo",
# issue #402Systran 没有 turbo 的 CT2 转换版(Systran/faster-whisper-large-v3-turbo
# 在 HF 上 401/404点下载会静默失败、状态一直「未下载」。改用社区维护的 CT2 转换版
# deepdml直链可达、含 model.bin与 faster-whisper 的 large-v3-turbo 等价)。
"large-v3-turbo": "deepdml/faster-whisper-large-v3-turbo-ct2",
}
# 前端下拉默认展示的内置档位(保持与历史 WHISPER_MODEL_SIZES 一致,不把 8 个全列出来)

View File

@@ -50,7 +50,19 @@ class TestResolve(unittest.TestCase):
def test_builtin_resolves_to_systran(self):
self.assertEqual(self.reg.resolve("tiny"), "Systran/faster-whisper-tiny")
self.assertEqual(self.reg.resolve("large-v3-turbo"), "Systran/faster-whisper-large-v3-turbo")
def test_large_v3_turbo_resolves_to_live_repo(self):
# 回归 issue #402Systran 从未发布 turbo 的 CT2 转换版,
# 原映射 Systran/faster-whisper-large-v3-turbo 在 HF 上 401/404
# 导致下载静默失败、状态一直「未下载」。改用社区维护的 CT2 转换版。
self.assertEqual(
self.reg.resolve("large-v3-turbo"),
"deepdml/faster-whisper-large-v3-turbo-ct2",
)
self.assertNotEqual(
self.reg.resolve("large-v3-turbo"),
"Systran/faster-whisper-large-v3-turbo",
)
def test_passthrough_repo_id(self):
# 用户直接把 HF repo_id 当 model_size 传进来(含 "/"