frogml-core 0.0.15__py3-none-any.whl → 0.0.17__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- frogml_core/__init__.py +1 -1
- frogml_core/clients/model_version_manager/client.py +112 -1
- frogml_core/utils/proto_utils.py +21 -0
- {frogml_core-0.0.15.dist-info → frogml_core-0.0.17.dist-info}/METADATA +1 -1
- {frogml_core-0.0.15.dist-info → frogml_core-0.0.17.dist-info}/RECORD +6 -6
- {frogml_core-0.0.15.dist-info → frogml_core-0.0.17.dist-info}/WHEEL +0 -0
frogml_core/__init__.py
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
from platform import python_version
|
2
|
+
from typing import List, Optional, Dict, Union, Tuple
|
2
3
|
|
3
4
|
from dependency_injector.wiring import Provide
|
5
|
+
from frogml_storage.entity_manifest import Artifact
|
4
6
|
from grpc import RpcError
|
5
7
|
|
6
8
|
from frogml_core.exceptions import FrogmlException
|
7
9
|
from frogml_core.inner.di_configuration import FrogmlContainer
|
8
10
|
from frogml_core.utils.model_utils import get_model_id_from_model_name
|
11
|
+
from frogml_core.utils.proto_utils import ProtoUtils
|
12
|
+
from frogml_proto.jfml.model_version.v1.artifact_pb2 import Artifact as ArtifactProto
|
9
13
|
from frogml_proto.jfml.model_version.v1.model_repository_spec_pb2 import (
|
10
14
|
ModelRepositorySpec,
|
11
15
|
)
|
@@ -21,7 +25,12 @@ from frogml_proto.jfml.model_version.v1.model_version_manager_service_pb2 import
|
|
21
25
|
from frogml_proto.jfml.model_version.v1.model_version_manager_service_pb2_grpc import (
|
22
26
|
ModelVersionManagerServiceStub,
|
23
27
|
)
|
24
|
-
from frogml_proto.jfml.model_version.v1.model_version_pb2 import
|
28
|
+
from frogml_proto.jfml.model_version.v1.model_version_pb2 import (
|
29
|
+
ModelVersionSpec,
|
30
|
+
MlBomData,
|
31
|
+
ParameterValue,
|
32
|
+
MetricValue,
|
33
|
+
)
|
25
34
|
|
26
35
|
|
27
36
|
class ModelVersionManagerClient:
|
@@ -33,14 +42,54 @@ class ModelVersionManagerClient:
|
|
33
42
|
self.__model_version_manager_stub = ModelVersionManagerServiceStub(grpc_channel)
|
34
43
|
|
35
44
|
@staticmethod
|
45
|
+
def __build_mlbom_data_kwargs(
|
46
|
+
model_artifact: List[ArtifactProto],
|
47
|
+
code_artifacts: Optional[List[ArtifactProto]] = None,
|
48
|
+
dependency_artifacts: Optional[List[ArtifactProto]] = None,
|
49
|
+
metrics: Optional[Dict[str, str]] = None,
|
50
|
+
parameters: Optional[Dict[str, str]] = None,
|
51
|
+
) -> Dict[
|
52
|
+
str, Union[List[ArtifactProto], Dict[str, Union[ParameterValue, MetricValue]]]
|
53
|
+
]:
|
54
|
+
kwargs = {"model_artifact": model_artifact}
|
55
|
+
|
56
|
+
if dependency_artifacts:
|
57
|
+
kwargs["dependency_artifacts"] = dependency_artifacts
|
58
|
+
|
59
|
+
if code_artifacts:
|
60
|
+
kwargs["code_artifacts"] = code_artifacts
|
61
|
+
|
62
|
+
if parameters:
|
63
|
+
kwargs["parameters"] = {
|
64
|
+
key: ParameterValue(value=str(value))
|
65
|
+
for key, value in parameters.items()
|
66
|
+
}
|
67
|
+
|
68
|
+
if metrics:
|
69
|
+
kwargs["metrics"] = {
|
70
|
+
key: MetricValue(value=str(value)) for key, value in metrics.items()
|
71
|
+
}
|
72
|
+
|
73
|
+
return kwargs
|
74
|
+
|
36
75
|
def __build_create_model_version_request(
|
76
|
+
self,
|
37
77
|
project_key: str,
|
38
78
|
repository_key: str,
|
39
79
|
model_name: str,
|
40
80
|
model_version_name: str,
|
41
81
|
model_version_framework: ModelVersionFramework,
|
42
82
|
dry_run: bool,
|
83
|
+
model_artifacts: List[ArtifactProto],
|
84
|
+
dependency_artifacts: Optional[List[ArtifactProto]] = None,
|
85
|
+
code_artifacts: Optional[List[ArtifactProto]] = None,
|
86
|
+
parameters: Optional[Dict[str, str]] = None,
|
87
|
+
metrics: Optional[Dict[str, str]] = None,
|
43
88
|
) -> CreateModelVersionRequest:
|
89
|
+
kwargs: dict = self.__build_mlbom_data_kwargs(
|
90
|
+
model_artifacts, code_artifacts, dependency_artifacts, metrics, parameters
|
91
|
+
)
|
92
|
+
|
44
93
|
return CreateModelVersionRequest(
|
45
94
|
dry_run=dry_run,
|
46
95
|
model_version=ModelVersionSpec(
|
@@ -54,6 +103,7 @@ class ModelVersionManagerClient:
|
|
54
103
|
framework=model_version_framework,
|
55
104
|
python_version=python_version(),
|
56
105
|
),
|
106
|
+
ml_bom_data=MlBomData(**kwargs),
|
57
107
|
)
|
58
108
|
|
59
109
|
def validate_create_model_version(
|
@@ -63,8 +113,21 @@ class ModelVersionManagerClient:
|
|
63
113
|
model_name: str,
|
64
114
|
model_version_name: str,
|
65
115
|
model_version_framework: ModelVersionFramework,
|
116
|
+
model_artifact: List[Artifact],
|
117
|
+
dependency_artifacts: Optional[List[Artifact]] = None,
|
118
|
+
code_artifacts: Optional[List[Artifact]] = None,
|
119
|
+
parameters: Optional[Dict[str, str]] = None,
|
120
|
+
metrics: Optional[Dict[str, str]] = None,
|
66
121
|
):
|
67
122
|
try:
|
123
|
+
(
|
124
|
+
code_artifacts_proto,
|
125
|
+
dependency_artifacts_proto,
|
126
|
+
model_artifact_proto,
|
127
|
+
) = self.convert_artifacts(
|
128
|
+
model_artifact, dependency_artifacts, code_artifacts
|
129
|
+
)
|
130
|
+
|
68
131
|
create_model_request = self.__build_create_model_version_request(
|
69
132
|
project_key=project_key,
|
70
133
|
repository_key=repository_key,
|
@@ -72,6 +135,11 @@ class ModelVersionManagerClient:
|
|
72
135
|
model_version_name=model_version_name,
|
73
136
|
model_version_framework=model_version_framework,
|
74
137
|
dry_run=True,
|
138
|
+
model_artifacts=model_artifact_proto,
|
139
|
+
dependency_artifacts=dependency_artifacts_proto,
|
140
|
+
code_artifacts=code_artifacts_proto,
|
141
|
+
parameters=parameters,
|
142
|
+
metrics=metrics,
|
75
143
|
)
|
76
144
|
self.__model_version_manager_stub.CreateModelVersion(create_model_request)
|
77
145
|
except RpcError as e:
|
@@ -89,8 +157,21 @@ class ModelVersionManagerClient:
|
|
89
157
|
model_name: str,
|
90
158
|
model_version_name: str,
|
91
159
|
model_version_framework: ModelVersionFramework,
|
160
|
+
model_artifact: List[Artifact],
|
161
|
+
dependency_artifacts: Optional[List[Artifact]] = None,
|
162
|
+
code_artifacts: Optional[List[Artifact]] = None,
|
163
|
+
parameters: Optional[Dict[str, str]] = None,
|
164
|
+
metrics: Optional[Dict[str, str]] = None,
|
92
165
|
) -> CreateModelVersionResponse:
|
93
166
|
try:
|
167
|
+
(
|
168
|
+
code_artifacts_proto,
|
169
|
+
dependency_artifacts_proto,
|
170
|
+
model_artifact_proto,
|
171
|
+
) = self.convert_artifacts(
|
172
|
+
model_artifact, dependency_artifacts, code_artifacts
|
173
|
+
)
|
174
|
+
|
94
175
|
create_model_request = self.__build_create_model_version_request(
|
95
176
|
project_key=project_key,
|
96
177
|
repository_key=repository_key,
|
@@ -98,6 +179,11 @@ class ModelVersionManagerClient:
|
|
98
179
|
model_version_name=model_version_name,
|
99
180
|
model_version_framework=model_version_framework,
|
100
181
|
dry_run=False,
|
182
|
+
model_artifacts=model_artifact_proto,
|
183
|
+
dependency_artifacts=dependency_artifacts_proto,
|
184
|
+
code_artifacts=code_artifacts_proto,
|
185
|
+
parameters=parameters,
|
186
|
+
metrics=metrics,
|
101
187
|
)
|
102
188
|
create_model_version_response: CreateModelVersionResponse = (
|
103
189
|
self.__model_version_manager_stub.CreateModelVersion(
|
@@ -114,6 +200,31 @@ class ModelVersionManagerClient:
|
|
114
200
|
message = f"Failed to validate model version, details [{e}]"
|
115
201
|
raise FrogmlException(message)
|
116
202
|
|
203
|
+
@staticmethod
|
204
|
+
def convert_artifacts(
|
205
|
+
model_artifact: List[Artifact],
|
206
|
+
dependency_artifacts: Optional[List[Artifact]] = None,
|
207
|
+
code_artifacts: Optional[List[Artifact]] = None,
|
208
|
+
) -> Tuple[
|
209
|
+
Optional[List[ArtifactProto]],
|
210
|
+
Optional[List[ArtifactProto]],
|
211
|
+
List[ArtifactProto],
|
212
|
+
]:
|
213
|
+
model_artifact_proto: List[
|
214
|
+
ArtifactProto
|
215
|
+
] = ProtoUtils.convert_artifacts_to_artifacts_proto(model_artifact)
|
216
|
+
dependency_artifacts_proto = (
|
217
|
+
ProtoUtils.convert_artifacts_to_artifacts_proto(dependency_artifacts)
|
218
|
+
if dependency_artifacts
|
219
|
+
else None
|
220
|
+
)
|
221
|
+
code_artifacts_proto = (
|
222
|
+
ProtoUtils.convert_artifacts_to_artifacts_proto(code_artifacts)
|
223
|
+
if code_artifacts
|
224
|
+
else None
|
225
|
+
)
|
226
|
+
return code_artifacts_proto, dependency_artifacts_proto, model_artifact_proto
|
227
|
+
|
117
228
|
def get_mlbom_by_model_version_id(
|
118
229
|
self, model_version_id: str
|
119
230
|
) -> GetMlBomModelVersionByIdResponse:
|
frogml_core/utils/proto_utils.py
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
from typing import List
|
2
|
+
|
3
|
+
from frogml_storage.entity_manifest import Artifact
|
4
|
+
|
5
|
+
from frogml_proto.jfml.model_version.v1.artifact_pb2 import (
|
6
|
+
Artifact as ArtifactProto,
|
7
|
+
Checksums as ChecksumsProto,
|
8
|
+
)
|
1
9
|
from frogml_proto.jfml.model_version.v1.model_version_framework_pb2 import (
|
2
10
|
ModelVersionFramework,
|
3
11
|
CatboostFramework,
|
@@ -40,3 +48,16 @@ class ProtoUtils:
|
|
40
48
|
raise ValueError(f"Format {serialization_format} is not supported yet")
|
41
49
|
|
42
50
|
return ModelVersionFramework(**framework_to_define)
|
51
|
+
|
52
|
+
@staticmethod
|
53
|
+
def convert_artifacts_to_artifacts_proto(
|
54
|
+
artifacts: List[Artifact],
|
55
|
+
) -> List[ArtifactProto]:
|
56
|
+
return [
|
57
|
+
ArtifactProto(
|
58
|
+
artifact_path=artifact.artifact_path,
|
59
|
+
size=artifact.size,
|
60
|
+
checksums=ChecksumsProto(sha2=artifact.checksums.sha2),
|
61
|
+
)
|
62
|
+
for artifact in artifacts
|
63
|
+
]
|
@@ -1,4 +1,4 @@
|
|
1
|
-
frogml_core/__init__.py,sha256=
|
1
|
+
frogml_core/__init__.py,sha256=BKbXlzCDAHp1YE0_mvZtBo3GU34A8lkBwj9p0IIVHKI,777
|
2
2
|
frogml_core/automations/__init__.py,sha256=j2gD15MN-xVWhI5rAFsDwhL0CIyICLNT0scXsKvNBkU,1547
|
3
3
|
frogml_core/automations/automation_executions.py,sha256=xpOb9Dq8gPPGNQDJTvBBZbNz4woZDRZY0HqnLSu7pwU,3230
|
4
4
|
frogml_core/automations/automations.py,sha256=GKEQyQMi8sxX5oZn62PaxPi0zD8IaJRjBkhczRJxHNs,13070
|
@@ -73,7 +73,7 @@ frogml_core/clients/logging_client/client.py,sha256=A7qQJWW54Ve7O0DuJX9gmSJlUQyR
|
|
73
73
|
frogml_core/clients/model_management/__init__.py,sha256=vjWVP8MjmK4_A70WOgJqa6x24AeLK-ABjGJtogGzw9w,43
|
74
74
|
frogml_core/clients/model_management/client.py,sha256=rXnzcP3-pfXCVG0KlcCwbdeIJ1iFzV84JYtyNC8n-x8,4575
|
75
75
|
frogml_core/clients/model_version_manager/__init__.py,sha256=4Pnfzj4Egps48__dProdbSKQl5pNip0hGJd75w67BfY,46
|
76
|
-
frogml_core/clients/model_version_manager/client.py,sha256=
|
76
|
+
frogml_core/clients/model_version_manager/client.py,sha256=WeU9XXLu5K0ViS-2YeENq121qV4ESXmI6pzc_K8QkvM,9457
|
77
77
|
frogml_core/clients/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
78
78
|
frogml_core/clients/project/client.py,sha256=VvnUk7mo-UkE9Gkj9jVkCPGTVx8qmuekMz7oH9Uzv2Y,2159
|
79
79
|
frogml_core/clients/prompt_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -420,7 +420,7 @@ frogml_core/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
|
|
420
420
|
frogml_core/utils/datetime_utils.py,sha256=3zK7PUrerMlwB7U6WeuYwMAclVMfPqBNZihNRyIVMs4,581
|
421
421
|
frogml_core/utils/dict_utils.py,sha256=YsOSQeGpmrsm3CMnx2ZbqvzEcybk3m-0TCMXbBdBXaY,263
|
422
422
|
frogml_core/utils/model_utils.py,sha256=fLdYIScmVUfChGGxOacH2mID00ZUOPtS4ewUimEDGhg,132
|
423
|
-
frogml_core/utils/proto_utils.py,sha256=
|
423
|
+
frogml_core/utils/proto_utils.py,sha256=5kQAIxuzhk2_AB_enOD8kpLpIeruFjEGGSafnnt1fc8,2383
|
424
424
|
frogml_core/vector_store/__init__.py,sha256=9gR2B5A1MXb2ks5VUzqrPASGpVTDuJs4uq7N7FNWOY4,120
|
425
425
|
frogml_core/vector_store/client.py,sha256=mmchLHjR5aOZOLIz1eibmsoXSMHvcHjCtaWB24QZoAY,6067
|
426
426
|
frogml_core/vector_store/collection.py,sha256=KKeEww8iogmHdfEeqgTHqIV9PizeiUl1coWwHJY8Glc,17150
|
@@ -1019,6 +1019,6 @@ frogml_services_mock/mocks/workspace_manager_service_mock.py,sha256=WbOiWgOyr-xT
|
|
1019
1019
|
frogml_services_mock/services_mock.py,sha256=_34z6rFCHFwcSni-9eyJlrH264xsL_QDNmG-EBv0zMc,20281
|
1020
1020
|
frogml_services_mock/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1021
1021
|
frogml_services_mock/utils/service_utils.py,sha256=ZlB0CnB1J6oBn6_m7fQO2U8tKoboHdUa6ljjkRMYNXU,265
|
1022
|
-
frogml_core-0.0.
|
1023
|
-
frogml_core-0.0.
|
1024
|
-
frogml_core-0.0.
|
1022
|
+
frogml_core-0.0.17.dist-info/METADATA,sha256=1GPZDOPCEU2tNmyV0MP88shHnWvenLdbQJM9vEqWvlI,2099
|
1023
|
+
frogml_core-0.0.17.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
1024
|
+
frogml_core-0.0.17.dist-info/RECORD,,
|
File without changes
|