# Архитектура v2 — Event Sourcing через ВМ Дата: 2026-06-20 ## Почему ВМ - k8s Ingress буферизирует SSE → соединение рвётся - На ВМ nginx с `proxy_buffering off` + `proxy_read_timeout 600s` — всё работает - ВМ уже проксирует загрузку файлов и конвертацию .doc - ВМ — единственное место где можно делать долгие стриминговые запросы ## Схема ``` Браузер (index.cfm) │ ├─ загрузка файлов: contracts.kube5s.ru/lucee/upload.cfm (ВМ → Lucee) ├─ парсинг: contract.luceek8s.dev.nubes.ru/parser.cfm (Lucee напрямую) │ └─ v2 сравнение: contracts.kube5s.ru/process-v2?contract_id=X (SSE через ВМ) │ ├─ GET Lucee: api.cfm → список supplements ├─ для каждого supplement: │ ├─ GET Lucee: api.cfm → current_spec из spec_current │ ├─ GET Lucee: api.cfm → elements_json │ ├─ POST локально: /llm-ops (httpx → api.aillm.ru) │ ├─ POST Lucee: apply_events.cfm │ └─ flush SSE: прогресс └─ flush SSE: done ``` ## Эндпоинты | Эндпоинт | Где | Что делает | |----------|-----|------------| | `/llm-ops` | ВМ:8766 | Принимает {current_spec, doc_text} → LLM → {mode, ops} | | `/process-v2` | ВМ:8766 | SSE-стриминг: оркеструет весь v2 пайплайн | | `apply_events.cfm` | Lucee | Принимает {supplement_id, ops} → транзакционно применяет | | `process_v2.cfm` | Lucee | Удалить (логика перенесена на ВМ) | ## Файлы | Файл | Действие | |------|---------| | `contractor/deploy/convert_server.py` | Добавить `/process-v2` SSE endpoint | | `contractor/deploy/llm_prompt.py` | Уже готов (build_prompt) | | `contractor/deploy/nginx-contracts.conf` | Добавить `location /process-v2` | | `contractor/process.cfm` | Убрать include process_v2.cfm | | `contractor/process_v2.cfm` | Удалить | | `contractor/apply_events.cfm` | Уже готов | | `contractor/index.cfm` | Кнопка v2 → ВМ EventSource | ## Проверка 1. `/llm-ops` на ВМ — работает (проверено) 2. nginx с `/process-v2` → 8766 — после деплоя 3. `apply_events.cfm` на Lucee — работает (проверено) 4. Кнопка v2 в UI → SSE через ВМ