lct-hack/backend/app/voice
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Ivan Gerasimov 456f3cd34d lct-06: голосовой контур VAD → STT → звонящий → TTS, с перебиванием
Контур замкнут без LLM: звонящий отвечает заготовками через слот-автомат.
Живой диалог через WebSocket прошёл 5 раз подряд без сбоев: первая
реплика после снятия трубки — 87–154 мс, ход — 1.2–1.4 с, перебивание —
88–90 мс. На LLM до цели 1.5 с остаётся 100–300 мс.

Задача ответа живёт, пока у курсанта доигрывает звук: перебивание —
это отмена одной задачи, и tts.end приходит, когда звонящий
действительно замолчал.

Что нашлось при сборке:
- Silero молча выбрасывает цифры: «улица Ленина, дом… квартира…» без
  номеров. Числа и сокращения разворачиваются в слова до синтеза.
- onnxruntime брал все 16 ядер и вытеснял синтез, первый вызов был
  холодным: распознавание 576 мс вместо ~210. Прогрев на старте и по
  4 потока на модель.
- Весь адрес одним предложением — ~455 мс синтеза до первого звука.
  Длинное предложение режется по запятым, номер от улицы не отрывается:
  ~250 мс.
- Первая реплика «Алло! Помогите!» запускалась мимо задачи ответа и не
  перебивалась вовсе.

Отдельно: сломал make dev — num2words попал в pyproject, а Dockerfile
ставил зависимости ручным списком, и бэкенд в контейнере упал на
импорте. Образ теперь ставит зависимости из pyproject.toml.

Голоса в контейнере нет: под WSL модели работают нативно, make back.
2026-09-17 15:04:17 +03:00
..
__init__.py lct-06: голосовой контур VAD → STT → звонящий → TTS, с перебиванием 2026-09-17 15:04:17 +03:00
models.py lct-06: голосовой контур VAD → STT → звонящий → TTS, с перебиванием 2026-09-17 15:04:17 +03:00
pipeline.py lct-06: голосовой контур VAD → STT → звонящий → TTS, с перебиванием 2026-09-17 15:04:17 +03:00
text.py lct-06: голосовой контур VAD → STT → звонящий → TTS, с перебиванием 2026-09-17 15:04:17 +03:00
vad.py lct-06: голосовой контур VAD → STT → звонящий → TTS, с перебиванием 2026-09-17 15:04:17 +03:00