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/common/schemas/artifact.py +6 -0
- mlrun/common/schemas/model_monitoring/__init__.py +1 -0
- mlrun/common/schemas/model_monitoring/constants.py +11 -0
- mlrun/common/schemas/model_monitoring/model_endpoints.py +2 -2
- mlrun/config.py +3 -2
- mlrun/db/base.py +9 -0
- mlrun/db/httpdb.py +42 -0
- mlrun/model_monitoring/applications/base.py +54 -19
- mlrun/model_monitoring/db/tsdb/base.py +116 -8
- mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +23 -11
- mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +23 -4
- mlrun/model_monitoring/helpers.py +2 -2
- mlrun/projects/pipelines.py +2 -1
- mlrun/projects/project.py +12 -7
- mlrun/serving/states.py +3 -3
- mlrun/serving/v2_serving.py +3 -3
- mlrun/utils/helpers.py +134 -0
- mlrun/utils/notifications/notification/webhook.py +3 -0
- mlrun/utils/notifications/notification_pusher.py +33 -131
- mlrun/utils/version/version.json +2 -2
- {mlrun-1.8.0rc17.dist-info → mlrun-1.8.0rc19.dist-info}/METADATA +5 -7
- {mlrun-1.8.0rc17.dist-info → mlrun-1.8.0rc19.dist-info}/RECORD +26 -26
- {mlrun-1.8.0rc17.dist-info → mlrun-1.8.0rc19.dist-info}/LICENSE +0 -0
- {mlrun-1.8.0rc17.dist-info → mlrun-1.8.0rc19.dist-info}/WHEEL +0 -0
- {mlrun-1.8.0rc17.dist-info → mlrun-1.8.0rc19.dist-info}/entry_points.txt +0 -0
- {mlrun-1.8.0rc17.dist-info → mlrun-1.8.0rc19.dist-info}/top_level.txt +0 -0
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
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
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=
|
|
2152
|
+
model_endpoint_id=endpoint_uid,
|
|
2148
2153
|
app_name=result.app,
|
|
2149
2154
|
result_name=result.name,
|
|
2150
2155
|
)
|
|
2151
|
-
for result in
|
|
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(
|
mlrun/serving/v2_serving.py
CHANGED
|
@@ -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.
|
|
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
|
|
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
|
|
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
|
-
|
|
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],
|
mlrun/utils/version/version.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mlrun
|
|
3
|
-
Version: 1.8.
|
|
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.
|
|
55
|
-
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.3.
|
|
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.
|
|
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.
|
|
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=
|
|
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=
|
|
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=
|
|
75
|
-
mlrun/common/schemas/model_monitoring/constants.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
270
|
-
mlrun/projects/project.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
343
|
-
mlrun-1.8.
|
|
344
|
-
mlrun-1.8.
|
|
345
|
-
mlrun-1.8.
|
|
346
|
-
mlrun-1.8.
|
|
347
|
-
mlrun-1.8.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|