[site-finder] EPIC 13: Чат-интерфейс над движком (LLM-оркестрация + UI-панель) #957

Closed
opened 2026-06-02 16:32:16 +00:00 by Light1YT · 2 comments
Owner

Часть #944 (Site Finder v2 / ТЗ ГенГеныч).

Статус: NEW · Приоритет: P1 · ТЗ §12.4

Scope

LLM-слой отвечает на §12.4 («что строить?», «что через год?», «риск затоварки?», «сделай ТЗ для архитекторов», «слабые места») вызывая движок (EPIC8-11) как tools, grounding в посчитанных данных — НЕ свободная генерация. Стриминг-чат на экране анализа.

Зависимости: EPIC11, EPIC16
Уже есть (EXTEND): новый services/chat/

**Часть #944 (Site Finder v2 / ТЗ ГенГеныч).** Статус: **NEW** · Приоритет: **P1** · ТЗ §12.4 ## Scope LLM-слой отвечает на §12.4 («что строить?», «что через год?», «риск затоварки?», «сделай ТЗ для архитекторов», «слабые места») вызывая движок (EPIC8-11) как tools, grounding в посчитанных данных — НЕ свободная генерация. Стриминг-чат на экране анализа. **Зависимости:** EPIC11, EPIC16 **Уже есть (EXTEND):** новый services/chat/
Light1YT added the
GG-форсайт
site-finder
labels 2026-06-02 16:32:16 +00:00
lekss361 added this to the Site Finder v2 — Foresight (GG-форсайт) milestone 2026-06-02 19:03:02 +00:00
Collaborator

Backend чата готов (оба шага merged):

  • Step 1 #1172: детерминированный POST /api/v1/chat/ask — читает персистнутый §22-отчёт (latest_run_for), intent-router → шаблонные RU-ответы с числами движка verbatim (§16). Работает в проде СЕЙЧАС при llm_enabled=False.
  • Step 2+3 #1173: LLM tool-loop (5 section-tools, pure-срезы отчёта) + composition; §19 redaction-gate (allowlist; market_now/meta НЕ экспонируются → высоко-PII данные не уходят в LLM; planted-secret тест); fallback-always на детерминированный путь при любом сбое/disabled. 77 тестов, code-reviewer .

Остаётся по #957:

  1. Frontend chat UI (отдельный frontend-track) — панель чата на forecast-view, вызов /api/v1/chat/ask, рендер answer + advisory-badge + grounded_in.
  2. Live-активация LLM-пути (ваше действие): ротировать засвеченный ключ → OPENAI_API_KEY в прод-env (backend+worker) → LLM_ENABLED=true. До этого чат работает на детерминированном пути.

Оставляю issue открытой до frontend + активации.

**Backend чата готов** (оба шага merged): - **Step 1 #1172**: детерминированный `POST /api/v1/chat/ask` — читает персистнутый §22-отчёт (`latest_run_for`), intent-router → шаблонные RU-ответы с числами движка verbatim (§16). Работает в проде СЕЙЧАС при `llm_enabled=False`. - **Step 2+3 #1173**: LLM tool-loop (5 section-tools, pure-срезы отчёта) + composition; §19 redaction-gate (allowlist; `market_now`/`meta` НЕ экспонируются → высоко-PII данные не уходят в LLM; planted-secret тест); fallback-always на детерминированный путь при любом сбое/disabled. 77 тестов, code-reviewer ✅. **Остаётся по #957:** 1. **Frontend chat UI** (отдельный frontend-track) — панель чата на forecast-view, вызов `/api/v1/chat/ask`, рендер answer + advisory-badge + grounded_in. 2. **Live-активация LLM-пути** (ваше действие): ротировать засвеченный ключ → `OPENAI_API_KEY` в прод-env (backend+worker) → `LLM_ENABLED=true`. До этого чат работает на детерминированном пути. Оставляю issue открытой до frontend + активации.
Collaborator

EPIC 13 (чат над движком) реализован и верифицирован в проде (qa-tester, 2026-06-13):

  • services/chat/{orchestrator,intents,tools,retrieval,safe_payload}.py + schemas/chat.py, router смонтирован /api/v1/chat (main.py:163), эндпоинт POST /chat/ask.
  • Live-запрос → 200, report_status=ready, grounded_in={run_id, schema_version, sections}, ответ с реальными числами движка (индекс дефицита, мес предложения, open units) — grounding детерминированный, НЕ свободная генерация.
  • RBAC: без X-Authenticated-User → 401.
  • Прод работает на LLM_ENABLED=true + OpenAI (Q2 решён де-факто командой — внешний провайдер с redaction-слоем services/llm/redaction.py). Graceful-fallback на детерминированный grounding существует в коде.

Закрываю как реализованное в проде.

EPIC 13 (чат над движком) реализован и **верифицирован в проде** (qa-tester, 2026-06-13): - `services/chat/{orchestrator,intents,tools,retrieval,safe_payload}.py` + `schemas/chat.py`, router смонтирован `/api/v1/chat` (main.py:163), эндпоинт `POST /chat/ask`. - Live-запрос → 200, `report_status=ready`, `grounded_in={run_id, schema_version, sections}`, ответ с реальными числами движка (индекс дефицита, мес предложения, open units) — grounding детерминированный, НЕ свободная генерация. - RBAC: без X-Authenticated-User → 401. - Прод работает на `LLM_ENABLED=true` + OpenAI (Q2 решён де-факто командой — внешний провайдер с redaction-слоем `services/llm/redaction.py`). Graceful-fallback на детерминированный grounding существует в коде. Закрываю как реализованное в проде.
Sign in to join this conversation.
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#957
No description provided.