webrtc-komaroff · source snapshot · 16.09.2026
webrtc-komaroff: путь реплики до карты
Медиасоединение, состояние диалога и модель разделены. Два последовательных оркестратора — главный кандидат на упрощение.
SOURCE · src_core/main.py · src_agent/service.py · stack/webrtc.drs
webrtc-komaroff · source snapshot · 16.09.2026
Что именно проверено
Снимок от 16.09.2026. Локальный checkout не переключался; новая документация привязана к указанному commit.
VERIFIED / UNKNOWN · src_langgraph_rb_node/spec · tests/test_llm_routing.py · stack/webrtc.drs
webrtc-komaroff · source snapshot · 16.09.2026
Кому принадлежат компоненты
Whisper — отдельный репозиторий. Публичные маршруты его WebUI объявлены здесь; rag-stack остаётся за границей исследования.
SOURCE · stack/webrtc.drs · src_core/processors/whisper_stream_node.py
webrtc-komaroff · source snapshot · 16.09.2026
Как устроен монорепозиторий
src_* — корни сервисов, src_front/src — внутренний каталог frontend. Перенос каталогов сам по себе не устраняет legacy.
SOURCE · docker/docker-compose.yml · src_shared/contracts · stack/webrtc.drs
webrtc-komaroff · source snapshot · 16.09.2026
Один текстовый turn
UI получает содержательный результат через события. HTTP-ответ и доставка UI-команды — разные участки пути.
SOURCE · src_core/main.py · src_agent/service.py · src_agent/agent.py
webrtc-komaroff · source snapshot · 16.09.2026
Голос выходит на тот же Agent
phrase_id связывает распознавание с turn_id. Завершение WebRTC и завершение inference требуют раздельной обработки.
SOURCE · src_core/main.py · src_core/processors/whisper_stream_node.py
webrtc-komaroff · source snapshot · 16.09.2026
Аудиоконтракт между репозиториями
Пропускная способность рассчитана по формату. Наличие seq в пакете ещё не доказывает контроль потерь у потребителя.
SOURCE / РАСЧЁТ · src_core/processors/track_source_node.py · src_core/processors/whisper_stream_node.py
webrtc-komaroff · source snapshot · 16.09.2026
Куда ведёт вызов из Core
Дерево выборочное: показаны границы, где появляются внешние вызовы и постоянные записи.
SOURCE · src_core/handlers/handle_transcription.py · src_agent/agent.py · src_langgraph_rb_node/lib/src_langgraph_rb_node/runtime/engine.rb
webrtc-komaroff · source snapshot · 16.09.2026
Состояние диалога: два commit вместо одного
Уникальный ключ истории защищает строку, но не запрещает повторно вызвать модель или инструмент.
SOURCE · src_agent/agent.py · src_agent/repositories/runtime_state.py · src_agent/utils/db.py
webrtc-komaroff · source snapshot · 16.09.2026
Три workflow runtime — одна продуктовая роль
Сначала нужен общий корпус parity. Неиспользование движка в одном DRS не доказывает отсутствие других consumers.
SOURCE · src_langgraph/main.py · src_langgraph_rb · src_langgraph_rb_node · stack/webrtc.drs
webrtc-komaroff · source snapshot · 16.09.2026
Аэропорты: где действительно нужны LLM-вызовы
Лишний LLM для маршрута и финального ответа уже удалён. Предложение — объединить route + params, сохранив качество и валидацию.
SOURCE · src_langgraph_rb_node/spec/scenarios/find_nearest_airport_spec.rb · src_langgraph_rb_node/lib
webrtc-komaroff · source snapshot · 16.09.2026
Инструменты пока демонстрационные
Это стенд голосового интерфейса и сценарной оркестрации. Реальные источники должны иметь provenance, freshness и явные ошибки.
SOURCE · src_api_gateway/main.py
webrtc-komaroff · source snapshot · 16.09.2026
Очередь начинается раньше семафора
Семафор не ограничивает количество уже созданных задач. Нужны p95 queue wait, oldest age, RSS и тест медленного downstream.
SOURCE → ПРЕДЛОЖЕНИЕ 03 · src_core/processors/whisper_stream_node.py · src_llm
webrtc-komaroff · source snapshot · 16.09.2026
Реплики требуют не только количества
Queue group устраняет fan-out одной подписки, но не даёт порядка сессии, durable delivery или exactly-once.
SOURCE → ПРЕДЛОЖЕНИЕ 04 · src_langgraph_rb_node/lib/src_langgraph_rb_node/runtime/service.rb · src_langgraph_rb/lib/src_langgraph_rb/runtime/service.rb · docs.nats.io
webrtc-komaroff · source snapshot · 16.09.2026
Браузеру нужен поток своей сессии
Общее имя subject не является изоляцией. Многопользовательский режим требует проверки чужих подписок и восстановления после disconnect.
SOURCE → ПРЕДЛОЖЕНИЕ 06 · src_front/src · src_agent/service.py · docs.nats.io
webrtc-komaroff · source snapshot · 16.09.2026
Поставка не равна live-проверке
Зелёная сборка не подтверждает работающий голосовой путь. В этом исследовании runtime не менялся и live smoke не выполнялся.
VERIFIED / UNKNOWN · .gitlab-ci.yml · docker/docker-compose.yml · stack/webrtc.drs
webrtc-komaroff · source snapshot · 16.09.2026
Как сокращать legacy без потери поведения
Удалять можно доказанно неиспользуемый путь. Размер исходников — показатель сопровождения, а не доказательство производительности.
ПРЕДЛОЖЕНИЕ 05 · src_langgraph · src_langgraph_rb · src_langgraph_rb_node
webrtc-komaroff · source snapshot · 16.09.2026
Более крупный шаг: один сервис диалога
Исчезает один request/reply boundary. Выигрыш latency нужно измерить; разделение media и GPU сохраняет смысл.
ПРЕДЛОЖЕНИЕ 07 · src_agent/agent.py · src_langgraph_rb_node/lib/src_langgraph_rb_node/runtime/service.rb
webrtc-komaroff · source snapshot · 16.09.2026
Полная замена нужна при требованиях к recovery
Это самый дорогой вариант. Принимать его следует по crash matrix и допустимой потере заданий, а не по моде на фреймворк.
ПРЕДЛОЖЕНИЕ 08 · src_agent/agent.py · docs.nats.io · docs.langchain.com
webrtc-komaroff · source snapshot · 16.09.2026
Приоритет: корректность, меньше вызовов, проще схема
Для каждого изменения есть отдельный Markdown: доказательства, схема, метрики, риски и возврат на прежний путь.
ПЛАН ПРОВЕРКИ · src_agent/agent.py · src_core/main.py · opentelemetry.io
Управление
←/→, Page Up/Page Down и Space переключают слайды. Home и End переходят к краям. F включает полный экран. Escape закрывает это окно.