frogml 1.2.35__py3-none-any.whl → 1.2.41__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.
Files changed (46) hide show
  1. frogml/__init__.py +1 -1
  2. frogml/_proto/com/jfrog/ml/model/deployment/v1/auto_scaling_pb2.py +43 -0
  3. frogml/_proto/com/jfrog/ml/model/deployment/v1/auto_scaling_pb2.pyi +218 -0
  4. frogml/_proto/com/jfrog/ml/model/deployment/v1/auto_scaling_pb2_grpc.py +4 -0
  5. frogml/_proto/com/jfrog/ml/model/deployment/v1/deployment_pb2.py +53 -0
  6. frogml/_proto/com/jfrog/ml/model/deployment/v1/deployment_pb2.pyi +258 -0
  7. frogml/_proto/com/jfrog/ml/model/deployment/v1/deployment_pb2_grpc.py +4 -0
  8. frogml/_proto/com/jfrog/ml/model/deployment/v1/deployment_service_pb2.py +58 -0
  9. frogml/_proto/com/jfrog/ml/model/deployment/v1/deployment_service_pb2.pyi +224 -0
  10. frogml/_proto/com/jfrog/ml/model/deployment/v1/deployment_service_pb2_grpc.py +206 -0
  11. frogml/_proto/com/jfrog/ml/model/deployment/v1/environment_variables_configuration_pb2.py +33 -0
  12. frogml/_proto/com/jfrog/ml/model/deployment/v1/environment_variables_configuration_pb2.pyi +99 -0
  13. frogml/_proto/com/jfrog/ml/model/deployment/v1/environment_variables_configuration_pb2_grpc.py +4 -0
  14. frogml/_proto/com/jfrog/ml/model/deployment/v1/model_artifact_identifier_pb2.py +31 -0
  15. frogml/_proto/com/jfrog/ml/model/deployment/v1/model_artifact_identifier_pb2.pyi +99 -0
  16. frogml/_proto/com/jfrog/ml/model/deployment/v1/model_artifact_identifier_pb2_grpc.py +4 -0
  17. frogml/_proto/com/jfrog/ml/model/deployment/v1/model_deployment_brief_pb2.py +30 -0
  18. frogml/_proto/com/jfrog/ml/model/deployment/v1/model_deployment_brief_pb2.pyi +55 -0
  19. frogml/_proto/com/jfrog/ml/model/deployment/v1/model_deployment_brief_pb2_grpc.py +4 -0
  20. frogml/_proto/com/jfrog/ml/model/deployment/v1/model_deployment_filter_pb2.py +42 -0
  21. frogml/_proto/com/jfrog/ml/model/deployment/v1/model_deployment_filter_pb2.pyi +204 -0
  22. frogml/_proto/com/jfrog/ml/model/deployment/v1/model_deployment_filter_pb2_grpc.py +4 -0
  23. frogml/_proto/com/jfrog/ml/model/deployment/v1/probes_configuration_pb2.py +29 -0
  24. frogml/_proto/com/jfrog/ml/model/deployment/v1/probes_configuration_pb2.pyi +60 -0
  25. frogml/_proto/com/jfrog/ml/model/deployment/v1/probes_configuration_pb2_grpc.py +4 -0
  26. frogml/_proto/com/jfrog/ml/model/deployment/v1/realtime_deployment_pb2.py +28 -0
  27. frogml/_proto/com/jfrog/ml/model/deployment/v1/realtime_deployment_pb2.pyi +47 -0
  28. frogml/_proto/com/jfrog/ml/model/deployment/v1/realtime_deployment_pb2_grpc.py +4 -0
  29. frogml/_proto/com/jfrog/ml/model/deployment/v1/resource_configuration_pb2.py +27 -0
  30. frogml/_proto/com/jfrog/ml/model/deployment/v1/resource_configuration_pb2.pyi +29 -0
  31. frogml/_proto/com/jfrog/ml/model/deployment/v1/resource_configuration_pb2_grpc.py +4 -0
  32. frogml/_proto/qwak/logging/log_source_pb2.py +31 -25
  33. frogml/_proto/qwak/logging/log_source_pb2.pyi +28 -14
  34. frogml/_proto/qwak/models/models_pb2.py +81 -79
  35. frogml/_proto/qwak/models/models_pb2.pyi +24 -0
  36. frogml/_proto/qwak/models/models_pb2_grpc.py +34 -0
  37. frogml/core/clients/batch_job_management/client.py +14 -6
  38. frogml/core/clients/logging_client/client.py +118 -33
  39. frogml/core/clients/model_deployment_manager/__init__.py +1 -0
  40. frogml/core/clients/model_deployment_manager/client.py +103 -0
  41. {frogml-1.2.35.dist-info → frogml-1.2.41.dist-info}/METADATA +1 -1
  42. {frogml-1.2.35.dist-info → frogml-1.2.41.dist-info}/RECORD +46 -13
  43. frogml_services_mock/mocks/frogml_mocks.py +11 -3
  44. frogml_services_mock/mocks/model_deployment_manager_service_mock.py +255 -0
  45. frogml_services_mock/services_mock.py +18 -2
  46. {frogml-1.2.35.dist-info → frogml-1.2.41.dist-info}/WHEEL +0 -0
