rohitsar567 Claude Opus 4.7 (1M context) commited on
Commit
f287dc6
·
1 Parent(s): 088ff0b

docs: backend/README — fix stale ADR-027 link on needs_finder + add fact_find_brain row + mark paraphraser deleted

Browse files

Final 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>

Files changed (1) hide show
  1. backend/README.md +3 -2
backend/README.md CHANGED
@@ -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 graph (`GRAPH`) + slot detection from free text. | [ADR-027](../70-docs/60-decisions/ADR-027-fact-find-llm-paraphraser.md) |
18
- | `question_paraphraser.py` | LLM rewrite of the canonical slot question so each session sounds fresh; verifier rejects off-slot drift. Cached per `(session_id, slot_id)`. | ADR-027 |
 
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. | — |