Skip to content

Report dataset KPIs from generation records - #84

Draft
bokalnv wants to merge 4 commits into
mainfrom
bokal/feat/kpis
Draft

bokalnv wants to merge 4 commits into
mainfrom
bokal/feat/kpis

Conversation

@bokalnv

@bokalnv bokalnv commented Oct 19, 2026

Copy link
Copy Markdown
Collaborator

Summary

Report dataset KPIs from generation records

Detailed description

  • Why: a run reports only success and attempt counts. Dataset users also need yield and cost, demo quality, coverage of the reset ranges, and why attempts fail.
  • What changed:
    • generate_dataset.py --result_file adds a run block to the result JSON (seed, stop rule, device, env count, control step, setup and generation time, source digest, reset ranges) and writes <result_file stem>.attempts.jsonl, one line per attempt (outcome, failure cause, failed subtask, timing, initial object poses, motion-planner call summaries).
    • Every generated episode records intended_eef_pose and eef_pose per step under obs/datagen_info. Channels whose action commands no pose (tracking-only) record no intended pose, via a new EmbodimentAdapter.get_eef_names_with_pose_action() hook.
    • The cuRobo planner keeps last_plan_summary; annotate_demos.py --summary_file saves annotation counts and rejection reasons.
    • validate_dataset.py --report computes 12 KPIs offline: success rate (Wilson interval, corrected for attempts cancelled at the stop), demos per hour, demos per human demo, annotation yield, tracking error, action saturation, motion smoothness, initial-state coverage, success by initial configuration, failure share, planner failure types, planning time. Definitions and formulas: docs/pages/references/kpis.rst.
  • Impact: generation behavior is unchanged; the new files are written only with --result_file. Each episode gains two small per-step pose datasets per end effector.

Testing

  • Unit tests (-m "not with_subprocess"): 355 passed, three runs.
  • End-to-end tests (autodata_tests/e2e, 22 tests including the Arena workflows): all passed, two runs.
  • KPI numbers from Franka MimicGen, GR1 DexMimicGen, SkillGen bin and G1 loco-manipulation runs will follow in a comment.

Generation now writes a run block in the result JSON, an attempt log
next to it, and per-step intended and achieved end-effector poses.
Channels whose action commands no pose record no intended pose. The
cuRobo planner keeps a summary of each planning call, and
annotate_demos.py can write a summary file. validate_dataset.py
--report computes the KPIs from these files.
@coderabbitai

coderabbitai Bot commented Oct 19, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

Label demos per hour with the GPU or CPU model. Drop recorded fields no KPI reads (seed, stop rule, setup time, step count, source digest, cuRobo solver timings, annotation mode and re-marks), simplify the cuRobo plan summary to outcome, status and wall time, and shorten the KPI docs.
Generation records obs/datagen_info with the recorder term annotation already uses, so tracking error compares achieved and commanded poses for generated and source data alike. Coverage takes its bounds from the attempted starts, failure share reports the cause only, planning time comes from a timer around the planner call, and annotation yield from episode counts. This drops the cuRobo, Datastream, adapter and annotation changes and the planner failure-type KPI.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant