Skip to content

Commit 3309e42

Browse files
authored
Add system_meatadata property to azure ml model class (Azure#39763)
* Add system_meatadata property to azure ml model class * update code format * remove changelog changes
1 parent db582b1 commit 3309e42

File tree

4 files changed

+39
-0
lines changed

4 files changed

+39
-0
lines changed

sdk/ml/azure-ai-ml/azure/ai/ml/_schema/assets/model.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class ModelSchema(PathAwareSchema):
4343
latest_version = fields.Str(dump_only=True)
4444
datastore = fields.Str(metadata={"description": "Name of the datastore to upload to."}, required=False)
4545
intellectual_property = ExperimentalField(NestedField(IntellectualPropertySchema, required=False), dump_only=True)
46+
system_metadata = fields.Dict()
4647

4748
@pre_dump
4849
def validate(self, data, **kwargs):

sdk/ml/azure-ai-ml/azure/ai/ml/entities/_assets/_artifacts/model.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ def __init__(
8585
) -> None:
8686
self.job_name = kwargs.pop("job_name", None)
8787
self._intellectual_property = kwargs.pop("intellectual_property", None)
88+
self._system_metadata = kwargs.pop("system_metadata", None)
8889
super().__init__(
8990
name=name,
9091
version=version,
@@ -129,6 +130,9 @@ def _from_rest_object(cls, model_rest_object: ModelVersion) -> "Model":
129130
rest_model_version: ModelVersionProperties = model_rest_object.properties
130131
arm_id = AMLVersionedArmId(arm_id=model_rest_object.id)
131132
model_stage = rest_model_version.stage if hasattr(rest_model_version, "stage") else None
133+
model_system_metadata = (
134+
rest_model_version.system_metadata if hasattr(rest_model_version, "system_metadata") else None
135+
)
132136
if hasattr(rest_model_version, "flavors"):
133137
flavors = {key: flavor.data for key, flavor in rest_model_version.flavors.items()}
134138
model = Model(
@@ -150,6 +154,7 @@ def _from_rest_object(cls, model_rest_object: ModelVersion) -> "Model":
150154
if rest_model_version.intellectual_property
151155
else None
152156
),
157+
system_metadata=model_system_metadata,
153158
)
154159
return model
155160

@@ -182,6 +187,8 @@ def _to_rest_object(self) -> ModelVersion:
182187
stage=self.stage,
183188
is_anonymous=self._is_anonymous,
184189
)
190+
model_version.system_metadata = self._system_metadata if hasattr(self, "_system_metadata") else None
191+
185192
model_version_resource = ModelVersion(properties=model_version)
186193

187194
return model_version_resource

sdk/ml/azure-ai-ml/tests/model/unittests/test_model_schema.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,18 @@ def test_deserialize_with_stage(self) -> None:
3737
model = load_model(path)
3838
assert model.stage == "Production"
3939

40+
def test_deserialize_with_system_metadata(self) -> None:
41+
path = Path("./tests/test_configs/model/model_with_system_metadata.yml")
42+
model = load_model(path)
43+
assert model._system_metadata
44+
assert model._system_metadata["publisher"] == "Contoso"
45+
assert model._system_metadata["license"] == "MIT License"
46+
47+
model_version_resource = model._to_rest_object()
48+
assert model_version_resource.properties.system_metadata
49+
assert model_version_resource.properties.system_metadata["publisher"] == "Contoso"
50+
assert model_version_resource.properties.system_metadata["license"] == "MIT License"
51+
4052
def test_ipp_model(self) -> None:
4153
rest_ipp_model = {
4254
"id": "azureml://registries/fake_registry/models/fake_ipp_model/versions/611575",
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
name: my-production-model
2+
type: mlflow_model
3+
path: ./lightgbm_mlflow_model
4+
version: 3
5+
description: "this is my test model with stage"
6+
stage: "Production"
7+
tags:
8+
foo: bar
9+
abc: 123
10+
utc_time_created: '2023-05-03 17:44:02.096572'
11+
flavors:
12+
sklearn:
13+
sklearn_version: 0.23.2
14+
python_function:
15+
loader_module: office.plrmodel
16+
python_version: 3.8.5
17+
system_metadata:
18+
publisher: "Contoso"
19+
license: "MIT License"

0 commit comments

Comments
 (0)