mlrun 1.7.0rc11__py3-none-any.whl → 1.7.0rc13__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.

@@ -180,11 +180,13 @@ class ArtifactManager:
180
180
  upload=None,
181
181
  labels=None,
182
182
  db_key=None,
183
+ project=None,
184
+ is_retained_producer=None,
183
185
  **kwargs,
184
186
  ) -> Artifact:
185
187
  """
186
188
  Log an artifact to the DB and upload it to the artifact store.
187
- :param producer: The producer of the artifact, the producer depends from where the artifact is being logged.
189
+ :param producer: The producer of the artifact, the producer depends on where the artifact is being logged.
188
190
  :param item: The artifact to log.
189
191
  :param body: The body of the artifact.
190
192
  :param target_path: The target path of the artifact. (cannot be a relative path)
@@ -202,6 +204,9 @@ class ArtifactManager:
202
204
  :param labels: Labels to add to the artifact.
203
205
  :param db_key: The key to use when logging the artifact to the DB.
204
206
  If not provided, will generate a key based on the producer name and the artifact key.
207
+ :param project: The project to log the artifact to. If not provided, will use the producer's project.
208
+ :param is_retained_producer: Whether the producer is retained or not. Relevant to register artifacts flow
209
+ where a project may log artifacts which were produced by another producer.
205
210
  :param kwargs: Arguments to pass to the artifact class.
206
211
  :return: The logged artifact.
207
212
  """
@@ -226,7 +231,7 @@ class ArtifactManager:
226
231
 
227
232
  if db_key is None:
228
233
  # set the default artifact db key
229
- if producer.kind == "run":
234
+ if producer.kind == "run" and not is_retained_producer:
230
235
  # When the producer's type is "run,"
231
236
  # we generate a different db_key than the one we obtained in the request.
232
237
  # As a result, a new artifact for the requested key will be created,
@@ -251,8 +256,11 @@ class ArtifactManager:
251
256
  item.labels.update({"workflow-id": item.producer.get("workflow")})
252
257
 
253
258
  item.iter = producer.iteration
254
- project = producer.project
259
+ project = project or producer.project
255
260
  item.project = project
261
+ if is_retained_producer:
262
+ # if the producer is retained, we want to use the original target path
263
+ target_path = target_path or item.target_path
256
264
 
257
265
  # if target_path is provided and not relative, then no need to upload the artifact as it already exists
258
266
  if target_path:
@@ -260,7 +268,8 @@ class ArtifactManager:
260
268
  raise ValueError(
261
269
  f"target_path ({target_path}) param cannot be relative"
262
270
  )
263
- upload = False
271
+ if upload is None:
272
+ upload = False
264
273
 
265
274
  # if target_path wasn't provided, but src_path is not relative, then no need to upload the artifact as it
266
275
  # already exists. In this case set the target_path to the src_path and set upload to False
@@ -287,7 +296,9 @@ class ArtifactManager:
287
296
 
288
297
  if target_path and item.is_dir and not target_path.endswith("/"):
289
298
  target_path += "/"
290
- target_path = template_artifact_path(artifact_path=target_path, project=project)
299
+ target_path = template_artifact_path(
300
+ artifact_path=target_path, project=producer.project
301
+ )
291
302
  item.target_path = target_path
292
303
 
293
304
  item.before_log()
@@ -303,7 +314,7 @@ class ArtifactManager:
303
314
  item.upload(artifact_path=artifact_path)
304
315
 
305
316
  if db_key:
306
- self._log_to_db(db_key, producer.project, producer.inputs, item)
317
+ self._log_to_db(db_key, project, producer.inputs, item)
307
318
  size = str(item.size) or "?"
308
319
  db_str = "Y" if (self.artifact_db and db_key) else "N"
