@@ -25,7 +25,7 @@ def setUp(self):
2525 self .mock_session .sagemaker_config = {}
2626 self .mock_session .settings = Mock ()
2727 self .mock_session .settings .include_jumpstart_tags = False
28-
28+
2929 mock_credentials = Mock ()
3030 mock_credentials .access_key = "test-key"
3131 mock_credentials .secret_key = "test-secret"
@@ -34,172 +34,166 @@ def setUp(self):
3434 self .mock_session .boto_session .get_credentials .return_value = mock_credentials
3535 self .mock_session .boto_session .region_name = "us-west-2"
3636
37- @patch ('sagemaker.serve.model_builder.ModelBuilder._deploy_model_customization' )
38- @patch ('sagemaker.serve.model_builder.ModelBuilder._is_model_customization' )
39- @patch ('sagemaker.serve.model_builder.ModelBuilder._fetch_default_instance_type_for_custom_model' )
37+ @patch ("sagemaker.serve.model_builder.ModelBuilder._deploy_model_customization" )
38+ @patch ("sagemaker.serve.model_builder.ModelBuilder._is_model_customization" )
39+ @patch (
40+ "sagemaker.serve.model_builder.ModelBuilder._fetch_default_instance_type_for_custom_model"
41+ )
4042 def test_deploy_passes_inference_config_to_deploy_model_customization (
4143 self ,
4244 mock_fetch_default_instance ,
4345 mock_is_model_customization ,
44- mock_deploy_model_customization
46+ mock_deploy_model_customization ,
4547 ):
4648 """Test that deploy() passes inference_config parameter to _deploy_model_customization."""
4749 # Setup: Mock model customization check
4850 mock_is_model_customization .return_value = True
4951 mock_fetch_default_instance .return_value = "ml.g5.12xlarge"
50-
52+
5153 # Setup: Mock _deploy_model_customization to return a mock endpoint
5254 mock_endpoint = Mock ()
5355 mock_deploy_model_customization .return_value = mock_endpoint
54-
56+
5557 # Create ModelBuilder
5658 builder = ModelBuilder (
5759 model = "huggingface-llm-mistral-7b" ,
5860 model_metadata = {
5961 "CUSTOM_MODEL_ID" : "huggingface-llm-mistral-7b" ,
60- "CUSTOM_MODEL_VERSION" : "1.0.0"
62+ "CUSTOM_MODEL_VERSION" : "1.0.0" ,
6163 },
6264 instance_type = "ml.g5.12xlarge" ,
6365 mode = Mode .SAGEMAKER_ENDPOINT ,
6466 role_arn = "arn:aws:iam::123456789012:role/TestRole" ,
6567 sagemaker_session = self .mock_session ,
66- image_uri = "123456789012.dkr.ecr.us-west-2.amazonaws.com/test:latest"
68+ image_uri = "123456789012.dkr.ecr.us-west-2.amazonaws.com/test:latest" ,
6769 )
68-
70+
6971 # Mark as built
7072 builder .built_model = Mock ()
71-
73+
7274 # Create inference_config
7375 inference_config = ResourceRequirements (
74- requests = {
75- "num_cpus" : 8 ,
76- "memory" : 16384 ,
77- "num_accelerators" : 4
78- }
76+ requests = {"num_cpus" : 8 , "memory" : 16384 , "num_accelerators" : 4 }
7977 )
80-
78+
8179 # Execute: Call deploy() with inference_config
8280 result = builder .deploy (
8381 endpoint_name = "test-endpoint" ,
8482 inference_config = inference_config ,
8583 initial_instance_count = 1 ,
86- wait = True
84+ wait = True ,
8785 )
88-
86+
8987 # Verify: _deploy_model_customization was called with inference_config
9088 assert mock_deploy_model_customization .called
9189 call_kwargs = mock_deploy_model_customization .call_args [1 ]
92-
90+
9391 # Verify inference_config was passed through
94- assert ' inference_config' in call_kwargs
95- assert call_kwargs [' inference_config' ] == inference_config
96-
92+ assert " inference_config" in call_kwargs
93+ assert call_kwargs [" inference_config" ] == inference_config
94+
9795 # Verify other parameters were also passed
98- assert call_kwargs [' endpoint_name' ] == "test-endpoint"
99- assert call_kwargs [' initial_instance_count' ] == 1
100- assert call_kwargs [' wait' ] == True
101-
96+ assert call_kwargs [" endpoint_name" ] == "test-endpoint"
97+ assert call_kwargs [" initial_instance_count" ] == 1
98+ assert call_kwargs [" wait" ] == True
99+
102100 # Verify the result is the mock endpoint
103101 assert result == mock_endpoint
104102
105- @patch ('sagemaker.serve.model_builder.ModelBuilder._deploy_model_customization' )
106- @patch ('sagemaker.serve.model_builder.ModelBuilder._is_model_customization' )
107- @patch ('sagemaker.serve.model_builder.ModelBuilder._fetch_default_instance_type_for_custom_model' )
103+ @patch ("sagemaker.serve.model_builder.ModelBuilder._deploy_model_customization" )
104+ @patch ("sagemaker.serve.model_builder.ModelBuilder._is_model_customization" )
105+ @patch (
106+ "sagemaker.serve.model_builder.ModelBuilder._fetch_default_instance_type_for_custom_model"
107+ )
108108 def test_deploy_passes_none_when_inference_config_not_provided (
109109 self ,
110110 mock_fetch_default_instance ,
111111 mock_is_model_customization ,
112- mock_deploy_model_customization
112+ mock_deploy_model_customization ,
113113 ):
114114 """Test backward compatibility: deploy() passes None when inference_config not provided."""
115115 # Setup
116116 mock_is_model_customization .return_value = True
117117 mock_fetch_default_instance .return_value = "ml.g5.12xlarge"
118118 mock_endpoint = Mock ()
119119 mock_deploy_model_customization .return_value = mock_endpoint
120-
120+
121121 builder = ModelBuilder (
122122 model = "huggingface-llm-mistral-7b" ,
123123 model_metadata = {
124124 "CUSTOM_MODEL_ID" : "huggingface-llm-mistral-7b" ,
125- "CUSTOM_MODEL_VERSION" : "1.0.0"
125+ "CUSTOM_MODEL_VERSION" : "1.0.0" ,
126126 },
127127 instance_type = "ml.g5.12xlarge" ,
128128 mode = Mode .SAGEMAKER_ENDPOINT ,
129129 role_arn = "arn:aws:iam::123456789012:role/TestRole" ,
130130 sagemaker_session = self .mock_session ,
131- image_uri = "123456789012.dkr.ecr.us-west-2.amazonaws.com/test:latest"
131+ image_uri = "123456789012.dkr.ecr.us-west-2.amazonaws.com/test:latest" ,
132132 )
133-
133+
134134 builder .built_model = Mock ()
135-
135+
136136 # Execute: Call deploy() WITHOUT inference_config
137- result = builder .deploy (
138- endpoint_name = "test-endpoint" ,
139- initial_instance_count = 1
140- )
141-
137+ result = builder .deploy (endpoint_name = "test-endpoint" , initial_instance_count = 1 )
138+
142139 # Verify: _deploy_model_customization was called with inference_config=None
143140 assert mock_deploy_model_customization .called
144141 call_kwargs = mock_deploy_model_customization .call_args [1 ]
145-
142+
146143 # Verify inference_config is None (backward compatibility)
147- assert ' inference_config' in call_kwargs
148- assert call_kwargs [' inference_config' ] is None
144+ assert " inference_config" in call_kwargs
145+ assert call_kwargs [" inference_config" ] is None
149146
150- @patch ('sagemaker.serve.model_builder.ModelBuilder._deploy_model_customization' )
151- @patch ('sagemaker.serve.model_builder.ModelBuilder._is_model_customization' )
152- @patch ('sagemaker.serve.model_builder.ModelBuilder._fetch_default_instance_type_for_custom_model' )
147+ @patch ("sagemaker.serve.model_builder.ModelBuilder._deploy_model_customization" )
148+ @patch ("sagemaker.serve.model_builder.ModelBuilder._is_model_customization" )
149+ @patch (
150+ "sagemaker.serve.model_builder.ModelBuilder._fetch_default_instance_type_for_custom_model"
151+ )
153152 def test_deploy_only_passes_resource_requirements_type (
154153 self ,
155154 mock_fetch_default_instance ,
156155 mock_is_model_customization ,
157- mock_deploy_model_customization
156+ mock_deploy_model_customization ,
158157 ):
159158 """Test that deploy() only passes inference_config if it's ResourceRequirements type."""
160159 # Setup
161160 mock_is_model_customization .return_value = True
162161 mock_fetch_default_instance .return_value = "ml.g5.12xlarge"
163162 mock_endpoint = Mock ()
164163 mock_deploy_model_customization .return_value = mock_endpoint
165-
164+
166165 builder = ModelBuilder (
167166 model = "huggingface-llm-mistral-7b" ,
168167 model_metadata = {
169168 "CUSTOM_MODEL_ID" : "huggingface-llm-mistral-7b" ,
170- "CUSTOM_MODEL_VERSION" : "1.0.0"
169+ "CUSTOM_MODEL_VERSION" : "1.0.0" ,
171170 },
172171 instance_type = "ml.g5.12xlarge" ,
173172 mode = Mode .SAGEMAKER_ENDPOINT ,
174173 role_arn = "arn:aws:iam::123456789012:role/TestRole" ,
175174 sagemaker_session = self .mock_session ,
176- image_uri = "123456789012.dkr.ecr.us-west-2.amazonaws.com/test:latest"
175+ image_uri = "123456789012.dkr.ecr.us-west-2.amazonaws.com/test:latest" ,
177176 )
178-
177+
179178 builder .built_model = Mock ()
180-
179+
181180 # Create a non-ResourceRequirements inference_config (e.g., ServerlessInferenceConfig)
182181 from sagemaker .core .inference_config import ServerlessInferenceConfig
183- serverless_config = ServerlessInferenceConfig (
184- memory_size_in_mb = 4096 ,
185- max_concurrency = 10
186- )
187-
182+
183+ serverless_config = ServerlessInferenceConfig (memory_size_in_mb = 4096 , max_concurrency = 10 )
184+
188185 # Execute: Call deploy() with ServerlessInferenceConfig
189186 # This should NOT pass it to _deploy_model_customization
190- result = builder .deploy (
191- endpoint_name = "test-endpoint" ,
192- inference_config = serverless_config
193- )
194-
187+ result = builder .deploy (endpoint_name = "test-endpoint" , inference_config = serverless_config )
188+
195189 # Verify: _deploy_model_customization was called with inference_config=None
196190 # because ServerlessInferenceConfig is not ResourceRequirements
197191 assert mock_deploy_model_customization .called
198192 call_kwargs = mock_deploy_model_customization .call_args [1 ]
199-
193+
200194 # Verify inference_config is None (not ServerlessInferenceConfig)
201- assert ' inference_config' in call_kwargs
202- assert call_kwargs [' inference_config' ] is None
195+ assert " inference_config" in call_kwargs
196+ assert call_kwargs [" inference_config" ] is None
203197
204198
205199if __name__ == "__main__" :
0 commit comments