mlrun 1.7.0rc24__py3-none-any.whl → 1.7.0rc25__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/__main__.py +3 -1
- mlrun/common/formatters/__init__.py +1 -0
- mlrun/common/formatters/artifact.py +26 -3
- mlrun/common/formatters/run.py +26 -0
- mlrun/common/schemas/__init__.py +2 -0
- mlrun/common/schemas/alert.py +1 -1
- mlrun/common/schemas/artifact.py +11 -0
- mlrun/common/schemas/feature_store.py +2 -22
- mlrun/common/schemas/pipeline.py +16 -0
- mlrun/common/schemas/project.py +17 -0
- mlrun/common/schemas/runs.py +17 -0
- mlrun/common/types.py +5 -0
- mlrun/config.py +1 -19
- mlrun/datastore/targets.py +12 -1
- mlrun/db/base.py +53 -2
- mlrun/db/httpdb.py +82 -9
- mlrun/db/nopdb.py +33 -2
- mlrun/model.py +2 -0
- mlrun/model_monitoring/applications/histogram_data_drift.py +1 -1
- mlrun/projects/pipelines.py +10 -9
- mlrun/projects/project.py +16 -6
- mlrun/run.py +11 -6
- mlrun/runtimes/base.py +11 -4
- mlrun/serving/server.py +8 -2
- mlrun/serving/states.py +29 -0
- mlrun/utils/helpers.py +3 -0
- mlrun/utils/notifications/notification_pusher.py +2 -8
- mlrun/utils/version/version.json +2 -2
- {mlrun-1.7.0rc24.dist-info → mlrun-1.7.0rc25.dist-info}/METADATA +2 -2
- {mlrun-1.7.0rc24.dist-info → mlrun-1.7.0rc25.dist-info}/RECORD +34 -33
- {mlrun-1.7.0rc24.dist-info → mlrun-1.7.0rc25.dist-info}/WHEEL +1 -1
- {mlrun-1.7.0rc24.dist-info → mlrun-1.7.0rc25.dist-info}/LICENSE +0 -0
- {mlrun-1.7.0rc24.dist-info → mlrun-1.7.0rc25.dist-info}/entry_points.txt +0 -0
- {mlrun-1.7.0rc24.dist-info → mlrun-1.7.0rc25.dist-info}/top_level.txt +0 -0
mlrun/__main__.py
CHANGED
|
@@ -102,7 +102,9 @@ def main():
|
|
|
102
102
|
)
|
|
103
103
|
@click.option("--uid", help="unique run ID")
|
|
104
104
|
@click.option("--name", help="run name")
|
|
105
|
-
@click.option(
|
|
105
|
+
@click.option(
|
|
106
|
+
"--workflow", help="sets the run labels to match the given workflow name/id"
|
|
107
|
+
)
|
|
106
108
|
@click.option("--project", help="project name/id")
|
|
107
109
|
@click.option("--db", default="", help="save run results to path or DB url")
|
|
108
110
|
@click.option(
|
|
@@ -13,9 +13,32 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
15
|
|
|
16
|
+
import typing
|
|
17
|
+
|
|
16
18
|
import mlrun.common.types
|
|
17
19
|
|
|
20
|
+
from .base import ObjectFormat
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ArtifactFormat(ObjectFormat, mlrun.common.types.StrEnum):
|
|
24
|
+
minimal = "minimal"
|
|
18
25
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
26
|
+
@staticmethod
|
|
27
|
+
def format_method(_format: str) -> typing.Optional[typing.Callable]:
|
|
28
|
+
return {
|
|
29
|
+
ArtifactFormat.full: None,
|
|
30
|
+
ArtifactFormat.minimal: ArtifactFormat.filter_obj_method(
|
|
31
|
+
[
|
|
32
|
+
"kind",
|
|
33
|
+
"metadata",
|
|
34
|
+
"status",
|
|
35
|
+
"project",
|
|
36
|
+
"spec.producer",
|
|
37
|
+
"spec.db_key",
|
|
38
|
+
"spec.size",
|
|
39
|
+
"spec.framework",
|
|
40
|
+
"spec.metrics",
|
|
41
|
+
"spec.target_path",
|
|
42
|
+
]
|
|
43
|
+
),
|
|
44
|
+
}[_format]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Copyright 2024 Iguazio
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
#
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
import mlrun.common.types
|
|
18
|
+
from mlrun.common.formatters.base import ObjectFormat
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class RunFormat(ObjectFormat, mlrun.common.types.StrEnum):
|
|
22
|
+
# No enrichment, data is pulled as-is from the database.
|
|
23
|
+
standard = "standard"
|
|
24
|
+
|
|
25
|
+
# Performs run enrichment, including the run's artifacts. Only available for the `get` run API.
|
|
26
|
+
full = "full"
|
mlrun/common/schemas/__init__.py
CHANGED
mlrun/common/schemas/alert.py
CHANGED
mlrun/common/schemas/artifact.py
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import typing
|
|
16
16
|
|
|
17
17
|
import pydantic
|
|
18
|
+
from deprecated import deprecated
|
|
18
19
|
|
|
19
20
|
import mlrun.common.types
|
|
20
21
|
|
|
@@ -58,6 +59,16 @@ class ArtifactIdentifier(pydantic.BaseModel):
|
|
|
58
59
|
# hash: typing.Optional[str]
|
|
59
60
|
|
|
60
61
|
|
|
62
|
+
@deprecated(
|
|
63
|
+
version="1.7.0",
|
|
64
|
+
reason="mlrun.common.schemas.ArtifactsFormat is deprecated and will be removed in 1.9.0. "
|
|
65
|
+
"Use mlrun.common.formatters.ArtifactFormat instead.",
|
|
66
|
+
category=FutureWarning,
|
|
67
|
+
)
|
|
68
|
+
class ArtifactsFormat(mlrun.common.types.StrEnum):
|
|
69
|
+
full = "full"
|
|
70
|
+
|
|
71
|
+
|
|
61
72
|
class ArtifactMetadata(pydantic.BaseModel):
|
|
62
73
|
key: str
|
|
63
74
|
project: str
|
|
@@ -46,16 +46,6 @@ class Feature(FeatureStoreBaseModel):
|
|
|
46
46
|
extra = pydantic.Extra.allow
|
|
47
47
|
|
|
48
48
|
|
|
49
|
-
class QualifiedFeature(FeatureStoreBaseModel):
|
|
50
|
-
name: str
|
|
51
|
-
value_type: str
|
|
52
|
-
feature_set_index: int
|
|
53
|
-
labels: Optional[dict] = {}
|
|
54
|
-
|
|
55
|
-
class Config:
|
|
56
|
-
extra = pydantic.Extra.allow
|
|
57
|
-
|
|
58
|
-
|
|
59
49
|
class Entity(FeatureStoreBaseModel):
|
|
60
50
|
name: str
|
|
61
51
|
value_type: str
|
|
@@ -65,16 +55,6 @@ class Entity(FeatureStoreBaseModel):
|
|
|
65
55
|
extra = pydantic.Extra.allow
|
|
66
56
|
|
|
67
57
|
|
|
68
|
-
class QualifiedEntity(FeatureStoreBaseModel):
|
|
69
|
-
name: str
|
|
70
|
-
value_type: str
|
|
71
|
-
feature_set_index: int
|
|
72
|
-
labels: Optional[dict] = {}
|
|
73
|
-
|
|
74
|
-
class Config:
|
|
75
|
-
extra = pydantic.Extra.allow
|
|
76
|
-
|
|
77
|
-
|
|
78
58
|
class FeatureSetSpec(ObjectSpec):
|
|
79
59
|
entities: list[Entity] = []
|
|
80
60
|
features: list[Feature] = []
|
|
@@ -156,7 +136,7 @@ class FeaturesOutput(FeatureStoreBaseModel):
|
|
|
156
136
|
|
|
157
137
|
|
|
158
138
|
class FeaturesOutputV2(FeatureStoreBaseModel):
|
|
159
|
-
features: list[
|
|
139
|
+
features: list[Feature]
|
|
160
140
|
feature_set_digests: list[FeatureSetDigestOutputV2]
|
|
161
141
|
|
|
162
142
|
|
|
@@ -166,7 +146,7 @@ class EntityListOutput(FeatureStoreBaseModel):
|
|
|
166
146
|
|
|
167
147
|
|
|
168
148
|
class EntitiesOutputV2(FeatureStoreBaseModel):
|
|
169
|
-
entities: list[
|
|
149
|
+
entities: list[Entity]
|
|
170
150
|
feature_set_digests: list[FeatureSetDigestOutputV2]
|
|
171
151
|
|
|
172
152
|
|
mlrun/common/schemas/pipeline.py
CHANGED
|
@@ -15,6 +15,22 @@
|
|
|
15
15
|
import typing
|
|
16
16
|
|
|
17
17
|
import pydantic
|
|
18
|
+
from deprecated import deprecated
|
|
19
|
+
|
|
20
|
+
import mlrun.common.types
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@deprecated(
|
|
24
|
+
version="1.7.0",
|
|
25
|
+
reason="mlrun.common.schemas.PipelinesFormat is deprecated and will be removed in 1.9.0. "
|
|
26
|
+
"Use mlrun.common.formatters.PipelineFormat instead.",
|
|
27
|
+
category=FutureWarning,
|
|
28
|
+
)
|
|
29
|
+
class PipelinesFormat(mlrun.common.types.StrEnum):
|
|
30
|
+
full = "full"
|
|
31
|
+
metadata_only = "metadata_only"
|
|
32
|
+
summary = "summary"
|
|
33
|
+
name_only = "name_only"
|
|
18
34
|
|
|
19
35
|
|
|
20
36
|
class PipelinesPagination(str):
|
mlrun/common/schemas/project.py
CHANGED
|
@@ -16,6 +16,7 @@ import datetime
|
|
|
16
16
|
import typing
|
|
17
17
|
|
|
18
18
|
import pydantic
|
|
19
|
+
from deprecated import deprecated
|
|
19
20
|
|
|
20
21
|
import mlrun.common.types
|
|
21
22
|
|
|
@@ -23,6 +24,22 @@ from .common import ImageBuilder
|
|
|
23
24
|
from .object import ObjectKind, ObjectStatus
|
|
24
25
|
|
|
25
26
|
|
|
27
|
+
@deprecated(
|
|
28
|
+
version="1.7.0",
|
|
29
|
+
reason="mlrun.common.schemas.ProjectsFormat is deprecated and will be removed in 1.9.0. "
|
|
30
|
+
"Use mlrun.common.formatters.ProjectFormat instead.",
|
|
31
|
+
category=FutureWarning,
|
|
32
|
+
)
|
|
33
|
+
class ProjectsFormat(mlrun.common.types.StrEnum):
|
|
34
|
+
full = "full"
|
|
35
|
+
name_only = "name_only"
|
|
36
|
+
# minimal format removes large fields from the response (e.g. functions, workflows, artifacts)
|
|
37
|
+
# and is used for faster response times (in the UI)
|
|
38
|
+
minimal = "minimal"
|
|
39
|
+
# internal - allowed only in follower mode, only for the leader for upgrade purposes
|
|
40
|
+
leader = "leader"
|
|
41
|
+
|
|
42
|
+
|
|
26
43
|
class ProjectMetadata(pydantic.BaseModel):
|
|
27
44
|
name: str
|
|
28
45
|
created: typing.Optional[datetime.datetime] = None
|
mlrun/common/schemas/runs.py
CHANGED
|
@@ -15,9 +15,26 @@
|
|
|
15
15
|
import typing
|
|
16
16
|
|
|
17
17
|
import pydantic
|
|
18
|
+
from deprecated import deprecated
|
|
19
|
+
|
|
20
|
+
import mlrun.common.types
|
|
18
21
|
|
|
19
22
|
|
|
20
23
|
class RunIdentifier(pydantic.BaseModel):
|
|
21
24
|
kind: typing.Literal["run"] = "run"
|
|
22
25
|
uid: typing.Optional[str]
|
|
23
26
|
iter: typing.Optional[int]
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@deprecated(
|
|
30
|
+
version="1.7.0",
|
|
31
|
+
reason="mlrun.common.schemas.RunsFormat is deprecated and will be removed in 1.9.0. "
|
|
32
|
+
"Use mlrun.common.formatters.RunFormat instead.",
|
|
33
|
+
category=FutureWarning,
|
|
34
|
+
)
|
|
35
|
+
class RunsFormat(mlrun.common.types.StrEnum):
|
|
36
|
+
# No enrichment, data is pulled as-is from the database.
|
|
37
|
+
standard = "standard"
|
|
38
|
+
|
|
39
|
+
# Performs run enrichment, including the run's artifacts. Only available for the `get` run API.
|
|
40
|
+
full = "full"
|
mlrun/common/types.py
CHANGED
mlrun/config.py
CHANGED
|
@@ -707,7 +707,7 @@ default_config = {
|
|
|
707
707
|
"mode": "enabled",
|
|
708
708
|
# maximum number of alerts we allow to be configured.
|
|
709
709
|
# user will get an error when exceeding this
|
|
710
|
-
"max_allowed":
|
|
710
|
+
"max_allowed": 10000,
|
|
711
711
|
},
|
|
712
712
|
"auth_with_client_id": {
|
|
713
713
|
"enabled": False,
|
|
@@ -938,24 +938,6 @@ class Config:
|
|
|
938
938
|
f"is not allowed for iguazio version: {igz_version} < 3.5.1"
|
|
939
939
|
)
|
|
940
940
|
|
|
941
|
-
def resolve_kfp_url(self, namespace=None):
|
|
942
|
-
if config.kfp_url:
|
|
943
|
-
return config.kfp_url
|
|
944
|
-
igz_version = self.get_parsed_igz_version()
|
|
945
|
-
# TODO: When Iguazio 3.4 will deprecate we can remove this line
|
|
946
|
-
if igz_version and igz_version <= semver.VersionInfo.parse("3.6.0-b1"):
|
|
947
|
-
if namespace is None:
|
|
948
|
-
if not config.namespace:
|
|
949
|
-
raise mlrun.errors.MLRunNotFoundError(
|
|
950
|
-
"For KubeFlow Pipelines to function, a namespace must be configured"
|
|
951
|
-
)
|
|
952
|
-
namespace = config.namespace
|
|
953
|
-
# When instead of host we provided namespace we tackled this issue
|
|
954
|
-
# https://github.com/canonical/bundle-kubeflow/issues/412
|
|
955
|
-
# TODO: When we'll move to kfp 1.4.0 (server side) it should be resolved
|
|
956
|
-
return f"http://ml-pipeline.{namespace}.svc.cluster.local:8888"
|
|
957
|
-
return None
|
|
958
|
-
|
|
959
941
|
def resolve_chief_api_url(self) -> str:
|
|
960
942
|
if self.httpdb.clusterization.chief.url:
|
|
961
943
|
return self.httpdb.clusterization.chief.url
|
mlrun/datastore/targets.py
CHANGED
|
@@ -696,6 +696,7 @@ class BaseStoreTarget(DataTargetBase):
|
|
|
696
696
|
self.kind, self.name, self.get_target_templated_path()
|
|
697
697
|
)
|
|
698
698
|
target = self._target
|
|
699
|
+
target.attributes = self.attributes
|
|
699
700
|
target.run_id = self.run_id
|
|
700
701
|
target.status = status or target.status or "created"
|
|
701
702
|
target.updated = now_date().isoformat()
|
|
@@ -727,8 +728,18 @@ class BaseStoreTarget(DataTargetBase):
|
|
|
727
728
|
raise NotImplementedError()
|
|
728
729
|
|
|
729
730
|
def purge(self):
|
|
731
|
+
"""
|
|
732
|
+
Delete the files of the target.
|
|
733
|
+
|
|
734
|
+
Do not use this function directly from the sdk. Use FeatureSet.purge_targets.
|
|
735
|
+
"""
|
|
730
736
|
store, path_in_store, target_path = self._get_store_and_path()
|
|
731
|
-
|
|
737
|
+
if path_in_store not in ["", "/"]:
|
|
738
|
+
store.rm(path_in_store, recursive=True)
|
|
739
|
+
else:
|
|
740
|
+
raise mlrun.errors.MLRunInvalidArgumentError(
|
|
741
|
+
"Unable to delete target. Please Use purge_targets from FeatureSet object."
|
|
742
|
+
)
|
|
732
743
|
|
|
733
744
|
def as_df(
|
|
734
745
|
self,
|
mlrun/db/base.py
CHANGED
|
@@ -16,6 +16,8 @@ import datetime
|
|
|
16
16
|
from abc import ABC, abstractmethod
|
|
17
17
|
from typing import Optional, Union
|
|
18
18
|
|
|
19
|
+
from deprecated import deprecated
|
|
20
|
+
|
|
19
21
|
import mlrun.alerts
|
|
20
22
|
import mlrun.common
|
|
21
23
|
import mlrun.common.formatters
|
|
@@ -56,7 +58,13 @@ class RunDBInterface(ABC):
|
|
|
56
58
|
pass
|
|
57
59
|
|
|
58
60
|
@abstractmethod
|
|
59
|
-
def read_run(
|
|
61
|
+
def read_run(
|
|
62
|
+
self,
|
|
63
|
+
uid: str,
|
|
64
|
+
project: str = "",
|
|
65
|
+
iter: int = 0,
|
|
66
|
+
format_: mlrun.common.formatters.RunFormat = mlrun.common.formatters.RunFormat.full,
|
|
67
|
+
):
|
|
60
68
|
pass
|
|
61
69
|
|
|
62
70
|
@abstractmethod
|
|
@@ -103,7 +111,16 @@ class RunDBInterface(ABC):
|
|
|
103
111
|
pass
|
|
104
112
|
|
|
105
113
|
@abstractmethod
|
|
106
|
-
def read_artifact(
|
|
114
|
+
def read_artifact(
|
|
115
|
+
self,
|
|
116
|
+
key,
|
|
117
|
+
tag="",
|
|
118
|
+
iter=None,
|
|
119
|
+
project="",
|
|
120
|
+
tree=None,
|
|
121
|
+
uid=None,
|
|
122
|
+
format_: mlrun.common.formatters.ArtifactFormat = mlrun.common.formatters.ArtifactFormat.full,
|
|
123
|
+
):
|
|
107
124
|
pass
|
|
108
125
|
|
|
109
126
|
@abstractmethod
|
|
@@ -120,6 +137,7 @@ class RunDBInterface(ABC):
|
|
|
120
137
|
kind: str = None,
|
|
121
138
|
category: Union[str, mlrun.common.schemas.ArtifactCategories] = None,
|
|
122
139
|
tree: str = None,
|
|
140
|
+
format_: mlrun.common.formatters.ArtifactFormat = mlrun.common.formatters.ArtifactFormat.full,
|
|
123
141
|
):
|
|
124
142
|
pass
|
|
125
143
|
|
|
@@ -302,6 +320,12 @@ class RunDBInterface(ABC):
|
|
|
302
320
|
) -> dict:
|
|
303
321
|
pass
|
|
304
322
|
|
|
323
|
+
# TODO: remove in 1.9.0
|
|
324
|
+
@deprecated(
|
|
325
|
+
version="1.9.0",
|
|
326
|
+
reason="'list_features' will be removed in 1.9.0, use 'list_features_v2' instead",
|
|
327
|
+
category=FutureWarning,
|
|
328
|
+
)
|
|
305
329
|
@abstractmethod
|
|
306
330
|
def list_features(
|
|
307
331
|
self,
|
|
@@ -313,6 +337,23 @@ class RunDBInterface(ABC):
|
|
|
313
337
|
) -> mlrun.common.schemas.FeaturesOutput:
|
|
314
338
|
pass
|
|
315
339
|
|
|
340
|
+
@abstractmethod
|
|
341
|
+
def list_features_v2(
|
|
342
|
+
self,
|
|
343
|
+
project: str,
|
|
344
|
+
name: str = None,
|
|
345
|
+
tag: str = None,
|
|
346
|
+
entities: list[str] = None,
|
|
347
|
+
labels: list[str] = None,
|
|
348
|
+
) -> mlrun.common.schemas.FeaturesOutputV2:
|
|
349
|
+
pass
|
|
350
|
+
|
|
351
|
+
# TODO: remove in 1.9.0
|
|
352
|
+
@deprecated(
|
|
353
|
+
version="1.9.0",
|
|
354
|
+
reason="'list_entities' will be removed in 1.9.0, use 'list_entities_v2' instead",
|
|
355
|
+
category=FutureWarning,
|
|
356
|
+
)
|
|
316
357
|
@abstractmethod
|
|
317
358
|
def list_entities(
|
|
318
359
|
self,
|
|
@@ -323,6 +364,16 @@ class RunDBInterface(ABC):
|
|
|
323
364
|
) -> mlrun.common.schemas.EntitiesOutput:
|
|
324
365
|
pass
|
|
325
366
|
|
|
367
|
+
@abstractmethod
|
|
368
|
+
def list_entities_v2(
|
|
369
|
+
self,
|
|
370
|
+
project: str,
|
|
371
|
+
name: str = None,
|
|
372
|
+
tag: str = None,
|
|
373
|
+
labels: list[str] = None,
|
|
374
|
+
) -> mlrun.common.schemas.EntitiesOutputV2:
|
|
375
|
+
pass
|
|
376
|
+
|
|
326
377
|
@abstractmethod
|
|
327
378
|
def list_feature_sets(
|
|
328
379
|
self,
|
mlrun/db/httpdb.py
CHANGED
|
@@ -725,16 +725,26 @@ class HTTPRunDB(RunDBInterface):
|
|
|
725
725
|
)
|
|
726
726
|
return None
|
|
727
727
|
|
|
728
|
-
def read_run(
|
|
728
|
+
def read_run(
|
|
729
|
+
self,
|
|
730
|
+
uid,
|
|
731
|
+
project="",
|
|
732
|
+
iter=0,
|
|
733
|
+
format_: mlrun.common.formatters.RunFormat = mlrun.common.formatters.RunFormat.full,
|
|
734
|
+
):
|
|
729
735
|
"""Read the details of a stored run from the DB.
|
|
730
736
|
|
|
731
|
-
:param uid:
|
|
732
|
-
:param project:
|
|
733
|
-
:param iter:
|
|
737
|
+
:param uid: The run's unique ID.
|
|
738
|
+
:param project: Project name.
|
|
739
|
+
:param iter: Iteration within a specific execution.
|
|
740
|
+
:param format_: The format in which to return the run details.
|
|
734
741
|
"""
|
|
735
742
|
|
|
736
743
|
path = self._path_of("runs", project, uid)
|
|
737
|
-
params = {
|
|
744
|
+
params = {
|
|
745
|
+
"iter": iter,
|
|
746
|
+
"format": format_.value,
|
|
747
|
+
}
|
|
738
748
|
error = f"get run {project}/{uid}"
|
|
739
749
|
resp = self.api_call("GET", path, error, params=params)
|
|
740
750
|
return resp.json()["data"]
|
|
@@ -979,6 +989,7 @@ class HTTPRunDB(RunDBInterface):
|
|
|
979
989
|
project="",
|
|
980
990
|
tree=None,
|
|
981
991
|
uid=None,
|
|
992
|
+
format_: mlrun.common.formatters.ArtifactFormat = mlrun.common.formatters.ArtifactFormat.full,
|
|
982
993
|
):
|
|
983
994
|
"""Read an artifact, identified by its key, tag, tree and iteration.
|
|
984
995
|
|
|
@@ -988,20 +999,20 @@ class HTTPRunDB(RunDBInterface):
|
|
|
988
999
|
:param project: Project that the artifact belongs to.
|
|
989
1000
|
:param tree: The tree which generated this artifact.
|
|
990
1001
|
:param uid: A unique ID for this specific version of the artifact (the uid that was generated in the backend)
|
|
1002
|
+
:param format_: The format in which to return the artifact. Default is 'full'.
|
|
991
1003
|
"""
|
|
992
1004
|
|
|
993
1005
|
project = project or config.default_project
|
|
994
1006
|
tag = tag or "latest"
|
|
995
1007
|
endpoint_path = f"projects/{project}/artifacts/{key}"
|
|
996
1008
|
error = f"read artifact {project}/{key}"
|
|
997
|
-
# explicitly set artifacts format to 'full' since old servers may default to 'legacy'
|
|
998
1009
|
params = {
|
|
999
|
-
"format":
|
|
1010
|
+
"format": format_,
|
|
1000
1011
|
"tag": tag,
|
|
1001
1012
|
"tree": tree,
|
|
1002
1013
|
"uid": uid,
|
|
1003
1014
|
}
|
|
1004
|
-
if iter:
|
|
1015
|
+
if iter is not None:
|
|
1005
1016
|
params["iter"] = str(iter)
|
|
1006
1017
|
resp = self.api_call("GET", endpoint_path, error, params=params, version="v2")
|
|
1007
1018
|
return resp.json()
|
|
@@ -1061,6 +1072,7 @@ class HTTPRunDB(RunDBInterface):
|
|
|
1061
1072
|
category: Union[str, mlrun.common.schemas.ArtifactCategories] = None,
|
|
1062
1073
|
tree: str = None,
|
|
1063
1074
|
producer_uri: str = None,
|
|
1075
|
+
format_: mlrun.common.formatters.ArtifactFormat = mlrun.common.formatters.ArtifactFormat.full,
|
|
1064
1076
|
) -> ArtifactList:
|
|
1065
1077
|
"""List artifacts filtered by various parameters.
|
|
1066
1078
|
|
|
@@ -1095,6 +1107,7 @@ class HTTPRunDB(RunDBInterface):
|
|
|
1095
1107
|
:param producer_uri: Return artifacts produced by the requested producer URI. Producer URI usually
|
|
1096
1108
|
points to a run and is used to filter artifacts by the run that produced them when the artifact producer id
|
|
1097
1109
|
is a workflow id (artifact was created as part of a workflow).
|
|
1110
|
+
:param format_: The format in which to return the artifacts. Default is 'full'.
|
|
1098
1111
|
"""
|
|
1099
1112
|
|
|
1100
1113
|
project = project or config.default_project
|
|
@@ -1112,7 +1125,7 @@ class HTTPRunDB(RunDBInterface):
|
|
|
1112
1125
|
"kind": kind,
|
|
1113
1126
|
"category": category,
|
|
1114
1127
|
"tree": tree,
|
|
1115
|
-
"format":
|
|
1128
|
+
"format": format_,
|
|
1116
1129
|
"producer_uri": producer_uri,
|
|
1117
1130
|
}
|
|
1118
1131
|
error = "list artifacts"
|
|
@@ -2110,6 +2123,41 @@ class HTTPRunDB(RunDBInterface):
|
|
|
2110
2123
|
resp = self.api_call("GET", path, error_message, params=params)
|
|
2111
2124
|
return resp.json()["features"]
|
|
2112
2125
|
|
|
2126
|
+
def list_features_v2(
|
|
2127
|
+
self,
|
|
2128
|
+
project: str,
|
|
2129
|
+
name: str = None,
|
|
2130
|
+
tag: str = None,
|
|
2131
|
+
entities: list[str] = None,
|
|
2132
|
+
labels: list[str] = None,
|
|
2133
|
+
) -> dict[str, list[dict]]:
|
|
2134
|
+
"""List feature-sets which contain specific features. This function may return multiple versions of the same
|
|
2135
|
+
feature-set if a specific tag is not requested. Note that the various filters of this function actually
|
|
2136
|
+
refer to the feature-set object containing the features, not to the features themselves.
|
|
2137
|
+
|
|
2138
|
+
:param project: Project which contains these features.
|
|
2139
|
+
:param name: Name of the feature to look for. The name is used in a like query, and is not case-sensitive. For
|
|
2140
|
+
example, looking for ``feat`` will return features which are named ``MyFeature`` as well as ``defeat``.
|
|
2141
|
+
:param tag: Return feature-sets which contain the features looked for, and are tagged with the specific tag.
|
|
2142
|
+
:param entities: Return only feature-sets which contain an entity whose name is contained in this list.
|
|
2143
|
+
:param labels: Return only feature-sets which are labeled as requested.
|
|
2144
|
+
:returns: A list of features, and a list of their corresponding feature sets.
|
|
2145
|
+
"""
|
|
2146
|
+
|
|
2147
|
+
project = project or config.default_project
|
|
2148
|
+
params = {
|
|
2149
|
+
"name": name,
|
|
2150
|
+
"tag": tag,
|
|
2151
|
+
"entity": entities or [],
|
|
2152
|
+
"label": labels or [],
|
|
2153
|
+
}
|
|
2154
|
+
|
|
2155
|
+
path = f"projects/{project}/features"
|
|
2156
|
+
|
|
2157
|
+
error_message = f"Failed listing features, project: {project}, query: {params}"
|
|
2158
|
+
resp = self.api_call("GET", path, error_message, params=params, version="v2")
|
|
2159
|
+
return resp.json()
|
|
2160
|
+
|
|
2113
2161
|
def list_entities(
|
|
2114
2162
|
self,
|
|
2115
2163
|
project: str,
|
|
@@ -2135,6 +2183,31 @@ class HTTPRunDB(RunDBInterface):
|
|
|
2135
2183
|
resp = self.api_call("GET", path, error_message, params=params)
|
|
2136
2184
|
return resp.json()["entities"]
|
|
2137
2185
|
|
|
2186
|
+
def list_entities_v2(
|
|
2187
|
+
self,
|
|
2188
|
+
project: str,
|
|
2189
|
+
name: str = None,
|
|
2190
|
+
tag: str = None,
|
|
2191
|
+
labels: list[str] = None,
|
|
2192
|
+
) -> dict[str, list[dict]]:
|
|
2193
|
+
"""Retrieve a list of entities and their mapping to the containing feature-sets. This function is similar
|
|
2194
|
+
to the :py:func:`~list_features_v2` function, and uses the same logic. However, the entities are matched
|
|
2195
|
+
against the name rather than the features.
|
|
2196
|
+
"""
|
|
2197
|
+
|
|
2198
|
+
project = project or config.default_project
|
|
2199
|
+
params = {
|
|
2200
|
+
"name": name,
|
|
2201
|
+
"tag": tag,
|
|
2202
|
+
"label": labels or [],
|
|
2203
|
+
}
|
|
2204
|
+
|
|
2205
|
+
path = f"projects/{project}/entities"
|
|
2206
|
+
|
|
2207
|
+
error_message = f"Failed listing entities, project: {project}, query: {params}"
|
|
2208
|
+
resp = self.api_call("GET", path, error_message, params=params, version="v2")
|
|
2209
|
+
return resp.json()
|
|
2210
|
+
|
|
2138
2211
|
@staticmethod
|
|
2139
2212
|
def _generate_partition_by_params(
|
|
2140
2213
|
partition_by_cls,
|
mlrun/db/nopdb.py
CHANGED
|
@@ -73,7 +73,13 @@ class NopDB(RunDBInterface):
|
|
|
73
73
|
def abort_run(self, uid, project="", iter=0, timeout=45, status_text=""):
|
|
74
74
|
pass
|
|
75
75
|
|
|
76
|
-
def read_run(
|
|
76
|
+
def read_run(
|
|
77
|
+
self,
|
|
78
|
+
uid,
|
|
79
|
+
project="",
|
|
80
|
+
iter=0,
|
|
81
|
+
format_: mlrun.common.formatters.RunFormat = mlrun.common.formatters.RunFormat.full,
|
|
82
|
+
):
|
|
77
83
|
pass
|
|
78
84
|
|
|
79
85
|
def list_runs(
|
|
@@ -115,7 +121,16 @@ class NopDB(RunDBInterface):
|
|
|
115
121
|
):
|
|
116
122
|
pass
|
|
117
123
|
|
|
118
|
-
def read_artifact(
|
|
124
|
+
def read_artifact(
|
|
125
|
+
self,
|
|
126
|
+
key,
|
|
127
|
+
tag="",
|
|
128
|
+
iter=None,
|
|
129
|
+
project="",
|
|
130
|
+
tree=None,
|
|
131
|
+
uid=None,
|
|
132
|
+
format_: mlrun.common.formatters.ArtifactFormat = mlrun.common.formatters.ArtifactFormat.full,
|
|
133
|
+
):
|
|
119
134
|
pass
|
|
120
135
|
|
|
121
136
|
def list_artifacts(
|
|
@@ -131,6 +146,7 @@ class NopDB(RunDBInterface):
|
|
|
131
146
|
kind: str = None,
|
|
132
147
|
category: Union[str, mlrun.common.schemas.ArtifactCategories] = None,
|
|
133
148
|
tree: str = None,
|
|
149
|
+
format_: mlrun.common.formatters.ArtifactFormat = mlrun.common.formatters.ArtifactFormat.full,
|
|
134
150
|
):
|
|
135
151
|
pass
|
|
136
152
|
|
|
@@ -252,11 +268,26 @@ class NopDB(RunDBInterface):
|
|
|
252
268
|
) -> mlrun.common.schemas.FeaturesOutput:
|
|
253
269
|
pass
|
|
254
270
|
|
|
271
|
+
def list_features_v2(
|
|
272
|
+
self,
|
|
273
|
+
project: str,
|
|
274
|
+
name: str = None,
|
|
275
|
+
tag: str = None,
|
|
276
|
+
entities: list[str] = None,
|
|
277
|
+
labels: list[str] = None,
|
|
278
|
+
) -> mlrun.common.schemas.FeaturesOutputV2:
|
|
279
|
+
pass
|
|
280
|
+
|
|
255
281
|
def list_entities(
|
|
256
282
|
self, project: str, name: str = None, tag: str = None, labels: list[str] = None
|
|
257
283
|
) -> mlrun.common.schemas.EntitiesOutput:
|
|
258
284
|
pass
|
|
259
285
|
|
|
286
|
+
def list_entities_v2(
|
|
287
|
+
self, project: str, name: str = None, tag: str = None, labels: list[str] = None
|
|
288
|
+
) -> mlrun.common.schemas.EntitiesOutputV2:
|
|
289
|
+
pass
|
|
290
|
+
|
|
260
291
|
def list_feature_sets(
|
|
261
292
|
self,
|
|
262
293
|
project: str = "",
|
mlrun/model.py
CHANGED
|
@@ -1989,6 +1989,7 @@ class DataTarget(DataTargetBase):
|
|
|
1989
1989
|
"name",
|
|
1990
1990
|
"kind",
|
|
1991
1991
|
"path",
|
|
1992
|
+
"attributes",
|
|
1992
1993
|
"start_time",
|
|
1993
1994
|
"online",
|
|
1994
1995
|
"status",
|
|
@@ -2020,6 +2021,7 @@ class DataTarget(DataTargetBase):
|
|
|
2020
2021
|
self.last_written = None
|
|
2021
2022
|
self._producer = None
|
|
2022
2023
|
self.producer = {}
|
|
2024
|
+
self.attributes = {}
|
|
2023
2025
|
|
|
2024
2026
|
@property
|
|
2025
2027
|
def producer(self) -> FeatureSetProducer:
|
|
@@ -193,7 +193,7 @@ class HistogramDataDriftApplication(ModelMonitoringApplicationBaseV2):
|
|
|
193
193
|
status=status,
|
|
194
194
|
extra_data={
|
|
195
195
|
EventFieldType.CURRENT_STATS: json.dumps(
|
|
196
|
-
monitoring_context.
|
|
196
|
+
monitoring_context.sample_df_stats
|
|
197
197
|
),
|
|
198
198
|
EventFieldType.DRIFT_MEASURES: metrics_per_feature.T.to_json(),
|
|
199
199
|
EventFieldType.DRIFT_STATUS: status.value,
|
mlrun/projects/pipelines.py
CHANGED
|
@@ -22,8 +22,7 @@ import uuid
|
|
|
22
22
|
|
|
23
23
|
import mlrun_pipelines.common.models
|
|
24
24
|
import mlrun_pipelines.patcher
|
|
25
|
-
|
|
26
|
-
from mlrun_pipelines.helpers import new_pipe_metadata
|
|
25
|
+
import mlrun_pipelines.utils
|
|
27
26
|
|
|
28
27
|
import mlrun
|
|
29
28
|
import mlrun.common.runtimes.constants
|
|
@@ -220,9 +219,10 @@ class _PipelineContext:
|
|
|
220
219
|
force_run_local = mlrun.mlconf.force_run_local
|
|
221
220
|
if force_run_local is None or force_run_local == "auto":
|
|
222
221
|
force_run_local = not mlrun.mlconf.is_api_running_on_k8s()
|
|
223
|
-
|
|
224
|
-
|
|
222
|
+
if not mlrun.mlconf.kfp_url:
|
|
223
|
+
logger.debug("Kubeflow pipeline URL is not set, running locally")
|
|
225
224
|
force_run_local = True
|
|
225
|
+
|
|
226
226
|
if self.workflow:
|
|
227
227
|
force_run_local = force_run_local or self.workflow.run_local
|
|
228
228
|
|
|
@@ -502,13 +502,14 @@ class _KFPRunner(_PipelineRunner):
|
|
|
502
502
|
functions,
|
|
503
503
|
secrets=project._secrets,
|
|
504
504
|
)
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
conf = new_pipe_metadata(
|
|
508
|
-
artifact_path=artifact_path,
|
|
505
|
+
mlrun_pipelines.utils.compile_pipeline(
|
|
506
|
+
artifact_path=artifact_path or project.spec.artifact_path,
|
|
509
507
|
cleanup_ttl=workflow_spec.cleanup_ttl,
|
|
508
|
+
ops=None,
|
|
509
|
+
pipeline=pipeline,
|
|
510
|
+
pipe_file=target,
|
|
511
|
+
type_check=True,
|
|
510
512
|
)
|
|
511
|
-
compiler.Compiler().compile(pipeline, target, pipeline_conf=conf)
|
|
512
513
|
workflow_spec.clear_tmp()
|
|
513
514
|
pipeline_context.clear()
|
|
514
515
|
|
mlrun/projects/project.py
CHANGED
|
@@ -51,6 +51,7 @@ import mlrun.runtimes.nuclio.api_gateway
|
|
|
51
51
|
import mlrun.runtimes.pod
|
|
52
52
|
import mlrun.runtimes.utils
|
|
53
53
|
import mlrun.serving
|
|
54
|
+
import mlrun.utils
|
|
54
55
|
import mlrun.utils.regex
|
|
55
56
|
from mlrun.alerts.alert import AlertConfig
|
|
56
57
|
from mlrun.common.schemas.alert import AlertTemplate
|
|
@@ -993,15 +994,24 @@ class ProjectSpec(ModelObj):
|
|
|
993
994
|
|
|
994
995
|
artifacts_dict = {}
|
|
995
996
|
for artifact in artifacts:
|
|
996
|
-
|
|
997
|
+
invalid_object_type = not isinstance(artifact, dict) and not hasattr(
|
|
998
|
+
artifact, "to_dict"
|
|
999
|
+
)
|
|
1000
|
+
is_artifact_model = not isinstance(artifact, dict) and hasattr(
|
|
1001
|
+
artifact, "to_dict"
|
|
1002
|
+
)
|
|
1003
|
+
|
|
1004
|
+
if invalid_object_type:
|
|
997
1005
|
raise ValueError("artifacts must be a dict or class")
|
|
998
|
-
|
|
999
|
-
key = artifact.get("metadata", {}).get("key", "")
|
|
1000
|
-
if not key:
|
|
1001
|
-
raise ValueError('artifacts "metadata.key" must be specified')
|
|
1002
|
-
else:
|
|
1006
|
+
elif is_artifact_model:
|
|
1003
1007
|
key = artifact.key
|
|
1004
1008
|
artifact = artifact.to_dict()
|
|
1009
|
+
else: # artifact is a dict
|
|
1010
|
+
# imported artifacts don't have metadata,spec,status fields
|
|
1011
|
+
key_field = "key" if _is_imported_artifact(artifact) else "metadata.key"
|
|
1012
|
+
key = mlrun.utils.get_in(artifact, key_field, "")
|
|
1013
|
+
if not key:
|
|
1014
|
+
raise ValueError(f'artifacts "{key_field}" must be specified')
|
|
1005
1015
|
|
|
1006
1016
|
artifacts_dict[key] = artifact
|
|
1007
1017
|
|
mlrun/run.py
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
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
|
import importlib.util as imputil
|
|
15
16
|
import json
|
|
16
17
|
import os
|
|
@@ -28,9 +29,9 @@ from typing import Optional, Union
|
|
|
28
29
|
|
|
29
30
|
import nuclio
|
|
30
31
|
import yaml
|
|
31
|
-
from kfp import Client
|
|
32
32
|
from mlrun_pipelines.common.models import RunStatuses
|
|
33
33
|
from mlrun_pipelines.common.ops import format_summary_from_kfp_run, show_kfp_run
|
|
34
|
+
from mlrun_pipelines.utils import get_client
|
|
34
35
|
|
|
35
36
|
import mlrun.common.constants as mlrun_constants
|
|
36
37
|
import mlrun.common.formatters
|
|
@@ -293,10 +294,14 @@ def get_or_create_ctx(
|
|
|
293
294
|
newspec["metadata"]["project"] = (
|
|
294
295
|
newspec["metadata"].get("project") or project or mlconf.default_project
|
|
295
296
|
)
|
|
297
|
+
|
|
296
298
|
newspec["metadata"].setdefault("labels", {})
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
299
|
+
|
|
300
|
+
# This function can also be called as a local run if it is not called within a function.
|
|
301
|
+
# It will create a local run, and the run kind must be local by default.
|
|
302
|
+
newspec["metadata"]["labels"].setdefault(
|
|
303
|
+
mlrun_constants.MLRunInternalLabels.kind, RuntimeKinds.local
|
|
304
|
+
)
|
|
300
305
|
|
|
301
306
|
ctx = MLClientCtx.from_dict(
|
|
302
307
|
newspec, rundb=out, autocommit=autocommit, tmp=tmp, host=socket.gethostname()
|
|
@@ -948,7 +953,7 @@ def wait_for_pipeline_completion(
|
|
|
948
953
|
_wait_for_pipeline_completion,
|
|
949
954
|
)
|
|
950
955
|
else:
|
|
951
|
-
client =
|
|
956
|
+
client = get_client(namespace=namespace)
|
|
952
957
|
resp = client.wait_for_run_completion(run_id, timeout)
|
|
953
958
|
if resp:
|
|
954
959
|
resp = resp.to_dict()
|
|
@@ -1009,7 +1014,7 @@ def get_pipeline(
|
|
|
1009
1014
|
)
|
|
1010
1015
|
|
|
1011
1016
|
else:
|
|
1012
|
-
client =
|
|
1017
|
+
client = get_client(namespace=namespace)
|
|
1013
1018
|
resp = client.get_run(run_id)
|
|
1014
1019
|
if resp:
|
|
1015
1020
|
resp = resp.to_dict()
|
mlrun/runtimes/base.py
CHANGED
|
@@ -426,13 +426,19 @@ class BaseRuntime(ModelObj):
|
|
|
426
426
|
reset_on_run=reset_on_run,
|
|
427
427
|
)
|
|
428
428
|
|
|
429
|
-
def _get_db_run(
|
|
429
|
+
def _get_db_run(
|
|
430
|
+
self,
|
|
431
|
+
task: RunObject = None,
|
|
432
|
+
run_format: mlrun.common.formatters.RunFormat = mlrun.common.formatters.RunFormat.full,
|
|
433
|
+
):
|
|
430
434
|
if self._get_db() and task:
|
|
431
435
|
project = task.metadata.project
|
|
432
436
|
uid = task.metadata.uid
|
|
433
437
|
iter = task.metadata.iteration
|
|
434
438
|
try:
|
|
435
|
-
return self._get_db().read_run(
|
|
439
|
+
return self._get_db().read_run(
|
|
440
|
+
uid, project, iter=iter, format_=run_format
|
|
441
|
+
)
|
|
436
442
|
except mlrun.db.RunDBError:
|
|
437
443
|
return None
|
|
438
444
|
if task:
|
|
@@ -549,13 +555,14 @@ class BaseRuntime(ModelObj):
|
|
|
549
555
|
self,
|
|
550
556
|
resp: dict = None,
|
|
551
557
|
task: RunObject = None,
|
|
552
|
-
err=None,
|
|
558
|
+
err: Union[Exception, str] = None,
|
|
559
|
+
run_format: mlrun.common.formatters.RunFormat = mlrun.common.formatters.RunFormat.full,
|
|
553
560
|
) -> typing.Optional[dict]:
|
|
554
561
|
"""update the task state in the DB"""
|
|
555
562
|
was_none = False
|
|
556
563
|
if resp is None and task:
|
|
557
564
|
was_none = True
|
|
558
|
-
resp = self._get_db_run(task)
|
|
565
|
+
resp = self._get_db_run(task, run_format)
|
|
559
566
|
|
|
560
567
|
if not resp:
|
|
561
568
|
self.store_run(task)
|
mlrun/serving/server.py
CHANGED
|
@@ -383,8 +383,14 @@ def v2_serving_handler(context, event, get_body=False):
|
|
|
383
383
|
if event.body == b"":
|
|
384
384
|
event.body = None
|
|
385
385
|
|
|
386
|
-
#
|
|
387
|
-
|
|
386
|
+
# original path is saved in stream_path so it can be used by explicit ack, but path is reset to / as a
|
|
387
|
+
# workaround for NUC-178
|
|
388
|
+
event.stream_path = event.path
|
|
389
|
+
if hasattr(event, "trigger") and event.trigger.kind in (
|
|
390
|
+
"kafka",
|
|
391
|
+
"kafka-cluster",
|
|
392
|
+
"v3ioStream",
|
|
393
|
+
):
|
|
388
394
|
event.path = "/"
|
|
389
395
|
|
|
390
396
|
return context._server.run(event, context, get_body)
|
mlrun/serving/states.py
CHANGED
|
@@ -832,6 +832,35 @@ class QueueStep(BaseStep):
|
|
|
832
832
|
def async_object(self):
|
|
833
833
|
return self._async_object
|
|
834
834
|
|
|
835
|
+
def to(
|
|
836
|
+
self,
|
|
837
|
+
class_name: Union[str, StepToDict] = None,
|
|
838
|
+
name: str = None,
|
|
839
|
+
handler: str = None,
|
|
840
|
+
graph_shape: str = None,
|
|
841
|
+
function: str = None,
|
|
842
|
+
full_event: bool = None,
|
|
843
|
+
input_path: str = None,
|
|
844
|
+
result_path: str = None,
|
|
845
|
+
**class_args,
|
|
846
|
+
):
|
|
847
|
+
if not function:
|
|
848
|
+
name = get_name(name, class_name)
|
|
849
|
+
raise mlrun.errors.MLRunInvalidArgumentError(
|
|
850
|
+
f"step '{name}' must specify a function, because it follows a queue step"
|
|
851
|
+
)
|
|
852
|
+
return super().to(
|
|
853
|
+
class_name,
|
|
854
|
+
name,
|
|
855
|
+
handler,
|
|
856
|
+
graph_shape,
|
|
857
|
+
function,
|
|
858
|
+
full_event,
|
|
859
|
+
input_path,
|
|
860
|
+
result_path,
|
|
861
|
+
**class_args,
|
|
862
|
+
)
|
|
863
|
+
|
|
835
864
|
def run(self, event, *args, **kwargs):
|
|
836
865
|
data = event.body
|
|
837
866
|
if not data:
|
mlrun/utils/helpers.py
CHANGED
|
@@ -674,6 +674,8 @@ def parse_artifact_uri(uri, default_project=""):
|
|
|
674
674
|
raise ValueError(
|
|
675
675
|
f"illegal store path '{uri}', iteration must be integer value"
|
|
676
676
|
)
|
|
677
|
+
else:
|
|
678
|
+
iteration = 0
|
|
677
679
|
return (
|
|
678
680
|
group_dict["project"] or default_project,
|
|
679
681
|
group_dict["key"],
|
|
@@ -1314,6 +1316,7 @@ def format_run(run: PipelineRun, with_project=False) -> dict:
|
|
|
1314
1316
|
"scheduled_at",
|
|
1315
1317
|
"finished_at",
|
|
1316
1318
|
"description",
|
|
1319
|
+
"experiment_id",
|
|
1317
1320
|
]
|
|
1318
1321
|
|
|
1319
1322
|
if with_project:
|
|
@@ -20,9 +20,9 @@ import traceback
|
|
|
20
20
|
import typing
|
|
21
21
|
from concurrent.futures import ThreadPoolExecutor
|
|
22
22
|
|
|
23
|
-
import kfp
|
|
24
23
|
import mlrun_pipelines.common.ops
|
|
25
24
|
import mlrun_pipelines.models
|
|
25
|
+
import mlrun_pipelines.utils
|
|
26
26
|
|
|
27
27
|
import mlrun.common.constants as mlrun_constants
|
|
28
28
|
import mlrun.common.runtimes.constants
|
|
@@ -484,13 +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
|
-
|
|
488
|
-
if not kfp_url:
|
|
489
|
-
raise mlrun.errors.MLRunNotFoundError(
|
|
490
|
-
"KubeFlow Pipelines is not configured"
|
|
491
|
-
)
|
|
492
|
-
|
|
493
|
-
kfp_client = kfp.Client(host=kfp_url)
|
|
487
|
+
kfp_client = mlrun_pipelines.utils.get_client(mlrun.mlconf)
|
|
494
488
|
|
|
495
489
|
# arbitrary timeout of 5 seconds, the workflow should be done by now
|
|
496
490
|
kfp_run = kfp_client.wait_for_run_completion(workflow_id, 5)
|
mlrun/utils/version/version.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mlrun
|
|
3
|
-
Version: 1.7.
|
|
3
|
+
Version: 1.7.0rc25
|
|
4
4
|
Summary: Tracking and config of machine learning runs
|
|
5
5
|
Home-page: https://github.com/mlrun/mlrun
|
|
6
6
|
Author: Yaron Haviv
|
|
@@ -43,7 +43,7 @@ Requires-Dist: semver ~=3.0
|
|
|
43
43
|
Requires-Dist: dependency-injector ~=4.41
|
|
44
44
|
Requires-Dist: fsspec <2024.4,>=2023.9.2
|
|
45
45
|
Requires-Dist: v3iofs ~=0.1.17
|
|
46
|
-
Requires-Dist: storey ~=1.7.
|
|
46
|
+
Requires-Dist: storey ~=1.7.20
|
|
47
47
|
Requires-Dist: inflection ~=0.5.0
|
|
48
48
|
Requires-Dist: python-dotenv ~=0.17.0
|
|
49
49
|
Requires-Dist: setuptools ~=69.1
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
mlrun/__init__.py,sha256=y08M1JcKXy5-9_5WaI9fn5aV5BxIQ5QkbduJK0OxWbA,7470
|
|
2
|
-
mlrun/__main__.py,sha256=
|
|
3
|
-
mlrun/config.py,sha256=
|
|
2
|
+
mlrun/__main__.py,sha256=KzJQH8Rw7izeIdnfVIJO0ZDjdyUMCyicT0f_n0HhtAw,45897
|
|
3
|
+
mlrun/config.py,sha256=A6kKM_-jDyG3qgCD9ZjQhgp7S_Muk5BJCJxWoal94Bc,64563
|
|
4
4
|
mlrun/errors.py,sha256=Y26Czt93m5HCSPd6CyrHFiWO4R7spiTrOnk4FqaUUxE,7345
|
|
5
5
|
mlrun/execution.py,sha256=ZSk61dXqnEmxnUYxaAjtSzobMlD1yF9VaW56KLmaiUs,41717
|
|
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=
|
|
9
|
+
mlrun/model.py,sha256=ZILAK8-HTdVf3hI_ANwQfBTRYtm2wB9kEtg-HRoK9Xk,72201
|
|
10
10
|
mlrun/render.py,sha256=uVI4kk7XqMAxamholZ_stPQ0nPUebij50ZpgAdjDQ6U,13131
|
|
11
|
-
mlrun/run.py,sha256=
|
|
11
|
+
mlrun/run.py,sha256=1jMUIeucjyynHzRyHAyBgg8kZUwJ0751SAoz965IsDo,42893
|
|
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=dAXff9Y0UY5gwuUiofs6BngiNoebkVWI503oATihAXM,6040
|
|
@@ -23,22 +23,23 @@ mlrun/common/__init__.py,sha256=xY3wHC4TEJgez7qtnn1pQvHosi8-5UJOCtyGBS7FcGE,571
|
|
|
23
23
|
mlrun/common/constants.py,sha256=glR3bAqDanX6fOOfuM7vJ9GSy-2RVmn1wNtLFeHqjr0,2987
|
|
24
24
|
mlrun/common/helpers.py,sha256=LRIULbCg8afKkPnzsZ99-B-JPVjcwR1G9vO--1rzRrQ,1387
|
|
25
25
|
mlrun/common/secrets.py,sha256=vc8WV82EZsCB5ENjUkObFOzZP59aZ1w8F82PTnqwBnc,5181
|
|
26
|
-
mlrun/common/types.py,sha256=
|
|
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
|
-
mlrun/common/formatters/__init__.py,sha256=
|
|
30
|
-
mlrun/common/formatters/artifact.py,sha256=
|
|
29
|
+
mlrun/common/formatters/__init__.py,sha256=91yPb5xoLK7fTIOC5C7ndJMvyEBlQY6f0CjenLYbsZw,785
|
|
30
|
+
mlrun/common/formatters/artifact.py,sha256=rwMSedrkcNz6XVHhyuxVqfFTnHNrT2XU8hg42VVKvwE,1363
|
|
31
31
|
mlrun/common/formatters/base.py,sha256=1dBjmE22S3WvaV_JV6fw6Q2U5NxeB6ZzsFFH2dVvFYA,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
|
|
34
34
|
mlrun/common/formatters/project.py,sha256=rdGf7fq_CfwFwd8iKWl8sW-tqTJilK3gJtV5oLdaY-M,1756
|
|
35
|
+
mlrun/common/formatters/run.py,sha256=eEBy1NEwGT9b98TWS2OetEbDnDrnHBIBVMrlXsxveo4,920
|
|
35
36
|
mlrun/common/model_monitoring/__init__.py,sha256=x0EMEvxVjHsm858J1t6IEA9dtKTdFpJ9sKhss10ld8A,721
|
|
36
37
|
mlrun/common/model_monitoring/helpers.py,sha256=1CpxIDQPumFnpUB1eqcvCpLlyPFVeW2sL6prM-N5A1A,4405
|
|
37
38
|
mlrun/common/runtimes/constants.py,sha256=Rl0Sd8n_L7Imo-uF1LL9CJ5Szi0W1gUm36yrF8PXfSc,10989
|
|
38
|
-
mlrun/common/schemas/__init__.py,sha256=
|
|
39
|
-
mlrun/common/schemas/alert.py,sha256=
|
|
39
|
+
mlrun/common/schemas/__init__.py,sha256=uqXeeg275X7NlM9FrH5JBORLA5s87P8MSrd7fwPoTlY,5236
|
|
40
|
+
mlrun/common/schemas/alert.py,sha256=a5zUqPRzfE8mMiBDc1n0x7mQ6INExlU7-IRq0q8LY3Q,6644
|
|
40
41
|
mlrun/common/schemas/api_gateway.py,sha256=QydwqvklisZZu8-cCvGdnhqORwq7Q7cUhY88na57Fh0,6725
|
|
41
|
-
mlrun/common/schemas/artifact.py,sha256=
|
|
42
|
+
mlrun/common/schemas/artifact.py,sha256=V3ngobnzI1v2eoOroWBEedjAZu0ntCSIQ-LzsOK1Z9k,3570
|
|
42
43
|
mlrun/common/schemas/auth.py,sha256=5c4WSn3KdX1v04ttSQblkF_gyjdjuJSHG7BTCx4_LWM,6336
|
|
43
44
|
mlrun/common/schemas/background_task.py,sha256=2qZxib2qrF_nPZj0ncitCG-2jxz2hg1qj0hFc8eswWQ,1707
|
|
44
45
|
mlrun/common/schemas/client_spec.py,sha256=xQ_9S5i5q7vJmkp2_3IYD0FSYnWoAr1k-W9MU2ClgEU,2955
|
|
@@ -47,7 +48,7 @@ mlrun/common/schemas/common.py,sha256=00upzVLPN7O511Q87yt-fvRcDQFbXra4j0_lqMGg6r
|
|
|
47
48
|
mlrun/common/schemas/constants.py,sha256=UnnhyLeF-SSjy8KaV5a-TBw4Ws675gueYGiP1fr5NfU,6476
|
|
48
49
|
mlrun/common/schemas/datastore_profile.py,sha256=hJ8q54A8VZKsnOvSIjcllj4MZ1bBhb_EmBgsqpwSF_Y,750
|
|
49
50
|
mlrun/common/schemas/events.py,sha256=ROHJLo_fqYjc96pek7yhAUPpPRIuAR76lwxvNz8LIr8,1026
|
|
50
|
-
mlrun/common/schemas/feature_store.py,sha256=
|
|
51
|
+
mlrun/common/schemas/feature_store.py,sha256=T0yKYcv6cb3ZwgY5Jh9kWp94zLv2ImxAQUy6x68Imd0,4776
|
|
51
52
|
mlrun/common/schemas/frontend_spec.py,sha256=CNPq3YV0U1jCbCMbb84_Oid2Snow5EXYt1F5wsuhgD8,2454
|
|
52
53
|
mlrun/common/schemas/function.py,sha256=Khd5Jd6ept1nHWkW1WdIy1u8iK4O8_Ddf3a7cv3Hf1I,4652
|
|
53
54
|
mlrun/common/schemas/http.py,sha256=1PtYFhF6sqLSBRcuPMtYcUGmroBhaleqLmYidSdL9LM,705
|
|
@@ -57,10 +58,10 @@ mlrun/common/schemas/memory_reports.py,sha256=tpS3fpvxa6VcBpzCRzcZTt0fCF0h6ReUet
|
|
|
57
58
|
mlrun/common/schemas/notification.py,sha256=Ge7eWNGf_XUFkjOnUkyUOubdEbmXh9z_OSGcSturt4w,1768
|
|
58
59
|
mlrun/common/schemas/object.py,sha256=VleJSUmDJMl92knLgaDE8SWCi3ky0UaHcwcwOIapPQ8,1980
|
|
59
60
|
mlrun/common/schemas/pagination.py,sha256=q7nk6bipkDiE7HExIVqhy5ANl-zv0x8QC9Kg6AkLtDA,887
|
|
60
|
-
mlrun/common/schemas/pipeline.py,sha256=
|
|
61
|
-
mlrun/common/schemas/project.py,sha256=
|
|
61
|
+
mlrun/common/schemas/pipeline.py,sha256=MhH07_fAQXNAnmf5j6oXZp8qh9cxGcZlReMdt-ZJf40,1429
|
|
62
|
+
mlrun/common/schemas/project.py,sha256=YVmnF187RjVaD0RYcw8hZuk7g_sv9grSv-K9R4cjDhw,4885
|
|
62
63
|
mlrun/common/schemas/regex.py,sha256=8_vbDeAE0SODJDj7yUFg1FbaB9CNydYQTJ29JxE74Kc,776
|
|
63
|
-
mlrun/common/schemas/runs.py,sha256=
|
|
64
|
+
mlrun/common/schemas/runs.py,sha256=yGGJxSHT_Mq4RLjlfuxW4pm9i-Py9eOsGUAofs_VqVM,1268
|
|
64
65
|
mlrun/common/schemas/runtime_resource.py,sha256=2rSuYL-9JkESSomlnU91mYDbfV-IkqZeXx6OHuMmDxs,1554
|
|
65
66
|
mlrun/common/schemas/schedule.py,sha256=e9nAeRkZkyk37Ws1cBNseHVKPOQqmWV16rt-zr_eAJU,4287
|
|
66
67
|
mlrun/common/schemas/secret.py,sha256=51tCN1F8DFTq4y_XdHIMDy3I1TnMEBX8kO8BHKavYF4,1484
|
|
@@ -93,17 +94,17 @@ mlrun/datastore/sources.py,sha256=p6wDgR6AMpaHYi5iP58oNViUtUGK4lfyD68ffN4XtKI,45
|
|
|
93
94
|
mlrun/datastore/spark_udf.py,sha256=NnnB3DZxZb-rqpRy7b-NC7QWXuuqFn3XkBDc86tU4mQ,1498
|
|
94
95
|
mlrun/datastore/spark_utils.py,sha256=50rllp6xXpXY__1LbU7aTXUU5ca8dKAfoskPre3npZo,1611
|
|
95
96
|
mlrun/datastore/store_resources.py,sha256=iKVWhAK8uwoYap14j48sbaDPrx6WsboWJFHQCJNWxyM,6832
|
|
96
|
-
mlrun/datastore/targets.py,sha256=
|
|
97
|
+
mlrun/datastore/targets.py,sha256=R_xntuaxAtkGdhFrilvc6TQ9mWdLNZNdAaPH3l70-J4,79425
|
|
97
98
|
mlrun/datastore/utils.py,sha256=l9dLZb_VCbHs_htqMFRv4qiestZ8z8K-4eY1MxHS8wE,7720
|
|
98
99
|
mlrun/datastore/v3io.py,sha256=tmZ2S-POZhjjKPE_0T1EkHcv6Q10pz5KQiaTXE1Be-4,8102
|
|
99
100
|
mlrun/datastore/wasbfs/__init__.py,sha256=s5Ul-0kAhYqFjKDR2X0O2vDGDbLQQduElb32Ev56Te4,1343
|
|
100
101
|
mlrun/datastore/wasbfs/fs.py,sha256=MnSj7Q4OKA2L55ihCmUnj2t3GA3B77oLMdAw-yxvN9w,6151
|
|
101
102
|
mlrun/db/__init__.py,sha256=WqJ4x8lqJ7ZoKbhEyFqkYADd9P6E3citckx9e9ZLcIU,1163
|
|
102
103
|
mlrun/db/auth_utils.py,sha256=hpg8D2r82oN0BWabuWN04BTNZ7jYMAF242YSUpK7LFM,5211
|
|
103
|
-
mlrun/db/base.py,sha256=
|
|
104
|
+
mlrun/db/base.py,sha256=N3y6YzTuEohZufQidU4Yfe2fn4SSsQ6WQHM5-KP6p9I,23751
|
|
104
105
|
mlrun/db/factory.py,sha256=ibIrE5QkIIyzDU1FXKrfbc31cZiRLYKDZb8dqCpQwyU,2397
|
|
105
|
-
mlrun/db/httpdb.py,sha256=
|
|
106
|
-
mlrun/db/nopdb.py,sha256=
|
|
106
|
+
mlrun/db/httpdb.py,sha256=Ei49Xta7JRYnsAbZ3zIU0nfq9YVj-ceLHwegK_aLGuo,182913
|
|
107
|
+
mlrun/db/nopdb.py,sha256=UwFtaqKDRdYojpUVSzHf0UMyBCJ4YIxdlV9QTOz_FUI,20498
|
|
107
108
|
mlrun/feature_store/__init__.py,sha256=FhHRc8NdqL_HWpCs7A8dKruxJS5wEm55Gs3dcgBiRUg,1522
|
|
108
109
|
mlrun/feature_store/api.py,sha256=uYheyPkJOVCrz1jivvpGatgy_JBAq0It0XZqPpNVQkE,48699
|
|
109
110
|
mlrun/feature_store/common.py,sha256=DKmoRk04NCS1gv7qZuEUa2-g8WsfR6IWjYctcrqKVlg,12853
|
|
@@ -227,7 +228,7 @@ mlrun/model_monitoring/applications/_application_steps.py,sha256=-g9jxIAFM5f22iJ
|
|
|
227
228
|
mlrun/model_monitoring/applications/base.py,sha256=buVKyghH4AB3chZ5py1vyMIFnTF-deY8YDf_fPC9BnQ,11307
|
|
228
229
|
mlrun/model_monitoring/applications/context.py,sha256=i-9h6pWyrS8mjw53zd0kb_Dsf9ReS8cSfnth8PvOEI4,8571
|
|
229
230
|
mlrun/model_monitoring/applications/evidently_base.py,sha256=AE_eIz-GEYm3AZTrMCiqF9bcSMlvYk08LJb6bKWAQLg,8057
|
|
230
|
-
mlrun/model_monitoring/applications/histogram_data_drift.py,sha256=
|
|
231
|
+
mlrun/model_monitoring/applications/histogram_data_drift.py,sha256=G3afA0q9r7clmtcEAoXAzsr8zYXHIOYXiRxQEwVio_E,13041
|
|
231
232
|
mlrun/model_monitoring/applications/results.py,sha256=VVlu9Si7Tj2LNJzPQrp4_Qeyh9mxOVMu1Jwb5K2LfvY,3577
|
|
232
233
|
mlrun/model_monitoring/db/__init__.py,sha256=6Ic-X3Fh9XLPYMytmevGNSs-Hii1rAjLLoFTSPwTguw,736
|
|
233
234
|
mlrun/model_monitoring/db/stores/__init__.py,sha256=8lCEvKBJsOa2DPiqw4Y9D___nkfYM8T_-OuD5AAlKa4,4144
|
|
@@ -274,10 +275,10 @@ mlrun/platforms/__init__.py,sha256=ggSGF7inITs6S-vj9u4S9X_5psgbA0G3GVqf7zu8qYc,2
|
|
|
274
275
|
mlrun/platforms/iguazio.py,sha256=1h5BpdAEQJBg2vIt7ySjUADU0ip5OkaMYr0_VREi9ys,13084
|
|
275
276
|
mlrun/projects/__init__.py,sha256=Lv5rfxyXJrw6WGOWJKhBz66M6t3_zsNMCfUD6waPwx4,1153
|
|
276
277
|
mlrun/projects/operations.py,sha256=NEN4PmSvLO9QMwSG4TncmBgTKC9wJp7hGo5lA7OYN_Q,19199
|
|
277
|
-
mlrun/projects/pipelines.py,sha256=
|
|
278
|
-
mlrun/projects/project.py,sha256=
|
|
278
|
+
mlrun/projects/pipelines.py,sha256=Xc9tQSBBPEg1Yxn-b4RseFdfO7SvrYC-ekdw_hAcPH8,40006
|
|
279
|
+
mlrun/projects/project.py,sha256=QG0jCz6ZIWTHTWAJWlP7fM_BjJmTLLvihgBzkPPa_P0,182082
|
|
279
280
|
mlrun/runtimes/__init__.py,sha256=0-tYDkew-Cr4DM-wztvMbzDA5xq385Jjo-GrtO_84Sc,8741
|
|
280
|
-
mlrun/runtimes/base.py,sha256=
|
|
281
|
+
mlrun/runtimes/base.py,sha256=yw5SceU2Js1AOr4f0ByZ3l1VsZUAnKKeC41DRTmNi68,37633
|
|
281
282
|
mlrun/runtimes/daskjob.py,sha256=_3jQIEroNxG587ZJ0cW5nVJVBb1IcOECor_bkgZHtMk,19194
|
|
282
283
|
mlrun/runtimes/funcdoc.py,sha256=CC9cWRPgBiM2sk4NJTqusjc6O9kZ-49vGA5WRPjREKE,9796
|
|
283
284
|
mlrun/runtimes/function_reference.py,sha256=iWKRe4r2GTc5S8FOIASYUNLwwne8NqIui51PFr8Q4mg,4918
|
|
@@ -308,9 +309,9 @@ mlrun/serving/__init__.py,sha256=-SMRV3q_5cGVPDxRslXPU0zGYZIygs0cSj7WKlOJJUc,116
|
|
|
308
309
|
mlrun/serving/merger.py,sha256=PXLn3A21FiLteJHaDSLm5xKNT-80eTTjfHUJnBX1gKY,6116
|
|
309
310
|
mlrun/serving/remote.py,sha256=MrFByphQWmIsKXqw-MOwl2Q1hbtWReYVRKvlcKj9pfw,17980
|
|
310
311
|
mlrun/serving/routers.py,sha256=scvpXD0VmgGRLJb2UqNq0o39ML2_F_SyZ4OXVQhJIOM,55086
|
|
311
|
-
mlrun/serving/server.py,sha256=
|
|
312
|
+
mlrun/serving/server.py,sha256=5tkSxuqRFnoy8U8p-Nv9iW26E54NuhUABVbQ5taBCgk,21410
|
|
312
313
|
mlrun/serving/serving_wrapper.py,sha256=R670-S6PX_d5ER6jiHtRvacuPyFzQH0mEf2K0sBIIOM,836
|
|
313
|
-
mlrun/serving/states.py,sha256=
|
|
314
|
+
mlrun/serving/states.py,sha256=XA9GJB9JZNcaywCGJ1DLxHoS225J3aF8s8B8Y_-bKM8,59341
|
|
314
315
|
mlrun/serving/utils.py,sha256=lej7XcUPX1MmHkEOi_0KZRGSpfbmpnE0GK_Sn4zLkHY,4025
|
|
315
316
|
mlrun/serving/v1_serving.py,sha256=by4myxlnwyZ0ijQ5fURilGCK1sUpdQL2Il1VR3Xqpxg,11805
|
|
316
317
|
mlrun/serving/v2_serving.py,sha256=wJmDZc-YEof0vXmYHM5t8aKSaWuzUbjVtWYuVyl1hPg,24226
|
|
@@ -325,7 +326,7 @@ mlrun/utils/azure_vault.py,sha256=IEFizrDGDbAaoWwDr1WoA88S_EZ0T--vjYtY-i0cvYQ,34
|
|
|
325
326
|
mlrun/utils/clones.py,sha256=mJpx4nyFiY6jlBCvFABsNuyi_mr1mvfPWn81vlafpOU,7361
|
|
326
327
|
mlrun/utils/condition_evaluator.py,sha256=-nGfRmZzivn01rHTroiGY4rqEv8T1irMyhzxEei-sKc,1897
|
|
327
328
|
mlrun/utils/db.py,sha256=KEa-vzicUhzIwo1wBXax2ZuXtYgf5to7wnsY3CYCiOQ,1713
|
|
328
|
-
mlrun/utils/helpers.py,sha256=
|
|
329
|
+
mlrun/utils/helpers.py,sha256=ISPNg7JQ2Bt8M8TD8lI4exk59oH51Yylo0kAWQVWISY,55493
|
|
329
330
|
mlrun/utils/http.py,sha256=l_JCPrCq8bfYUcUcAFWUPvb9Xu-93bLGIhV-H-XCU9s,8707
|
|
330
331
|
mlrun/utils/logger.py,sha256=CG5pgkMeU3VAkIP0pSGOwvFtm0tJYzmPVF8jEp2EtlU,9073
|
|
331
332
|
mlrun/utils/regex.py,sha256=b0AUa2THS-ELzJj0grl5b8Stq609F2XomTZkD9SB1fQ,4900
|
|
@@ -334,7 +335,7 @@ mlrun/utils/singleton.py,sha256=p1Y-X0mPSs_At092GS-pZCA8CTR62HOqPU07_ZH6-To,869
|
|
|
334
335
|
mlrun/utils/v3io_clients.py,sha256=F7zO2NaXSSih6B35LkwuKW_y2CdV5C1ztP-Xs2FsgpQ,1282
|
|
335
336
|
mlrun/utils/vault.py,sha256=xUiKL17dCXjwQJ33YRzQj0oadUXATlFWPzKKYAESoQk,10447
|
|
336
337
|
mlrun/utils/notifications/__init__.py,sha256=eUzQDBxSQmMZASRY-YAnYS6tL5801P0wEjycp3Dvoe0,990
|
|
337
|
-
mlrun/utils/notifications/notification_pusher.py,sha256=
|
|
338
|
+
mlrun/utils/notifications/notification_pusher.py,sha256=ptspFcc_X6u3q7toIuuDJWV-P7sNma60XOmTd6UHgcw,26742
|
|
338
339
|
mlrun/utils/notifications/notification/__init__.py,sha256=2in3F2q8gtYDiDoQ4i9BIIE2I06OokT2EW49vs2krRA,2168
|
|
339
340
|
mlrun/utils/notifications/notification/base.py,sha256=Bv6tUEFlF27SdkzFr1aY9a0gYX7tIbxsHbI7vOSqTsU,4196
|
|
340
341
|
mlrun/utils/notifications/notification/console.py,sha256=MAVk7v5PJ52vdGRv76YcEPixWgV0licBPWGpR01uR40,2643
|
|
@@ -343,11 +344,11 @@ mlrun/utils/notifications/notification/ipython.py,sha256=ZtVL30B_Ha0VGoo4LxO-voT
|
|
|
343
344
|
mlrun/utils/notifications/notification/slack.py,sha256=EXhIDyhFkwCSzq8trX3TqGHh5ppFKzMxItxM0s0-ukM,6728
|
|
344
345
|
mlrun/utils/notifications/notification/webhook.py,sha256=WgfxX1cpm8n2A-O08pwnsP4tzbxxv_vNUSnyXG4uKts,2752
|
|
345
346
|
mlrun/utils/version/__init__.py,sha256=7kkrB7hEZ3cLXoWj1kPoDwo4MaswsI2JVOBpbKgPAgc,614
|
|
346
|
-
mlrun/utils/version/version.json,sha256=
|
|
347
|
+
mlrun/utils/version/version.json,sha256=8ClI6i_4ST4Ev0HbJS7s14XSY9TLmGymVG1d_AIzQJQ,89
|
|
347
348
|
mlrun/utils/version/version.py,sha256=eEW0tqIAkU9Xifxv8Z9_qsYnNhn3YH7NRAfM-pPLt1g,1878
|
|
348
|
-
mlrun-1.7.
|
|
349
|
-
mlrun-1.7.
|
|
350
|
-
mlrun-1.7.
|
|
351
|
-
mlrun-1.7.
|
|
352
|
-
mlrun-1.7.
|
|
353
|
-
mlrun-1.7.
|
|
349
|
+
mlrun-1.7.0rc25.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
350
|
+
mlrun-1.7.0rc25.dist-info/METADATA,sha256=kqDt9YgQWFkfTvBOHEveq_nSYnbrd0u7UZ83Dht_vfs,19237
|
|
351
|
+
mlrun-1.7.0rc25.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
|
|
352
|
+
mlrun-1.7.0rc25.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
|
|
353
|
+
mlrun-1.7.0rc25.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
|
|
354
|
+
mlrun-1.7.0rc25.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|