@@ -71,7 +71,7 @@ from .results import (
71
71
  GetExecutionReportResult,
72
72
  StartExecutionResult,
73
73
  )
74
- from typing import List
74
+ from typing import List, Optional
75
75
 
76
76
  CLIENT_TIMEOUT = 180 # Seconds
77
77
 
@@ -359,15 +359,21 @@ class BatchJobManagerClient:
359
359
  except grpc.RpcError as e:
360
360
  raise FrogmlException(f"Failed to cancel execution, error is {e}")
361
361
 
362
- def get_execution_report(self, execution_id: str) -> GetExecutionReportResult:
362
+ def get_execution_report(
363
+ self,
364
+ execution_id: str,
365
+ model_id: Optional[str] = None,
366
+ model_group_name: Optional[str] = None,
367
+ ) -> GetExecutionReportResult:
363
368
  """
364
369
 
365
370
  Args:
366
- execution_id: the batch execution id to get the current status of
371
+ execution_id: The batch execution id to get the report for.
372
+ model_id: The model ID. This is the display name(identifier), not the UUID.
373
+ model_group_name: The model group name.
367
374
 
368
375
  Returns:
369
- A full report of all the events that occurred as part of the execution job
370
-
376
+ A full report of all the events that occurred as part of the execution job.
371
377
  """
372
378
  try:
373
379
  self.logging_client = (
@@ -383,7 +389,9 @@ class BatchJobManagerClient:
383
389
  try:
384
390
  execution_log_response: ReadLogsResponse = (
385
391
  self.logging_client.read_execution_models_logs(
386
- execution_id=execution_id
392
+ execution_id=execution_id,
393
+ model_id=model_id,
394
+ model_group_name=model_group_name,
387
395
  )
388
396
  )
389
397
  execution_logs = execution_log_response.log_line
@@ -49,15 +49,41 @@ class LoggingClient:
49
49
 
50
50
  def read_build_logs(
51
51
  self,
52
- build_id=None,
53
- before_offset=None,
54
- after_offset=None,
55
- max_number_of_results=None,
56
- log_text_filter=None,
57
- ):
52
+ build_id: Optional[str] = None,
53
+ before_offset: Optional[str] = None,
54
+ after_offset: Optional[str] = None,
55
+ max_number_of_results: Optional[int] = None,
56
+ log_text_filter: Optional[str] = None,
57
+ model_id: Optional[str] = None,
58
+ model_group_name: Optional[str] = None,
59
+ ) -> ReadLogsResponse:
60
+ """
61
+ Read logs for a remote build.
62
+
63
+ Args:
64
+ build_id: The build ID to fetch logs for
65
+ before_offset: Optional offset to read logs before this point
66
+ after_offset: Optional offset to read logs after this point
67
+ max_number_of_results: Optional maximum number of log lines to return
68
+ log_text_filter: Optional text filter to search for in logs
69
+ model_id: The model ID. This is the display name(identifier), not the UUID.
70
+ model_group_name: The model group name.
71
+
72
+ Returns:
73
+ ReadLogsResponse containing the log lines
74
+
75
+ Raises:
76
+ FrogmlException: If reading logs fails
77
+ """
58
78
  try:
