mlrun 1.7.0rc28__py3-none-any.whl → 1.7.0rc30__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.

Files changed (34) hide show
  1. mlrun/common/constants.py +1 -1
  2. mlrun/common/formatters/artifact.py +1 -0
  3. mlrun/common/schemas/model_monitoring/__init__.py +1 -0
  4. mlrun/common/schemas/model_monitoring/constants.py +11 -1
  5. mlrun/common/schemas/project.py +1 -0
  6. mlrun/config.py +13 -5
  7. mlrun/datastore/base.py +17 -12
  8. mlrun/datastore/inmem.py +1 -1
  9. mlrun/datastore/targets.py +4 -10
  10. mlrun/db/base.py +1 -0
  11. mlrun/db/httpdb.py +2 -0
  12. mlrun/db/nopdb.py +1 -0
  13. mlrun/launcher/local.py +2 -2
  14. mlrun/model.py +11 -2
  15. mlrun/model_monitoring/api.py +3 -3
  16. mlrun/model_monitoring/applications/histogram_data_drift.py +4 -1
  17. mlrun/model_monitoring/db/stores/__init__.py +7 -2
  18. mlrun/model_monitoring/db/stores/sqldb/models/base.py +9 -7
  19. mlrun/model_monitoring/db/stores/sqldb/models/mysql.py +4 -2
  20. mlrun/model_monitoring/db/tsdb/__init__.py +6 -1
  21. mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +0 -1
  22. mlrun/projects/operations.py +1 -0
  23. mlrun/run.py +1 -1
  24. mlrun/runtimes/base.py +1 -1
  25. mlrun/runtimes/local.py +8 -4
  26. mlrun/utils/helpers.py +10 -1
  27. mlrun/utils/notifications/notification_pusher.py +1 -1
  28. mlrun/utils/version/version.json +2 -2
  29. {mlrun-1.7.0rc28.dist-info → mlrun-1.7.0rc30.dist-info}/METADATA +4 -4
  30. {mlrun-1.7.0rc28.dist-info → mlrun-1.7.0rc30.dist-info}/RECORD +34 -34
  31. {mlrun-1.7.0rc28.dist-info → mlrun-1.7.0rc30.dist-info}/WHEEL +1 -1
  32. {mlrun-1.7.0rc28.dist-info → mlrun-1.7.0rc30.dist-info}/LICENSE +0 -0
  33. {mlrun-1.7.0rc28.dist-info → mlrun-1.7.0rc30.dist-info}/entry_points.txt +0 -0
  34. {mlrun-1.7.0rc28.dist-info → mlrun-1.7.0rc30.dist-info}/top_level.txt +0 -0
mlrun/common/constants.py CHANGED
@@ -11,7 +11,6 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
- #
15
14
 
16
15
  IMAGE_NAME_ENRICH_REGISTRY_PREFIX = "." # prefix for image name to enrich with registry
17
16
  MLRUN_SERVING_CONF = "serving-conf"
@@ -70,6 +69,7 @@ class MLRunInternalLabels:
70
69
  job_type = "job-type"
71
70
  kind = "kind"
72
71
  component = "component"
72
+ mlrun_type = "mlrun__type"
73
73
 
74
74
  owner = "owner"
75
75
  v3io_user = "v3io_user"
@@ -37,6 +37,7 @@ class ArtifactFormat(ObjectFormat, mlrun.common.types.StrEnum):
37
37
  "spec.db_key",
38
38
  "spec.size",
39
39
  "spec.framework",
40
+ "spec.algorithm",
40
41
  "spec.metrics",
41
42
  "spec.target_path",
42
43
  ]
@@ -25,6 +25,7 @@ from .constants import (
25
25
  FunctionURI,
26
26
  MetricData,
27
27
  ModelEndpointTarget,
28
+ ModelEndpointTargetSchemas,
28
29
  ModelMonitoringMode,
29
30
  ModelMonitoringStoreKinds,
30
31
  MonitoringFunctionNames,
@@ -17,6 +17,7 @@ from dataclasses import dataclass
17
17
  from enum import Enum, IntEnum
18
18
  from typing import Optional
19
19
 
20
+ import mlrun.common.constants
20
21
  import mlrun.common.helpers
21
22
  from mlrun.common.types import StrEnum
22
23
 
@@ -187,6 +188,12 @@ class ProjectSecretKeys:
187
188
  ]
188
189
 
189
190
 
191
+ class ModelEndpointTargetSchemas(MonitoringStrEnum):
192
+ V3IO = "v3io"
193
+ MYSQL = "mysql"
194
+ SQLITE = "sqlite"
195
+
196
+
190
197
  class ModelMonitoringStoreKinds:
191
198
  ENDPOINTS = "endpoints"
192
199
  EVENTS = "events"
@@ -348,7 +355,7 @@ class ResultStatusApp(IntEnum):
348
355
 
349
356
 
350
357
  class ModelMonitoringAppLabel:
351
- KEY = "mlrun__type"
358
+ KEY = mlrun.common.constants.MLRunInternalLabels.mlrun_type
352
359
  VAL = "mlrun__model-monitoring-application"
353
360
 
354
361
  def __str__(self) -> str:
@@ -371,3 +378,6 @@ class PredictionsQueryConstants:
371
378
 
372
379
  class SpecialApps:
373
380
  MLRUN_INFRA = "mlrun-infra"
381
+
382
+
383
+ _RESERVED_FUNCTION_NAMES = MonitoringFunctionNames.list() + [SpecialApps.MLRUN_INFRA]
@@ -126,6 +126,7 @@ class ProjectSummary(pydantic.BaseModel):
126
126
  pipelines_completed_recent_count: typing.Optional[int] = None
127
127
  pipelines_failed_recent_count: typing.Optional[int] = None
128
128
  pipelines_running_count: typing.Optional[int] = None
129
+ updated: typing.Optional[datetime.datetime] = None
129
130
 
130
131
 
131
132
  class IguazioProject(pydantic.BaseModel):
mlrun/config.py CHANGED
@@ -64,11 +64,15 @@ default_config = {
64
64
  "api_base_version": "v1",
65
65
  "version": "", # will be set to current version
66
66
  "images_tag": "", # tag to use with mlrun images e.g. mlrun/mlrun (defaults to version)
67
- "images_registry": "", # registry to use with mlrun images e.g. quay.io/ (defaults to empty, for dockerhub)
67
+ # registry to use with mlrun images that start with "mlrun/" e.g. quay.io/ (defaults to empty, for dockerhub)
68
+ "images_registry": "",
69
+ # registry to use with non-mlrun images (don't start with "mlrun/") specified in 'images_to_enrich_registry'
70
+ # defaults to empty, for dockerhub
71
+ "vendor_images_registry": "",
68
72
  # comma separated list of images that are in the specified images_registry, and therefore will be enriched with this
69
73
  # registry when used. default to mlrun/* which means any image which is of the mlrun repository (mlrun/mlrun,
70
74
  # mlrun/ml-base, etc...)
71
- "images_to_enrich_registry": "^mlrun/*",
75
+ "images_to_enrich_registry": "^mlrun/*,python:3.9",
72
76
  "kfp_url": "",
73
77
  "kfp_ttl": "14400", # KFP ttl in sec, after that completed PODs will be deleted
74
78
  "kfp_image": "mlrun/mlrun", # image to use for KFP runner (defaults to mlrun/mlrun)
@@ -104,7 +108,12 @@ default_config = {
104
108
  # max number of parallel abort run jobs in runs monitoring
105
109
  "concurrent_abort_stale_runs_workers": 10,
106
110
  "list_runs_time_period_in_days": 7, # days
107
- }
111
+ },
112
+ "projects": {
113
+ "summaries": {
114
+ "cache_interval": "30",
115
+ },
116
+ },
108
117
  },
