chat-agent

Одна схема · реальные владельцы маршрутов · вход и выход видны в каждом блоке

Подсветить:
100%
Вход: «Лечу 1000 км/ч, осталось 30 минут. Найди, где можно приземлиться».Результат: 500 км → подходящие аэропорты → карта.Пример синтетический
Клик по блоку или стрелке открывает «Вход» / «Выход» и ссылки на код. Схема сохраняет размер текста; вниз — прокрутка.
chat-agent — один путь от входа к результатуСверху текст поступает слева направо до Agent. Модель вызывается через chat_nats; результат справа через Front nginx. Ниже два отдельных входа аудио и карта. В каждой карточке примеры входа и выхода.01 · ТЕКСТ: ВХОД СЛЕВА → ПРИЁМ → АГЕНТ02 · МОДЕЛЬ: ВЫЗОВ ЧЕРЕЗ NATS → 03 · ВЫХОД СПРАВАГОЛОС: ДВА РАЗНЫХ ВХОДА → ОДИН ASR-ПОТОК → COREКАРТА И ПОГОДА: HTTP ПРЯМО В GATEWAY · ДАННЫЕ В POSTGRESchat-agent_src_front ↔ Traefik · HTTPS; chat-agent.; gis-master.ru; /core/message; JSON ↔ 202Traefik ↔ chat-agent_src_core · HTTP :8000; /core/; message; JSON ↔ 202chat-agent_src_core ↔ chat-agent_chat_nats · NATS :4222; nats.agent.; user123; JSON RPCchat-agent_chat_nats ↔ chat-agent_src_agent · NATS; nats.agent.; user123; RPC ↔ replychat-agent_src_agent → chat-agent_chat_nats · NATS PUB · nats.events.user123; fragment / final / map commandchat-agent_chat_nats ↔ chat-agent_src_llm · NATS :4222; nats.llm.user123; agent_step JSON; ↔ tools / deltaschat-agent_src_llm ↔ nats-proxy-vllm.gis-master.ru · HTTPS; /v1/chat/; completions; JSON ↔ SSEnats-proxy-vllm.gis-master.ru ↔ NATS · 192.168.28.134:37422 · NATS; remote task; ↔ chunks; subjects:; неизвестныNATS · 192.168.28.134:37422 ↔ Qwen3.8-27B-FP8 · H100 · NATS; model task; messages /; tools ↔ chunkschat-agent_chat_nats → chat-agent_src_front · NATS WS :9222; nats.events.user123; UI JSON → nginxchat-agent_src_front → chat-agent_src_front · WSS; /chat-ws; UI JSON ↓chat-agent_src_front → chat-agent_webrtc_ingress · DTLS / SRTP · браузер → webrtc_ingress; Opus RTP · выбранная ICE-пара / TURNTraefik ↔ chat-agent_webrtc_ingress · HTTPS /core/offer + WSS /core/ice/{id}; SDP / ICE / end ↔ answer / candidatesTraefik ↔ chat-agent_audio_ws_ingress · WSS /audio/ws → audio_ws_ingress; start / binary PCM / end ↔ ready / stoppedchat-agent_webrtc_ingress → chat-agent_audio_nats · NATS :4222 · webrtc.komaroff.asr.stream.{sid}; u32BE length + metadata JSON + PCM16LE 16 кГцchat-agent_audio_ws_ingress → chat-agent_audio_nats · NATS :4222; asr.stream.; {session_id}; metadata +; PCM16LEchat-agent_audio_nats ↔ py_faster_whisper_stt_whisper_to_nats · NATS; webrtc.komaroff.; asr.stream.* →; asr.text.* ←; PCM / ASR JSONchat-agent_audio_nats → chat-agent_src_core · NATS SUB · webrtc.komaroff.asr.text.*; partial / revision / final JSON → единственный Core listenerchat-agent_audio_nats ↔ NATS · 192.168.28.134:37422 · NATS leafnode · 192.168.28.134:37422; inference: ASR task ↔ eventsNATS · 192.168.28.134:37422 ↔ faster-whisper · H100 · NATS · to.inference.webrtc.asr.audio.{stream_id}; ← from.inference.webrtc.asr.events.{stream_id} · partial / finalchat-agent_webrtc_ingress ↔ stun.gis-master.ru:3478 · STUN / TURN; :3478; ICE ↔ relaychat-agent_src_front ↔ chat-agent_src_api_gateway · HTTPS /api/domain/{sid}/* → gateway :8100; Traefik + Slim Auth · JSON ↔ JSONchat-agent_src_core ↔ chat-agent_src_api_gateway · HTTP :8100 · /internal/domain/{sid}/snapshots/{rid}; POST ↔ snapshot_id · до Agent queuechat-agent_src_agent ↔ chat-agent_src_postgres · PostgreSQL :5432 · SQL ↔ rows; Agent: journal / history / artifacts / planschat-agent_src_api_gateway ↔ chat-agent_src_postgres · SQL :5432; domain /; snapshot /; cache ↔ rowschat-agent_src_api_gateway ↔ OpenWeather · HTTPS api.openweathermap.org + tile.openweathermap.org; weather JSON / PNG ↔ gateway · ключ не передаётся в браузерchat-agent_src_front — ВХОД · пользовательchat-agent_src_frontВХОД · пользовательВХОД«1000 км/ч,осталось 30 минут»ВЫХОДmessage JSONили голосTraefik — Публичный ingressTraefikПубличный ingressВХОДHTTPS / WSSSlim AuthВЫХОДHTTP / WSнужному сервисуchat-agent_src_core — Приём · ASR · admissionchat-agent_src_coreПриём · ASR · admissionВХОДtext / ASR finalsession + requestВЫХОДsnapshot + RPCHTTP 202chat-agent_chat_nats — Внутренняя шина чатаchat-agent_chat_natsВнутренняя шина чатаВХОДAgent / LLM RPCcontrol / eventsВЫХОДreply + UI JSONбез JetStreamchat-agent_src_agent — Pydantic AI · Montychat-agent_src_agentPydantic AI · MontyВХОДtext + snapshotистория сессииВЫХОДtools + ответ500 км → поискQwen3.8-27B-FP8 · H100 — На удалённом H100Qwen3.8-27B-FP8vLLM · H100На удалённом H100ВХОДmessages + toolsQwen3.8-27B-FP8ВЫХОДtool_callstext deltasNATS · 192.168.28.134:37422 — Удалённая NATS-граница192.168.28.134NATS :37422 · H100Удалённая NATS-границаВХОДASR / LLM tasks:37422 · H100ВЫХОДevents / chunkssubjects: см. деталиnats-proxy-vllm.gis-master.ru — Существующий HTTP proxynats-proxy-vllm.gis-master.ruСуществующий HTTP proxyВХОДOpenAI JSONstream=trueВЫХОДNATS requestSSE chunkschat-agent_src_llm — Наш шлюз моделиchat-agent_src_llmНаш шлюз моделиВХОДagent_step JSONmessages + toolsВЫХОДdeltas / toolsфинальный ответchat-agent_src_front — ВЫХОД · тот же браузерchat-agent_src_frontВЫХОД · тот же браузерВХОДdelta / finalIDs своей сессииВЫХОД«Дальность: 500 км»аэропорты на картеchat-agent_webrtc_ingress — Отдельный WebRTC-входchat-agent_webrtc_ingressОтдельный WebRTC-входВХОДSDP / ICEDTLS / SRTP: OpusВЫХОДPCM16LE 16 кГц20 мс = 640 байтchat-agent_audio_ws_ingress — Отдельный PCM WSS-входchat-agent_audio_ws_ingressОтдельный PCM WSS-входВХОДstart + PCMчастота браузераВЫХОДPCM16LE 16 кГцready / stoppedchat-agent_audio_nats — Прежняя шина ASRchat-agent_audio_natsПрежняя шина ASRВХОДmetadata + PCMasr.stream.{sid}ВЫХОДASR JSONpartial / finalpy_faster_whisper_stt_whisper_to_nats — Единственный live bridgepy_faster_whisper_stt_whisper_to_natsЕдинственный live bridgeВХОДPCM streamиз audio_natsВЫХОДremote ASR taskpartial / finalfaster-whisper · H100 — На удалённом H100faster-whisperH100На удалённом H100ВХОДPCM / ASR taskfaster-whisperВЫХОДpartial / finalта же фразаstun.gis-master.ru:3478 — Внешний STUN / TURNstun.gis-master.ru:3478Внешний STUN / TURNВХОДICE / allocateTCP / UDP :3478ВЫХОДcandidate / relayвыбранная параchat-agent_src_api_gateway — Карта · погода · снимкиchat-agent_src_api_gatewayКарта · погода · снимкиВХОДdomain JSONзапрос snapshotВЫХОД64 аэропортаJSON / PNG / IDchat-agent_src_postgres — История и состояниеchat-agent_src_postgresИстория и состояниеВХОДSQL + версииsnapshot / journalВЫХОДстроки данныхистория / планOpenWeather — Текущая реальная погодаOpenWeatherТекущая реальная погодаВХОДcurrent / tilesключ на сервереВЫХОДweather JSONPNG · °C / м/сchat-agent_src_front — nginx · UI и /chat-wschat-agent_src_frontnginx · /chat-wsВХОД: NATS WSВЫХОД: UI JSONHTTPSchat-agent.gis-master.ru/core/messageJSON ↔ 202HTTP :8000/core/messageJSON ↔ 202NATS :4222nats.agent.user123JSON RPCNATSnats.agent.user123RPC ↔ replyNATS PUB · nats.events.user123fragment / final / map commandNATS :4222nats.llm.user123agent_step JSON↔ tools / deltasHTTPS/v1/chat/completionsJSON ↔ SSENATSremote task↔ chunkssubjects:неизвестныNATSmodel taskmessages /tools ↔chunksNATS WS :9222nats.events.user123UI JSON → nginxWSS/chat-wsUI JSON ↓DTLS / SRTP · браузер → webrtc_ingressOpus RTP · выбранная ICE-пара / TURNHTTPS /core/offer + WSS /core/ice/{id}SDP / ICE / end ↔ answer / candidatesWSS /audio/ws → audio_ws_ingressstart / binary PCM / end ↔ ready / stoppedNATS :4222 · webrtc.komaroff.asr.stream.{sid}u32BE length + metadata JSON + PCM16LE 16 кГцNATS :4222webrtc.komaroff.asr.stream.{session_id}PCM16LENATSwebrtc.komaroff.asr.stream.*asr.text.*PCM / ASRJSONNATS SUB · webrtc.komaroff.asr.text.*partial / revision / final JSON → единственный Core listenerNATS leafnode · 192.168.28.134:37422inference: ASR task ↔ eventsNATS · to.inference.webrtc.asr.audio.{stream_id}← from.inference.webrtc.asr.events.{stream_id} · partial / finalSTUN / TURN:3478ICE ↔ relayHTTPS /api/domain/{sid}/* → gateway :8100Traefik + Slim Auth · JSON ↔ JSONHTTP :8100 · /internal/domain/{sid}/snapshots/{rid}POST ↔ snapshot_id · до Agent queuePostgreSQL :5432 · SQL ↔ rowsAgent: journal / history / artifacts / plansSQL :5432domain /snapshot /cache↔ rowsHTTPS api.openweathermap.org + tile.openweathermap.orgweather JSON / PNG ↔ gateway · ключ не передаётся в браузерОдин frontend показан дважды: слева отправка, справа результат. Служебные компоненты, подтверждения, отмена и мониторинг — в «Сервисы».