@@ -599,13 +599,14 @@ def test_export_megatron_bridge_not_available(exporter):
599599@pytest .mark .run_only_on ("GPU" )
600600def test_export_megatron_bridge_no_hf_model_id (exporter , mock_llm ):
601601 """Test export with megatron_bridge when hf_model_id cannot be extracted and not provided"""
602+ # Create mock AutoBridge class
603+ mock_auto_bridge = MagicMock ()
604+ mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = None
605+
602606 with (
603607 patch ("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE" , True ),
604- patch ("nemo_export.vllm_exporter.AutoBridge" ) as mock_auto_bridge ,
608+ patch ("nemo_export.vllm_exporter.AutoBridge" , mock_auto_bridge , create = True ) ,
605609 ):
606- # Mock that AutoBridge.get_hf_model_id_from_checkpoint returns None
607- mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = None
608-
609610 with pytest .raises (
610611 Exception ,
611612 match = "Could not find HuggingFace model ID in Megatron-Bridge checkpoint metadata" ,
@@ -617,22 +618,25 @@ def test_export_megatron_bridge_no_hf_model_id(exporter, mock_llm):
617618@pytest .mark .run_only_on ("GPU" )
618619def test_export_megatron_bridge_with_explicit_hf_model_id (exporter , mock_llm ):
619620 """Test export with megatron_bridge when hf_model_id is provided explicitly"""
621+ # Create mock classes
622+ mock_auto_bridge = MagicMock ()
623+ mock_auto_config = MagicMock ()
624+
625+ mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = None
626+ mock_config = MagicMock ()
627+ mock_auto_config .from_pretrained .return_value = mock_config
628+ mock_auto_bridge .supports .return_value = True
629+
630+ mock_bridge_instance = MagicMock ()
631+ mock_auto_bridge .from_hf_pretrained .return_value = mock_bridge_instance
632+
620633 with (
621634 patch ("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE" , True ),
622- patch ("nemo_export.vllm_exporter.AutoBridge" ) as mock_auto_bridge ,
623- patch ("nemo_export.vllm_exporter.AutoConfig" ) as mock_auto_config ,
635+ patch ("nemo_export.vllm_exporter.AutoBridge" , mock_auto_bridge , create = True ) ,
636+ patch ("nemo_export.vllm_exporter.AutoConfig" , mock_auto_config , create = True ) ,
624637 patch ("nemo_export.vllm_exporter.tempfile.TemporaryDirectory" ) as mock_temp_dir ,
625638 patch ("nemo_export.vllm_exporter.Path" ) as mock_path ,
626639 ):
627- # Setup mocks
628- mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = None
629- mock_config = MagicMock ()
630- mock_auto_config .from_pretrained .return_value = mock_config
631- mock_auto_bridge .supports .return_value = True
632-
633- mock_bridge_instance = MagicMock ()
634- mock_auto_bridge .from_hf_pretrained .return_value = mock_bridge_instance
635-
636640 # Mock temp directory
637641 mock_temp_dir .return_value .__enter__ .return_value = "/tmp/test_hf_export"
638642 mock_path_instance = MagicMock ()
@@ -668,22 +672,26 @@ def test_export_megatron_bridge_with_explicit_hf_model_id(exporter, mock_llm):
668672@pytest .mark .run_only_on ("GPU" )
669673def test_export_megatron_bridge_with_extracted_hf_model_id (exporter , mock_llm ):
670674 """Test export with megatron_bridge when hf_model_id is extracted from checkpoint"""
675+ # Create mock classes
676+ mock_auto_bridge = MagicMock ()
677+ mock_auto_config = MagicMock ()
678+
679+ # Setup mocks - AutoBridge extracts model ID from checkpoint
680+ mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = "meta-llama/Llama-3-8B"
681+ mock_config = MagicMock ()
682+ mock_auto_config .from_pretrained .return_value = mock_config
683+ mock_auto_bridge .supports .return_value = True
684+
685+ mock_bridge_instance = MagicMock ()
686+ mock_auto_bridge .from_hf_pretrained .return_value = mock_bridge_instance
687+
671688 with (
672689 patch ("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE" , True ),
673- patch ("nemo_export.vllm_exporter.AutoBridge" ) as mock_auto_bridge ,
674- patch ("nemo_export.vllm_exporter.AutoConfig" ) as mock_auto_config ,
690+ patch ("nemo_export.vllm_exporter.AutoBridge" , mock_auto_bridge , create = True ) ,
691+ patch ("nemo_export.vllm_exporter.AutoConfig" , mock_auto_config , create = True ) ,
675692 patch ("nemo_export.vllm_exporter.tempfile.TemporaryDirectory" ) as mock_temp_dir ,
676693 patch ("nemo_export.vllm_exporter.Path" ) as mock_path ,
677694 ):
678- # Setup mocks - AutoBridge extracts model ID from checkpoint
679- mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = "meta-llama/Llama-3-8B"
680- mock_config = MagicMock ()
681- mock_auto_config .from_pretrained .return_value = mock_config
682- mock_auto_bridge .supports .return_value = True
683-
684- mock_bridge_instance = MagicMock ()
685- mock_auto_bridge .from_hf_pretrained .return_value = mock_bridge_instance
686-
687695 # Mock temp directory
688696 mock_temp_dir .return_value .__enter__ .return_value = "/tmp/test_hf_export"
689697 mock_path_instance = MagicMock ()
@@ -707,22 +715,26 @@ def test_export_megatron_bridge_with_extracted_hf_model_id(exporter, mock_llm):
707715@pytest .mark .run_only_on ("GPU" )
708716def test_export_megatron_bridge_model_not_supported (exporter , mock_llm ):
709717 """Test export with megatron_bridge when model is not supported by AutoBridge"""
718+ # Create mock classes
719+ mock_auto_bridge = MagicMock ()
720+ mock_auto_config = MagicMock ()
721+
722+ # Setup mocks
723+ mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = "unsupported/model"
724+ mock_config = MagicMock ()
725+ mock_auto_config .from_pretrained .return_value = mock_config
726+ mock_auto_bridge .supports .return_value = False
727+ mock_auto_bridge .list_supported_models .return_value = [
728+ "LlamaForCausalLM" ,
729+ "MistralForCausalLM" ,
730+ "GPT2ForCausalLM" ,
731+ ]
732+
710733 with (
711734 patch ("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE" , True ),
712- patch ("nemo_export.vllm_exporter.AutoBridge" ) as mock_auto_bridge ,
713- patch ("nemo_export.vllm_exporter.AutoConfig" ) as mock_auto_config ,
735+ patch ("nemo_export.vllm_exporter.AutoBridge" , mock_auto_bridge , create = True ) ,
736+ patch ("nemo_export.vllm_exporter.AutoConfig" , mock_auto_config , create = True ) ,
714737 ):
715- # Setup mocks
716- mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = "unsupported/model"
717- mock_config = MagicMock ()
718- mock_auto_config .from_pretrained .return_value = mock_config
719- mock_auto_bridge .supports .return_value = False
720- mock_auto_bridge .list_supported_models .return_value = [
721- "LlamaForCausalLM" ,
722- "MistralForCausalLM" ,
723- "GPT2ForCausalLM" ,
724- ]
725-
726738 with pytest .raises (Exception , match = "Model 'unsupported/model' is not supported by AutoBridge" ):
727739 exporter .export (model_path_id = "/path/to/megatron/checkpoint" , model_format = "megatron_bridge" )
728740
@@ -731,22 +743,26 @@ def test_export_megatron_bridge_model_not_supported(exporter, mock_llm):
731743@pytest .mark .run_only_on ("GPU" )
732744def test_export_megatron_bridge_conversion_failed_empty_dir (exporter , mock_llm ):
733745 """Test export with megatron_bridge when checkpoint conversion results in empty directory"""
746+ # Create mock classes
747+ mock_auto_bridge = MagicMock ()
748+ mock_auto_config = MagicMock ()
749+
750+ # Setup mocks
751+ mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = "meta-llama/Llama-3-8B"
752+ mock_config = MagicMock ()
753+ mock_auto_config .from_pretrained .return_value = mock_config
754+ mock_auto_bridge .supports .return_value = True
755+
756+ mock_bridge_instance = MagicMock ()
757+ mock_auto_bridge .from_hf_pretrained .return_value = mock_bridge_instance
758+
734759 with (
735760 patch ("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE" , True ),
736- patch ("nemo_export.vllm_exporter.AutoBridge" ) as mock_auto_bridge ,
737- patch ("nemo_export.vllm_exporter.AutoConfig" ) as mock_auto_config ,
761+ patch ("nemo_export.vllm_exporter.AutoBridge" , mock_auto_bridge , create = True ) ,
762+ patch ("nemo_export.vllm_exporter.AutoConfig" , mock_auto_config , create = True ) ,
738763 patch ("nemo_export.vllm_exporter.tempfile.TemporaryDirectory" ) as mock_temp_dir ,
739764 patch ("nemo_export.vllm_exporter.Path" ) as mock_path ,
740765 ):
741- # Setup mocks
742- mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = "meta-llama/Llama-3-8B"
743- mock_config = MagicMock ()
744- mock_auto_config .from_pretrained .return_value = mock_config
745- mock_auto_bridge .supports .return_value = True
746-
747- mock_bridge_instance = MagicMock ()
748- mock_auto_bridge .from_hf_pretrained .return_value = mock_bridge_instance
749-
750766 # Mock temp directory - but empty after conversion
751767 mock_temp_dir .return_value .__enter__ .return_value = "/tmp/test_hf_export"
752768 mock_path_instance = MagicMock ()
@@ -764,22 +780,26 @@ def test_export_megatron_bridge_conversion_failed_empty_dir(exporter, mock_llm):
764780@pytest .mark .run_only_on ("GPU" )
765781def test_export_megatron_bridge_with_trust_remote_code (exporter , mock_llm ):
766782 """Test export with megatron_bridge using trust_remote_code option"""
783+ # Create mock classes
784+ mock_auto_bridge = MagicMock ()
785+ mock_auto_config = MagicMock ()
786+
787+ # Setup mocks
788+ mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = "meta-llama/Llama-3-8B"
789+ mock_config = MagicMock ()
790+ mock_auto_config .from_pretrained .return_value = mock_config
791+ mock_auto_bridge .supports .return_value = True
792+
793+ mock_bridge_instance = MagicMock ()
794+ mock_auto_bridge .from_hf_pretrained .return_value = mock_bridge_instance
795+
767796 with (
768797 patch ("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE" , True ),
769- patch ("nemo_export.vllm_exporter.AutoBridge" ) as mock_auto_bridge ,
770- patch ("nemo_export.vllm_exporter.AutoConfig" ) as mock_auto_config ,
798+ patch ("nemo_export.vllm_exporter.AutoBridge" , mock_auto_bridge , create = True ) ,
799+ patch ("nemo_export.vllm_exporter.AutoConfig" , mock_auto_config , create = True ) ,
771800 patch ("nemo_export.vllm_exporter.tempfile.TemporaryDirectory" ) as mock_temp_dir ,
772801 patch ("nemo_export.vllm_exporter.Path" ) as mock_path ,
773802 ):
774- # Setup mocks
775- mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = "meta-llama/Llama-3-8B"
776- mock_config = MagicMock ()
777- mock_auto_config .from_pretrained .return_value = mock_config
778- mock_auto_bridge .supports .return_value = True
779-
780- mock_bridge_instance = MagicMock ()
781- mock_auto_bridge .from_hf_pretrained .return_value = mock_bridge_instance
782-
783803 # Mock temp directory
784804 mock_temp_dir .return_value .__enter__ .return_value = "/tmp/test_hf_export"
785805 mock_path_instance = MagicMock ()
@@ -804,22 +824,26 @@ def test_export_megatron_bridge_with_trust_remote_code(exporter, mock_llm):
804824@pytest .mark .run_only_on ("GPU" )
805825def test_export_megatron_bridge_full_success_path (exporter , mock_llm ):
806826 """Test complete successful export path for megatron_bridge checkpoint"""
827+ # Create mock classes
828+ mock_auto_bridge = MagicMock ()
829+ mock_auto_config = MagicMock ()
830+
831+ # Setup mocks
832+ mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = "meta-llama/Llama-3-8B"
833+ mock_config = MagicMock ()
834+ mock_auto_config .from_pretrained .return_value = mock_config
835+ mock_auto_bridge .supports .return_value = True
836+
837+ mock_bridge_instance = MagicMock ()
838+ mock_auto_bridge .from_hf_pretrained .return_value = mock_bridge_instance
839+
807840 with (
808841 patch ("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE" , True ),
809- patch ("nemo_export.vllm_exporter.AutoBridge" ) as mock_auto_bridge ,
810- patch ("nemo_export.vllm_exporter.AutoConfig" ) as mock_auto_config ,
842+ patch ("nemo_export.vllm_exporter.AutoBridge" , mock_auto_bridge , create = True ) ,
843+ patch ("nemo_export.vllm_exporter.AutoConfig" , mock_auto_config , create = True ) ,
811844 patch ("nemo_export.vllm_exporter.tempfile.TemporaryDirectory" ) as mock_temp_dir ,
812845 patch ("nemo_export.vllm_exporter.Path" ) as mock_path ,
813846 ):
814- # Setup mocks
815- mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = "meta-llama/Llama-3-8B"
816- mock_config = MagicMock ()
817- mock_auto_config .from_pretrained .return_value = mock_config
818- mock_auto_bridge .supports .return_value = True
819-
820- mock_bridge_instance = MagicMock ()
821- mock_auto_bridge .from_hf_pretrained .return_value = mock_bridge_instance
822-
823847 # Mock temp directory with successful conversion
824848 mock_temp_dir .return_value .__enter__ .return_value = "/tmp/test_hf_export"
825849 mock_path_instance = MagicMock ()
@@ -863,22 +887,26 @@ def test_export_megatron_bridge_full_success_path(exporter, mock_llm):
863887@pytest .mark .run_only_on ("GPU" )
864888def test_export_megatron_bridge_with_all_vllm_params (exporter , mock_llm ):
865889 """Test export with megatron_bridge passing all vLLM parameters"""
890+ # Create mock classes
891+ mock_auto_bridge = MagicMock ()
892+ mock_auto_config = MagicMock ()
893+
894+ # Setup mocks
895+ mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = "meta-llama/Llama-3-8B"
896+ mock_config = MagicMock ()
897+ mock_auto_config .from_pretrained .return_value = mock_config
898+ mock_auto_bridge .supports .return_value = True
899+
900+ mock_bridge_instance = MagicMock ()
901+ mock_auto_bridge .from_hf_pretrained .return_value = mock_bridge_instance
902+
866903 with (
867904 patch ("nemo_export.vllm_exporter.HAVE_MEGATRON_BRIDGE" , True ),
868- patch ("nemo_export.vllm_exporter.AutoBridge" ) as mock_auto_bridge ,
869- patch ("nemo_export.vllm_exporter.AutoConfig" ) as mock_auto_config ,
905+ patch ("nemo_export.vllm_exporter.AutoBridge" , mock_auto_bridge , create = True ) ,
906+ patch ("nemo_export.vllm_exporter.AutoConfig" , mock_auto_config , create = True ) ,
870907 patch ("nemo_export.vllm_exporter.tempfile.TemporaryDirectory" ) as mock_temp_dir ,
871908 patch ("nemo_export.vllm_exporter.Path" ) as mock_path ,
872909 ):
873- # Setup mocks
874- mock_auto_bridge .get_hf_model_id_from_checkpoint .return_value = "meta-llama/Llama-3-8B"
875- mock_config = MagicMock ()
876- mock_auto_config .from_pretrained .return_value = mock_config
877- mock_auto_bridge .supports .return_value = True
878-
879- mock_bridge_instance = MagicMock ()
880- mock_auto_bridge .from_hf_pretrained .return_value = mock_bridge_instance
881-
882910 # Mock temp directory
883911 mock_temp_dir .return_value .__enter__ .return_value = "/tmp/test_hf_export"
884912 mock_path_instance = MagicMock ()
0 commit comments