From b7645137f8653f0e02f3b803d32db75679e36f0d Mon Sep 17 00:00:00 2001 From: adishaa Date: Fri, 6 Jun 2025 17:03:41 -0700 Subject: [PATCH 1/5] Fix: Object of type ModelLifeCycle is not JSON serializable --- src/sagemaker/session.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sagemaker/session.py b/src/sagemaker/session.py index 2cc18f6989..0017448ca1 100644 --- a/src/sagemaker/session.py +++ b/src/sagemaker/session.py @@ -7509,7 +7509,7 @@ def get_model_package_args( if source_uri is not None: model_package_args["source_uri"] = source_uri if model_life_cycle is not None: - model_package_args["model_life_cycle"] = model_life_cycle + model_package_args["model_life_cycle"] = model_life_cycle._to_request_dict() if model_card is not None: original_req = model_card._create_request_args() if original_req.get("ModelCardName") is not None: @@ -7685,7 +7685,7 @@ def get_create_model_package_request( if model_card is not None: request_dict["ModelCard"] = model_card if model_life_cycle is not None: - request_dict["ModelLifeCycle"] = model_life_cycle + request_dict["ModelLifeCycle"] = model_life_cycle._to_request_dict() return request_dict From fad0fffc9dafb8680131e5593969645462c93f12 Mon Sep 17 00:00:00 2001 From: adishaa Date: Mon, 9 Jun 2025 01:46:22 -0700 Subject: [PATCH 2/5] Fix unit test --- src/sagemaker/session.py | 2 +- tests/unit/test_estimator.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/sagemaker/session.py b/src/sagemaker/session.py index 0017448ca1..2ff561d784 100644 --- a/src/sagemaker/session.py +++ b/src/sagemaker/session.py @@ -7685,7 +7685,7 @@ def get_create_model_package_request( if model_card is not None: request_dict["ModelCard"] = model_card if model_life_cycle is not None: - request_dict["ModelLifeCycle"] = model_life_cycle._to_request_dict() + request_dict["ModelLifeCycle"] = model_life_cycle return request_dict diff --git a/tests/unit/test_estimator.py b/tests/unit/test_estimator.py index 8294eb0039..11cc83a463 100644 --- a/tests/unit/test_estimator.py +++ b/tests/unit/test_estimator.py @@ -4369,7 +4369,6 @@ def test_register_default_image(sagemaker_session): stage_status="In-Progress", stage_description="Sending for Staging Verification", ) - update_model_life_cycle_req = update_model_life_cycle._to_request_dict() estimator.register( content_types=content_types, @@ -4384,7 +4383,7 @@ def test_register_default_image(sagemaker_session): nearest_model_name=nearest_model_name, data_input_configuration=data_input_config, model_card=model_card, - model_life_cycle=update_model_life_cycle_req, + model_life_cycle=update_model_life_cycle, ) sagemaker_session.create_model.assert_not_called() exp_model_card = { From f6513fe430d7f7f13486239aaaf6983efde2e00f Mon Sep 17 00:00:00 2001 From: adishaa Date: Mon, 9 Jun 2025 10:27:18 -0700 Subject: [PATCH 3/5] Fix integ tests --- .../workflow/test_model_create_and_registration.py | 11 ++++++----- tests/integ/test_model_package.py | 7 +++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/integ/sagemaker/workflow/test_model_create_and_registration.py b/tests/integ/sagemaker/workflow/test_model_create_and_registration.py index 8f98cd076d..90eef8e54d 100644 --- a/tests/integ/sagemaker/workflow/test_model_create_and_registration.py +++ b/tests/integ/sagemaker/workflow/test_model_create_and_registration.py @@ -59,6 +59,7 @@ ConditionGreaterThanOrEqualTo, ConditionIn, ) +from sagemaker.model_life_cycle import ModelLifeCycle from tests.integ.kms_utils import get_or_create_kms_key from tests.integ import DATA_DIR from sagemaker.model_card import ( @@ -1005,11 +1006,11 @@ def test_model_registration_with_model_life_cycle_object( py_version="py3", role=role, ) - create_model_life_cycle = { - "Stage": "Development", - "StageStatus": "In-Progress", - "StageDescription": "Development In Progress", - } + create_model_life_cycle = ModelLifeCycle( + stage="Development", + stage_status="In-Progress", + stage_description="Development In Progress", + ) step_register = RegisterModel( name="MyRegisterModelStep", diff --git a/tests/integ/test_model_package.py b/tests/integ/test_model_package.py index bc8120bd07..0f4c482073 100644 --- a/tests/integ/test_model_package.py +++ b/tests/integ/test_model_package.py @@ -103,15 +103,14 @@ def test_update_model_life_cycle_model_package(sagemaker_session): inference_instances=["ml.m5.large"], transform_instances=["ml.m5.large"], model_package_group_name=model_group_name, - model_life_cycle=create_model_life_cycle._to_request_dict(), + model_life_cycle=create_model_life_cycle, ) desc_model_package = sagemaker_session.sagemaker_client.describe_model_package( ModelPackageName=model_package.model_package_arn ) - create_model_life_cycle_req = create_model_life_cycle._to_request_dict() - assert desc_model_package["ModelLifeCycle"] == create_model_life_cycle_req + assert desc_model_package["ModelLifeCycle"] == create_model_life_cycle update_model_life_cycle = ModelLifeCycle( stage="Staging", @@ -125,7 +124,7 @@ def test_update_model_life_cycle_model_package(sagemaker_session): desc_model_package = sagemaker_session.sagemaker_client.describe_model_package( ModelPackageName=model_package.model_package_arn ) - assert desc_model_package["ModelLifeCycle"] == update_model_life_cycle_req + assert desc_model_package["ModelLifeCycle"] == update_model_life_cycle sagemaker_session.sagemaker_client.delete_model_package( ModelPackageName=model_package.model_package_arn From c628796ec36c1f85758bab67b8dd11438d5bb45a Mon Sep 17 00:00:00 2001 From: adishaa Date: Mon, 9 Jun 2025 10:34:47 -0700 Subject: [PATCH 4/5] Revert "Fix integ tests" This reverts commit f6513fe430d7f7f13486239aaaf6983efde2e00f. --- .../workflow/test_model_create_and_registration.py | 11 +++++------ tests/integ/test_model_package.py | 7 ++++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/integ/sagemaker/workflow/test_model_create_and_registration.py b/tests/integ/sagemaker/workflow/test_model_create_and_registration.py index 90eef8e54d..8f98cd076d 100644 --- a/tests/integ/sagemaker/workflow/test_model_create_and_registration.py +++ b/tests/integ/sagemaker/workflow/test_model_create_and_registration.py @@ -59,7 +59,6 @@ ConditionGreaterThanOrEqualTo, ConditionIn, ) -from sagemaker.model_life_cycle import ModelLifeCycle from tests.integ.kms_utils import get_or_create_kms_key from tests.integ import DATA_DIR from sagemaker.model_card import ( @@ -1006,11 +1005,11 @@ def test_model_registration_with_model_life_cycle_object( py_version="py3", role=role, ) - create_model_life_cycle = ModelLifeCycle( - stage="Development", - stage_status="In-Progress", - stage_description="Development In Progress", - ) + create_model_life_cycle = { + "Stage": "Development", + "StageStatus": "In-Progress", + "StageDescription": "Development In Progress", + } step_register = RegisterModel( name="MyRegisterModelStep", diff --git a/tests/integ/test_model_package.py b/tests/integ/test_model_package.py index 0f4c482073..bc8120bd07 100644 --- a/tests/integ/test_model_package.py +++ b/tests/integ/test_model_package.py @@ -103,14 +103,15 @@ def test_update_model_life_cycle_model_package(sagemaker_session): inference_instances=["ml.m5.large"], transform_instances=["ml.m5.large"], model_package_group_name=model_group_name, - model_life_cycle=create_model_life_cycle, + model_life_cycle=create_model_life_cycle._to_request_dict(), ) desc_model_package = sagemaker_session.sagemaker_client.describe_model_package( ModelPackageName=model_package.model_package_arn ) + create_model_life_cycle_req = create_model_life_cycle._to_request_dict() - assert desc_model_package["ModelLifeCycle"] == create_model_life_cycle + assert desc_model_package["ModelLifeCycle"] == create_model_life_cycle_req update_model_life_cycle = ModelLifeCycle( stage="Staging", @@ -124,7 +125,7 @@ def test_update_model_life_cycle_model_package(sagemaker_session): desc_model_package = sagemaker_session.sagemaker_client.describe_model_package( ModelPackageName=model_package.model_package_arn ) - assert desc_model_package["ModelLifeCycle"] == update_model_life_cycle + assert desc_model_package["ModelLifeCycle"] == update_model_life_cycle_req sagemaker_session.sagemaker_client.delete_model_package( ModelPackageName=model_package.model_package_arn From 38caa6022cfdbc88f013f4397bad11aa79a3c510 Mon Sep 17 00:00:00 2001 From: adishaa Date: Mon, 9 Jun 2025 10:49:26 -0700 Subject: [PATCH 5/5] Fix integration tests --- .../workflow/test_model_create_and_registration.py | 11 ++++++----- tests/integ/test_model_package.py | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/integ/sagemaker/workflow/test_model_create_and_registration.py b/tests/integ/sagemaker/workflow/test_model_create_and_registration.py index 8f98cd076d..e84c1920f4 100644 --- a/tests/integ/sagemaker/workflow/test_model_create_and_registration.py +++ b/tests/integ/sagemaker/workflow/test_model_create_and_registration.py @@ -48,6 +48,7 @@ from sagemaker.s3 import S3Uploader from sagemaker.sklearn import SKLearnModel, SKLearnProcessor from sagemaker.mxnet.model import MXNetModel +from sagemaker.model_life_cycle import ModelLifeCycle from sagemaker.workflow.condition_step import ConditionStep from sagemaker.workflow.parameters import ParameterInteger, ParameterString from sagemaker.workflow.pipeline import Pipeline @@ -1005,11 +1006,11 @@ def test_model_registration_with_model_life_cycle_object( py_version="py3", role=role, ) - create_model_life_cycle = { - "Stage": "Development", - "StageStatus": "In-Progress", - "StageDescription": "Development In Progress", - } + create_model_life_cycle = ModelLifeCycle( + stage="Development", + stage_status="In-Progress", + stage_description="Development In Progress", + ) step_register = RegisterModel( name="MyRegisterModelStep", diff --git a/tests/integ/test_model_package.py b/tests/integ/test_model_package.py index bc8120bd07..1ac8e33fd8 100644 --- a/tests/integ/test_model_package.py +++ b/tests/integ/test_model_package.py @@ -103,7 +103,7 @@ def test_update_model_life_cycle_model_package(sagemaker_session): inference_instances=["ml.m5.large"], transform_instances=["ml.m5.large"], model_package_group_name=model_group_name, - model_life_cycle=create_model_life_cycle._to_request_dict(), + model_life_cycle=create_model_life_cycle, ) desc_model_package = sagemaker_session.sagemaker_client.describe_model_package(