mlrun 1.10.0rc15__py3-none-any.whl → 1.10.0rc17__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.

Potentially problematic release.


This version of mlrun might be problematic. Click here for more details.

@@ -13,10 +13,10 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import random
16
- from copy import deepcopy
17
16
  from datetime import timedelta
18
17
  from typing import Any, Optional, Union
19
18
 
19
+ import numpy as np
20
20
  import storey
21
21
 
22
22
  import mlrun
@@ -24,7 +24,7 @@ import mlrun.artifacts
24
24
  import mlrun.common.schemas.model_monitoring as mm_schemas
25
25
  import mlrun.serving
26
26
  from mlrun.common.schemas import MonitoringData
27
- from mlrun.utils import logger
27
+ from mlrun.utils import get_data_from_path, logger
28
28
 
29
29
 
30
30
  class MonitoringPreProcessor(storey.MapClass):
@@ -45,24 +45,13 @@ class MonitoringPreProcessor(storey.MapClass):
45
45
  result_path = model_monitoring_data.get(MonitoringData.RESULT_PATH)
46
46
  input_path = model_monitoring_data.get(MonitoringData.INPUT_PATH)
47
47
 
48
- result = self._get_data_from_path(
49
- result_path, event.body.get(model, event.body)
50
- )
48
+ result = get_data_from_path(result_path, event.body.get(model, event.body))
51
49
  output_schema = model_monitoring_data.get(MonitoringData.OUTPUTS)
52
50
  input_schema = model_monitoring_data.get(MonitoringData.INPUTS)
53
51
  logger.debug("output schema retrieved", output_schema=output_schema)
54
52
  if isinstance(result, dict):
55
- if len(result) > 1:
56
- # transpose by key the outputs:
57
- outputs = self.transpose_by_key(result, output_schema)
58
- elif len(result) == 1:
59
- outputs = (
60
- result[output_schema[0]]
61
- if output_schema
62
- else list(result.values())[0]
63
- )
64
- else:
65
- outputs = []
53
+ # transpose by key the outputs:
54
+ outputs = self.transpose_by_key(result, output_schema)
66
55
  if not output_schema:
67
56
  logger.warn(
68
57
  "Output schema was not provided using Project:log_model or by ModelRunnerStep:add_model order "
@@ -72,16 +61,14 @@ class MonitoringPreProcessor(storey.MapClass):
72
61
  outputs = result
73
62
 
74
63
  event_inputs = event._metadata.get("inputs", {})
75
- event_inputs = self._get_data_from_path(input_path, event_inputs)
64
+ event_inputs = get_data_from_path(input_path, event_inputs)
76
65
  if isinstance(event_inputs, dict):
77
- if len(event_inputs) > 1:
78
- # transpose by key the inputs:
79
- inputs = self.transpose_by_key(event_inputs, input_schema)
80
- else:
81
- inputs = (
82
- event_inputs[input_schema[0]]
83
- if input_schema
84
- else list(result.values())[0]
66
+ # transpose by key the inputs:
67
+ inputs = self.transpose_by_key(event_inputs, input_schema)
68
+ if not input_schema:
69
+ logger.warn(
70
+ "Input schema was not provided using by ModelRunnerStep:add_model, order "
71
+ "may not preserved"
85
72
  )
86
73
  else:
87
74
  inputs = event_inputs
@@ -104,6 +91,11 @@ class MonitoringPreProcessor(storey.MapClass):
104
91
  output_len=len(outputs),
105
92
  schema_len=len(output_schema),
106
93
  )
94
+ if len(inputs) != len(outputs):
95
+ logger.warn(
96
+ "outputs and inputs are not in the same length check 'input_path' and "
97
+ "'output_path' was specified if needed"
98
+ )
107
99
  request = {"inputs": inputs, "id": getattr(event, "id", None)}
108
100
  resp = {"outputs": outputs}
109
101
 
@@ -111,41 +103,77 @@ class MonitoringPreProcessor(storey.MapClass):
111
103
 
112
104
  @staticmethod
113
105
  def transpose_by_key(
114
- data_to_transpose, schema: Optional[list[str]] = None
115
- ) -> list[list[float]]:
116
- values = (
117
- list(data_to_transpose.values())
118
- if not schema
119
- else [data_to_transpose[key] for key in schema]
120
- )
121
- if values and not isinstance(values[0], list):
122
- values = [values]
123
- transposed = (
124
- list(map(list, zip(*values)))
125
- if all(isinstance(v, list) for v in values) and len(values) > 1
126
- else values
127
- )
128
- return transposed
106
+ data: dict, schema: Optional[Union[str, list[str]]] = None
107
+ ) -> Union[list[Any], list[list[Any]]]:
108
+ """
109
+ Transpose values from a dictionary by keys.
129
110
 
130
- @staticmethod
131
- def _get_data_from_path(
132
- path: Union[str, list[str], None], data: dict
133
- ) -> dict[str, Any]:
134
- if isinstance(path, str):
135
- output_data = data.get(path)
136
- elif isinstance(path, list):
137
- output_data = deepcopy(data)
138
- for key in path:
139
- output_data = output_data.get(key, {})
140
- elif path is None:
141
- output_data = data
111
+ Given a dictionary and an optional schema (a key or list of keys), this function:
112
+ - Extracts the values for the specified keys (or all keys if no schema is provided).
113
+ - Ensures the data is represented as a list of rows, then transposes it (i.e., switches rows to columns).
114
+ - Handles edge cases:
115
+ * If a single scalar or single-element list is provided, returns a flat list.
116
+ * If a single key is provided (as a string or a list with one element), handles it properly.
117
+ * If only one row with len of one remains after transposition, unwraps it to avoid nested list-of-one.
118
+
119
+ Example::
120
+
121
+ transpose_by_key({"a": 1})
122
+ # returns: [1]
123
+
124
+ transpose_by_key({"a": [1, 2]})
125
+ # returns: [1 ,2]
126
+
127
+ transpose_by_key({"a": [1, 2], "b": [3, 4]})
128
+ # returns: [[1, 3], [2, 4]]
129
+
130
+ :param data: Dictionary with values that are either scalars or lists.
131
+ :param schema: Optional key or list of keys to extract. If not provided, all keys are used.
132
+ Can be a string (single key) or a list of strings.
133
+
134
+ :return: Transposed values:
135
+ * If result is a single column or row, returns a flat list.
136
+ * If result is a matrix, returns a list of lists.
137
+
138
+ :raises ValueError: If the values include a mix of scalars and lists, or if the list lengths do not match.
139
+ """
140
+
141
+ # Normalize schema to list
142
+ if not schema:
143
+ keys = list(data.keys())
144
+ elif isinstance(schema, str):
145
+ keys = [schema]
142
146
  else:
