From 0e5df554efd583ef6b17e89bfb82e8a7eaa6cbc9 Mon Sep 17 00:00:00 2001 From: hrehard Date: Fri, 17 Jul 2026 16:17:20 -0700 Subject: [PATCH] fix(examples): correct recipe-override precedence asserts in SFT notebook MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The precedence-verification cell asserted training_config["learning_rate"] and ["num_epochs"], but the resolved Nova recipe exposes neither key, so the notebook fails with KeyError: 'learning_rate'. - The learning_rate override is applied under training_config.optim_config.lr (value 5e-6), not a top-level training_config.learning_rate. - num_epochs is not a Nova recipe key — Nova SFT is step-based (max_steps), so the recipe resolver drops the num_epochs override. Override and assert max_steps (the step-based equivalent of epochs) instead of num_epochs, and assert optim_config.lr. Precedence table updated to match. Verified the overrides take effect (optim_config.lr=5e-6, max_steps=20). --- .../recipe_override_sft_trainer_example.ipynb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/v3-examples/model-customization-examples/recipe_override_sft_trainer_example.ipynb b/v3-examples/model-customization-examples/recipe_override_sft_trainer_example.ipynb index 093fdeae40..a778884efa 100644 --- a/v3-examples/model-customization-examples/recipe_override_sft_trainer_example.ipynb +++ b/v3-examples/model-customization-examples/recipe_override_sft_trainer_example.ipynb @@ -154,7 +154,7 @@ " overrides={\n", " \"training_config\": {\n", " \"learning_rate\": 5e-6, # Override: lower learning rate\n", - " \"num_epochs\": 5 # Override: more epochs\n", + " \"max_steps\": 20 # Override: more steps\n", " }\n", " }\n", ")\n", @@ -373,7 +373,7 @@ "| Parameter | Recipe File | Override | Resolved (Used) | Source |\n", "|-----------|------------|----------|-----------------|--------|\n", "| `learning_rate` | 1e-5 | 5e-6 | **5e-6** | Override wins |\n", - "| `num_epochs` | 3 | 5 | **5** | Override wins |\n", + "| `max_steps` | 10 (default) | 20 | **20** | Override wins |\n", "| `batch_size` | 8 | (not set) | **8** | Recipe file |\n", "| `sequence_length` | 2048 | (not set) | **2048** | Recipe file |" ], @@ -398,8 +398,8 @@ " print(f\" {key}: {value}\")\n", "\n", "# Overrides win over recipe file values\n", - "assert training_config[\"learning_rate\"] == 5e-6, \"Override should win\"\n", - "assert training_config[\"num_epochs\"] == 5, \"Override should win\"\n", + "assert training_config[\"optim_config\"][\"lr\"] == 5e-6, \"Override should win\"\n", + "assert training_config[\"max_steps\"] == 20, \"Override should win\"\n", "\n", "print(\"\\nAll precedence checks passed!\")" ],