Первоначальная версия VidConf

This commit is contained in:
2026-07-23 01:04:01 +03:00
commit 896455381a
335 changed files with 61527 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
"""Идемпотентная предзагрузка модели faster-whisper.
Без предзагрузки первая транскрибация после старта воркера сама тянет веса
модели из HuggingFace Hub в рантайме (минуты простоя пайплайна на первом
сеансе) — раньше предзагрузки не было вовсе.
Использует ТУ ЖЕ функцию, что и сам faster-whisper при ленивой загрузке
модели (`faster_whisper.utils.download_model`, см.
`backend/core/plugins/faster_whisper.py::_get_model` — `WhisperModel(...,
download_root=...)` внутри вызывает её с `cache_dir=download_root`), поэтому
создаёт кэш `huggingface_hub`, полностью совместимый с тем, что ожидает
плагин в `WHISPER_CACHE_DIR` (`config/plugins.yaml`,
`transcriber.options.download_root`) — повторный запуск (в т.ч. сам запуск
воркера) ничего не перекачивает: `snapshot_download` идемпотентен по факту
наличия файлов в кэше.
Запускается init-контейнером `whisper-model-init` (сборка backend-образа,
профили compose `transcribe`/`transcribe-gpu`, см. `deploy/docker-compose.yml`)
— faster-whisper уже есть в зависимостях backend/worker (`pyproject.toml`).
Путь кэша — КОНТРАКТ с `backend/services/ai_tiers.py` (см. докстринг модуля):
детект доступности уровня AI (`services/ai_levels.py`) и сам плагин
транскрибера (`transcriber.options.download_root` в `config/plugins.yaml`)
ожидают модель именно по пути `{WHISPER_MODELS_ROOT}/{модель}` (например,
`/models/whisper/small`) — НЕ по плоскому корню тома. `WHISPER_MODELS_ROOT`
здесь должен буквально совпадать со значением одноимённой константы в
`ai_tiers.py`.
"""
import os
import sys
WHISPER_MODEL = os.environ.get("WHISPER_MODEL", "small")
WHISPER_MODELS_ROOT = os.environ.get("WHISPER_MODELS_ROOT", "/models/whisper")
def main() -> None:
from faster_whisper.utils import download_model
cache_dir = f"{WHISPER_MODELS_ROOT}/{WHISPER_MODEL}"
print(
f"[download-whisper-model] модель '{WHISPER_MODEL}' -> {cache_dir}",
flush=True,
)
path = download_model(WHISPER_MODEL, cache_dir=cache_dir)
print(f"[download-whisper-model] готово: {path}", flush=True)
if __name__ == "__main__":
try:
main()
except Exception as exc: # noqa: BLE001
print(f"[download-whisper-model] ошибка: {exc}", file=sys.stderr)
sys.exit(1)