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

Медиатракт C2: результаты 06.10.2026

C2 работает в прежнем namespace web-rtc-komaroff. Core, Agent, LLM, API, Frontend и Ruby runtime имеют OCI revision ba80166d541f99e29a79d7c858df592f5e048fa2; оба ingress — 2fde34101e26fac4771a2f99e3f1b3a7de8125e3. Переименование в chat-agent и окончательное удаление media из Core — следующий этап C3. Этот отчёт не подтверждает его поставку.

Что проверено

Одинаковый корпус: 12 обычных текстовых ходов, 3 инструментальных запроса, 6 ходов уточнения, 12 голосовых ходов с нагрузкой 1/2/3/1/2/3. Все 33 завершились. Tempo подтвердил 36 генераций: обычный разговор требует одной; инструментальный ответ после уточнения — двух. В выбранных traces нет status ERROR. Модель, ASR mode и WAV сохранены; GPU и voice не менялись.

Показатель, секунды C0 p50 / p95 C1 p50 / p95 C2 p50 / p95
Обычный текст, 12 ходов 14,969 / 20,951 3,452 / 4,464 3,396 / 11,850
Готовое SDP → connected, 12 1,394 / 1,559 1,554 / 1,598 1,556 / 1,611
Начало WAV → ASR final 3,803 / 3,993 3,749 / 3,947 3,793 / 4,076
Номинальный конец WAV → ASR final 0,778 / 0,968 0,724 / 0,922 0,768 / 1,051
ASR final → полный ответ 46,007 / 89,399 14,083 / 35,177 12,301 / 30,498
ASR final → первый фрагмент, C2 — — 12,164 / 30,424

Квантили — R7. C0: 11 голосовых завершений из 12 из-за transport failure; C1/C2: 12 из 12. p95 от начала WAV вырос примерно на 2,1%; задержка после номинального конца WAV — примерно на 8,5%, тоже меньше порога 10%. Вторую строку получаем вычитанием длительности fixture 3,025 с, без предположений о времени внутренних этапов Whisper. В первоначальной версии отчёта первая строка была ошибочно подписана "WAV end"; исходные timestamps сохранены. Медиана голосового ответа снизилась примерно на 73%, p95 — на 66%. Это короткая серия синтетического WAV, а не обещание для любой сети или речи.

Все 12 RTC-подключений получили настоящий DTLS, выбранную пару browser srflx → server relay, растущие RTP counters, partial/final ASR и собственный ответ чата. Четвёртый WSS-клиент при трёх RTC получил явный отказ до PCM: 0 chunks/bytes. После тестов admission, chat inflight и voice busy равны нулю.

WSS: пять новых повторов с непрерывным сбором событий. p50/p95 ready — 346,60/349,58 мс; начало WAV → final — 3,589/3,795 с; final → полный ответ — 15,625/20,963 с. RTCPeerConnection не создавался. WSS ready отсчитывается от создания сокета; RTC — от готового SDP. Это разные точки начала, прямое сравнение полного подключения по этим двум числам некорректно.

Ограничения и найденные отклонения

  • Текстовый ответ на один из 12 запросов занял 19,98 с. Он сохранён в p95. Workflow ожидал около 13 мс, модель выдала 1364 output tokens с eval около 19,09 с. Это не очередь Agent. Backend — Qwen3 Thinking-2507; think=false не гарантирует отключение внутреннего reasoning этой версии. Провайдер не менялся.
  • Синтетический WAV ожидает ответ 4. C2 получил его лишь в 4/12 RTC и 3/5 WSS ходов: ASR искажает короткую синтетическую речь. Это не WER и не оценка качества реального голоса. Проблемы decoder/длинной фразы/GPU scheduling остаются у voice.
  • Первые пробные WSS-прогоны потеряли часть измерений при долгой паузе чтения CDP. UI завершился, но точные timestamps восстановить нельзя. Они исключены из контрольной серии как measurement gaps; пять новых повторов проверяют truncated=false, читают события каждые 0,5 с и сохраняют terminal события.
  • В C2 Ruby spans передают traceparent, но пока не имеют request UUID attrs; поиск только по request_id не считает их tool spans. Отсутствующий queue attr не считается нулём. UI измерил Agent queue p95 2,05 мс; для полного анализа используются также VictoriaMetrics histograms. C3 добавляет безопасные UUID и имена пяти инструментов в Ruby spans.
  • CPU/RAM окна содержат простой между действиями; они не доказывают строгую экономию под одинаковой непрерывной нагрузкой. В RTC-окне весь состав 15 сервисов имел mean working set 691,5 МБ, mean CPU 0,322 core. Core — 69,2 МБ и 0,00355 core; WebRTC ingress — 65,6 МБ и 0,206 core. Дополнительные ingress входят в сумму.

Доказательства

Локальные деградации C2/C3: настоящий NATS/PG/Ruby, управляемый HTTP provider, legacy/Trickle/WSS, зависший STUN, prflx/DTLS/RTP/PCM, отмена, schema/overload, restart owner, end timeout, flush и cleanup. Они не заменяют production-проверку настоящих Whisper и Ollama.

Исходник

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