From bf1cf9c402e4bb456904f3de97e9c462d7153ff1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Sun, 21 Jun 2026 09:31:24 +0400 Subject: [PATCH] session-13: VM SSE architecture --- History/session-13-vm-sse-architecture.md | 58 +++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 History/session-13-vm-sse-architecture.md diff --git a/History/session-13-vm-sse-architecture.md b/History/session-13-vm-sse-architecture.md new file mode 100644 index 0000000..196e7fd --- /dev/null +++ b/History/session-13-vm-sse-architecture.md @@ -0,0 +1,58 @@ +# Архитектура 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 через ВМ