app

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

JsonDict

TAB_NAMES

_VIEWER_VS_RUN_HELP

Functions

_load_error_rows(art)

Return (artifact_key, error_message) for every *__load_error marker.

main()

Render the whole viewer: sidebar loader, navigator, and the active section.

Module Contents

app.JsonDict[source]
app.TAB_NAMES = ['Validation', 'KG Context', 'Telemetry & Temporal', 'Candidates', 'Evidence', 'Method Outputs',...[source]
app._VIEWER_VS_RUN_HELP = Multiline-String[source]
Show Value
"""
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**.
"""
app._load_error_rows(art)[source]

Return (artifact_key, error_message) for every *__load_error marker.

The fixtures/run-folder loader records a file it could not parse as a <key>__load_error entry (and sets <key> 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

Parameters:

art (JsonDict)

Return type:

list[tuple[str, str]]

app.main()[source]

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

Return type:

None