Голосовые системы

Monitor v3 и Opus — отчёт поставки 30.10.2026

Исходники

  • webrtc-komaroff: main dbd6089986e51387f0ff52ff99a83995f03a5ab1 (MR !23, !24, !25).
  • Общая разница: +1417 / −726 строк, включая документацию, тесты и 224 строки контрольных пакетов WebCodecs.
  • py_faster_whisper: draft MR !8, 1d06a8750cea82adeb619026ff8bd653ffd952ea, +75 / −23 строки. Не merged, не поставлен.
  • rag-stack, инфраструктура и корневые CI-файлы не изменялись. Основная пользовательская рабочая копия сохранена.

Что изменилось

Monitor использует одну последовательность сохранённых передач для журнала и схемы. Транскрипции и команды разделены, ответы направлены обратно, выбранная передача сохраняется в URL. Подробности загружаются по запросу. Удалены заменённые eventList.ts, eventList.css, observation.ts. Отсутствующие наблюдения не заменяются предполагаемыми стадиями; разница часов сервисов не названа сетевой задержкой.

Протокол 4 передаёт Opus, сохраняет исходные принятые пакеты и реальные координаты. Один общий серверный декодер обслуживает распознавание, чтение архива и повтор. Постоянной второй PCM-копии нет. Протокол 3 и старые PCM-архивы сохранены. Silero, значения по умолчанию и существующие соединения остаются прежними. Compare переиспользует закодированный образец между моделями.

Проверки

Пять обязательных suites реально выполнены: browser NATS #26923 (3), Ruby #26925, Python #26929 (232 PASS, 116 явно skipped, 8 subtests), PG/NATS integration #26940, frontend #26945 (65 файлов, 475 тестов). После первой полной попытки повторялись только исправленные группы. Проверки main #5580 были явно пропущены механизмом impact selection: дерево merge совпадает с проверенным деревом, это не новый прогон suites.

Адресно: 55 Python PASS; 19 PG Monitor PASS после исправления периода; настоящие NATS/PG Opus и legacy archive — 2 PASS. Проверены совпадение сохранённых байтов, live/replay PCM, диапазоны 90 мс и 1 с, пропуски/повторы/повреждение, отмена и начало/хвост. TypeScript и сборка расширения прошли. В локальном браузере проверены обе темы, направление ответа, журнал → выбранная стрелка → журнал, URL и отсутствие данных. component-dark.jpg/component-light.jpg сохраняют локальную проверку компонентов. dark.jpg/light.jpg — финальный production Monitor с историческими наблюдениями.

Короткий замер кодирования

Chrome WebCodecs, один синтетический образец 1,337 с, включая тишину в начале/конце. Opus mono 32 кбит/с VBR, 20 мс. Байты включают аудиопротокол и номер пакета, но не NATS/TLS. Выход декодера во всех случаях — 64 176 отсчётов на 48 кГц, точно ожидаемая длина.

Частота источника PCM, байт Opus с заголовками, байт Разница Сокращение Кодирование
16000 42784 6229 -36555 85.4% 5.2 мс
44100 117924 6427 -111497 94.5% 7.1 мс
48000 128352 6450 -121902 95.0% 6.4 мс

Это измерение экономии трафика и кодирования, не ускорение модели, не полноценная оценка качества и не p95.

GigaAM Large: поставка остановлена

Добавлен небольшой явный вариант large_ctc, закреплены ревизия, SHA-256 весов/исходников и MIT-лицензия. Torch/Transformers не обновлялись. Pipeline ASR #5574 собрал 7 образов, но job #26920 остановил публикацию на Trivy: msgpack 1.1.2, setuptools 70.3.0, urllib3 2.7.0, пять HIGH. Проверка не отключалась; обновление общего GPU-окружения не включалось в эту задачу. Draft MR сохранён. Модель не добавлена в рабочие селекторы: загрузка на H100, прогрев, текст и пиковая VRAM не доказаны. Текущий ASR продолжает работать на прежнем образе.

Поставка

Build #26968 / pipeline #5580 опубликовал Gateway, Audio Ingress и Front. Один production bundle Front, 1,50 с Vite; сборка трёх образов около 55 с. Образы заранее загружены на сервер при открытом приёме. При первой загрузке Front был TLS handshake timeout; повторная подготовка завершилась успешно, до drain.

