mlrun 1.8.0rc17__py3-none-any.whl → 1.8.0rc19__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.

mlrun/projects/project.py CHANGED
@@ -2137,18 +2137,23 @@ class MlrunProject(ModelObj):
2137
2137
  db = mlrun.db.get_run_db(secrets=self._secrets)
2138
2138
  matching_results = []
2139
2139
  alerts = []
2140
- # TODO: Refactor to use a single request to improve performance at scale, ML-8473
2141
- for endpoint in endpoints.endpoints:
2142
- results_by_endpoint = db.get_model_endpoint_monitoring_metrics(
2143
- project=self.name, endpoint_id=endpoint.metadata.uid, type="results"
2144
- )
2140
+ endpoint_ids = [endpoint.metadata.uid for endpoint in endpoints.endpoints]
2141
+ # using separation to group by endpoint IDs:
2142
+ # {"mep_id1": [...], "mep_id2": [...]}
2143
+ results_by_endpoint = db.get_metrics_by_multiple_endpoints(
2144
+ project=self.name,
2145
+ endpoint_ids=endpoint_ids,
2146
+ type="results",
2147
+ events_format=mm_constants.GetEventsFormat.SEPARATION,
2148
+ )
2149
+ for endpoint_uid, results in results_by_endpoint.items():
2145
2150
  results_fqn_by_endpoint = [
2146
2151
  get_result_instance_fqn(
2147
- model_endpoint_id=endpoint.metadata.uid,
2152
+ model_endpoint_id=endpoint_uid,
2148
2153
  app_name=result.app,
2149
2154
  result_name=result.name,
2150
2155
  )
2151
- for result in results_by_endpoint
2156
+ for result in results
2152
2157
  ]
