Spaces:
Sleeping
docs: backend/README — fix stale ADR-027 link on needs_finder + add fact_find_brain row + mark paraphraser deleted
Browse filesFinal completeness sweep caught backend/README.md still pointing the
`needs_finder.py` row at ADR-027 (the paraphraser ADR) and listing the
now-deleted `question_paraphraser.py` as if it's a live module.
Fixes:
- `needs_finder.py` row reframed as "safeguard fallback only" post-
KI-070; link routed to ADR-030 (the current fact-find architecture).
- New `fact_find_brain.py` row added between needs_finder and
fact_find_normalizer — calls out KI-070's single-LLM-call driver
and KI-090's lenient tail parser. Links ADR-030 + ADR-032.
- `question_paraphraser.py` row struck through and labelled "deleted
in KI-070"; kept in the table so future contributors searching for
the historical module name find the supersession note.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- backend/README.md +3 -2
|
@@ -14,8 +14,9 @@ FastAPI + Pydantic service that fronts every chat turn. The HTTP entry point is
|
|
| 14 |
|
| 15 |
| File | Role | Related ADR |
|
| 16 |
| --- | --- | --- |
|
| 17 |
-
| `needs_finder.py` | 9-slot fact-find
|
| 18 |
-
| `
|
|
|
|
| 19 |
| `fact_find_normalizer.py` | LLM-driven free-text → slot-value coercion (e.g. "32 lakh" → `3200000`). Goes through `NimChainLLM`, not a single client (KI-033). | — |
|
| 20 |
| `profile_extractor.py` | LLM extractor that pulls profile updates out of conversational asides ("by the way, my dad has diabetes"). Chain-pattern, never a hardcoded model. | [ADR-022](../70-docs/60-decisions/ADR-022-conversational-profile-updates.md) |
|
| 21 |
| `profile_store.py` | **NEW (KI-040).** Persistent named-profile JSON store under `40-data/profiles/`. O(1) name-keyed lookup; mirrors into `profile_rag` on every save. | — |
|
|
|
|
| 14 |
|
| 15 |
| File | Role | Related ADR |
|
| 16 |
| --- | --- | --- |
|
| 17 |
+
| `needs_finder.py` | 9-slot fact-find schema (`GRAPH`) + canonical question prompts. Post-KI-070 used as **safeguard fallback only** — primary path is `fact_find_brain.py::drive_fact_find` (single LLM call per turn). | [ADR-030](../70-docs/60-decisions/ADR-030-llm-driven-fact-find.md) |
|
| 18 |
+
| `fact_find_brain.py` | KI-070 single-LLM-call fact-find driver. One brain call per turn produces natural prose + `<FF>{...}</FF>` JSON tail (captured slots + next slot + complete flag). KI-090 made the tail parser lenient (strict / fenced / bare-JSON-tail). | [ADR-030](../70-docs/60-decisions/ADR-030-llm-driven-fact-find.md), [ADR-032](../70-docs/60-decisions/ADR-032-llm-chain-architecture.md) |
|
| 19 |
+
| ~~`question_paraphraser.py`~~ *(deleted in KI-070)* | Was an LLM rewrite of canonical slot questions (ADR-027). Superseded by `fact_find_brain.py`'s single-call architecture. | superseded by [ADR-030](../70-docs/60-decisions/ADR-030-llm-driven-fact-find.md) |
|
| 20 |
| `fact_find_normalizer.py` | LLM-driven free-text → slot-value coercion (e.g. "32 lakh" → `3200000`). Goes through `NimChainLLM`, not a single client (KI-033). | — |
|
| 21 |
| `profile_extractor.py` | LLM extractor that pulls profile updates out of conversational asides ("by the way, my dad has diabetes"). Chain-pattern, never a hardcoded model. | [ADR-022](../70-docs/60-decisions/ADR-022-conversational-profile-updates.md) |
|
| 22 |
| `profile_store.py` | **NEW (KI-040).** Persistent named-profile JSON store under `40-data/profiles/`. O(1) name-keyed lookup; mirrors into `profile_rag` on every save. | — |
|