mlrun 1.3.2rc1__py3-none-any.whl → 1.3.2rc2__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/api/api/deps.py +14 -1
- mlrun/api/api/endpoints/frontend_spec.py +0 -2
- mlrun/api/api/endpoints/functions.py +15 -27
- mlrun/api/api/endpoints/grafana_proxy.py +435 -74
- mlrun/api/api/endpoints/healthz.py +5 -18
- mlrun/api/api/endpoints/model_endpoints.py +33 -37
- mlrun/api/api/utils.py +6 -13
- mlrun/api/crud/__init__.py +14 -16
- mlrun/api/crud/logs.py +5 -7
- mlrun/api/crud/model_monitoring/__init__.py +2 -2
- mlrun/api/crud/model_monitoring/model_endpoint_store.py +847 -0
- mlrun/api/crud/model_monitoring/model_endpoints.py +105 -328
- mlrun/api/crud/pipelines.py +2 -3
- mlrun/api/db/sqldb/models/models_mysql.py +52 -19
- mlrun/api/db/sqldb/models/models_sqlite.py +52 -19
- mlrun/api/db/sqldb/session.py +19 -26
- mlrun/api/schemas/__init__.py +2 -0
- mlrun/api/schemas/constants.py +0 -13
- mlrun/api/schemas/frontend_spec.py +0 -1
- mlrun/api/schemas/model_endpoints.py +38 -195
- mlrun/api/schemas/schedule.py +2 -2
- mlrun/api/utils/clients/log_collector.py +5 -0
- mlrun/builder.py +9 -41
- mlrun/config.py +1 -76
- mlrun/data_types/__init__.py +1 -6
- mlrun/data_types/data_types.py +1 -3
- mlrun/datastore/__init__.py +2 -9
- mlrun/datastore/sources.py +20 -25
- mlrun/datastore/store_resources.py +1 -1
- mlrun/datastore/targets.py +34 -67
- mlrun/datastore/utils.py +4 -26
- mlrun/db/base.py +2 -4
- mlrun/db/filedb.py +5 -13
- mlrun/db/httpdb.py +32 -64
- mlrun/db/sqldb.py +2 -4
- mlrun/errors.py +0 -5
- mlrun/execution.py +0 -2
- mlrun/feature_store/api.py +8 -24
- mlrun/feature_store/feature_set.py +6 -28
- mlrun/feature_store/feature_vector.py +0 -2
- mlrun/feature_store/ingestion.py +11 -8
- mlrun/feature_store/retrieval/base.py +43 -271
- mlrun/feature_store/retrieval/dask_merger.py +153 -55
- mlrun/feature_store/retrieval/job.py +3 -12
- mlrun/feature_store/retrieval/local_merger.py +130 -48
- mlrun/feature_store/retrieval/spark_merger.py +125 -126
- mlrun/features.py +2 -7
- mlrun/model_monitoring/constants.py +6 -48
- mlrun/model_monitoring/helpers.py +35 -118
- mlrun/model_monitoring/model_monitoring_batch.py +260 -293
- mlrun/model_monitoring/stream_processing_fs.py +253 -220
- mlrun/platforms/iguazio.py +0 -33
- mlrun/projects/project.py +72 -34
- mlrun/runtimes/base.py +0 -5
- mlrun/runtimes/daskjob.py +0 -2
- mlrun/runtimes/function.py +3 -29
- mlrun/runtimes/kubejob.py +15 -39
- mlrun/runtimes/local.py +45 -7
- mlrun/runtimes/mpijob/abstract.py +0 -2
- mlrun/runtimes/mpijob/v1.py +0 -2
- mlrun/runtimes/pod.py +0 -2
- mlrun/runtimes/remotesparkjob.py +0 -2
- mlrun/runtimes/serving.py +0 -6
- mlrun/runtimes/sparkjob/abstract.py +2 -39
- mlrun/runtimes/sparkjob/spark3job.py +0 -2
- mlrun/serving/__init__.py +1 -2
- mlrun/serving/routers.py +35 -35
- mlrun/serving/server.py +12 -22
- mlrun/serving/states.py +30 -162
- mlrun/serving/v2_serving.py +10 -13
- mlrun/utils/clones.py +1 -1
- mlrun/utils/model_monitoring.py +96 -122
- mlrun/utils/version/version.json +2 -2
- {mlrun-1.3.2rc1.dist-info → mlrun-1.3.2rc2.dist-info}/METADATA +27 -23
- {mlrun-1.3.2rc1.dist-info → mlrun-1.3.2rc2.dist-info}/RECORD +79 -92
- mlrun/api/crud/model_monitoring/grafana.py +0 -427
- mlrun/datastore/spark_udf.py +0 -40
- mlrun/model_monitoring/__init__.py +0 -44
- mlrun/model_monitoring/common.py +0 -112
- mlrun/model_monitoring/model_endpoint.py +0 -141
- mlrun/model_monitoring/stores/__init__.py +0 -106
- mlrun/model_monitoring/stores/kv_model_endpoint_store.py +0 -448
- mlrun/model_monitoring/stores/model_endpoint_store.py +0 -147
- mlrun/model_monitoring/stores/models/__init__.py +0 -23
- mlrun/model_monitoring/stores/models/base.py +0 -18
- mlrun/model_monitoring/stores/models/mysql.py +0 -100
- mlrun/model_monitoring/stores/models/sqlite.py +0 -98
- mlrun/model_monitoring/stores/sql_model_endpoint_store.py +0 -375
- mlrun/utils/db.py +0 -52
- {mlrun-1.3.2rc1.dist-info → mlrun-1.3.2rc2.dist-info}/LICENSE +0 -0
- {mlrun-1.3.2rc1.dist-info → mlrun-1.3.2rc2.dist-info}/WHEEL +0 -0
- {mlrun-1.3.2rc1.dist-info → mlrun-1.3.2rc2.dist-info}/entry_points.txt +0 -0
- {mlrun-1.3.2rc1.dist-info → mlrun-1.3.2rc2.dist-info}/top_level.txt +0 -0
mlrun/utils/model_monitoring.py
CHANGED
|
@@ -13,16 +13,97 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
15
|
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
from
|
|
16
|
+
import enum
|
|
17
|
+
import hashlib
|
|
18
|
+
from dataclasses import dataclass
|
|
19
|
+
from typing import Optional, Union
|
|
19
20
|
|
|
20
21
|
import mlrun
|
|
21
22
|
import mlrun.model
|
|
22
23
|
import mlrun.model_monitoring.constants as model_monitoring_constants
|
|
23
24
|
import mlrun.platforms.iguazio
|
|
25
|
+
import mlrun.utils
|
|
24
26
|
from mlrun.api.schemas.schedule import ScheduleCronTrigger
|
|
25
|
-
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class FunctionURI:
|
|
31
|
+
project: str
|
|
32
|
+
function: str
|
|
33
|
+
tag: Optional[str] = None
|
|
34
|
+
hash_key: Optional[str] = None
|
|
35
|
+
|
|
36
|
+
@classmethod
|
|
37
|
+
def from_string(cls, function_uri):
|
|
38
|
+
project, uri, tag, hash_key = mlrun.utils.parse_versioned_object_uri(
|
|
39
|
+
function_uri
|
|
40
|
+
)
|
|
41
|
+
return cls(
|
|
42
|
+
project=project,
|
|
43
|
+
function=uri,
|
|
44
|
+
tag=tag or None,
|
|
45
|
+
hash_key=hash_key or None,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@dataclass
|
|
50
|
+
class VersionedModel:
|
|
51
|
+
model: str
|
|
52
|
+
version: Optional[str]
|
|
53
|
+
|
|
54
|
+
@classmethod
|
|
55
|
+
def from_string(cls, model):
|
|
56
|
+
try:
|
|
57
|
+
model, version = model.split(":")
|
|
58
|
+
except ValueError:
|
|
59
|
+
model, version = model, None
|
|
60
|
+
|
|
61
|
+
return cls(model, version)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
@dataclass
|
|
65
|
+
class EndpointUID:
|
|
66
|
+
project: str
|
|
67
|
+
function: str
|
|
68
|
+
function_tag: str
|
|
69
|
+
function_hash_key: str
|
|
70
|
+
model: str
|
|
71
|
+
model_version: str
|
|
72
|
+
uid: Optional[str] = None
|
|
73
|
+
|
|
74
|
+
def __post_init__(self):
|
|
75
|
+
function_ref = (
|
|
76
|
+
f"{self.function}_{self.function_tag or self.function_hash_key or 'N/A'}"
|
|
77
|
+
)
|
|
78
|
+
versioned_model = f"{self.model}_{self.model_version or 'N/A'}"
|
|
79
|
+
unique_string = f"{self.project}_{function_ref}_{versioned_model}"
|
|
80
|
+
self.uid = hashlib.sha1(unique_string.encode("utf-8")).hexdigest()
|
|
81
|
+
|
|
82
|
+
def __str__(self):
|
|
83
|
+
return self.uid
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def create_model_endpoint_id(function_uri: str, versioned_model: str):
|
|
87
|
+
function_uri = FunctionURI.from_string(function_uri)
|
|
88
|
+
versioned_model = VersionedModel.from_string(versioned_model)
|
|
89
|
+
|
|
90
|
+
if (
|
|
91
|
+
not function_uri.project
|
|
92
|
+
or not function_uri.function
|
|
93
|
+
or not versioned_model.model
|
|
94
|
+
):
|
|
95
|
+
raise ValueError("Both function_uri and versioned_model have to be initialized")
|
|
96
|
+
|
|
97
|
+
uid = EndpointUID(
|
|
98
|
+
function_uri.project,
|
|
99
|
+
function_uri.function,
|
|
100
|
+
function_uri.tag,
|
|
101
|
+
function_uri.hash_key,
|
|
102
|
+
versioned_model.model,
|
|
103
|
+
versioned_model.version,
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
return uid
|
|
26
107
|
|
|
27
108
|
|
|
28
109
|
def parse_model_endpoint_project_prefix(path: str, project_name: str):
|
|
@@ -35,20 +116,29 @@ def parse_model_endpoint_store_prefix(store_prefix: str):
|
|
|
35
116
|
return endpoint, container, path
|
|
36
117
|
|
|
37
118
|
|
|
38
|
-
def set_project_model_monitoring_credentials(
|
|
119
|
+
def set_project_model_monitoring_credentials(
|
|
120
|
+
access_key: str, project: Optional[str] = None
|
|
121
|
+
):
|
|
39
122
|
"""Set the credentials that will be used by the project's model monitoring
|
|
40
123
|
infrastructure functions.
|
|
41
124
|
The supplied credentials must have data access
|
|
125
|
+
|
|
42
126
|
:param access_key: Model Monitoring access key for managing user permissions.
|
|
43
127
|
:param project: The name of the model monitoring project.
|
|
44
128
|
"""
|
|
45
129
|
mlrun.get_run_db().create_project_secrets(
|
|
46
130
|
project=project or mlrun.mlconf.default_project,
|
|
47
131
|
provider=mlrun.api.schemas.SecretProviderName.kubernetes,
|
|
48
|
-
secrets={
|
|
132
|
+
secrets={"MODEL_MONITORING_ACCESS_KEY": access_key},
|
|
49
133
|
)
|
|
50
134
|
|
|
51
135
|
|
|
136
|
+
class EndpointType(enum.IntEnum):
|
|
137
|
+
NODE_EP = 1 # end point that is not a child of a router
|
|
138
|
+
ROUTER = 2 # endpoint that is router
|
|
139
|
+
LEAF_EP = 3 # end point that is a child of a router
|
|
140
|
+
|
|
141
|
+
|
|
52
142
|
class TrackingPolicy(mlrun.model.ModelObj):
|
|
53
143
|
"""
|
|
54
144
|
Modified model monitoring configurations. By using TrackingPolicy, the user can apply his model monitoring
|
|
@@ -125,119 +215,3 @@ class TrackingPolicy(mlrun.model.ModelObj):
|
|
|
125
215
|
model_monitoring_constants.EventFieldType.DEFAULT_BATCH_INTERVALS
|
|
126
216
|
] = self.default_batch_intervals.dict()
|
|
127
217
|
return struct
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
def get_connection_string(project: str = None):
|
|
131
|
-
"""Get endpoint store connection string from the project secret.
|
|
132
|
-
If wasn't set, take it from the system configurations"""
|
|
133
|
-
if is_running_as_api():
|
|
134
|
-
# Running on API server side
|
|
135
|
-
import mlrun.api.crud.secrets
|
|
136
|
-
import mlrun.api.schemas
|
|
137
|
-
|
|
138
|
-
return (
|
|
139
|
-
mlrun.api.crud.secrets.Secrets().get_project_secret(
|
|
140
|
-
project=project,
|
|
141
|
-
provider=mlrun.api.schemas.secret.SecretProviderName.kubernetes,
|
|
142
|
-
allow_secrets_from_k8s=True,
|
|
143
|
-
secret_key=model_monitoring_constants.ProjectSecretKeys.ENDPOINT_STORE_CONNECTION,
|
|
144
|
-
)
|
|
145
|
-
or mlrun.mlconf.model_endpoint_monitoring.endpoint_store_connection
|
|
146
|
-
)
|
|
147
|
-
else:
|
|
148
|
-
# Running on stream server side
|
|
149
|
-
import mlrun
|
|
150
|
-
|
|
151
|
-
return (
|
|
152
|
-
mlrun.get_secret_or_env(
|
|
153
|
-
model_monitoring_constants.ProjectSecretKeys.ENDPOINT_STORE_CONNECTION
|
|
154
|
-
)
|
|
155
|
-
or mlrun.mlconf.model_endpoint_monitoring.endpoint_store_connection
|
|
156
|
-
)
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
def get_stream_path(project: str = None):
|
|
160
|
-
# TODO: This function (as well as other methods in this file) includes both client and server side code. We will
|
|
161
|
-
# need to refactor and adjust this file in the future.
|
|
162
|
-
"""Get stream path from the project secret. If wasn't set, take it from the system configurations"""
|
|
163
|
-
|
|
164
|
-
if is_running_as_api():
|
|
165
|
-
|
|
166
|
-
# Running on API server side
|
|
167
|
-
import mlrun.api.crud.secrets
|
|
168
|
-
import mlrun.api.schemas
|
|
169
|
-
|
|
170
|
-
stream_uri = mlrun.api.crud.secrets.Secrets().get_project_secret(
|
|
171
|
-
project=project,
|
|
172
|
-
provider=mlrun.api.schemas.secret.SecretProviderName.kubernetes,
|
|
173
|
-
allow_secrets_from_k8s=True,
|
|
174
|
-
secret_key=model_monitoring_constants.ProjectSecretKeys.STREAM_PATH,
|
|
175
|
-
) or mlrun.mlconf.get_model_monitoring_file_target_path(
|
|
176
|
-
project=project,
|
|
177
|
-
kind=model_monitoring_constants.FileTargetKind.STREAM,
|
|
178
|
-
target="online",
|
|
179
|
-
)
|
|
180
|
-
|
|
181
|
-
else:
|
|
182
|
-
|
|
183
|
-
import mlrun
|
|
184
|
-
|
|
185
|
-
stream_uri = mlrun.get_secret_or_env(
|
|
186
|
-
model_monitoring_constants.ProjectSecretKeys.STREAM_PATH
|
|
187
|
-
) or mlrun.mlconf.get_model_monitoring_file_target_path(
|
|
188
|
-
project=project,
|
|
189
|
-
kind=model_monitoring_constants.FileTargetKind.STREAM,
|
|
190
|
-
target="online",
|
|
191
|
-
)
|
|
192
|
-
|
|
193
|
-
if stream_uri.startswith("kafka://"):
|
|
194
|
-
if "?topic" in stream_uri:
|
|
195
|
-
raise mlrun.errors.MLRunInvalidArgumentError(
|
|
196
|
-
"Custom kafka topic is not allowed"
|
|
197
|
-
)
|
|
198
|
-
# Add topic to stream kafka uri
|
|
199
|
-
stream_uri += f"?topic=monitoring_stream_{project}"
|
|
200
|
-
|
|
201
|
-
elif stream_uri.startswith("v3io://") and mlrun.mlconf.is_ce_mode():
|
|
202
|
-
# V3IO is not supported in CE mode, generating a default http stream path
|
|
203
|
-
stream_uri = mlrun.mlconf.model_endpoint_monitoring.default_http_sink
|
|
204
|
-
|
|
205
|
-
return stream_uri
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
def validate_errors_and_metrics(endpoint: dict):
|
|
209
|
-
"""
|
|
210
|
-
Replace default null values for `error_count` and `metrics` for users that logged a model endpoint before 1.3.0
|
|
211
|
-
|
|
212
|
-
Leaving here for backwards compatibility which related to the model endpoint schema
|
|
213
|
-
|
|
214
|
-
:param endpoint: An endpoint flattened dictionary.
|
|
215
|
-
"""
|
|
216
|
-
warnings.warn(
|
|
217
|
-
"This will be deprecated in 1.3.0, and will be removed in 1.5.0",
|
|
218
|
-
# TODO: In 1.3.0 do changes in examples & demos In 1.5.0 remove
|
|
219
|
-
FutureWarning,
|
|
220
|
-
)
|
|
221
|
-
|
|
222
|
-
# Validate default value for `error_count`
|
|
223
|
-
# For backwards compatibility reasons, we validate that the model endpoint includes the `error_count` key
|
|
224
|
-
if (
|
|
225
|
-
model_monitoring_constants.EventFieldType.ERROR_COUNT in endpoint
|
|
226
|
-
and endpoint[model_monitoring_constants.EventFieldType.ERROR_COUNT] == "null"
|
|
227
|
-
):
|
|
228
|
-
endpoint[model_monitoring_constants.EventFieldType.ERROR_COUNT] = "0"
|
|
229
|
-
|
|
230
|
-
# Validate default value for `metrics`
|
|
231
|
-
# For backwards compatibility reasons, we validate that the model endpoint includes the `metrics` key
|
|
232
|
-
if (
|
|
233
|
-
model_monitoring_constants.EventFieldType.METRICS in endpoint
|
|
234
|
-
and endpoint[model_monitoring_constants.EventFieldType.METRICS] == "null"
|
|
235
|
-
):
|
|
236
|
-
endpoint[model_monitoring_constants.EventFieldType.METRICS] = json.dumps(
|
|
237
|
-
{
|
|
238
|
-
model_monitoring_constants.EventKeyMetrics.GENERIC: {
|
|
239
|
-
model_monitoring_constants.EventLiveStats.LATENCY_AVG_1H: 0,
|
|
240
|
-
model_monitoring_constants.EventLiveStats.PREDICTIONS_PER_SECOND: 0,
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
)
|
mlrun/utils/version/version.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mlrun
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.2rc2
|
|
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,9 +51,9 @@ Requires-Dist: distributed (~=2021.11.2)
|
|
|
51
51
|
Requires-Dist: kubernetes (~=12.0)
|
|
52
52
|
Requires-Dist: humanfriendly (~=8.2)
|
|
53
53
|
Requires-Dist: fastapi (~=0.92.0)
|
|
54
|
-
Requires-Dist: fsspec (~=
|
|
54
|
+
Requires-Dist: fsspec (~=2021.8.1)
|
|
55
55
|
Requires-Dist: v3iofs (~=0.1.15)
|
|
56
|
-
Requires-Dist: storey (~=1.3.
|
|
56
|
+
Requires-Dist: storey (~=1.3.15)
|
|
57
57
|
Requires-Dist: deepdiff (~=5.0)
|
|
58
58
|
Requires-Dist: pymysql (~=1.0)
|
|
59
59
|
Requires-Dist: inflection (~=0.5.0)
|
|
@@ -61,15 +61,16 @@ Requires-Dist: python-dotenv (~=0.17.0)
|
|
|
61
61
|
Requires-Dist: setuptools (~=65.5)
|
|
62
62
|
Requires-Dist: deprecated (~=1.2)
|
|
63
63
|
Provides-Extra: all
|
|
64
|
-
Requires-Dist: adlfs (~=
|
|
65
|
-
Requires-Dist: aiobotocore (~=
|
|
64
|
+
Requires-Dist: adlfs (~=2021.8.1) ; extra == 'all'
|
|
65
|
+
Requires-Dist: aiobotocore (~=1.4.0) ; extra == 'all'
|
|
66
66
|
Requires-Dist: azure-core (~=1.24) ; extra == 'all'
|
|
67
67
|
Requires-Dist: azure-identity (~=1.5) ; extra == 'all'
|
|
68
68
|
Requires-Dist: azure-keyvault-secrets (~=4.2) ; extra == 'all'
|
|
69
69
|
Requires-Dist: azure-storage-blob (~=12.13) ; extra == 'all'
|
|
70
70
|
Requires-Dist: bokeh (>=2.4.2,~=2.4) ; extra == 'all'
|
|
71
|
-
Requires-Dist: boto3 (
|
|
72
|
-
Requires-Dist:
|
|
71
|
+
Requires-Dist: boto3 (<1.17.107,~=1.9) ; extra == 'all'
|
|
72
|
+
Requires-Dist: botocore (<1.20.107,>=1.20.106) ; extra == 'all'
|
|
73
|
+
Requires-Dist: gcsfs (~=2021.8.1) ; extra == 'all'
|
|
73
74
|
Requires-Dist: google-cloud-bigquery[bqstorage,pandas] (~=3.2) ; extra == 'all'
|
|
74
75
|
Requires-Dist: google-cloud-storage (~=1.20) ; extra == 'all'
|
|
75
76
|
Requires-Dist: google-cloud (~=0.34) ; extra == 'all'
|
|
@@ -79,7 +80,7 @@ Requires-Dist: msrest (~=0.6.21) ; extra == 'all'
|
|
|
79
80
|
Requires-Dist: plotly (<5.12.0,~=5.4) ; extra == 'all'
|
|
80
81
|
Requires-Dist: pyopenssl (>=23) ; extra == 'all'
|
|
81
82
|
Requires-Dist: redis (~=4.3) ; extra == 'all'
|
|
82
|
-
Requires-Dist: s3fs (~=
|
|
83
|
+
Requires-Dist: s3fs (~=2021.8.1) ; extra == 'all'
|
|
83
84
|
Provides-Extra: api
|
|
84
85
|
Requires-Dist: uvicorn (~=0.20.0) ; extra == 'api'
|
|
85
86
|
Requires-Dist: dask-kubernetes (~=0.11.0) ; extra == 'api'
|
|
@@ -90,7 +91,7 @@ Provides-Extra: azure-blob-storage
|
|
|
90
91
|
Requires-Dist: msrest (~=0.6.21) ; extra == 'azure-blob-storage'
|
|
91
92
|
Requires-Dist: azure-core (~=1.24) ; extra == 'azure-blob-storage'
|
|
92
93
|
Requires-Dist: azure-storage-blob (~=12.13) ; extra == 'azure-blob-storage'
|
|
93
|
-
Requires-Dist: adlfs (~=
|
|
94
|
+
Requires-Dist: adlfs (~=2021.8.1) ; extra == 'azure-blob-storage'
|
|
94
95
|
Requires-Dist: pyopenssl (>=23) ; extra == 'azure-blob-storage'
|
|
95
96
|
Provides-Extra: azure-key-vault
|
|
96
97
|
Requires-Dist: azure-identity (~=1.5) ; extra == 'azure-key-vault'
|
|
@@ -99,14 +100,15 @@ Requires-Dist: pyopenssl (>=23) ; extra == 'azure-key-vault'
|
|
|
99
100
|
Provides-Extra: bokeh
|
|
100
101
|
Requires-Dist: bokeh (>=2.4.2,~=2.4) ; extra == 'bokeh'
|
|
101
102
|
Provides-Extra: complete
|
|
102
|
-
Requires-Dist: adlfs (~=
|
|
103
|
-
Requires-Dist: aiobotocore (~=
|
|
103
|
+
Requires-Dist: adlfs (~=2021.8.1) ; extra == 'complete'
|
|
104
|
+
Requires-Dist: aiobotocore (~=1.4.0) ; extra == 'complete'
|
|
104
105
|
Requires-Dist: azure-core (~=1.24) ; extra == 'complete'
|
|
105
106
|
Requires-Dist: azure-identity (~=1.5) ; extra == 'complete'
|
|
106
107
|
Requires-Dist: azure-keyvault-secrets (~=4.2) ; extra == 'complete'
|
|
107
108
|
Requires-Dist: azure-storage-blob (~=12.13) ; extra == 'complete'
|
|
108
|
-
Requires-Dist: boto3 (
|
|
109
|
-
Requires-Dist:
|
|
109
|
+
Requires-Dist: boto3 (<1.17.107,~=1.9) ; extra == 'complete'
|
|
110
|
+
Requires-Dist: botocore (<1.20.107,>=1.20.106) ; extra == 'complete'
|
|
111
|
+
Requires-Dist: gcsfs (~=2021.8.1) ; extra == 'complete'
|
|
110
112
|
Requires-Dist: google-cloud-bigquery[bqstorage,pandas] (~=3.2) ; extra == 'complete'
|
|
111
113
|
Requires-Dist: graphviz (~=0.20.0) ; extra == 'complete'
|
|
112
114
|
Requires-Dist: kafka-python (~=2.0) ; extra == 'complete'
|
|
@@ -114,18 +116,19 @@ Requires-Dist: msrest (~=0.6.21) ; extra == 'complete'
|
|
|
114
116
|
Requires-Dist: plotly (<5.12.0,~=5.4) ; extra == 'complete'
|
|
115
117
|
Requires-Dist: pyopenssl (>=23) ; extra == 'complete'
|
|
116
118
|
Requires-Dist: redis (~=4.3) ; extra == 'complete'
|
|
117
|
-
Requires-Dist: s3fs (~=
|
|
119
|
+
Requires-Dist: s3fs (~=2021.8.1) ; extra == 'complete'
|
|
118
120
|
Provides-Extra: complete-api
|
|
119
|
-
Requires-Dist: adlfs (~=
|
|
120
|
-
Requires-Dist: aiobotocore (~=
|
|
121
|
+
Requires-Dist: adlfs (~=2021.8.1) ; extra == 'complete-api'
|
|
122
|
+
Requires-Dist: aiobotocore (~=1.4.0) ; extra == 'complete-api'
|
|
121
123
|
Requires-Dist: apscheduler (~=3.6) ; extra == 'complete-api'
|
|
122
124
|
Requires-Dist: azure-core (~=1.24) ; extra == 'complete-api'
|
|
123
125
|
Requires-Dist: azure-identity (~=1.5) ; extra == 'complete-api'
|
|
124
126
|
Requires-Dist: azure-keyvault-secrets (~=4.2) ; extra == 'complete-api'
|
|
125
127
|
Requires-Dist: azure-storage-blob (~=12.13) ; extra == 'complete-api'
|
|
126
|
-
Requires-Dist: boto3 (
|
|
128
|
+
Requires-Dist: boto3 (<1.17.107,~=1.9) ; extra == 'complete-api'
|
|
129
|
+
Requires-Dist: botocore (<1.20.107,>=1.20.106) ; extra == 'complete-api'
|
|
127
130
|
Requires-Dist: dask-kubernetes (~=0.11.0) ; extra == 'complete-api'
|
|
128
|
-
Requires-Dist: gcsfs (~=
|
|
131
|
+
Requires-Dist: gcsfs (~=2021.8.1) ; extra == 'complete-api'
|
|
129
132
|
Requires-Dist: google-cloud-bigquery[bqstorage,pandas] (~=3.2) ; extra == 'complete-api'
|
|
130
133
|
Requires-Dist: graphviz (~=0.20.0) ; extra == 'complete-api'
|
|
131
134
|
Requires-Dist: kafka-python (~=2.0) ; extra == 'complete-api'
|
|
@@ -134,7 +137,7 @@ Requires-Dist: objgraph (~=3.5) ; extra == 'complete-api'
|
|
|
134
137
|
Requires-Dist: plotly (<5.12.0,~=5.4) ; extra == 'complete-api'
|
|
135
138
|
Requires-Dist: pyopenssl (>=23) ; extra == 'complete-api'
|
|
136
139
|
Requires-Dist: redis (~=4.3) ; extra == 'complete-api'
|
|
137
|
-
Requires-Dist: s3fs (~=
|
|
140
|
+
Requires-Dist: s3fs (~=2021.8.1) ; extra == 'complete-api'
|
|
138
141
|
Requires-Dist: sqlite3-to-mysql (~=1.4) ; extra == 'complete-api'
|
|
139
142
|
Requires-Dist: uvicorn (~=0.20.0) ; extra == 'complete-api'
|
|
140
143
|
Provides-Extra: google-cloud
|
|
@@ -144,7 +147,7 @@ Requires-Dist: google-cloud (~=0.34) ; extra == 'google-cloud'
|
|
|
144
147
|
Provides-Extra: google-cloud-bigquery
|
|
145
148
|
Requires-Dist: google-cloud-bigquery[bqstorage,pandas] (~=3.2) ; extra == 'google-cloud-bigquery'
|
|
146
149
|
Provides-Extra: google-cloud-storage
|
|
147
|
-
Requires-Dist: gcsfs (~=
|
|
150
|
+
Requires-Dist: gcsfs (~=2021.8.1) ; extra == 'google-cloud-storage'
|
|
148
151
|
Provides-Extra: graphviz
|
|
149
152
|
Requires-Dist: graphviz (~=0.20.0) ; extra == 'graphviz'
|
|
150
153
|
Provides-Extra: kafka
|
|
@@ -154,9 +157,10 @@ Requires-Dist: plotly (<5.12.0,~=5.4) ; extra == 'plotly'
|
|
|
154
157
|
Provides-Extra: redis
|
|
155
158
|
Requires-Dist: redis (~=4.3) ; extra == 'redis'
|
|
156
159
|
Provides-Extra: s3
|
|
157
|
-
Requires-Dist: boto3 (
|
|
158
|
-
Requires-Dist:
|
|
159
|
-
Requires-Dist:
|
|
160
|
+
Requires-Dist: boto3 (<1.17.107,~=1.9) ; extra == 's3'
|
|
161
|
+
Requires-Dist: botocore (<1.20.107,>=1.20.106) ; extra == 's3'
|
|
162
|
+
Requires-Dist: aiobotocore (~=1.4.0) ; extra == 's3'
|
|
163
|
+
Requires-Dist: s3fs (~=2021.8.1) ; extra == 's3'
|
|
160
164
|
|
|
161
165
|
<a id="top"></a>
|
|
162
166
|
[](https://github.com/mlrun/mlrun/actions)
|