rufimelo commited on
Commit
af55c58
Β·
verified Β·
1 Parent(s): db97132

Add CWE/model sidebar selectors + scan logs/ subdirs

Browse files
Files changed (1) hide show
  1. app.py +37 -9
app.py CHANGED
@@ -14,10 +14,10 @@ from pathlib import Path
14
 
15
  import streamlit as st
16
 
17
- # Local: scripts/trajectory_viewer.py β†’ repo_root/logs/github_red
18
- # Space: /app/app.py β†’ /app/logs/github_red
19
- _local_logs = Path(__file__).parent.parent / "logs" / "github_red"
20
- _space_logs = Path(__file__).parent / "logs" / "github_red"
21
  LOGS_DIR = _space_logs if _space_logs.exists() else _local_logs
22
 
23
  # ── Colours & labels ────────────────────────────────────────────────────────
@@ -707,6 +707,29 @@ def render_steps(steps: list) -> None:
707
  )
708
 
709
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
710
  # ── Main app ──────────────────────────────────────────────────────────────────
711
 
712
 
@@ -735,12 +758,17 @@ def main() -> None:
735
  if uploaded is not None:
736
  eval_source = uploaded
737
  else:
738
- log_files = sorted(glob.glob(str(LOGS_DIR / "*.eval")), reverse=True)
739
- if log_files:
 
 
 
 
 
740
  selected_path = st.selectbox(
741
- "Or pick a local run log",
742
- log_files,
743
- format_func=lambda p: Path(p).stem[:50],
744
  )
745
  eval_source = selected_path
746
 
 
14
 
15
  import streamlit as st
16
 
17
+ # Local: scripts/trajectory_viewer.py β†’ repo_root/logs
18
+ # Space: /app/app.py β†’ /app/logs
19
+ _local_logs = Path(__file__).parent.parent / "logs"
20
+ _space_logs = Path(__file__).parent / "logs"
21
  LOGS_DIR = _space_logs if _space_logs.exists() else _local_logs
22
 
23
  # ── Colours & labels ────────────────────────────────────────────────────────
 
707
  )
708
 
709
 
710
+ # ── Log index ─────────────────────────────────────────────────────────────────
711
+
712
+
713
+ @st.cache_data(show_spinner=False)
714
+ def _log_index(logs_dir: str) -> dict[str, dict[str, list[str]]]:
715
+ """Scan logs_dir recursively; return {cwe: {model: [path, ...]}} newest-first."""
716
+ index: dict[str, dict[str, list[str]]] = {}
717
+ for p in sorted(Path(logs_dir).rglob("*.eval"), reverse=True):
718
+ cwe = p.parent.name # directory name used as CWE/task label
719
+ model = "unknown"
720
+ try:
721
+ with zipfile.ZipFile(str(p)) as z:
722
+ if "header.json" in z.namelist():
723
+ h = json.loads(z.read("header.json"))
724
+ usage = h.get("stats", {}).get("model_usage", {})
725
+ if usage:
726
+ model = next(iter(usage))
727
+ except Exception:
728
+ pass
729
+ index.setdefault(cwe, {}).setdefault(model, []).append(str(p))
730
+ return index
731
+
732
+
733
  # ── Main app ──────────────────────────────────────────────────────────────────
734
 
735
 
 
758
  if uploaded is not None:
759
  eval_source = uploaded
760
  else:
761
+ index = _log_index(str(LOGS_DIR))
762
+ if index:
763
+ cwe_options = sorted(index.keys())
764
+ selected_cwe = st.selectbox("CWE / Task", cwe_options)
765
+ model_options = sorted(index[selected_cwe].keys())
766
+ selected_model = st.selectbox("Model", model_options)
767
+ file_list = index[selected_cwe][selected_model]
768
  selected_path = st.selectbox(
769
+ "Run",
770
+ file_list,
771
+ format_func=lambda p: Path(p).stem[:60],
772
  )
773
  eval_source = selected_path
774