mlrun 1.7.0rc24__py3-none-any.whl → 1.7.0rc26__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/google_cloud_storage.py +6 -2
- mlrun/datastore/targets.py +12 -1
- mlrun/db/base.py +54 -2
- mlrun/db/httpdb.py +88 -12
- mlrun/db/nopdb.py +34 -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 +21 -7
- 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.0rc26.dist-info}/METADATA +4 -4
- {mlrun-1.7.0rc24.dist-info → mlrun-1.7.0rc26.dist-info}/RECORD +35 -34
- {mlrun-1.7.0rc24.dist-info → mlrun-1.7.0rc26.dist-info}/WHEEL +1 -1
- {mlrun-1.7.0rc24.dist-info → mlrun-1.7.0rc26.dist-info}/LICENSE +0 -0
- {mlrun-1.7.0rc24.dist-info → mlrun-1.7.0rc26.dist-info}/entry_points.txt +0 -0
- {mlrun-1.7.0rc24.dist-info → mlrun-1.7.0rc26.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
|
|
@@ -55,8 +55,12 @@ class GoogleCloudStorageStore(DataStore):
|
|
|
55
55
|
) or self._get_secret_or_env("GOOGLE_APPLICATION_CREDENTIALS")
|
|
56
56
|
if credentials:
|
|
57
57
|
try:
|
|
58
|
-
# Try to handle credentials as a json connection string
|
|
59
|
-
token =
|
|
58
|
+
# Try to handle credentials as a json connection string or do nothing if already a dict
|
|
59
|
+
token = (
|
|
60
|
+
credentials
|
|
61
|
+
if isinstance(credentials, dict)
|
|
62
|
+
else json.loads(credentials)
|
|
63
|
+
)
|
|
60
64
|
except json.JSONDecodeError:
|
|
61
65
|
# If it's not json, handle it as a filename
|
|
62
66
|
token = credentials
|
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,8 @@ 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,
|
|
141
|
+
limit: int = None,
|
|
123
142
|
):
|
|
124
143
|
pass
|
|
125
144
|
|
|
@@ -302,6 +321,12 @@ class RunDBInterface(ABC):
|
|
|
302
321
|
) -> dict:
|
|
303
322
|
pass
|
|
304
323
|
|
|
324
|
+
# TODO: remove in 1.9.0
|
|
325
|
+
@deprecated(
|
|
326
|
+
version="1.9.0",
|
|
327
|
+
reason="'list_features' will be removed in 1.9.0, use 'list_features_v2' instead",
|
|
328
|
+
category=FutureWarning,
|
|
329
|
+
)
|
|
305
330
|
@abstractmethod
|
|
306
331
|
def list_features(
|
|
307
332
|
self,
|
|
@@ -313,6 +338,23 @@ class RunDBInterface(ABC):
|
|
|
313
338
|
) -> mlrun.common.schemas.FeaturesOutput:
|
|
314
339
|
pass
|
|
315
340
|
|
|
341
|
+
@abstractmethod
|
|
342
|
+
def list_features_v2(
|
|
343
|
+
self,
|
|
344
|
+
project: str,
|
|
345
|
+
name: str = None,
|
|
346
|
+
tag: str = None,
|
|
347
|
+
entities: list[str] = None,
|
|
348
|
+
labels: list[str] = None,
|
|
349
|
+
) -> mlrun.common.schemas.FeaturesOutputV2:
|
|
350
|
+
pass
|
|
351
|
+
|
|
352
|
+
# TODO: remove in 1.9.0
|
|
353
|
+
@deprecated(
|
|
354
|
+
version="1.9.0",
|
|
355
|
+
reason="'list_entities' will be removed in 1.9.0, use 'list_entities_v2' instead",
|
|
356
|
+
category=FutureWarning,
|
|
357
|
+
)
|
|
316
358
|
@abstractmethod
|
|
317
359
|
def list_entities(
|
|
318
360
|
self,
|
|
@@ -323,6 +365,16 @@ class RunDBInterface(ABC):
|
|
|
323
365
|
) -> mlrun.common.schemas.EntitiesOutput:
|
|
324
366
|
pass
|
|
325
367
|
|
|
368
|
+
@abstractmethod
|
|
369
|
+
def list_entities_v2(
|
|
370
|
+
self,
|
|
371
|
+
project: str,
|
|
372
|
+
name: str = None,
|
|
373
|
+
tag: str = None,
|
|
374
|
+
labels: list[str] = None,
|
|
375
|
+
) -> mlrun.common.schemas.EntitiesOutputV2:
|
|
376
|
+
pass
|
|
377
|
+
|
|
326
378
|
@abstractmethod
|
|
327
379
|
def list_feature_sets(
|
|
328
380
|
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"]
|
|
@@ -953,7 +963,7 @@ class HTTPRunDB(RunDBInterface):
|
|
|
953
963
|
|
|
954
964
|
# we do this because previously the 'uid' name was used for the 'tree' parameter
|
|
955
965
|
tree = tree or uid
|
|
956
|
-
|
|
966
|
+
project = project or mlrun.mlconf.default_project
|
|
957
967
|
endpoint_path = f"projects/{project}/artifacts/{key}"
|
|
958
968
|
|
|
959
969
|
error = f"store artifact {project}/{key}"
|
|
@@ -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
|
-
project = project or
|
|
1005
|
+
project = project or mlrun.mlconf.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()
|
|
@@ -1028,7 +1039,7 @@ class HTTPRunDB(RunDBInterface):
|
|
|
1028
1039
|
:param deletion_strategy: The artifact deletion strategy types.
|
|
1029
1040
|
:param secrets: Credentials needed to access the artifact data.
|
|
1030
1041
|
"""
|
|
1031
|
-
|
|
1042
|
+
project = project or mlrun.mlconf.default_project
|
|
1032
1043
|
endpoint_path = f"projects/{project}/artifacts/{key}"
|
|
1033
1044
|
params = {
|
|
1034
1045
|
"key": key,
|
|
@@ -1061,6 +1072,8 @@ 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,
|
|
1076
|
+
limit: int = None,
|
|
1064
1077
|
) -> ArtifactList:
|
|
1065
1078
|
"""List artifacts filtered by various parameters.
|
|
1066
1079
|
|
|
@@ -1095,6 +1108,8 @@ class HTTPRunDB(RunDBInterface):
|
|
|
1095
1108
|
:param producer_uri: Return artifacts produced by the requested producer URI. Producer URI usually
|
|
1096
1109
|
points to a run and is used to filter artifacts by the run that produced them when the artifact producer id
|
|
1097
1110
|
is a workflow id (artifact was created as part of a workflow).
|
|
1111
|
+
:param format_: The format in which to return the artifacts. Default is 'full'.
|
|
1112
|
+
:param limit: Maximum number of artifacts to return.
|
|
1098
1113
|
"""
|
|
1099
1114
|
|
|
1100
1115
|
project = project or config.default_project
|
|
@@ -1112,8 +1127,9 @@ class HTTPRunDB(RunDBInterface):
|
|
|
1112
1127
|
"kind": kind,
|
|
1113
1128
|
"category": category,
|
|
1114
1129
|
"tree": tree,
|
|
1115
|
-
"format":
|
|
1130
|
+
"format": format_,
|
|
1116
1131
|
"producer_uri": producer_uri,
|
|
1132
|
+
"limit": limit,
|
|
1117
1133
|
}
|
|
1118
1134
|
error = "list artifacts"
|
|
1119
1135
|
endpoint_path = f"projects/{project}/artifacts"
|
|
@@ -2110,6 +2126,41 @@ class HTTPRunDB(RunDBInterface):
|
|
|
2110
2126
|
resp = self.api_call("GET", path, error_message, params=params)
|
|
2111
2127
|
return resp.json()["features"]
|
|
2112
2128
|
|
|
2129
|
+
def list_features_v2(
|
|
2130
|
+
self,
|
|
2131
|
+
project: str,
|
|
2132
|
+
name: str = None,
|
|
2133
|
+
tag: str = None,
|
|
2134
|
+
entities: list[str] = None,
|
|
2135
|
+
labels: list[str] = None,
|
|
2136
|
+
) -> dict[str, list[dict]]:
|
|
2137
|
+
"""List feature-sets which contain specific features. This function may return multiple versions of the same
|
|
2138
|
+
feature-set if a specific tag is not requested. Note that the various filters of this function actually
|
|
2139
|
+
refer to the feature-set object containing the features, not to the features themselves.
|
|
2140
|
+
|
|
2141
|
+
:param project: Project which contains these features.
|
|
2142
|
+
:param name: Name of the feature to look for. The name is used in a like query, and is not case-sensitive. For
|
|
2143
|
+
example, looking for ``feat`` will return features which are named ``MyFeature`` as well as ``defeat``.
|
|
2144
|
+
:param tag: Return feature-sets which contain the features looked for, and are tagged with the specific tag.
|
|
2145
|
+
:param entities: Return only feature-sets which contain an entity whose name is contained in this list.
|
|
2146
|
+
:param labels: Return only feature-sets which are labeled as requested.
|
|
2147
|
+
:returns: A list of features, and a list of their corresponding feature sets.
|
|
2148
|
+
"""
|
|
2149
|
+
|
|
2150
|
+
project = project or config.default_project
|
|
2151
|
+
params = {
|
|
2152
|
+
"name": name,
|
|
2153
|
+
"tag": tag,
|
|
2154
|
+
"entity": entities or [],
|
|
2155
|
+
"label": labels or [],
|
|
2156
|
+
}
|
|
2157
|
+
|
|
2158
|
+
path = f"projects/{project}/features"
|
|
2159
|
+
|
|
2160
|
+
error_message = f"Failed listing features, project: {project}, query: {params}"
|
|
2161
|
+
resp = self.api_call("GET", path, error_message, params=params, version="v2")
|
|
2162
|
+
return resp.json()
|
|
2163
|
+
|
|
2113
2164
|
def list_entities(
|
|
2114
2165
|
self,
|
|
2115
2166
|
project: str,
|
|
@@ -2135,6 +2186,31 @@ class HTTPRunDB(RunDBInterface):
|
|
|
2135
2186
|
resp = self.api_call("GET", path, error_message, params=params)
|
|
2136
2187
|
return resp.json()["entities"]
|
|
2137
2188
|
|
|
2189
|
+
def list_entities_v2(
|
|
2190
|
+
self,
|
|
2191
|
+
project: str,
|
|
2192
|
+
name: str = None,
|
|
2193
|
+
tag: str = None,
|
|
2194
|
+
labels: list[str] = None,
|
|
2195
|
+
) -> dict[str, list[dict]]:
|
|
2196
|
+
"""Retrieve a list of entities and their mapping to the containing feature-sets. This function is similar
|
|
2197
|
+
to the :py:func:`~list_features_v2` function, and uses the same logic. However, the entities are matched
|
|
2198
|
+
against the name rather than the features.
|
|
2199
|
+
"""
|
|
2200
|
+
|
|
2201
|
+
project = project or config.default_project
|
|
2202
|
+
params = {
|
|
2203
|
+
"name": name,
|
|
2204
|
+
"tag": tag,
|
|
2205
|
+
"label": labels or [],
|
|
2206
|
+
}
|
|
2207
|
+
|
|
2208
|
+
path = f"projects/{project}/entities"
|
|
2209
|
+
|
|
2210
|
+
error_message = f"Failed listing entities, project: {project}, query: {params}"
|
|
2211
|
+
resp = self.api_call("GET", path, error_message, params=params, version="v2")
|
|
2212
|
+
return resp.json()
|
|
2213
|
+
|
|
2138
2214
|
@staticmethod
|
|
2139
2215
|
def _generate_partition_by_params(
|
|
2140
2216
|
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,8 @@ 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,
|
|
150
|
+
limit: int = None,
|
|
134
151
|
):
|
|
135
152
|
pass
|
|
136
153
|
|
|
@@ -252,11 +269,26 @@ class NopDB(RunDBInterface):
|
|
|
252
269
|
) -> mlrun.common.schemas.FeaturesOutput:
|
|
253
270
|
pass
|
|
254
271
|
|
|
272
|
+
def list_features_v2(
|
|
273
|
+
self,
|
|
274
|
+
project: str,
|
|
275
|
+
name: str = None,
|
|
276
|
+
tag: str = None,
|
|
277
|
+
entities: list[str] = None,
|
|
278
|
+
labels: list[str] = None,
|
|
279
|
+
) -> mlrun.common.schemas.FeaturesOutputV2:
|
|
280
|
+
pass
|
|
281
|
+
|
|
255
282
|
def list_entities(
|
|
256
283
|
self, project: str, name: str = None, tag: str = None, labels: list[str] = None
|
|
257
284
|
) -> mlrun.common.schemas.EntitiesOutput:
|
|
258
285
|
pass
|
|
259
286
|
|
|
287
|
+
def list_entities_v2(
|
|
288
|
+
self, project: str, name: str = None, tag: str = None, labels: list[str] = None
|
|
289
|
+
) -> mlrun.common.schemas.EntitiesOutputV2:
|
|
290
|
+
pass
|
|
291
|
+
|
|
260
292
|
def list_feature_sets(
|
|
261
293
|
self,
|
|
262
294
|
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
|
|
|
@@ -2327,7 +2337,8 @@ class MlrunProject(ModelObj):
|
|
|
2327
2337
|
Default: job
|
|
2328
2338
|
:param image: Docker image to be used, can also be specified in the function object/yaml
|
|
2329
2339
|
:param handler: Default function handler to invoke (can only be set with .py/.ipynb files)
|
|
2330
|
-
:param with_repo: Add (clone) the current repo to the build source
|
|
2340
|
+
:param with_repo: Add (clone) the current repo to the build source - use when the function code is in
|
|
2341
|
+
the project repo (project.spec.source).
|
|
2331
2342
|
:param tag: Function version tag to set (none for current or 'latest')
|
|
2332
2343
|
Specifying a tag as a parameter will update the project's tagged function
|
|
2333
2344
|
(myfunc:v1) and the untagged function (myfunc)
|
|
@@ -3653,6 +3664,7 @@ class MlrunProject(ModelObj):
|
|
|
3653
3664
|
kind: str = None,
|
|
3654
3665
|
category: typing.Union[str, mlrun.common.schemas.ArtifactCategories] = None,
|
|
3655
3666
|
tree: str = None,
|
|
3667
|
+
limit: int = None,
|
|
3656
3668
|
) -> mlrun.lists.ArtifactList:
|
|
3657
3669
|
"""List artifacts filtered by various parameters.
|
|
3658
3670
|
|
|
@@ -3682,6 +3694,7 @@ class MlrunProject(ModelObj):
|
|
|
3682
3694
|
:param kind: Return artifacts of the requested kind.
|
|
3683
3695
|
:param category: Return artifacts of the requested category.
|
|
3684
3696
|
:param tree: Return artifacts of the requested tree.
|
|
3697
|
+
:param limit: Maximum number of artifacts to return.
|
|
3685
3698
|
"""
|
|
3686
3699
|
db = mlrun.db.get_run_db(secrets=self._secrets)
|
|
3687
3700
|
return db.list_artifacts(
|
|
@@ -3696,6 +3709,7 @@ class MlrunProject(ModelObj):
|
|
|
3696
3709
|
kind=kind,
|
|
3697
3710
|
category=category,
|
|
3698
3711
|
tree=tree,
|
|
3712
|
+
limit=limit,
|
|
3699
3713
|
)
|
|
3700
3714
|
|
|
3701
3715
|
def list_models(
|
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.0rc26
|
|
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,15 +43,15 @@ 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
|
|
50
50
|
Requires-Dist: deprecated ~=1.2
|
|
51
51
|
Requires-Dist: jinja2 >=3.1.3,~=3.1
|
|
52
52
|
Requires-Dist: orjson <4,>=3.9.15
|
|
53
|
-
Requires-Dist: mlrun-pipelines-kfp-common
|
|
54
|
-
Requires-Dist: mlrun-pipelines-kfp-v1-8
|
|
53
|
+
Requires-Dist: mlrun-pipelines-kfp-common ~=0.1.2
|
|
54
|
+
Requires-Dist: mlrun-pipelines-kfp-v1-8 ~=0.1.2
|
|
55
55
|
Provides-Extra: alibaba-oss
|
|
56
56
|
Requires-Dist: ossfs ==2023.12.0 ; extra == 'alibaba-oss'
|
|
57
57
|
Requires-Dist: oss2 ==2.18.1 ; extra == 'alibaba-oss'
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
mlrun/__init__.py,sha256=y08M1JcKXy5-9_5WaI9fn5aV5BxIQ5QkbduJK0OxWbA,7470
|
|
2
|
-
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
|
|
@@ -83,7 +84,7 @@ mlrun/datastore/datastore.py,sha256=XCXJaHQAJRW-6EPjq-bHCPV5gA5BfHuNr6tUV_xn2Cc,
|
|
|
83
84
|
mlrun/datastore/datastore_profile.py,sha256=9g467ic1vuTP_HY101mMXG_smnLxkjhuBp6dR4_LIkg,18937
|
|
84
85
|
mlrun/datastore/dbfs_store.py,sha256=5IkxnFQXkW0fdx-ca5jjQnUdTsTfNdJzMvV31ZpDNrM,6634
|
|
85
86
|
mlrun/datastore/filestore.py,sha256=nS3Ie6jG41NDiW_as9tF8Nu5maaSVEKYKUr1IQtPhuA,3767
|
|
86
|
-
mlrun/datastore/google_cloud_storage.py,sha256=
|
|
87
|
+
mlrun/datastore/google_cloud_storage.py,sha256=ctcfnZ41-uyNd3qjPe-VO9DAtfikhpNPPb8L9coKcr0,6272
|
|
87
88
|
mlrun/datastore/hdfs.py,sha256=TfL1zUWVRxEHF9kswZtOzrMdDmhSfiSVIAjz7fxWyVw,1876
|
|
88
89
|
mlrun/datastore/inmem.py,sha256=PQAbNbjQvDhtCQrvPTCuUWRwGVe4a7nB5E84l8C20pQ,2802
|
|
89
90
|
mlrun/datastore/redis.py,sha256=OKMkDCU3APhxfo65SyJq605u1DsfOYH0fODnCXZRqEU,5575
|
|
@@ -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=onmHoJkjf_F0UrsFrkmU1MhB30alonnr4GeWXQ-ngr0,23778
|
|
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=lClPOmGLz9nzaROeboxSm0eFcpnuEG1PIRFlIW7aIDA,183159
|
|
107
|
+
mlrun/db/nopdb.py,sha256=usWWKZp2Sh_3HHkGN63I9sM7Y9Bb3xIgZ1IICNE_hE0,20525
|
|
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=RbTI7YUc3FUmOgsbgvrb_WRpSzFV0F4hL5Y4V1km84c,182306
|
|
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=ocVP16iqoQ2XPtQjK6WdVszGB8_5cAuccktEmVW1QHs,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.0rc26.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
350
|
+
mlrun-1.7.0rc26.dist-info/METADATA,sha256=h4uXn912_-AohFXUCuvt9Vdf2E0xAVuO983wiGu-vqQ,19223
|
|
351
|
+
mlrun-1.7.0rc26.dist-info/WHEEL,sha256=mguMlWGMX-VHnMpKOjjQidIo1ssRlCFu4a4mBpz1s2M,91
|
|
352
|
+
mlrun-1.7.0rc26.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
|
|
353
|
+
mlrun-1.7.0rc26.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
|
|
354
|
+
mlrun-1.7.0rc26.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|