From 5e2d93f9efb50594d16b5211cd3331394735da34 Mon Sep 17 00:00:00 2001 From: Joe Rivera Date: Sat, 26 Sep 2026 23:19:10 -0500 Subject: [PATCH] coef_train: un-stale the risk/lam deploy warning (libcvc #413 landed) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The C++ host CAN now deploy a grip/risk/lam coef_mlp: coef_feats builds the risk-lookahead column and drive_step_material reads the learned lam output (transfix/libcvc #413). Replace the 'do NOT deploy / research artifact' notice with the real operational requirement — a libcvc >= #413 host, driven through the material path (drive_step_material / drive_step_material_ext) with a material stack + grip attached; the plain drive_step still rejects a risk net. Round-trip + drive pinned by libcvc nav_material_deploy_test. --- grl_snam/tools/coef_train.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/grl_snam/tools/coef_train.py b/grl_snam/tools/coef_train.py index 6c815a0..9940464 100644 --- a/grl_snam/tools/coef_train.py +++ b/grl_snam/tools/coef_train.py @@ -650,9 +650,9 @@ def main(argv=None): risk_model = sdf_nav.add_risk_feature(sdf_nav.CoefMLP()) if args.learned_lam: # LEARNED reroute: the net outputs lam_soft per position instead of the fixed - # --lam-soft dial — the deployable reroute lever (needs the C++ coef_mlp/drive - # update before a risk .cvcnav can run on the pure-C++ host). --lam-soft is the - # INIT here and must be > 0 (0 is a valid FIXED-mode value but a dead learned init). + # --lam-soft dial — the deployable reroute lever (drive_step_material reads the 4th + # output as per-agent lam_soft since libcvc #413). --lam-soft is the INIT here and + # must be > 0 (0 is a valid FIXED-mode value but a dead learned init). if args.lam_soft <= 0.0: raise SystemExit( "--learned-lam needs --lam-soft > 0 (it seeds the lam head; 0 would freeze " @@ -688,10 +688,12 @@ def main(argv=None): if getattr(model, "use_risk", False) or getattr(model, "use_lam", False): extra = f", out_dim={model.out_dim} (lam head)" if getattr(model, "use_lam", False) else "" print( - f"wrote {args.out} (risk model, in_dim={model.in_dim}{extra}) — NOTE: this is a torch " - "research artifact. The pure-C++ host's coef_feats does not build the risk-lookahead " - "column, and its coef_mlp/drive do not read a lam output, so do NOT deploy this over " - "share/cvc/nav/coef_mlp.cvcnav until the coordinated cvc::nav update lands." + f"wrote {args.out} (grip/risk model, in_dim={model.in_dim}{extra}) — DEPLOYABLE on a " + "libcvc host at or past the risk-lookahead/learned-lam drive update (transfix/libcvc " + "#413): coef_feats builds the risk-lookahead column and drive_step_material reads the " + "lam output. Drive it through the MATERIAL path (drive_step_material / " + "drive_step_material_ext), with a material stack + grip attached — the plain drive_step " + "rejects a risk net. Round-trip + drive verified by libcvc nav_material_deploy_test." ) else: print(f"wrote {args.out} reach_rate={reach_rate(model):.2%}")