143
- raise mlrun.errors.MLRunInvalidArgumentError(
144
- "Expected path be of type str or list of str or None"
147
+ keys = schema
148
+
149
+ values = [data[key] for key in keys if key in data]
150
+ if len(values) != len(keys):
151
+ raise mlrun.MLRunInvalidArgumentError(
152
+ f"Schema keys {keys} do not match the data keys {list(data.keys())}."
153
+ )
154
+
155
+ # Detect if all are scalars ie: int,float,str
156
+ all_scalars = all(not isinstance(v, (list, tuple, np.ndarray)) for v in values)
157
+ all_lists = all(isinstance(v, (list, tuple, np.ndarray)) for v in values)
158
+
159
+ if not (all_scalars or all_lists):
160
+ raise ValueError(
161
+ "All values must be either scalars or lists of equal length."
145
162
  )
146
- if isinstance(output_data, (int, float)):
147
- output_data = [output_data]
148
- return output_data
163
+
164
+ if all_scalars:
165
+ transposed = np.array([values], dtype=object)
166
+ elif all_lists and len(keys) > 1:
167
+ arrays = [np.array(v, dtype=object) for v in values]
168
+ mat = np.stack(arrays, axis=0)
169
+ transposed = mat.T
170
+ else:
171
+ return values[0]
172
+
173
+ if transposed.shape[1] == 1 and transposed.shape[0] == 1:
174
+ # Transform [[0]] -> [0]:
175
+ return transposed[:, 0].tolist()
176
+ return transposed.tolist()
149
177
 
150
178
  def do(self, event):
151
179
  monitoring_event_list = []
@@ -168,6 +196,12 @@ class MonitoringPreProcessor(storey.MapClass):
168
196
  request, resp = self.reconstruct_request_resp_fields(
169
197
  event, model, monitoring_data[model]
170
198
  )
199
+ if hasattr(event, "_original_timestamp"):
200
+ when = event._original_timestamp
201
+ else:
202
+ when = event._metadata.get(model, {}).get(
203
+ mm_schemas.StreamProcessingEvent.WHEN
204
+ )
171
205
  monitoring_event_list.append(
172
206
  {
173
207
  mm_schemas.StreamProcessingEvent.MODEL: model,
@@ -177,9 +211,7 @@ class MonitoringPreProcessor(storey.MapClass):
177
211
  mm_schemas.StreamProcessingEvent.MICROSEC: event._metadata.get(
178
212
  model, {}
179
213
  ).get(mm_schemas.StreamProcessingEvent.MICROSEC),
180
- mm_schemas.StreamProcessingEvent.WHEN: event._metadata.get(
181
- model, {}
182
- ).get(mm_schemas.StreamProcessingEvent.WHEN),
214
+ mm_schemas.StreamProcessingEvent.WHEN: when,
183
215
  mm_schemas.StreamProcessingEvent.ENDPOINT_ID: monitoring_data[
184
216
  model
185
217
  ].get(
@@ -212,6 +244,10 @@ class MonitoringPreProcessor(storey.MapClass):
212
244
  request, resp = self.reconstruct_request_resp_fields(
213
245
  event, model, monitoring_data[model]
214
246
  )
247
+ if hasattr(event, "_original_timestamp"):
248
+ when = event._original_timestamp
249
+ else:
250
+ when = event._metadata.get(mm_schemas.StreamProcessingEvent.WHEN)
215
251
  monitoring_event_list.append(
216
252
  {
217
253
  mm_schemas.StreamProcessingEvent.MODEL: model,
@@ -221,9 +257,7 @@ class MonitoringPreProcessor(storey.MapClass):
221
257
  mm_schemas.StreamProcessingEvent.MICROSEC: event._metadata.get(
222
258
  mm_schemas.StreamProcessingEvent.MICROSEC
223
259
  ),
224
- mm_schemas.StreamProcessingEvent.WHEN: event._metadata.get(
225
- mm_schemas.StreamProcessingEvent.WHEN
226
- ),
260
+ mm_schemas.StreamProcessingEvent.WHEN: when,
227
261
  mm_schemas.StreamProcessingEvent.ENDPOINT_ID: monitoring_data[
228
262
  model
229
263
  ].get(mlrun.common.schemas.MonitoringData.MODEL_ENDPOINT_UID),
@@ -337,7 +371,9 @@ class SamplingStep(storey.MapClass):
337
371
  event=event,
338
372
  sampling_percentage=self.sampling_percentage,
339
373
  )
340
- if self.sampling_percentage != 100:
374
+ if self.sampling_percentage != 100 and not event.get(
375
+ mm_schemas.StreamProcessingEvent.ERROR
376
+ ):
341
377
  request = event[mm_schemas.StreamProcessingEvent.REQUEST]
342
378
  num_of_inputs = len(request["inputs"])
343
379
  sampled_requests_indices = self._pick_random_requests(
mlrun/utils/helpers.py CHANGED
@@ -29,6 +29,7 @@ import traceback
29
29
  import typing
30
30
  import uuid
31
31
  import warnings
32
+ from copy import deepcopy
32
33
  from datetime import datetime, timedelta, timezone
33
34
  from importlib import import_module, reload
34
35
  from os import path
@@ -786,6 +787,22 @@ def generate_artifact_uri(
786
787
  return artifact_uri
787
788
 
788
789
 
790
+ def remove_tag_from_artifact_uri(uri: str) -> Optional[str]:
791
+ """
792
+ Remove the `:<tag>` part from a URI with pattern:
793
+ [store://][<project>/]<key>[#<iter>][:<tag>][@<tree>][^<uid>]
794
+
795
+ Returns the URI without the tag section.
796
+
797
+ Examples:
798
+ "store://proj/key:latest" => "store://proj/key"
799
+ "key#1:dev@tree^uid" => "key#1@tree^uid"
800
+ "store://key:tag" => "store://key"
801
+ "store://models/remote-model-project/my_model#0@tree" => unchanged (no tag)
802
+ """
803
+ return re.sub(r"(?<=/[^/:]\+):[^@^:\s]+(?=(@|\^|$))", "", uri)
804
+
805
+
789
806
  def extend_hub_uri_if_needed(uri) -> tuple[str, bool]:
790
807
  """
791
808
  Retrieve the full uri of the item's yaml in the hub.
@@ -2376,3 +2393,32 @@ def encode_user_code(
2376
2393
  "Consider using `with_source_archive` to add user code as a remote source to the function."
2377
2394
  )
2378
2395
  return encoded
2396
+
2397
+
2398
+ def split_path(path: str) -> typing.Union[str, list[str], None]:
2399
+ if path is not None:
2400
+ parsed_path = path.split(".")
2401
+ if len(parsed_path) == 1:
2402
+ parsed_path = parsed_path[0]
2403
+ return parsed_path
2404
+ return path
2405
+
2406
+
2407
+ def get_data_from_path(
2408
+ path: typing.Union[str, list[str], None], data: dict
2409
+ ) -> dict[str, Any]:
2410
+ if isinstance(path, str):
2411
+ output_data = data.get(path)
2412
+ elif isinstance(path, list):
2413
+ output_data = deepcopy(data)
2414
+ for key in path:
2415
+ output_data = output_data.get(key, {})
2416
+ elif path is None:
2417
+ output_data = data
2418
+ else:
2419
+ raise mlrun.errors.MLRunInvalidArgumentError(
2420
+ "Expected path be of type str or list of str or None"
2421
+ )
2422
+ if isinstance(output_data, (int, float)):
2423
+ output_data = [output_data]
2424
+ return output_data
@@ -1,4 +1,4 @@
1
1
  {
2
- "git_commit": "ab4eba87d14deb67eed3b45e18965920951d7993",
3
- "version": "1.10.0-rc15"
2
+ "git_commit": "2e72ac795fbd5a2a1422956417d742f8dd9bcdb5",
3
+ "version": "1.10.0-rc17"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mlrun
3
- Version: 1.10.0rc15
3
+ Version: 1.10.0rc17
4
4
  Summary: Tracking and config of machine learning runs
5
5
  Home-page: https://github.com/mlrun/mlrun
6
6
  Author: Yaron Haviv
@@ -1,6 +1,6 @@
1
1
  mlrun/__init__.py,sha256=Y_AFhZV1hEx4vfiO-cyjup0aLGcp6R0SeL75GqLFQrc,7514
2
2
  mlrun/__main__.py,sha256=wQNaxW7QsqFBtWffnPkw-497fnpsrQzUnscBQQAP_UM,48364
3
- mlrun/config.py,sha256=_-WgQPZeSbvd51ndG9qFAaV6TXdDaEgZa9W9B0Imvq8,72399
3
+ mlrun/config.py,sha256=c3F899B20Xe_wpO7cg9G5jEM7iMxfK92LaNxPKnQTyg,72306
4
4
  mlrun/errors.py,sha256=bAk0t_qmCxQSPNK0TugOAfA5R6f0G6OYvEvXUWSJ_5U,9062
5
5
  mlrun/execution.py,sha256=dJ4PFwg5AlDHbCL2Q9dVDjWA_i64UTq2qBiF8kTU9tw,56922
6
6
  mlrun/features.py,sha256=jMEXo6NB36A6iaxNEJWzdtYwUmglYD90OIKTIEeWhE8,15841
@@ -18,12 +18,12 @@ mlrun/artifacts/base.py,sha256=6x_2KPMNOciiNNUsiKgJ-b6ejxAHm_Ro22xODLoTc44,28559
18
18
  mlrun/artifacts/dataset.py,sha256=bhb5Kfbs8P28yjnpN76th5lLEUl5nAqD4VqVzHEVPrM,16421
19
19
  mlrun/artifacts/document.py,sha256=p5HsWdmIIJ0NahS7y3EEQN2tfHtUrUmUG-8BEEyi_Jc,17373
20
20
  mlrun/artifacts/helpers.py,sha256=ejTEC9vkI2w5FHn5Gopw3VEIxuni0bazWUnR6BBWZfU,1662
21
- mlrun/artifacts/llm_prompt.py,sha256=uP_uq-SpbVs9uV9fFG3yF9e_X4XuXYt_EHAu4feaBfQ,9414
21
+ mlrun/artifacts/llm_prompt.py,sha256=mwImD34RAXp2lC5YEUfjD_iwuQr705ZjOHbDtMh4JVI,9555
22
22
  mlrun/artifacts/manager.py,sha256=_cDNCS7wwmFIsucJ2uOgHxZQECmIGb8Wye64b6oLgKU,16642
23
23
  mlrun/artifacts/model.py,sha256=8EVaD70SOkTohQIWqkDk0MEwskdofxs3wJTgspa2sho,25615
24
24
  mlrun/artifacts/plots.py,sha256=wmaxVXiAPSCyn3M7pIlcBu9pP3O8lrq0Ewx6iHRDF9s,4238
25
25
  mlrun/common/__init__.py,sha256=kXGBqhLN0rlAx0kTXhozGzFsIdSqW0uTSKMmsLgq_is,569
26
- mlrun/common/constants.py,sha256=tWqaog0fe3ZU6sIGToB8Joo7AY_3QjpnxA2GkiiAtj8,4033
26
+ mlrun/common/constants.py,sha256=BDxV8kAAf8D2W-gsa7IP8HJe5da-sPwVUfiodQ1O7kI,4127
27
27
  mlrun/common/helpers.py,sha256=DIdqs_eN3gO5bZ8iFobIvx8cEiOxYxhFIyut6-O69T0,1385
28
28
  mlrun/common/secrets.py,sha256=8g9xtIw-9DGcwiZRT62a5ozSQM-aYo8yK5Ghey9WM0g,5179
29
29
  mlrun/common/types.py,sha256=1gxThbmC0Vd0U1ffIkEwz4T4S7JOgHt70rvw8TCO21c,1073
@@ -41,7 +41,7 @@ mlrun/common/formatters/run.py,sha256=LlqhhVY4dAp5y17k_sWBtHaJogdNdtJWF0iO9sX-bU
41
41
  mlrun/common/model_monitoring/__init__.py,sha256=kXGBqhLN0rlAx0kTXhozGzFsIdSqW0uTSKMmsLgq_is,569
42
42
  mlrun/common/model_monitoring/helpers.py,sha256=AkuHz4u318MEP4ebxmNWlNXh6HiNLrI5oF7QvJiJkYc,2707
43
43
  mlrun/common/runtimes/constants.py,sha256=CGMHE2gdsNHXNsa-u3eL0o8sQmDs6PN5FLpMlCDClns,12218
44
- mlrun/common/schemas/__init__.py,sha256=Mx_N6UtivKP-FQeIvVu6n0unkT7w461lahyNJbaOL_I,5468
44
+ mlrun/common/schemas/__init__.py,sha256=HbnF4nd6jIGbej9Qj6WYjajIr44f3vYNpgWyeLk7N6I,5486
45
45
  mlrun/common/schemas/alert.py,sha256=u6INAHBhQIfm-mMsGqDJo1_JDN6gOuWZa-8fOU-aOUE,10182
46
46
  mlrun/common/schemas/api_gateway.py,sha256=bgC3vXbyb1SVwsSZkLXtEoQLCe_QDKpIhAVX3X_HWW4,7126
47
47
  mlrun/common/schemas/artifact.py,sha256=JojMRRa4n0Rge2olGOpUyp348hkTGsMEnvUBRSoo4oE,4310
@@ -71,11 +71,11 @@ mlrun/common/schemas/runs.py,sha256=yKY29ByTS4SruWQyPpDNFGulMrcT9Ms-3lnwBUDp3us,
71
71
  mlrun/common/schemas/runtime_resource.py,sha256=TybJmCHJXmm1z3s5J1dd89TeFE6lG5t7vjcrf1R9YfE,1568
72
72
  mlrun/common/schemas/schedule.py,sha256=L7z9Lp06-xmFmdp0q5PypCU_DCl6zZIyQTVoJa01gfM,4291
73
73
  mlrun/common/schemas/secret.py,sha256=Td2UAeWHSAdA4nIP3rQv_PIVKVqcBnCnK6xjr528tS8,1486
74
- mlrun/common/schemas/serving.py,sha256=-3U45YLtmVWMZrx4R8kaPgFGoJ4JmD7RE3nydpYNTz8,1359
74
+ mlrun/common/schemas/serving.py,sha256=4ek9JZDagkdeXyfkX6P6xp4deUNSf_kqXUaXcKSuv-g,1391
75
75
  mlrun/common/schemas/tag.py,sha256=1wqEiAujsElojWb3qmuyfcaLFjXSNAAQdafkDx7fkn0,891
76
- mlrun/common/schemas/workflow.py,sha256=4KeTUIZCkIgEIKNDbMeJqyhUmIKvLdX1bQSNsmYMCwg,2378
77
- mlrun/common/schemas/model_monitoring/__init__.py,sha256=lQkWiDZagEmZd7pNE_-ySVJEzTjEzH-JS6OKZPmJiVk,1907
78
- mlrun/common/schemas/model_monitoring/constants.py,sha256=yjTaSGiRs0zYIE20QSuJuMNnS5iuJpnV1wBiq7leVpg,13238
76
+ mlrun/common/schemas/workflow.py,sha256=Y-FHJnxs5c86yetuOAPdEJPkne__tLPCxjSXSb4lrjo,2541
77
+ mlrun/common/schemas/model_monitoring/__init__.py,sha256=FqFiFIDcylquQdY0XTBamB5kMzMrMFEpVYM_ecsVfLg,1925
78
+ mlrun/common/schemas/model_monitoring/constants.py,sha256=spujh8a2GOb7pm8LksAQwndxPWSsjeyRub3ZVICdgNI,13685
79
79
  mlrun/common/schemas/model_monitoring/functions.py,sha256=GpfSGp05D87wEKemECD3USL368pvnAM2WfS-nef5qOg,2210
80
80
  mlrun/common/schemas/model_monitoring/grafana.py,sha256=THQlLfPBevBksta8p5OaIsBaJtsNSXexLvHrDxOaVns,2095
81
81
  mlrun/common/schemas/model_monitoring/model_endpoints.py,sha256=aCrVqgoJsUEwvDJ84YFabDSy78CHcVBV3b0RdWj4JUw,13250
@@ -115,10 +115,10 @@ mlrun/datastore/wasbfs/__init__.py,sha256=s5Ul-0kAhYqFjKDR2X0O2vDGDbLQQduElb32Ev
115
115
  mlrun/datastore/wasbfs/fs.py,sha256=ge8NK__5vTcFT-krI155_8RDUywQw4SIRX6BWATXy9Q,6299
116
116
  mlrun/db/__init__.py,sha256=WqJ4x8lqJ7ZoKbhEyFqkYADd9P6E3citckx9e9ZLcIU,1163
117
117
  mlrun/db/auth_utils.py,sha256=hpg8D2r82oN0BWabuWN04BTNZ7jYMAF242YSUpK7LFM,5211
118
- mlrun/db/base.py,sha256=NZE8LoDOmwPCr1LGY9hX_2knpNVJluS0QZghi-m49YQ,31903
118
+ mlrun/db/base.py,sha256=QUncUfRYep_2Bsui7y-DduAEm8qdgIlWIYmrns-S7HA,32110
119
119
  mlrun/db/factory.py,sha256=yP2vVmveUE7LYTCHbS6lQIxP9rW--zdISWuPd_I3d_4,2111
120
- mlrun/db/httpdb.py,sha256=W31bjXQeN7U5r1eXRxHSRJFIS3jZAVo50ycaFh9mgog,238177
121
- mlrun/db/nopdb.py,sha256=xWmaw--A1t6zFGX7o7bkIfom5FZpv80vx5V3w-a0P5o,28073
120
+ mlrun/db/httpdb.py,sha256=oSzc4zigDgu9S2Vs7Lkz_NY1Oc78OGyHN-xeV19nVtk,239397
121
+ mlrun/db/nopdb.py,sha256=kRWKEEI9LUskI3mp2ofTdAWVLov-99-nSMdaqhi3XT8,28194
122
122
  mlrun/feature_store/__init__.py,sha256=SlI845bWt6xX34SXunHHqhmFAR9-5v2ak8N-qpcAPGo,1328
123
123
  mlrun/feature_store/api.py,sha256=qKj5Tk6prTab6XWatWhBuPRVp0eJEctoxRMN2wz48vA,32168
124
124
  mlrun/feature_store/common.py,sha256=JlQA7XWkg9fLuw7cXFmWpUneQqM3NBhwv7DU_xlenWI,12819
@@ -222,14 +222,14 @@ mlrun/launcher/__init__.py,sha256=JL8qkT1lLr1YvW6iP0hmwDTaSR2RfrMDx0-1gWRhTOE,57
222
222
  mlrun/launcher/base.py,sha256=6T17geeplFgYL2Suu4xo5crN_s9JETtr1m0ael8dIYk,17225
223
223
  mlrun/launcher/client.py,sha256=cl40ZdF2fU1QbUKdl4Xnucb1u2h-8_dn095qIUyxbuM,6402
224
224
  mlrun/launcher/factory.py,sha256=RW7mfzEFi8fR0M-4W1JQg1iq3_muUU6OTqT_3l4Ubrk,2338
225
- mlrun/launcher/local.py,sha256=4SHY8d8p-nWWMeFywgBb_uzyct8GFyVMW3ysIvHGPVU,11724
225
+ mlrun/launcher/local.py,sha256=3gv-IQYoIChSmRaZ0vLUh0Tu26oLMCx9GbBYh4fWygQ,12161
226
226
  mlrun/launcher/remote.py,sha256=zFXE52Cq_7EkC8lfNKT0ceIbye0CfFiundF7O1YU4Xw,7810
227
227
  mlrun/model_monitoring/__init__.py,sha256=qDQnncjya9XPTlfvGyfWsZWiXc-glGZrrNja-5QmCZk,782
228
228
  mlrun/model_monitoring/api.py,sha256=lAsUp-gzqw8D1cpHVGA2_nPMYn5R4jdxk9UaGOiQ8fE,25945
229
- mlrun/model_monitoring/controller.py,sha256=CQxK9Sq5k8XonvVBQnSimakpTwMMAyqT5mOaG534MaM,37660
229
+ mlrun/model_monitoring/controller.py,sha256=FVckATzREAzldj68D1KxcnKSdilgKUDRdqhRUf9XpWU,39592
230
230
  mlrun/model_monitoring/features_drift_table.py,sha256=c6GpKtpOJbuT1u5uMWDL_S-6N4YPOmlktWMqPme3KFY,25308
231
231
  mlrun/model_monitoring/helpers.py,sha256=0xhIYKzhaBrgyjLiA_ekCZsXzi3GBXpLyG40Bhj-PTY,23596
232
- mlrun/model_monitoring/stream_processing.py,sha256=Gu3TQzYoNjbreZYI73-F49QpYrod9RZOyGSgininBsA,33373
232
+ mlrun/model_monitoring/stream_processing.py,sha256=Mzn9Pelcblw8UzOFLGKb9oXOX0tkP2aoPcFbjtfHhcA,34247
233
233
  mlrun/model_monitoring/writer.py,sha256=rGRFzSOkqZWvD3Y6sVk2H1Gepfnkzkp9ce00PsApTLo,8288
234
234
  mlrun/model_monitoring/applications/__init__.py,sha256=MaH_n4GiqqQvSkntM5yQ7_FCANtM_IfgK-IJTdo4G_E,757
235
235
  mlrun/model_monitoring/applications/_application_steps.py,sha256=t9LDIqQUGE10cyjyhlg0QqN1yVx0apD1HpERYLJfm8U,7409
@@ -276,8 +276,8 @@ mlrun/platforms/__init__.py,sha256=ZuyeHCHHUxYEoZRmaJqzFSfwhaTyUdBZXMeVp75ql1w,3
276
276
  mlrun/platforms/iguazio.py,sha256=6VBTq8eQ3mzT96tzjYhAtcMQ2VjF4x8LpIPW5DAcX2Q,13749
277
277
  mlrun/projects/__init__.py,sha256=hdCOA6_fp8X4qGGGT7Bj7sPbkM1PayWuaVZL0DkpuZw,1240
278
278
  mlrun/projects/operations.py,sha256=Rc__P5ucNAY2G-lHc2LrnZs15PUbNFt8-NqNNT2Bjpk,20623
279
- mlrun/projects/pipelines.py,sha256=kY5BUHAjNri-9KjWZiCZ9Wo5XwZFqpvqctWy5j8va60,51611
280
- mlrun/projects/project.py,sha256=FabJ7Eq19PBmlGMv0Rg1XimqJdpciK_cNrkAlzDyvHs,253966
279
+ mlrun/projects/pipelines.py,sha256=nGDzBABEOqoe9sWbax4SfF8CVLgrvK0NLWBadzEthVE,52219
280
+ mlrun/projects/project.py,sha256=a75Sj1lYzWNggTXIKxerSwy52YqNciGvrT2k-ddRmkQ,254149
281
281
  mlrun/runtimes/__init__.py,sha256=8cqrYKy1a0_87XG7V_p96untQ4t8RocadM4LVEEN1JM,9029
282
282
  mlrun/runtimes/base.py,sha256=FVEooeQMpwxIK2iW1R0FNbC5P1sZ_efKtJcsdNSYNmc,38266
283
283
  mlrun/runtimes/daskjob.py,sha256=kR5sDQtXtXY_VGn5Y3mapjEEB5P6Lj30pSrPe1DqsAg,20077
@@ -289,7 +289,7 @@ mlrun/runtimes/local.py,sha256=R72VdrXnFdAhLsKJiWPOcfsi4jS-W5E1FnkT2Xllt8M,22150
289
289
  mlrun/runtimes/mounts.py,sha256=2dkoktm3TXHe4XHmRhvC0UfvWzq2vy_13MeaW7wgyPo,18735
290
290
  mlrun/runtimes/pod.py,sha256=AlA8B8OhyhZyP-C8Gvik_RxoVZsGSXgA7kZado82AQo,52253
291
291
  mlrun/runtimes/remotesparkjob.py,sha256=BalAea66GleaKeoYTw6ZL1Qr4wf1yRxfgk1-Fkc9Pqg,7864
292
- mlrun/runtimes/utils.py,sha256=VFKA7dWuILAcJGia_7Pw_zBBG00wZlat7o2N6u5EItw,16284
292
+ mlrun/runtimes/utils.py,sha256=ofHEOPiMVpQmgxnDhzpHoXBIS97q7QVHiN-UxVSMZkQ,16158
293
293
  mlrun/runtimes/databricks_job/__init__.py,sha256=kXGBqhLN0rlAx0kTXhozGzFsIdSqW0uTSKMmsLgq_is,569
294
294
  mlrun/runtimes/databricks_job/databricks_cancel_task.py,sha256=ufjcLKA5E6FSDF5CXm5l8uP_mUSFppwr5krLHln1kAU,2243
295
295
  mlrun/runtimes/databricks_job/databricks_runtime.py,sha256=ceX0umkNMHvxuXZic4QulWOfJyhPKHVo3T-oPhKTO8Y,12874
@@ -311,10 +311,10 @@ mlrun/serving/__init__.py,sha256=nriJAcVn5aatwU03T7SsE6ngJEGTxr3wIGt4WuvCCzY,139
311
311
  mlrun/serving/merger.py,sha256=pfOQoozUyObCTpqXAMk94PmhZefn4bBrKufO3MKnkAc,6193
312
312
  mlrun/serving/remote.py,sha256=Igha2FipK3-6rV_PZ1K464kTbiTu8rhc6SMm-HiEJ6o,18817
313
313
  mlrun/serving/routers.py,sha256=SmBOlHn7rT2gWTa-W8f16UB0UthgIFc4D1cPOZAA9ss,54003
314
- mlrun/serving/server.py,sha256=LnnJsjPOh50p5rEPPgvWSP_UQ89JE75q7MbpvdJ1U6c,35221
314
+ mlrun/serving/server.py,sha256=_P_SR4_7YKqruVzzDHgSPHWlNLGPG5-ksSUwuGhnmjg,38851
315
315
  mlrun/serving/serving_wrapper.py,sha256=UL9hhWCfMPcTJO_XrkvNaFvck1U1E7oS8trTZyak0cA,835
316
- mlrun/serving/states.py,sha256=C7A6ziq3XzXzBqLRTSXP2W372PgNe0AptX6qmOwGs-g,120783
317
- mlrun/serving/system_steps.py,sha256=9AqSQwv6nVljGKZoWJbksnuqsl3VqETcytEwjEVLmA4,16446
316
+ mlrun/serving/states.py,sha256=nrwQcWC0q6A6xFSvTWvaDmtSVgv8Fva9TxCuBHGwZHs,124062
317
+ mlrun/serving/system_steps.py,sha256=tCxkJ54peOzRTMaqvHQCbcwx0ITqZkSpGXbtpRUEfzU,18463
318
318
  mlrun/serving/utils.py,sha256=Zbfqm8TKNcTE8zRBezVBzpvR2WKeKeIRN7otNIaiYEc,4170
319
319
  mlrun/serving/v1_serving.py,sha256=c6J_MtpE-Tqu00-6r4eJOCO6rUasHDal9W2eBIcrl50,11853
320
320
  mlrun/serving/v2_serving.py,sha256=257LVOvWxV0KjeY0-Kxro6YgKmPu2QzNne2IORlXi5E,25434
@@ -328,7 +328,7 @@ mlrun/utils/async_http.py,sha256=8Olx8TNNeXB07nEGwlqhEgFgnFAD71vBU_bqaA9JW-w,122
328
328
  mlrun/utils/azure_vault.py,sha256=IEFizrDGDbAaoWwDr1WoA88S_EZ0T--vjYtY-i0cvYQ,3450
329
329
  mlrun/utils/clones.py,sha256=qbAGyEbSvlewn3Tw_DpQZP9z6MGzFhSaZfI1CblX8Fg,7515
330
330
  mlrun/utils/condition_evaluator.py,sha256=-nGfRmZzivn01rHTroiGY4rqEv8T1irMyhzxEei-sKc,1897
331
- mlrun/utils/helpers.py,sha256=HWmSA-5iPt6cduq6DPtYwZJLksnfDj_YSc0kGmRzoxE,80974
331
+ mlrun/utils/helpers.py,sha256=ympa9GWzF_NMNemKSas29s8I0-2seHGhfErFT1b-6tY,82419
332
332
  mlrun/utils/http.py,sha256=5ZU2VpokaUM_DT3HBSqTm8xjUqTPjZN5fKkSIvKlTl0,8704
333
333
  mlrun/utils/logger.py,sha256=RG0m1rx6gfkJ-2C1r_p41MMpPiaDYqaYM2lYHDlNZEU,14767
334
334
  mlrun/utils/regex.py,sha256=FcRwWD8x9X3HLhCCU2F0AVKTFah784Pr7ZAe3a02jw8,5199
@@ -347,11 +347,11 @@ mlrun/utils/notifications/notification/mail.py,sha256=ZyJ3eqd8simxffQmXzqd3bgbAq
347
347
  mlrun/utils/notifications/notification/slack.py,sha256=kfhogR5keR7Zjh0VCjJNK3NR5_yXT7Cv-x9GdOUW4Z8,7294
348
348
  mlrun/utils/notifications/notification/webhook.py,sha256=zxh8CAlbPnTazsk6r05X5TKwqUZVOH5KBU2fJbzQlG4,5330
349
349
  mlrun/utils/version/__init__.py,sha256=YnzE6tlf24uOQ8y7Z7l96QLAI6-QEii7-77g8ynmzy0,613
350
- mlrun/utils/version/version.json,sha256=smDmVYLs66w3gRDkSXNYS-ogEoZt0cnZOIMpDT7DVK4,90
350
+ mlrun/utils/version/version.json,sha256=V37lX2OyNEzNPMQsoXG-KqHjDgxsQv-dFqRr2AHbFCk,90
351
351
  mlrun/utils/version/version.py,sha256=M2hVhRrgkN3SxacZHs3ZqaOsqAA7B6a22ne324IQ1HE,1877
352
- mlrun-1.10.0rc15.dist-info/licenses/LICENSE,sha256=zTiv1CxWNkOk1q8eJS1G_8oD4gWpWLwWxj_Agcsi8Os,11337
353
- mlrun-1.10.0rc15.dist-info/METADATA,sha256=Vg4ywmTMJAwY8dH__8d4KxE0XJiaExXtqZygOggFAoo,26195
354
- mlrun-1.10.0rc15.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
355
- mlrun-1.10.0rc15.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
356
- mlrun-1.10.0rc15.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
357
- mlrun-1.10.0rc15.dist-info/RECORD,,
352
+ mlrun-1.10.0rc17.dist-info/licenses/LICENSE,sha256=zTiv1CxWNkOk1q8eJS1G_8oD4gWpWLwWxj_Agcsi8Os,11337
353
+ mlrun-1.10.0rc17.dist-info/METADATA,sha256=D6HN7BHzSm7-exb9kSE5N2h4m_dPOSsQc-PoM_5avj4,26195
354
+ mlrun-1.10.0rc17.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
355
+ mlrun-1.10.0rc17.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
356
+ mlrun-1.10.0rc17.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
357
+ mlrun-1.10.0rc17.dist-info/RECORD,,