|
|
34fb8f501d
|
feat: Stage 3 — RootCauseHypothesizer for multi-agent diagnose pipeline (issue #29)
- Add app/services/diagnose/hypothesizer.py with RootCauseHypothesizer class
- Stage 3 of the multi-agent diagnose pipeline: accepts ClassifiedTimeline +
RetrievedContext, builds a structured JSON prompt, calls the LLM via the
same cf-orch task → OpenAI-compat fallback pattern used by llm.py
- Parses JSON array response into list[Hypothesis] dataclasses with UUID ids,
severity validation (WARNING→WARN, unknown→ERROR), confidence coercion
- Gracefully returns [] when llm_url/llm_model absent or clusters empty
- Add tests/test_diagnose_hypothesizer.py: 12 tests, all mocked, no LLM I/O
covering: valid response, UUID generation, malformed JSON, non-list JSON,
empty clusters, missing URL/model, max_hypotheses cap, severity mapping,
confidence string coercion
- 340 tests passing (328 prior + 12 new)
Closes: #29
|
2026-05-25 13:49:18 -07:00 |
|