Точные образы находятся в images.json. Финальная проверка runtime и браузера приведена ниже.

Найдено при браузерной приёмке

  • Compare: при быстрой загрузке маленьких Opus-пакетов аудиобайты не учитывали расход на NATS-заголовки. Пачка дополнительно ограничена 16 пакетами, без новых RPC и задержки 1×. MR !24 merged. Новый тест моделирует транспортные заголовки и настоящий лимит 32 КиБ.
  • Monitor: прокрутка выбирала подсвеченный заголовок сервиса. Теперь выбирает именно передачу с event ID; заголовки участников закреплены.
  • Monitor: период списка сессий не ограничивал карточки событий выбранной сессии. Для новой проекции карточек добавлена нижняя граница периода; прямые ссылки и целая последовательность пересекающего период запроса сохранены. 19 тестов на настоящем PostgreSQL прошли.
  • Дополнительный frontend CI выявил использование .at() в тесте с ES2020. Исправлено индексированием; локальная типизация PASS.
  • Pipeline #5584 был создан как для новой ветки после автоматического удаления ветки при merge. Он ошибочно выбрал полный набор по неизвестной базе; остановлен как избыточный и заменён запуском #5585 с точной базой. Сборок и deployment в #5584 не было. Его отмена не связана с зависанием.

Первый адресный rollout: drain #26985, backend #26997, Front #26998 — PASS. Все три сервиса running, updates completed; Core/Agent/LLM сохранили прежние digest. Повторный pull приложения во время активации не выполнялся. Старый PCM-архив 73e32723-0168-4c24-a70e-ac269436688f открыт в production Monitor: первые 4 секунды готовы, полная длительность 29,920 с, дальнейшее чтение по необходимости.

Пакет 2.2.0 установлен в прежний каталог. Key, permissions, host permissions и CSP сверены. Перезагрузка расширения и активация в пользовательской панели не выполнялись и не считаются проверенными.

Финальные исправления: dbd6089986e51387f0ff52ff99a83995f03a5ab1. Frontend #27082 PASS; Gateway Python #27073 и PG/NATS integration #27077 PASS. История дополнительных проверок сохранена в ci-followup.json.

Build #27105 / pipeline #5589 завершился успешно. Штатная фаза monitor-live также переупаковала Ingress, хотя после первого rollout его исходники не менялись. Дополнительный Ingress-образ не применяется: runtime сохраняет digest первого проверенного выпуска. В Docker выполнена одна сборка production bundle Front для этого исправленного SHA (Vite 1,84 с).

Финальный пакет: chat-agent-2.2.0-dbd60899.zip, 7 555 150 байт; SHA-256 7ae15386f746cb8b715195caa31fc2a135cf5ce886cf89925b430e292af5cb9e. Он включает исправление подачи готовой записи в диагностике расширения. Резервная копия прежней 2.1.2 сохранена.

После обновления Gateway фильтр транскрипций в интервале 10:14–10:29 показывает ровно три события 10:17–10:18 вместо карточек за всю сессию. Кнопка переподключения после смены Gateway восстановила работу без повторного входа.

Финальный production smoke

Контрольный звук подан через Web Audio вместо физического микрофона. Это проверяет общий код захвата, Silero, WebCodecs, передачу, Ingress и четыре реальных backend; ручная речь и активированное расширение не проверялись. Одна запись 6,677333 с, 48 кГц: выбранная фраза 2,232–5,248 с. На каждом backend один вызов модели, все четыре прогона завершены, ресурсы диагностики освобождены.

Backend Подготовка до передачи Рабочий прогон: передача → показ Готовая фраза: граница → показ Чистая модель Завершение после показа
Whisper Turbo 1312.9 мс 588.4 мс 331.3 мс 164.1 мс 468.3 мс
Whisper Russian 716.5 мс 684.1 мс 455.6 мс 291.1 мс 597.4 мс
GigaAM v3 RNNT 655.0 мс 446.8 мс 211.2 мс 56.1 мс 595.2 мс
LinTO Whisper 674.2 мс 695.0 мс 458.5 мс 171.4 мс 557.4 мс

Обработка фразы и модель входят в рабочий прогон, их не нужно прибавлять к нему. Подготовка включает первое вычисление VAD и кодирование; остальные модели переиспользуют сегментацию и закодированные пакеты. Это отдельные нажатия и отдельные подключения, без прибавления времени предыдущей модели.

