|
28 | 28 | build_dataloader, |
29 | 29 | build_model_and_optimizer, |
30 | 30 | build_validation_dataloader, |
| 31 | + compute_trust_remote_code_from_model, |
31 | 32 | ) |
32 | 33 | from torch.utils.data import IterableDataset |
33 | 34 |
|
@@ -632,3 +633,36 @@ def _build_model_and_optimizer_stub(*args, **kwargs): |
632 | 633 | (parts[0], "PipelineStage_0"), |
633 | 634 | (parts[1], "PipelineStage_1"), |
634 | 635 | ] |
| 636 | + |
| 637 | + |
| 638 | +def test_compute_trust_remote_code_prefers_cfg_flag(): |
| 639 | + cfg_model = ConfigNode({"trust_remote_code": False, "pretrained_model_name_or_path": "ignored"}) |
| 640 | + |
| 641 | + with patch("nemo_automodel.recipes.llm.train_ft.resolve_trust_remote_code") as mock_resolve: |
| 642 | + result = compute_trust_remote_code_from_model(cfg_model) |
| 643 | + |
| 644 | + assert result is False |
| 645 | + mock_resolve.assert_not_called() |
| 646 | + |
| 647 | + |
| 648 | +def test_compute_trust_remote_code_prefers_nested_config(): |
| 649 | + cfg_model = ConfigNode({"config": {"trust_remote_code": True}}) |
| 650 | + |
| 651 | + with patch("nemo_automodel.recipes.llm.train_ft.resolve_trust_remote_code") as mock_resolve: |
| 652 | + result = compute_trust_remote_code_from_model(cfg_model) |
| 653 | + |
| 654 | + assert result is True |
| 655 | + mock_resolve.assert_not_called() |
| 656 | + |
| 657 | + |
| 658 | +def test_compute_trust_remote_code_falls_back_to_resolve(): |
| 659 | + cfg_model = ConfigNode({"pretrained_model_name_or_path": "nvidia/foo"}) |
| 660 | + |
| 661 | + with patch( |
| 662 | + "nemo_automodel.recipes.llm.train_ft.resolve_trust_remote_code", |
| 663 | + return_value=True, |
| 664 | + ) as mock_resolve: |
| 665 | + result = compute_trust_remote_code_from_model(cfg_model) |
| 666 | + |
| 667 | + assert result is True |
| 668 | + mock_resolve.assert_called_once_with("nvidia/foo") |
0 commit comments