"""Чат по §22-форсайту участка (#957). Step 1 детерминированный + Step 2 LLM tool-loop.

Под-модули:
  • retrieval    — read-only достаёт персистентный SiteFinderReport участка.
  • intents      — роутинг RU-вопроса в intent + шаблонный RU-ответ (Step-1, FALLBACK).
  • tools        — read-only секционные tool'ы (срезы загруженного report_dict).
  • safe_payload — §19-гейт: единственная сборка исходящего SafePayload (аллоулист).
  • orchestrator — LLM tool-loop + RU-проза поверх отчёта; при сбое LLM → Step-1 fallback.

LLM-слой ОПЦИОНАЛЬНЫЙ: при llm_enabled=False или любом сбое возвращается детерм. Step-1.
"""

from __future__ import annotations

from app.services.chat.intents import render_answer, route_intent
from app.services.chat.orchestrator import ChatResult, orchestrate_chat
from app.services.chat.retrieval import get_report_for_chat

__all__ = [
    "ChatResult",
    "get_report_for_chat",
    "orchestrate_chat",
    "render_answer",
    "route_intent",
]
