Skip to content

Commit f690b2d

Browse files
committed
fix: clarify model monitor one time schedule bug
1 parent 67a3e5a commit f690b2d

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

src/sagemaker/model_monitor/clarify_model_monitoring.py

+2
Original file line numberDiff line numberDiff line change
@@ -1103,6 +1103,8 @@ def create_monitoring_schedule(
11031103
monitor_schedule_name=monitor_schedule_name,
11041104
job_definition_name=new_job_definition_name,
11051105
schedule_cron_expression=schedule_cron_expression,
1106+
data_analysis_start_time=data_analysis_start_time,
1107+
data_analysis_end_time=data_analysis_end_time,
11061108
)
11071109
self.job_definition_name = new_job_definition_name
11081110
self.monitoring_schedule_name = monitor_schedule_name

tests/unit/sagemaker/monitor/test_clarify_model_monitor.py

+61
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
subnets=SUBNETS,
9090
)
9191
CRON_HOURLY = CronExpressionGenerator.hourly()
92+
CRON_NOW = CronExpressionGenerator.now()
9293
ENDPOINT_NAME = "endpoint"
9394
GROUND_TRUTH_S3_URI = "s3://bucket/monitoring_captured/actuals"
9495
ANALYSIS_CONFIG_S3_URI = "s3://bucket/analysis_config.json"
@@ -1305,6 +1306,66 @@ def test_model_explainability_monitor(model_explainability_monitor, sagemaker_se
13051306
)
13061307

13071308

1309+
def test_model_explainability_create_one_time_schedule(
1310+
model_explainability_monitor, sagemaker_session
1311+
):
1312+
endpoint_input = EndpointInput(
1313+
endpoint_name=ENDPOINT_NAME,
1314+
destination=ENDPOINT_INPUT_LOCAL_PATH,
1315+
features_attribute=FEATURES_ATTRIBUTE,
1316+
inference_attribute=str(INFERENCE_ATTRIBUTE),
1317+
)
1318+
1319+
# Create one-time schedule
1320+
with patch(
1321+
"sagemaker.s3.S3Uploader.upload_string_as_file_body", return_value=ANALYSIS_CONFIG_S3_URI
1322+
) as _:
1323+
model_explainability_monitor.create_monitoring_schedule(
1324+
endpoint_input=endpoint_input,
1325+
analysis_config=ANALYSIS_CONFIG_S3_URI,
1326+
output_s3_uri=OUTPUT_S3_URI,
1327+
monitor_schedule_name=SCHEDULE_NAME,
1328+
schedule_cron_expression=CRON_NOW,
1329+
data_analysis_start_time=START_TIME_OFFSET,
1330+
data_analysis_end_time=END_TIME_OFFSET,
1331+
)
1332+
1333+
# Validate job definition creation
1334+
sagemaker_session.sagemaker_client.create_model_explainability_job_definition.assert_called_once()
1335+
job_definition_args = (
1336+
sagemaker_session.sagemaker_client.create_model_explainability_job_definition.call_args[1]
1337+
)
1338+
assert (
1339+
job_definition_args["JobDefinitionName"] == model_explainability_monitor.job_definition_name
1340+
)
1341+
assert job_definition_args == {
1342+
"JobDefinitionName": model_explainability_monitor.job_definition_name,
1343+
**EXPLAINABILITY_JOB_DEFINITION,
1344+
"Tags": TAGS,
1345+
}
1346+
1347+
# Validate monitoring schedule creation
1348+
sagemaker_session.sagemaker_client.create_monitoring_schedule.assert_called_once()
1349+
schedule_args = sagemaker_session.sagemaker_client.create_monitoring_schedule.call_args[1]
1350+
assert schedule_args == {
1351+
"MonitoringScheduleName": SCHEDULE_NAME,
1352+
"MonitoringScheduleConfig": {
1353+
"MonitoringJobDefinitionName": model_explainability_monitor.job_definition_name,
1354+
"MonitoringType": "ModelExplainability",
1355+
"ScheduleConfig": {
1356+
"ScheduleExpression": CRON_NOW,
1357+
"DataAnalysisStartTime": START_TIME_OFFSET,
1358+
"DataAnalysisEndTime": END_TIME_OFFSET,
1359+
},
1360+
},
1361+
"Tags": TAGS,
1362+
}
1363+
1364+
# Check if the monitoring schedule is stored in the monitor object
1365+
assert model_explainability_monitor.monitoring_schedule_name == SCHEDULE_NAME
1366+
assert model_explainability_monitor.job_definition_name is not None
1367+
1368+
13081369
def test_model_explainability_batch_transform_monitor(
13091370
model_explainability_monitor, sagemaker_session
13101371
):

0 commit comments

Comments
 (0)