# Медиатракт 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 входят в сумму.

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

- [33 хода: обычные](</experiments/voice-ai/archive/w/DOCS/evidence/chat-agent-c2-ordinary.json>),
  [tools и уточнения](</experiments/voice-ai/archive/w/DOCS/evidence/chat-agent-c2-cases.json>),
  [12 RTC и admission](</experiments/voice-ai/archive/w/DOCS/evidence/chat-agent-c2-audio.json>),
  [5 WSS](</experiments/voice-ai/archive/w/DOCS/evidence/chat-agent-c2-wss.json>).
- [Tempo: 36 генераций](</experiments/voice-ai/archive/w/DOCS/evidence/chat-agent-c2-telemetry.json>),
  [длинный ответ](</experiments/voice-ai/archive/w/DOCS/evidence/chat-agent-c2-text-outlier.json>),
  [VictoriaMetrics: состав, CPU/RAM](</experiments/voice-ai/archive/w/DOCS/evidence/chat-agent-c2-resources.json>).
- [C0](</experiments/voice-ai/archive/w/DOCS/CHAT_AGENT_BASELINE_C0.md>), [C1](</experiments/voice-ai/archive/w/DOCS/CHAT_AGENT_EXECUTION_C1.md>),
  [контракты транспорта](</experiments/voice-ai/archive/w/DOCS/AUDIO_TRANSPORTS.md>).
- [CI 4914](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/pipelines/4914>):
  checks, backend, consumers, preflight и stack deployment; затем Frontend обновлён
  адресно через штатный Insight после проверки backend.
- [CI 4915](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/pipelines/4915>):
  checks, два исправленных ingress, Ruby consumer и preflight. Deployment job не
  повторялась: конфигурация стэка не изменилась; runtime revisions проверены отдельно.

Локальные деградации 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.
