"""Идемпотентная предзагрузка модели 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)
