mlrun 1.9.0rc3__py3-none-any.whl → 1.9.0rc5__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 +13 -3
- mlrun/artifacts/base.py +5 -5
- mlrun/artifacts/dataset.py +1 -1
- mlrun/artifacts/model.py +1 -1
- mlrun/artifacts/plots.py +2 -2
- mlrun/common/constants.py +7 -0
- mlrun/common/runtimes/constants.py +1 -1
- mlrun/common/schemas/artifact.py +1 -1
- mlrun/common/schemas/model_monitoring/model_endpoints.py +32 -8
- mlrun/common/schemas/pipeline.py +1 -1
- mlrun/common/schemas/project.py +1 -1
- mlrun/common/schemas/runs.py +1 -1
- mlrun/config.py +5 -11
- mlrun/datastore/datastore.py +1 -1
- mlrun/datastore/datastore_profile.py +2 -2
- mlrun/datastore/sources.py +3 -3
- mlrun/datastore/targets.py +4 -4
- mlrun/datastore/utils.py +2 -2
- mlrun/db/base.py +9 -7
- mlrun/db/httpdb.py +48 -27
- mlrun/db/nopdb.py +3 -1
- mlrun/execution.py +1 -1
- mlrun/frameworks/_common/model_handler.py +2 -2
- mlrun/launcher/client.py +1 -1
- mlrun/model_monitoring/api.py +4 -4
- mlrun/model_monitoring/applications/_application_steps.py +3 -1
- mlrun/model_monitoring/applications/evidently/base.py +59 -71
- mlrun/model_monitoring/controller.py +26 -11
- mlrun/model_monitoring/db/tsdb/base.py +3 -1
- mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connection.py +213 -0
- mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +27 -49
- mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +48 -35
- mlrun/model_monitoring/tracking_policy.py +1 -1
- mlrun/model_monitoring/writer.py +1 -1
- mlrun/projects/operations.py +3 -3
- mlrun/projects/project.py +37 -22
- mlrun/render.py +5 -9
- mlrun/run.py +1 -1
- mlrun/runtimes/base.py +5 -5
- mlrun/runtimes/kubejob.py +2 -2
- mlrun/runtimes/nuclio/function.py +3 -3
- mlrun/runtimes/nuclio/serving.py +4 -4
- mlrun/runtimes/utils.py +25 -8
- mlrun/utils/helpers.py +3 -2
- mlrun/utils/notifications/notification/webhook.py +18 -2
- mlrun/utils/version/version.json +2 -2
- {mlrun-1.9.0rc3.dist-info → mlrun-1.9.0rc5.dist-info}/METADATA +9 -13
- {mlrun-1.9.0rc3.dist-info → mlrun-1.9.0rc5.dist-info}/RECORD +52 -51
- {mlrun-1.9.0rc3.dist-info → mlrun-1.9.0rc5.dist-info}/WHEEL +1 -1
- {mlrun-1.9.0rc3.dist-info → mlrun-1.9.0rc5.dist-info}/entry_points.txt +0 -0
- {mlrun-1.9.0rc3.dist-info → mlrun-1.9.0rc5.dist-info}/licenses/LICENSE +0 -0
- {mlrun-1.9.0rc3.dist-info → mlrun-1.9.0rc5.dist-info}/top_level.txt +0 -0
mlrun/projects/project.py
CHANGED
|
@@ -756,10 +756,10 @@ def _project_instance_from_struct(struct, name, allow_cross_project):
|
|
|
756
756
|
)
|
|
757
757
|
|
|
758
758
|
if allow_cross_project is None:
|
|
759
|
-
# TODO: Remove this warning in version 1.
|
|
759
|
+
# TODO: Remove this warning in version 1.10.0 and also fix cli to support allow_cross_project
|
|
760
760
|
warnings.warn(
|
|
761
761
|
f"Project {name=} is different than specified on the context's project yaml. "
|
|
762
|
-
"This behavior is deprecated and will not be supported from version 1.
|
|
762
|
+
"This behavior is deprecated and will not be supported from version 1.10.0."
|
|
763
763
|
)
|
|
764
764
|
logger.warn(error_message)
|
|
765
765
|
elif allow_cross_project:
|
|
@@ -2478,9 +2478,9 @@ class MlrunProject(ModelObj):
|
|
|
2478
2478
|
:param fetch_credentials_from_sys_config: If true, fetch the credentials from the system configuration.
|
|
2479
2479
|
"""
|
|
2480
2480
|
if default_controller_image != "mlrun/mlrun":
|
|
2481
|
-
# TODO: Remove this in 1.
|
|
2481
|
+
# TODO: Remove this in 1.10.0
|
|
2482
2482
|
warnings.warn(
|
|
2483
|
-
"'default_controller_image' is deprecated and will be removed in 1.
|
|
2483
|
+
"'default_controller_image' is deprecated in 1.7.0 and will be removed in 1.10.0, "
|
|
2484
2484
|
"use 'image' instead",
|
|
2485
2485
|
FutureWarning,
|
|
2486
2486
|
)
|
|
@@ -2860,10 +2860,10 @@ class MlrunProject(ModelObj):
|
|
|
2860
2860
|
|
|
2861
2861
|
self.spec.set_function(name, function_object, func)
|
|
2862
2862
|
|
|
2863
|
-
# TODO: Remove this in 1.
|
|
2863
|
+
# TODO: Remove this in 1.11.0
|
|
2864
2864
|
@deprecated.deprecated(
|
|
2865
2865
|
version="1.8.0",
|
|
2866
|
-
reason="'remove_function' is deprecated and will be removed in 1.
|
|
2866
|
+
reason="'remove_function' is deprecated and will be removed in 1.11.0. "
|
|
2867
2867
|
"Please use `delete_function` instead.",
|
|
2868
2868
|
category=FutureWarning,
|
|
2869
2869
|
)
|
|
@@ -2891,9 +2891,9 @@ class MlrunProject(ModelObj):
|
|
|
2891
2891
|
|
|
2892
2892
|
:param name: name of the model-monitoring-function/s (under the project)
|
|
2893
2893
|
"""
|
|
2894
|
-
# TODO: Remove this in 1.
|
|
2894
|
+
# TODO: Remove this in 1.10.0
|
|
2895
2895
|
warnings.warn(
|
|
2896
|
-
"'remove_model_monitoring_function' is deprecated and will be removed in 1.
|
|
2896
|
+
"'remove_model_monitoring_function' is deprecated in 1.7.0 and will be removed in 1.10.0. "
|
|
2897
2897
|
"Please use `delete_model_monitoring_function` instead.",
|
|
2898
2898
|
FutureWarning,
|
|
2899
2899
|
)
|
|
@@ -3795,7 +3795,8 @@ class MlrunProject(ModelObj):
|
|
|
3795
3795
|
top_level: bool = False,
|
|
3796
3796
|
uids: Optional[list[str]] = None,
|
|
3797
3797
|
latest_only: bool = False,
|
|
3798
|
-
tsdb_metrics: bool =
|
|
3798
|
+
tsdb_metrics: bool = False,
|
|
3799
|
+
metric_list: Optional[list[str]] = None,
|
|
3799
3800
|
) -> mlrun.common.schemas.ModelEndpointList:
|
|
3800
3801
|
"""
|
|
3801
3802
|
Returns a list of `ModelEndpoint` objects. Each `ModelEndpoint` object represents the current state of a
|
|
@@ -3825,10 +3826,15 @@ class MlrunProject(ModelObj):
|
|
|
3825
3826
|
or just `"label"` for key existence.
|
|
3826
3827
|
- A comma-separated string formatted as `"label1=value1,label2"` to match entities with
|
|
3827
3828
|
the specified key-value pairs or key existence.
|
|
3828
|
-
:param start:
|
|
3829
|
-
:param end:
|
|
3830
|
-
:param top_level:
|
|
3831
|
-
:param uids:
|
|
3829
|
+
:param start: The start time to filter by.Corresponding to the `created` field.
|
|
3830
|
+
:param end: The end time to filter by. Corresponding to the `created` field.
|
|
3831
|
+
:param top_level: If true will return only routers and endpoint that are NOT children of any router.
|
|
3832
|
+
:param uids: If passed will return a list `ModelEndpoint` object with uid in uids.
|
|
3833
|
+
:param tsdb_metrics: When True, the time series metrics will be added to the output
|
|
3834
|
+
of the resulting.
|
|
3835
|
+
:param metric_list: List of metrics to include from the time series DB. Defaults to all metrics.
|
|
3836
|
+
If tsdb_metrics=False, this parameter will be ignored and no tsdb metrics
|
|
3837
|
+
will be included.
|
|
3832
3838
|
|
|
3833
3839
|
:returns: Returns a list of `ModelEndpoint` objects.
|
|
3834
3840
|
"""
|
|
@@ -3847,6 +3853,7 @@ class MlrunProject(ModelObj):
|
|
|
3847
3853
|
uids=uids,
|
|
3848
3854
|
latest_only=latest_only,
|
|
3849
3855
|
tsdb_metrics=tsdb_metrics,
|
|
3856
|
+
metric_list=metric_list,
|
|
3850
3857
|
)
|
|
3851
3858
|
|
|
3852
3859
|
def run_function(
|
|
@@ -4057,9 +4064,9 @@ class MlrunProject(ModelObj):
|
|
|
4057
4064
|
(by default `/home/mlrun_code`)
|
|
4058
4065
|
"""
|
|
4059
4066
|
if not overwrite_build_params:
|
|
4060
|
-
# TODO: change overwrite_build_params default to True in 1.
|
|
4067
|
+
# TODO: change overwrite_build_params default to True in 1.10.0
|
|
4061
4068
|
warnings.warn(
|
|
4062
|
-
"The `overwrite_build_params` parameter default will change from 'False' to 'True' in 1.
|
|
4069
|
+
"The `overwrite_build_params` parameter default will change from 'False' to 'True' in 1.10.0.",
|
|
4063
4070
|
mlrun.utils.OverwriteBuildParamsWarning,
|
|
4064
4071
|
)
|
|
4065
4072
|
default_image_name = mlrun.mlconf.default_project_image_name.format(
|
|
@@ -4134,9 +4141,9 @@ class MlrunProject(ModelObj):
|
|
|
4134
4141
|
)
|
|
4135
4142
|
|
|
4136
4143
|
if not overwrite_build_params:
|
|
4137
|
-
# TODO: change overwrite_build_params default to True in 1.
|
|
4144
|
+
# TODO: change overwrite_build_params default to True in 1.10.0
|
|
4138
4145
|
warnings.warn(
|
|
4139
|
-
"The `overwrite_build_params` parameter default will change from 'False' to 'True' in 1.
|
|
4146
|
+
"The `overwrite_build_params` parameter default will change from 'False' to 'True' in 1.10.0.",
|
|
4140
4147
|
mlrun.utils.OverwriteBuildParamsWarning,
|
|
4141
4148
|
)
|
|
4142
4149
|
|
|
@@ -4315,7 +4322,7 @@ class MlrunProject(ModelObj):
|
|
|
4315
4322
|
:param kind: Return artifacts of the requested kind.
|
|
4316
4323
|
:param category: Return artifacts of the requested category.
|
|
4317
4324
|
:param tree: Return artifacts of the requested tree.
|
|
4318
|
-
:param limit: Maximum number of artifacts to return.
|
|
4325
|
+
:param limit: Deprecated - Maximum number of artifacts to return (will be removed in 1.11.0).
|
|
4319
4326
|
:param format_: The format in which to return the artifacts. Default is 'full'.
|
|
4320
4327
|
:param partition_by: Field to group results by. When `partition_by` is specified, the `partition_sort_by`
|
|
4321
4328
|
parameter must be provided as well.
|
|
@@ -4326,6 +4333,14 @@ class MlrunProject(ModelObj):
|
|
|
4326
4333
|
:param partition_order: Order of sorting within partitions - `asc` or `desc`. Default is `desc`.
|
|
4327
4334
|
"""
|
|
4328
4335
|
db = mlrun.db.get_run_db(secrets=self._secrets)
|
|
4336
|
+
|
|
4337
|
+
if limit:
|
|
4338
|
+
# TODO: Remove this in 1.11.0
|
|
4339
|
+
warnings.warn(
|
|
4340
|
+
"'limit' is deprecated and will be removed in 1.11.0. Use 'page' and 'page_size' instead.",
|
|
4341
|
+
FutureWarning,
|
|
4342
|
+
)
|
|
4343
|
+
|
|
4329
4344
|
return db.list_artifacts(
|
|
4330
4345
|
name,
|
|
4331
4346
|
self.metadata.name,
|
|
@@ -4452,7 +4467,7 @@ class MlrunProject(ModelObj):
|
|
|
4452
4467
|
artifacts generated from a hyper-param run. If only a single iteration exists, will return the artifact
|
|
4453
4468
|
from that iteration. If using ``best_iter``, the ``iter`` parameter must not be used.
|
|
4454
4469
|
:param tree: Return artifacts of the requested tree.
|
|
4455
|
-
:param limit: Maximum number of artifacts to return.
|
|
4470
|
+
:param limit: Deprecated - Maximum number of artifacts to return (will be removed in 1.11.0).
|
|
4456
4471
|
:param format_: The format in which to return the artifacts. Default is 'full'.
|
|
4457
4472
|
"""
|
|
4458
4473
|
db = mlrun.db.get_run_db(secrets=self._secrets)
|
|
@@ -4719,7 +4734,7 @@ class MlrunProject(ModelObj):
|
|
|
4719
4734
|
:param states: List only runs whose state is one of the provided states.
|
|
4720
4735
|
:param sort: Whether to sort the result according to their start time. Otherwise, results will be
|
|
4721
4736
|
returned by their internal order in the DB (order will not be guaranteed).
|
|
4722
|
-
:param last: Deprecated - currently not used (will be removed in 1.
|
|
4737
|
+
:param last: Deprecated - currently not used (will be removed in 1.10.0).
|
|
4723
4738
|
:param iter: If ``True`` return runs from all iterations. Otherwise, return only runs whose ``iter`` is 0.
|
|
4724
4739
|
:param start_time_from: Filter by run start time in ``[start_time_from, start_time_to]``.
|
|
4725
4740
|
:param start_time_to: Filter by run start time in ``[start_time_from, start_time_to]``.
|
|
@@ -4730,9 +4745,9 @@ class MlrunProject(ModelObj):
|
|
|
4730
4745
|
:param end_time_to: Filter by run end time in ``[end_time_from, end_time_to]``.
|
|
4731
4746
|
"""
|
|
4732
4747
|
if state:
|
|
4733
|
-
# TODO: Remove this in 1.
|
|
4748
|
+
# TODO: Remove this in 1.10.0
|
|
4734
4749
|
warnings.warn(
|
|
4735
|
-
"'state' is deprecated and will be removed in 1.
|
|
4750
|
+
"'state' is deprecated in 1.7.0 and will be removed in 1.10.0. Use 'states' instead.",
|
|
4736
4751
|
FutureWarning,
|
|
4737
4752
|
)
|
|
4738
4753
|
|
mlrun/render.py
CHANGED
|
@@ -361,9 +361,6 @@ def get_tblframe(df, display, classes=None):
|
|
|
361
361
|
return ipython_display(html, display)
|
|
362
362
|
|
|
363
363
|
|
|
364
|
-
uid_template = '<div title="{}"><a href="{}/{}/{}/jobs/monitor/{}/overview" target="_blank" >...{}</a></div>'
|
|
365
|
-
|
|
366
|
-
|
|
367
364
|
def runs_to_html(
|
|
368
365
|
df: pd.DataFrame,
|
|
369
366
|
display: bool = True,
|
|
@@ -379,15 +376,14 @@ def runs_to_html(
|
|
|
379
376
|
df["results"] = df["results"].apply(dict_html)
|
|
380
377
|
df["start"] = df["start"].apply(time_str)
|
|
381
378
|
df["parameters"] = df["parameters"].apply(dict_html)
|
|
379
|
+
uid_template = '<div title="{}"><a href="{}" target="_blank" >...{}</a></div>'
|
|
380
|
+
|
|
382
381
|
if config.resolve_ui_url():
|
|
383
382
|
df["uid"] = df.apply(
|
|
384
383
|
lambda x: uid_template.format(
|
|
385
|
-
x
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
x.project,
|
|
389
|
-
x.uid,
|
|
390
|
-
x.uid[-8:],
|
|
384
|
+
x["uid"],
|
|
385
|
+
mlrun.utils.get_run_url(x["project"], x["uid"], x["name"]),
|
|
386
|
+
x["uid"][-8:],
|
|
391
387
|
),
|
|
392
388
|
axis=1,
|
|
393
389
|
)
|
mlrun/run.py
CHANGED
|
@@ -261,7 +261,7 @@ def get_or_create_ctx(
|
|
|
261
261
|
"""
|
|
262
262
|
if labels:
|
|
263
263
|
warnings.warn(
|
|
264
|
-
"The `labels` argument is deprecated and will be removed in 1.
|
|
264
|
+
"The `labels` argument is deprecated in 1.7.0 and will be removed in 1.10.0. "
|
|
265
265
|
"Please use `spec` instead, e.g.:\n"
|
|
266
266
|
"spec={'metadata': {'labels': {'key': 'value'}}}",
|
|
267
267
|
FutureWarning,
|
mlrun/runtimes/base.py
CHANGED
|
@@ -148,10 +148,10 @@ class FunctionSpec(ModelObj):
|
|
|
148
148
|
|
|
149
149
|
@property
|
|
150
150
|
def clone_target_dir(self):
|
|
151
|
-
# TODO: remove this property in 1.
|
|
151
|
+
# TODO: remove this property in 1.10.0
|
|
152
152
|
if self.build.source_code_target_dir:
|
|
153
153
|
warnings.warn(
|
|
154
|
-
"The clone_target_dir attribute is deprecated in 1.6.2 and will be removed in 1.
|
|
154
|
+
"The clone_target_dir attribute is deprecated in 1.6.2 and will be removed in 1.10.0. "
|
|
155
155
|
"Use spec.build.source_code_target_dir instead.",
|
|
156
156
|
FutureWarning,
|
|
157
157
|
)
|
|
@@ -159,10 +159,10 @@ class FunctionSpec(ModelObj):
|
|
|
159
159
|
|
|
160
160
|
@clone_target_dir.setter
|
|
161
161
|
def clone_target_dir(self, clone_target_dir):
|
|
162
|
-
# TODO: remove this property in 1.
|
|
162
|
+
# TODO: remove this property in 1.10.0
|
|
163
163
|
if clone_target_dir:
|
|
164
164
|
warnings.warn(
|
|
165
|
-
"The clone_target_dir attribute is deprecated in 1.6.2 and will be removed in 1.
|
|
165
|
+
"The clone_target_dir attribute is deprecated in 1.6.2 and will be removed in 1.10.0. "
|
|
166
166
|
"Use spec.build.source_code_target_dir instead.",
|
|
167
167
|
FutureWarning,
|
|
168
168
|
)
|
|
@@ -489,7 +489,7 @@ class BaseRuntime(ModelObj):
|
|
|
489
489
|
def _store_function(self, runspec, meta, db):
|
|
490
490
|
meta.labels["kind"] = self.kind
|
|
491
491
|
mlrun.runtimes.utils.enrich_run_labels(
|
|
492
|
-
meta.labels, [
|
|
492
|
+
meta.labels, [mlrun_constants.MLRunInternalLabels.owner]
|
|
493
493
|
)
|
|
494
494
|
if runspec.spec.output_path:
|
|
495
495
|
runspec.spec.output_path = runspec.spec.output_path.replace(
|
mlrun/runtimes/kubejob.py
CHANGED
|
@@ -114,9 +114,9 @@ class KubejobRuntime(KubeResource):
|
|
|
114
114
|
e.g. builder_env={"GIT_TOKEN": token}
|
|
115
115
|
"""
|
|
116
116
|
if not overwrite:
|
|
117
|
-
# TODO: change overwrite default to True in 1.
|
|
117
|
+
# TODO: change overwrite default to True in 1.10.0
|
|
118
118
|
warnings.warn(
|
|
119
|
-
"The `overwrite` parameter default will change from 'False' to 'True' in 1.
|
|
119
|
+
"The `overwrite` parameter default will change from 'False' to 'True' in 1.10.0.",
|
|
120
120
|
mlrun.utils.OverwriteBuildParamsWarning,
|
|
121
121
|
)
|
|
122
122
|
image = mlrun.utils.helpers.remove_image_protocol_prefix(image)
|
|
@@ -623,9 +623,9 @@ class RemoteRuntime(KubeResource):
|
|
|
623
623
|
:param force_build: set True for force building the image
|
|
624
624
|
"""
|
|
625
625
|
if auth_info:
|
|
626
|
-
# TODO: remove in 1.
|
|
626
|
+
# TODO: remove in 1.10.0
|
|
627
627
|
warnings.warn(
|
|
628
|
-
"'auth_info' is deprecated for nuclio runtimes in 1.7.0 and will be removed in 1.
|
|
628
|
+
"'auth_info' is deprecated for nuclio runtimes in 1.7.0 and will be removed in 1.10.0",
|
|
629
629
|
FutureWarning,
|
|
630
630
|
)
|
|
631
631
|
|
|
@@ -1000,7 +1000,7 @@ class RemoteRuntime(KubeResource):
|
|
|
1000
1000
|
else:
|
|
1001
1001
|
http_client_kwargs["json"] = body
|
|
1002
1002
|
try:
|
|
1003
|
-
logger.
|
|
1003
|
+
logger.debug("Invoking function", method=method, path=path)
|
|
1004
1004
|
if not getattr(self, "_http_session", None):
|
|
1005
1005
|
self._http_session = requests.Session()
|
|
1006
1006
|
resp = self._http_session.request(
|
mlrun/runtimes/nuclio/serving.py
CHANGED
|
@@ -44,7 +44,7 @@ from .function import NuclioSpec, RemoteRuntime, min_nuclio_versions
|
|
|
44
44
|
serving_subkind = "serving_v2"
|
|
45
45
|
|
|
46
46
|
if TYPE_CHECKING:
|
|
47
|
-
# remove this block in 1.
|
|
47
|
+
# remove this block in 1.10.0
|
|
48
48
|
from mlrun.model_monitoring import TrackingPolicy
|
|
49
49
|
|
|
50
50
|
|
|
@@ -361,8 +361,8 @@ class ServingRuntime(RemoteRuntime):
|
|
|
361
361
|
if batch:
|
|
362
362
|
warnings.warn(
|
|
363
363
|
"The `batch` size parameter was deprecated in version 1.8.0 and is no longer used. "
|
|
364
|
-
"It will be removed in 1.
|
|
365
|
-
# TODO: Remove this in 1.
|
|
364
|
+
"It will be removed in 1.11.",
|
|
365
|
+
# TODO: Remove this in 1.11
|
|
366
366
|
FutureWarning,
|
|
367
367
|
)
|
|
368
368
|
if stream_args:
|
|
@@ -370,7 +370,7 @@ class ServingRuntime(RemoteRuntime):
|
|
|
370
370
|
if tracking_policy is not None:
|
|
371
371
|
warnings.warn(
|
|
372
372
|
"The `tracking_policy` argument is deprecated from version 1.7.0 "
|
|
373
|
-
"and has no effect. It will be removed in 1.
|
|
373
|
+
"and has no effect. It will be removed in 1.10.0.\n"
|
|
374
374
|
"To set the desired model monitoring time window and schedule, use "
|
|
375
375
|
"the `base_period` argument in `project.enable_model_monitoring()`.",
|
|
376
376
|
FutureWarning,
|
mlrun/runtimes/utils.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
|
+
import enum
|
|
14
15
|
import getpass
|
|
15
16
|
import hashlib
|
|
16
17
|
import json
|
|
@@ -28,7 +29,6 @@ import mlrun.common.constants as mlrun_constants
|
|
|
28
29
|
import mlrun.common.schemas
|
|
29
30
|
import mlrun.utils.regex
|
|
30
31
|
from mlrun.artifacts import TableArtifact
|
|
31
|
-
from mlrun.common.runtimes.constants import RunLabels
|
|
32
32
|
from mlrun.config import config
|
|
33
33
|
from mlrun.errors import err_to_str
|
|
34
34
|
from mlrun.frameworks.parallel_coordinates import gen_pcp_plot
|
|
@@ -433,18 +433,35 @@ def enrich_function_from_dict(function, function_dict):
|
|
|
433
433
|
|
|
434
434
|
def enrich_run_labels(
|
|
435
435
|
labels: dict,
|
|
436
|
-
labels_to_enrich: Optional[list[
|
|
436
|
+
labels_to_enrich: Optional[list[mlrun_constants.MLRunInternalLabels]] = None,
|
|
437
437
|
):
|
|
438
|
+
"""
|
|
439
|
+
Enrich the run labels with the internal labels and the labels enrichment extension
|
|
440
|
+
:param labels: The run labels dict
|
|
441
|
+
:param labels_to_enrich: The label keys to enrich from MLRunInternalLabels.default_run_labels_to_enrich
|
|
442
|
+
:return: The enriched labels dict
|
|
443
|
+
"""
|
|
444
|
+
# Merge the labels with the labels enrichment extension
|
|
438
445
|
labels_enrichment = {
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
446
|
+
mlrun_constants.MLRunInternalLabels.owner: os.environ.get("V3IO_USERNAME")
|
|
447
|
+
or getpass.getuser(),
|
|
448
|
+
# TODO: remove this in 1.10.0
|
|
449
|
+
mlrun_constants.MLRunInternalLabels.v3io_user: os.environ.get("V3IO_USERNAME"),
|
|
442
450
|
}
|
|
443
|
-
|
|
451
|
+
|
|
452
|
+
# Resolve which label keys to enrich
|
|
453
|
+
if labels_to_enrich is None:
|
|
454
|
+
labels_to_enrich = (
|
|
455
|
+
mlrun_constants.MLRunInternalLabels.default_run_labels_to_enrich()
|
|
456
|
+
)
|
|
457
|
+
|
|
458
|
+
# Enrich labels
|
|
444
459
|
for label in labels_to_enrich:
|
|
460
|
+
if isinstance(label, enum.Enum):
|
|
461
|
+
label = label.value
|
|
445
462
|
enrichment = labels_enrichment.get(label)
|
|
446
|
-
if label
|
|
447
|
-
labels[label
|
|
463
|
+
if label not in labels and enrichment:
|
|
464
|
+
labels[label] = enrichment
|
|
448
465
|
return labels
|
|
449
466
|
|
|
450
467
|
|
mlrun/utils/helpers.py
CHANGED
|
@@ -2224,8 +2224,9 @@ class Workflow:
|
|
|
2224
2224
|
namespace=mlrun.mlconf.namespace,
|
|
2225
2225
|
)
|
|
2226
2226
|
|
|
2227
|
-
# arbitrary timeout of
|
|
2228
|
-
|
|
2227
|
+
# arbitrary timeout of 60 seconds, the workflow should be done by now, however sometimes kfp takes a few
|
|
2228
|
+
# seconds to update the workflow status
|
|
2229
|
+
kfp_run = kfp_client.wait_for_run_completion(workflow_id, 60)
|
|
2229
2230
|
if not kfp_run:
|
|
2230
2231
|
return None
|
|
2231
2232
|
|
|
@@ -16,6 +16,7 @@ import re
|
|
|
16
16
|
import typing
|
|
17
17
|
|
|
18
18
|
import aiohttp
|
|
19
|
+
import orjson
|
|
19
20
|
|
|
20
21
|
import mlrun.common.schemas
|
|
21
22
|
import mlrun.lists
|
|
@@ -86,9 +87,14 @@ class WebhookNotification(NotificationBase):
|
|
|
86
87
|
# we automatically handle it as `ssl=None` for their convenience.
|
|
87
88
|
verify_ssl = verify_ssl and None if url.startswith("https") else None
|
|
88
89
|
|
|
89
|
-
async with aiohttp.ClientSession(
|
|
90
|
+
async with aiohttp.ClientSession(
|
|
91
|
+
json_serialize=self._encoder,
|
|
92
|
+
) as session:
|
|
90
93
|
response = await getattr(session, method)(
|
|
91
|
-
url,
|
|
94
|
+
url,
|
|
95
|
+
headers=headers,
|
|
96
|
+
json=request_body,
|
|
97
|
+
ssl=verify_ssl,
|
|
92
98
|
)
|
|
93
99
|
response.raise_for_status()
|
|
94
100
|
|
|
@@ -128,3 +134,13 @@ class WebhookNotification(NotificationBase):
|
|
|
128
134
|
)
|
|
129
135
|
|
|
130
136
|
return override_body
|
|
137
|
+
|
|
138
|
+
@property
|
|
139
|
+
def _encoder(self):
|
|
140
|
+
return lambda body: orjson.dumps(
|
|
141
|
+
body,
|
|
142
|
+
option=orjson.OPT_NAIVE_UTC
|
|
143
|
+
| orjson.OPT_SERIALIZE_NUMPY
|
|
144
|
+
| orjson.OPT_NON_STR_KEYS
|
|
145
|
+
| orjson.OPT_SORT_KEYS,
|
|
146
|
+
).decode()
|
mlrun/utils/version/version.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mlrun
|
|
3
|
-
Version: 1.9.
|
|
3
|
+
Version: 1.9.0rc5
|
|
4
4
|
Summary: Tracking and config of machine learning runs
|
|
5
5
|
Home-page: https://github.com/mlrun/mlrun
|
|
6
6
|
Author: Yaron Haviv
|
|
@@ -51,8 +51,8 @@ Requires-Dist: setuptools>=75.2
|
|
|
51
51
|
Requires-Dist: deprecated~=1.2
|
|
52
52
|
Requires-Dist: jinja2>=3.1.3,~=3.1
|
|
53
53
|
Requires-Dist: orjson<4,>=3.9.15
|
|
54
|
-
Requires-Dist: mlrun-pipelines-kfp-common~=0.4.
|
|
55
|
-
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.4.
|
|
54
|
+
Requires-Dist: mlrun-pipelines-kfp-common~=0.4.3
|
|
55
|
+
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.4.2
|
|
56
56
|
Requires-Dist: docstring_parser~=0.16
|
|
57
57
|
Requires-Dist: aiosmtplib~=3.0
|
|
58
58
|
Provides-Extra: s3
|
|
@@ -79,7 +79,7 @@ Requires-Dist: google-cloud-bigquery-storage~=2.17; extra == "google-cloud"
|
|
|
79
79
|
Requires-Dist: google-cloud==0.34; extra == "google-cloud"
|
|
80
80
|
Requires-Dist: gcsfs<2024.7,>=2023.9.2; extra == "google-cloud"
|
|
81
81
|
Provides-Extra: kafka
|
|
82
|
-
Requires-Dist: kafka-python~=2.0; extra == "kafka"
|
|
82
|
+
Requires-Dist: kafka-python~=2.1.0; extra == "kafka"
|
|
83
83
|
Requires-Dist: avro~=1.11; extra == "kafka"
|
|
84
84
|
Provides-Extra: redis
|
|
85
85
|
Requires-Dist: redis~=4.3; extra == "redis"
|
|
@@ -99,7 +99,6 @@ Requires-Dist: ossfs==2023.12.0; extra == "alibaba-oss"
|
|
|
99
99
|
Requires-Dist: oss2==2.18.1; extra == "alibaba-oss"
|
|
100
100
|
Provides-Extra: tdengine
|
|
101
101
|
Requires-Dist: taos-ws-py==0.3.2; extra == "tdengine"
|
|
102
|
-
Requires-Dist: taoswswrap~=0.3.5; extra == "tdengine"
|
|
103
102
|
Provides-Extra: snowflake
|
|
104
103
|
Requires-Dist: snowflake-connector-python~=3.7; extra == "snowflake"
|
|
105
104
|
Provides-Extra: kfp18
|
|
@@ -119,7 +118,7 @@ Requires-Dist: timelength~=1.1; extra == "api"
|
|
|
119
118
|
Requires-Dist: memray~=1.12; sys_platform != "win32" and extra == "api"
|
|
120
119
|
Requires-Dist: aiosmtplib~=3.0; extra == "api"
|
|
121
120
|
Requires-Dist: pydantic<2,>=1; extra == "api"
|
|
122
|
-
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.4.
|
|
121
|
+
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.4.2; extra == "api"
|
|
123
122
|
Requires-Dist: grpcio~=1.70.0; extra == "api"
|
|
124
123
|
Provides-Extra: all
|
|
125
124
|
Requires-Dist: adlfs==2023.9.0; extra == "all"
|
|
@@ -140,7 +139,7 @@ Requires-Dist: google-cloud-bigquery[bqstorage,pandas]==3.14.1; extra == "all"
|
|
|
140
139
|
Requires-Dist: google-cloud-storage==2.14.0; extra == "all"
|
|
141
140
|
Requires-Dist: google-cloud==0.34; extra == "all"
|
|
142
141
|
Requires-Dist: graphviz~=0.20.0; extra == "all"
|
|
143
|
-
Requires-Dist: kafka-python~=2.0; extra == "all"
|
|
142
|
+
Requires-Dist: kafka-python~=2.1.0; extra == "all"
|
|
144
143
|
Requires-Dist: mlflow~=2.16; extra == "all"
|
|
145
144
|
Requires-Dist: msrest~=0.6.21; extra == "all"
|
|
146
145
|
Requires-Dist: oss2==2.18.1; extra == "all"
|
|
@@ -152,7 +151,6 @@ Requires-Dist: s3fs<2024.7,>=2023.9.2; extra == "all"
|
|
|
152
151
|
Requires-Dist: snowflake-connector-python~=3.7; extra == "all"
|
|
153
152
|
Requires-Dist: sqlalchemy~=1.4; extra == "all"
|
|
154
153
|
Requires-Dist: taos-ws-py==0.3.2; extra == "all"
|
|
155
|
-
Requires-Dist: taoswswrap~=0.3.5; extra == "all"
|
|
156
154
|
Provides-Extra: complete
|
|
157
155
|
Requires-Dist: adlfs==2023.9.0; extra == "complete"
|
|
158
156
|
Requires-Dist: aiobotocore<2.16,>=2.5.0; extra == "complete"
|
|
@@ -172,7 +170,7 @@ Requires-Dist: google-cloud-bigquery[bqstorage,pandas]==3.14.1; extra == "comple
|
|
|
172
170
|
Requires-Dist: google-cloud-storage==2.14.0; extra == "complete"
|
|
173
171
|
Requires-Dist: google-cloud==0.34; extra == "complete"
|
|
174
172
|
Requires-Dist: graphviz~=0.20.0; extra == "complete"
|
|
175
|
-
Requires-Dist: kafka-python~=2.0; extra == "complete"
|
|
173
|
+
Requires-Dist: kafka-python~=2.1.0; extra == "complete"
|
|
176
174
|
Requires-Dist: mlflow~=2.16; extra == "complete"
|
|
177
175
|
Requires-Dist: msrest~=0.6.21; extra == "complete"
|
|
178
176
|
Requires-Dist: oss2==2.18.1; extra == "complete"
|
|
@@ -184,7 +182,6 @@ Requires-Dist: s3fs<2024.7,>=2023.9.2; extra == "complete"
|
|
|
184
182
|
Requires-Dist: snowflake-connector-python~=3.7; extra == "complete"
|
|
185
183
|
Requires-Dist: sqlalchemy~=1.4; extra == "complete"
|
|
186
184
|
Requires-Dist: taos-ws-py==0.3.2; extra == "complete"
|
|
187
|
-
Requires-Dist: taoswswrap~=0.3.5; extra == "complete"
|
|
188
185
|
Provides-Extra: complete-api
|
|
189
186
|
Requires-Dist: adlfs==2023.9.0; extra == "complete-api"
|
|
190
187
|
Requires-Dist: aiobotocore<2.16,>=2.5.0; extra == "complete-api"
|
|
@@ -212,10 +209,10 @@ Requires-Dist: graphviz~=0.20.0; extra == "complete-api"
|
|
|
212
209
|
Requires-Dist: grpcio~=1.70.0; extra == "complete-api"
|
|
213
210
|
Requires-Dist: humanfriendly~=10.0; extra == "complete-api"
|
|
214
211
|
Requires-Dist: igz-mgmt~=0.4.1; extra == "complete-api"
|
|
215
|
-
Requires-Dist: kafka-python~=2.0; extra == "complete-api"
|
|
212
|
+
Requires-Dist: kafka-python~=2.1.0; extra == "complete-api"
|
|
216
213
|
Requires-Dist: memray~=1.12; sys_platform != "win32" and extra == "complete-api"
|
|
217
214
|
Requires-Dist: mlflow~=2.16; extra == "complete-api"
|
|
218
|
-
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.4.
|
|
215
|
+
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.4.2; extra == "complete-api"
|
|
219
216
|
Requires-Dist: msrest~=0.6.21; extra == "complete-api"
|
|
220
217
|
Requires-Dist: objgraph~=3.6; extra == "complete-api"
|
|
221
218
|
Requires-Dist: oss2==2.18.1; extra == "complete-api"
|
|
@@ -229,7 +226,6 @@ Requires-Dist: s3fs<2024.7,>=2023.9.2; extra == "complete-api"
|
|
|
229
226
|
Requires-Dist: snowflake-connector-python~=3.7; extra == "complete-api"
|
|
230
227
|
Requires-Dist: sqlalchemy~=1.4; extra == "complete-api"
|
|
231
228
|
Requires-Dist: taos-ws-py==0.3.2; extra == "complete-api"
|
|
232
|
-
Requires-Dist: taoswswrap~=0.3.5; extra == "complete-api"
|
|
233
229
|
Requires-Dist: timelength~=1.1; extra == "complete-api"
|
|
234
230
|
Requires-Dist: uvicorn~=0.32.1; extra == "complete-api"
|
|
235
231
|
Dynamic: author
|