Evaluation report fixing non existing video recordings - #865
Conversation
Signed-off-by: Clemens Volk <cvolk@nvidia.com>
Signed-off-by: Clemens Volk <cvolk@nvidia.com>
🤖 Isaac Lab-Arena Review BotSummaryThis fixes a real bug: when Findings🟡 Warning: 🔵 Improvement: Test CoverageNo tests exist for VerdictMinor fixes needed — the fix itself is correct and well-scoped; the main gap is a regression test for the result-only path. |
Greptile SummaryThis PR fixes evaluation reports being written with 0 jobs and 0 episodes when
Confidence Score: 4/5The change is safe to merge; it corrects a clear gap where result-only runs produced empty reports, and all the union/fallback logic is straightforward. The union logic at the job, env, and episode levels is implemented correctly with safe fallbacks at each layer. The only gap is that the EpisodeVideos and JobReport docstrings were not updated to reflect that videos are now optional, which could mislead future contributors. isaaclab_arena/visualization/report.py — specifically the EpisodeVideos and JobReport class docstrings, which still describe video-centric semantics. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[_scan_jobs] --> B[_scan_results: load JSONL]
A --> C[Glob *.mp4: load videos]
B --> D[Union jobs from raw and results]
C --> D
D --> E[For each job]
E --> F[Build result_keys_by_env from JSONL]
E --> G[video_envs from raw]
F --> H[Union env indices]
G --> H
H --> I[For each env_index]
I --> J[Union recording keys from videos and JSONL]
J --> K[For each recording_key]
K --> L[record from JSONL - empty dict if missing]
K --> M[video_by_camera from raw - empty dict if missing]
L --> N[Append EpisodeVideos]
M --> N
N --> O[JobReport with cameras - empty list if no videos]
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
A[_scan_jobs] --> B[_scan_results: load JSONL]
A --> C[Glob *.mp4: load videos]
B --> D[Union jobs from raw and results]
C --> D
D --> E[For each job]
E --> F[Build result_keys_by_env from JSONL]
E --> G[video_envs from raw]
F --> H[Union env indices]
G --> H
H --> I[For each env_index]
I --> J[Union recording keys from videos and JSONL]
J --> K[For each recording_key]
K --> L[record from JSONL - empty dict if missing]
K --> M[video_by_camera from raw - empty dict if missing]
L --> N[Append EpisodeVideos]
M --> N
N --> O[JobReport with cameras - empty list if no videos]
|
Summary
Evaluation reports were written empty when camera video recording
--record_camera_videowas disabled:Wrote evaluation report with 0 job(s) and 0 episode(s) to: /workspaces/isaaclab_arena/output/camera_sensitivity/2026-07-06_08-13-26/index.htmlThe report now combines JSONL records and videos, with video recording being optional