Система позволяет превратить речь в текст и, при необходимости, разделить его по говорящим.
Она принимает живой аудиопоток или файл, передаёт звук моделям распознавания и возвращает результат в voice-chat либо в браузер.
Deployment · 04.10.2026 · проверенная поставка
Chat-agent и voice поставляются отдельно
chat-agent.gis-master.ru
Стэк web-rtc-komaroff: Frontend, Core, Agent, LLM, workflow runtimes, PostgreSQL и общий NATS. Каталог документации остаётся здесь.
voice.gis-master.ru
Стэк py_faster_whisper: один live ASR bridge, пять file UI, диагностика, lock, пять H100 requesters и три CPU sidecars.
Оба host используют OAuth2 для UI, API и WebSocket. Voice подключён к общему NATS. Live ASR: streaming через NATS/H100 worker. Файловый ASR: LinTO HTTP. Subjects, H100, Ollama и TURN сохраняются.
Postgres volume сохраняется; benchmark и summary используют прежний whisper_bench_jobs на gis-master.ru. Сначала поставляется chat, затем voice после освобождения file lock.
Deployment runbook · Проверка всех 29 сервисов · source/CI/runtime/live проверяются отдельно. Следующие датированные измерения описывают прежние запуски.
Два способа начать — один понятный результат
Оператор выбирает аудио или видео и язык.
Система распознаёт речь и отделяет реплики.
В браузере появляется plain text и speaker transcript.
Voice-chat отправляет короткие фрагменты звука.
Сервис сам находит границы фраз.
Текст возвращается событиями и появляется в соседнем интерфейсе.
Результат показывает текст и границы реплик
Файл принят
Upload завершён, статус обработки виден в той же странице.
Говорящие различены
Каждая реплика получает устойчивую метку SPEAKER_00/01.
Текст остаётся доступен
Можно копировать или скачать plain и speaker-aware варианты.
Пользователь делает четыре шага
Выбрать файл
Подходит audio или video: система сама готовит audio-only дорожку.
Указать язык
Он передаётся модели распознавания.
Запустить обработку
Progress виден в браузере; HTTP polling продолжает работу без live WebSocket updates.
Получить результат
Plain text готовится независимо; speaker transcript добавляется, если model backend доступен.
Разделение по говорящим — дополняющий этап. Его отказ не обязан уничтожать уже распознанный текст.
Интерфейс управляет работой, модели выполняют специализированные вычисления
Поэтому интерфейс может показывать plain text раньше, чем завершится разделение по говорящим.
Функции сгруппированы по задаче, а не по технологии
Audio / video → plain text
Длинный файл режется на части и собирается без повторов на overlap.
Speaker transcript
Word timestamps объединяются с временными отрезками говорящих.
Staged analysis
Transcribe, diarize и combine можно запускать независимо.
Bench / case
Сохранить конфигурацию, timing, RTF и quality proxies.
Diagnostics
Проверить WebUI, models, NATS и proxy routes раздельно.
Live voice stream
Принимать PCM по NATS и возвращать фразы событиями.
Staged mode нужен, когда важно видеть каждый этап
Проверить ASR отдельно
Понять, есть ли проблема до разделения говорящих.
Проверить diarization отдельно
Посмотреть raw segments и timing backend.
Собрать повторно
Combine использует cached artifacts и не вызывает модели ещё раз.
Технические решения видны пользователю через поведение
ASR и speakers идут параллельно
Plain text не обязан ждать завершения diarization.
WebSocket + HTTP snapshot
Live progress удобен, а polling помогает восстановить состояние страницы.
Файл делится на chunks
Длинный media не отправляется модели одним монолитным запросом.
Staged artifacts сохраняются
Этап можно повторить без нового upload и без обязательного повторного combine.
Model backend проверяется заранее
При отказе speakers automatic flow может закончиться plain transcript.
Один active automatic job
Поведение предсказуемо в одном процессе, но параллельные upload требуют внешнего lock.
Сервис зависит от моделей, брокера и deployment-контура
LinTO Whisper
Преобразует звук в текст и word timestamps.
Diarization models
pyannote, sherpa-onnx или Sortformer определяют временные отрезки говорящих.
NATS
Связывает live stream, progress events, browser updates и proxy transport.
Chat / voice / H100
Chat владеет WebRTC и NATS; voice — файловым ingress и lock; H100 — model runtime.
Что реализовано сейчас — и что только естественно добавить
- File transcription и speaker transcript
- Live PCM → phrase events
- Automatic и staged workflows
- Три diarization backend implementation
- Bench summaries и diagnostics
- Новый backend с тем же HTTP contract
- Новая метрика или visualization для сохранённых прогонов
- Иная retention policy для artifacts
- Другой transport route при совместном изменении deployment
- Новый UI mode поверх существующего job store
Вторая колонка — не roadmap. Это точки расширения, которые следуют из текущих границ кода.
Что нужно учитывать до использования результата
Внешние модели обязательны
Репозиторий оркестрирует вызовы, но не заменяет LinTO и diarization runtime.
Automatic job один на процесс
Новый upload отменяет предыдущий; внешний lock нужен для общей сериализации.
Automatic artifacts короткоживущие
После terminal state директория планируется к удалению через 30 s.
Quality proxies — не accuracy score
Bench не вычисляет WER или DER.
CI и живые сценарии проверяются отдельно
Streaming checks обязательны; полная suite из 167 tests проверена локально. Модели и UI прошли отдельную приёмку.
Production — несколько ownership-зон
Green CI в этом repo не доказывает ingress, external receiver и пользовательский flow.
Сильная сторона системы — явное разделение этапов и контрактов. Ограничение — результат зависит от полной межсервисной цепочки.
Что стоит запомнить
Что это
Слой обработки речи между пользовательскими интерфейсами и model services.
Что умеет
Live ASR, file transcription, speaker separation, staged analysis и diagnostics.
Где полезно
Когда нужен текст разговора, реплики по говорящим или разбор model pipeline по этапам.
Как оценивать
Отдельно проверять code/tests, image/deploy, health и реальный пользовательский сценарий.
Система делает вычислительную цепочку наблюдаемой: видны plain text, speaker turns, этапы, timings и health.
Навигация: ← → / PgUp PgDn / Space · Home End · F fullscreen · swipe