mlrun 1.8.0rc20__py3-none-any.whl → 1.8.0rc22__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/__init__.py +37 -3
- mlrun/artifacts/document.py +39 -10
- mlrun/common/schemas/client_spec.py +0 -1
- mlrun/common/schemas/model_monitoring/constants.py +26 -9
- mlrun/config.py +39 -6
- mlrun/datastore/datastore_profile.py +58 -16
- mlrun/datastore/sources.py +7 -1
- mlrun/datastore/vectorstore.py +13 -1
- mlrun/db/base.py +3 -0
- mlrun/db/httpdb.py +0 -8
- mlrun/db/nopdb.py +3 -0
- mlrun/errors.py +4 -0
- mlrun/execution.py +1 -0
- mlrun/model_monitoring/controller.py +266 -103
- mlrun/model_monitoring/db/tsdb/__init__.py +11 -23
- mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +1 -1
- mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +2 -2
- mlrun/model_monitoring/helpers.py +15 -9
- mlrun/model_monitoring/stream_processing.py +72 -2
- mlrun/projects/project.py +93 -30
- mlrun/runtimes/nuclio/serving.py +1 -1
- mlrun/serving/server.py +11 -3
- mlrun/serving/states.py +33 -8
- mlrun/utils/version/version.json +2 -2
- {mlrun-1.8.0rc20.dist-info → mlrun-1.8.0rc22.dist-info}/METADATA +1 -1
- {mlrun-1.8.0rc20.dist-info → mlrun-1.8.0rc22.dist-info}/RECORD +30 -30
- {mlrun-1.8.0rc20.dist-info → mlrun-1.8.0rc22.dist-info}/WHEEL +1 -1
- {mlrun-1.8.0rc20.dist-info → mlrun-1.8.0rc22.dist-info}/LICENSE +0 -0
- {mlrun-1.8.0rc20.dist-info → mlrun-1.8.0rc22.dist-info}/entry_points.txt +0 -0
- {mlrun-1.8.0rc20.dist-info → mlrun-1.8.0rc22.dist-info}/top_level.txt +0 -0
|
@@ -29,11 +29,14 @@ import mlrun.model_monitoring.db
|
|
|
29
29
|
import mlrun.serving.states
|
|
30
30
|
import mlrun.utils
|
|
31
31
|
from mlrun.common.schemas.model_monitoring.constants import (
|
|
32
|
+
ControllerEvent,
|
|
33
|
+
ControllerEventKind,
|
|
32
34
|
EndpointType,
|
|
33
35
|
EventFieldType,
|
|
34
36
|
FileTargetKind,
|
|
35
37
|
ProjectSecretKeys,
|
|
36
38
|
)
|
|
39
|
+
from mlrun.datastore import parse_kafka_url
|
|
37
40
|
from mlrun.model_monitoring.db import TSDBConnector
|
|
38
41
|
from mlrun.utils import logger
|
|
39
42
|
|
|
@@ -88,7 +91,9 @@ class EventStreamProcessor:
|
|
|
88
91
|
self.v3io_framesd = v3io_framesd or mlrun.mlconf.v3io_framesd
|
|
89
92
|
self.v3io_api = v3io_api or mlrun.mlconf.v3io_api
|
|
90
93
|
|
|
91
|
-
self.v3io_access_key = v3io_access_key or
|
|
94
|
+
self.v3io_access_key = v3io_access_key or mlrun.get_secret_or_env(
|
|
95
|
+
"V3IO_ACCESS_KEY"
|
|
96
|
+
)
|
|
92
97
|
self.model_monitoring_access_key = (
|
|
93
98
|
model_monitoring_access_key
|
|
94
99
|
or os.environ.get(ProjectSecretKeys.ACCESS_KEY)
|
|
@@ -118,6 +123,7 @@ class EventStreamProcessor:
|
|
|
118
123
|
self,
|
|
119
124
|
fn: mlrun.runtimes.ServingRuntime,
|
|
120
125
|
tsdb_connector: TSDBConnector,
|
|
126
|
+
controller_stream_uri: str,
|
|
121
127
|
) -> None:
|
|
122
128
|
"""
|
|
123
129
|
Apply monitoring serving graph to a given serving function. The following serving graph includes about 4 main
|
|
@@ -146,6 +152,8 @@ class EventStreamProcessor:
|
|
|
146
152
|
|
|
147
153
|
:param fn: A serving function.
|
|
148
154
|
:param tsdb_connector: Time series database connector.
|
|
155
|
+
:param controller_stream_uri: The controller stream URI. Runs on server api pod so needed to be provided as
|
|
156
|
+
input
|
|
149
157
|
"""
|
|
150
158
|
|
|
151
159
|
graph = typing.cast(
|
|
@@ -209,6 +217,20 @@ class EventStreamProcessor:
|
|
|
209
217
|
)
|
|
210
218
|
|
|
211
219
|
apply_map_feature_names()
|
|
220
|
+
# split the graph between event with error vs valid event
|
|
221
|
+
graph.add_step(
|
|
222
|
+
"storey.Filter",
|
|
223
|
+
"FilterNOP",
|
|
224
|
+
after="MapFeatureNames",
|
|
225
|
+
_fn="(event.get('kind', " ") != 'nop_event')",
|
|
226
|
+
)
|
|
227
|
+
graph.add_step(
|
|
228
|
+
"storey.Filter",
|
|
229
|
+
"ForwardNOP",
|
|
230
|
+
after="MapFeatureNames",
|
|
231
|
+
_fn="(event.get('kind', " ") == 'nop_event')",
|
|
232
|
+
)
|
|
233
|
+
|
|
212
234
|
tsdb_connector.apply_monitoring_stream_steps(
|
|
213
235
|
graph=graph,
|
|
214
236
|
aggregate_windows=self.aggregate_windows,
|
|
@@ -221,7 +243,7 @@ class EventStreamProcessor:
|
|
|
221
243
|
graph.add_step(
|
|
222
244
|
"ProcessBeforeParquet",
|
|
223
245
|
name="ProcessBeforeParquet",
|
|
224
|
-
after="
|
|
246
|
+
after="FilterNOP",
|
|
225
247
|
_fn="(event)",
|
|
226
248
|
)
|
|
227
249
|
|
|
@@ -248,6 +270,44 @@ class EventStreamProcessor:
|
|
|
248
270
|
|
|
249
271
|
apply_parquet_target()
|
|
250
272
|
|
|
273
|
+
# controller branch
|
|
274
|
+
def apply_push_controller_stream(stream_uri: str):
|
|
275
|
+
if stream_uri.startswith("v3io://"):
|
|
276
|
+
graph.add_step(
|
|
277
|
+
">>",
|
|
278
|
+
"controller_stream_v3io",
|
|
279
|
+
path=stream_uri,
|
|
280
|
+
sharding_func=ControllerEvent.ENDPOINT_ID,
|
|
281
|
+
access_key=self.v3io_access_key,
|
|
282
|
+
after="ForwardNOP",
|
|
283
|
+
)
|
|
284
|
+
elif stream_uri.startswith("kafka://"):
|
|
285
|
+
topic, brokers = parse_kafka_url(stream_uri)
|
|
286
|
+
logger.info(
|
|
287
|
+
"Controller stream uri for kafka",
|
|
288
|
+
stream_uri=stream_uri,
|
|
289
|
+
topic=topic,
|
|
290
|
+
brokers=brokers,
|
|
291
|
+
)
|
|
292
|
+
if isinstance(brokers, list):
|
|
293
|
+
path = f"kafka://{brokers[0]}/{topic}"
|
|
294
|
+
elif isinstance(brokers, str):
|
|
295
|
+
path = f"kafka://{brokers}/{topic}"
|
|
296
|
+
else:
|
|
297
|
+
raise mlrun.errors.MLRunInvalidArgumentError(
|
|
298
|
+
"Brokers must be a list or str check controller stream uri"
|
|
299
|
+
)
|
|
300
|
+
graph.add_step(
|
|
301
|
+
">>",
|
|
302
|
+
"controller_stream_kafka",
|
|
303
|
+
path=path,
|
|
304
|
+
kafka_brokers=brokers,
|
|
305
|
+
_sharding_func="kafka_sharding_func", # TODO: remove this when storey handle str key
|
|
306
|
+
after="ForwardNOP",
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
apply_push_controller_stream(controller_stream_uri)
|
|
310
|
+
|
|
251
311
|
|
|
252
312
|
class ProcessBeforeParquet(mlrun.feature_store.steps.MapClass):
|
|
253
313
|
def __init__(self, **kwargs):
|
|
@@ -321,6 +381,9 @@ class ProcessEndpointEvent(mlrun.feature_store.steps.MapClass):
|
|
|
321
381
|
|
|
322
382
|
def do(self, full_event):
|
|
323
383
|
event = full_event.body
|
|
384
|
+
if event.get(ControllerEvent.KIND, "") == ControllerEventKind.NOP_EVENT:
|
|
385
|
+
logger.info("Skipped nop event inside of ProcessEndpointEvent", event=event)
|
|
386
|
+
return storey.Event(body=[event])
|
|
324
387
|
# Getting model version and function uri from event
|
|
325
388
|
# and use them for retrieving the endpoint_id
|
|
326
389
|
function_uri = full_event.body.get(EventFieldType.FUNCTION_URI)
|
|
@@ -589,6 +652,9 @@ class MapFeatureNames(mlrun.feature_store.steps.MapClass):
|
|
|
589
652
|
return None
|
|
590
653
|
|
|
591
654
|
def do(self, event: dict):
|
|
655
|
+
if event.get(ControllerEvent.KIND, "") == ControllerEventKind.NOP_EVENT:
|
|
656
|
+
logger.info("Skipped nop event inside of MapFeatureNames", event=event)
|
|
657
|
+
return event
|
|
592
658
|
endpoint_id = event[EventFieldType.ENDPOINT_ID]
|
|
593
659
|
|
|
594
660
|
feature_values = event[EventFieldType.FEATURES]
|
|
@@ -827,3 +893,7 @@ def update_monitoring_feature_set(
|
|
|
827
893
|
)
|
|
828
894
|
|
|
829
895
|
monitoring_feature_set.save()
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
def kafka_sharding_func(event):
|
|
899
|
+
return event.body[ControllerEvent.ENDPOINT_ID].encode("UTF-8")
|
mlrun/projects/project.py
CHANGED
|
@@ -29,6 +29,7 @@ import zipfile
|
|
|
29
29
|
from copy import deepcopy
|
|
30
30
|
from os import environ, makedirs, path
|
|
31
31
|
from typing import Callable, Optional, Union, cast
|
|
32
|
+
from urllib.parse import urlparse
|
|
32
33
|
|
|
33
34
|
import dotenv
|
|
34
35
|
import git
|
|
@@ -1964,6 +1965,7 @@ class MlrunProject(ModelObj):
|
|
|
1964
1965
|
... )
|
|
1965
1966
|
|
|
1966
1967
|
"""
|
|
1968
|
+
document_loader_spec = document_loader_spec or DocumentLoaderSpec()
|
|
1967
1969
|
if not document_loader_spec.download_object and upload:
|
|
1968
1970
|
raise ValueError(
|
|
1969
1971
|
"This document loader expects direct links/URLs and does not support file uploads. "
|
|
@@ -1972,9 +1974,8 @@ class MlrunProject(ModelObj):
|
|
|
1972
1974
|
doc_artifact = DocumentArtifact(
|
|
1973
1975
|
key=key,
|
|
1974
1976
|
original_source=local_path or target_path,
|
|
1975
|
-
document_loader_spec=document_loader_spec
|
|
1976
|
-
|
|
1977
|
-
else DocumentLoaderSpec(),
|
|
1977
|
+
document_loader_spec=document_loader_spec,
|
|
1978
|
+
collections=kwargs.pop("collections", None),
|
|
1978
1979
|
**kwargs,
|
|
1979
1980
|
)
|
|
1980
1981
|
return self.log_artifact(
|
|
@@ -3608,9 +3609,12 @@ class MlrunProject(ModelObj):
|
|
|
3608
3609
|
def set_model_monitoring_credentials(
|
|
3609
3610
|
self,
|
|
3610
3611
|
access_key: Optional[str] = None,
|
|
3611
|
-
stream_path: Optional[str] = None,
|
|
3612
|
-
tsdb_connection: Optional[str] = None,
|
|
3612
|
+
stream_path: Optional[str] = None, # Deprecated
|
|
3613
|
+
tsdb_connection: Optional[str] = None, # Deprecated
|
|
3613
3614
|
replace_creds: bool = False,
|
|
3615
|
+
*,
|
|
3616
|
+
stream_profile_name: Optional[str] = None,
|
|
3617
|
+
tsdb_profile_name: Optional[str] = None,
|
|
3614
3618
|
):
|
|
3615
3619
|
"""
|
|
3616
3620
|
Set the credentials that will be used by the project's model monitoring
|
|
@@ -3622,50 +3626,109 @@ class MlrunProject(ModelObj):
|
|
|
3622
3626
|
* None - will be set from the system configuration.
|
|
3623
3627
|
* v3io - for v3io endpoint store, pass `v3io` and the system will generate the
|
|
3624
3628
|
exact path.
|
|
3625
|
-
:param stream_path:
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
* v3io - for v3io stream, pass
|
|
3629
|
-
path.
|
|
3630
|
-
* Kafka - for Kafka stream, provide the full connection string without
|
|
3631
|
-
topic, for example kafka://<some_kafka_broker>:<port
|
|
3632
|
-
:param tsdb_connection: Connection string to the time series database. By default, None.
|
|
3629
|
+
:param stream_path: (Deprecated) This argument is deprecated. Use ``stream_profile_name`` instead.
|
|
3630
|
+
Path to the model monitoring stream. By default, None. Options:
|
|
3631
|
+
|
|
3632
|
+
* ``"v3io"`` - for v3io stream, pass ``"v3io"`` and the system will generate
|
|
3633
|
+
the exact path.
|
|
3634
|
+
* Kafka - for Kafka stream, provide the full connection string without acustom
|
|
3635
|
+
topic, for example ``"kafka://<some_kafka_broker>:<port>"``.
|
|
3636
|
+
:param tsdb_connection: (Deprecated) Connection string to the time series database. By default, None.
|
|
3633
3637
|
Options:
|
|
3634
3638
|
|
|
3635
|
-
*
|
|
3636
|
-
|
|
3637
|
-
path.
|
|
3639
|
+
* v3io - for v3io stream, pass ``"v3io"`` and the system will generate the
|
|
3640
|
+
exact path.
|
|
3638
3641
|
* TDEngine - for TDEngine tsdb, provide the full websocket connection URL,
|
|
3639
|
-
for example taosws://<username>:<password>@<host>:<port
|
|
3642
|
+
for example ``"taosws://<username>:<password>@<host>:<port>"``.
|
|
3640
3643
|
:param replace_creds: If True, will override the existing credentials.
|
|
3641
3644
|
Please keep in mind that if you already enabled model monitoring on
|
|
3642
3645
|
your project this action can cause data loose and will require redeploying
|
|
3643
3646
|
all model monitoring functions & model monitoring infra
|
|
3644
3647
|
& tracked model server.
|
|
3648
|
+
:param stream_profile_name: The datastore profile name of the stream to be used in model monitoring.
|
|
3649
|
+
The supported profiles are:
|
|
3650
|
+
|
|
3651
|
+
* :py:class:`~mlrun.datastore.datastore_profile.DatastoreProfileV3io`
|
|
3652
|
+
* :py:class:`~mlrun.datastore.datastore_profile.DatastoreProfileKafkaSource`
|
|
3653
|
+
|
|
3654
|
+
You need to register one of them, and pass the profile's name.
|
|
3655
|
+
:param tsdb_profile_name: The datastore profile name of the time-series database to be used in model
|
|
3656
|
+
monitoring. The supported profiles are:
|
|
3657
|
+
|
|
3658
|
+
* :py:class:`~mlrun.datastore.datastore_profile.DatastoreProfileV3io`
|
|
3659
|
+
* :py:class:`~mlrun.datastore.datastore_profile.TDEngineDatastoreProfile`
|
|
3660
|
+
|
|
3661
|
+
You need to register one of them, and pass the profile's name.
|
|
3645
3662
|
"""
|
|
3646
3663
|
db = mlrun.db.get_run_db(secrets=self._secrets)
|
|
3647
|
-
|
|
3648
|
-
|
|
3649
|
-
|
|
3664
|
+
|
|
3665
|
+
if tsdb_connection:
|
|
3666
|
+
warnings.warn(
|
|
3667
|
+
"The `tsdb_connection` argument is deprecated and will be removed in MLRun version 1.8.0. "
|
|
3668
|
+
"Use `tsdb_profile_name` instead.",
|
|
3669
|
+
FutureWarning,
|
|
3650
3670
|
)
|
|
3671
|
+
if tsdb_profile_name:
|
|
3672
|
+
raise mlrun.errors.MLRunValueError(
|
|
3673
|
+
"If you set `tsdb_profile_name`, you must not pass `tsdb_connection`."
|
|
3674
|
+
)
|
|
3675
|
+
if tsdb_connection == "v3io":
|
|
3676
|
+
tsdb_profile = mlrun.datastore.datastore_profile.DatastoreProfileV3io(
|
|
3677
|
+
name=mm_constants.DefaultProfileName.TSDB
|
|
3678
|
+
)
|
|
3679
|
+
else:
|
|
3680
|
+
parsed_url = urlparse(tsdb_connection)
|
|
3681
|
+
if parsed_url.scheme != "taosws":
|
|
3682
|
+
raise mlrun.errors.MLRunValueError(
|
|
3683
|
+
f"Unsupported `tsdb_connection`: '{tsdb_connection}'."
|
|
3684
|
+
)
|
|
3685
|
+
tsdb_profile = (
|
|
3686
|
+
mlrun.datastore.datastore_profile.TDEngineDatastoreProfile(
|
|
3687
|
+
name=mm_constants.DefaultProfileName.TSDB,
|
|
3688
|
+
user=parsed_url.username,
|
|
3689
|
+
password=parsed_url.password,
|
|
3690
|
+
host=parsed_url.hostname,
|
|
3691
|
+
port=parsed_url.port,
|
|
3692
|
+
)
|
|
3693
|
+
)
|
|
3694
|
+
|
|
3651
3695
|
self.register_datastore_profile(tsdb_profile)
|
|
3652
3696
|
tsdb_profile_name = tsdb_profile.name
|
|
3653
|
-
|
|
3654
|
-
|
|
3655
|
-
|
|
3656
|
-
|
|
3657
|
-
|
|
3697
|
+
|
|
3698
|
+
if stream_path:
|
|
3699
|
+
warnings.warn(
|
|
3700
|
+
"The `stream_path` argument is deprecated and will be removed in MLRun version 1.8.0. "
|
|
3701
|
+
"Use `stream_profile_name` instead.",
|
|
3702
|
+
FutureWarning,
|
|
3658
3703
|
)
|
|
3704
|
+
if stream_profile_name:
|
|
3705
|
+
raise mlrun.errors.MLRunValueError(
|
|
3706
|
+
"If you set `stream_profile_name`, you must not pass `stream_path`."
|
|
3707
|
+
)
|
|
3708
|
+
if stream_path == "v3io":
|
|
3709
|
+
stream_profile = mlrun.datastore.datastore_profile.DatastoreProfileV3io(
|
|
3710
|
+
name=mm_constants.DefaultProfileName.STREAM
|
|
3711
|
+
)
|
|
3712
|
+
else:
|
|
3713
|
+
parsed_stream = urlparse(stream_path)
|
|
3714
|
+
if parsed_stream.scheme != "kafka":
|
|
3715
|
+
raise mlrun.errors.MLRunValueError(
|
|
3716
|
+
f"Unsupported `stream_path`: '{stream_path}'."
|
|
3717
|
+
)
|
|
3718
|
+
stream_profile = (
|
|
3719
|
+
mlrun.datastore.datastore_profile.DatastoreProfileKafkaSource(
|
|
3720
|
+
name=mm_constants.DefaultProfileName.STREAM,
|
|
3721
|
+
brokers=[parsed_stream.netloc],
|
|
3722
|
+
topics=[],
|
|
3723
|
+
)
|
|
3724
|
+
)
|
|
3659
3725
|
self.register_datastore_profile(stream_profile)
|
|
3660
3726
|
stream_profile_name = stream_profile.name
|
|
3661
|
-
|
|
3662
|
-
stream_profile_name = None
|
|
3727
|
+
|
|
3663
3728
|
db.set_model_monitoring_credentials(
|
|
3664
3729
|
project=self.name,
|
|
3665
3730
|
credentials={
|
|
3666
3731
|
"access_key": access_key,
|
|
3667
|
-
"stream_path": stream_path,
|
|
3668
|
-
"tsdb_connection": tsdb_connection,
|
|
3669
3732
|
"tsdb_profile_name": tsdb_profile_name,
|
|
3670
3733
|
"stream_profile_name": stream_profile_name,
|
|
3671
3734
|
},
|
|
@@ -3676,7 +3739,7 @@ class MlrunProject(ModelObj):
|
|
|
3676
3739
|
"Model monitoring credentials were set successfully. "
|
|
3677
3740
|
"Please keep in mind that if you already had model monitoring functions "
|
|
3678
3741
|
"/ model monitoring infra / tracked model server "
|
|
3679
|
-
"deployed on your project, you will need to redeploy them."
|
|
3742
|
+
"deployed on your project, you will need to redeploy them. "
|
|
3680
3743
|
"For redeploying the model monitoring infra, please use `enable_model_monitoring` API "
|
|
3681
3744
|
"and set `rebuild_images=True`"
|
|
3682
3745
|
)
|
mlrun/runtimes/nuclio/serving.py
CHANGED
|
@@ -688,7 +688,7 @@ class ServingRuntime(RemoteRuntime):
|
|
|
688
688
|
"project": self.metadata.project,
|
|
689
689
|
"version": "v2",
|
|
690
690
|
"parameters": self.spec.parameters,
|
|
691
|
-
"graph": self.spec.graph.to_dict() if self.spec.graph else {},
|
|
691
|
+
"graph": self.spec.graph.to_dict(strip=True) if self.spec.graph else {},
|
|
692
692
|
"load_mode": self.spec.load_mode,
|
|
693
693
|
"functions": function_name_uri_map,
|
|
694
694
|
"graph_initializer": self.spec.graph_initializer,
|
mlrun/serving/server.py
CHANGED
|
@@ -44,6 +44,8 @@ from ..utils import get_caller_globals
|
|
|
44
44
|
from .states import RootFlowStep, RouterStep, get_function, graph_root_setter
|
|
45
45
|
from .utils import event_id_key, event_path_key
|
|
46
46
|
|
|
47
|
+
DUMMY_STREAM = "dummy://"
|
|
48
|
+
|
|
47
49
|
|
|
48
50
|
class _StreamContext:
|
|
49
51
|
"""Handles the stream context for the events stream process. Includes the configuration for the output stream
|
|
@@ -72,14 +74,20 @@ class _StreamContext:
|
|
|
72
74
|
function_uri, config.default_project
|
|
73
75
|
)
|
|
74
76
|
|
|
75
|
-
|
|
77
|
+
stream_args = parameters.get("stream_args", {})
|
|
78
|
+
|
|
79
|
+
if log_stream == DUMMY_STREAM:
|
|
80
|
+
# Dummy stream used for testing, see tests/serving/test_serving.py
|
|
81
|
+
self.stream_uri = DUMMY_STREAM
|
|
82
|
+
elif not stream_args.get("mock"): # if not a mock: `context.is_mock = True`
|
|
83
|
+
self.stream_uri = mlrun.model_monitoring.get_stream_path(
|
|
84
|
+
project=project
|
|
85
|
+
)
|
|
76
86
|
|
|
77
87
|
if log_stream:
|
|
78
88
|
# Update the stream path to the log stream value
|
|
79
89
|
self.stream_uri = log_stream.format(project=project)
|
|
80
90
|
|
|
81
|
-
stream_args = parameters.get("stream_args", {})
|
|
82
|
-
|
|
83
91
|
self.output_stream = get_stream_pusher(self.stream_uri, **stream_args)
|
|
84
92
|
|
|
85
93
|
|
mlrun/serving/states.py
CHANGED
|
@@ -31,6 +31,7 @@ import storey.utils
|
|
|
31
31
|
|
|
32
32
|
import mlrun
|
|
33
33
|
import mlrun.common.schemas as schemas
|
|
34
|
+
from mlrun.utils import logger
|
|
34
35
|
|
|
35
36
|
from ..config import config
|
|
36
37
|
from ..datastore import get_stream_pusher
|
|
@@ -49,6 +50,8 @@ path_splitter = "/"
|
|
|
49
50
|
previous_step = "$prev"
|
|
50
51
|
queue_class_names = [">>", "$queue"]
|
|
51
52
|
|
|
53
|
+
MAX_MODELS_PER_ROUTER = 5000
|
|
54
|
+
|
|
52
55
|
|
|
53
56
|
class GraphError(Exception):
|
|
54
57
|
"""error in graph topology or configuration"""
|
|
@@ -86,8 +89,10 @@ _task_step_fields = [
|
|
|
86
89
|
"endpoint_type",
|
|
87
90
|
]
|
|
88
91
|
|
|
89
|
-
|
|
90
|
-
|
|
92
|
+
_default_fields_to_strip_from_step = [
|
|
93
|
+
"model_endpoint_creation_strategy",
|
|
94
|
+
"endpoint_type",
|
|
95
|
+
]
|
|
91
96
|
|
|
92
97
|
|
|
93
98
|
def new_remote_endpoint(
|
|
@@ -110,6 +115,7 @@ class BaseStep(ModelObj):
|
|
|
110
115
|
kind = "BaseStep"
|
|
111
116
|
default_shape = "ellipse"
|
|
112
117
|
_dict_fields = ["kind", "comment", "after", "on_error"]
|
|
118
|
+
_default_fields_to_strip = _default_fields_to_strip_from_step
|
|
113
119
|
|
|
114
120
|
def __init__(
|
|
115
121
|
self,
|
|
@@ -625,6 +631,19 @@ class TaskStep(BaseStep):
|
|
|
625
631
|
raise exc
|
|
626
632
|
return event
|
|
627
633
|
|
|
634
|
+
def to_dict(
|
|
635
|
+
self,
|
|
636
|
+
fields: Optional[list] = None,
|
|
637
|
+
exclude: Optional[list] = None,
|
|
638
|
+
strip: bool = False,
|
|
639
|
+
) -> dict:
|
|
640
|
+
self.endpoint_type = (
|
|
641
|
+
self.endpoint_type.value
|
|
642
|
+
if isinstance(self.endpoint_type, schemas.EndpointType)
|
|
643
|
+
else self.endpoint_type
|
|
644
|
+
)
|
|
645
|
+
return super().to_dict(fields, exclude, strip)
|
|
646
|
+
|
|
628
647
|
|
|
629
648
|
class MonitoringApplicationStep(TaskStep):
|
|
630
649
|
"""monitoring application execution step, runs users class code"""
|
|
@@ -755,7 +774,7 @@ class RouterStep(TaskStep):
|
|
|
755
774
|
creation_strategy: schemas.ModelEndpointCreationStrategy = schemas.ModelEndpointCreationStrategy.INPLACE,
|
|
756
775
|
**class_args,
|
|
757
776
|
):
|
|
758
|
-
"""add child route step or class to the router
|
|
777
|
+
"""add child route step or class to the router, if key exists it will be updated
|
|
759
778
|
|
|
760
779
|
:param key: unique name (and route path) for the child step
|
|
761
780
|
:param route: child step object (Task, ..)
|
|
@@ -775,7 +794,13 @@ class RouterStep(TaskStep):
|
|
|
775
794
|
2. Create a new model endpoint with the same name and set it to `latest`.
|
|
776
795
|
|
|
777
796
|
"""
|
|
778
|
-
|
|
797
|
+
if len(self.routes.keys()) >= MAX_MODELS_PER_ROUTER and key not in self.routes:
|
|
798
|
+
raise mlrun.errors.MLRunModelLimitExceededError(
|
|
799
|
+
f"Router cannot support more than {MAX_MODELS_PER_ROUTER} model endpoints. "
|
|
800
|
+
f"To add a new route, edit an existing one by passing the same key."
|
|
801
|
+
)
|
|
802
|
+
if key in self.routes:
|
|
803
|
+
logger.info(f"Model {key} already exists, updating it.")
|
|
779
804
|
if not route and not class_name and not handler:
|
|
780
805
|
raise MLRunInvalidArgumentError("route or class_name must be specified")
|
|
781
806
|
if not route:
|
|
@@ -790,10 +815,6 @@ class RouterStep(TaskStep):
|
|
|
790
815
|
)
|
|
791
816
|
route.function = function or route.function
|
|
792
817
|
|
|
793
|
-
if len(self._routes) >= MAX_ALLOWED_STEPS:
|
|
794
|
-
raise mlrun.errors.MLRunInvalidArgumentError(
|
|
795
|
-
f"Cannot create the serving graph: the maximum number of steps is {MAX_ALLOWED_STEPS}"
|
|
796
|
-
)
|
|
797
818
|
route = self._routes.update(key, route)
|
|
798
819
|
route.set_parent(self)
|
|
799
820
|
return route
|
|
@@ -806,6 +827,10 @@ class RouterStep(TaskStep):
|
|
|
806
827
|
del self._routes[key]
|
|
807
828
|
|
|
808
829
|
def init_object(self, context, namespace, mode="sync", reset=False, **extra_kwargs):
|
|
830
|
+
if not self.routes:
|
|
831
|
+
raise mlrun.errors.MLRunRuntimeError(
|
|
832
|
+
"You have to add models to the router step before initializing it"
|
|
833
|
+
)
|
|
809
834
|
if not self._is_local_function(context):
|
|
810
835
|
return
|
|
811
836
|
|
mlrun/utils/version/version.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
mlrun/__init__.py,sha256=
|
|
1
|
+
mlrun/__init__.py,sha256=zS40Lp5ZKivLBlNDkv-OQmVvwDib7C-cCdtD6UKXe28,8808
|
|
2
2
|
mlrun/__main__.py,sha256=3CJdwbSQGpbEhnAnVN_-CkQmLOPUUXTKhMf7xIWNQrc,46138
|
|
3
|
-
mlrun/config.py,sha256=
|
|
4
|
-
mlrun/errors.py,sha256=
|
|
5
|
-
mlrun/execution.py,sha256=
|
|
3
|
+
mlrun/config.py,sha256=zzR_qbNuA-lLIScx5GLRIF21eNJIoiVeBU-JS_movKo,71711
|
|
4
|
+
mlrun/errors.py,sha256=LkcbXTLANGdsgo2CRX2pdbyNmt--lMsjGv0XZMgP-Nc,8222
|
|
5
|
+
mlrun/execution.py,sha256=WCrE3AoB2ldwcZPzJI1iCeD4DXi5ARkUv119FiQiiQk,49087
|
|
6
6
|
mlrun/features.py,sha256=ReBaNGsBYXqcbgI012n-SO_j6oHIbk_Vpv0CGPXbUmo,15842
|
|
7
7
|
mlrun/k8s_utils.py,sha256=mRQMs6NzPq36vx1n5_2BfFapXysc8wv3NcrZ77_2ANA,8949
|
|
8
8
|
mlrun/lists.py,sha256=1hFv3Iyu5DVX1kdBGJmwUoY0CqrzauhKdSq9g3piHb4,8442
|
|
@@ -16,7 +16,7 @@ mlrun/api/schemas/__init__.py,sha256=fEWH4I8hr5AdRJ7yoW44RlFB6NHkYDxyomP5J6ct1z4
|
|
|
16
16
|
mlrun/artifacts/__init__.py,sha256=ofC2extBCOC1wg1YtdTzWzH3eeG_f-sFBUkHjYtZJpk,1175
|
|
17
17
|
mlrun/artifacts/base.py,sha256=nz2ZqC74JGfWN0M6_hOXXQj3bXSTxNp4eUgvWHVcdvY,29979
|
|
18
18
|
mlrun/artifacts/dataset.py,sha256=QTot5vCgLHatlIWwNnKbWdZ8HHTxaZ7wk4gWQDoqQ2k,16655
|
|
19
|
-
mlrun/artifacts/document.py,sha256=
|
|
19
|
+
mlrun/artifacts/document.py,sha256=r3dWCxuy2jV3m0YHWlCW3wXChCR2ERaEs6hptqZalpU,16553
|
|
20
20
|
mlrun/artifacts/manager.py,sha256=bXb70mKF6wIGs7syCiFfGnjalqx4g9bO_J5DaVzUUKw,16163
|
|
21
21
|
mlrun/artifacts/model.py,sha256=jeOjUq_iZSHoNqlPyGgOz6acwje1Yqpg1yZwF9GbyG8,21615
|
|
22
22
|
mlrun/artifacts/plots.py,sha256=dS0mHGt1b20tN2JyEH9H5o5I0oMKZkzn3Uz_3Hf4WjU,4813
|
|
@@ -45,7 +45,7 @@ mlrun/common/schemas/api_gateway.py,sha256=3a0QxECLmoDkD5IiOKtXJL-uiWB26Hg55WMA3
|
|
|
45
45
|
mlrun/common/schemas/artifact.py,sha256=f0NPsoZmA-WD9RtN-dcKFW6KuV0PPQB25A2psF7LbP8,4013
|
|
46
46
|
mlrun/common/schemas/auth.py,sha256=AGbBNvQq_vcvhX_NLqbT-QPHL4BAJMB3xwBXW7cFvpo,6761
|
|
47
47
|
mlrun/common/schemas/background_task.py,sha256=ofWRAQGGEkXEu79Dbw7tT_5GPolR09Lc3Ebg2r0fT24,1728
|
|
48
|
-
mlrun/common/schemas/client_spec.py,sha256=
|
|
48
|
+
mlrun/common/schemas/client_spec.py,sha256=1RV2vx3PhXfk456b0qcU9R7dz4cisHsRD-HgjKeBdg0,2797
|
|
49
49
|
mlrun/common/schemas/clusterization_spec.py,sha256=LAWOL6V3E5hAt8tKmnP3DOJcKG1FQqp8Z-x8szPkf1I,894
|
|
50
50
|
mlrun/common/schemas/common.py,sha256=3GcfkT7yOWmrieCSrjOJ_4aXkiUWwLd_kxqMDP1-_hw,3540
|
|
51
51
|
mlrun/common/schemas/constants.py,sha256=LfoSq8d2n7TMrM0IvxGylOtVEJGvvDVlK2-Yau-Tt30,7245
|
|
@@ -72,7 +72,7 @@ mlrun/common/schemas/secret.py,sha256=CCxFYiPwJtDxwg2VVJH9nUG9cAZ2a34IjeuaWv-BYl
|
|
|
72
72
|
mlrun/common/schemas/tag.py,sha256=HRZi5QZ4vVGaCr2AMk9eJgcNiAIXmH4YDc8a4fvF770,893
|
|
73
73
|
mlrun/common/schemas/workflow.py,sha256=rwYzDJYxpE9k4kC88j_eUCmqK4ZsWV_h-_nli7Fs7Ow,2078
|
|
74
74
|
mlrun/common/schemas/model_monitoring/__init__.py,sha256=jz0fvdn8BEecgUCKhiSNH6QtFhSW4O19Ql9KXo0AxOg,1900
|
|
75
|
-
mlrun/common/schemas/model_monitoring/constants.py,sha256=
|
|
75
|
+
mlrun/common/schemas/model_monitoring/constants.py,sha256=aSc-yVMWxn54LTmI16gOluYK0TB-XE4fGIuxGn_xttU,12604
|
|
76
76
|
mlrun/common/schemas/model_monitoring/grafana.py,sha256=Rq10KKOyyUYr7qOQFZfwGZtUim0LY9O0LQ5uc9jmIVQ,1562
|
|
77
77
|
mlrun/common/schemas/model_monitoring/model_endpoints.py,sha256=0gBH-KnDDbGLOkiqHtk0_iNIdW-NPVy0TKJnZ1fDcEQ,11807
|
|
78
78
|
mlrun/data_types/__init__.py,sha256=unRo9GGwCmj0hBKBRsXJ2P4BzpQaddlQTvIrVQaKluI,984
|
|
@@ -85,7 +85,7 @@ mlrun/datastore/alibaba_oss.py,sha256=k-OHVe08HjMewlkpsT657CbOiVFAfSq9_EqhCE-k86
|
|
|
85
85
|
mlrun/datastore/azure_blob.py,sha256=SzAcHYSXkm8Zpopz2Ea-rWVClH0URocUazcNK04S9W0,12776
|
|
86
86
|
mlrun/datastore/base.py,sha256=Dqg8PqX0TFKHZg27Dgguc3RnQ1GABZiLf87p5ErTqJs,26448
|
|
87
87
|
mlrun/datastore/datastore.py,sha256=frUYYP4i8ZmnY8GNXSgN_3x_exRgRPfxrCtAGEUifEU,9478
|
|
88
|
-
mlrun/datastore/datastore_profile.py,sha256=
|
|
88
|
+
mlrun/datastore/datastore_profile.py,sha256=ZQyxwTTPLawfVeZObScGqoK89iqDcr358kuCtaMH_vM,23714
|
|
89
89
|
mlrun/datastore/dbfs_store.py,sha256=QkDRzwFnvm7CgEg4NuGxes6tBgKDyhX0CiBUvK8c9pk,6568
|
|
90
90
|
mlrun/datastore/filestore.py,sha256=OcykjzhbUAZ6_Cb9bGAXRL2ngsOpxXSb4rR0lyogZtM,3773
|
|
91
91
|
mlrun/datastore/google_cloud_storage.py,sha256=MnToY6irdhBZ8Wcapqnr1Yq2724LAh2uPO7MAtdWfUY,8716
|
|
@@ -94,7 +94,7 @@ mlrun/datastore/inmem.py,sha256=IsM83nn-3CqmGdLzim7i9ZmJwG6ZGhBZGN6_hszWZnE,2951
|
|
|
94
94
|
mlrun/datastore/redis.py,sha256=QeNMkSz3zQXiXZhFUZcEtViqqbUysGJditbqe5M-J48,5682
|
|
95
95
|
mlrun/datastore/s3.py,sha256=U6487yQP8njrquZWvxHMPm_Q9gGOr4moCYWZ-U87U-c,9046
|
|
96
96
|
mlrun/datastore/snowflake_utils.py,sha256=Wohvnlmq8j1d98RCaknll-iWdZZpSlCrKhUOEy0_-CA,1483
|
|
97
|
-
mlrun/datastore/sources.py,sha256=
|
|
97
|
+
mlrun/datastore/sources.py,sha256=ypRaFyQHlzB_24tAw3VBvnig075rdv2ybjTIR4WQwHc,49414
|
|
98
98
|
mlrun/datastore/spark_udf.py,sha256=NnnB3DZxZb-rqpRy7b-NC7QWXuuqFn3XkBDc86tU4mQ,1498
|
|
99
99
|
mlrun/datastore/spark_utils.py,sha256=_AsVoU5Ix_-W7Gyq8io8V-2GTk0m8THJNDP3WGGaWJY,2865
|
|
100
100
|
mlrun/datastore/store_resources.py,sha256=PFOMrZ6KH6hBOb0PiO-cHx_kv0UpHu5P2t8_mrR-lS4,6842
|
|
@@ -102,15 +102,15 @@ mlrun/datastore/storeytargets.py,sha256=uNYG4nCBD3JIfa51CG4cDe9ryc9oIcqUdUXKvCPB
|
|
|
102
102
|
mlrun/datastore/targets.py,sha256=QiEK-mHmUt2qnS2yaBSSKgk8CKqsGU-JoQ9kHoW1bvE,80759
|
|
103
103
|
mlrun/datastore/utils.py,sha256=ZDAzz0W16_JcM6Q9h4RoMbdruM9eA6YGlA5dw8gW8Bw,7754
|
|
104
104
|
mlrun/datastore/v3io.py,sha256=QSYBORRLcJTeM9mt0EaWzyLcdmzrPkqrF7k5uLTam5U,8209
|
|
105
|
-
mlrun/datastore/vectorstore.py,sha256=
|
|
105
|
+
mlrun/datastore/vectorstore.py,sha256=kdcs5IFgDL1IstuTtVzD0mQA7dP2RBO6sFTOuAD6MXE,11344
|
|
106
106
|
mlrun/datastore/wasbfs/__init__.py,sha256=s5Ul-0kAhYqFjKDR2X0O2vDGDbLQQduElb32Ev56Te4,1343
|
|
107
107
|
mlrun/datastore/wasbfs/fs.py,sha256=ge8NK__5vTcFT-krI155_8RDUywQw4SIRX6BWATXy9Q,6299
|
|
108
108
|
mlrun/db/__init__.py,sha256=WqJ4x8lqJ7ZoKbhEyFqkYADd9P6E3citckx9e9ZLcIU,1163
|
|
109
109
|
mlrun/db/auth_utils.py,sha256=hpg8D2r82oN0BWabuWN04BTNZ7jYMAF242YSUpK7LFM,5211
|
|
110
|
-
mlrun/db/base.py,sha256=
|
|
110
|
+
mlrun/db/base.py,sha256=2Pkq8Hax13rZjxlB5aNq5X4LcU6a_frpvvNFCqsBHOQ,30435
|
|
111
111
|
mlrun/db/factory.py,sha256=yP2vVmveUE7LYTCHbS6lQIxP9rW--zdISWuPd_I3d_4,2111
|
|
112
|
-
mlrun/db/httpdb.py,sha256=
|
|
113
|
-
mlrun/db/nopdb.py,sha256=
|
|
112
|
+
mlrun/db/httpdb.py,sha256=3k6DtcgjasUThVjz0AQfSFrURYbB3DWqVRqJIwvbNX0,230448
|
|
113
|
+
mlrun/db/nopdb.py,sha256=IyZG7n2c-Cbp0x8zPlLmgIMzYPFOTMJKW9bMkJV0hic,26890
|
|
114
114
|
mlrun/feature_store/__init__.py,sha256=AVnY2AFUNc2dKxLLUMx2K3Wo1eGviv0brDcYlDnmtf4,1506
|
|
115
115
|
mlrun/feature_store/api.py,sha256=qkojZpzqGAn3r9ww0ynBRKOs8ji8URaK4DSYD4SE-CE,50395
|
|
116
116
|
mlrun/feature_store/common.py,sha256=Z7USI-d1fo0iwBMsqMBtJflJfyuiV3BLoDXQPSAoBAs,12826
|
|
@@ -217,10 +217,10 @@ mlrun/launcher/local.py,sha256=9zNiuswHnSINDj4yYP2Vd192b5d4FUtSA8O2ICKjsKo,11279
|
|
|
217
217
|
mlrun/launcher/remote.py,sha256=rLJW4UAnUT5iUb4BsGBOAV3K4R29a0X4lFtRkVKlyYU,7709
|
|
218
218
|
mlrun/model_monitoring/__init__.py,sha256=ELy7njEtZnz09Dc6PGZSFFEGtnwI15bJNWM3Pj4_YIs,753
|
|
219
219
|
mlrun/model_monitoring/api.py,sha256=nH5aEUkmUEJF0CurrWJxmxVv1tQed2yzCLhQByG1L00,28561
|
|
220
|
-
mlrun/model_monitoring/controller.py,sha256=
|
|
220
|
+
mlrun/model_monitoring/controller.py,sha256=1SdrYC3n9nDOOM6G2dE0RgWnaq0o7u7sw2U2gJTpBPs,26516
|
|
221
221
|
mlrun/model_monitoring/features_drift_table.py,sha256=c6GpKtpOJbuT1u5uMWDL_S-6N4YPOmlktWMqPme3KFY,25308
|
|
222
|
-
mlrun/model_monitoring/helpers.py,sha256=
|
|
223
|
-
mlrun/model_monitoring/stream_processing.py,sha256=
|
|
222
|
+
mlrun/model_monitoring/helpers.py,sha256=EX9i1JCY4NKHqUFptGU_xOIpGjQQ--3GytrEhDxIZ-4,18317
|
|
223
|
+
mlrun/model_monitoring/stream_processing.py,sha256=h_jexS-yttP98Ma51vxB_m_ZGs9soCOMoEwAkf_3hHA,35669
|
|
224
224
|
mlrun/model_monitoring/tracking_policy.py,sha256=PBIGrUYWrwcE5gwXupBIVzOb0QRRwPJsgQm_yLGQxB4,5595
|
|
225
225
|
mlrun/model_monitoring/writer.py,sha256=vbL7bqTyNu8q4bNcebX72sUMybVDAoTWg-CXq4fov3Y,8429
|
|
226
226
|
mlrun/model_monitoring/applications/__init__.py,sha256=QYvzgCutFdAkzqKPD3mvkX_3c1X4tzd-kW8ojUOE9ic,889
|
|
@@ -233,16 +233,16 @@ mlrun/model_monitoring/applications/results.py,sha256=oh1z9oacWWP4azVXm_Fx7j8uXS
|
|
|
233
233
|
mlrun/model_monitoring/db/__init__.py,sha256=r47xPGZpIfMuv8J3PQCZTSqVPMhUta4sSJCZFKcS7FM,644
|
|
234
234
|
mlrun/model_monitoring/db/_schedules.py,sha256=NTO1rbSyhW1JidpBDSN39ZBD0ctp5pbJFYQwxKRIRrs,5821
|
|
235
235
|
mlrun/model_monitoring/db/_stats.py,sha256=VVMWLMqG3Us3ozBkLaokJF22Ewv8WKmVE1-OvS_g9vA,6943
|
|
236
|
-
mlrun/model_monitoring/db/tsdb/__init__.py,sha256=
|
|
236
|
+
mlrun/model_monitoring/db/tsdb/__init__.py,sha256=YchAn6KfmQ9kiBU31vUpU1z1FbcDWRy6I2ngjcdIx48,4209
|
|
237
237
|
mlrun/model_monitoring/db/tsdb/base.py,sha256=JjLBzZXE4ZxtBmihVXjUYZ2HKmgqX03ZhUynXp4948o,25372
|
|
238
238
|
mlrun/model_monitoring/db/tsdb/helpers.py,sha256=0oUXc4aUkYtP2SGP6jTb3uPPKImIUsVsrb9otX9a7O4,1189
|
|
239
239
|
mlrun/model_monitoring/db/tsdb/tdengine/__init__.py,sha256=vgBdsKaXUURKqIf3M0y4sRatmSVA4CQiJs7J5dcVBkQ,620
|
|
240
240
|
mlrun/model_monitoring/db/tsdb/tdengine/schemas.py,sha256=qfKDUZhgteL0mp2A1aP1iMmcthgUMKmZqMUidZjQktQ,12649
|
|
241
241
|
mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py,sha256=Uadj0UvAmln2MxDWod-kAzau1uNlqZh981rPhbUH_5M,2857
|
|
242
|
-
mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py,sha256=
|
|
242
|
+
mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py,sha256=AEtynvpTlGMKIpNyO0e37zrkr_44W9ATouudoTnGhME,30199
|
|
243
243
|
mlrun/model_monitoring/db/tsdb/v3io/__init__.py,sha256=aL3bfmQsUQ-sbvKGdNihFj8gLCK3mSys0qDcXtYOwgc,616
|
|
244
244
|
mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py,sha256=_-zo9relCDtjGgievxAcAP9gVN9nDWs8BzGtFwTjb9M,6284
|
|
245
|
-
mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py,sha256=
|
|
245
|
+
mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py,sha256=oiro-fEmeVQe39hPmeNfi0DI4EKS59jwcr6Wx_eyuFI,37032
|
|
246
246
|
mlrun/model_monitoring/metrics/__init__.py,sha256=6CsTXAxeLbbf8yfCADTaxmiavqwrLEdYFJ-qc5kgDAY,569
|
|
247
247
|
mlrun/model_monitoring/metrics/histogram_distance.py,sha256=E9_WIl2vd6qNvoHVHoFcnuQk3ekbFWOdi8aU7sHrfk4,4724
|
|
248
248
|
mlrun/package/__init__.py,sha256=v7VDyK9kDOOuDvFo4oiGV2fx-vM1KL7fdN9pGLakhUQ,7008
|
|
@@ -267,7 +267,7 @@ mlrun/platforms/iguazio.py,sha256=6VBTq8eQ3mzT96tzjYhAtcMQ2VjF4x8LpIPW5DAcX2Q,13
|
|
|
267
267
|
mlrun/projects/__init__.py,sha256=0Krf0WIKfnZa71WthYOg0SoaTodGg3sV_hK3f_OlTPI,1220
|
|
268
268
|
mlrun/projects/operations.py,sha256=VXUlMrouFTls-I-bMhdN5pPfQ34TR7bFQ-NUSWNvl84,20029
|
|
269
269
|
mlrun/projects/pipelines.py,sha256=UwRwK2e8T0463quQ3d-ud_swmTLkBuSVUroY4YkgzZU,47903
|
|
270
|
-
mlrun/projects/project.py,sha256=
|
|
270
|
+
mlrun/projects/project.py,sha256=kzokksQivWCQTw-zUw9IVJFTGPp_XFjXACjMJjY6c4M,233027
|
|
271
271
|
mlrun/runtimes/__init__.py,sha256=J9Sy2HiyMlztNv6VUurMzF5H2XzttNil8nRsWDsqLyg,8923
|
|
272
272
|
mlrun/runtimes/base.py,sha256=Yt2l7srrXjK783cunBEKH0yQxQZRH8lkedXNOXuLbbo,37841
|
|
273
273
|
mlrun/runtimes/daskjob.py,sha256=JwuGvOiPsxEDHHMMUS4Oie4hLlYYIZwihAl6DjroTY0,19521
|
|
@@ -291,7 +291,7 @@ mlrun/runtimes/nuclio/__init__.py,sha256=gx1kizzKv8pGT5TNloN1js1hdbxqDw3rM90sLVY
|
|
|
291
291
|
mlrun/runtimes/nuclio/api_gateway.py,sha256=vH9ClKVP4Mb24rvA67xPuAvAhX-gAv6vVtjVxyplhdc,26969
|
|
292
292
|
mlrun/runtimes/nuclio/function.py,sha256=Bff8Veg-eaqNrQ7yn20HpRhwAO4OA7FTnzXnAyoaBPU,52365
|
|
293
293
|
mlrun/runtimes/nuclio/nuclio.py,sha256=sLK8KdGO1LbftlL3HqPZlFOFTAAuxJACZCVl1c0Ha6E,2942
|
|
294
|
-
mlrun/runtimes/nuclio/serving.py,sha256=
|
|
294
|
+
mlrun/runtimes/nuclio/serving.py,sha256=Cc8MHi8gdJwkwLhaqO1KWU-UY36m-9zKUBFVa8JSGio,31987
|
|
295
295
|
mlrun/runtimes/nuclio/application/__init__.py,sha256=rRs5vasy_G9IyoTpYIjYDafGoL6ifFBKgBtsXn31Atw,614
|
|
296
296
|
mlrun/runtimes/nuclio/application/application.py,sha256=HlEq4A6hbFqr3Ba3TL4m7nbmfMYI06Zb_NAKGjzkEFU,29242
|
|
297
297
|
mlrun/runtimes/nuclio/application/reverse_proxy.go,sha256=JIIYae6bXzCLf3jXuu49KWPQYoXr_FDQ2Rbo1OWKAd0,3150
|
|
@@ -301,9 +301,9 @@ mlrun/serving/__init__.py,sha256=FhOlOCnBC5HFXOHzSDe4NHBs6mNUDP_Qqy6WMNsCwws,130
|
|
|
301
301
|
mlrun/serving/merger.py,sha256=qtPJacx94Tsz_-8L3J_-aS2NEsTdechZkQzJmyHjmig,6195
|
|
302
302
|
mlrun/serving/remote.py,sha256=gxJkj_J3j-sZcVUbUzbAmJafP6t6y4NVFsu0kWmYngA,18818
|
|
303
303
|
mlrun/serving/routers.py,sha256=A_R34_N6uYw2veK58WpffEp1NsFwq0XbNU9is2Nd7s8,50901
|
|
304
|
-
mlrun/serving/server.py,sha256=
|
|
304
|
+
mlrun/serving/server.py,sha256=dh8WQ0yEAhDvun1VA_DI5HBfywsACCrxBKn06bIjm1c,22843
|
|
305
305
|
mlrun/serving/serving_wrapper.py,sha256=R670-S6PX_d5ER6jiHtRvacuPyFzQH0mEf2K0sBIIOM,836
|
|
306
|
-
mlrun/serving/states.py,sha256=
|
|
306
|
+
mlrun/serving/states.py,sha256=SD1xNqscHJO6aKEcZ3YCMnTlMDz3ipTSok0Qy2-vQTg,68583
|
|
307
307
|
mlrun/serving/utils.py,sha256=k2EIYDWHUGkE-IBI6T0UNT32fw-KySsccIJM_LObI00,4171
|
|
308
308
|
mlrun/serving/v1_serving.py,sha256=c6J_MtpE-Tqu00-6r4eJOCO6rUasHDal9W2eBIcrl50,11853
|
|
309
309
|
mlrun/serving/v2_serving.py,sha256=Nm-mPa40JlhpAFH5JuaS4Kc38g_o70cBPGgrqo7zDRM,22525
|
|
@@ -337,11 +337,11 @@ mlrun/utils/notifications/notification/mail.py,sha256=ZyJ3eqd8simxffQmXzqd3bgbAq
|
|
|
337
337
|
mlrun/utils/notifications/notification/slack.py,sha256=NKV4RFiY3gLsS8uPppgniPLyag8zJ9O1VhixoXkM7kw,7108
|
|
338
338
|
mlrun/utils/notifications/notification/webhook.py,sha256=NeyIMSBojjjTJaUHmPbxMByp34GxYkl1-16NqzU27fU,4943
|
|
339
339
|
mlrun/utils/version/__init__.py,sha256=7kkrB7hEZ3cLXoWj1kPoDwo4MaswsI2JVOBpbKgPAgc,614
|
|
340
|
-
mlrun/utils/version/version.json,sha256=
|
|
340
|
+
mlrun/utils/version/version.json,sha256=p36V4K-7lSFr7xUGQYP2Da6JHpQeMTJ8w9tYYILY6Ck,89
|
|
341
341
|
mlrun/utils/version/version.py,sha256=eEW0tqIAkU9Xifxv8Z9_qsYnNhn3YH7NRAfM-pPLt1g,1878
|
|
342
|
-
mlrun-1.8.
|
|
343
|
-
mlrun-1.8.
|
|
344
|
-
mlrun-1.8.
|
|
345
|
-
mlrun-1.8.
|
|
346
|
-
mlrun-1.8.
|
|
347
|
-
mlrun-1.8.
|
|
342
|
+
mlrun-1.8.0rc22.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
343
|
+
mlrun-1.8.0rc22.dist-info/METADATA,sha256=b0ToqY9cT4V3MLmbElKErQ6TUgtBGOsLHZZCCPsAH5g,24885
|
|
344
|
+
mlrun-1.8.0rc22.dist-info/WHEEL,sha256=A3WOREP4zgxI0fKrHUG8DC8013e3dK3n7a6HDbcEIwE,91
|
|
345
|
+
mlrun-1.8.0rc22.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
|
|
346
|
+
mlrun-1.8.0rc22.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
|
|
347
|
+
mlrun-1.8.0rc22.dist-info/RECORD,,
|