@@ -462,6 +462,47 @@ def test_build_single_modelbuilder_with_model_customization(self, mock_is_1p, mo
462462 mock_model_class .create .assert_called_once ()
463463 self .assertEqual (result , mock_created_model )
464464
465+ @patch ('sagemaker.serve.model_builder.Model' )
466+ @patch ('sagemaker.serve.model_builder.is_1p_image_uri' )
467+ def test_build_single_modelbuilder_with_model_customization_no_jumpstart (self , mock_is_1p , mock_model_class ):
468+ """Test _build_single_modelbuilder skips _fetch_and_cache_recipe_config when base_model is None."""
469+ mock_is_1p .return_value = True
470+
471+ # Setup mock model package with base_model = None (custom model package, not JumpStart)
472+ mock_model_package = Mock ()
473+ mock_container = Mock ()
474+ mock_container .base_model = None
475+ mock_container .model_data_source .s3_data_source .s3_uri = "s3://bucket/model"
476+ mock_model_package .inference_specification .containers = [mock_container ]
477+
478+ # Setup training job with model_package_config
479+ self .mock_training_job .model_package_config = Mock ()
480+ self .mock_training_job .model_package_config .source_model_package_arn = (
481+ "arn:aws:sagemaker:us-east-1:123456789012:model-package/source"
482+ )
483+
484+ mock_created_model = Mock ()
485+ mock_model_class .create .return_value = mock_created_model
486+
487+ builder = ModelBuilder (
488+ model = self .mock_training_job ,
489+ role_arn = "arn:aws:iam::123456789012:role/SageMakerRole" ,
490+ sagemaker_session = self .mock_session ,
491+ image_uri = "test-image:latest" ,
492+ instance_type = "ml.g5.2xlarge"
493+ )
494+
495+ with patch .object (builder , '_fetch_model_package' , return_value = mock_model_package ):
496+ with patch .object (builder , '_fetch_and_cache_recipe_config' ) as mock_recipe :
497+ with patch .object (builder , '_get_serve_setting' , return_value = Mock ()):
498+ with patch .object (builder , '_is_nova_model' , return_value = False ):
499+ with patch .object (builder , '_fetch_peft' , return_value = None ):
500+ result = builder ._build_single_modelbuilder ()
501+
502+ mock_recipe .assert_not_called ()
503+ mock_model_class .create .assert_called_once ()
504+ self .assertEqual (result , mock_created_model )
505+
465506 def test_deploy_model_customization_new_endpoint (self ):
466507 """Test _deploy_model_customization for new endpoint creation."""
467508 from sagemaker .core .shapes import InferenceComponentComputeResourceRequirements
0 commit comments