79
+ remote_build_source = RemoteBuildSource(
80
+ build_id=build_id,
81
+ model_id=model_id,
82
+ model_group_name=model_group_name,
83
+ )
84
+
59
85
  response = self.read_logs(
60
- source=LogSource(remote_build=RemoteBuildSource(build_id=build_id)),
86
+ source=LogSource(remote_build=remote_build_source),
61
87
  before_offset=before_offset,
62
88
  after_offset=after_offset,
63
89
  log_text_filter=log_text_filter,
@@ -70,20 +96,44 @@ class LoggingClient:
70
96
 
71
97
  def read_model_runtime_logs(
72
98
  self,
73
- build_id=None,
74
- deployment_id=None,
75
- before_offset=None,
76
- after_offset=None,
77
- max_number_of_results=None,
78
- log_text_filter=None,
99
+ build_id: Optional[str] = None,
100
+ deployment_id: Optional[str] = None,
101
+ before_offset: Optional[str] = None,
102
+ after_offset: Optional[str] = None,
103
+ max_number_of_results: Optional[int] = None,
104
+ log_text_filter: Optional[str] = None,
105
+ model_id: Optional[str] = None,
106
+ model_group_name: Optional[str] = None,
79
107
  ) -> ReadLogsResponse:
108
+ """
109
+ Read logs for a model runtime (deployment).
110
+
111
+ Args:
112
+ build_id: The build ID to fetch logs for
113
+ deployment_id: The deployment ID to fetch logs for
114
+ before_offset: Optional offset to read logs before this point
115
+ after_offset: Optional offset to read logs after this point
116
+ max_number_of_results: Optional maximum number of log lines to return
117
+ log_text_filter: Optional text filter to search for in logs
118
+ model_id: The model ID. This is the display name(identifier), not the UUID.
119
+ model_group_name: The model group name.
120
+
121
+ Returns:
122
+ ReadLogsResponse containing the log lines
123
+
124
+ Raises:
125
+ FrogmlException: If reading logs fails
126
+ """
80
127
  try:
128
+ model_runtime_source = ModelRuntimeSource(
129
+ build_id=build_id,
130
+ deployment_id=deployment_id,
131
+ model_id=model_id,
132
+ model_group_name=model_group_name,
133
+ )
134
+
81
135
  response = self.read_logs(
82
- source=LogSource(
83
- model_runtime=ModelRuntimeSource(
84
- build_id=build_id, deployment_id=deployment_id
85
- )
86
- ),
136
+ source=LogSource(model_runtime=model_runtime_source),
87
137
  before_offset=before_offset,
88
138
  after_offset=after_offset,
89
139
  log_text_filter=log_text_filter,
@@ -96,19 +146,41 @@ class LoggingClient:
96
146
 
97
147
  def read_execution_models_logs(
98
148
  self,
99
- execution_id,
100
- before_offset=None,
101
- after_offset=None,
102
- max_number_of_results=None,
103
- log_text_filter=None,
149
+ execution_id: str,
150
+ before_offset: Optional[str] = None,
151
+ after_offset: Optional[str] = None,
152
+ max_number_of_results: Optional[int] = None,
153
+ log_text_filter: Optional[str] = None,
154
+ model_id: Optional[str] = None,
155
+ model_group_name: Optional[str] = None,
104
156
  ) -> ReadLogsResponse:
157
+ """
158
+ Read logs for a model inference execution (batch job).
159
+
160
+ Args:
161
+ execution_id: The execution/inference job ID to fetch logs for
162
+ before_offset: Optional offset to read logs before this point
163
+ after_offset: Optional offset to read logs after this point
164
+ max_number_of_results: Optional maximum number of log lines to return
165
+ log_text_filter: Optional text filter to search for in logs
166
+ model_id: The model ID. This is the display name(identifier), not the UUID.
167
+ model_group_name: The model group name.
168
+
169
+ Returns:
170
+ ReadLogsResponse containing the log lines
171
+
172
+ Raises:
173
+ FrogmlException: If reading logs fails
174
+ """
105
175
  try:
176
+ inference_execution_source = InferenceExecutionSource(
177
+ inference_job_id=execution_id,
178
+ model_id=model_id,
179
+ model_group_name=model_group_name,
180
+ )
181
+
106
182
  response = self.read_logs(
107
- source=LogSource(
108
- inference_execution=InferenceExecutionSource(
109
- inference_job_id=execution_id
110
- )
111
- ),
183
+ source=LogSource(inference_execution=inference_execution_source),
112
184
  before_offset=before_offset,
113
185
  after_offset=after_offset,
114
186
  log_text_filter=log_text_filter,
@@ -122,12 +194,25 @@ class LoggingClient:
122
194
  @grpc_try_catch_wrapper("Failed to read logs request")
123
195
  def read_logs(
124
196
  self,
125
- source,
126
- before_offset,
127
- after_offset,
128
- max_number_of_results,
129
- log_text_filter,
197
+ source: LogSource,
198
+ before_offset: Optional[str],
199
+ after_offset: Optional[str],
200
+ max_number_of_results: Optional[int],
201
+ log_text_filter: Optional[str],
130
202
  ) -> ReadLogsResponse:
203
+ """
204
+ Low-level method to read logs from any source.
205
+
206
+ Args:
207
+ source: The log source to read from
208
+ before_offset: Optional offset to read logs before this point
209
+ after_offset: Optional offset to read logs after this point
210
+ max_number_of_results: Optional maximum number of log lines to return
211
+ log_text_filter: Optional text filter to search for in logs
212
+
213
+ Returns:
214
+ ReadLogsResponse containing the log lines
215
+ """
131
216
  response: ReadLogsResponse = self._logging_service.ReadLogs(
132
217
  ReadLogsRequest(
133
218
  source=source,
@@ -0,0 +1 @@
1
+ from .client import ModelDeploymentManagerClient
@@ -0,0 +1,103 @@
1
+ from dependency_injector.wiring import Provide
2
+ from frogml._proto.com.jfrog.ml.model.deployment.v1.deployment_pb2 import (
3
+ Deployment,
4
+ ModelDeploymentInformation,
5
+ MultipleEnvironmentDeployment,
6
+ )
7
+ from frogml._proto.com.jfrog.ml.model.deployment.v1.deployment_service_pb2 import (
8
+ DeploymentIds,
9
+ DeploymentIdToDeploymentSpecMap,
10
+ DeployModelRequest,
11
+ EditModelDeploymentRequest,
12
+ GetModelDeploymentResponse,
13
+ ListModelDeploymentsRequest,
14
+ ListModelDeploymentsResponse,
15
+ UndeployModelRequest,
16
+ )
17
+ from frogml._proto.com.jfrog.ml.model.deployment.v1.deployment_service_pb2_grpc import (
18
+ ModelDeploymentServiceStub,
19
+ )
20
+ from frogml._proto.com.jfrog.ml.model.deployment.v1.model_artifact_identifier_pb2 import (
21
+ ModelArtifactIdentifier,
22
+ ModelBasedArtifactIdentifier,
23
+ )
24
+ from frogml._proto.com.jfrog.ml.model.deployment.v1.model_deployment_brief_pb2 import (
25
+ ModelDeploymentBrief,
26
+ )
27
+ from frogml._proto.com.jfrog.ml.model.deployment.v1.model_deployment_filter_pb2 import (
28
+ ModelDeploymentFilter,
29
+ )
30
+ from frogml._proto.qwak.deployment.deployment_service_pb2 import GetDeploymentRequest
31
+ from frogml.core.inner.di_configuration import FrogmlContainer
32
+ from frogml.core.inner.tool.grpc.grpc_try_wrapping import grpc_try_catch_wrapper
33
+
34
+
35
+ class ModelDeploymentManagerClient:
36
+ def __init__(self, grpc_channel=Provide[FrogmlContainer.core_grpc_channel]):
37
+ self.__client = ModelDeploymentServiceStub(grpc_channel)
38
+
39
+ @grpc_try_catch_wrapper("Failed to deploy LLM for model {model_id}")
40
+ def deploy_llm(
41
+ self,
42
+ model_id: str,
43
+ model_group_id: str,
44
+ image_path: str,
45
+ environment_deployment_configuration: dict[str, Deployment],
46
+ ) -> None:
47
+ llm_model_identifier = ModelBasedArtifactIdentifier(
48
+ model_group_id=model_group_id,
49
+ model_id=model_id,
50
+ image_path=image_path,
51
+ )
52
+ model_artifact_identifier = ModelArtifactIdentifier(
53
+ model_based_artifact_id=llm_model_identifier
54
+ )
55
+ multiple_environment_deployment = MultipleEnvironmentDeployment(
56
+ model_artifact_identifier=model_artifact_identifier,
57
+ deployments=environment_deployment_configuration,
58
+ )
59
+ request = DeployModelRequest(
60
+ multiple_environment_deployment=multiple_environment_deployment
61
+ )
62
+
63
+ self.__client.DeployModel(request)
64
+
65
+ @grpc_try_catch_wrapper("Failed to undeploy")
66
+ def undeploy(self, deployment_ids: list[str]) -> None:
67
+ deployment_ids_proto = DeploymentIds(deployment_id=deployment_ids)
68
+ request = UndeployModelRequest(deployment_ids=deployment_ids_proto)
69
+ self.__client.UndeployModel(request)
70
+
71
+ @grpc_try_catch_wrapper("Failed to edit deployments")
72
+ def edit_deployments(
73
+ self, deployment_id_to_spec_map: dict[str, Deployment]
74
+ ) -> None:
75
+ deployments_map = DeploymentIdToDeploymentSpecMap(
76
+ deployments=deployment_id_to_spec_map
77
+ )
78
+ request = EditModelDeploymentRequest(
79
+ deployment_id_to_deployment_spec_map=deployments_map
80
+ )
81
+ self.__client.EditModelDeployment(request)
82
+
83
+ @grpc_try_catch_wrapper("Failed to list deployments")
84
+ def list_deployments(
85
+ self,
86
+ model_deployment_filter: ModelDeploymentFilter = None,
87
+ ) -> list[ModelDeploymentBrief]:
88
+ if model_deployment_filter is None:
89
+ model_deployment_filter = ModelDeploymentFilter()
90
+
91
+ request = ListModelDeploymentsRequest(
92
+ model_deployment_filter=model_deployment_filter
93
+ )
94
+ response: ListModelDeploymentsResponse = self.__client.ListModelDeployments(
95
+ request
96
+ )
97
+ return list(response.model_deployment_brief)
98
+
99
+ @grpc_try_catch_wrapper("Failed to get deployment with ID {deployment_id}")
100
+ def get_deployment(self, deployment_id: str) -> ModelDeploymentInformation:
101
+ request = GetDeploymentRequest(deployment_id=deployment_id)
102
+ response: GetModelDeploymentResponse = self.__client.GetModelDeployment(request)
103
+ return response.model_deployment_information
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: frogml
3
- Version: 1.2.35
3
+ Version: 1.2.41
4
4
  Summary: frogml 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,34 @@
1
- frogml/__init__.py,sha256=qCiP-lN6Bb32rwIiGrzBPQVv6qPplDfH17uU5IH8bIU,741
1
+ frogml/__init__.py,sha256=Iha2EFEpm8UEhQZulMOPWPSHZKElxWm4XT9dGhtHKck,741
2
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/auto_scaling_pb2.py,sha256=-SD6RYgn5DFBLlwTpH9YkV8aW_zYymBI68Y-12Fn0I0,4193
3
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/auto_scaling_pb2.pyi,sha256=s0rdjIYw_dOfmuentpri79ls5dC3NqoUq__-XeavaXE,9688
4
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/auto_scaling_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
5
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/deployment_pb2.py,sha256=c1cvdGhas7PyjFa_qWgp8cQBT9FJJatDXpLFaAVqbIo,6441
6
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/deployment_pb2.pyi,sha256=NMwN-k3r1Y3Z_2yrUvfTQvO0rywEMIsyXTpkroNy6X8,12950
7
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/deployment_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
8
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/deployment_service_pb2.py,sha256=MtpCW3ZPBYrpIhMC0XMJRCGDVpI-Ak_jeKQ9DGqYaUQ,6286
9
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/deployment_service_pb2.pyi,sha256=srnR6yTrjo8tnqAmnhxXEbf5EKD-dxMnfXZ-rABtmaY,9569
10
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/deployment_service_pb2_grpc.py,sha256=qvF_o89cqJ9Jz_nZs3n72p_pY2Bo75Sq99ObFsx4Nsw,11599
11
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/environment_variables_configuration_pb2.py,sha256=RPbECbR8DOWfq37aSYm4oWJhlVd-IWKGYEIhjmJ5VlU,2422
12
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/environment_variables_configuration_pb2.pyi,sha256=z3FDspmH0Bfd15x_KnzPDRvBdVbxCPxIz7ckC5wqJPM,3860
13
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/environment_variables_configuration_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
14
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/model_artifact_identifier_pb2.py,sha256=7TCaIZwY3cYX5JKUA1NR8WmkRH0CtLipi4kiaTjeL9E,2331
15
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/model_artifact_identifier_pb2.pyi,sha256=4FFrif0OZFR18xXKuEpZC7sibeKNMMXM49Y-J7VXyGA,4529
16
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/model_artifact_identifier_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
17
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/model_deployment_brief_pb2.py,sha256=r1nMzNPG0MktLtRPTFFif66qEHL0VGHuAoiM2ffXVlk,2306
18
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/model_deployment_brief_pb2.pyi,sha256=H-XA4wfh7t8PLYtfbPINIbWea43ubn8tbFdPN9IjLKs,2628
19
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/model_deployment_brief_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
20
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/model_deployment_filter_pb2.py,sha256=6qhYmErXArD2rOoKeqnlvjwC-6dJo8k0HUcTTMW4oQQ,3889
21
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/model_deployment_filter_pb2.pyi,sha256=gdxw9GSXh-Msfe0ifVSmER-7kHtcU3u0RNCjb93YY-Y,9804
22
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/model_deployment_filter_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
23
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/probes_configuration_pb2.py,sha256=xn_xW0y6JJ0TjyLaJBDVE7UwHO22tQr3nphz7xLGaSM,1833
24
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/probes_configuration_pb2.pyi,sha256=t_EkUDqnMHgXr0ft9IXyfYbIR4vXR3yGzVp-cG0P0G4,2578
25
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/probes_configuration_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
26
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/realtime_deployment_pb2.py,sha256=PhvTR0wld0M7fQFbmQ2vWplyHIDThaM_ZmVHNqcQBCc,1799
27
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/realtime_deployment_pb2.pyi,sha256=tGb_ZZJuwMWmfKBiONnhwxREuREmDpV0x4Ya4DQaqos,2234
28
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/realtime_deployment_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
29
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/resource_configuration_pb2.py,sha256=d3oCCHJywlvPD91GiTB_RveXoUhHyyJOkNJ5d5tGl58,1435
30
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/resource_configuration_pb2.pyi,sha256=FRhxd3AhNEICHElc8iv0gSnRH2zqmIw7Yd98tLWaR78,1253
31
+ frogml/_proto/com/jfrog/ml/model/deployment/v1/resource_configuration_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
2
32
  frogml/_proto/jfml/hosting_gateway/v1/build_upload_url_pb2.py,sha256=pY7-QarLJWbL9uNmZ69RfE7IPVzwpVIhtd3A0wztSNY,1942
3
33
  frogml/_proto/jfml/hosting_gateway/v1/build_upload_url_pb2.pyi,sha256=505I4uUrCmv2hsUw2H5eT-nlkNOCQOWodpvEkH2fHIo,3073
4
34
  frogml/_proto/jfml/hosting_gateway/v1/build_upload_url_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
@@ -530,8 +560,8 @@ frogml/_proto/qwak/logging/log_line_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHD
530
560
  frogml/_proto/qwak/logging/log_reader_service_pb2.py,sha256=mGzDgASTP_oJlVcPkId5JxjhpUbh7O_CQ9xbcQRUOXI,2561
531
561
  frogml/_proto/qwak/logging/log_reader_service_pb2.pyi,sha256=KdIIgfFCw0I-51d2dEMZy3zVgkGw4tZNF26WcR5yNz4,3451
532
562
  frogml/_proto/qwak/logging/log_reader_service_pb2_grpc.py,sha256=5iwiKKEWLCgNl6KyUanuUFpsg-159HgiF6ugMvGgW9k,2833
533
- frogml/_proto/qwak/logging/log_source_pb2.py,sha256=KfVCEihMIVtJ2vVMR0jdiFCUsdY9RDJ7YDBVyzps-fk,6170
534
- frogml/_proto/qwak/logging/log_source_pb2.pyi,sha256=YJ3xGWEgG4dF9CvsF_X1dBITgHMxs7IdkGsWQ4G0uNg,18672
563
+ frogml/_proto/qwak/logging/log_source_pb2.py,sha256=7wzXkpjxW6tEYJ-hZJ1s_7eB1G5m2K2_WEjL8NtyfqY,6971
564
+ frogml/_proto/qwak/logging/log_source_pb2.pyi,sha256=9ekSIfto3LP-e2pyVwHjx_ewbDxaHpQf_siyT4zdP_4,20017
535
565
  frogml/_proto/qwak/logging/log_source_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
536
566
  frogml/_proto/qwak/model_descriptor/open_ai_descriptor_pb2.py,sha256=-4tcS6KSdpUK3knQ9YUyQTsMcHFaPTQ3A8kHPOLVPSQ,4203
537
567
  frogml/_proto/qwak/model_descriptor/open_ai_descriptor_pb2.pyi,sha256=7ZaPgYKgRhZvq9LMaj7jWlQxKhQ9fRUDK86SaJvMuu0,11801
@@ -542,9 +572,9 @@ frogml/_proto/qwak/model_group/model_group_pb2_grpc.py,sha256=YgDt3DtagEdZ7UtxcP
542
572
  frogml/_proto/qwak/model_group/model_group_repository_details_pb2.py,sha256=BxaVjDayd9h5Va2ZId3pNPeJFAqVXb8TJHIWmYsURN4,3806
543
573
  frogml/_proto/qwak/model_group/model_group_repository_details_pb2.pyi,sha256=3oCsYmmfvBjGkA1nRcx2cg11WNr40uuR3gAWXC7Wz2I,7245
544
574
  frogml/_proto/qwak/model_group/model_group_repository_details_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
545
- frogml/_proto/qwak/models/models_pb2.py,sha256=XF3-e8xW62ymbg7xGRCwc4fNsgXV2UZJ1lPgv47Ylkk,19046
546
- frogml/_proto/qwak/models/models_pb2.pyi,sha256=m2NGA7K3Jz3YFp8nOW4l_AB5kgjJUEDmr3xMUPYu3Dc,42638
547
- frogml/_proto/qwak/models/models_pb2_grpc.py,sha256=iOfvU_txYazEBCR2rlFlD3BXLseuSjKzXqCcwfI60h4,23627
575
+ frogml/_proto/qwak/models/models_pb2.py,sha256=jtw5KSbMwX5q6NVhfA5eblpJIANVavURyYvmXYvFVr0,19427
576
+ frogml/_proto/qwak/models/models_pb2.pyi,sha256=c8e6l8fxCXXJmlyV9GSZ7PTThelw79sCYiEpMKaMRZE,43564
577
+ frogml/_proto/qwak/models/models_pb2_grpc.py,sha256=7HZ5RwIk9I0MOHMOvZhvPFq_UIKwVdjZ79N3h-dlk8o,25406
548
578
  frogml/_proto/qwak/models/models_query_pb2.py,sha256=ZDEx_w4JgAL1q2wNOq5qkXiO5DctBgVRWbjrpOmOzbo,2880
549
579
  frogml/_proto/qwak/models/models_query_pb2.pyi,sha256=JEWkO0TXbGD2uKElgZB6VNPfYoq99GQ3Nj3jHObBQ2s,7490
550
580
  frogml/_proto/qwak/models/models_query_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
@@ -656,7 +686,7 @@ frogml/core/clients/automation_management/client.py,sha256=Dk6SsZGMLaVDLLzvFBysL
656
686
  frogml/core/clients/autoscaling/__init__.py,sha256=A-zuZOWaZf16NjnpX38204m730c5Lde491KaXneGirE,38
657
687
  frogml/core/clients/autoscaling/client.py,sha256=d1BoUH4hBiqoSR6ZM2_Ds6H7gV9HZPM2IIYNDbjPGgY,1299
658
688
  frogml/core/clients/batch_job_management/__init__.py,sha256=zywxYf2JupkIWnGVB2C6ugZs5CrOdxTPrksD5P6uQu4,211
659
- frogml/core/clients/batch_job_management/client.py,sha256=yym_GRJlB2qWnFf58EK2i7iD4llSj3FwmjdmIEdBSRc,22621
689
+ frogml/core/clients/batch_job_management/client.py,sha256=TBN_9MkHXW342PLRepUckuQmA_gLPPrq5VavkkDtnCQ,22979
660
690
  frogml/core/clients/batch_job_management/executions_config.py,sha256=tyQbNiIAo3U4t_vyQp8nY17U0oQIyuE5GLW5WqhDxjA,7045
661
691
  frogml/core/clients/batch_job_management/results.py,sha256=nrFGZ3y538FBhej94CYV4cwqQssK1aUQOLGubYdQVrc,1846
662
692
  frogml/core/clients/build_orchestrator/__init__.py,sha256=ReW7Lbjws06MbVlCTRdsymDZiS2CKuczXIZ1xnPKSdg,105
@@ -691,7 +721,9 @@ frogml/core/clients/kube_deployment_captain/client.py,sha256=la4V7WsVL1z4zuLQtPZ
691
721
  frogml/core/clients/location_discovery/__init__.py,sha256=sqGQ75YHFE6nvOcir38fykUUmAa6cFEIze8PJYgYWRc,44
692
722
  frogml/core/clients/location_discovery/client.py,sha256=ZcBbbLqzZ9E7oLyamBTLTpp611LldhfFOSkzWroyIQg,2895
693
723
  frogml/core/clients/logging_client/__init__.py,sha256=1OCHnigQBYThBwGbxCreYA0BgP0HcuLFzNEWd3Yxh-c,34
694
- frogml/core/clients/logging_client/client.py,sha256=vq2Fv7UAEnrG910Npp1COxxWQ2_NWofbAStPkLhiz1w,4836
724
+ frogml/core/clients/logging_client/client.py,sha256=ZTRRPrcM2cqrZX9T3DvIr0YICrhDK91P4CDP-ei_ZjQ,8599
725
+ frogml/core/clients/model_deployment_manager/__init__.py,sha256=Kp6FTZzsXjvfoCLz8kurr7AIypRGIIdUek7_SBCt7f4,49
726
+ frogml/core/clients/model_deployment_manager/client.py,sha256=VLPgE3WDZOOg9y_mYZSKKYqVSi866vJipvAi5aOlDng,4135
695
727
  frogml/core/clients/model_group_management/__init__.py,sha256=f-nExP4vGWoWMUrRstY8QdtPqXnbsl2Ux0KfFkvGBkg,47
696
728
  frogml/core/clients/model_group_management/client.py,sha256=F8YCbfyphcljb8WxpeY7H7wnPpksyaKQ2ZOKi03RU6M,2016
697
729
  frogml/core/clients/model_management/__init__.py,sha256=vjWVP8MjmK4_A70WOgJqa6x24AeLK-ABjGJtogGzw9w,43
@@ -1123,7 +1155,7 @@ frogml_services_mock/mocks/features_operator_v3_service.py,sha256=v6XdUpiI5T5mog
1123
1155
  frogml_services_mock/mocks/features_set_state_service_api.py,sha256=YaF3X12gCFDKFYFUAH3ZsK2jjbxU1aYYyExwe-F1Zdg,2293
1124
1156
  frogml_services_mock/mocks/feedback_service.py,sha256=yHItKZnlrN75F7D2rIGVrffipRaBCyMIvxK5ZmMVckE,1142
1125
1157
  frogml_services_mock/mocks/file_versioning_service.py,sha256=PF_XyipSF5I8SfCNDYv298p3lMCizgDTZORlSuo4RYQ,2609
1126
- frogml_services_mock/mocks/frogml_mocks.py,sha256=KpIMhgwmboLM08vo6SYep9Vj_tnGL2GiBD2UGwGJjt0,6143
1158
+ frogml_services_mock/mocks/frogml_mocks.py,sha256=16-x7m3pHl9C51SbuVYwDWmBWv4vzEAwEjfykQaSlfM,6336
1127
1159
  frogml_services_mock/mocks/fs_offline_serving_service.py,sha256=rzxL_G8t3PIM-IFuchqkHuUUzlOZfiP5A5IMSeSQynA,2096
1128
1160
  frogml_services_mock/mocks/instance_template_management_service.py,sha256=AZ-QCzrx4d4g5E4XIPqFNhOJPBwb4S90mfVzsn6oNe4,4766
1129
1161
  frogml_services_mock/mocks/integration_management_service.py,sha256=cw45A8EadycTyq3Okx1sgcuWZ-Lz2iPMRin6f4e_0Ws,2775
@@ -1133,6 +1165,7 @@ frogml_services_mock/mocks/job_registry_service_api.py,sha256=gbytsg5mc5yjOYE_LP
1133
1165
  frogml_services_mock/mocks/kube_captain_service_api.py,sha256=0zRthbKSWeIl1qj16tqTg4jiTbUZoJRyPpEOXiESK2A,1598
1134
1166
  frogml_services_mock/mocks/location_discovery_service_api.py,sha256=i_alD-qEZ1SsIFgQew9gibGN47MrPhTfMqnxapJhTbo,3685
1135
1167
  frogml_services_mock/mocks/logging_service.py,sha256=-1FrXhGO5_NNUW7pzajTwGSf1soQC1feLuMwkOAXD7A,7389
1168
+ frogml_services_mock/mocks/model_deployment_manager_service_mock.py,sha256=83BtdT3FLhewmEjvqMLw7hrrKOxp_lLe_hlDIZ72ukI,9743
1136
1169
  frogml_services_mock/mocks/model_group_management_service.py,sha256=tEtBQPExusWI1NiigqEToSDIAforCP1DpVCGXiqfppc,1540
1137
1170
  frogml_services_mock/mocks/model_management_service.py,sha256=3byRc-8Fb5WnXTrWkHj1-S6RA2yfqK1yzX-7fqq_ZNk,4169
1138
1171
  frogml_services_mock/mocks/model_version_manager_service.py,sha256=XzRnAnn0VMY5hW8jP1ngWF-6OYIq8OgatZQ79JyxeMQ,3759
@@ -1144,9 +1177,9 @@ frogml_services_mock/mocks/system_secret_service.py,sha256=ceOR1nfQOGW4ZBcry4Q_l
1144
1177
  frogml_services_mock/mocks/user_application_instance_service_api.py,sha256=Es3s9MnutY0Qsd_FOq_ctKvT-3wHn7-fxah1fvr5Jv4,4100
1145
1178
  frogml_services_mock/mocks/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1146
1179
  frogml_services_mock/mocks/utils/exception_handlers.py,sha256=k_8mez3cwjNjKE9yGQRJUuK95qNQyk_slotIF08IIEE,308
1147
- frogml_services_mock/services_mock.py,sha256=y1_h189Ldu5MdVUW4nj-WMBtvUfkM_aKse7UfAb6Rxk,19419
1180
+ frogml_services_mock/services_mock.py,sha256=hciz4Q2NvjT84DE08sgxfVVDELfD4hitqgoDrZugcjg,19961
1148
1181
  frogml_services_mock/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1149
1182
  frogml_services_mock/utils/service_utils.py,sha256=ZlB0CnB1J6oBn6_m7fQO2U8tKoboHdUa6ljjkRMYNXU,265
1150
- frogml-1.2.35.dist-info/METADATA,sha256=VJC2cI-AIqs8Ut2FSG7oQQBYQsWpEWl39_C57crPn80,5599
1151
- frogml-1.2.35.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
1152
- frogml-1.2.35.dist-info/RECORD,,
1183
+ frogml-1.2.41.dist-info/METADATA,sha256=-RAwoyHVI5VO_IY9sSKBZXVs9EJzKAd6qIHhXxKdZIc,5599
1184
+ frogml-1.2.41.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
1185
+ frogml-1.2.41.dist-info/RECORD,,
@@ -56,7 +56,9 @@ from frogml_services_mock.mocks.integration_management_service import (
56
56
  from frogml_services_mock.mocks.internal_build_orchestrator_service import (
57
57
  InternalBuildOrchestratorServiceMock,
58
58
  )
59
- from frogml_services_mock.mocks.jfrog_tenant_info_service_mock import JFrogTenantInfoServiceMock
59
+ from frogml_services_mock.mocks.jfrog_tenant_info_service_mock import (
60
+ JFrogTenantInfoServiceMock,
61
+ )
60
62
  from frogml_services_mock.mocks.job_registry_service_api import (
61
63
  JobRegistryServiceApiMock,
62
64
  )
@@ -67,15 +69,20 @@ from frogml_services_mock.mocks.location_discovery_service_api import (
67
69
  LocationDiscoveryServiceApiMock,
68
70
  )
69
71
  from frogml_services_mock.mocks.logging_service import LoggingServiceApiMock
70
- from frogml_services_mock.mocks.model_group_management_service import ModelGroupManagementServiceMock
72
+ from frogml_services_mock.mocks.model_deployment_manager_service_mock import (
73
+ ModelDeploymentManagerMock,
74
+ )
75
+ from frogml_services_mock.mocks.model_group_management_service import (
76
+ ModelGroupManagementServiceMock,
77
+ )
71
78
  from frogml_services_mock.mocks.model_management_service import (
72
79
  ModelsManagementServiceMock,
73
80
  )
74
81
  from frogml_services_mock.mocks.model_version_manager_service import (
75
82
  ModelVersionManagerServiceMock,
76
83
  )
77
- from frogml_services_mock.mocks.repository_service_mock import RepositoryServiceMock
78
84
  from frogml_services_mock.mocks.project_manager_service import ProjectManagerServiceMock
85
+ from frogml_services_mock.mocks.repository_service_mock import RepositoryServiceMock
79
86
  from frogml_services_mock.mocks.secret_service import SecretServiceMock
80
87
  from frogml_services_mock.mocks.self_service_user_service import (
81
88
  SelfServiceUserServiceMock,
@@ -127,3 +134,4 @@ class FrogmlMocks:
127
134
  repository_service: RepositoryServiceMock
128
135
  location_discovery_service: LocationDiscoveryServiceApiMock
129
136
  jfrog_tenant_info_service: JFrogTenantInfoServiceMock
137
+ model_deployment_manager_mock: ModelDeploymentManagerMock