2153
2158
  matching_results += filter_results_by_regex(
2154
2159
  existing_result_names=results_fqn_by_endpoint,
mlrun/serving/states.py CHANGED
@@ -700,7 +700,7 @@ class RouterStep(TaskStep):
700
700
 
701
701
  kind = "router"
702
702
  default_shape = "doubleoctagon"
703
- _dict_fields = _task_step_fields + ["routes"]
703
+ _dict_fields = _task_step_fields + ["routes", "name"]
704
704
  _default_class = "mlrun.serving.ModelRouter"
705
705
 
706
706
  def __init__(
@@ -718,7 +718,7 @@ class RouterStep(TaskStep):
718
718
  class_name,
719
719
  class_args,
720
720
  handler,
721
- name=name,
721
+ name=get_name(name, class_name or RouterStep.kind),
722
722
  function=function,
723
723
  input_path=input_path,
724
724
  result_path=result_path,
@@ -1707,7 +1707,7 @@ def get_name(name, class_name):
1707
1707
  raise MLRunInvalidArgumentError("name or class_name must be provided")
1708
1708
  if isinstance(class_name, type):
1709
1709
  return class_name.__name__
1710
- return class_name
1710
+ return class_name.split(".")[-1]
1711
1711
 
1712
1712
 
1713
1713
  def params_to_step(
@@ -96,7 +96,7 @@ class V2ModelServer(StepToDict):
96
96
  self.name = name
97
97
  self.version = ""
98
98
  if name and ":" in name:
99
- self.name, self.version = name.split(":", 1)
99
+ self.version = name.split(":", 1)[-1]
100
100
  self.context = context
101
101
  self.ready = False
102
102
  self.error = ""
@@ -277,7 +277,7 @@ class V2ModelServer(StepToDict):
277
277
 
278
278
  response = {
279
279
  "id": event_id,
280
- "model_name": self.name,
280
+ "model_name": self.name.split(":")[0],
281
281
  "outputs": outputs,
282
282
  "timestamp": start.isoformat(sep=" ", timespec="microseconds"),
283
283
  }
@@ -308,7 +308,7 @@ class V2ModelServer(StepToDict):
308
308
  # get model metadata operation
309
309
  setattr(event, "terminated", True)
310
310
  event_body = {
311
- "name": self.name,
311
+ "name": self.name.split(":")[0],
312
312
  "version": self.version or "",
313
313
  "inputs": [],
314
314
  "outputs": [],
mlrun/utils/helpers.py CHANGED
@@ -23,6 +23,7 @@ import os
23
23
  import re
24
24
  import string
25
25
  import sys
26
+ import traceback
26
27
  import typing
27
28
  import uuid
28
29
  import warnings
@@ -44,11 +45,16 @@ from pandas import Timedelta, Timestamp
44
45
  from yaml.representer import RepresenterError
45
46
 
46
47
  import mlrun
48
+ import mlrun.common.constants as mlrun_constants
47
49
  import mlrun.common.helpers
50
+ import mlrun.common.runtimes.constants as runtimes_constants
48
51
  import mlrun.common.schemas
49
52
  import mlrun.errors
50
53
  import mlrun.utils.regex
51
54
  import mlrun.utils.version.version
55
+ import mlrun_pipelines.common.constants
56
+ import mlrun_pipelines.models
57
+ import mlrun_pipelines.utils
52
58
  from mlrun.common.constants import MYSQL_MEDIUMBLOB_SIZE_BYTES
53
59
  from mlrun.config import config
54
60
  from mlrun_pipelines.models import PipelineRun
@@ -1904,3 +1910,131 @@ def join_urls(base_url: Optional[str], path: Optional[str]) -> str:
1904
1910
  if base_url is None:
1905
1911
  base_url = ""
1906
1912
  return f"{base_url.rstrip('/')}/{path.lstrip('/')}" if path else base_url
1913
+
1914
+
1915
+ class Workflow:
1916
+ @staticmethod
1917
+ def get_workflow_steps(workflow_id: str, project: str) -> list:
1918
+ steps = []
1919
+ db = mlrun.get_run_db()
1920
+
1921
+ def _add_run_step(_step: mlrun_pipelines.models.PipelineStep):
1922
+ try:
1923
+ _run = db.list_runs(
1924
+ project=project,
1925
+ labels=f"{mlrun_constants.MLRunInternalLabels.runner_pod}={_step.node_name}",
1926
+ )[0]
1927
+ except IndexError:
1928
+ _run = {
1929
+ "metadata": {
1930
+ "name": _step.display_name,
1931
+ "project": project,
1932
+ },
1933
+ }
1934
+ _run["step_kind"] = _step.step_type
1935
+ if _step.skipped:
1936
+ _run.setdefault("status", {})["state"] = (
1937
+ runtimes_constants.RunStates.skipped
1938
+ )
1939
+ steps.append(_run)
1940
+
1941
+ def _add_deploy_function_step(_step: mlrun_pipelines.models.PipelineStep):
1942
+ project, name, hash_key = Workflow._extract_function_uri(
1943
+ _step.get_annotation("mlrun/function-uri")
1944
+ )
1945
+ if name:
1946
+ try:
1947
+ function = db.get_function(
1948
+ project=project, name=name, hash_key=hash_key
1949
+ )
1950
+ except mlrun.errors.MLRunNotFoundError:
1951
+ # If the function is not found (if build failed for example), we will create a dummy
1952
+ # function object for the notification to display the function name
1953
+ function = {
1954
+ "metadata": {
1955
+ "name": name,
1956
+ "project": project,
1957
+ "hash_key": hash_key,
1958
+ },
1959
+ }
1960
+ pod_phase = _step.phase
1961
+ if _step.skipped:
1962
+ state = mlrun.common.schemas.FunctionState.skipped
1963
+ else:
1964
+ state = runtimes_constants.PodPhases.pod_phase_to_run_state(
1965
+ pod_phase
1966
+ )
1967
+ function["status"] = {"state": state}
1968
+ if isinstance(function["metadata"].get("updated"), datetime.datetime):
1969
+ function["metadata"]["updated"] = function["metadata"][
1970
+ "updated"
1971
+ ].isoformat()
1972
+ function["step_kind"] = _step.step_type
1973
+ steps.append(function)
1974
+
1975
+ step_methods = {
1976
+ mlrun_pipelines.common.constants.PipelineRunType.run: _add_run_step,
1977
+ mlrun_pipelines.common.constants.PipelineRunType.build: _add_deploy_function_step,
1978
+ mlrun_pipelines.common.constants.PipelineRunType.deploy: _add_deploy_function_step,
1979
+ }
1980
+
1981
+ if not workflow_id:
1982
+ return steps
1983
+
1984
+ workflow_manifest = Workflow._get_workflow_manifest(workflow_id)
1985
+ if not workflow_manifest:
1986
+ return steps
1987
+
1988
+ try:
1989
+ for step in workflow_manifest.get_steps():
1990
+ step_method = step_methods.get(step.step_type)
1991
+ if step_method:
1992
+ step_method(step)
1993
+ return steps
1994
+ except Exception:
1995
+ # If we fail to read the pipeline steps, we will return the list of runs that have the same workflow id
1996
+ logger.warning(
1997
+ "Failed to extract workflow steps from workflow manifest, "
1998
+ "returning all runs with the workflow id label",
1999
+ workflow_id=workflow_id,
2000
+ traceback=traceback.format_exc(),
2001
+ )
2002
+ return db.list_runs(
2003
+ project=project,
2004
+ labels=f"workflow={workflow_id}",
2005
+ )
2006
+
2007
+ @staticmethod
2008
+ def _extract_function_uri(function_uri: str) -> tuple[str, str, str]:
2009
+ """
2010
+ Extract the project, name, and hash key from a function uri.
2011
+ Examples:
2012
+ - "project/name@hash_key" returns project, name, hash_key
2013
+ - "project/name returns" project, name, ""
2014
+ """
2015
+ project, name, hash_key = None, None, None
2016
+ hashed_pattern = r"^(.+)/(.+)@(.+)$"
2017
+ pattern = r"^(.+)/(.+)$"
2018
+ match = re.match(hashed_pattern, function_uri)
2019
+ if match:
2020
+ project, name, hash_key = match.groups()
2021
+ else:
2022
+ match = re.match(pattern, function_uri)
2023
+ if match:
2024
+ project, name = match.groups()
2025
+ hash_key = ""
2026
+ return project, name, hash_key
2027
+
2028
+ @staticmethod
2029
+ def _get_workflow_manifest(
2030
+ workflow_id: str,
2031
+ ) -> typing.Optional[mlrun_pipelines.models.PipelineManifest]:
2032
+ kfp_client = mlrun_pipelines.utils.get_client(mlrun.mlconf.kfp_url)
2033
+
2034
+ # arbitrary timeout of 5 seconds, the workflow should be done by now
2035
+ kfp_run = kfp_client.wait_for_run_completion(workflow_id, 5)
2036
+ if not kfp_run:
2037
+ return None
2038
+
2039
+ kfp_run = mlrun_pipelines.models.PipelineRun(kfp_run)
2040
+ return kfp_run.workflow_manifest()
@@ -118,6 +118,9 @@ class WebhookNotification(NotificationBase):
118
118
 
119
119
  if isinstance(override_body, dict):
120
120
  for key, value in override_body.items():
121
+ if not isinstance(value, str):
122
+ # If the value is not a string, we don't want to parse it
123
+ continue
121
124
  if re.search(r"{{\s*runs\s*}}", value):
122
125
  str_parsed_runs = parse_runs()
123
126
  override_body[key] = re.sub(
@@ -14,7 +14,7 @@
14
14
 
15
15
  import asyncio
16
16
  import datetime
17
- import re
17
+ import os
18
18
  import traceback
19
19
  import typing
20
20
  from concurrent.futures import ThreadPoolExecutor
@@ -30,10 +30,7 @@ import mlrun.model
30
30
  import mlrun.utils.helpers
31
31
  import mlrun.utils.notifications.notification as notification_module
32
32
  import mlrun.utils.notifications.notification.base as base
33
- import mlrun_pipelines.common.ops
34
- import mlrun_pipelines.models
35
- import mlrun_pipelines.utils
36
- from mlrun.utils import logger
33
+ from mlrun.utils import Workflow, logger
37
34
  from mlrun.utils.condition_evaluator import evaluate_condition_in_separate_process
38
35
 
39
36
 
@@ -281,7 +278,9 @@ class NotificationPusher(_NotificationPusherBase):
281
278
  custom_message = (
282
279
  f" (workflow: {run.metadata.labels['workflow']}){custom_message}"
283
280
  )
284
- runs.extend(self.get_workflow_steps(run))
281
+ project = run.metadata.project
282
+ workflow_id = run.status.results.get("workflow_id", None)
283
+ runs.extend(Workflow.get_workflow_steps(workflow_id, project))
285
284
 
286
285
  message = (
287
286
  self.messages.get(run.state(), "").format(resource=resource)
@@ -440,131 +439,6 @@ class NotificationPusher(_NotificationPusherBase):
440
439
  mask_params=False,
441
440
  )
442
441
 
443
- def get_workflow_steps(self, run: mlrun.model.RunObject) -> list:
444
- steps = []
445
- db = mlrun.get_run_db()
446
-
447
- def _add_run_step(_step: mlrun_pipelines.models.PipelineStep):
448
- try:
449
- _run = db.list_runs(
450
- project=run.metadata.project,
451
- labels=f"{mlrun_constants.MLRunInternalLabels.runner_pod}={_step.node_name}",
452
- )[0]
453
- except IndexError:
454
- _run = {
455
- "metadata": {
456
- "name": _step.display_name,
457
- "project": run.metadata.project,
458
- },
459
- }
460
- _run["step_kind"] = _step.step_type
461
- if _step.skipped:
462
- _run.setdefault("status", {})["state"] = (
463
- runtimes_constants.RunStates.skipped
464
- )
465
- steps.append(_run)
466
-
467
- def _add_deploy_function_step(_step: mlrun_pipelines.models.PipelineStep):
468
- project, name, hash_key = self._extract_function_uri(
469
- _step.get_annotation("mlrun/function-uri")
470
- )
471
- if name:
472
- try:
473
- function = db.get_function(
474
- project=project, name=name, hash_key=hash_key
475
- )
476
- except mlrun.errors.MLRunNotFoundError:
477
- # If the function is not found (if build failed for example), we will create a dummy
478
- # function object for the notification to display the function name
479
- function = {
480
- "metadata": {
481
- "name": name,
482
- "project": project,
483
- "hash_key": hash_key,
484
- },
485
- }
486
- pod_phase = _step.phase
487
- if _step.skipped:
488
- state = mlrun.common.schemas.FunctionState.skipped
489
- else:
490
- state = runtimes_constants.PodPhases.pod_phase_to_run_state(
491
- pod_phase
492
- )
493
- function["status"] = {"state": state}
494
- if isinstance(function["metadata"].get("updated"), datetime.datetime):
495
- function["metadata"]["updated"] = function["metadata"][
496
- "updated"
497
- ].isoformat()
498
- function["step_kind"] = _step.step_type
499
- steps.append(function)
500
-
501
- step_methods = {
502
- mlrun_pipelines.common.ops.PipelineRunType.run: _add_run_step,
503
- mlrun_pipelines.common.ops.PipelineRunType.build: _add_deploy_function_step,
504
- mlrun_pipelines.common.ops.PipelineRunType.deploy: _add_deploy_function_step,
505
- }
506
-
507
- workflow_id = run.status.results.get("workflow_id", None)
508
- if not workflow_id:
509
- return steps
510
-
511
- workflow_manifest = self._get_workflow_manifest(workflow_id)
512
- if not workflow_manifest:
513
- return steps
514
-
515
- try:
516
- for step in workflow_manifest.get_steps():
517
- step_method = step_methods.get(step.step_type)
518
- if step_method:
519
- step_method(step)
520
- return steps
521
- except Exception:
522
- # If we fail to read the pipeline steps, we will return the list of runs that have the same workflow id
523
- logger.warning(
524
- "Failed to extract workflow steps from workflow manifest, "
525
- "returning all runs with the workflow id label",
526
- workflow_id=workflow_id,
527
- traceback=traceback.format_exc(),
528
- )
529
- return db.list_runs(
530
- project=run.metadata.project,
531
- labels=f"workflow={workflow_id}",
532
- )
533
-
534
- @staticmethod
535
- def _get_workflow_manifest(
536
- workflow_id: str,
537
- ) -> typing.Optional[mlrun_pipelines.models.PipelineManifest]:
538
- kfp_client = mlrun_pipelines.utils.get_client(mlrun.mlconf.kfp_url)
539
-
540
- # arbitrary timeout of 5 seconds, the workflow should be done by now
541
- kfp_run = kfp_client.wait_for_run_completion(workflow_id, 5)
542
- if not kfp_run:
543
- return None
544
-
545
- kfp_run = mlrun_pipelines.models.PipelineRun(kfp_run)
546
- return kfp_run.workflow_manifest()
547
-
548
- def _extract_function_uri(self, function_uri: str) -> tuple[str, str, str]:
549
- """
550
- Extract the project, name, and hash key from a function uri.
551
- Examples:
552
- - "project/name@hash_key" returns project, name, hash_key
553
- - "project/name returns" project, name, ""
554
- """
555
- project, name, hash_key = None, None, None
556
- hashed_pattern = r"^(.+)/(.+)@(.+)$"
557
- pattern = r"^(.+)/(.+)$"
558
- match = re.match(hashed_pattern, function_uri)
559
- if match:
560
- project, name, hash_key = match.groups()
561
- else:
562
- match = re.match(pattern, function_uri)
563
- if match:
564
- project, name = match.groups()
565
- hash_key = ""
566
- return project, name, hash_key
567
-
568
442
 
569
443
  class CustomNotificationPusher(_NotificationPusherBase):
570
444
  def __init__(self, notification_types: typing.Optional[list[str]] = None):
@@ -684,6 +558,34 @@ class CustomNotificationPusher(_NotificationPusherBase):
684
558
  db = mlrun.get_run_db()
685
559
  db.push_run_notifications(pipeline_id, project)
686
560
 
561
+ def push_pipeline_start_message_from_client(
562
+ self,
563
+ project: str,
564
+ commit_id: typing.Optional[str] = None,
565
+ pipeline_id: typing.Optional[str] = None,
566
+ has_workflow_url: bool = False,
567
+ ):
568
+ message = f"Workflow started in project {project}"
569
+ if pipeline_id:
570
+ message += f" id={pipeline_id}"
571
+ commit_id = (
572
+ commit_id or os.environ.get("GITHUB_SHA") or os.environ.get("CI_COMMIT_SHA")
573
+ )
574
+ if commit_id:
575
+ message += f", commit={commit_id}"
576
+ if has_workflow_url:
577
+ url = mlrun.utils.helpers.get_workflow_url(project, pipeline_id)
578
+ else:
579
+ url = mlrun.utils.helpers.get_ui_url(project)
580
+ html = ""
581
+ if url:
582
+ html = (
583
+ message
584
+ + f'<div><a href="{url}" target="_blank">click here to view progress</a></div>'
585
+ )
586
+ message = message + f", check progress in {url}"
587
+ self.push(message, "info", custom_html=html)
588
+
687
589
  def push_pipeline_run_results(
688
590
  self,
689
591
  runs: typing.Union[mlrun.lists.RunList, list],
@@ -1,4 +1,4 @@
1
1
  {
2
- "git_commit": "eb1fcda410abefdd86a344d75af69fe49dc5eb07",
3
- "version": "1.8.0-rc17"
2
+ "git_commit": "6671b915fe08ba2b9afa054585f86b955b48b671",
3
+ "version": "1.8.0-rc19"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mlrun
3
- Version: 1.8.0rc17
3
+ Version: 1.8.0rc19
4
4
  Summary: Tracking and config of machine learning runs
5
5
  Home-page: https://github.com/mlrun/mlrun
6
6
  Author: Yaron Haviv
@@ -51,12 +51,10 @@ Requires-Dist: setuptools>=75.2
51
51
  Requires-Dist: deprecated~=1.2
52
52
  Requires-Dist: jinja2>=3.1.3,~=3.1
53
53
  Requires-Dist: orjson<4,>=3.9.15
54
- Requires-Dist: mlrun-pipelines-kfp-common~=0.3.3
55
- Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.3.3; python_version < "3.11"
54
+ Requires-Dist: mlrun-pipelines-kfp-common~=0.3.5
55
+ Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.3.5; python_version < "3.11"
56
56
  Requires-Dist: docstring_parser~=0.16
57
57
  Requires-Dist: aiosmtplib~=3.0
58
- Requires-Dist: grpcio-tools~=1.48.2; python_version < "3.11"
59
- Requires-Dist: grpcio~=1.48.2; python_version < "3.11"
60
58
  Provides-Extra: s3
61
59
  Requires-Dist: boto3<1.36,>=1.28.0; extra == "s3"
62
60
  Requires-Dist: aiobotocore<2.16,>=2.5.0; extra == "s3"
@@ -121,7 +119,7 @@ Requires-Dist: timelength~=1.1; extra == "api"
121
119
  Requires-Dist: memray~=1.12; sys_platform != "win32" and extra == "api"
122
120
  Requires-Dist: aiosmtplib~=3.0; extra == "api"
123
121
  Requires-Dist: pydantic<2,>=1; extra == "api"
124
- Requires-Dist: mlrun-pipelines-kfp-v1-8[kfp]~=0.3.3; python_version < "3.11" and extra == "api"
122
+ Requires-Dist: mlrun-pipelines-kfp-v1-8[kfp]~=0.3.5; python_version < "3.11" and extra == "api"
125
123
  Provides-Extra: all
126
124
  Requires-Dist: adlfs==2023.9.0; extra == "all"
127
125
  Requires-Dist: aiobotocore<2.16,>=2.5.0; extra == "all"
@@ -210,7 +208,7 @@ Requires-Dist: igz-mgmt~=0.4.1; extra == "complete-api"
210
208
  Requires-Dist: kafka-python~=2.0; extra == "complete-api"
211
209
  Requires-Dist: memray~=1.12; sys_platform != "win32" and extra == "complete-api"
212
210
  Requires-Dist: mlflow~=2.16; extra == "complete-api"
213
- Requires-Dist: mlrun-pipelines-kfp-v1-8[kfp]~=0.3.3; python_version < "3.11" and extra == "complete-api"
211
+ Requires-Dist: mlrun-pipelines-kfp-v1-8[kfp]~=0.3.5; python_version < "3.11" and extra == "complete-api"
214
212
  Requires-Dist: msrest~=0.6.21; extra == "complete-api"
215
213
  Requires-Dist: objgraph~=3.6; extra == "complete-api"
216
214
  Requires-Dist: oss2==2.18.1; extra == "complete-api"
@@ -1,6 +1,6 @@
1
1
  mlrun/__init__.py,sha256=7vuMpUiigXXDrghLRq680LKWy1faC0kQyGCZb_7cwyE,7473
2
2
  mlrun/__main__.py,sha256=o65gXHhmFA9GV_n2mqmAO80nW3MAwo_s7j80IKgCzRE,45949
3
- mlrun/config.py,sha256=TgmglvBiIsG5P_okv0m622duVILyeDVeWRMH0pMtE2w,70571
3
+ mlrun/config.py,sha256=zHp7wtbaewFbHYsA_SLxwuwSDYwrcL6A3knWSPcRtAA,70547
4
4
  mlrun/errors.py,sha256=5raKb1PXQpTcIvWQ4sr1qn2IS7P_GT_FydBJ0dXkVuc,8097
5
5
  mlrun/execution.py,sha256=Up9U6xonTElRIaesF9Vej2JK1Isk2AZNK9ke0XcF5Dg,49030
6
6
  mlrun/features.py,sha256=ReBaNGsBYXqcbgI012n-SO_j6oHIbk_Vpv0CGPXbUmo,15842
@@ -42,7 +42,7 @@ mlrun/common/runtimes/constants.py,sha256=Mok3m9Rv182TTMp7uYNfWalm9Xcz86yva-4fTx
42
42
  mlrun/common/schemas/__init__.py,sha256=PBuIAhXSkVEVxxKcv5hR_xvTwNAUqxOXHVPugOoWTyM,5386
43
43
  mlrun/common/schemas/alert.py,sha256=G9lFTXFYDor-RVLpJxMorIPlLWr_-GYCFKRN9DkKwXs,10124
44
44
  mlrun/common/schemas/api_gateway.py,sha256=3a0QxECLmoDkD5IiOKtXJL-uiWB26Hg55WMA3nULYuI,7127
45
- mlrun/common/schemas/artifact.py,sha256=i29BeZ4MoOLMST3WlApX1Nli0vy-M7Zj_oTm8jySlw4,3805
45
+ mlrun/common/schemas/artifact.py,sha256=f0NPsoZmA-WD9RtN-dcKFW6KuV0PPQB25A2psF7LbP8,4013
46
46
  mlrun/common/schemas/auth.py,sha256=AGbBNvQq_vcvhX_NLqbT-QPHL4BAJMB3xwBXW7cFvpo,6761
47
47
  mlrun/common/schemas/background_task.py,sha256=ofWRAQGGEkXEu79Dbw7tT_5GPolR09Lc3Ebg2r0fT24,1728
48
48
  mlrun/common/schemas/client_spec.py,sha256=CCdAMwRS2DFKddxNSulWcRDwp3mrE7dDdKeAD6djxLo,2856
@@ -71,10 +71,10 @@ mlrun/common/schemas/schedule.py,sha256=LTWdZ4FvKDGkmmfyqKoBQ36VFqnnyIYLnq1I6qrT
71
71
  mlrun/common/schemas/secret.py,sha256=CCxFYiPwJtDxwg2VVJH9nUG9cAZ2a34IjeuaWv-BYlc,1487
72
72
  mlrun/common/schemas/tag.py,sha256=HRZi5QZ4vVGaCr2AMk9eJgcNiAIXmH4YDc8a4fvF770,893
73
73
  mlrun/common/schemas/workflow.py,sha256=rwYzDJYxpE9k4kC88j_eUCmqK4ZsWV_h-_nli7Fs7Ow,2078
74
- mlrun/common/schemas/model_monitoring/__init__.py,sha256=noj7DPPia59PBWORsQZO20Ym0yhUwyoNJ3EeG8gVxlQ,1875
75
- mlrun/common/schemas/model_monitoring/constants.py,sha256=VA1fEETbiyTKGiAG4WBSzo69Revd1_sgr8to6N0rp6U,11543
74
+ mlrun/common/schemas/model_monitoring/__init__.py,sha256=jz0fvdn8BEecgUCKhiSNH6QtFhSW4O19Ql9KXo0AxOg,1900
75
+ mlrun/common/schemas/model_monitoring/constants.py,sha256=KHpZiTruqr1iQ4XfEz8Ptj9ytCBuvwOXp30YTt5YQws,11834
76
76
  mlrun/common/schemas/model_monitoring/grafana.py,sha256=Rq10KKOyyUYr7qOQFZfwGZtUim0LY9O0LQ5uc9jmIVQ,1562
77
- mlrun/common/schemas/model_monitoring/model_endpoints.py,sha256=GVWePSdaKyJm7-QdBiAQdMymlp2QgZIJwXO9EA6Q7AI,11727
77
+ mlrun/common/schemas/model_monitoring/model_endpoints.py,sha256=j60-_puybc4yLlmoWkZ04m6PuY4p5yfzVJpPo0_n1sY,11725
78
78
  mlrun/data_types/__init__.py,sha256=unRo9GGwCmj0hBKBRsXJ2P4BzpQaddlQTvIrVQaKluI,984
79
79
  mlrun/data_types/data_types.py,sha256=0_oKLC6-sXL2_nnaDMP_HSXB3fD1nJAG4J2Jq6sGNNw,4998
80
80
  mlrun/data_types/infer.py,sha256=KdaRgWcqvLkuLjXrMuDr3ik6WY7JP5wJO0Yii_Vl5kw,6173
@@ -107,9 +107,9 @@ mlrun/datastore/wasbfs/__init__.py,sha256=s5Ul-0kAhYqFjKDR2X0O2vDGDbLQQduElb32Ev
107
107
  mlrun/datastore/wasbfs/fs.py,sha256=ge8NK__5vTcFT-krI155_8RDUywQw4SIRX6BWATXy9Q,6299
108
108
  mlrun/db/__init__.py,sha256=WqJ4x8lqJ7ZoKbhEyFqkYADd9P6E3citckx9e9ZLcIU,1163
109
109
  mlrun/db/auth_utils.py,sha256=hpg8D2r82oN0BWabuWN04BTNZ7jYMAF242YSUpK7LFM,5211
110
- mlrun/db/base.py,sha256=ZCvjAN68L4kRZsytkuqqz4JTLROxczmbXjJwU1vaK8c,29855
110
+ mlrun/db/base.py,sha256=aFtDl4J_yeEovso7uvnnn9KLYMnIRiS52qM1uemdG8k,30218
111
111
  mlrun/db/factory.py,sha256=yP2vVmveUE7LYTCHbS6lQIxP9rW--zdISWuPd_I3d_4,2111
112
- mlrun/db/httpdb.py,sha256=eGuQ05kwU8h_DbtuzlPo1aBMU4ZbfIsrRPWxiqb4v_Y,226141
112
+ mlrun/db/httpdb.py,sha256=VXp3ETu5fl_-6lEF_bsUerKESuRXbAFxLYvduH6DlKs,228070
113
113
  mlrun/db/nopdb.py,sha256=v285LHP_Onfuo8KRF078IAPHIXTeEhQsU58QoY7x-b0,26673
114
114
  mlrun/feature_store/__init__.py,sha256=AVnY2AFUNc2dKxLLUMx2K3Wo1eGviv0brDcYlDnmtf4,1506
115
115
  mlrun/feature_store/api.py,sha256=qkojZpzqGAn3r9ww0ynBRKOs8ji8URaK4DSYD4SE-CE,50395
@@ -219,13 +219,13 @@ mlrun/model_monitoring/__init__.py,sha256=ELy7njEtZnz09Dc6PGZSFFEGtnwI15bJNWM3Pj
219
219
  mlrun/model_monitoring/api.py,sha256=nH5aEUkmUEJF0CurrWJxmxVv1tQed2yzCLhQByG1L00,28561
220
220
  mlrun/model_monitoring/controller.py,sha256=dBfZQswF67vqeUFnmgsm9jU_5sOs9dLwMPEiYHG-Kk8,19786
221
221
  mlrun/model_monitoring/features_drift_table.py,sha256=c6GpKtpOJbuT1u5uMWDL_S-6N4YPOmlktWMqPme3KFY,25308
222
- mlrun/model_monitoring/helpers.py,sha256=Ul7-EHqzbf1GprB53Tf4WcbOHdD65sK3BgF2mpPYakg,17938
222
+ mlrun/model_monitoring/helpers.py,sha256=6L-IO4EUAYoAf74snGNiGDln_p77OIdxVdrf392VBzY,17936
223
223
  mlrun/model_monitoring/stream_processing.py,sha256=ltCVgo_b3yay16CUbqeGkRfzCHZSn14lVeBng5m9keY,31738
224
224
  mlrun/model_monitoring/tracking_policy.py,sha256=PBIGrUYWrwcE5gwXupBIVzOb0QRRwPJsgQm_yLGQxB4,5595
225
225
  mlrun/model_monitoring/writer.py,sha256=vbL7bqTyNu8q4bNcebX72sUMybVDAoTWg-CXq4fov3Y,8429
226
226
  mlrun/model_monitoring/applications/__init__.py,sha256=QYvzgCutFdAkzqKPD3mvkX_3c1X4tzd-kW8ojUOE9ic,889
227
227
  mlrun/model_monitoring/applications/_application_steps.py,sha256=NvrYJs6N0Kpp3s_t6s9LkCk5hY7kWYmkVoIhz_ZZx_8,7178
228
- mlrun/model_monitoring/applications/base.py,sha256=vk5cpGqD2UV6j-o4FV6g_2C-RwHEm4ags8uXM9Br5_0,13309
228
+ mlrun/model_monitoring/applications/base.py,sha256=pqmZ67zaslIkcJlsjcUG6TWjbBTD_fYci6rlEvbFttc,15091
229
229
  mlrun/model_monitoring/applications/context.py,sha256=kE_8h7eoUES_bFG2s7nENRziMFB72fJvAZ3KpIBWxOo,15084
230
230
  mlrun/model_monitoring/applications/evidently_base.py,sha256=hRjXuXf6xf8sbjGt9yYfGDUGnvS5rV3W7tkJroF3QJA,5098
231
231
  mlrun/model_monitoring/applications/histogram_data_drift.py,sha256=G26_4gQfcwDZe3S6SIZ4Uc_qyrHAJ6lDTFOQGkbfQR8,14455
@@ -234,15 +234,15 @@ mlrun/model_monitoring/db/__init__.py,sha256=r47xPGZpIfMuv8J3PQCZTSqVPMhUta4sSJC
234
234
  mlrun/model_monitoring/db/_schedules.py,sha256=NTO1rbSyhW1JidpBDSN39ZBD0ctp5pbJFYQwxKRIRrs,5821
235
235
  mlrun/model_monitoring/db/_stats.py,sha256=VVMWLMqG3Us3ozBkLaokJF22Ewv8WKmVE1-OvS_g9vA,6943
236
236
  mlrun/model_monitoring/db/tsdb/__init__.py,sha256=_ejhGA-bi5-6kEMEVYUN5TLxND8hTj4gMG7WrYIkpxM,4585
237
- mlrun/model_monitoring/db/tsdb/base.py,sha256=EWm-56AzuLSH1JV6DAhSRu9sUel5YD6Ch1n5tgUHODo,20983
237
+ mlrun/model_monitoring/db/tsdb/base.py,sha256=JjLBzZXE4ZxtBmihVXjUYZ2HKmgqX03ZhUynXp4948o,25372
238
238
  mlrun/model_monitoring/db/tsdb/helpers.py,sha256=0oUXc4aUkYtP2SGP6jTb3uPPKImIUsVsrb9otX9a7O4,1189
239
239
  mlrun/model_monitoring/db/tsdb/tdengine/__init__.py,sha256=vgBdsKaXUURKqIf3M0y4sRatmSVA4CQiJs7J5dcVBkQ,620
240
240
  mlrun/model_monitoring/db/tsdb/tdengine/schemas.py,sha256=6de8P0CJMqe7PGttoZNt9UtrbBcJnpIp82hk_MbtepA,12477
241
241
  mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py,sha256=Uadj0UvAmln2MxDWod-kAzau1uNlqZh981rPhbUH_5M,2857
242
- mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py,sha256=Vbx5u4Y2ZbzbRQDwMIyz-9S0OgkGKw_gZTvWvF8Jp7I,29599
242
+ mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py,sha256=IEpJknjqx_LYcZjIccPuujOfEruXsRm8c8YzYaWWNEQ,30175
243
243
  mlrun/model_monitoring/db/tsdb/v3io/__init__.py,sha256=aL3bfmQsUQ-sbvKGdNihFj8gLCK3mSys0qDcXtYOwgc,616
244
244
  mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py,sha256=_-zo9relCDtjGgievxAcAP9gVN9nDWs8BzGtFwTjb9M,6284
245
- mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py,sha256=rZGakT22t3vNO7K9Ez1Au1UM5-E8c2Fuw4B6wuIIWPM,35896
245
+ mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py,sha256=9j_TWS_3OXTwjiYw9jb92z8URHUXDW7hCgwZnpb2P8c,36834
246
246
  mlrun/model_monitoring/metrics/__init__.py,sha256=6CsTXAxeLbbf8yfCADTaxmiavqwrLEdYFJ-qc5kgDAY,569
247
247
  mlrun/model_monitoring/metrics/histogram_distance.py,sha256=E9_WIl2vd6qNvoHVHoFcnuQk3ekbFWOdi8aU7sHrfk4,4724
248
248
  mlrun/package/__init__.py,sha256=v7VDyK9kDOOuDvFo4oiGV2fx-vM1KL7fdN9pGLakhUQ,7008
@@ -266,8 +266,8 @@ mlrun/platforms/__init__.py,sha256=ZuyeHCHHUxYEoZRmaJqzFSfwhaTyUdBZXMeVp75ql1w,3
266
266
  mlrun/platforms/iguazio.py,sha256=6VBTq8eQ3mzT96tzjYhAtcMQ2VjF4x8LpIPW5DAcX2Q,13749
267
267
  mlrun/projects/__init__.py,sha256=0Krf0WIKfnZa71WthYOg0SoaTodGg3sV_hK3f_OlTPI,1220
268
268
  mlrun/projects/operations.py,sha256=VXUlMrouFTls-I-bMhdN5pPfQ34TR7bFQ-NUSWNvl84,20029
269
- mlrun/projects/pipelines.py,sha256=SOlwMyyPO4jhV61Ja_4yco3OYzhijNQwyoq8g41fTe8,47343
270
- mlrun/projects/project.py,sha256=fApkLLMJKPQi-Q69O-pZP5sh6eVsLmBt1KqZUFwcZoM,228225
269
+ mlrun/projects/pipelines.py,sha256=vZpyiERUzwPMS7NCC5ghI0KB_DItIddr7MMWGTwLawY,47437
270
+ mlrun/projects/project.py,sha256=WKIgBy1nqHxQ4d2AHId6wptnGeYzfZTY61K8pOQUrvI,228386
271
271
  mlrun/runtimes/__init__.py,sha256=J9Sy2HiyMlztNv6VUurMzF5H2XzttNil8nRsWDsqLyg,8923
272
272
  mlrun/runtimes/base.py,sha256=Yt2l7srrXjK783cunBEKH0yQxQZRH8lkedXNOXuLbbo,37841
273
273
  mlrun/runtimes/daskjob.py,sha256=JwuGvOiPsxEDHHMMUS4Oie4hLlYYIZwihAl6DjroTY0,19521
@@ -303,10 +303,10 @@ mlrun/serving/remote.py,sha256=gxJkj_J3j-sZcVUbUzbAmJafP6t6y4NVFsu0kWmYngA,18818
303
303
  mlrun/serving/routers.py,sha256=A_R34_N6uYw2veK58WpffEp1NsFwq0XbNU9is2Nd7s8,50901
304
304
  mlrun/serving/server.py,sha256=xP88X7_C4mHIk0R7TJBCl-jSl-VomctblipiYepQTaQ,22512
305
305
  mlrun/serving/serving_wrapper.py,sha256=R670-S6PX_d5ER6jiHtRvacuPyFzQH0mEf2K0sBIIOM,836
306
- mlrun/serving/states.py,sha256=m22RTz2Ap05ZlM9ZagxtQkbXNYy7VnopmFvycMyhkgc,67501
306
+ mlrun/serving/states.py,sha256=g6UIeaS6B9v8k4eDMmOxyoB8Gdqm9PiNIkeuzDyTJA8,67565
307
307
  mlrun/serving/utils.py,sha256=k2EIYDWHUGkE-IBI6T0UNT32fw-KySsccIJM_LObI00,4171
308
308
  mlrun/serving/v1_serving.py,sha256=c6J_MtpE-Tqu00-6r4eJOCO6rUasHDal9W2eBIcrl50,11853
309
- mlrun/serving/v2_serving.py,sha256=ViPRigBwb58M6eeRvKa3JyVLd_OVEEtjPVSMRFZ1aPs,21861
309
+ mlrun/serving/v2_serving.py,sha256=B1Vmca2_YidXyit4wuxR6JGooMGdaeZI3Ja90JHCz10,21882
310
310
  mlrun/track/__init__.py,sha256=yVXbT52fXvGKRlc_ByHqIVt7-9L3DRE634RSeQwgXtU,665
311
311
  mlrun/track/tracker.py,sha256=CyTU6Qd3_5GGEJ_hpocOj71wvV65EuFYUjaYEUKAL6Q,3575
312
312
  mlrun/track/tracker_manager.py,sha256=IYBl99I62IC6VCCmG1yt6JoHNOQXa53C4DURJ2sWgio,5726
@@ -318,7 +318,7 @@ mlrun/utils/azure_vault.py,sha256=IEFizrDGDbAaoWwDr1WoA88S_EZ0T--vjYtY-i0cvYQ,34
318
318
  mlrun/utils/clones.py,sha256=y3zC9QS7z5mLuvyQ6vFd6sJnikbgtDwrBvieQq0sovY,7359
319
319
  mlrun/utils/condition_evaluator.py,sha256=-nGfRmZzivn01rHTroiGY4rqEv8T1irMyhzxEei-sKc,1897
320
320
  mlrun/utils/db.py,sha256=blQgkWMfFH9lcN4sgJQcPQgEETz2Dl_zwbVA0SslpFg,2186
321
- mlrun/utils/helpers.py,sha256=3E7cQFcvcKdXmMnjsFY5r6cY6S0LxoFOrAkN6_jYw1s,64237
321
+ mlrun/utils/helpers.py,sha256=aPMmd5dEm7PIbx7maXtNGhNKzEHp8JK8uSmOgTtoDbc,69549
322
322
  mlrun/utils/http.py,sha256=t6FrXQstZm9xVVjxqIGiLzrwZNCR4CSienSOuVgNIcI,8706
323
323
  mlrun/utils/logger.py,sha256=_v4UTv1-STzC2c6aAWAa0NNl9STQoBYbR3OHgAiL41s,14606
324
324
  mlrun/utils/regex.py,sha256=IQqwPna6Z8J31xkTUduYbGk48GkQBUJFZSuxAWm1pzU,5162
@@ -327,7 +327,7 @@ mlrun/utils/singleton.py,sha256=p1Y-X0mPSs_At092GS-pZCA8CTR62HOqPU07_ZH6-To,869
327
327
  mlrun/utils/v3io_clients.py,sha256=0aCFiQFBmgdSeLzJr_nEP6SG-zyieSgH8RdtcUq4dc0,1294
328
328
  mlrun/utils/vault.py,sha256=xUiKL17dCXjwQJ33YRzQj0oadUXATlFWPzKKYAESoQk,10447
329
329
  mlrun/utils/notifications/__init__.py,sha256=eUzQDBxSQmMZASRY-YAnYS6tL5801P0wEjycp3Dvoe0,990
330
- mlrun/utils/notifications/notification_pusher.py,sha256=tG1VfdygP2mYe1JkLszufPGeq4zkD27vSqvfMAVMh-M,28172
330
+ mlrun/utils/notifications/notification_pusher.py,sha256=WN7RMfaZtCoG3bNfMjub1phbvJ2Xw8lKFiq2GStnKGw,24132
331
331
  mlrun/utils/notifications/notification/__init__.py,sha256=9Rfy6Jm8n0LaEDO1VAQb6kIbr7_uVuQhK1pS_abELIY,2581
332
332
  mlrun/utils/notifications/notification/base.py,sha256=VOgrzRakRfjYYBqvkc0cgEC5pl7KMidP7u-TL4HpGCY,5280
333
333
  mlrun/utils/notifications/notification/console.py,sha256=ICbIhOf9fEBJky_3j9TFiKAewDGyDHJr9l4VeT7G2sc,2745
@@ -335,13 +335,13 @@ mlrun/utils/notifications/notification/git.py,sha256=t2lqRrPRBO4awf_uhxJreH9Cpcb
335
335
  mlrun/utils/notifications/notification/ipython.py,sha256=9uZvI1uOLFaNuAsfJPXmL3l6dOzFoWdBK5GYNYFAfks,2282
336
336
  mlrun/utils/notifications/notification/mail.py,sha256=ZyJ3eqd8simxffQmXzqd3bgbAqp1vij7C6aRJ9h2mgs,6012
337
337
  mlrun/utils/notifications/notification/slack.py,sha256=NKV4RFiY3gLsS8uPppgniPLyag8zJ9O1VhixoXkM7kw,7108
338
- mlrun/utils/notifications/notification/webhook.py,sha256=M-pSBM2VTKVUPRERocjORlH6mKqo1K9ihVL5Qrn2GyM,4789
338
+ mlrun/utils/notifications/notification/webhook.py,sha256=NeyIMSBojjjTJaUHmPbxMByp34GxYkl1-16NqzU27fU,4943
339
339
  mlrun/utils/version/__init__.py,sha256=7kkrB7hEZ3cLXoWj1kPoDwo4MaswsI2JVOBpbKgPAgc,614
340
- mlrun/utils/version/version.json,sha256=Y-XDXMFgN05nuMsqiCUUOaj573CKHH1Tt1UOh7jsTps,89
340
+ mlrun/utils/version/version.json,sha256=9e_fs0UZTGdzgD6yjggI41O7Hv5n_tbuYDMtJsSNspY,89
341
341
  mlrun/utils/version/version.py,sha256=eEW0tqIAkU9Xifxv8Z9_qsYnNhn3YH7NRAfM-pPLt1g,1878
342
- mlrun-1.8.0rc17.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
343
- mlrun-1.8.0rc17.dist-info/METADATA,sha256=MtbtQTijxHOPGjTOgbRVt20Y5d6CjE9LT67gern78r0,25001
344
- mlrun-1.8.0rc17.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
345
- mlrun-1.8.0rc17.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
346
- mlrun-1.8.0rc17.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
347
- mlrun-1.8.0rc17.dist-info/RECORD,,
342
+ mlrun-1.8.0rc19.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
343
+ mlrun-1.8.0rc19.dist-info/METADATA,sha256=A2YOQIMx1P8pckWVn0bKsr8oEpcWxVbhkXhPxTplJMM,24885
344
+ mlrun-1.8.0rc19.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
345
+ mlrun-1.8.0rc19.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
346
+ mlrun-1.8.0rc19.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
347
+ mlrun-1.8.0rc19.dist-info/RECORD,,