app === .. py:module:: app .. autoapi-nested-parse:: DACKAR RCA Viewer — Streamlit entry point. **Scope:** This process only **loads and displays** artifact JSON (fixtures or ``full_result.json``). It does **not** call ``RCAReasoningOrchestrator.run()`` or execute Neo4j / evidence retrieval / synthesis. To run the full RCA workflow, use your existing Python entry point (orchestrator factory + ``.run()``), then open the produced bundle here. Optional future work to embed a run in Streamlit is described in ``RCA_VIZ_ARCHITECTURE.md`` §20. Run from this directory:: cd DACKAR/src/dackar/RCA/viz pip install -r requirements.txt streamlit run app.py Example paths (adjust to your clone): - Full result: ``..\tests\test_case_2\rca_runs_case_002\v32_full_result.json`` - Fixtures: ``..\tests\test_case_2\fixtures`` Attributes ---------- .. autoapisummary:: app.JsonDict app.TAB_NAMES app._VIEWER_VS_RUN_HELP Functions --------- .. autoapisummary:: app._load_error_rows app.main Module Contents --------------- .. py:data:: JsonDict .. py:data:: TAB_NAMES :value: ['Validation', 'KG Context', 'Telemetry & Temporal', 'Candidates', 'Evidence', 'Method Outputs',... .. py:data:: _VIEWER_VS_RUN_HELP :value: Multiline-String .. raw:: html
Show Value .. code-block:: python """ This app **only loads JSON** already produced by the RCA pipeline (or hand-built fixtures). It does **not** run `RCAReasoningOrchestrator`, Neo4j, Chroma, or the synthesizer from here. **Typical workflow:** run the orchestrator in Python/CLI/notebook with the same inputs and services you use in dev, write `full_result.json` (or a run folder), then paste that path above. **Future:** embedding “Run pipeline” in Streamlit is possible (subprocess or in-process `run()`, merge results into session state) but needs config, secrets, non-blocking execution, and dependency alignment — see `RCA_VIZ_ARCHITECTURE.md` **§20**. """ .. raw:: html
.. py:function:: _load_error_rows(art) Return (artifact_key, error_message) for every ``*__load_error`` marker. The fixtures/run-folder loader records a file it could not parse as a ``__load_error`` entry (and sets ```` to None) instead of aborting the whole load, so these would otherwise be invisible. @ In, art, dict, the loaded bundle @ Out, rows, list, (key, message) pairs; empty when every file parsed .. py:function:: main() Render the whole viewer: sidebar loader, navigator, and the active section. Loads the bundle from the sidebar path (optionally merging a supplemental inputs/fixtures path), surfaces any per-file load errors, then dispatches to the panel for the selected section. @ Out, None