feat: nav evaluator - #3344
Conversation
Greptile SummaryThe PR introduces the
Confidence Score: 4/5The PR is not yet safe to merge because invalid numeric overrides can silently corrupt evaluation scores and invalid worker counts remain accepted. Numeric validation still permits NaN values to reach goal and kinematic checks, while the previously reported worker-count issue remains in the current CLI and silently selects serial execution for zero or negative counts. Files Needing Attention: dimos/navigation/nav_3d/evaluator/config.py, dimos/navigation/nav_3d/evaluator/cli.py, dimos/navigation/nav_3d/evaluator/runner.py Important Files Changed
Reviews (6): Last reviewed commit: "Fix" | Re-trigger Greptile |
| ) | ||
| for name in ( | ||
| "voxel_size", | ||
| "max_range", | ||
| "robot_height", | ||
| "robot_length", | ||
| "robot_width", | ||
| "goal_tolerance", | ||
| "visit_radius_m", |
There was a problem hiding this comment.
Incomplete numeric override validation
When --set supplies a non-positive value such as kinematic_window_m=0, validate() accepts it because several numeric fields are omitted from the positivity checks. The invalid value then reaches operations such as np.arange(..., spacing), causing a runtime exception instead of a readable CLI validation error.
Knowledge Base Used: Navigation flow: from goal to motor commands
| suites = load_suites(manifests or None) | ||
| if dataset is not None: | ||
| wanted = Path(dataset).stem | ||
| suites = [ | ||
| s |
There was a problem hiding this comment.
When --workers is zero or negative, Typer accepts the value even though evaluation requires at least one worker. Zero and negative values silently bypass the requested multiprocessing path, while invalid counts reaching pool construction abort evaluation before any dataset is scored.
| for name in ( | ||
| "voxel_size", | ||
| "max_range", | ||
| "robot_height", | ||
| "robot_length", | ||
| "robot_width", | ||
| "goal_tolerance", | ||
| "visit_radius_m", | ||
| "kinematic_window_m", | ||
| ): |
There was a problem hiding this comment.
Numeric validation remains incomplete
When --set supplies a non-positive value for an omitted field such as support_radius_m, support_depth_m, align_tol, max_slope, or max_step_m, validation accepts it. These values then invalidate support, alignment, or kinematic calculations, causing incorrect scores or an empty replay that terminates with ValueError("no cases to evaluate").
| for name in ( | |
| "voxel_size", | |
| "max_range", | |
| "robot_height", | |
| "robot_length", | |
| "robot_width", | |
| "goal_tolerance", | |
| "visit_radius_m", | |
| "kinematic_window_m", | |
| ): | |
| for name in ( | |
| "voxel_size", | |
| "max_range", | |
| "robot_height", | |
| "robot_length", | |
| "robot_width", | |
| "support_radius_m", | |
| "support_depth_m", | |
| "goal_tolerance", | |
| "align_tol", | |
| "visit_radius_m", | |
| "max_slope", | |
| "max_step_m", | |
| "kinematic_window_m", | |
| ): |
| for name in ( | ||
| "voxel_size", | ||
| "max_range", | ||
| "robot_height", | ||
| "robot_length", | ||
| "robot_width", | ||
| "support_radius_m", | ||
| "support_depth_m", | ||
| "goal_tolerance", | ||
| "align_tol", | ||
| "visit_radius_m", | ||
| "max_slope", | ||
| "max_step_m", | ||
| "kinematic_window_m", | ||
| ): | ||
| if getattr(self, name) <= 0: |
There was a problem hiding this comment.
Numeric validation still accepts invalid bounds
When --set supplies nan for fields such as goal_tolerance or max_slope, the <= 0 checks accept it, causing valid paths to fail goal checks or invalid paths to pass kinematic checks. ground_margin and body_clearance are also omitted from the positivity loop, so non-positive collision-band bounds can produce incorrect collision results and silently corrupt evaluation scores.
Knowledge Base Used: Navigation flow: from goal to motor commands
Contribution path
Problem
Automated navigation tests
Solution
dimos nav-evalrunruns on the datasetsingestautomatically adds test cases for a new datasetpick-caselets you manually add test cases. you can specify tags, negative cases, etcHow to Test
dimos nav-eval runAI assistance
Checklist