Передано 27 238 байт Opus с заголовками вместо 641 024 байт исходного PCM: −613 786 байт / −95,75%, 335 пакетов. Заголовки NATS/TLS в этой цифре не учтены. Первичное кодирование 57,5 мс; повторные запуски кодирование не выполняют. Серверное декодирование всего образца 50,6–68,2 мс. Сравнительного замера времени модели до Opus на этом образце нет — ускорение модели не заявляется.

Turbo, Russian и GigaAM получили одинаковый вход 16 кГц, 48 256 отсчётов, SHA-256 9f05bd68ae8909612f9d1168f269c3484511d4902aa47699fec42a8df78fca62. У LinTO подтверждены те же отправленные Opus-пакеты, диапазон и длина WAV; его внутренний вход модели не наблюдается. Существующая внутренняя отправка worker: 3 блока, 1 завершающий RPC. Результаты и полные измерения: model-smoke.json.

Полученные тексты: - Whisper Turbo: «Шла Саша по шоссе и сосала чопа-чопс.» - Whisper Russian: «Шла Саша по шоссе и сосала чупа-чупс.» - GigaAM v3 RNNT: «Шла Саша по шоссе и сосала чупа-чопс.» - LinTO Whisper: «Шла Саша по шоссе и сосала чопа-чопс.»

Это короткий smoke, не оценка качества, WER или p95. Отличия в последнем слове сохранены в отчёте.

В production Monitor проверены фильтр транскрипций и период, старый PCM-архив, обе темы, журнал → схема → журнал. Выбранный ответ 60f59136-da03-4997-96a8-29ed1ac8dc79 автоматически виден в центре схемы, классы is-target-event is-reverse, подсвечены Core/Gateway, раскрыт настоящий JSON { "data": {}, "status": 202 }. Обратный переход возвращает к той же строке журнала. ID и вид сохранены в URL. Отметки 10:17:45.315 / 10:17:45.319 показаны отдельно и не трактуются как измеренная сетевая задержка.

Финальная адресная поставка: Gateway job 27131 PASS, Front job 27136 PASS, build 27105 PASS. Оба точных digest были загружены до drain; повторного pull приложения при активации нет. Runtime после поставки: все 12 сервисов Chat Agent 1/1, три изменённых сервиса UpdateStatus=completed.

Runtime Source SHA OCI version Digest
Front dbd6089986e51387f0ff52ff99a83995f03a5ab1 5.1.1068 sha256:04e2a917f068e0e0bd8b46052b013498c1e542823d277221490575a1f733f16a
Gateway dbd6089986e51387f0ff52ff99a83995f03a5ab1 5.1.1068 sha256:7fbdc76c0f4b7156587a870db1c1016e5ba7ae4659dca1fa90f3d9d6e96de0f0
Audio Ingress bb143bc3e4afef4bf0b2614ee20061783d2616ca 5.1.1059 sha256:4ca9cdba76d4c40ac34a2726bdc34a0d8f27e1bfe241f3518566695c487d8b0b

Корпоративная сборка задаёт OCI version; она отличается от исходных версий компонентов (Front 7.2, Gateway 9.1, Ingress 5.1). Текущий ASR остаётся 3.0.287, прежний digest d7ef90248622e7b9c4f5e6ac4fb1ee3d8ec68af4cda13831522b030491fda2ce.

Что осталось ограничено

  • Large не включён: ASR build 26920 завершился ошибкой Trivy, публикация/rollout не выполнялись. Draft MR !8 сохранён. Время модели и пиковая VRAM Large не измерены. Предварительные 11,66 ГиБ свободной памяти не являются подтверждением успешной загрузки.
  • Расширение 2.2.0 собрано и установлено по прежнему пути, общий веб-код проверен. Активация в пользовательской панели требует обычной перезагрузки расширения; автоматически не выполнялась из-за ранее подтверждённого запрета инструмента. ID и permissions сохранены.
  • Новый Opus-архив проверен на настоящих локальных PostgreSQL/NATS и общем декодере. Production-проверка архива использовала старый PCM; новая физическая запись в пользовательской панели не создавалась.
  • Инфраструктура, корневые CI, rag-stack, модель по умолчанию и Silero не менялись. Длинные прогоны и повторная полная локальная регрессия не проводились.

Исходник

Скачать Markdown · К материалам исследования