Skip to content

Commit 38c9058

Browse files
committed
Test FIxes
1 parent 37a1cff commit 38c9058

10 files changed

Lines changed: 2022 additions & 1836 deletions

sagemaker-serve/src/sagemaker/serve/async_inference/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@
1616

1717
from sagemaker.core.inference_config import AsyncInferenceConfig # noqa: F401
1818
from sagemaker.serve.async_inference.waiter_config import WaiterConfig # noqa: F401
19-
from sagemaker.serve.async_inference.async_inference_response import AsyncInferenceResponse # noqa: F401
19+
from sagemaker.serve.async_inference.async_inference_response import (
20+
AsyncInferenceResponse,
21+
) # noqa: F401

sagemaker-serve/src/sagemaker/serve/async_inference/async_inference_config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
" from sagemaker.core.inference_config import AsyncInferenceConfig\n"
3434
"This compatibility shim will be removed in a future version.",
3535
DeprecationWarning,
36-
stacklevel=2
36+
stacklevel=2,
3737
)
3838

39-
__all__ = ['AsyncInferenceConfig']
39+
__all__ = ["AsyncInferenceConfig"]

sagemaker-serve/src/sagemaker/serve/model_builder.py

Lines changed: 715 additions & 530 deletions
Large diffs are not rendered by default.

sagemaker-serve/tests/unit/test_artifact_path_propagation.py

Lines changed: 124 additions & 125 deletions
Large diffs are not rendered by default.

sagemaker-serve/tests/unit/test_artifact_path_resolution.py

Lines changed: 133 additions & 175 deletions
Large diffs are not rendered by default.

sagemaker-serve/tests/unit/test_compute_requirements_resolution.py

Lines changed: 314 additions & 281 deletions
Large diffs are not rendered by default.

sagemaker-serve/tests/unit/test_deploy_passes_inference_config.py

Lines changed: 60 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -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

205199
if __name__ == "__main__":

0 commit comments

Comments
 (0)