feat: preload Whisper model at startup with disk space check

- Add WHISPER_MODEL_SIZE and WHISPER_MIN_FREE_SPACE_BYTES config options
- voice.py now preloads/downloads the Whisper model at bot startup
- Detailed logging for model presence, disk space, download progress and readiness
- If model is already present locally, preload is skipped
- If disk space is insufficient, bot fails fast with a clear error
- main.py calls preload_model() after proxy setup and before polling
- Document voice recognition model download behavior in README
This commit is contained in:
Галингер Р.С.
2026-07-08 09:44:48 +07:00
parent 0432155c8f
commit d6c029f708
4 changed files with 137 additions and 7 deletions
+43
View File
@@ -95,6 +95,10 @@ ROUTERAI_BASE_URL=https://routerai.ru/api/v1
# Внимание: проверка расходует токены API. По умолчанию отключена.
AI_HEALTH_CHECK_ENABLED=false
AI_HEALTH_CHECK_INTERVAL=600
# Настройки модели Whisper для распознавания голоса.
WHISPER_MODEL_SIZE=base
WHISPER_MIN_FREE_SPACE_BYTES=5368709120
```
Для включения прокси установите `PROXY_ENABLED=true` и укажите корректный `PROXY_URL`.
@@ -114,6 +118,45 @@ docker compose up -d --build
Модели Whisper сохраняются в `./models`, база данных и логи — в `./bot/data`.
## 🎙️ Распознавание голосовых сообщений
Бот автоматически распознаёт все голосовые сообщения с помощью локальной модели [faster-whisper](https://github.com/SYSTRAN/faster-whisper).
### Поведение загрузки модели
- При запуске бота проверяется наличие модели в `./models/faster-whisper/<WHISPER_MODEL_SIZE>/`.
- Если модель уже скачана — бот сразу готов к работе.
- Если модели нет — бот проверяет свободное место на диске и **скачивает модель автоматически** перед началом polling.
- Для скачивания используется прокси из `.env`, если `PROXY_ENABLED=true`.
### Требования к месту
| Модель | Размер модели | Рекомендуемое свободное место |
|--------|---------------|-------------------------------|
| `base` | ~150 MB архив, ~500 MB на диске | 5 GB (`WHISPER_MIN_FREE_SPACE_BYTES=5368709120`) |
| `small` | ~500 MB архив, ~1.5 GB на диске | 5 GB+ |
| `medium` | ~1.5 GB архив, ~5 GB на диске | 10 GB+ |
> 💡 По умолчанию используется модель `base`. Для смены модели измените `WHISPER_MODEL_SIZE` в `.env`.
### Логирование
В логах будет видно:
```
Free disk space: 45.23 GB, required: 5.00 GB
Whisper model 'base' found locally at /app/models/faster-whisper/base
Whisper model 'base' is ready
```
или при скачивании:
```
Whisper model 'base' not found locally. Starting download to /app/models/faster-whisper...
Whisper model 'base' downloaded and loaded in 125.4s
Whisper model 'base' is ready
```
## 🧪 Тесты
```bash