309
320
  logger.debug(
@@ -49,7 +49,7 @@ class Event(pydantic.BaseModel):
49
49
  kind: EventKind
50
50
  timestamp: Union[str, datetime] = None # occurrence time
51
51
  entity: EventEntity
52
- value: Optional[Union[float, str]] = None
52
+ value_dict: Optional[dict] = pydantic.Field(default_factory=dict)
53
53
 
54
54
  def is_valid(self):
55
55
  return self.entity.kind in _event_kind_entity_map[self.kind]
mlrun/config.py CHANGED
@@ -548,7 +548,7 @@ default_config = {
548
548
  },
549
549
  "feature_store": {
550
550
  "data_prefixes": {
551
- "default": "v3io:///projects/{project}/FeatureStore/{name}/nosql",
551
+ "default": "v3io:///projects/{project}/FeatureStore/{name}/{kind}",
552
552
  "nosql": "v3io:///projects/{project}/FeatureStore/{name}/nosql",
553
553
  # "authority" is optional and generalizes [userinfo "@"] host [":" port]
554
554
  "redisnosql": "redis://{authority}/projects/{project}/FeatureStore/{name}/nosql",
@@ -64,7 +64,7 @@ from .store_resources import (
64
64
  parse_store_uri,
65
65
  )
66
66
  from .targets import CSVTarget, NoSqlTarget, ParquetTarget, StreamTarget
67
- from .utils import parse_kafka_url
67
+ from .utils import get_kafka_brokers_from_dict, parse_kafka_url
68
68
 
69
69
  store_manager = StoreManager()
70
70
 
@@ -107,8 +107,9 @@ def get_stream_pusher(stream_path: str, **kwargs):
107
107
  :param stream_path: path/url of stream
108
108
  """
109
109
 
110
- if stream_path.startswith("kafka://") or "kafka_brokers" in kwargs:
111
- topic, brokers = parse_kafka_url(stream_path, kwargs.get("kafka_brokers"))
110
+ kafka_brokers = get_kafka_brokers_from_dict(kwargs)
111
+ if stream_path.startswith("kafka://") or kafka_brokers:
112
+ topic, brokers = parse_kafka_url(stream_path, kafka_brokers)
112
113
  return KafkaOutputStream(topic, brokers, kwargs.get("kafka_producer_options"))
113
114
  elif stream_path.startswith("http://") or stream_path.startswith("https://"):
114
115
  return HTTPOutputStream(stream_path=stream_path)
@@ -83,14 +83,28 @@ class DatastoreProfileBasic(DatastoreProfile):
83
83
  class DatastoreProfileKafkaTarget(DatastoreProfile):
84
84
  type: str = pydantic.Field("kafka_target")
85
85
  _private_attributes = "kwargs_private"
86
- bootstrap_servers: str
87
- brokers: str
86
+ bootstrap_servers: typing.Optional[str] = None
87
+ brokers: typing.Optional[str] = None
88
88
  topic: str
89
89
  kwargs_public: typing.Optional[dict]
90
90
  kwargs_private: typing.Optional[dict]
91
91
 
92
- def __pydantic_post_init__(self):
92
+ def __init__(self, **kwargs):
93
+ super().__init__(**kwargs)
94
+
95
+ if not self.brokers and not self.bootstrap_servers:
96
+ raise mlrun.errors.MLRunInvalidArgumentError(
97
+ "DatastoreProfileKafkaTarget requires the 'brokers' field to be set"
98
+ )
99
+
93
100
  if self.bootstrap_servers:
101
+ if self.brokers:
102
+ raise mlrun.errors.MLRunInvalidArgumentError(
103
+ "DatastoreProfileKafkaTarget cannot be created with both 'brokers' and 'bootstrap_servers'"
104
+ )
105
+ else:
106
+ self.brokers = self.bootstrap_servers
107
+ self.bootstrap_servers = None
94
108
  warnings.warn(
95
109
  "'bootstrap_servers' parameter is deprecated in 1.7.0 and will be removed in 1.9.0, "
96
110
  "use 'brokers' instead.",
mlrun/datastore/utils.py CHANGED
@@ -15,6 +15,7 @@
15
15
  import tarfile
16
16
  import tempfile
17
17
  import typing
18
+ import warnings
18
19
  from urllib.parse import parse_qs, urlparse
19
20
 
20
21
  import pandas as pd
@@ -164,3 +165,18 @@ def _generate_sql_query_with_time_filter(
164
165
  query = query.filter(getattr(table.c, time_column) <= end_time)
165
166
 
166
167
  return query, parse_dates
168
+
169
+
170
+ def get_kafka_brokers_from_dict(options: dict, pop=False) -> typing.Optional[str]:
171
+ get_or_pop = options.pop if pop else options.get
172
+ kafka_brokers = get_or_pop("kafka_brokers", None)
173
+ if kafka_brokers:
174
+ return kafka_brokers
175
+ kafka_bootstrap_servers = get_or_pop("kafka_bootstrap_servers", None)
176
+ if kafka_bootstrap_servers:
177
+ warnings.warn(
178
+ "The 'kafka_bootstrap_servers' parameter is deprecated and will be removed in "
179
+ "1.9.0. Please pass the 'kafka_brokers' parameter instead.",
180
+ FutureWarning,
181
+ )
182
+ return kafka_bootstrap_servers
@@ -253,3 +253,10 @@ def calculate_inputs_statistics(
253
253
  )
254
254
 
255
255
  return inputs_statistics
256
+
257
+
258
+ def get_endpoint_record(project: str, endpoint_id: str):
259
+ model_endpoint_store = mlrun.model_monitoring.get_store_object(
260
+ project=project,
261
+ )
262
+ return model_endpoint_store.get_model_endpoint(endpoint_id=endpoint_id)
@@ -40,6 +40,7 @@ from mlrun.common.schemas.model_monitoring.constants import (
40
40
  ProjectSecretKeys,
41
41
  PrometheusEndpoints,
42
42
  )
43
+ from mlrun.model_monitoring.helpers import get_endpoint_record
43
44
  from mlrun.utils import logger
44
45
 
45
46
 
@@ -1233,13 +1234,6 @@ def update_endpoint_record(
1233
1234
  )
1234
1235
 
1235
1236
 
1236
- def get_endpoint_record(project: str, endpoint_id: str):
1237
- model_endpoint_store = mlrun.model_monitoring.get_store_object(
1238
- project=project,
1239
- )
1240
- return model_endpoint_store.get_model_endpoint(endpoint_id=endpoint_id)
1241
-
1242
-
1243
1237
  def update_monitoring_feature_set(
1244
1238
  endpoint_record: dict[str, typing.Any],
1245
1239
  feature_names: list[str],
@@ -27,8 +27,13 @@ import mlrun.common.schemas.alert as alert_constants
27
27
  import mlrun.model_monitoring
28
28
  import mlrun.model_monitoring.db.stores
29
29
  import mlrun.utils.v3io_clients
30
- from mlrun.common.schemas.model_monitoring.constants import ResultStatusApp, WriterEvent
30
+ from mlrun.common.schemas.model_monitoring.constants import (
31
+ EventFieldType,
32
+ ResultStatusApp,
33
+ WriterEvent,
34
+ )
31
35
  from mlrun.common.schemas.notification import NotificationKind, NotificationSeverity
36
+ from mlrun.model_monitoring.helpers import get_endpoint_record
32
37
  from mlrun.serving.utils import StepToDict
33
38
  from mlrun.utils import logger
34
39
  from mlrun.utils.notifications.notification_pusher import CustomNotificationPusher
@@ -112,6 +117,7 @@ class ModelMonitoringWriter(StepToDict):
112
117
  notification_types=[NotificationKind.slack]
113
118
  )
114
119
  self._create_tsdb_table()
120
+ self._endpoints_records = {}
115
121
 
116
122
  @staticmethod
117
123
  def get_v3io_container(project_name: str) -> str:
@@ -174,7 +180,7 @@ class ModelMonitoringWriter(StepToDict):
174
180
 
175
181
  @staticmethod
176
182
  def _generate_event_on_drift(
177
- uid: str, drift_status: str, drift_value: float, project_name: str
183
+ uid: str, drift_status: str, event_value: dict, project_name: str
178
184
  ):
179
185
  if (
180
186
  drift_status == ResultStatusApp.detected
@@ -191,7 +197,7 @@ class ModelMonitoringWriter(StepToDict):
191
197
  else alert_constants.EventKind.DRIFT_SUSPECTED
192
198
  )
193
199
  event_data = mlrun.common.schemas.Event(
194
- kind=event_kind, entity=entity, value=drift_value
200
+ kind=event_kind, entity=entity, value_dict=event_value
195
201
  )
196
202
  mlrun.get_run_db().generate_event(event_kind, event_data)
197
203
 
@@ -227,10 +233,22 @@ class ModelMonitoringWriter(StepToDict):
227
233
  _Notifier(event=event, notification_pusher=self._custom_notifier).notify()
228
234
 
229
235
  if mlrun.mlconf.alerts.mode == mlrun.common.schemas.alert.AlertsModes.enabled:
236
+ endpoint_id = event[WriterEvent.ENDPOINT_ID]
237
+ endpoint_record = self._endpoints_records.setdefault(
238
+ endpoint_id,
239
+ get_endpoint_record(project=self.project, endpoint_id=endpoint_id),
240
+ )
241
+ event_value = {
242
+ "app_name": event[WriterEvent.APPLICATION_NAME],
243
+ "model": endpoint_record.get(EventFieldType.MODEL),
244
+ "model_endpoint_id": event[WriterEvent.ENDPOINT_ID],
245
+ "result_name": event[WriterEvent.RESULT_NAME],
246
+ "result_value": event[WriterEvent.RESULT_VALUE],
247
+ }
230
248
  self._generate_event_on_drift(
231
249
  event[WriterEvent.ENDPOINT_ID],
232
250
  event[WriterEvent.RESULT_STATUS],
233
- event[WriterEvent.RESULT_VALUE],
251
+ event_value,
234
252
  self.project,
235
253
  )
236
254
  logger.info("Completed event DB writes")
mlrun/projects/project.py CHANGED
@@ -1420,7 +1420,9 @@ class MlrunProject(ModelObj):
1420
1420
  artifact.src_path = path.join(
1421
1421
  self.spec.get_code_path(), artifact.src_path
1422
1422
  )
1423
- producer = self._resolve_artifact_producer(artifact, project_tag)
1423
+ producer, is_retained_producer = self._resolve_artifact_producer(
1424
+ artifact, project_tag
1425
+ )
1424
1426
  # log the artifact only if it doesn't already exist
1425
1427
  if (
1426
1428
  producer.name != self.metadata.name
@@ -1430,7 +1432,11 @@ class MlrunProject(ModelObj):
1430
1432
  ):
1431
1433
  continue
1432
1434
  artifact_manager.log_artifact(
1433
- producer, artifact, artifact_path=artifact_path
1435
+ producer,
1436
+ artifact,
1437
+ artifact_path=artifact_path,
1438
+ project=self.metadata.name,
1439
+ is_retained_producer=is_retained_producer,
1434
1440
  )
1435
1441
 
1436
1442
  def _get_artifact_manager(self):
@@ -1525,7 +1531,7 @@ class MlrunProject(ModelObj):
1525
1531
  artifact_path = mlrun.utils.helpers.template_artifact_path(
1526
1532
  artifact_path, self.metadata.name
1527
1533
  )
1528
- producer = self._resolve_artifact_producer(item)
1534
+ producer, is_retained_producer = self._resolve_artifact_producer(item)
1529
1535
  if producer.name != self.metadata.name:
1530
1536
  # the artifact producer is retained, log it only if it doesn't already exist
1531
1537
  if existing_artifact := self._resolve_existing_artifact(
@@ -1550,6 +1556,8 @@ class MlrunProject(ModelObj):
1550
1556
  upload=upload,
1551
1557
  labels=labels,
1552
1558
  target_path=target_path,
1559
+ project=self.metadata.name,
1560
+ is_retained_producer=is_retained_producer,
1553
1561
  **kwargs,
1554
1562
  )
1555
1563
  return item
@@ -1779,14 +1787,16 @@ class MlrunProject(ModelObj):
1779
1787
  artifact = get_artifact(spec)
1780
1788
  with open(f"{temp_dir}/_body", "rb") as fp:
1781
1789
  artifact.spec._body = fp.read()
1782
- artifact.target_path = ""
1783
1790
 
1784
1791
  # if the dataitem is not a file, it means we downloaded it from a remote source to a temp file,
1785
1792
  # so we need to remove it after we're done with it
1786
1793
  dataitem.remove_local()
1787
1794
 
1788
1795
  return self.log_artifact(
1789
- artifact, local_path=temp_dir, artifact_path=artifact_path
1796
+ artifact,
1797
+ local_path=temp_dir,
1798
+ artifact_path=artifact_path,
1799
+ upload=True,
1790
1800
  )
1791
1801
 
1792
1802
  else:
@@ -3949,7 +3959,7 @@ class MlrunProject(ModelObj):
3949
3959
  self,
3950
3960
  artifact: typing.Union[str, Artifact],
3951
3961
  project_producer_tag: str = None,
3952
- ) -> typing.Optional[ArtifactProducer]:
3962
+ ) -> tuple[ArtifactProducer, bool]:
3953
3963
  """
3954
3964
  Resolve the artifact producer of the given artifact.
3955
3965
  If the artifact's producer is a run, the artifact is registered with the original producer.
@@ -3958,10 +3968,10 @@ class MlrunProject(ModelObj):
3958
3968
  :param artifact: The artifact to resolve its producer.
3959
3969
  :param project_producer_tag: The tag to use for the project as the producer. If not provided, a tag will be
3960
3970
  generated for the project.
3961
- :return: A tuple of the resolved producer and the resolved artifact.
3971
+ :return: A tuple of the resolved producer and whether it is retained or not.
3962
3972
  """
3963
3973
 
3964
- if not isinstance(artifact, str) and artifact.producer:
3974
+ if not isinstance(artifact, str) and artifact.spec.producer:
3965
3975
  # if the artifact was imported from a yaml file, the producer can be a dict
3966
3976
  if isinstance(artifact.spec.producer, ArtifactProducer):
3967
3977
  producer_dict = artifact.spec.producer.get_meta()
@@ -3974,7 +3984,7 @@ class MlrunProject(ModelObj):
3974
3984
  kind=producer_dict.get("kind", ""),
3975
3985
  project=producer_dict.get("project", ""),
3976
3986
  tag=producer_dict.get("tag", ""),
3977
- )
3987
+ ), True
3978
3988
 
3979
3989
  # do not retain the artifact's producer, replace it with the project as the producer
3980
3990
  project_producer_tag = project_producer_tag or self._get_project_tag()
@@ -3983,7 +3993,7 @@ class MlrunProject(ModelObj):
3983
3993
  name=self.metadata.name,
3984
3994
  project=self.metadata.name,
3985
3995
  tag=project_producer_tag,
3986
- )
3996
+ ), False
3987
3997
 
3988
3998
  def _resolve_existing_artifact(
3989
3999
  self,
mlrun/run.py CHANGED
@@ -700,7 +700,7 @@ def code_to_function(
700
700
  "nuclio-mover",
701
701
  kind="nuclio",
702
702
  filename="mover.py",
703
- image="python:3.7",
703
+ image="python:3.9",
704
704
  description="this function moves files from one system to another",
705
705
  requirements=["pandas"],
706
706
  labels={"author": "me"},
@@ -23,7 +23,7 @@ from nuclio import KafkaTrigger
23
23
 
24
24
  import mlrun
25
25
  import mlrun.common.schemas
26
- from mlrun.datastore import parse_kafka_url
26
+ from mlrun.datastore import get_kafka_brokers_from_dict, parse_kafka_url
27
27
  from mlrun.model import ObjectList
28
28
  from mlrun.runtimes.function_reference import FunctionReference
29
29
  from mlrun.secrets import SecretsStore
@@ -487,11 +487,8 @@ class ServingRuntime(RemoteRuntime):
487
487
  "worker_allocation_mode", "static"
488
488
  )
489
489
 
490
- if (
491
- stream.path.startswith("kafka://")
492
- or "kafka_brokers" in stream.options
493
- ):
494
- brokers = stream.options.get("kafka_brokers")
490
+ brokers = get_kafka_brokers_from_dict(stream.options)
491
+ if stream.path.startswith("kafka://") or brokers:
495
492
  if brokers:
496
493
  brokers = brokers.split(",")
497
494
  topic, brokers = parse_kafka_url(stream.path, brokers)
mlrun/serving/states.py CHANGED
@@ -17,7 +17,6 @@ __all__ = ["TaskStep", "RouterStep", "RootFlowStep", "ErrorStep"]
17
17
  import os
18
18
  import pathlib
19
19
  import traceback
20
- import warnings
21
20
  from copy import copy, deepcopy
22
21
  from inspect import getfullargspec, signature
23
22
  from typing import Union
@@ -26,7 +25,10 @@ import mlrun
26
25
 
27
26
  from ..config import config
28
27
  from ..datastore import get_stream_pusher
29
- from ..datastore.utils import parse_kafka_url
28
+ from ..datastore.utils import (
29
+ get_kafka_brokers_from_dict,
30
+ parse_kafka_url,
31
+ )
30
32
  from ..errors import MLRunInvalidArgumentError, err_to_str
31
33
  from ..model import ModelObj, ObjectDict
32
34
  from ..platforms.iguazio import parse_path
@@ -1496,14 +1498,7 @@ def _init_async_objects(context, steps):
1496
1498
  options = {}
1497
1499
  options.update(step.options)
1498
1500
 
1499
- kafka_brokers = options.pop("kafka_brokers", None)
1500
- if not kafka_brokers and "kafka_bootstrap_servers" in options:
1501
- kafka_brokers = options.pop("kafka_bootstrap_servers")
1502
- warnings.warn(
1503
- "The 'kafka_bootstrap_servers' parameter is deprecated and will be removed in "
1504
- "1.9.0. Please pass the 'kafka_brokers' parameter instead.",
1505
- FutureWarning,
1506
- )
1501
+ kafka_brokers = get_kafka_brokers_from_dict(options, pop=True)
1507
1502
 
1508
1503
  if stream_path.startswith("kafka://") or kafka_brokers:
1509
1504
  topic, brokers = parse_kafka_url(stream_path, kafka_brokers)
@@ -116,8 +116,12 @@ class SlackNotification(NotificationBase):
116
116
  self._get_slack_row(f"*Project:*\n{alert.project}"),
117
117
  self._get_slack_row(f"*UID:*\n{event_data.entity.id}"),
118
118
  ]
119
- if event_data.value is not None:
120
- line.append(self._get_slack_row(f"*Event data:*\n{event_data.value}"))
119
+ if event_data.value_dict:
120
+ data_lines = []
121
+ for key, value in event_data.value_dict.items():
122
+ data_lines.append(f"{key}: {value}")
123
+ data_text = "\n".join(data_lines)
124
+ line.append(self._get_slack_row(f"*Event data:*\n{data_text}"))
121
125
 
122
126
  if url := mlrun.utils.helpers.get_ui_url(alert.project, event_data.entity.id):
123
127
  line.append(self._get_slack_row(f"*Overview:*\n<{url}|*Job overview*>"))
@@ -56,7 +56,7 @@ class WebhookNotification(NotificationBase):
56
56
  if alert:
57
57
  request_body["alert"] = alert.dict()
58
58
  if event_data:
59
- request_body["value"] = event_data.value
59
+ request_body["value"] = event_data.value_dict
60
60
  request_body["id"] = event_data.entity.id
61
61
 
62
62
  if custom_html:
@@ -1,4 +1,4 @@
1
1
  {
2
- "git_commit": "fbea0ad0a63c1a8af06793354df5d3c467ca606d",
3
- "version": "1.7.0-rc11"
2
+ "git_commit": "3bba8f5664d7a3ff4639a3437811fa5972883b2f",
3
+ "version": "1.7.0-rc13"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mlrun
3
- Version: 1.7.0rc11
3
+ Version: 1.7.0rc13
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=rxnxHjb5Rq_EnHv77irxah9zKL89AjZZpjQyx3W5izQ,7249
2
2
  mlrun/__main__.py,sha256=LKskOWulg04o0IFm33Pfmokuxo6P9wLSl3ZHkiS9eZc,49326
3
- mlrun/config.py,sha256=gWgx1Hp4QPjM8hKAxNkTquAQdTCwQ7OO93CXlJpRDD4,64134
3
+ mlrun/config.py,sha256=i1yOBX-_h_zaHKnTUrx0heYeL7_-PeYF30Jyo6jfalw,64135
4
4
  mlrun/errors.py,sha256=HmOAdfpL0bCDisZMUoJPOumneq71ko49Ph-XBL-A4xA,7080
5
5
  mlrun/execution.py,sha256=F45o_rJI3Q8epQefTksvyjmgZr4ZxKmUxXbKW5UZOaY,40891
6
6
  mlrun/features.py,sha256=m17K_3l9Jktwb9dOwlHLTAPTlemsWrRF7dJhXUX0iJU,15429
@@ -9,13 +9,13 @@ mlrun/kfpops.py,sha256=bCHfvzz9E_fOSM8ASPqBcbG4pGRo8Sq5IMvGIYiEYRI,30446
9
9
  mlrun/lists.py,sha256=ev-gLBPc_az03yQEHrKyDPq_Bjosa4D_XFiVbRIpmRY,8286
10
10
  mlrun/model.py,sha256=0NaVpb8kmiG4TubMxqV5S3WLDC1MWnaAZS-wtoYerUw,70645
11
11
  mlrun/render.py,sha256=aMH3U2z7ELpW8MwYEGOrqLdEUwMX29shqy6V6-KbgiM,13009
12
- mlrun/run.py,sha256=SP1DlfjoMkzd397GDtXDr7wTOtCgdFM8rYipSOXRQxw,43238
12
+ mlrun/run.py,sha256=e-VxVzxEHOWt9m04optTvup7gilXM3GND5Sis_XL44w,43238
13
13
  mlrun/secrets.py,sha256=ibtCK79u7JVBZF6F0SP1-xXXF5MyrLEUs_TCWiJAnlc,7798
14
14
  mlrun/api/schemas/__init__.py,sha256=LhfO3myrnLVxC0MYCAc1_LTuqhRlYV3H7BwJkjOu3dQ,14211
15
15
  mlrun/artifacts/__init__.py,sha256=LxEWcMYPawJYvNOl6H2_UvrxdLTNYfKeZcMEKFZnGgA,1187
16
16
  mlrun/artifacts/base.py,sha256=2UYjwp7o_Fxhr1sMYE5mSUpxGA8yt2ZU1_UicreL7hk,34978
17
17
  mlrun/artifacts/dataset.py,sha256=hKdKtyAJqPWUGs1yefOAxa10s_ar3o7MaO7oiiD_HqU,22360
18
- mlrun/artifacts/manager.py,sha256=p6CmIJH91vm9DsEZHgHxKYTHU2BvF9IwpLv85cqoHNs,14425
18
+ mlrun/artifacts/manager.py,sha256=vjpkuBp4iA3sddSZAJTdjCMJg5tKcW0L2meFmI8gdtI,15058
19
19
  mlrun/artifacts/model.py,sha256=9L3wzKPLtXFyaR7VSxHpi0cQ6mafNzw-mkVKgNBHMK4,25272
20
20
  mlrun/artifacts/plots.py,sha256=RPJxfzS_3dKAXiY2N1LchS7c9LsrJMg42OAVyDn0mK0,15860
21
21
  mlrun/common/__init__.py,sha256=xY3wHC4TEJgez7qtnn1pQvHosi8-5UJOCtyGBS7FcGE,571
@@ -28,7 +28,7 @@ mlrun/common/db/sql_session.py,sha256=Znc8KE2oLy4lg3_vRki1sVlNx59TgDSOTCXfU561hB
28
28
  mlrun/common/model_monitoring/__init__.py,sha256=x0EMEvxVjHsm858J1t6IEA9dtKTdFpJ9sKhss10ld8A,721
29
29
  mlrun/common/model_monitoring/helpers.py,sha256=1CpxIDQPumFnpUB1eqcvCpLlyPFVeW2sL6prM-N5A1A,4405
30
30
  mlrun/common/schemas/__init__.py,sha256=JGyxf4eM8ZuVVCASsKZS6lo_Y7VzAuCC8zXZACRAyks,5119
31
- mlrun/common/schemas/alert.py,sha256=zh80OYRcB3oPHoqowl2Qeu7VYmlUx3vT0Ar9GYnxM_g,3157
31
+ mlrun/common/schemas/alert.py,sha256=F-ZQbfBdrSm-PYESjlQ_IjnzKs0OrilOhBdCWzNZOe8,3181
32
32
  mlrun/common/schemas/api_gateway.py,sha256=mw47rpTBAVIRV6TdMQ_A6rIgnEHOUweU7iT3VbINvBE,2519
33
33
  mlrun/common/schemas/artifact.py,sha256=d6srME_eWn2MpGuqvPQZtePRFkjDfNJgQ6JDd51qVrI,2796
34
34
  mlrun/common/schemas/auth.py,sha256=VNvMDdeQxYpnNxxuftI7O47bOaKzvYaiov2I6TnSFvM,6204
@@ -67,12 +67,12 @@ mlrun/data_types/data_types.py,sha256=hWiL5TPOj9EK7_nd1yttLBUhXTmBYLDZzmG-hWzzhH
67
67
  mlrun/data_types/infer.py,sha256=z2EbSpR6xWEE5-HRUtDZkapHQld3xMbzXtTX83K-690,6134
68
68
  mlrun/data_types/spark.py,sha256=qKQ2TIAPQWDgmIOmpyV5_uuyUX3AnXWSq6GPpVjVIek,9457
69
69
  mlrun/data_types/to_pandas.py,sha256=_8_M9WclYNkPeHLo0eXhrnLE6SiLkvNTreeqfJ9G5yY,9945
70
- mlrun/datastore/__init__.py,sha256=Fqebv0azSui5qj0fPcc9jFjnpUZ_FE27bXI92DOAWtE,4034
70
+ mlrun/datastore/__init__.py,sha256=pQQI_Vi7H45Bbe6f9JaF8dOgtGWf3qY9_kd8NNTfaog,4093
71
71
  mlrun/datastore/alibaba_oss.py,sha256=OfQ9AbsJNBFF9DFgUdq38TvKw6qwnHmEcnH-nze6ZZg,4827
72
72
  mlrun/datastore/azure_blob.py,sha256=NpkEoIie7mH171tOwlrwpEwzRYGoo9SF3FAAegEENhU,9019
73
73
  mlrun/datastore/base.py,sha256=wWE0lEjOWx_pGbxKQWQFhNvpdtR-WMCML-CiAHjhyzI,24403
74
74
  mlrun/datastore/datastore.py,sha256=GGo8XPnKVWWgY0b-18D93V1g8DJgeBNafa6knnHEabw,9111
75
- mlrun/datastore/datastore_profile.py,sha256=ttyqRWPGJui-0q_rihGk6H7g7aJFDpPCEdFcJZz7Z60,16549
75
+ mlrun/datastore/datastore_profile.py,sha256=CTS22aaCy3IqzjJWTzSJnulxFYJ5LStqPOB4Py1py2U,17186
76
76
  mlrun/datastore/dbfs_store.py,sha256=5IkxnFQXkW0fdx-ca5jjQnUdTsTfNdJzMvV31ZpDNrM,6634
77
77
  mlrun/datastore/filestore.py,sha256=nS3Ie6jG41NDiW_as9tF8Nu5maaSVEKYKUr1IQtPhuA,3767
78
78
  mlrun/datastore/google_cloud_storage.py,sha256=Du5qYYUCSkLt9acQDeQ-PgEjttsE7D2eAoLebO43kiw,6110
@@ -86,7 +86,7 @@ mlrun/datastore/spark_udf.py,sha256=NnnB3DZxZb-rqpRy7b-NC7QWXuuqFn3XkBDc86tU4mQ,
86
86
  mlrun/datastore/spark_utils.py,sha256=50rllp6xXpXY__1LbU7aTXUU5ca8dKAfoskPre3npZo,1611
87
87
  mlrun/datastore/store_resources.py,sha256=dfMdFy2urilECtlwLJr5CSG12MA645b-NPYDnbr5s1A,6839
88
88
  mlrun/datastore/targets.py,sha256=n26fmN288J1dtp2DBRegKT-lhveBqE2AZBOsvmH0zC8,74971
89
- mlrun/datastore/utils.py,sha256=ltT_TSj8boH5Q32nz7-RFhge9he8krUx2KdDUlrYiUg,5227
89
+ mlrun/datastore/utils.py,sha256=TjvFRJIje3RzQpxfMZAGniyzSWgWC_AEbuTrZXxshRo,5852
90
90
  mlrun/datastore/v3io.py,sha256=fZealKJem2gZgZLopQ0z8UnwgrhyVXjb-oHAksroAI0,8103
91
91
  mlrun/datastore/wasbfs/__init__.py,sha256=s5Ul-0kAhYqFjKDR2X0O2vDGDbLQQduElb32Ev56Te4,1343
92
92
  mlrun/datastore/wasbfs/fs.py,sha256=MnSj7Q4OKA2L55ihCmUnj2t3GA3B77oLMdAw-yxvN9w,6151
@@ -207,12 +207,12 @@ mlrun/model_monitoring/controller.py,sha256=saz_EsiNARf4wkK6AePax82j3z10Fe5qbH-K
207
207
  mlrun/model_monitoring/controller_handler.py,sha256=J9Y9ppLsQaxyYRl21165Rr7QuI9EM-mk-5veAqs4Bi0,1336
208
208
  mlrun/model_monitoring/evidently_application.py,sha256=o9PsDsjyRfcbuC1X1gb2ww5nzWCsR_KheabtpxKZ5yY,4824
209
209
  mlrun/model_monitoring/features_drift_table.py,sha256=c6GpKtpOJbuT1u5uMWDL_S-6N4YPOmlktWMqPme3KFY,25308
210
- mlrun/model_monitoring/helpers.py,sha256=gEgj5rCU1q8NRtmpFBpzfpOaeDmdf1Aa0WPiHKtnjfo,9095
210
+ mlrun/model_monitoring/helpers.py,sha256=oo_QZnx_M-b7QdVntwuFS4Y5p8pZRulCc44mwtqK8vM,9329
211
211
  mlrun/model_monitoring/model_endpoint.py,sha256=BBtxdY5ciormI_al4zshmIp0GN7hGhOCn-hLgpCXek0,3938
212
212
  mlrun/model_monitoring/prometheus.py,sha256=cUR4y73GutJB_pA_VCBDl9YtK4PcIJp2wj2rnLVmYi4,7578
213
- mlrun/model_monitoring/stream_processing.py,sha256=SbxH9NcwZymXiPSa51HRmyghxgSbPCzYgWarRa8iJx4,49264
213
+ mlrun/model_monitoring/stream_processing.py,sha256=7p9ILBEI0opn1yf0AwHvucVRVjaJQItWq-Xr1uOG8Y4,49093
214
214
  mlrun/model_monitoring/tracking_policy.py,sha256=sQq956akAQpntkrJwIgFWcEq-JpyVcg0FxgNa4h3V70,5502
215
- mlrun/model_monitoring/writer.py,sha256=6l6no2xBwYAZxrs8ryaCdhFEf3aAicHWNuw6zrxYo-E,8555
215
+ mlrun/model_monitoring/writer.py,sha256=zDdGC9BtMKz23IEYJA2rCX_bGi9vA5esjJ34lf2bMco,9294
216
216
  mlrun/model_monitoring/applications/__init__.py,sha256=6CsTXAxeLbbf8yfCADTaxmiavqwrLEdYFJ-qc5kgDAY,569
217
217
  mlrun/model_monitoring/applications/histogram_data_drift.py,sha256=RIBY2tqbbYuBgcpkMmR_IjtZjUr8ZSwfMlgszd9KuUc,11701
218
218
  mlrun/model_monitoring/db/__init__.py,sha256=sXYc6CF2I_HMJyUoY_4VueQf3OL-vhEAuWHxQvuoGRs,662
@@ -252,7 +252,7 @@ mlrun/platforms/other.py,sha256=jA-3e8rNq6NSzDHsox4evVMKVN9cnTTYOnVU6rL0zOA,1182
252
252
  mlrun/projects/__init__.py,sha256=Lv5rfxyXJrw6WGOWJKhBz66M6t3_zsNMCfUD6waPwx4,1153
253
253
  mlrun/projects/operations.py,sha256=Myzx1dTRQoThBRoxisi5-cpyE8VtbZE5QCrSA_DcIqc,18570
254
254
  mlrun/projects/pipelines.py,sha256=7XsVg13Y2bPK_6SCLC5e22PMnU2DUjscJX2LctSKXN8,40579
255
- mlrun/projects/project.py,sha256=_0tf6NKGu-u0mif5uvxYpB4yo1RYVRGPsBbIQFNdcf0,169316
255
+ mlrun/projects/project.py,sha256=xrNCGHgzuy5P161lh1F13MGjtW3B_aNSgWBoFfVrTA8,169699
256
256
  mlrun/runtimes/__init__.py,sha256=wxt3EZ5ESqld4dF93m-r0E9y0ZeJAn-Y0vppD2lUyqQ,8694
257
257
  mlrun/runtimes/base.py,sha256=tM8R7-T-PGvSammpl-nHCVGKW42Vqc8AEmplF4ObHyw,36788
258
258
  mlrun/runtimes/constants.py,sha256=oP3OxdYCpbvadJ3zP1JGkqGBKaBheNkCnJISWha9x58,9513
@@ -277,7 +277,7 @@ mlrun/runtimes/nuclio/__init__.py,sha256=gx1kizzKv8pGT5TNloN1js1hdbxqDw3rM90sLVY
277
277
  mlrun/runtimes/nuclio/api_gateway.py,sha256=3AaKavGqv_Ghj1e8t1RMZDYM92Bqd1C6FO23aSz50Ro,16722
278
278
  mlrun/runtimes/nuclio/function.py,sha256=kd01D0Bu8IezCyGMXPqgGr1EUXpMkrjAg7UGiLhu3JI,49335
279
279
  mlrun/runtimes/nuclio/nuclio.py,sha256=sLK8KdGO1LbftlL3HqPZlFOFTAAuxJACZCVl1c0Ha6E,2942
280
- mlrun/runtimes/nuclio/serving.py,sha256=FHTBNlwflbb1sdxVrCZetIF3zCnDpiek6mw3SkX-8CM,29702
280
+ mlrun/runtimes/nuclio/serving.py,sha256=H3bSI33FmfOBkL99ZU6_xKbFx4qKdyQVdpIwwfhK5qo,29649
281
281
  mlrun/runtimes/nuclio/application/__init__.py,sha256=rRs5vasy_G9IyoTpYIjYDafGoL6ifFBKgBtsXn31Atw,614
282
282
  mlrun/runtimes/nuclio/application/application.py,sha256=c8Z-eFlqcjn9b91xygfwT2ijLvo688p0EaieZlYnzKg,13349
283
283
  mlrun/runtimes/nuclio/application/reverse_proxy.go,sha256=JIIYae6bXzCLf3jXuu49KWPQYoXr_FDQ2Rbo1OWKAd0,3150
@@ -289,7 +289,7 @@ mlrun/serving/remote.py,sha256=MrFByphQWmIsKXqw-MOwl2Q1hbtWReYVRKvlcKj9pfw,17980
289
289
  mlrun/serving/routers.py,sha256=scvpXD0VmgGRLJb2UqNq0o39ML2_F_SyZ4OXVQhJIOM,55086
290
290
  mlrun/serving/server.py,sha256=p_wYc6KtRF0X-AogrI4R5mGZT9Hy0BBFe2Ulhbi9mw0,21045
291
291
  mlrun/serving/serving_wrapper.py,sha256=R670-S6PX_d5ER6jiHtRvacuPyFzQH0mEf2K0sBIIOM,836
292
- mlrun/serving/states.py,sha256=zMHDtipfIdpvspEOKDgB6skr4Zhxfgn-YTeTm03Gbes,55651
292
+ mlrun/serving/states.py,sha256=6dZCVt5WZ1bfqWDrK-aOj9GP3cZJc9IwmxLA5mpx7JU,55222
293
293
  mlrun/serving/utils.py,sha256=WO0n_YTO0YVPTjp_90zxRl4vey4flDgw5vaOHK5p_qY,3871
294
294
  mlrun/serving/v1_serving.py,sha256=by4myxlnwyZ0ijQ5fURilGCK1sUpdQL2Il1VR3Xqpxg,11805
295
295
  mlrun/serving/v2_serving.py,sha256=3Nx_-Cbgsr4ch5O2S5QYoWIbpydN-QInET_2-BtbSBM,23631
@@ -319,14 +319,14 @@ mlrun/utils/notifications/notification/base.py,sha256=sq6ICoboUeVwNPhMenaTFDEFnu
319
319
  mlrun/utils/notifications/notification/console.py,sha256=MAVk7v5PJ52vdGRv76YcEPixWgV0licBPWGpR01uR40,2643
320
320
  mlrun/utils/notifications/notification/git.py,sha256=ELZ-ZmbFDb39A0OUIhtvuSbqJoVfF_o_IOxMD5eBlv4,5351
321
321
  mlrun/utils/notifications/notification/ipython.py,sha256=ZtVL30B_Ha0VGoo4LxO-voT1U41IYwyytovv5X_LsI4,2066
322
- mlrun/utils/notifications/notification/slack.py,sha256=sLuSPOZmipVHnvzjljE3WBY1ejvmEiiRpvK4NCD61Z8,5112
323
- mlrun/utils/notifications/notification/webhook.py,sha256=zy9QfcyfKrWs9O-0oHfMv3rTkykdAJErJhkyvMapk4U,2743
322
+ mlrun/utils/notifications/notification/slack.py,sha256=1-_lQ6GnSFMMOKMcVrvfd6LgbKJ22vhkBV92ZUzRsV8,5286
323
+ mlrun/utils/notifications/notification/webhook.py,sha256=m6q7zhIUPjqzHwYXOQf_SjRXB7vQ5snE__gTHP9gRU8,2748
324
324
  mlrun/utils/version/__init__.py,sha256=7kkrB7hEZ3cLXoWj1kPoDwo4MaswsI2JVOBpbKgPAgc,614
325
- mlrun/utils/version/version.json,sha256=A6S811gmxo7SQcH_OY0pDL-vOEfDDrzxfWFyR6MtaLo,89
325
+ mlrun/utils/version/version.json,sha256=-jcRFJhvdBZzvie_QvhQm7zYeqjbPb1wo9f24sGuhSM,89
326
326
  mlrun/utils/version/version.py,sha256=eEW0tqIAkU9Xifxv8Z9_qsYnNhn3YH7NRAfM-pPLt1g,1878
327
- mlrun-1.7.0rc11.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
328
- mlrun-1.7.0rc11.dist-info/METADATA,sha256=rt_AmMM_Y4a8Yfzs6_oCffbI1KIkyIepXLMNspMs2VY,18800
329
- mlrun-1.7.0rc11.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
330
- mlrun-1.7.0rc11.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
331
- mlrun-1.7.0rc11.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
332
- mlrun-1.7.0rc11.dist-info/RECORD,,
327
+ mlrun-1.7.0rc13.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
328
+ mlrun-1.7.0rc13.dist-info/METADATA,sha256=ngG2rsX5doAJG3DNh889Yih1WjSl4uXqTXqkmK06P74,18800
329
+ mlrun-1.7.0rc13.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
330
+ mlrun-1.7.0rc13.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
331
+ mlrun-1.7.0rc13.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
332
+ mlrun-1.7.0rc13.dist-info/RECORD,,