Files
microdao-daarion/docs/testing/voice_chat_test.md

8.0 KiB
Raw Blame History

Тестування голосового чату (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 сервісу

# Перевірка статусу
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

# Статус
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

# Статус
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: Бот не відповідає на голосові

Діагностика:

# 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 не завантажені

Рішення:

# Перезапустити STT
docker restart dagi-stt

# Перевірити моделі
docker exec dagi-stt ls -lh /weights/  # або інший шлях до моделей

Проблема 2: STT повертає порожній текст

Діагностика:

# Перевірити формат аудіо
docker logs dagi-stt | grep -i 'format\\|codec\\|error'

Можливі причини:

  • Неправильний формат аудіо (OGG, MP3, WAV)
  • Занадто короткий файл (< 1 сек)
  • Пошкоджений файл

Рішення:

  • Telegram зазвичай надсилає OGG/Opus - Whisper має підтримувати
  • Перевірити конвертацію на стороні STT сервісу

Проблема 3: Повільна транскрипція (> 30 сек)

Діагностика:

# Перевірити 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

# Кількість 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