frogml-core 0.0.4__py3-none-any.whl → 0.0.6__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.4"
4
+ __version__ = "0.0.6"
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
@@ -3,6 +3,7 @@ from typing import Optional
3
3
  import grpc
4
4
  from dependency_injector.wiring import Provide
5
5
 
6
+ from frogml_core.utils.model_utils import get_model_id_from_model_name
6
7
  from frogml_proto.qwak.models.models_pb2 import (
7
8
  CreateModelRequest,
8
9
  DeleteModelRequest,
@@ -59,7 +60,7 @@ class ModelsManagementClient:
59
60
  return self._models_management_service.CreateModel(
60
61
  CreateModelRequest(
61
62
  model_spec=ModelSpec(
62
- model_named_id=model_name.lower().replace(" ", "-"),
63
+ model_named_id=get_model_id_from_model_name(model_name),
63
64
  display_name=model_name,
64
65
  project_id=project_id,
65
66
  model_description=model_description,
@@ -3,6 +3,7 @@ from platform import python_version
3
3
  from dependency_injector.wiring import Provide
4
4
  from grpc import RpcError
5
5
 
6
+ from frogml_core.utils.model_utils import get_model_id_from_model_name
6
7
  from frogml_proto.jfml.model_version.v1.model_repository_spec_pb2 import (
7
8
  ModelRepositorySpec,
8
9
  )
@@ -33,7 +34,7 @@ class ModelVersionManagerClient:
33
34
  def __build_create_model_request(
34
35
  project_key: str,
35
36
  repository_key: str,
36
- model_id: str,
37
+ model_name: str,
37
38
  model_version_name: str,
38
39
  model_version_framework: ModelVersionFramework,
39
40
  dry_run: bool,
@@ -44,7 +45,7 @@ class ModelVersionManagerClient:
44
45
  repository_spec=ModelRepositorySpec(
45
46
  project_key=project_key,
46
47
  repository_key=repository_key,
47
- model_id=model_id,
48
+ model_id=get_model_id_from_model_name(model_name),
48
49
  ),
49
50
  name=model_version_name,
50
51
  framework=model_version_framework,
@@ -64,7 +65,7 @@ class ModelVersionManagerClient:
64
65
  create_model_request = self.__build_create_model_request(
65
66
  project_key=project_key,
66
67
  repository_key=repository_key,
67
- model_id=model_name,
68
+ model_name=model_name,
68
69
  model_version_name=model_version_name,
69
70
  model_version_framework=model_version_framework,
70
71
  dry_run=True,
@@ -90,7 +91,7 @@ class ModelVersionManagerClient:
90
91
  create_model_request = self.__build_create_model_request(
91
92
  project_key=project_key,
92
93
  repository_key=repository_key,
93
- model_id=model_name,
94
+ model_name=model_name,
94
95
  model_version_name=model_version_name,
95
96
  model_version_framework=model_version_framework,
96
97
  dry_run=False,
@@ -0,0 +1,2 @@
1
+ def get_model_id_from_model_name(model_name: str) -> str:
2
+ return model_name.strip().lower().replace(" ", "_").replace("-", "_")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: frogml-core
3
- Version: 0.0.4
3
+ Version: 0.0.6
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
@@ -12,8 +12,6 @@ Classifier: Programming Language :: Python :: 3
12
12
  Classifier: Programming Language :: Python :: 3.9
13
13
  Classifier: Programming Language :: Python :: 3.10
14
14
  Classifier: Programming Language :: Python :: 3.11
15
- Classifier: Programming Language :: Python :: 3.7
16
- Classifier: Programming Language :: Python :: 3.8
17
15
  Classifier: Programming Language :: Python :: Implementation :: CPython
18
16
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
19
17
  Provides-Extra: feature-store
@@ -28,12 +26,12 @@ Requires-Dist: frogml-storage (>=0.9.0,<0.10.0)
28
26
  Requires-Dist: grpcio (>=1.57.0)
29
27
  Requires-Dist: joblib (>=1.3.2,<2.0.0)
30
28
  Requires-Dist: marshmallow-dataclass (>=8.5.8,<9.0.0)
31
- Requires-Dist: protobuf (>=3.10,<4) ; python_full_version >= "3.7.1" and python_version < "3.10"
29
+ Requires-Dist: protobuf (>=3.10,<4) ; python_version < "3.10"
32
30
  Requires-Dist: protobuf (>=4.21.6) ; python_version >= "3.10"
33
31
  Requires-Dist: pyarrow (>=6.0.0) ; extra == "feature-store"
34
32
  Requires-Dist: pyathena (>=2.2.0,!=2.18.0) ; extra == "feature-store"
33
+ Requires-Dist: pyjwt (>=2.10.1,<3.0.0)
35
34
  Requires-Dist: pyspark (==3.4.2) ; extra == "feature-store"
36
- Requires-Dist: python-jose
37
35
  Requires-Dist: python-json-logger (>=3.2.1,<4.0.0)
38
36
  Requires-Dist: requests
39
37
  Requires-Dist: retrying (==1.3.4)
@@ -1,4 +1,4 @@
1
- frogml_core/__init__.py,sha256=FEH4fn3sgb5td_T6APitX5ZU7tYrNApGiJUwKXfuQP4,776
1
+ frogml_core/__init__.py,sha256=YrxSzDS2w-mX_wxtVwIoK6vNGQ32nDj-A7Pv5GAq97A,776
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
@@ -71,9 +71,9 @@ frogml_core/clients/kube_deployment_captain/client.py,sha256=oz7VF37TSO0S07MqXOY
71
71
  frogml_core/clients/logging_client/__init__.py,sha256=1OCHnigQBYThBwGbxCreYA0BgP0HcuLFzNEWd3Yxh-c,34
72
72
  frogml_core/clients/logging_client/client.py,sha256=A7qQJWW54Ve7O0DuJX9gmSJlUQyRIKC0VmfGS6bUwjo,4950
73
73
  frogml_core/clients/model_management/__init__.py,sha256=vjWVP8MjmK4_A70WOgJqa6x24AeLK-ABjGJtogGzw9w,43
74
- frogml_core/clients/model_management/client.py,sha256=ZsElgiI2hH8eArLeN6Gm4mN8VojdPyCSmbCNUQspJD4,4500
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=HvoIEx3fFP4cLoEnmIqD3jwB1EXA4a3TvOuz43eXkeg,4038
76
+ frogml_core/clients/model_version_manager/client.py,sha256=-QN6ibQ_wdkS_pUqcD_WfjSoroeGgCMFEXOcqOdndVo,4147
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
@@ -419,6 +419,7 @@ frogml_core/tools/logger/logging.yml,sha256=E3wtIVo7JV5DPP0EjT2Ang1zhdntW9s7uMVW
419
419
  frogml_core/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
420
420
  frogml_core/utils/datetime_utils.py,sha256=3zK7PUrerMlwB7U6WeuYwMAclVMfPqBNZihNRyIVMs4,581
421
421
  frogml_core/utils/dict_utils.py,sha256=YsOSQeGpmrsm3CMnx2ZbqvzEcybk3m-0TCMXbBdBXaY,263
422
+ frogml_core/utils/model_utils.py,sha256=fLdYIScmVUfChGGxOacH2mID00ZUOPtS4ewUimEDGhg,132
422
423
  frogml_core/utils/proto_utils.py,sha256=QXEOf-pmqRLaijqCVt4IHb7_b8bmG1_ghfgMmqzHrg0,1730
423
424
  frogml_core/vector_store/__init__.py,sha256=9gR2B5A1MXb2ks5VUzqrPASGpVTDuJs4uq7N7FNWOY4,120
424
425
  frogml_core/vector_store/client.py,sha256=mmchLHjR5aOZOLIz1eibmsoXSMHvcHjCtaWB24QZoAY,6067
@@ -532,8 +533,8 @@ frogml_proto/qwak/automation/v1/automation_execution_pb2_grpc.py,sha256=1oboBPFx
532
533
  frogml_proto/qwak/automation/v1/automation_management_service_pb2.py,sha256=m5Yku2SUszB3-v3c3WCnZ0TICysK52OzAV5rg6Ta4qw,21191
533
534
  frogml_proto/qwak/automation/v1/automation_management_service_pb2.pyi,sha256=Zt3T45t9CXdTZyNkQYWY9k2Axn4HGEMc--VDvzByX10,15257
534
535
  frogml_proto/qwak/automation/v1/automation_management_service_pb2_grpc.py,sha256=8vCWTmXc8c57mT6v-l9aNfvnK-OuEvgEygvZfwGDqwE,25476
535
- frogml_proto/qwak/automation/v1/automation_pb2.py,sha256=q1DV4b6J-QaGJhoXKLHV0ESsSRjt9h6rfejdCXt65CM,3889
536
- frogml_proto/qwak/automation/v1/automation_pb2.pyi,sha256=tsuyRz0sbow4ikdugDB_RGZy-oqXCm8spg-CUvo4FeY,5434
536
+ frogml_proto/qwak/automation/v1/automation_pb2.py,sha256=Tmu6jaP5grkKyNtNm8eoEX8RAKskQpSk9PrMtdihufw,3933
537
+ frogml_proto/qwak/automation/v1/automation_pb2.pyi,sha256=lJ4sdwOmlUv4HESaCHDrtiDeoRJR7aCpf-J-DRunU1c,5594
537
538
  frogml_proto/qwak/automation/v1/automation_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
538
539
  frogml_proto/qwak/automation/v1/common_pb2.py,sha256=PeJb40TXeIwjENReF-MNsZ8e8QiUxA_DwiGVTwn7QmI,2569
539
540
  frogml_proto/qwak/automation/v1/common_pb2.pyi,sha256=v1FL9ghFd_oy1WuQYnczXOEdl2Firmh52ofRO8GwVx4,2785
@@ -967,7 +968,7 @@ frogml_services_mock/mocks/alert_manager_service_api.py,sha256=wEBgwtCRAxUSAni-r
967
968
  frogml_services_mock/mocks/alert_registry_service_api.py,sha256=k_MbEytyIvUcMffqd1E6Wf0qBEOyZMVpBu-jaS6Tvjw,2277
968
969
  frogml_services_mock/mocks/analytics_api.py,sha256=9zA90He4hYOd8Wr1k_wZho6bWsbkd8mVUt4MUCrTEKc,2132
969
970
  frogml_services_mock/mocks/audience_service_api.py,sha256=x96adhF05NYqEtI8lJaf5llrZX29udPLHuVXKy_FbR0,2661
970
- frogml_services_mock/mocks/authentication_service.py,sha256=cmsDEcVjJsCU143oOAEfinShvzRw9I8mJAAEIa53SjI,1176
971
+ frogml_services_mock/mocks/authentication_service.py,sha256=cyuH9XX8oicOz_GFoIgP62ru0NWxk7OiXQushfftBUc,1170
971
972
  frogml_services_mock/mocks/automation_management_service.py,sha256=-7kncqM3R-_pLmppzFpuv_TniXCVGVuESculVuQ3EbY,8238
972
973
  frogml_services_mock/mocks/autoscaling_service_api.py,sha256=u3RkwHxACPFSk9DwhLFQSI7_ULoHN9uWFL-zyyo-sNw,1032
973
974
  frogml_services_mock/mocks/batch_job_manager_service.py,sha256=QY3HA0MlA8eg2jkQEzjyGx8UsSnlGbOUopDLOYLacL4,13146
@@ -1012,6 +1013,6 @@ frogml_services_mock/mocks/workspace_manager_service_mock.py,sha256=WbOiWgOyr-xT
1012
1013
  frogml_services_mock/services_mock.py,sha256=_34z6rFCHFwcSni-9eyJlrH264xsL_QDNmG-EBv0zMc,20281
1013
1014
  frogml_services_mock/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1014
1015
  frogml_services_mock/utils/service_utils.py,sha256=ZlB0CnB1J6oBn6_m7fQO2U8tKoboHdUa6ljjkRMYNXU,265
1015
- frogml_core-0.0.4.dist-info/METADATA,sha256=p-i36cxAoVFMZ9lytMKXYpNxNTJ-NP0y0UKLWH33dd4,2228
1016
- frogml_core-0.0.4.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
1017
- frogml_core-0.0.4.dist-info/RECORD,,
1016
+ frogml_core-0.0.6.dist-info/METADATA,sha256=Z9dDG7CFuEb9D-pxmi7Lkcv-ORCfXBNMqdOY8TW_T8Q,2105
1017
+ frogml_core-0.0.6.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
1018
+ frogml_core-0.0.6.dist-info/RECORD,,
@@ -18,7 +18,7 @@ from frogml_proto.qwak.automation.v1 import trigger_pb2 as qwak_dot_automation_d
18
18
  from frogml_proto.qwak.automation.v1 import notification_pb2 as qwak_dot_automation_dot_v1_dot_notification__pb2
19
19
 
20
20
 
21
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#qwak/automation/v1/automation.proto\x12\x12qwak.automation.v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1fqwak/automation/v1/action.proto\x1a qwak/automation/v1/trigger.proto\x1a%qwak/automation/v1/notification.proto\"\xcc\x01\n\nAutomation\x12\x15\n\rautomation_id\x18\x01 \x01(\t\x12;\n\x0f\x61utomation_spec\x18\x02 \x01(\x0b\x32\".qwak.automation.v1.AutomationSpec\x12\x1b\n\x13qwak_environment_id\x18\x03 \x01(\t\x12\x39\n\x0c\x63reate_audit\x18\x04 \x01(\x0b\x32#.qwak.automation.v1.AutomationAudit\x12\x12\n\nis_deleted\x18\x05 \x01(\x08\"\xe3\x02\n\x0e\x41utomationSpec\x12\x10\n\x08model_id\x18\x02 \x01(\t\x12\x17\n\x0f\x61utomation_name\x18\x03 \x01(\t\x12,\n\x07trigger\x18\x04 \x01(\x0b\x32\x1b.qwak.automation.v1.Trigger\x12*\n\x06\x61\x63tion\x18\x05 \x01(\x0b\x32\x1a.qwak.automation.v1.Action\x12\x1e\n\x16\x61utomation_description\x18\x06 \x01(\t\x12\x12\n\nis_enabled\x18\x07 \x01(\x08\x12\x32\n\x08on_error\x18\x08 \x01(\x0b\x32 .qwak.automation.v1.Notification\x12\x34\n\non_success\x18\t \x01(\x0b\x32 .qwak.automation.v1.Notification\x12\x1b\n\x13\x65xecute_immediately\x18\n \x01(\x08\x12\x11\n\tis_sdk_v1\x18\x0b \x01(\x08\"L\n\x0f\x41utomationAudit\x12(\n\x04\x64\x61te\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07user_id\x18\x02 \x01(\tB!\n\x1d\x63om.qwak.ai.automation.api.v1P\x01\x62\x06proto3')
21
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#qwak/automation/v1/automation.proto\x12\x12qwak.automation.v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1fqwak/automation/v1/action.proto\x1a qwak/automation/v1/trigger.proto\x1a%qwak/automation/v1/notification.proto\"\xe4\x01\n\nAutomation\x12\x15\n\rautomation_id\x18\x01 \x01(\t\x12;\n\x0f\x61utomation_spec\x18\x02 \x01(\x0b\x32\".qwak.automation.v1.AutomationSpec\x12\x1b\n\x13qwak_environment_id\x18\x03 \x01(\t\x12\x39\n\x0c\x63reate_audit\x18\x04 \x01(\x0b\x32#.qwak.automation.v1.AutomationAudit\x12\x12\n\nis_deleted\x18\x05 \x01(\x08\x12\x16\n\x0ejfrog_token_id\x18\x06 \x01(\t\"\xe3\x02\n\x0e\x41utomationSpec\x12\x10\n\x08model_id\x18\x02 \x01(\t\x12\x17\n\x0f\x61utomation_name\x18\x03 \x01(\t\x12,\n\x07trigger\x18\x04 \x01(\x0b\x32\x1b.qwak.automation.v1.Trigger\x12*\n\x06\x61\x63tion\x18\x05 \x01(\x0b\x32\x1a.qwak.automation.v1.Action\x12\x1e\n\x16\x61utomation_description\x18\x06 \x01(\t\x12\x12\n\nis_enabled\x18\x07 \x01(\x08\x12\x32\n\x08on_error\x18\x08 \x01(\x0b\x32 .qwak.automation.v1.Notification\x12\x34\n\non_success\x18\t \x01(\x0b\x32 .qwak.automation.v1.Notification\x12\x1b\n\x13\x65xecute_immediately\x18\n \x01(\x08\x12\x11\n\tis_sdk_v1\x18\x0b \x01(\x08\"L\n\x0f\x41utomationAudit\x12(\n\x04\x64\x61te\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07user_id\x18\x02 \x01(\tB!\n\x1d\x63om.qwak.ai.automation.api.v1P\x01\x62\x06proto3')
22
22
 
23
23
 
24
24
 
@@ -51,9 +51,9 @@ if _descriptor._USE_C_DESCRIPTORS == False:
51
51
  DESCRIPTOR._options = None
52
52
  DESCRIPTOR._serialized_options = b'\n\035com.qwak.ai.automation.api.v1P\001'
53
53
  _AUTOMATION._serialized_start=199
54
- _AUTOMATION._serialized_end=403
55
- _AUTOMATIONSPEC._serialized_start=406
56
- _AUTOMATIONSPEC._serialized_end=761
57
- _AUTOMATIONAUDIT._serialized_start=763
58
- _AUTOMATIONAUDIT._serialized_end=839
54
+ _AUTOMATION._serialized_end=427
55
+ _AUTOMATIONSPEC._serialized_start=430
56
+ _AUTOMATIONSPEC._serialized_end=785
57
+ _AUTOMATIONAUDIT._serialized_start=787
58
+ _AUTOMATIONAUDIT._serialized_end=863
59
59
  # @@protoc_insertion_point(module_scope)
@@ -26,6 +26,7 @@ class Automation(google.protobuf.message.Message):
26
26
  QWAK_ENVIRONMENT_ID_FIELD_NUMBER: builtins.int
27
27
  CREATE_AUDIT_FIELD_NUMBER: builtins.int
28
28
  IS_DELETED_FIELD_NUMBER: builtins.int
29
+ JFROG_TOKEN_ID_FIELD_NUMBER: builtins.int
29
30
  automation_id: builtins.str
30
31
  """The automation ID"""
31
32
  @property
@@ -35,6 +36,7 @@ class Automation(google.protobuf.message.Message):
35
36
  @property
36
37
  def create_audit(self) -> global___AutomationAudit: ...
37
38
  is_deleted: builtins.bool
39
+ jfrog_token_id: builtins.str
38
40
  def __init__(
39
41
  self,
40
42
  *,
@@ -43,9 +45,10 @@ class Automation(google.protobuf.message.Message):
43
45
  qwak_environment_id: builtins.str = ...,
44
46
  create_audit: global___AutomationAudit | None = ...,
45
47
  is_deleted: builtins.bool = ...,
48
+ jfrog_token_id: builtins.str = ...,
46
49
  ) -> None: ...
47
50
  def HasField(self, field_name: typing_extensions.Literal["automation_spec", b"automation_spec", "create_audit", b"create_audit"]) -> builtins.bool: ...
48
- def ClearField(self, field_name: typing_extensions.Literal["automation_id", b"automation_id", "automation_spec", b"automation_spec", "create_audit", b"create_audit", "is_deleted", b"is_deleted", "qwak_environment_id", b"qwak_environment_id"]) -> None: ...
51
+ def ClearField(self, field_name: typing_extensions.Literal["automation_id", b"automation_id", "automation_spec", b"automation_spec", "create_audit", b"create_audit", "is_deleted", b"is_deleted", "jfrog_token_id", b"jfrog_token_id", "qwak_environment_id", b"qwak_environment_id"]) -> None: ...
49
52
 
50
53
  global___Automation = Automation
51
54
 
@@ -1,6 +1,6 @@
1
1
  from datetime import datetime, timedelta
2
2
 
3
- from jose import jwt
3
+ import jwt
4
4
 
5
5
  from frogml_proto.qwak.administration.v0.authentication.authentication_service_pb2 import (
6
6
  AuthenticateRequest,
@@ -23,7 +23,7 @@ _payload = {
23
23
  "exp": epoch,
24
24
  }
25
25
 
26
- mock_jwt_token = jwt.encode(_payload, "secret", algorithm="HS256")
26
+ mock_jwt_token = jwt.encode(_payload, key="secret", algorithm="HS256")
27
27
 
28
28
 
29
29
  class AuthenticationServiceMock(AuthenticationServiceServicer):