mlrun 1.7.0rc46__py3-none-any.whl → 1.7.0rc47__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mlrun might be problematic. Click here for more details.
- mlrun/common/schemas/model_monitoring/__init__.py +1 -1
- mlrun/common/schemas/model_monitoring/constants.py +23 -2
- mlrun/common/schemas/model_monitoring/model_endpoints.py +24 -47
- mlrun/datastore/storeytargets.py +7 -4
- mlrun/model.py +12 -0
- mlrun/model_monitoring/db/stores/base/store.py +1 -0
- mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +1 -1
- mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +2 -2
- mlrun/model_monitoring/helpers.py +6 -7
- mlrun/utils/version/version.json +2 -2
- {mlrun-1.7.0rc46.dist-info → mlrun-1.7.0rc47.dist-info}/METADATA +3 -3
- {mlrun-1.7.0rc46.dist-info → mlrun-1.7.0rc47.dist-info}/RECORD +16 -16
- {mlrun-1.7.0rc46.dist-info → mlrun-1.7.0rc47.dist-info}/LICENSE +0 -0
- {mlrun-1.7.0rc46.dist-info → mlrun-1.7.0rc47.dist-info}/WHEEL +0 -0
- {mlrun-1.7.0rc46.dist-info → mlrun-1.7.0rc47.dist-info}/entry_points.txt +0 -0
- {mlrun-1.7.0rc46.dist-info → mlrun-1.7.0rc47.dist-info}/top_level.txt +0 -0
|
@@ -25,6 +25,7 @@ from .constants import (
|
|
|
25
25
|
FileTargetKind,
|
|
26
26
|
FunctionURI,
|
|
27
27
|
MetricData,
|
|
28
|
+
ModelEndpointMonitoringMetricType,
|
|
28
29
|
ModelEndpointTarget,
|
|
29
30
|
ModelEndpointTargetSchemas,
|
|
30
31
|
ModelMonitoringMode,
|
|
@@ -61,7 +62,6 @@ from .model_endpoints import (
|
|
|
61
62
|
ModelEndpointMetadata,
|
|
62
63
|
ModelEndpointMonitoringMetric,
|
|
63
64
|
ModelEndpointMonitoringMetricNoData,
|
|
64
|
-
ModelEndpointMonitoringMetricType,
|
|
65
65
|
ModelEndpointMonitoringMetricValues,
|
|
66
66
|
ModelEndpointMonitoringResultValues,
|
|
67
67
|
ModelEndpointSpec,
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
import hashlib
|
|
16
|
-
|
|
16
|
+
import re
|
|
17
|
+
from dataclasses import dataclass, field
|
|
17
18
|
from enum import Enum, IntEnum
|
|
18
19
|
from typing import Optional
|
|
19
20
|
|
|
@@ -295,7 +296,7 @@ class EndpointUID:
|
|
|
295
296
|
function_hash_key: str
|
|
296
297
|
model: str
|
|
297
298
|
model_version: str
|
|
298
|
-
uid:
|
|
299
|
+
uid: str = field(init=False)
|
|
299
300
|
|
|
300
301
|
def __post_init__(self):
|
|
301
302
|
function_ref = (
|
|
@@ -372,3 +373,23 @@ _RESERVED_FUNCTION_NAMES = MonitoringFunctionNames.list() + [SpecialApps.MLRUN_I
|
|
|
372
373
|
|
|
373
374
|
|
|
374
375
|
V3IO_MODEL_MONITORING_DB = "v3io"
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
class ModelEndpointMonitoringMetricType(StrEnum):
|
|
379
|
+
RESULT = "result"
|
|
380
|
+
METRIC = "metric"
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
_FQN_PART_PATTERN = r"[a-zA-Z0-9_-]+"
|
|
384
|
+
FQN_PATTERN = (
|
|
385
|
+
rf"^(?P<project>{_FQN_PART_PATTERN})\."
|
|
386
|
+
rf"(?P<app>{_FQN_PART_PATTERN})\."
|
|
387
|
+
rf"(?P<type>{ModelEndpointMonitoringMetricType.RESULT}|{ModelEndpointMonitoringMetricType.METRIC})\."
|
|
388
|
+
rf"(?P<name>{_FQN_PART_PATTERN})$"
|
|
389
|
+
)
|
|
390
|
+
FQN_REGEX = re.compile(FQN_PATTERN)
|
|
391
|
+
|
|
392
|
+
# refer to `mlrun.utils.regex.project_name`
|
|
393
|
+
PROJECT_PATTERN = r"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$"
|
|
394
|
+
|
|
395
|
+
MODEL_ENDPOINT_ID_PATTERN = r"^[a-zA-Z0-9_-]+$"
|
|
@@ -14,26 +14,32 @@
|
|
|
14
14
|
|
|
15
15
|
import enum
|
|
16
16
|
import json
|
|
17
|
-
import re
|
|
18
17
|
from datetime import datetime
|
|
19
|
-
from typing import Any, NamedTuple, Optional
|
|
18
|
+
from typing import Any, NamedTuple, Optional, TypeVar
|
|
20
19
|
|
|
21
|
-
from pydantic import BaseModel, Field, validator
|
|
22
|
-
from pydantic.main import Extra
|
|
20
|
+
from pydantic import BaseModel, Extra, Field, constr, validator
|
|
23
21
|
|
|
24
|
-
import mlrun.
|
|
22
|
+
# TODO: remove the unused import below after `mlrun.datastore` and `mlrun.utils` usage is removed.
|
|
23
|
+
# At the moment `make lint` fails if this is removed.
|
|
24
|
+
import mlrun.common.model_monitoring
|
|
25
25
|
|
|
26
26
|
from ..object import ObjectKind, ObjectSpec, ObjectStatus
|
|
27
27
|
from .constants import (
|
|
28
|
+
FQN_REGEX,
|
|
29
|
+
MODEL_ENDPOINT_ID_PATTERN,
|
|
30
|
+
PROJECT_PATTERN,
|
|
28
31
|
EndpointType,
|
|
29
32
|
EventFieldType,
|
|
30
33
|
EventKeyMetrics,
|
|
31
34
|
EventLiveStats,
|
|
35
|
+
ModelEndpointMonitoringMetricType,
|
|
32
36
|
ModelMonitoringMode,
|
|
33
37
|
ResultKindApp,
|
|
34
38
|
ResultStatusApp,
|
|
35
39
|
)
|
|
36
40
|
|
|
41
|
+
Model = TypeVar("Model", bound=BaseModel)
|
|
42
|
+
|
|
37
43
|
|
|
38
44
|
class ModelMonitoringStoreKinds:
|
|
39
45
|
# TODO: do changes in examples & demos In 1.5.0 remove
|
|
@@ -42,9 +48,9 @@ class ModelMonitoringStoreKinds:
|
|
|
42
48
|
|
|
43
49
|
|
|
44
50
|
class ModelEndpointMetadata(BaseModel):
|
|
45
|
-
project:
|
|
51
|
+
project: constr(regex=PROJECT_PATTERN)
|
|
52
|
+
uid: constr(regex=MODEL_ENDPOINT_ID_PATTERN)
|
|
46
53
|
labels: Optional[dict] = {}
|
|
47
|
-
uid: Optional[str] = ""
|
|
48
54
|
|
|
49
55
|
class Config:
|
|
50
56
|
extra = Extra.allow
|
|
@@ -57,12 +63,11 @@ class ModelEndpointMetadata(BaseModel):
|
|
|
57
63
|
:param json_parse_values: List of dictionary keys with a JSON string value that will be parsed into a
|
|
58
64
|
dictionary using json.loads().
|
|
59
65
|
"""
|
|
60
|
-
new_object = cls()
|
|
61
66
|
if json_parse_values is None:
|
|
62
67
|
json_parse_values = [EventFieldType.LABELS]
|
|
63
68
|
|
|
64
69
|
return _mapping_attributes(
|
|
65
|
-
|
|
70
|
+
model_class=cls,
|
|
66
71
|
flattened_dictionary=endpoint_dict,
|
|
67
72
|
json_parse_values=json_parse_values,
|
|
68
73
|
)
|
|
@@ -89,7 +94,6 @@ class ModelEndpointSpec(ObjectSpec):
|
|
|
89
94
|
:param json_parse_values: List of dictionary keys with a JSON string value that will be parsed into a
|
|
90
95
|
dictionary using json.loads().
|
|
91
96
|
"""
|
|
92
|
-
new_object = cls()
|
|
93
97
|
if json_parse_values is None:
|
|
94
98
|
json_parse_values = [
|
|
95
99
|
EventFieldType.FEATURE_NAMES,
|
|
@@ -97,7 +101,7 @@ class ModelEndpointSpec(ObjectSpec):
|
|
|
97
101
|
EventFieldType.MONITOR_CONFIGURATION,
|
|
98
102
|
]
|
|
99
103
|
return _mapping_attributes(
|
|
100
|
-
|
|
104
|
+
model_class=cls,
|
|
101
105
|
flattened_dictionary=endpoint_dict,
|
|
102
106
|
json_parse_values=json_parse_values,
|
|
103
107
|
)
|
|
@@ -191,7 +195,6 @@ class ModelEndpointStatus(ObjectStatus):
|
|
|
191
195
|
:param json_parse_values: List of dictionary keys with a JSON string value that will be parsed into a
|
|
192
196
|
dictionary using json.loads().
|
|
193
197
|
"""
|
|
194
|
-
new_object = cls()
|
|
195
198
|
if json_parse_values is None:
|
|
196
199
|
json_parse_values = [
|
|
197
200
|
EventFieldType.FEATURE_STATS,
|
|
@@ -203,7 +206,7 @@ class ModelEndpointStatus(ObjectStatus):
|
|
|
203
206
|
EventFieldType.ENDPOINT_TYPE,
|
|
204
207
|
]
|
|
205
208
|
return _mapping_attributes(
|
|
206
|
-
|
|
209
|
+
model_class=cls,
|
|
207
210
|
flattened_dictionary=endpoint_dict,
|
|
208
211
|
json_parse_values=json_parse_values,
|
|
209
212
|
)
|
|
@@ -211,22 +214,13 @@ class ModelEndpointStatus(ObjectStatus):
|
|
|
211
214
|
|
|
212
215
|
class ModelEndpoint(BaseModel):
|
|
213
216
|
kind: ObjectKind = Field(ObjectKind.model_endpoint, const=True)
|
|
214
|
-
metadata: ModelEndpointMetadata
|
|
217
|
+
metadata: ModelEndpointMetadata
|
|
215
218
|
spec: ModelEndpointSpec = ModelEndpointSpec()
|
|
216
219
|
status: ModelEndpointStatus = ModelEndpointStatus()
|
|
217
220
|
|
|
218
221
|
class Config:
|
|
219
222
|
extra = Extra.allow
|
|
220
223
|
|
|
221
|
-
def __init__(self, **data: Any):
|
|
222
|
-
super().__init__(**data)
|
|
223
|
-
if self.metadata.uid is None:
|
|
224
|
-
uid = mlrun.common.model_monitoring.create_model_endpoint_uid(
|
|
225
|
-
function_uri=self.spec.function_uri,
|
|
226
|
-
versioned_model=self.spec.model,
|
|
227
|
-
)
|
|
228
|
-
self.metadata.uid = str(uid)
|
|
229
|
-
|
|
230
224
|
def flat_dict(self):
|
|
231
225
|
"""Generate a flattened `ModelEndpoint` dictionary. The flattened dictionary result is important for storing
|
|
232
226
|
the model endpoint object in the database.
|
|
@@ -267,7 +261,7 @@ class ModelEndpoint(BaseModel):
|
|
|
267
261
|
return flatten_dict
|
|
268
262
|
|
|
269
263
|
@classmethod
|
|
270
|
-
def from_flat_dict(cls, endpoint_dict: dict):
|
|
264
|
+
def from_flat_dict(cls, endpoint_dict: dict) -> "ModelEndpoint":
|
|
271
265
|
"""Create a `ModelEndpoint` object from an endpoint flattened dictionary. Because the provided dictionary
|
|
272
266
|
is flattened, we pass it as is to the subclasses without splitting the keys into spec, metadata, and status.
|
|
273
267
|
|
|
@@ -285,11 +279,6 @@ class ModelEndpointList(BaseModel):
|
|
|
285
279
|
endpoints: list[ModelEndpoint] = []
|
|
286
280
|
|
|
287
281
|
|
|
288
|
-
class ModelEndpointMonitoringMetricType(mlrun.common.types.StrEnum):
|
|
289
|
-
RESULT = "result"
|
|
290
|
-
METRIC = "metric"
|
|
291
|
-
|
|
292
|
-
|
|
293
282
|
class ModelEndpointMonitoringMetric(BaseModel):
|
|
294
283
|
project: str
|
|
295
284
|
app: str
|
|
@@ -308,18 +297,8 @@ def _compose_full_name(
|
|
|
308
297
|
return ".".join([project, app, type, name])
|
|
309
298
|
|
|
310
299
|
|
|
311
|
-
_FQN_PART_PATTERN = r"[a-zA-Z0-9_-]+"
|
|
312
|
-
_FQN_PATTERN = (
|
|
313
|
-
rf"^(?P<project>{_FQN_PART_PATTERN})\."
|
|
314
|
-
rf"(?P<app>{_FQN_PART_PATTERN})\."
|
|
315
|
-
rf"(?P<type>{ModelEndpointMonitoringMetricType.RESULT}|{ModelEndpointMonitoringMetricType.METRIC})\."
|
|
316
|
-
rf"(?P<name>{_FQN_PART_PATTERN})$"
|
|
317
|
-
)
|
|
318
|
-
_FQN_REGEX = re.compile(_FQN_PATTERN)
|
|
319
|
-
|
|
320
|
-
|
|
321
300
|
def _parse_metric_fqn_to_monitoring_metric(fqn: str) -> ModelEndpointMonitoringMetric:
|
|
322
|
-
match =
|
|
301
|
+
match = FQN_REGEX.fullmatch(fqn)
|
|
323
302
|
if match is None:
|
|
324
303
|
raise ValueError("The fully qualified name is not in the expected format")
|
|
325
304
|
return ModelEndpointMonitoringMetric.parse_obj(
|
|
@@ -364,20 +343,18 @@ class ModelEndpointMonitoringMetricNoData(_ModelEndpointMonitoringMetricValuesBa
|
|
|
364
343
|
|
|
365
344
|
|
|
366
345
|
def _mapping_attributes(
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
json_parse_values: list = None,
|
|
370
|
-
):
|
|
346
|
+
model_class: type[Model], flattened_dictionary: dict, json_parse_values: list
|
|
347
|
+
) -> Model:
|
|
371
348
|
"""Generate a `BaseModel` object with the provided dictionary attributes.
|
|
372
349
|
|
|
373
|
-
:param
|
|
350
|
+
:param model_class: `BaseModel` class (e.g. `ModelEndpointMetadata`).
|
|
374
351
|
:param flattened_dictionary: Flattened dictionary that contains the model endpoint attributes.
|
|
375
352
|
:param json_parse_values: List of dictionary keys with a JSON string value that will be parsed into a
|
|
376
353
|
dictionary using json.loads().
|
|
377
354
|
"""
|
|
378
355
|
# Get the fields of the provided base model object. These fields will be used to filter to relevent keys
|
|
379
356
|
# from the flattened dictionary.
|
|
380
|
-
wanted_keys =
|
|
357
|
+
wanted_keys = model_class.__fields__.keys()
|
|
381
358
|
|
|
382
359
|
# Generate a filtered flattened dictionary that will be parsed into the BaseModel object
|
|
383
360
|
dict_to_parse = {}
|
|
@@ -391,7 +368,7 @@ def _mapping_attributes(
|
|
|
391
368
|
else:
|
|
392
369
|
dict_to_parse[field_key] = flattened_dictionary[field_key]
|
|
393
370
|
|
|
394
|
-
return
|
|
371
|
+
return model_class.parse_obj(dict_to_parse)
|
|
395
372
|
|
|
396
373
|
|
|
397
374
|
def _json_loads_if_not_none(field: Any) -> Any:
|
mlrun/datastore/storeytargets.py
CHANGED
|
@@ -19,6 +19,7 @@ import mlrun
|
|
|
19
19
|
import mlrun.model_monitoring.helpers
|
|
20
20
|
from mlrun.datastore.base import DataStore
|
|
21
21
|
|
|
22
|
+
from ..platforms.iguazio import parse_path
|
|
22
23
|
from .utils import (
|
|
23
24
|
parse_kafka_url,
|
|
24
25
|
)
|
|
@@ -82,12 +83,14 @@ class StreamStoreyTarget(storey.StreamTarget):
|
|
|
82
83
|
def __init__(self, *args, **kwargs):
|
|
83
84
|
args = list(args)
|
|
84
85
|
|
|
85
|
-
|
|
86
|
-
endpoint, storage_options = get_url_and_storage_options(path)
|
|
86
|
+
uri = args[0] if args else kwargs.get("stream_path")
|
|
87
87
|
|
|
88
|
-
if not
|
|
88
|
+
if not uri:
|
|
89
89
|
raise mlrun.errors.MLRunInvalidArgumentError("StreamTarget requires a path")
|
|
90
90
|
|
|
91
|
+
_, storage_options = get_url_and_storage_options(uri)
|
|
92
|
+
endpoint, path = parse_path(uri)
|
|
93
|
+
|
|
91
94
|
access_key = storage_options.get("v3io_access_key")
|
|
92
95
|
storage = V3ioDriver(
|
|
93
96
|
webapi=endpoint or mlrun.mlconf.v3io_api, access_key=access_key
|
|
@@ -98,7 +101,7 @@ class StreamStoreyTarget(storey.StreamTarget):
|
|
|
98
101
|
if args:
|
|
99
102
|
args[0] = endpoint
|
|
100
103
|
if "stream_path" in kwargs:
|
|
101
|
-
kwargs["stream_path"] =
|
|
104
|
+
kwargs["stream_path"] = path
|
|
102
105
|
|
|
103
106
|
super().__init__(*args, **kwargs)
|
|
104
107
|
|
mlrun/model.py
CHANGED
|
@@ -2044,6 +2044,8 @@ class DataSource(ModelObj):
|
|
|
2044
2044
|
]
|
|
2045
2045
|
kind = None
|
|
2046
2046
|
|
|
2047
|
+
_fields_to_serialize = ["start_time", "end_time"]
|
|
2048
|
+
|
|
2047
2049
|
def __init__(
|
|
2048
2050
|
self,
|
|
2049
2051
|
name: str = None,
|
|
@@ -2072,6 +2074,16 @@ class DataSource(ModelObj):
|
|
|
2072
2074
|
def set_secrets(self, secrets):
|
|
2073
2075
|
self._secrets = secrets
|
|
2074
2076
|
|
|
2077
|
+
def _serialize_field(
|
|
2078
|
+
self, struct: dict, field_name: str = None, strip: bool = False
|
|
2079
|
+
) -> typing.Any:
|
|
2080
|
+
value = super()._serialize_field(struct, field_name, strip)
|
|
2081
|
+
# We pull the field from self and not from struct because it was excluded from the struct when looping over
|
|
2082
|
+
# the fields to save.
|
|
2083
|
+
if field_name in ("start_time", "end_time") and isinstance(value, datetime):
|
|
2084
|
+
return value.isoformat()
|
|
2085
|
+
return value
|
|
2086
|
+
|
|
2075
2087
|
|
|
2076
2088
|
class DataTargetBase(ModelObj):
|
|
2077
2089
|
"""data target spec, specify a destination for the feature set data"""
|
|
@@ -211,7 +211,7 @@ class TDEngineSchema:
|
|
|
211
211
|
if filter_query:
|
|
212
212
|
query.write(f"{filter_query} AND ")
|
|
213
213
|
if start:
|
|
214
|
-
query.write(f"{timestamp_column} >= '{start}'
|
|
214
|
+
query.write(f"{timestamp_column} >= '{start}' AND ")
|
|
215
215
|
if end:
|
|
216
216
|
query.write(f"{timestamp_column} <= '{end}'")
|
|
217
217
|
if interval:
|
|
@@ -262,7 +262,7 @@ class TDEngineConnector(TSDBConnector):
|
|
|
262
262
|
|
|
263
263
|
project_condition = f"project = '{self.project}'"
|
|
264
264
|
filter_query = (
|
|
265
|
-
f"{filter_query} AND {project_condition}"
|
|
265
|
+
f"({filter_query}) AND ({project_condition})"
|
|
266
266
|
if filter_query
|
|
267
267
|
else project_condition
|
|
268
268
|
)
|
|
@@ -341,7 +341,7 @@ class TDEngineConnector(TSDBConnector):
|
|
|
341
341
|
for metric in metrics
|
|
342
342
|
]
|
|
343
343
|
)
|
|
344
|
-
filter_query = f"endpoint_id='{endpoint_id}' AND ({metrics_condition})"
|
|
344
|
+
filter_query = f"(endpoint_id='{endpoint_id}') AND ({metrics_condition})"
|
|
345
345
|
|
|
346
346
|
df = self._get_records(
|
|
347
347
|
table=table,
|
|
@@ -18,6 +18,10 @@ import typing
|
|
|
18
18
|
import numpy as np
|
|
19
19
|
import pandas as pd
|
|
20
20
|
|
|
21
|
+
if typing.TYPE_CHECKING:
|
|
22
|
+
from mlrun.db.base import RunDBInterface
|
|
23
|
+
from mlrun.projects import MlrunProject
|
|
24
|
+
|
|
21
25
|
import mlrun
|
|
22
26
|
import mlrun.artifacts
|
|
23
27
|
import mlrun.common.model_monitoring.helpers
|
|
@@ -26,16 +30,11 @@ import mlrun.data_types.infer
|
|
|
26
30
|
import mlrun.model_monitoring
|
|
27
31
|
from mlrun.common.schemas.model_monitoring.model_endpoints import (
|
|
28
32
|
ModelEndpointMonitoringMetric,
|
|
29
|
-
ModelEndpointMonitoringMetricType,
|
|
30
33
|
_compose_full_name,
|
|
31
34
|
)
|
|
32
35
|
from mlrun.model_monitoring.model_endpoint import ModelEndpoint
|
|
33
36
|
from mlrun.utils import logger
|
|
34
37
|
|
|
35
|
-
if typing.TYPE_CHECKING:
|
|
36
|
-
from mlrun.db.base import RunDBInterface
|
|
37
|
-
from mlrun.projects import MlrunProject
|
|
38
|
-
|
|
39
38
|
|
|
40
39
|
class _BatchDict(typing.TypedDict):
|
|
41
40
|
minutes: int
|
|
@@ -301,7 +300,7 @@ def get_invocations_fqn(project: str) -> str:
|
|
|
301
300
|
project=project,
|
|
302
301
|
app=mm_constants.SpecialApps.MLRUN_INFRA,
|
|
303
302
|
name=mm_constants.PredictionsQueryConstants.INVOCATIONS,
|
|
304
|
-
type=ModelEndpointMonitoringMetricType.METRIC,
|
|
303
|
+
type=mm_constants.ModelEndpointMonitoringMetricType.METRIC,
|
|
305
304
|
)
|
|
306
305
|
|
|
307
306
|
|
|
@@ -315,7 +314,7 @@ def get_invocations_metric(project: str) -> ModelEndpointMonitoringMetric:
|
|
|
315
314
|
return ModelEndpointMonitoringMetric(
|
|
316
315
|
project=project,
|
|
317
316
|
app=mm_constants.SpecialApps.MLRUN_INFRA,
|
|
318
|
-
type=ModelEndpointMonitoringMetricType.METRIC,
|
|
317
|
+
type=mm_constants.ModelEndpointMonitoringMetricType.METRIC,
|
|
319
318
|
name=mm_constants.PredictionsQueryConstants.INVOCATIONS,
|
|
320
319
|
full_name=get_invocations_fqn(project),
|
|
321
320
|
)
|
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.0rc47
|
|
4
4
|
Summary: Tracking and config of machine learning runs
|
|
5
5
|
Home-page: https://github.com/mlrun/mlrun
|
|
6
6
|
Author: Yaron Haviv
|
|
@@ -31,7 +31,7 @@ Requires-Dist: ipython ~=8.10
|
|
|
31
31
|
Requires-Dist: nuclio-jupyter ~=0.10.4
|
|
32
32
|
Requires-Dist: numpy <1.27.0,>=1.16.5
|
|
33
33
|
Requires-Dist: pandas <2.2,>=1.2
|
|
34
|
-
Requires-Dist: pyarrow <
|
|
34
|
+
Requires-Dist: pyarrow <18,>=10.0
|
|
35
35
|
Requires-Dist: pyyaml <7,>=5.4.1
|
|
36
36
|
Requires-Dist: requests ~=2.32
|
|
37
37
|
Requires-Dist: tabulate ~=0.8.6
|
|
@@ -43,7 +43,7 @@ Requires-Dist: semver ~=3.0
|
|
|
43
43
|
Requires-Dist: dependency-injector ~=4.41
|
|
44
44
|
Requires-Dist: fsspec <2024.7,>=2023.9.2
|
|
45
45
|
Requires-Dist: v3iofs ~=0.1.17
|
|
46
|
-
Requires-Dist: storey ~=1.7.
|
|
46
|
+
Requires-Dist: storey ~=1.7.27
|
|
47
47
|
Requires-Dist: inflection ~=0.5.0
|
|
48
48
|
Requires-Dist: python-dotenv ~=0.17.0
|
|
49
49
|
Requires-Dist: setuptools ~=71.0
|
|
@@ -6,7 +6,7 @@ mlrun/execution.py,sha256=EGsEeSqOFnSxYFL4_YVKv8DEx2YsmJ9aA1gXBAV5W5A,42563
|
|
|
6
6
|
mlrun/features.py,sha256=m17K_3l9Jktwb9dOwlHLTAPTlemsWrRF7dJhXUX0iJU,15429
|
|
7
7
|
mlrun/k8s_utils.py,sha256=mRQMs6NzPq36vx1n5_2BfFapXysc8wv3NcrZ77_2ANA,8949
|
|
8
8
|
mlrun/lists.py,sha256=3PqBdcajdwhTe1XuFsAaHTuFVM2kjwepf31qqE82apg,8384
|
|
9
|
-
mlrun/model.py,sha256=
|
|
9
|
+
mlrun/model.py,sha256=pWE8L9SIaNu3pAgoqVTea5i-MRXcWqorOWvL0AiwM5E,81226
|
|
10
10
|
mlrun/render.py,sha256=940H9fBBFeghH4dlifbURvtjlvw4GlWdAXezN6ky4rI,13275
|
|
11
11
|
mlrun/run.py,sha256=hNxV-TnixbH8MCos2jqz8jdTDlK7dBSvJMil_QoGKQI,43616
|
|
12
12
|
mlrun/secrets.py,sha256=ibtCK79u7JVBZF6F0SP1-xXXF5MyrLEUs_TCWiJAnlc,7798
|
|
@@ -68,10 +68,10 @@ mlrun/common/schemas/schedule.py,sha256=nD9kxH2KjXkbGZPNfzVNlNSxbyFZmZUlwtT04_z2
|
|
|
68
68
|
mlrun/common/schemas/secret.py,sha256=51tCN1F8DFTq4y_XdHIMDy3I1TnMEBX8kO8BHKavYF4,1484
|
|
69
69
|
mlrun/common/schemas/tag.py,sha256=OAn9Qt6z8ibqw8uU8WQSvuwY8irUv45Dhx2Ko5FzUss,884
|
|
70
70
|
mlrun/common/schemas/workflow.py,sha256=WxmlwtwrzwL4lfHYjQTOp03uv6PWYMpZ4cNBMOA6N6E,1897
|
|
71
|
-
mlrun/common/schemas/model_monitoring/__init__.py,sha256=
|
|
72
|
-
mlrun/common/schemas/model_monitoring/constants.py,sha256=
|
|
71
|
+
mlrun/common/schemas/model_monitoring/__init__.py,sha256=q2icasMdgI7OG-p5eVwCu6sBuPrBMpRxByC6rxYk0DM,1813
|
|
72
|
+
mlrun/common/schemas/model_monitoring/constants.py,sha256=KD6gaw24EAKFow5LPl0JkMlSXHUMca3DS-S41sWAre8,10158
|
|
73
73
|
mlrun/common/schemas/model_monitoring/grafana.py,sha256=SG13MFUUz_tk6-mWeSx17qcdEW4ekicxqNtnMSwRTCY,1559
|
|
74
|
-
mlrun/common/schemas/model_monitoring/model_endpoints.py,sha256=
|
|
74
|
+
mlrun/common/schemas/model_monitoring/model_endpoints.py,sha256=5vvjNX1bV98VSGdT4jwHr5ArKC9v_c1iHlaTf82fSUY,13198
|
|
75
75
|
mlrun/data_types/__init__.py,sha256=EkxfkFoHb91zz3Aymq-KZfCHlPMzEc3bBqgzPUwmHWY,1087
|
|
76
76
|
mlrun/data_types/data_types.py,sha256=3dmmIxJ2_uKzf-dbbgOwbYJx8cvUYrPiQan40vcSqJo,4948
|
|
77
77
|
mlrun/data_types/infer.py,sha256=z2EbSpR6xWEE5-HRUtDZkapHQld3xMbzXtTX83K-690,6134
|
|
@@ -95,7 +95,7 @@ mlrun/datastore/sources.py,sha256=op90ksx95wqaBtoiORpHnqEgw4iGEDPsJ3_lI8ftS-E,48
|
|
|
95
95
|
mlrun/datastore/spark_udf.py,sha256=NnnB3DZxZb-rqpRy7b-NC7QWXuuqFn3XkBDc86tU4mQ,1498
|
|
96
96
|
mlrun/datastore/spark_utils.py,sha256=_AsVoU5Ix_-W7Gyq8io8V-2GTk0m8THJNDP3WGGaWJY,2865
|
|
97
97
|
mlrun/datastore/store_resources.py,sha256=rcLoG506AMmR8qPJU_gE-G5d34VJVV_vNlZ3VHqho6c,6869
|
|
98
|
-
mlrun/datastore/storeytargets.py,sha256=
|
|
98
|
+
mlrun/datastore/storeytargets.py,sha256=uNYG4nCBD3JIfa51CG4cDe9ryc9oIcqUdUXKvCPB6uE,5086
|
|
99
99
|
mlrun/datastore/targets.py,sha256=TkG2HG4h7SaQ3qG2sKAHAuJJyj_gnE-eChaIsyjlq1o,80450
|
|
100
100
|
mlrun/datastore/utils.py,sha256=l9dLZb_VCbHs_htqMFRv4qiestZ8z8K-4eY1MxHS8wE,7720
|
|
101
101
|
mlrun/datastore/v3io.py,sha256=HxP6mygiYM6leDAbQ9KdTxObLCt9yGMro0YhfdU6KUo,8157
|
|
@@ -217,7 +217,7 @@ mlrun/model_monitoring/application.py,sha256=RJ8HeAPfGO3P2A_dEZYNg60c1wKTADh2YSv
|
|
|
217
217
|
mlrun/model_monitoring/controller.py,sha256=ZKp3mWMhj6irCuREs-OH1MYYh5DzqNEDe04kVPVrZzw,27971
|
|
218
218
|
mlrun/model_monitoring/evidently_application.py,sha256=iOc42IVjj8m6PDBmVcKIMWm46Bu0EdO9SDcH40Eqhyo,769
|
|
219
219
|
mlrun/model_monitoring/features_drift_table.py,sha256=c6GpKtpOJbuT1u5uMWDL_S-6N4YPOmlktWMqPme3KFY,25308
|
|
220
|
-
mlrun/model_monitoring/helpers.py,sha256=
|
|
220
|
+
mlrun/model_monitoring/helpers.py,sha256=KsbSH0kEjCPajvLUpv3q5GWyvx0bZj-JkghGJlzbLZI,12757
|
|
221
221
|
mlrun/model_monitoring/model_endpoint.py,sha256=7VX0cBATqLsA4sSinDzouf41ndxqh2mf5bO9BW0G5Z4,4017
|
|
222
222
|
mlrun/model_monitoring/stream_processing.py,sha256=0eu1Gq1Obq87LFno6eIZ55poXoFaeloqYTLiQgyfd0k,38687
|
|
223
223
|
mlrun/model_monitoring/tracking_policy.py,sha256=sQq956akAQpntkrJwIgFWcEq-JpyVcg0FxgNa4h3V70,5502
|
|
@@ -232,7 +232,7 @@ mlrun/model_monitoring/applications/results.py,sha256=B0YuLig4rgBzBs3OAh01yLavht
|
|
|
232
232
|
mlrun/model_monitoring/db/__init__.py,sha256=6Ic-X3Fh9XLPYMytmevGNSs-Hii1rAjLLoFTSPwTguw,736
|
|
233
233
|
mlrun/model_monitoring/db/stores/__init__.py,sha256=m6Z6rPQyaufq5oXF3HVUYGDN34biAX1JE1F6OxLN9B8,4752
|
|
234
234
|
mlrun/model_monitoring/db/stores/base/__init__.py,sha256=JufJETW3BXzPhFwbRa8dMf7BFGGZKceIWIMgr5x9n9c,599
|
|
235
|
-
mlrun/model_monitoring/db/stores/base/store.py,sha256=
|
|
235
|
+
mlrun/model_monitoring/db/stores/base/store.py,sha256=KDNiAil7wF7zTEp3KytyJeMGGT4oblt4-q1CvJlhB1k,7518
|
|
236
236
|
mlrun/model_monitoring/db/stores/sqldb/__init__.py,sha256=6CsTXAxeLbbf8yfCADTaxmiavqwrLEdYFJ-qc5kgDAY,569
|
|
237
237
|
mlrun/model_monitoring/db/stores/sqldb/sql_store.py,sha256=9YjYqLue1GV1K4G2VRLVFObySEaIDnGqivvvXDM29to,26154
|
|
238
238
|
mlrun/model_monitoring/db/stores/sqldb/models/__init__.py,sha256=lCiGw9WKPtHAIgrtNS2jyvM5OZvZvogBh76iurNYblg,2453
|
|
@@ -245,9 +245,9 @@ mlrun/model_monitoring/db/tsdb/__init__.py,sha256=Zqh_27I2YAEHk9nl0Z6lUxP7VEfrgr
|
|
|
245
245
|
mlrun/model_monitoring/db/tsdb/base.py,sha256=X89X763sDrShfRXE1N-p8k97E8NBs7O1QJFiO-CffLM,18583
|
|
246
246
|
mlrun/model_monitoring/db/tsdb/helpers.py,sha256=0oUXc4aUkYtP2SGP6jTb3uPPKImIUsVsrb9otX9a7O4,1189
|
|
247
247
|
mlrun/model_monitoring/db/tsdb/tdengine/__init__.py,sha256=vgBdsKaXUURKqIf3M0y4sRatmSVA4CQiJs7J5dcVBkQ,620
|
|
248
|
-
mlrun/model_monitoring/db/tsdb/tdengine/schemas.py,sha256=
|
|
248
|
+
mlrun/model_monitoring/db/tsdb/tdengine/schemas.py,sha256=7yZFn42sF597TBumVM-xhh1bjIQCbIo6qIvMK5WpWO0,10503
|
|
249
249
|
mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py,sha256=Hb0vcCBP-o0ET78mU4P32fnhUL65QZv-pMuv2lnCby4,1586
|
|
250
|
-
mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py,sha256=
|
|
250
|
+
mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py,sha256=L4cDFfuGOVyF_bnPbUJ_xhMEt_DGwY6FWwoO4VEXSW4,18671
|
|
251
251
|
mlrun/model_monitoring/db/tsdb/v3io/__init__.py,sha256=aL3bfmQsUQ-sbvKGdNihFj8gLCK3mSys0qDcXtYOwgc,616
|
|
252
252
|
mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py,sha256=mbmhN4f_F58ptVjhwoMF6ifZSdnZWhK7x8eNsWS39IA,6217
|
|
253
253
|
mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py,sha256=1H-IBXPNJPRAaxDMGWpUU25QqfR87LpZbJ03vaJkICs,32858
|
|
@@ -343,11 +343,11 @@ mlrun/utils/notifications/notification/ipython.py,sha256=ZtVL30B_Ha0VGoo4LxO-voT
|
|
|
343
343
|
mlrun/utils/notifications/notification/slack.py,sha256=wqpFGr5BTvFO5KuUSzFfxsgmyU1Ohq7fbrGeNe9TXOk,7006
|
|
344
344
|
mlrun/utils/notifications/notification/webhook.py,sha256=cb9w1Mc8ENfJBdgan7iiVHK9eVls4-R3tUxmXM-P-8I,4746
|
|
345
345
|
mlrun/utils/version/__init__.py,sha256=7kkrB7hEZ3cLXoWj1kPoDwo4MaswsI2JVOBpbKgPAgc,614
|
|
346
|
-
mlrun/utils/version/version.json,sha256=
|
|
346
|
+
mlrun/utils/version/version.json,sha256=q5cEJlSDRoZA0OSLYB_pHTa6NDst7rvigtmJRxEHYLw,89
|
|
347
347
|
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.
|
|
348
|
+
mlrun-1.7.0rc47.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
349
|
+
mlrun-1.7.0rc47.dist-info/METADATA,sha256=mFz9Rh9j0hxTRo8fwrTziz_722E5JijvBB8K32E3X7s,19943
|
|
350
|
+
mlrun-1.7.0rc47.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
|
351
|
+
mlrun-1.7.0rc47.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
|
|
352
|
+
mlrun-1.7.0rc47.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
|
|
353
|
+
mlrun-1.7.0rc47.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|