Skip to content

Commit 9e9d24f

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

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

src/sagemaker/model_monitor/clarify_model_monitoring.py

Lines changed: 2 additions & 0 deletions
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

Lines changed: 58 additions & 0 deletions
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"
@@ -1304,6 +1305,63 @@ def test_model_explainability_monitor(model_explainability_monitor, sagemaker_se
13041305
sagemaker_session=sagemaker_session,
13051306
)
13061307

1308+
def test_model_explainability_create_one_time_schedule(
1309+
model_explainability_monitor,
1310+
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",
1322+
return_value=ANALYSIS_CONFIG_S3_URI
1323+
) as upload:
1324+
model_explainability_monitor.create_monitoring_schedule(
1325+
endpoint_input=endpoint_input,
1326+
analysis_config=ANALYSIS_CONFIG_S3_URI,
1327+
output_s3_uri=OUTPUT_S3_URI,
1328+
monitor_schedule_name=SCHEDULE_NAME,
1329+
schedule_cron_expression=CRON_NOW,
1330+
data_analysis_start_time=START_TIME_OFFSET,
1331+
data_analysis_end_time=END_TIME_OFFSET,
1332+
)
1333+
1334+
# Validate job definition creation
1335+
sagemaker_session.sagemaker_client.create_model_explainability_job_definition.assert_called_once()
1336+
job_definition_args = sagemaker_session.sagemaker_client.create_model_explainability_job_definition.call_args[1]
1337+
assert job_definition_args["JobDefinitionName"] == model_explainability_monitor.job_definition_name
1338+
assert job_definition_args == {
1339+
"JobDefinitionName": model_explainability_monitor.job_definition_name,
1340+
**EXPLAINABILITY_JOB_DEFINITION,
1341+
"Tags": TAGS,
1342+
}
1343+
1344+
# Validate monitoring schedule creation
1345+
sagemaker_session.sagemaker_client.create_monitoring_schedule.assert_called_once()
1346+
schedule_args = sagemaker_session.sagemaker_client.create_monitoring_schedule.call_args[1]
1347+
assert schedule_args == {
1348+
"MonitoringScheduleName": SCHEDULE_NAME,
1349+
"MonitoringScheduleConfig": {
1350+
"MonitoringJobDefinitionName": model_explainability_monitor.job_definition_name,
1351+
"MonitoringType": "ModelExplainability",
1352+
"ScheduleConfig": {
1353+
"ScheduleExpression": CRON_NOW,
1354+
"DataAnalysisStartTime": START_TIME_OFFSET,
1355+
"DataAnalysisEndTime": END_TIME_OFFSET,
1356+
},
1357+
},
1358+
"Tags": TAGS,
1359+
}
1360+
1361+
# Check if the monitoring schedule is stored in the monitor object
1362+
assert model_explainability_monitor.monitoring_schedule_name == SCHEDULE_NAME
1363+
assert model_explainability_monitor.job_definition_name is not None
1364+
13071365

13081366
def test_model_explainability_batch_transform_monitor(
13091367
model_explainability_monitor, sagemaker_session

0 commit comments

Comments
 (0)