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

Доказательства архитектурного снимка

Дата: 2026-09-16. Source commit: 772de4a714ae6c5abea91946e85a1953ee919ec3. SOURCE и LOCAL TEST не утверждают состояние production. CALCULATED — арифметика из параметров кода; MEASURED SOURCE — статический подсчёт. Предложения не выданы за реализованные свойства.

ID Утверждение Статус Первичный источник Граница / пробел
W01 HTTP входы, WebRTC и общий путь текста SOURCE src_core/main.py — setup_routes; handle_transcription.py; handle_track.py Named live voice smoke не выполнялся
W02 Agent является владельцем runtime и истории SOURCE src_agent/agent.py — run; _run_with_optimistic_lock; utils/db.py Не измерялась частота конфликтов
W03 Runtime UPDATE и persist_chat_turn не в общей транзакции SOURCE src_agent/repositories/runtime_state.py — save_runtime_state; src_agent/utils/db.py:persist_chat_turn Последствия частичного отказа — INFERRED
W04 Три workflow, DRS default ruby_node SOURCE stack/webrtc.drs — WORKFLOW_RUNTIME; NATS_WORKFLOW_RUN_SUBJECT Фактический env работающего stack UNKNOWN
W05 Две Ruby реализации subscribe без queue group SOURCE src_langgraph_rb_node/lib/src_langgraph_rb_node/runtime/service.rb — Service.run; src_langgraph_rb/lib/src_langgraph_rb/runtime/service.rb Дубли при репликации — вывод из семантики NATS, не live trace
W06 Agent, LLM, API tools имеют queue groups SOURCE src_agent/service.py — subscribe; src_llm/utils/base_service.py; src_api_gateway/main.py Это не решает идемпотентность и порядок turn
W07 Аэропорты: новый turn 2 LLM calls; route только при intent SOURCE / TEST src_langgraph_rb_node/spec/scenarios/find_nearest_airport_spec.rb — routing_decision + tool_params; tool_calls assertions LLM/tool ответы подменены
W08 Audio producer создаёт task до semaphore SOURCE src_core/processors/whisper_stream_node.py — handle_frame; _publish Не выполнен overload benchmark
W09 LLM задачи также создаются до semaphore SOURCE src_llm/utils/base_service.py — _handle_message; _process_message duration_ms отсчитывается после ожидания semaphore
W10 Браузер подписан на фиксированный user123 subject SOURCE src_front/src/config/appConfig.ts — natsEventsSubject; assistantApp.ts:handleServerEvent Broker ACL и live tenant isolation UNKNOWN
W11 init_map: 2 последовательных HTTP calls и session на запрос SOURCE src_core/handlers/handle_init_map.py — init_map_handler Потребность в согласованном snapshot требует решения API
W12 API: фиксированная позиция и демонстрационные данные SOURCE src_api_gateway/main.py — _current_position; _tool_get_weather; _build_route_data Нет утверждения о реальных рейсах/дорожном маршруте
W13 GraphRunner результаты внешних шагов держит в RAM SOURCE src_langgraph_rb_node/lib/src_langgraph_rb_node/runtime/graph_runner.rb — request_results; src_langgraph/engine.py:compile() Crash resume не доказан
W14 25 Ruby examples и 7 Python tests проходят LOCAL TEST src_langgraph_rb_node/spec — Docker с read-only mount exact worktree; tests/test_llm_routing.py 16.09.2026; не E2E
W15 CI tests job закомментирована SOURCE .gitlab-ci.yml — build push; deploy; #tests Полный CI test gate не подтверждён
W16 Raw PCM=32000 B/s; 50 frames/s CALCULATED src_core/handlers/handle_track.py — 16000 samples/s × 2 B × mono; frame_duration_ms=20 Без metadata, NATS, RTP overhead
W17 Physical code lines: 2263 / 4205 / 3913 MEASURED SOURCE src_langgraph — tracked .py/.rb; воспроизводимая команда ниже Включены tests/comments; не dead code и не cognitive complexity
W18 Документация создана по remote main SOURCE AGENTS.md — HEAD 772de4a; detached worktree локальный источник Основной локальный main f0a6eac сохранён

Метод и сохранность

Подсчёт физических строк выполнялся отдельно для src_langgraph, src_langgraph_rb и src_langgraph_rb_node; <runtime> ниже заменяется точным именем каталога:

git ls-files <runtime> | rg '\.(py|rb)$' | xargs wc -l

Исследование началось с AGENTS.md и .knowledge. Следующим источником были calls, routes, subscriptions, DTO, schema, tests, Dockerfiles и DRS. Существующие презентации, OpenWiki и ранее написанные архитектурные обзоры не служили доказательствами.

DRS прочитан статически, без исполнения Ruby DSL. Значения credentials не переносятся в документы. Готовые материалы не меняют код приложения и не публикуются в runtime.

CW: cw sync --pull --company monitorsoft остановился на dirty shared scope. cw sync --company monitorsoft установил текущие рабочие skills; cw validate прошёл без ошибок и предупреждений (76 skills, 33 agents во всём проверенном каталоге). Fetch корневого и shared repositories показал 0/0 divergence. Локальные правки shared сохранены.

Что остаётся неизвестным

Текущие image digests, число реплик, фактические лимиты ресурсов и p50/p95/p99 не измерялись. Тесты с подменёнными модельными ответами подтверждают ветвление, но не качество LLM/ASR. Изменения архитектуры требуют своего baseline и named сценариев приёмки.

Исходник

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