Обзор системы
“

Система позволяет превратить речь в текст и, при необходимости, разделить его по говорящим.

Она принимает живой аудиопоток или файл, передаёт звук моделям распознавания и возвращает результат в voice-chat либо в браузер.

Речь
→
Распознавание
→
Кто говорил
→
Текстовый результат
Sources: src/stt_whisper_to_nats.py · src/webui/server.py · src/diarization.py

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 проверяются отдельно. Следующие датированные измерения описывают прежние запуски.

Ситуация → действие → результат

Два способа начать — один понятный результат

Файл
1

Оператор выбирает аудио или видео и язык.

2

Система распознаёт речь и отделяет реплики.

3

В браузере появляется plain text и speaker transcript.

Живой разговор
1

Voice-chat отправляет короткие фрагменты звука.

2

Сервис сам находит границы фраз.

3

Текст возвращается событиями и появляется в соседнем интерфейсе.

Sources: src/stt_whisper_to_nats.py · src/webui/static/app.js · ../webrtc-komaroff/DOCS/ARCHITECTURE.md
Реальный интерфейс

Результат показывает текст и границы реплик

Файл принят

Upload завершён, статус обработки виден в той же странице.

Говорящие различены

Каждая реплика получает устойчивую метку SPEAKER_00/01.

Текст остаётся доступен

Можно копировать или скачать plain и speaker-aware варианты.

Рабочий контур · 20 s smoke · 11.09.2026
Рабочий интерфейс с двумя говорящими
Реальный вывод `/whisper-diarization/`; использован разрешённый фрагмент тестового медиа.
Sources: live /whisper-diarization/ smoke 2026-09-11 · src/webui/static/app.js
Основной file workflow

Пользователь делает четыре шага

1

Выбрать файл

Подходит audio или video: система сама готовит audio-only дорожку.

2

Указать язык

Он передаётся модели распознавания.

3

Запустить обработку

Progress виден в браузере; HTTP polling продолжает работу без live WebSocket updates.

4

Получить результат

Plain text готовится независимо; speaker transcript добавляется, если model backend доступен.

Разделение по говорящим — дополняющий этап. Его отказ не обязан уничтожать уже распознанный текст.

Sources: src/webui/server.py · src/stt_whisper_to_nats.py · src/webui/static/app.js
Простая модель

Интерфейс управляет работой, модели выполняют специализированные вычисления

Пользовательфайл или речь py_faster_whisperготовит звукведёт состояниесобирает результат Распознаваниезвук → слова + время Говорящиевремя → speaker labels Результаттекст / реплики

Поэтому интерфейс может показывать plain text раньше, чем завершится разделение по говорящим.

Sources: src/stt_whisper_to_nats.py · src/webui/file_mode.py · src/diarization.py
Текущие возможности

Функции сгруппированы по задаче, а не по технологии

Получить текст

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 и возвращать фразы событиями.

Sources: src/webui/server.py · src/webui/bench.py · src/webui/diagnostics.py · src/stt_whisper_to_nats.py
Другой важный сценарий

Staged mode нужен, когда важно видеть каждый этап

Staged pipeline с журналом и таймингами
Рабочий `/whisper-staged/`: journal, ASR text и model timings. Один разовый smoke, не benchmark.

Проверить ASR отдельно

Понять, есть ли проблема до разделения говорящих.

Проверить diarization отдельно

Посмотреть raw segments и timing backend.

Собрать повторно

Combine использует cached artifacts и не вызывает модели ещё раз.

Smoke: all three stages done
Sources: live /whisper-staged/ smoke 2026-09-11 · src/webui/staged_jobs.py
Свойство → следствие

Технические решения видны пользователю через поведение

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.

Sources: src/stt_whisper_to_nats.py · src/webui/static/app.js · src/webui/staged_jobs.py · src/webui/job_lock.py
С чем работает система

Сервис зависит от моделей, брокера и 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.

Статус пяти страниц py_faster_whisper
`/status/`, 11.09.2026: transcription, diarization, summary, staged и bench — OK.
Sources: stack/stack.drs · src/model_transport.py · live /status/ 2026-09-11
Граница обещаний

Что реализовано сейчас — и что только естественно добавить

СЕЙЧАС ПОДДЕРЖИВАЕТСЯ
  • 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. Это точки расширения, которые следуют из текущих границ кода.

Sources: src/diarization.py · src/webui/server.py · src/webui/bench.py · stack/stack.drs
Честные границы

Что нужно учитывать до использования результата

Внешние модели обязательны

Репозиторий оркестрирует вызовы, но не заменяет 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.

Сильная сторона системы — явное разделение этапов и контрактов. Ограничение — результат зависит от полной межсервисной цепочки.

Sources: src/stt_whisper_to_nats.py · src/webui/bench.py · .gitlab-ci.yml · stack/stack.drs
Итог

Что стоит запомнить

1

Что это

Слой обработки речи между пользовательскими интерфейсами и model services.

2

Что умеет

Live ASR, file transcription, speaker separation, staged analysis и diagnostics.

3

Где полезно

Когда нужен текст разговора, реплики по говорящим или разбор model pipeline по этапам.

4

Как оценивать

Отдельно проверять code/tests, image/deploy, health и реальный пользовательский сценарий.

Система делает вычислительную цепочку наблюдаемой: видны plain text, speaker turns, этапы, timings и health.

Навигация: ← → / PgUp PgDn / Space · Home End · F fullscreen · swipe

Sources: src/ · tests/ · stack/stack.drs · live smoke 2026-09-11
1 / 12