| """LLM-backed natural-language explainers (Day 7). | |
| `explain()` is the ONLY public entry point. It guarantees a non-empty | |
| rationale every call: tries OpenRouter when available, falls back to a | |
| deterministic template otherwise. The deterministic path is the source | |
| of truth for tests; the LLM path is gated behind env config. | |
| """ | |
| from src.llm.explainer import ExplainPayload, ExplainResult, explain # noqa: F401 | |