feat: додано Node Registry, GreenFood, Monitoring та Utils
This commit is contained in:
258
docs/testing/voice_chat_test.md
Normal file
258
docs/testing/voice_chat_test.md
Normal file
@@ -0,0 +1,258 @@
|
||||
# Тестування голосового чату (STT) через Telegram
|
||||
|
||||
**Дата**: 2025-11-18
|
||||
**Сервер**: 144.76.224.179
|
||||
**Боти**: DAARWIZZ, Helion, GREENFOOD
|
||||
|
||||
---
|
||||
|
||||
## 🎤 Що тестуємо?
|
||||
|
||||
### 1. Speech-to-Text (STT)
|
||||
- **Сервіс**: `dagi-stt` (порт 9000)
|
||||
- **Модель**: Whisper (faster-whisper)
|
||||
- **Призначення**: Транскрипція голосових повідомлень з Telegram
|
||||
|
||||
### 2. Інтеграція з Telegram
|
||||
- **Gateway**: `telegram-gateway` (Long Polling)
|
||||
- **Endpoint**: `/stt` на dagi-stt
|
||||
- **Флоу**:
|
||||
1. Користувач надсилає голосове повідомлення
|
||||
2. Telegram Gateway отримує `voice` або `audio` або `video_note`
|
||||
3. Завантажує аудіо через Local Telegram Bot API
|
||||
4. Відправляє на `/stt` (dagi-stt)
|
||||
5. Отримує текст
|
||||
6. Відправляє текст в DAGI Router (як звичайне текстове повідомлення)
|
||||
7. Повертає відповідь користувачу
|
||||
|
||||
---
|
||||
|
||||
## ✅ Передумови
|
||||
|
||||
### 1. Перевірка STT сервісу
|
||||
|
||||
```bash
|
||||
# Перевірка статусу
|
||||
docker ps | grep dagi-stt
|
||||
|
||||
# Тест health endpoint (якщо є)
|
||||
curl http://localhost:9000/health
|
||||
|
||||
# Логи
|
||||
docker logs --tail 50 dagi-stt
|
||||
```
|
||||
|
||||
**Очікуваний вивід**:
|
||||
```
|
||||
INFO: Started server process [1]
|
||||
INFO: Waiting for application startup.
|
||||
INFO: Application startup complete.
|
||||
INFO: Uvicorn running on http://0.0.0.0:9000
|
||||
```
|
||||
|
||||
### 2. Перевірка Telegram Gateway
|
||||
|
||||
```bash
|
||||
# Статус
|
||||
docker ps | grep telegram-gateway
|
||||
|
||||
# Логи (перевірка polling)
|
||||
docker logs --tail 50 telegram-gateway | grep -E '(daarwizz|helion|greenfood|polling)'
|
||||
```
|
||||
|
||||
**Очікуваний вивід**:
|
||||
```
|
||||
INFO:app.telegram_listener:🤖 Creating bot: 8323412397:AAFxa...
|
||||
INFO:aiogram.dispatcher:Run polling for bot @DAARWIZZBot id=8323412397
|
||||
INFO:aiogram.dispatcher:Run polling for bot @energyunionBot id=8112062582
|
||||
INFO:aiogram.dispatcher:Run polling for bot @greenfoodliveBot id=7495165343
|
||||
```
|
||||
|
||||
### 3. Перевірка Local Telegram Bot API
|
||||
|
||||
```bash
|
||||
# Статус
|
||||
docker ps | grep telegram-bot-api
|
||||
|
||||
# Тест
|
||||
curl http://localhost:8081/bot<TOKEN>/getMe
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 План тестування
|
||||
|
||||
### Test Case 1: Базова транскрипція
|
||||
|
||||
**Кроки**:
|
||||
1. Відкрити Telegram
|
||||
2. Знайти бота `@DAARWIZZBot` (або `@energyunionBot`, `@greenfoodliveBot`)
|
||||
3. Відправити голосове повідомлення (українською/англійською)
|
||||
4. Дочекатися відповіді
|
||||
|
||||
**Очікуваний результат**:
|
||||
- Бот повинен відповісти текстом (підтвердження транскрипції)
|
||||
- Час відповіді < 10 секунд
|
||||
|
||||
**Лог:**
|
||||
```
|
||||
INFO:app.telegram_listener:📨 Received message from chat=<CHAT_ID>
|
||||
INFO:app.telegram_listener:📤 Publishing to NATS: agent.telegram.update
|
||||
INFO:app.router_handler:📬 NATS event: agent.telegram.update
|
||||
INFO:app.router_handler:🔊 Voice message detected, calling STT...
|
||||
INFO:app.router_handler:📝 Transcribed: "Хочу дізнатися про MicroDAO"
|
||||
INFO:app.router_handler:📤 Sending to Router: mode=chat, message="Хочу дізнатися про MicroDAO"
|
||||
INFO:app.router_handler:✅ Response from Router
|
||||
INFO:app.telegram_listener:📤 Sending response to chat=<CHAT_ID>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Test Case 2: Довге голосове повідомлення
|
||||
|
||||
**Кроки**:
|
||||
1. Надіслати голосове повідомлення > 30 секунд
|
||||
2. Дочекатися транскрипції
|
||||
|
||||
**Очікуваний результат**:
|
||||
- Успішна транскрипція
|
||||
- Час відповіді < 20 секунд
|
||||
|
||||
---
|
||||
|
||||
### Test Case 3: Різні мови
|
||||
|
||||
**Кроки**:
|
||||
1. Надіслати українською: "Привіт, як справи?"
|
||||
2. Надіслати англійською: "Hello, how are you?"
|
||||
3. Надіслати російською: "Привет, как дела?"
|
||||
|
||||
**Очікуваний результат**:
|
||||
- Всі мови коректно розпізнаються
|
||||
- Whisper підтримує мультимовність
|
||||
|
||||
---
|
||||
|
||||
### Test Case 4: Фонові шуми
|
||||
|
||||
**Кроки**:
|
||||
1. Надіслати голосове з фоновим шумом (музика, вулиця)
|
||||
2. Перевірити якість транскрипції
|
||||
|
||||
**Очікуваний результат**:
|
||||
- Транскрипція працює, але може містити помилки
|
||||
- Бот відповідає на основі розпізнаного тексту
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
|
||||
### Проблема 1: Бот не відповідає на голосові
|
||||
|
||||
**Діагностика**:
|
||||
```bash
|
||||
# 1. Перевірити логи telegram-gateway
|
||||
docker logs --tail 100 telegram-gateway | grep -E '(voice|audio|video_note|STT)'
|
||||
|
||||
# 2. Перевірити логи dagi-stt
|
||||
docker logs --tail 100 dagi-stt | grep -E '(POST|/stt|transcrib)'
|
||||
|
||||
# 3. Перевірити доступність STT
|
||||
curl http://localhost:9000/health
|
||||
```
|
||||
|
||||
**Можливі причини**:
|
||||
- STT сервіс не запущено
|
||||
- Telegram Gateway не викликає STT
|
||||
- Помилка завантаження аудіо з Telegram
|
||||
- Моделі Whisper не завантажені
|
||||
|
||||
**Рішення**:
|
||||
```bash
|
||||
# Перезапустити STT
|
||||
docker restart dagi-stt
|
||||
|
||||
# Перевірити моделі
|
||||
docker exec dagi-stt ls -lh /weights/ # або інший шлях до моделей
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Проблема 2: STT повертає порожній текст
|
||||
|
||||
**Діагностика**:
|
||||
```bash
|
||||
# Перевірити формат аудіо
|
||||
docker logs dagi-stt | grep -i 'format\\|codec\\|error'
|
||||
```
|
||||
|
||||
**Можливі причини**:
|
||||
- Неправильний формат аудіо (OGG, MP3, WAV)
|
||||
- Занадто короткий файл (< 1 сек)
|
||||
- Пошкоджений файл
|
||||
|
||||
**Рішення**:
|
||||
- Telegram зазвичай надсилає OGG/Opus - Whisper має підтримувати
|
||||
- Перевірити конвертацію на стороні STT сервісу
|
||||
|
||||
---
|
||||
|
||||
### Проблема 3: Повільна транскрипція (> 30 сек)
|
||||
|
||||
**Діагностика**:
|
||||
```bash
|
||||
# Перевірити CPU/RAM
|
||||
docker stats dagi-stt
|
||||
|
||||
# Перевірити модель Whisper
|
||||
docker exec dagi-stt env | grep WHISPER
|
||||
```
|
||||
|
||||
**Можливі причини**:
|
||||
- Велика модель (large/large-v2) на CPU
|
||||
- Недостатньо RAM
|
||||
- Інші процеси навантажують сервер
|
||||
|
||||
**Рішення**:
|
||||
- Використовувати `tiny` або `base` модель для швидкості
|
||||
- Додати GPU (NVIDIA) для прискорення
|
||||
- Збільшити ресурси контейнера
|
||||
|
||||
---
|
||||
|
||||
## 📊 Metrics для STT
|
||||
|
||||
```promql
|
||||
# Кількість STT запитів
|
||||
rate(stt_requests_total[5m])
|
||||
|
||||
# Час транскрипції (p95)
|
||||
histogram_quantile(0.95, rate(stt_duration_seconds_bucket[5m]))
|
||||
|
||||
# Кількість помилок
|
||||
rate(stt_errors_total[5m])
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ Критерії успіху
|
||||
|
||||
1. ✅ STT сервіс працює (`docker ps | grep dagi-stt`)
|
||||
2. ✅ Telegram Gateway отримує голосові повідомлення (логи)
|
||||
3. ✅ Бот коректно транскрибує українську та англійську
|
||||
4. ✅ Час відповіді < 10 секунд для коротких повідомлень (< 10 сек аудіо)
|
||||
5. ✅ Бот відповідає на основі транскрибованого тексту
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Наступні кроки
|
||||
|
||||
1. Додати підтримку інших форматів (MP3, WAV)
|
||||
2. Оптимізувати модель Whisper (smaller model або GPU)
|
||||
3. Додати кешування для повторних фраз
|
||||
4. Інтеграція з TTS для повної voice-to-voice взаємодії
|
||||
|
||||
---
|
||||
|
||||
*Тест створено: 2025-11-18*
|
||||
|
||||
Reference in New Issue
Block a user