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 CHANGED
@@ -1,7 +1,7 @@
1
1
  """Top-level package for frogml."""
2
2
 
3
3
  __author__ = "jfrog"
4
- __version__ = "0.0.15"
4
+ __version__ = "0.0.17"
5
5
 
6
6
  from frogml_core.inner.di_configuration import wire_dependencies
7
7
  from frogml_core.model.model_version_tracking import ( # noqa: F401,E501
@@ -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 ModelVersionSpec
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:
@@ -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,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: frogml-core
3
- Version: 0.0.15
3
+ Version: 0.0.17
4
4
  Summary: frogml Core contains the necessary objects and communication tools for using the Jfrog ml Platform
5
5
  License: Apache-2.0
6
6
  Keywords: mlops,ml,deployment,serving,model
@@ -1,4 +1,4 @@
1
- frogml_core/__init__.py,sha256=ZqgsBMXf6U8w8MIcJMpgGVK6mD5QvOYQlrJAdEjokOk,777
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=MKw3ek_dwvm6AhjCaAWtm_s_N3LueN9-Rer4P-ItN9Y,5194
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=p0ry5k7iwNT6btEdSBedcfvAKRBmC5X5oKmUz27_E6k,1779
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.15.dist-info/METADATA,sha256=5ewZ02PpCVLqEtsJ2PDKj-jJXLRx99JRBnH8AvPkfA4,2099
1023
- frogml_core-0.0.15.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
1024
- frogml_core-0.0.15.dist-info/RECORD,,
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,,