From 6e64c20cf1d46762c34633bde0c1ed766b31b035 Mon Sep 17 00:00:00 2001 From: Pepijn Date: Fri, 15 May 2026 13:47:33 +0200 Subject: [PATCH] runtime: stop seeding plan/memory from the dataset (unused) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The current recipe trains neither plan nor memory, and no inference step consumes them — ``_msgs_for_subtask`` renders the bare task and ``LowLevelForward`` conditions on the subtask. Bootstrapping ``current_plan`` / ``current_memory`` from the dataset's ``language_persistent`` annotations therefore only placed a stale, do-nothing plan in the status panel. Keep seeding ``current_subtask`` — it's a useful first-frame fallback for ``LowLevelForward`` before ``HighLevelSubtaskFwd`` produces its first subtask. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/lerobot/scripts/lerobot_smolvla2_runtime.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/lerobot/scripts/lerobot_smolvla2_runtime.py b/src/lerobot/scripts/lerobot_smolvla2_runtime.py index 09beda251..941ba9641 100644 --- a/src/lerobot/scripts/lerobot_smolvla2_runtime.py +++ b/src/lerobot/scripts/lerobot_smolvla2_runtime.py @@ -1335,15 +1335,13 @@ def main(argv: list[str] | None = None) -> int: runtime.state["text_gen_top_p"] = float(getattr(args, "text_top_p", 1.0) or 1.0) if args.task: runtime.set_task(args.task) - # Seed plan/memory/subtask so the first prompt the runtime builds - # mirrors what training rendered (task + active plan + active - # memory + optional current subtask). Without this the runtime - # starts empty, which only matched the very-early frames during - # training and is an out-of-distribution prompt for the rest. - if bootstrap_state.get("plan"): - runtime.state["current_plan"] = bootstrap_state["plan"] - if bootstrap_state.get("memory"): - runtime.state["current_memory"] = bootstrap_state["memory"] + # Seed the current subtask from the dataset so the first chunk — + # before ``HighLevelSubtaskFwd`` has run — has a real subtask to + # condition the action expert on instead of falling back to the + # bare task. Plan and memory are NOT seeded: the current recipe + # trains neither, no inference step consumes them, and seeding + # them only put a stale plan in the status panel that does + # nothing. if bootstrap_state.get("subtask"): runtime.state["current_subtask"] = bootstrap_state["subtask"]