Problem
llm_planner.py's system prompt instructs the model to return an empty plan when the requested target isn't in known_labels. In practice, the local model (Ollama qwen2.5:3b) instead substitutes a different, known-but-wrong label.
Evidence
Command "Go to the forklift" (not in the map) produced a task graph targeting door (a known label) instead of the documented empty-plan fallback ({"summary": "no matching target", "tasks": [], "replan_on_failure": false}).
Impact
- The executor's replan-on-
unresolvable path (fleet_orchestrator.py) rarely fires as designed, since the planner rarely emits a genuinely unresolvable target.
- The robot can confidently navigate to the wrong object with no visible error, which is worse than failing loudly.
Proposed fix
Options to evaluate:
- Validate the planner's JSON output against
known_labels in code and force a replan if target isn't an exact/fuzzy match, rather than trusting the LLM's adherence to the prompt.
- Try a stronger/instruction-following model for this task.
- Add an explicit "explore" task type the planner can emit when it has no confident target.
Acceptance criteria
Problem
llm_planner.py's system prompt instructs the model to return an empty plan when the requested target isn't inknown_labels. In practice, the local model (Ollama qwen2.5:3b) instead substitutes a different, known-but-wrong label.Evidence
Command "Go to the forklift" (not in the map) produced a task graph targeting
door(a known label) instead of the documented empty-plan fallback ({"summary": "no matching target", "tasks": [], "replan_on_failure": false}).Impact
unresolvablepath (fleet_orchestrator.py) rarely fires as designed, since the planner rarely emits a genuinely unresolvable target.Proposed fix
Options to evaluate:
known_labelsin code and force a replan iftargetisn't an exact/fuzzy match, rather than trusting the LLM's adherence to the prompt.Acceptance criteria