109
118
  "crud": {
110
119
  "runs": {
@@ -250,7 +259,7 @@ default_config = {
250
259
  "remote": "mlrun/mlrun",
251
260
  "dask": "mlrun/ml-base",
252
261
  "mpijob": "mlrun/mlrun",
253
- "application": "python:3.9-slim",
262
+ "application": "python:3.9",
254
263
  },
255
264
  # see enrich_function_preemption_spec for more info,
256
265
  # and mlrun.common.schemas.function.PreemptionModes for available options
@@ -433,7 +442,6 @@ default_config = {
433
442
  "followers": "",
434
443
  # This is used as the interval for the sync loop both when mlrun is leader and follower
435
444
  "periodic_sync_interval": "1 minute",
436
- "counters_cache_ttl": "2 minutes",
437
445
  "project_owners_cache_ttl": "30 seconds",
438
446
  # access key to be used when the leader is iguazio and polling is done from it
439
447
  "iguazio_access_key": "",
mlrun/datastore/base.py CHANGED
@@ -215,6 +215,11 @@ class DataStore:
215
215
  raise mlrun.errors.MLRunInvalidArgumentError(
216
216
  "When providing start_time or end_time, must provide time_column"
217
217
  )
218
+ if start_time and end_time and start_time.tzinfo != end_time.tzinfo:
219
+ raise mlrun.errors.MLRunInvalidArgumentError(
220
+ "start_time and end_time must have the same time zone"
221
+ )
222
+
218
223
  if start_time or end_time or additional_filters:
219
224
  partitions_time_attributes = find_partitions(url, file_system)
220
225
  set_filters(
@@ -232,13 +237,17 @@ class DataStore:
232
237
  ):
233
238
  raise ex
234
239
 
235
- # TODO: fix timezone issue (ML-6308)
236
- if start_time.tzinfo:
237
- start_time_inner = start_time.replace(tzinfo=None)
238
- end_time_inner = end_time.replace(tzinfo=None)
239
- else:
240
- start_time_inner = start_time.replace(tzinfo=pytz.utc)
241
- end_time_inner = end_time.replace(tzinfo=pytz.utc)
240
+ start_time_inner = None
241
+ if start_time:
242
+ start_time_inner = start_time.replace(
243
+ tzinfo=None if start_time.tzinfo else pytz.utc
244
+ )
245
+
246
+ end_time_inner = None
247
+ if end_time:
248
+ end_time_inner = end_time.replace(
249
+ tzinfo=None if end_time.tzinfo else pytz.utc
250
+ )
242
251
 
243
252
  set_filters(
244
253
  partitions_time_attributes,
@@ -319,11 +328,7 @@ class DataStore:
319
328
  dfs.append(df_module.read_csv(*updated_args, **kwargs))
320
329
  return df_module.concat(dfs)
321
330
 
322
- elif (
323
- file_url.endswith(".parquet")
324
- or file_url.endswith(".pq")
325
- or format == "parquet"
326
- ):
331
+ elif mlrun.utils.helpers.is_parquet_file(file_url, format):
327
332
  if columns:
328
333
  kwargs["columns"] = columns
329
334
 
mlrun/datastore/inmem.py CHANGED
@@ -72,7 +72,7 @@ class InMemoryStore(DataStore):
72
72
  if columns:
73
73
  kwargs["usecols"] = columns
74
74
  reader = df_module.read_csv
75
- elif url.endswith(".parquet") or url.endswith(".pq") or format == "parquet":
75
+ elif mlrun.utils.helpers.is_parquet_file(url, format):
76
76
  if columns:
77
77
  kwargs["columns"] = columns
78
78
  reader = df_module.read_parquet
@@ -549,9 +549,7 @@ class BaseStoreTarget(DataTargetBase):
549
549
  os.makedirs(dir, exist_ok=True)
550
550
  target_df = df
551
551
  partition_cols = None # single parquet file
552
- if not target_path.endswith(".parquet") and not target_path.endswith(
553
- ".pq"
554
- ): # directory
552
+ if not mlrun.utils.helpers.is_parquet_file(target_path): # directory
555
553
  partition_cols = []
556
554
  if timestamp_key and (
557
555
  self.partitioned or self.time_partitioning_granularity
@@ -918,10 +916,8 @@ class ParquetTarget(BaseStoreTarget):
918
916
  if time_unit == time_partitioning_granularity:
919
917
  break
920
918
 
921
- if (
922
- not self.partitioned
923
- and not self.get_target_path().endswith(".parquet")
924
- and not self.get_target_path().endswith(".pq")
919
+ if not self.partitioned and not mlrun.utils.helpers.is_parquet_file(
920
+ self.get_target_path()
925
921
  ):
926
922
  partition_cols = []
927
923
 
@@ -1040,9 +1036,7 @@ class ParquetTarget(BaseStoreTarget):
1040
1036
  return result
1041
1037
 
1042
1038
  def is_single_file(self):
1043
- if self.path:
1044
- return self.path.endswith(".parquet") or self.path.endswith(".pq")
1045
- return False
1039
+ return mlrun.utils.helpers.is_parquet_file(self.path)
1046
1040
 
1047
1041
  def prepare_spark_df(self, df, key_columns, timestamp_key=None, spark_options=None):
1048
1042
  # If partitioning by time, add the necessary columns
mlrun/db/base.py CHANGED
@@ -154,6 +154,7 @@ class RunDBInterface(ABC):
154
154
  mlrun.common.schemas.artifact.ArtifactsDeletionStrategies.metadata_only
155
155
  ),
156
156
  secrets: dict = None,
157
+ iter=None,
157
158
  ):
158
159
  pass
159
160
 
mlrun/db/httpdb.py CHANGED
@@ -1033,6 +1033,7 @@ class HTTPRunDB(RunDBInterface):
1033
1033
  mlrun.common.schemas.artifact.ArtifactsDeletionStrategies.metadata_only
1034
1034
  ),
1035
1035
  secrets: dict = None,
1036
+ iter=None,
1036
1037
  ):
1037
1038
  """Delete an artifact.
1038
1039
 
@@ -1051,6 +1052,7 @@ class HTTPRunDB(RunDBInterface):
1051
1052
  "tag": tag,
1052
1053
  "tree": tree,
1053
1054
  "uid": uid,
1055
+ "iter": iter,
1054
1056
  "deletion_strategy": deletion_strategy,
1055
1057
  }
1056
1058
  error = f"del artifact {project}/{key}"
mlrun/db/nopdb.py CHANGED
@@ -162,6 +162,7 @@ class NopDB(RunDBInterface):
162
162
  mlrun.common.schemas.artifact.ArtifactsDeletionStrategies.metadata_only
163
163
  ),
164
164
  secrets: dict = None,
165
+ iter=None,
165
166
  ):
166
167
  pass
167
168
 
mlrun/launcher/local.py CHANGED
@@ -72,9 +72,9 @@ class ClientLocalLauncher(launcher.ClientBaseLauncher):
72
72
  reset_on_run: Optional[bool] = None,
73
73
  ) -> "mlrun.run.RunObject":
74
74
  # do not allow local function to be scheduled
75
- if self._is_run_local and schedule is not None:
75
+ if schedule is not None:
76
76
  raise mlrun.errors.MLRunInvalidArgumentError(
77
- "local and schedule cannot be used together"
77
+ f"Unexpected {schedule=} parameter for local function execution"
78
78
  )
79
79
 
80
80
  self.enrich_runtime(runtime, project)
mlrun/model.py CHANGED
@@ -737,8 +737,17 @@ class Notification(ModelObj):
737
737
  self.kind
738
738
  ).get_notification()
739
739
 
740
- secret_params = self.secret_params
741
- params = self.params
740
+ secret_params = self.secret_params or {}
741
+ params = self.params or {}
742
+
743
+ # if the secret_params are already masked - no need to validate
744
+ params_secret = secret_params.get("secret", "")
745
+ if params_secret:
746
+ if len(secret_params) > 1:
747
+ raise mlrun.errors.MLRunInvalidArgumentError(
748
+ "When the 'secret' key is present, 'secret_params' should not contain any other keys."
749
+ )
750
+ return
742
751
 
743
752
  if not secret_params and not params:
744
753
  raise mlrun.errors.MLRunInvalidArgumentError(
@@ -569,10 +569,10 @@ def _create_model_monitoring_function_base(
569
569
  "please use `ModelMonitoringApplicationBaseV2`. It will be removed in 1.9.0.",
570
570
  FutureWarning,
571
571
  )
572
- if name in mm_constants.MonitoringFunctionNames.list():
572
+ if name in mm_constants._RESERVED_FUNCTION_NAMES:
573
573
  raise mlrun.errors.MLRunInvalidArgumentError(
574
- f"An application cannot have the following names: "
575
- f"{mm_constants.MonitoringFunctionNames.list()}"
574
+ "An application cannot have the following names: "
575
+ f"{mm_constants._RESERVED_FUNCTION_NAMES}"
576
576
  )
577
577
  if func is None:
578
578
  func = ""
@@ -195,7 +195,10 @@ class HistogramDataDriftApplication(ModelMonitoringApplicationBaseV2):
195
195
  EventFieldType.CURRENT_STATS: json.dumps(
196
196
  monitoring_context.sample_df_stats
197
197
  ),
198
- EventFieldType.DRIFT_MEASURES: metrics_per_feature.T.to_json(),
198
+ EventFieldType.DRIFT_MEASURES: json.dumps(
199
+ metrics_per_feature.T.to_dict()
200
+ | {metric.name: metric.value for metric in metrics}
201
+ ),
199
202
  EventFieldType.DRIFT_STATUS: status.value,
200
203
  },
201
204
  )
@@ -100,7 +100,9 @@ def get_store_object(
100
100
  :param store_connection_string: Optional explicit connection string of the store.
101
101
 
102
102
  :return: `StoreBase` object. Using this object, the user can apply different operations such as write, update, get
103
- and delete a model endpoint record.
103
+ and delete a model endpoint record.
104
+ :raise: `MLRunInvalidMMStoreType` if the user didn't provide store connection
105
+ or the provided store connection is invalid.
104
106
  """
105
107
 
106
108
  store_connection_string = (
@@ -121,7 +123,10 @@ def get_store_object(
121
123
  mlrun.common.schemas.model_monitoring.ModelEndpointTarget.V3IO_NOSQL
122
124
  )
123
125
  else:
124
- store_type = None
126
+ raise mlrun.errors.MLRunInvalidMMStoreType(
127
+ "You must provide a valid store connection by using "
128
+ "set_model_monitoring_credentials API."
129
+ )
125
130
  # Get store type value from ObjectStoreFactory enum class
126
131
  store_type_fact = ObjectStoreFactory(store_type)
127
132
 
@@ -11,8 +11,10 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
+
14
15
  from sqlalchemy import (
15
- TIMESTAMP,
16
+ DATETIME,
17
+ TIMESTAMP, # TODO: migrate to DATETIME, see ML-6921
16
18
  Boolean,
17
19
  Column,
18
20
  Float,
@@ -90,11 +92,11 @@ class ModelEndpointsBaseTable(BaseModel):
90
92
  metrics = Column(EventFieldType.METRICS, Text)
91
93
  first_request = Column(
92
94
  EventFieldType.FIRST_REQUEST,
93
- TIMESTAMP(timezone=True),
95
+ TIMESTAMP(timezone=True), # TODO: migrate to DATETIME, see ML-6921
94
96
  )
95
97
  last_request = Column(
96
98
  EventFieldType.LAST_REQUEST,
97
- TIMESTAMP(timezone=True),
99
+ TIMESTAMP(timezone=True), # TODO: migrate to DATETIME, see ML-6921
98
100
  )
99
101
 
100
102
 
@@ -122,11 +124,11 @@ class ApplicationResultBaseTable(BaseModel):
122
124
 
123
125
  start_infer_time = Column(
124
126
  WriterEvent.START_INFER_TIME,
125
- TIMESTAMP(timezone=True),
127
+ DATETIME(timezone=True),
126
128
  )
127
129
  end_infer_time = Column(
128
130
  WriterEvent.END_INFER_TIME,
129
- TIMESTAMP(timezone=True),
131
+ DATETIME(timezone=True),
130
132
  )
131
133
 
132
134
  result_status = Column(ResultData.RESULT_STATUS, String(10))
@@ -152,11 +154,11 @@ class ApplicationMetricsBaseTable(BaseModel):
152
154
  )
153
155
  start_infer_time = Column(
154
156
  WriterEvent.START_INFER_TIME,
155
- TIMESTAMP(timezone=True),
157
+ DATETIME(timezone=True),
156
158
  )
157
159
  end_infer_time = Column(
158
160
  WriterEvent.END_INFER_TIME,
159
- TIMESTAMP(timezone=True),
161
+ DATETIME(timezone=True),
160
162
  )
161
163
  metric_name = Column(
162
164
  MetricData.METRIC_NAME,
@@ -34,10 +34,12 @@ Base = declarative_base()
34
34
  class ModelEndpointsTable(Base, ModelEndpointsBaseTable):
35
35
  first_request = Column(
36
36
  EventFieldType.FIRST_REQUEST,
37
+ # TODO: migrate to DATETIME, see ML-6921
37
38
  sqlalchemy.dialects.mysql.TIMESTAMP(fsp=3, timezone=True),
38
39
  )
39
40
  last_request = Column(
40
41
  EventFieldType.LAST_REQUEST,
42
+ # TODO: migrate to DATETIME, see ML-6921
41
43
  sqlalchemy.dialects.mysql.TIMESTAMP(fsp=3, timezone=True),
42
44
  )
43
45
 
@@ -52,11 +54,11 @@ class _ApplicationResultOrMetric:
52
54
 
53
55
  start_infer_time = Column(
54
56
  WriterEvent.START_INFER_TIME,
55
- sqlalchemy.dialects.mysql.TIMESTAMP(fsp=3, timezone=True),
57
+ sqlalchemy.dialects.mysql.DATETIME(fsp=3, timezone=True),
56
58
  )
57
59
  end_infer_time = Column(
58
60
  WriterEvent.END_INFER_TIME,
59
- sqlalchemy.dialects.mysql.TIMESTAMP(fsp=3, timezone=True),
61
+ sqlalchemy.dialects.mysql.DATETIME(fsp=3, timezone=True),
60
62
  )
61
63
 
62
64
  @declared_attr
@@ -76,6 +76,8 @@ def get_tsdb_connector(
76
76
 
77
77
  :return: `TSDBConnector` object. The main goal of this object is to handle different operations on the
78
78
  TSDB connector such as updating drift metrics or write application record result.
79
+ :raise: `MLRunInvalidMMStoreType` if the user didn't provide TSDB connection
80
+ or the provided TSDB connection is invalid.
79
81
  """
80
82
 
81
83
  tsdb_connection_string = (
@@ -91,7 +93,10 @@ def get_tsdb_connector(
91
93
  elif tsdb_connection_string and tsdb_connection_string == "v3io":
92
94
  tsdb_connector_type = mlrun.common.schemas.model_monitoring.TSDBTarget.V3IO_TSDB
93
95
  else:
94
- tsdb_connector_type = None
96
+ raise mlrun.errors.MLRunInvalidMMStoreType(
97
+ "You must provide a valid tsdb store connection by using "
98
+ "set_model_monitoring_credentials API."
99
+ )
95
100
 
96
101
  # Get connector type value from ObjectTSDBFactory enum class
97
102
  tsdb_connector_factory = ObjectTSDBFactory(tsdb_connector_type)
@@ -599,7 +599,6 @@ class V3IOTSDBConnector(TSDBConnector):
599
599
  end=end,
600
600
  columns=[mm_schemas.EventFieldType.LATENCY],
601
601
  filter_query=f"endpoint_id=='{endpoint_id}'",
602
- interval=aggregation_window,
603
602
  agg_funcs=agg_funcs,
604
603
  sliding_window_step=aggregation_window,
605
604
  )
@@ -330,6 +330,7 @@ def build_function(
330
330
  commands=commands,
331
331
  secret=secret_name,
332
332
  requirements=requirements,
333
+ requirements_file=requirements_file,
333
334
  overwrite=overwrite_build_params,
334
335
  extra_args=extra_args,
335
336
  )
mlrun/run.py CHANGED
@@ -639,7 +639,7 @@ def code_to_function(
639
639
  :param requirements: a list of python packages
640
640
  :param requirements_file: path to a python requirements file
641
641
  :param categories: list of categories for mlrun Function Hub, defaults to None
642
- :param labels: immutable name/value pairs to tag the function with useful metadata, defaults to None
642
+ :param labels: name/value pairs dict to tag the function with useful metadata, defaults to None
643
643
  :param with_doc: indicates whether to document the function parameters, defaults to True
644
644
  :param ignored_tags: notebook cells to ignore when converting notebooks to py code (separated by ';')
645
645
 
mlrun/runtimes/base.py CHANGED
@@ -674,7 +674,7 @@ class BaseRuntime(ModelObj):
674
674
  selector="",
675
675
  hyper_param_options: HyperParamOptions = None,
676
676
  inputs: dict = None,
677
- outputs: dict = None,
677
+ outputs: list = None,
678
678
  workdir: str = "",
679
679
  artifact_path: str = "",
680
680
  image: str = "",
mlrun/runtimes/local.py CHANGED
@@ -58,7 +58,9 @@ class ParallelRunner:
58
58
 
59
59
  return TrackerManager()
60
60
 
61
- def _get_handler(self, handler, context):
61
+ def _get_handler(
62
+ self, handler: str, context: MLClientCtx, embed_in_sys: bool = True
63
+ ):
62
64
  return handler
63
65
 
64
66
  def _get_dask_client(self, options):
@@ -86,7 +88,7 @@ class ParallelRunner:
86
88
  handler = runobj.spec.handler
87
89
  self._force_handler(handler)
88
90
  set_paths(self.spec.pythonpath)
89
- handler = self._get_handler(handler, execution)
91
+ handler = self._get_handler(handler, execution, embed_in_sys=False)
90
92
 
91
93
  client, function_name = self._get_dask_client(generator.options)
92
94
  parallel_runs = generator.options.parallel_runs or 4
@@ -224,12 +226,14 @@ class LocalRuntime(BaseRuntime, ParallelRunner):
224
226
  def is_deployed(self):
225
227
  return True
226
228
 
227
- def _get_handler(self, handler, context):
229
+ def _get_handler(
230
+ self, handler: str, context: MLClientCtx, embed_in_sys: bool = True
231
+ ):
228
232
  command = self.spec.command
229
233
  if not command and self.spec.build.functionSourceCode:
230
234
  # if the code is embedded in the function object extract or find it
231
235
  command, _ = mlrun.run.load_func_code(self)
232
- return load_module(command, handler, context)
236
+ return load_module(command, handler, context, embed_in_sys=embed_in_sys)
233
237
 
234
238
  def _pre_run(self, runobj: RunObject, execution: MLClientCtx):
235
239
  workdir = self.spec.workdir
mlrun/utils/helpers.py CHANGED
@@ -819,7 +819,6 @@ def enrich_image_url(
819
819
  tag += resolve_image_tag_suffix(
820
820
  mlrun_version=mlrun_version, python_version=client_python_version
821
821
  )
822
- registry = config.images_registry
823
822
 
824
823
  # it's an mlrun image if the repository is mlrun
825
824
  is_mlrun_image = image_url.startswith("mlrun/") or "/mlrun/" in image_url
@@ -827,6 +826,10 @@ def enrich_image_url(
827
826
  if is_mlrun_image and tag and ":" not in image_url:
828
827
  image_url = f"{image_url}:{tag}"
829
828
 
829
+ registry = (
830
+ config.images_registry if is_mlrun_image else config.vendor_images_registry
831
+ )
832
+
830
833
  enrich_registry = False
831
834
  # enrich registry only if images_to_enrich_registry provided
832
835
  # example: "^mlrun/*" means enrich only if the image repository is mlrun and registry is not specified (in which
@@ -1698,6 +1701,12 @@ def format_alert_summary(
1698
1701
  return result
1699
1702
 
1700
1703
 
1704
+ def is_parquet_file(file_path, format_=None):
1705
+ return (file_path and file_path.endswith((".parquet", ".pq"))) or (
1706
+ format_ == "parquet"
1707
+ )
1708
+
1709
+
1701
1710
  def _reload(module, max_recursion_depth):
1702
1711
  """Recursively reload modules."""
1703
1712
  if max_recursion_depth <= 0:
@@ -484,7 +484,7 @@ class NotificationPusher(_NotificationPusherBase):
484
484
  def _get_workflow_manifest(
485
485
  workflow_id: str,
486
486
  ) -> typing.Optional[mlrun_pipelines.models.PipelineManifest]:
487
- kfp_client = mlrun_pipelines.utils.get_client(mlrun.mlconf)
487
+ kfp_client = mlrun_pipelines.utils.get_client(mlrun.mlconf.kfp_url)
488
488
 
489
489
  # arbitrary timeout of 5 seconds, the workflow should be done by now
490
490
  kfp_run = kfp_client.wait_for_run_completion(workflow_id, 5)
@@ -1,4 +1,4 @@
1
1
  {
2
- "git_commit": "71818c39b83a7e8c396aa2c37f1cd4f3e192dd2f",
3
- "version": "1.7.0-rc28"
2
+ "git_commit": "2ee0dccf5b2439fd82f6ff80d51479bfd27d076d",
3
+ "version": "1.7.0-rc30"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mlrun
3
- Version: 1.7.0rc28
3
+ Version: 1.7.0rc30
4
4
  Summary: Tracking and config of machine learning runs
5
5
  Home-page: https://github.com/mlrun/mlrun
6
6
  Author: Yaron Haviv
@@ -35,7 +35,7 @@ Requires-Dist: pyarrow <15,>=10.0
35
35
  Requires-Dist: pyyaml <7,>=5.4.1
36
36
  Requires-Dist: requests ~=2.31
37
37
  Requires-Dist: tabulate ~=0.8.6
38
- Requires-Dist: v3io ~=0.6.4
38
+ Requires-Dist: v3io ~=0.6.6
39
39
  Requires-Dist: pydantic <1.10.15,>=1.10.8
40
40
  Requires-Dist: mergedeep ~=1.3
41
41
  Requires-Dist: v3io-frames ~=0.10.14
@@ -50,8 +50,8 @@ Requires-Dist: setuptools ~=69.1
50
50
  Requires-Dist: deprecated ~=1.2
51
51
  Requires-Dist: jinja2 >=3.1.3,~=3.1
52
52
  Requires-Dist: orjson <4,>=3.9.15
53
- Requires-Dist: mlrun-pipelines-kfp-common ~=0.1.2
54
- Requires-Dist: mlrun-pipelines-kfp-v1-8 ~=0.1.2
53
+ Requires-Dist: mlrun-pipelines-kfp-common ~=0.1.3
54
+ Requires-Dist: mlrun-pipelines-kfp-v1-8 ~=0.1.3
55
55
  Provides-Extra: alibaba-oss
56
56
  Requires-Dist: ossfs ==2023.12.0 ; extra == 'alibaba-oss'
57
57
  Requires-Dist: oss2 ==2.18.1 ; extra == 'alibaba-oss'
@@ -1,14 +1,14 @@
1
1
  mlrun/__init__.py,sha256=y08M1JcKXy5-9_5WaI9fn5aV5BxIQ5QkbduJK0OxWbA,7470
2
2
  mlrun/__main__.py,sha256=iAifncsrQQx6ozXXmz7GH1OiNl8PA7KS3TnwlxnHGeo,45890
3
- mlrun/config.py,sha256=Enps-X55Q-I7-9YUyed8Z-ymAsfTqLbLzRj5O1a-97Q,64834
3
+ mlrun/config.py,sha256=a7Z_OWF9X4nw61l0ZElFEG95RnpwXCb2SQziHivm4L8,65123
4
4
  mlrun/errors.py,sha256=VpC_imeSz2twRMZZb7u90Zj29z6aO-tCxUHD3ZA_Axw,7465
5
5
  mlrun/execution.py,sha256=StasIZWmnbRjXDn5d7VU6DWu1fs_AJQckSiUKlSYL9M,42021
6
6
  mlrun/features.py,sha256=m17K_3l9Jktwb9dOwlHLTAPTlemsWrRF7dJhXUX0iJU,15429
7
7
  mlrun/k8s_utils.py,sha256=WdUajadvAhTR7sAMQdwFqKeJMimuTyqm02VdwK1A4xU,7023
8
8
  mlrun/lists.py,sha256=3PqBdcajdwhTe1XuFsAaHTuFVM2kjwepf31qqE82apg,8384
9
- mlrun/model.py,sha256=CVjeHf2-dhJM4C6H0m_zDogr8Dsj2RLFiuGXKTDGSvo,73036
9
+ mlrun/model.py,sha256=rkwDmPyg0Q8ZUTaOCNthyf-wsmTHNa4QG_hPyMVm-GQ,73448
10
10
  mlrun/render.py,sha256=n8SeY3ogVrsV02-7-H0lt1RmpkxGpbI-11RQx61Vq9E,13267
11
- mlrun/run.py,sha256=kFbSzHjJEMTtaUYIWWztlKdKpFDRINnbFlR-HFZT_O8,42891
11
+ mlrun/run.py,sha256=mSRHCmya2q8rK9Hs6iVKcV2ek9k2ULckVuVHViYQZUo,42886
12
12
  mlrun/secrets.py,sha256=ibtCK79u7JVBZF6F0SP1-xXXF5MyrLEUs_TCWiJAnlc,7798
13
13
  mlrun/alerts/__init__.py,sha256=0gtG1BG0DXxFrXegIkjbM1XEN4sP9ODo0ucXrNld1hU,601
14
14
  mlrun/alerts/alert.py,sha256=JJfMFF-o0j8oTAIkyXAQG0YbU-kZlIDl0A8ILQi8vfA,6510
@@ -20,14 +20,14 @@ mlrun/artifacts/manager.py,sha256=I_1mgQ0M8j9JgryFJsB2yN3Pv47oQM6Jfg1fotTPDX0,15
20
20
  mlrun/artifacts/model.py,sha256=ObUkqFMejYOtq0CDFdpYwzwhQ5bsHv0dHTysuVPJnbs,21102
21
21
  mlrun/artifacts/plots.py,sha256=dS0mHGt1b20tN2JyEH9H5o5I0oMKZkzn3Uz_3Hf4WjU,4813
22
22
  mlrun/common/__init__.py,sha256=xY3wHC4TEJgez7qtnn1pQvHosi8-5UJOCtyGBS7FcGE,571
23
- mlrun/common/constants.py,sha256=Qfuw2qJdBANp54A3OdKtbUWcQEQeATL9-qLVBhuwGBk,3023
23
+ mlrun/common/constants.py,sha256=MdXxRPquVguW98WCnEUcJ9A46MOo-MrafFTk7QOK8BA,3052
24
24
  mlrun/common/helpers.py,sha256=LRIULbCg8afKkPnzsZ99-B-JPVjcwR1G9vO--1rzRrQ,1387
25
25
  mlrun/common/secrets.py,sha256=vc8WV82EZsCB5ENjUkObFOzZP59aZ1w8F82PTnqwBnc,5181
26
26
  mlrun/common/types.py,sha256=cs8AtoI6LSuf2LF5Hg2ZSQ0QTex5_KqVSmNAU8_rnlk,1037
27
27
  mlrun/common/db/__init__.py,sha256=xY3wHC4TEJgez7qtnn1pQvHosi8-5UJOCtyGBS7FcGE,571
28
28
  mlrun/common/db/sql_session.py,sha256=Znc8KE2oLy4lg3_vRki1sVlNx59TgDSOTCXfU561hBU,2659
29
29
  mlrun/common/formatters/__init__.py,sha256=91yPb5xoLK7fTIOC5C7ndJMvyEBlQY6f0CjenLYbsZw,785
30
- mlrun/common/formatters/artifact.py,sha256=rwMSedrkcNz6XVHhyuxVqfFTnHNrT2XU8hg42VVKvwE,1363
30
+ mlrun/common/formatters/artifact.py,sha256=t4LmoWCFjPJ_YzzQCC2aMJwOeeLi84le979m6OTRyoM,1401
31
31
  mlrun/common/formatters/base.py,sha256=LHwWWnQJCmvlnOCCmG8YtJ_xzs0xBI8PujYDL5Ky9H4,4101
32
32
  mlrun/common/formatters/function.py,sha256=fGa5m5aI_XvQdvrUr73dmUwrEJrE_8wM4_P4q8RgBTg,1477
33
33
  mlrun/common/formatters/pipeline.py,sha256=hGUV_3wcTEMa-JouspbjgJ1JGKa2Wc5cXSaH2XhOdMc,1763
@@ -59,7 +59,7 @@ mlrun/common/schemas/notification.py,sha256=Ge7eWNGf_XUFkjOnUkyUOubdEbmXh9z_OSGc
59
59
  mlrun/common/schemas/object.py,sha256=VleJSUmDJMl92knLgaDE8SWCi3ky0UaHcwcwOIapPQ8,1980
60
60
  mlrun/common/schemas/pagination.py,sha256=q7nk6bipkDiE7HExIVqhy5ANl-zv0x8QC9Kg6AkLtDA,887
61
61
  mlrun/common/schemas/pipeline.py,sha256=MhH07_fAQXNAnmf5j6oXZp8qh9cxGcZlReMdt-ZJf40,1429
62
- mlrun/common/schemas/project.py,sha256=YVmnF187RjVaD0RYcw8hZuk7g_sv9grSv-K9R4cjDhw,4885
62
+ mlrun/common/schemas/project.py,sha256=jETPmrjUeNJPEcLKIFaXhEbkm2lhU43vE8tAdY_Qdg0,4940
63
63
  mlrun/common/schemas/regex.py,sha256=8_vbDeAE0SODJDj7yUFg1FbaB9CNydYQTJ29JxE74Kc,776
64
64
  mlrun/common/schemas/runs.py,sha256=yGGJxSHT_Mq4RLjlfuxW4pm9i-Py9eOsGUAofs_VqVM,1268
65
65
  mlrun/common/schemas/runtime_resource.py,sha256=2rSuYL-9JkESSomlnU91mYDbfV-IkqZeXx6OHuMmDxs,1554
@@ -67,8 +67,8 @@ mlrun/common/schemas/schedule.py,sha256=nD9kxH2KjXkbGZPNfzVNlNSxbyFZmZUlwtT04_z2
67
67
  mlrun/common/schemas/secret.py,sha256=51tCN1F8DFTq4y_XdHIMDy3I1TnMEBX8kO8BHKavYF4,1484
68
68
  mlrun/common/schemas/tag.py,sha256=OAn9Qt6z8ibqw8uU8WQSvuwY8irUv45Dhx2Ko5FzUss,884
69
69
  mlrun/common/schemas/workflow.py,sha256=eRoaOBFiWbvP0iwZ6Aof5JmheV81A0-0PGi8L4vuXmI,1823
70
- mlrun/common/schemas/model_monitoring/__init__.py,sha256=7Aih_5KAcmSMeTNsBvunuQpPkAQ_GslzVU4HtU6Fg_M,1777
71
- mlrun/common/schemas/model_monitoring/constants.py,sha256=710ttpAUMQ-R_wiXGtHy4jUhEWAc9fMVRulM5lXXdsY,9648
70
+ mlrun/common/schemas/model_monitoring/__init__.py,sha256=Z_tv5dO-tT_oHMSk98AnDQW0XM-fXqNKduFxkW3jO_E,1809
71
+ mlrun/common/schemas/model_monitoring/constants.py,sha256=izIN1HUF_rWpbxVR2AYXGww-Noq9rnx2k7zOvrRt7Js,9921
72
72
  mlrun/common/schemas/model_monitoring/grafana.py,sha256=SG13MFUUz_tk6-mWeSx17qcdEW4ekicxqNtnMSwRTCY,1559
73
73
  mlrun/common/schemas/model_monitoring/model_endpoints.py,sha256=3wPlCFNoBsHlCMgyJlXfNP-ZqIRsBXzyBX79O2PHkeg,13799
74
74
  mlrun/data_types/__init__.py,sha256=EkxfkFoHb91zz3Aymq-KZfCHlPMzEc3bBqgzPUwmHWY,1087
@@ -79,14 +79,14 @@ mlrun/data_types/to_pandas.py,sha256=_QLSxMn9MPlXxcu1Ki_slzZx2eJbWJzrGvBR7_K-wcQ
79
79
  mlrun/datastore/__init__.py,sha256=pQQI_Vi7H45Bbe6f9JaF8dOgtGWf3qY9_kd8NNTfaog,4093
80
80
  mlrun/datastore/alibaba_oss.py,sha256=OfQ9AbsJNBFF9DFgUdq38TvKw6qwnHmEcnH-nze6ZZg,4827
81
81
  mlrun/datastore/azure_blob.py,sha256=T0IzgBQJxcv8c97VJ1KDayvo_dkxLlgQboa7vcx1WEk,9077
82
- mlrun/datastore/base.py,sha256=z1ON-fd6mjRu_YZybhY2uw26T5upk4HHAsV8PfkB3o4,25586
82
+ mlrun/datastore/base.py,sha256=1HDFJBAdYZUDFowwG_OiUeM6CXAgVaKula2QyLoJQiM,25800
83
83
  mlrun/datastore/datastore.py,sha256=vbawdOBXr4qjj8lvFxrd1PmHNIis45UWFcbvJ7S6hN8,9215
84
84
  mlrun/datastore/datastore_profile.py,sha256=9g467ic1vuTP_HY101mMXG_smnLxkjhuBp6dR4_LIkg,18937
85
85
  mlrun/datastore/dbfs_store.py,sha256=5IkxnFQXkW0fdx-ca5jjQnUdTsTfNdJzMvV31ZpDNrM,6634
86
86
  mlrun/datastore/filestore.py,sha256=nS3Ie6jG41NDiW_as9tF8Nu5maaSVEKYKUr1IQtPhuA,3767
87
87
  mlrun/datastore/google_cloud_storage.py,sha256=ctcfnZ41-uyNd3qjPe-VO9DAtfikhpNPPb8L9coKcr0,6272
88
88
  mlrun/datastore/hdfs.py,sha256=TfL1zUWVRxEHF9kswZtOzrMdDmhSfiSVIAjz7fxWyVw,1876
89
- mlrun/datastore/inmem.py,sha256=PQAbNbjQvDhtCQrvPTCuUWRwGVe4a7nB5E84l8C20pQ,2802
89
+ mlrun/datastore/inmem.py,sha256=myYn8aR85BjY89ioUInKUH3MLJNoItuG-r6zGP_0teM,2780
90
90
  mlrun/datastore/redis.py,sha256=OKMkDCU3APhxfo65SyJq605u1DsfOYH0fODnCXZRqEU,5575
91
91
  mlrun/datastore/s3.py,sha256=moTbuBy7YydP_2frCpN8DjmVRMzg9M2R20CN6RTe_Ls,8330
92
92
  mlrun/datastore/snowflake_utils.py,sha256=Wohvnlmq8j1d98RCaknll-iWdZZpSlCrKhUOEy0_-CA,1483
@@ -94,17 +94,17 @@ mlrun/datastore/sources.py,sha256=cm7uZp5IKd_x2uZ6peAysNXIvIvYQze0-QQzp64Jf_o,46
94
94
  mlrun/datastore/spark_udf.py,sha256=NnnB3DZxZb-rqpRy7b-NC7QWXuuqFn3XkBDc86tU4mQ,1498
95
95
  mlrun/datastore/spark_utils.py,sha256=50rllp6xXpXY__1LbU7aTXUU5ca8dKAfoskPre3npZo,1611
96
96
  mlrun/datastore/store_resources.py,sha256=rcLoG506AMmR8qPJU_gE-G5d34VJVV_vNlZ3VHqho6c,6869
97
- mlrun/datastore/targets.py,sha256=Cv04sUv9oCuujMtSzUyB3NYSdXHHaOhE846el2EOt7k,80915
97
+ mlrun/datastore/targets.py,sha256=9l_7-rpwaWnamtgViXM7WXk5Zs5jfqJP9RteeqJblM4,80748
98
98
  mlrun/datastore/utils.py,sha256=l9dLZb_VCbHs_htqMFRv4qiestZ8z8K-4eY1MxHS8wE,7720
99
99
  mlrun/datastore/v3io.py,sha256=tmZ2S-POZhjjKPE_0T1EkHcv6Q10pz5KQiaTXE1Be-4,8102
100
100
  mlrun/datastore/wasbfs/__init__.py,sha256=s5Ul-0kAhYqFjKDR2X0O2vDGDbLQQduElb32Ev56Te4,1343
101
101
  mlrun/datastore/wasbfs/fs.py,sha256=MnSj7Q4OKA2L55ihCmUnj2t3GA3B77oLMdAw-yxvN9w,6151
102
102
  mlrun/db/__init__.py,sha256=WqJ4x8lqJ7ZoKbhEyFqkYADd9P6E3citckx9e9ZLcIU,1163
103
103
  mlrun/db/auth_utils.py,sha256=hpg8D2r82oN0BWabuWN04BTNZ7jYMAF242YSUpK7LFM,5211
104
- mlrun/db/base.py,sha256=06WESPNngoSzuOae0jPniU3pnpqrYoIduNRzBhnmS54,23999
104
+ mlrun/db/base.py,sha256=aC95Or4q10Hpw9JvsxPa17D8FJmhj6jzRRlroADwpws,24018
105
105
  mlrun/db/factory.py,sha256=ibIrE5QkIIyzDU1FXKrfbc31cZiRLYKDZb8dqCpQwyU,2397
106
- mlrun/db/httpdb.py,sha256=32AKcImfSFaKaVCRe2I1s4cZBllU_McWSH2vnbPiSjs,183222
107
- mlrun/db/nopdb.py,sha256=OEUYBc-b9vYQBZa3D_J0LZfGXUwFVu3l0YIEzNVP3ZY,20705
106
+ mlrun/db/httpdb.py,sha256=KxujVYpRSU-_2mWMWK_mhP_uY4CDUDkY1Fv-onuUq2k,183267
107
+ mlrun/db/nopdb.py,sha256=gKqoDBtE4KqO_apaTOfwLX6Ym0Mz_-jN7jcwB4sdMSA,20724
108
108
  mlrun/feature_store/__init__.py,sha256=FhHRc8NdqL_HWpCs7A8dKruxJS5wEm55Gs3dcgBiRUg,1522
109
109
  mlrun/feature_store/api.py,sha256=uYheyPkJOVCrz1jivvpGatgy_JBAq0It0XZqPpNVQkE,48699
110
110
  mlrun/feature_store/common.py,sha256=DKmoRk04NCS1gv7qZuEUa2-g8WsfR6IWjYctcrqKVlg,12853
@@ -208,10 +208,10 @@ mlrun/launcher/__init__.py,sha256=JL8qkT1lLr1YvW6iP0hmwDTaSR2RfrMDx0-1gWRhTOE,57
208
208
  mlrun/launcher/base.py,sha256=ud1qc2v66-84haAVBuQ2e0IsOzvd_bleSVVImwNWhwE,16461
209
209
  mlrun/launcher/client.py,sha256=kgju2mvGuVlvJWRk8sL8qTKF0lf_cSPK2nqYz1oZy3E,6196
210
210
  mlrun/launcher/factory.py,sha256=RW7mfzEFi8fR0M-4W1JQg1iq3_muUU6OTqT_3l4Ubrk,2338
211
- mlrun/launcher/local.py,sha256=6t-iumKSd5MurNO0jshDAnG8IZWfpGCiW4JtH8UX9qI,11272
211
+ mlrun/launcher/local.py,sha256=pP9-ZrNL8OnNDEiXTAKAZQnmLpS_mCc2v-mJw329eks,11269
212
212
  mlrun/launcher/remote.py,sha256=tGICSfWtvUHeR31mbzy6gqHejmDxjPUgjtxXTWhRubg,7699
213
213
  mlrun/model_monitoring/__init__.py,sha256=dm5_j0_pwqrdzFwTaEtGnKfv2nVpNaM56nBI-oqLbNU,879
214
- mlrun/model_monitoring/api.py,sha256=9GjhaOQqt53ezlH0VG2iLvb5t8YE7bBAuiJGXXt52wI,27828
214
+ mlrun/model_monitoring/api.py,sha256=WMxB4MMrsturFwyr1G1CHOddt0d_VSYcNEobjuxkjHg,27815
215
215
  mlrun/model_monitoring/application.py,sha256=RJ8HeAPfGO3P2A_dEZYNg60c1wKTADh2YSv8BQ5embg,745
216
216
  mlrun/model_monitoring/controller.py,sha256=MQ4BF3vfJSyYZv6HuTuSLt_nqaflgBYyOSwCccbwaio,27981
217
217
  mlrun/model_monitoring/controller_handler.py,sha256=J9Y9ppLsQaxyYRl21165Rr7QuI9EM-mk-5veAqs4Bi0,1336
@@ -228,21 +228,21 @@ mlrun/model_monitoring/applications/_application_steps.py,sha256=-g9jxIAFM5f22iJ
228
228
  mlrun/model_monitoring/applications/base.py,sha256=buVKyghH4AB3chZ5py1vyMIFnTF-deY8YDf_fPC9BnQ,11307
229
229
  mlrun/model_monitoring/applications/context.py,sha256=i-9h6pWyrS8mjw53zd0kb_Dsf9ReS8cSfnth8PvOEI4,8571
230
230
  mlrun/model_monitoring/applications/evidently_base.py,sha256=AE_eIz-GEYm3AZTrMCiqF9bcSMlvYk08LJb6bKWAQLg,8057
231
- mlrun/model_monitoring/applications/histogram_data_drift.py,sha256=G3afA0q9r7clmtcEAoXAzsr8zYXHIOYXiRxQEwVio_E,13041
231
+ mlrun/model_monitoring/applications/histogram_data_drift.py,sha256=TE6995h2PyO4lytVngH2HidhXFY7reLupWi4cHmdZdw,13163
232
232
  mlrun/model_monitoring/applications/results.py,sha256=VVlu9Si7Tj2LNJzPQrp4_Qeyh9mxOVMu1Jwb5K2LfvY,3577
233
233
  mlrun/model_monitoring/db/__init__.py,sha256=6Ic-X3Fh9XLPYMytmevGNSs-Hii1rAjLLoFTSPwTguw,736
234
- mlrun/model_monitoring/db/stores/__init__.py,sha256=iTk0Q8hsTv7arW858GBc4_oJEDHATgfT-9aHoOzvNd0,4434
234
+ mlrun/model_monitoring/db/stores/__init__.py,sha256=ZScmxeZZ3yZ84MocdDGRtvVIixSo0rAPiuLpavXTgJw,4737
235
235
  mlrun/model_monitoring/db/stores/base/__init__.py,sha256=JufJETW3BXzPhFwbRa8dMf7BFGGZKceIWIMgr5x9n9c,599
236
236
  mlrun/model_monitoring/db/stores/base/store.py,sha256=cUXEA0HKiwIE3FzuUuH40kIzJMgJuiuOMrKbfIzR4Ig,7386
237
237
  mlrun/model_monitoring/db/stores/sqldb/__init__.py,sha256=6CsTXAxeLbbf8yfCADTaxmiavqwrLEdYFJ-qc5kgDAY,569
238
238
  mlrun/model_monitoring/db/stores/sqldb/sql_store.py,sha256=iel2aXAMsaFmZJVraCTmAJrNv-IIbUGejjbo-LWKrgo,25730
239
239
  mlrun/model_monitoring/db/stores/sqldb/models/__init__.py,sha256=lCiGw9WKPtHAIgrtNS2jyvM5OZvZvogBh76iurNYblg,2453
240
- mlrun/model_monitoring/db/stores/sqldb/models/base.py,sha256=YKRWgWvi8yyzXvratpePqSZ3ZVjgfZ6Q_QhgaLUnAsE,5215
241
- mlrun/model_monitoring/db/stores/sqldb/models/mysql.py,sha256=86D1WX016u6TQdxhNDtlGn3QvJJHOQrXiw1hcSMq0Ao,2570
240
+ mlrun/model_monitoring/db/stores/sqldb/models/base.py,sha256=V2B5WdQM0KHKq0FNDq61q7tkNJ9fNRbxfnxrholKgjk,5352
241
+ mlrun/model_monitoring/db/stores/sqldb/models/mysql.py,sha256=tCzc5ANPxZw7tIPsn9p30woK0_s2HU_FsNzA3hL2wQs,2666
242
242
  mlrun/model_monitoring/db/stores/sqldb/models/sqlite.py,sha256=yJJZppbKj3PsOANS_DXAQFFHKX4cQcm6Pz2DoxRiXMk,1104
243
243
  mlrun/model_monitoring/db/stores/v3io_kv/__init__.py,sha256=6CsTXAxeLbbf8yfCADTaxmiavqwrLEdYFJ-qc5kgDAY,569
244
244
  mlrun/model_monitoring/db/stores/v3io_kv/kv_store.py,sha256=OfhR5N4tfVkERgkzRQaKx8Y41HnqAaYJ6fJltiJa6lk,26909
245
- mlrun/model_monitoring/db/tsdb/__init__.py,sha256=s1dMgHvA8QJS6xkMo8-PAHC7k51t6DKx8A6_-5py238,3753
245
+ mlrun/model_monitoring/db/tsdb/__init__.py,sha256=_Mfa4gguX86OS1fQCxnt_QSaNh603-zPYAK8NjYk7t8,4040
246
246
  mlrun/model_monitoring/db/tsdb/base.py,sha256=sESs5U71a-iJKI-999sAloYH-mjOR3uSEQG7BxRs6No,13134
247
247
  mlrun/model_monitoring/db/tsdb/helpers.py,sha256=0oUXc4aUkYtP2SGP6jTb3uPPKImIUsVsrb9otX9a7O4,1189
248
248
  mlrun/model_monitoring/db/tsdb/tdengine/__init__.py,sha256=vgBdsKaXUURKqIf3M0y4sRatmSVA4CQiJs7J5dcVBkQ,620
@@ -251,7 +251,7 @@ mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py,sha256=x1cWM2ystgh
251
251
  mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py,sha256=oplt9s-C-OGa__V456nkHwvyBe5YHxcuIJcYV9GFQHY,15521
252
252
  mlrun/model_monitoring/db/tsdb/v3io/__init__.py,sha256=aL3bfmQsUQ-sbvKGdNihFj8gLCK3mSys0qDcXtYOwgc,616
253
253
  mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py,sha256=qbiyBzrdWLJAKLmJV4K8jUxsAMbKGZ1vip7WNfRcpXM,4764
254
- mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py,sha256=QIMTZrpdyKpGlMtP3uh9XYFDU591FaKfFDkCZG6aaJA,26403
254
+ mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py,sha256=hroUaoxbvKHDqM5L01p4EuYNuFjzaUQyT-HWt47LJCY,26362
255
255
  mlrun/model_monitoring/metrics/__init__.py,sha256=6CsTXAxeLbbf8yfCADTaxmiavqwrLEdYFJ-qc5kgDAY,569
256
256
  mlrun/model_monitoring/metrics/histogram_distance.py,sha256=E9_WIl2vd6qNvoHVHoFcnuQk3ekbFWOdi8aU7sHrfk4,4724
257
257
  mlrun/package/__init__.py,sha256=uWILzN42bcq5vFRk6ptxEmn1I5uBWAnhaJr7e4H834w,7082
@@ -274,17 +274,17 @@ mlrun/package/utils/type_hint_utils.py,sha256=JYrek6vuN3z7e6MGUD3qBLDfQ03C4puZXN
274
274
  mlrun/platforms/__init__.py,sha256=ggSGF7inITs6S-vj9u4S9X_5psgbA0G3GVqf7zu8qYc,2406
275
275
  mlrun/platforms/iguazio.py,sha256=1h5BpdAEQJBg2vIt7ySjUADU0ip5OkaMYr0_VREi9ys,13084
276
276
  mlrun/projects/__init__.py,sha256=Lv5rfxyXJrw6WGOWJKhBz66M6t3_zsNMCfUD6waPwx4,1153
277
- mlrun/projects/operations.py,sha256=NEN4PmSvLO9QMwSG4TncmBgTKC9wJp7hGo5lA7OYN_Q,19199
277
+ mlrun/projects/operations.py,sha256=Y-NwrIFXpltUXcDLDQ9b33NY_r4TOPvJgO4F-xSuzoM,19252
278
278
  mlrun/projects/pipelines.py,sha256=Xc9tQSBBPEg1Yxn-b4RseFdfO7SvrYC-ekdw_hAcPH8,40006
279
279
  mlrun/projects/project.py,sha256=r_7_wPYNxkJUUZ0X_tOKzxTN5kn4vdKXK0Z6FMfGhr8,183253
280
280
  mlrun/runtimes/__init__.py,sha256=0-tYDkew-Cr4DM-wztvMbzDA5xq385Jjo-GrtO_84Sc,8741
281
- mlrun/runtimes/base.py,sha256=yw5SceU2Js1AOr4f0ByZ3l1VsZUAnKKeC41DRTmNi68,37633
281
+ mlrun/runtimes/base.py,sha256=g716uF0BpL6vLe75bNqpJ2SjtYW_tQqICl46d_4ljHs,37633
282
282
  mlrun/runtimes/daskjob.py,sha256=JfK8rSPY-0SYnLJdtp_ts3oKyad0pA98th-2VntYzK0,19387
283
283
  mlrun/runtimes/funcdoc.py,sha256=CC9cWRPgBiM2sk4NJTqusjc6O9kZ-49vGA5WRPjREKE,9796
284
284
  mlrun/runtimes/function_reference.py,sha256=iWKRe4r2GTc5S8FOIASYUNLwwne8NqIui51PFr8Q4mg,4918
285
285
  mlrun/runtimes/generators.py,sha256=v28HdNgxdHvj888G1dTnUeQZz-D9iTO0hoGeZbCdiuQ,7241
286
286
  mlrun/runtimes/kubejob.py,sha256=ptBnMTIjukbEznkdixmbGvBqzujXrRzqNfP7ze6M76M,8660
287
- mlrun/runtimes/local.py,sha256=nH7p0pKC_UyRQ9-lCUXmZGIO4OBFNz78_45MLWLkk0s,22446
287
+ mlrun/runtimes/local.py,sha256=h_w0tzCfF1_tZZEjw-FJHqYmoxK-AhN2skpK7cdU1JI,22611
288
288
  mlrun/runtimes/pod.py,sha256=XeV6CMlCxPb776bWNESkh0ImwHeia65KL_tvCSdNzlo,63249
289
289
  mlrun/runtimes/remotesparkjob.py,sha256=9DPxDK8x08t9nReMo083TBxJiiqA83mHCbdtxrjj7AU,7426
290
290
  mlrun/runtimes/utils.py,sha256=OFATL8d0c5vKN9N2enAu2oS3b4H71RfeG776ZnfZ0J4,14332
@@ -326,7 +326,7 @@ mlrun/utils/azure_vault.py,sha256=IEFizrDGDbAaoWwDr1WoA88S_EZ0T--vjYtY-i0cvYQ,34
326
326
  mlrun/utils/clones.py,sha256=mJpx4nyFiY6jlBCvFABsNuyi_mr1mvfPWn81vlafpOU,7361
327
327
  mlrun/utils/condition_evaluator.py,sha256=-nGfRmZzivn01rHTroiGY4rqEv8T1irMyhzxEei-sKc,1897
328
328
  mlrun/utils/db.py,sha256=KEa-vzicUhzIwo1wBXax2ZuXtYgf5to7wnsY3CYCiOQ,1713
329
- mlrun/utils/helpers.py,sha256=DRHYVtbDjH1Nkvpn5CYIeNu--06Z2oTLEEg55fVczG0,56751
329
+ mlrun/utils/helpers.py,sha256=Pl1LzfuDVzpQtDC23VFvnuWY8UHs-o7zcYcpNcSF3To,56976
330
330
  mlrun/utils/http.py,sha256=l_JCPrCq8bfYUcUcAFWUPvb9Xu-93bLGIhV-H-XCU9s,8707
331
331
  mlrun/utils/logger.py,sha256=cag2J30-jynIHmHZ2J8RYmVMNhYBGgAoimc5sbk-A1U,10016
332
332
  mlrun/utils/regex.py,sha256=b0AUa2THS-ELzJj0grl5b8Stq609F2XomTZkD9SB1fQ,4900
@@ -335,7 +335,7 @@ mlrun/utils/singleton.py,sha256=p1Y-X0mPSs_At092GS-pZCA8CTR62HOqPU07_ZH6-To,869
335
335
  mlrun/utils/v3io_clients.py,sha256=F7zO2NaXSSih6B35LkwuKW_y2CdV5C1ztP-Xs2FsgpQ,1282
336
336
  mlrun/utils/vault.py,sha256=xUiKL17dCXjwQJ33YRzQj0oadUXATlFWPzKKYAESoQk,10447
337
337
  mlrun/utils/notifications/__init__.py,sha256=eUzQDBxSQmMZASRY-YAnYS6tL5801P0wEjycp3Dvoe0,990
338
- mlrun/utils/notifications/notification_pusher.py,sha256=xVPcgPdVjhTV87-GHxOIarcMeJePlsSpGlM9JZJ5JAg,26744
338
+ mlrun/utils/notifications/notification_pusher.py,sha256=4ecV6JfCtvYpb0kl1-sdg4Cw6XTrAjmmh2olhUenesY,26752
339
339
  mlrun/utils/notifications/notification/__init__.py,sha256=2in3F2q8gtYDiDoQ4i9BIIE2I06OokT2EW49vs2krRA,2168
340
340
  mlrun/utils/notifications/notification/base.py,sha256=hf3BDZ4-bq92MsqofQHt8DZqqlcKbWHscZFvzHdMcw4,4265
341
341
  mlrun/utils/notifications/notification/console.py,sha256=MAVk7v5PJ52vdGRv76YcEPixWgV0licBPWGpR01uR40,2643
@@ -344,11 +344,11 @@ mlrun/utils/notifications/notification/ipython.py,sha256=ZtVL30B_Ha0VGoo4LxO-voT
344
344
  mlrun/utils/notifications/notification/slack.py,sha256=wqpFGr5BTvFO5KuUSzFfxsgmyU1Ohq7fbrGeNe9TXOk,7006
345
345
  mlrun/utils/notifications/notification/webhook.py,sha256=y8Hc3rlR48M2W76lfI2knEBxlD_T6k9P9kXD_vqFnfg,4472
346
346
  mlrun/utils/version/__init__.py,sha256=7kkrB7hEZ3cLXoWj1kPoDwo4MaswsI2JVOBpbKgPAgc,614
347
- mlrun/utils/version/version.json,sha256=qs07L1-RgvXv7tT9BFXVm3mkA4lcrGgbERcW7y49TgE,89
347
+ mlrun/utils/version/version.json,sha256=0oyQ89ttk4NJ1n_SJz3Y_28WTi9lcWPjIag3LRdOz6w,89
348
348
  mlrun/utils/version/version.py,sha256=eEW0tqIAkU9Xifxv8Z9_qsYnNhn3YH7NRAfM-pPLt1g,1878
349
- mlrun-1.7.0rc28.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
350
- mlrun-1.7.0rc28.dist-info/METADATA,sha256=zAvS0FrVMze06M5ZJzU3WDOfP_4Td8YisoGLMTXd3Lk,19534
351
- mlrun-1.7.0rc28.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
352
- mlrun-1.7.0rc28.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
353
- mlrun-1.7.0rc28.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
354
- mlrun-1.7.0rc28.dist-info/RECORD,,
349
+ mlrun-1.7.0rc30.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
350
+ mlrun-1.7.0rc30.dist-info/METADATA,sha256=Oa4QRKtVfxP-8cDhj1mjXknBVHpVmf8MWWaNlB3QwlU,19534
351
+ mlrun-1.7.0rc30.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
352
+ mlrun-1.7.0rc30.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
353
+ mlrun-1.7.0rc30.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
354
+ mlrun-1.7.0rc30.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.2.0)
2
+ Generator: setuptools (70.3.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5