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.

Files changed (93) hide show
  1. mlrun/api/api/deps.py +14 -1
  2. mlrun/api/api/endpoints/frontend_spec.py +0 -2
  3. mlrun/api/api/endpoints/functions.py +15 -27
  4. mlrun/api/api/endpoints/grafana_proxy.py +435 -74
  5. mlrun/api/api/endpoints/healthz.py +5 -18
  6. mlrun/api/api/endpoints/model_endpoints.py +33 -37
  7. mlrun/api/api/utils.py +6 -13
  8. mlrun/api/crud/__init__.py +14 -16
  9. mlrun/api/crud/logs.py +5 -7
  10. mlrun/api/crud/model_monitoring/__init__.py +2 -2
  11. mlrun/api/crud/model_monitoring/model_endpoint_store.py +847 -0
  12. mlrun/api/crud/model_monitoring/model_endpoints.py +105 -328
  13. mlrun/api/crud/pipelines.py +2 -3
  14. mlrun/api/db/sqldb/models/models_mysql.py +52 -19
  15. mlrun/api/db/sqldb/models/models_sqlite.py +52 -19
  16. mlrun/api/db/sqldb/session.py +19 -26
  17. mlrun/api/schemas/__init__.py +2 -0
  18. mlrun/api/schemas/constants.py +0 -13
  19. mlrun/api/schemas/frontend_spec.py +0 -1
  20. mlrun/api/schemas/model_endpoints.py +38 -195
  21. mlrun/api/schemas/schedule.py +2 -2
  22. mlrun/api/utils/clients/log_collector.py +5 -0
  23. mlrun/builder.py +9 -41
  24. mlrun/config.py +1 -76
  25. mlrun/data_types/__init__.py +1 -6
  26. mlrun/data_types/data_types.py +1 -3
  27. mlrun/datastore/__init__.py +2 -9
  28. mlrun/datastore/sources.py +20 -25
  29. mlrun/datastore/store_resources.py +1 -1
  30. mlrun/datastore/targets.py +34 -67
  31. mlrun/datastore/utils.py +4 -26
  32. mlrun/db/base.py +2 -4
  33. mlrun/db/filedb.py +5 -13
  34. mlrun/db/httpdb.py +32 -64
  35. mlrun/db/sqldb.py +2 -4
  36. mlrun/errors.py +0 -5
  37. mlrun/execution.py +0 -2
  38. mlrun/feature_store/api.py +8 -24
  39. mlrun/feature_store/feature_set.py +6 -28
  40. mlrun/feature_store/feature_vector.py +0 -2
  41. mlrun/feature_store/ingestion.py +11 -8
  42. mlrun/feature_store/retrieval/base.py +43 -271
  43. mlrun/feature_store/retrieval/dask_merger.py +153 -55
  44. mlrun/feature_store/retrieval/job.py +3 -12
  45. mlrun/feature_store/retrieval/local_merger.py +130 -48
  46. mlrun/feature_store/retrieval/spark_merger.py +125 -126
  47. mlrun/features.py +2 -7
  48. mlrun/model_monitoring/constants.py +6 -48
  49. mlrun/model_monitoring/helpers.py +35 -118
  50. mlrun/model_monitoring/model_monitoring_batch.py +260 -293
  51. mlrun/model_monitoring/stream_processing_fs.py +253 -220
  52. mlrun/platforms/iguazio.py +0 -33
  53. mlrun/projects/project.py +72 -34
  54. mlrun/runtimes/base.py +0 -5
  55. mlrun/runtimes/daskjob.py +0 -2
  56. mlrun/runtimes/function.py +3 -29
  57. mlrun/runtimes/kubejob.py +15 -39
  58. mlrun/runtimes/local.py +45 -7
  59. mlrun/runtimes/mpijob/abstract.py +0 -2
  60. mlrun/runtimes/mpijob/v1.py +0 -2
  61. mlrun/runtimes/pod.py +0 -2
  62. mlrun/runtimes/remotesparkjob.py +0 -2
  63. mlrun/runtimes/serving.py +0 -6
  64. mlrun/runtimes/sparkjob/abstract.py +2 -39
  65. mlrun/runtimes/sparkjob/spark3job.py +0 -2
  66. mlrun/serving/__init__.py +1 -2
  67. mlrun/serving/routers.py +35 -35
  68. mlrun/serving/server.py +12 -22
  69. mlrun/serving/states.py +30 -162
  70. mlrun/serving/v2_serving.py +10 -13
  71. mlrun/utils/clones.py +1 -1
  72. mlrun/utils/model_monitoring.py +96 -122
  73. mlrun/utils/version/version.json +2 -2
  74. {mlrun-1.3.2rc1.dist-info → mlrun-1.3.2rc2.dist-info}/METADATA +27 -23
  75. {mlrun-1.3.2rc1.dist-info → mlrun-1.3.2rc2.dist-info}/RECORD +79 -92
  76. mlrun/api/crud/model_monitoring/grafana.py +0 -427
  77. mlrun/datastore/spark_udf.py +0 -40
  78. mlrun/model_monitoring/__init__.py +0 -44
  79. mlrun/model_monitoring/common.py +0 -112
  80. mlrun/model_monitoring/model_endpoint.py +0 -141
  81. mlrun/model_monitoring/stores/__init__.py +0 -106
  82. mlrun/model_monitoring/stores/kv_model_endpoint_store.py +0 -448
  83. mlrun/model_monitoring/stores/model_endpoint_store.py +0 -147
  84. mlrun/model_monitoring/stores/models/__init__.py +0 -23
  85. mlrun/model_monitoring/stores/models/base.py +0 -18
  86. mlrun/model_monitoring/stores/models/mysql.py +0 -100
  87. mlrun/model_monitoring/stores/models/sqlite.py +0 -98
  88. mlrun/model_monitoring/stores/sql_model_endpoint_store.py +0 -375
  89. mlrun/utils/db.py +0 -52
  90. {mlrun-1.3.2rc1.dist-info → mlrun-1.3.2rc2.dist-info}/LICENSE +0 -0
  91. {mlrun-1.3.2rc1.dist-info → mlrun-1.3.2rc2.dist-info}/WHEEL +0 -0
  92. {mlrun-1.3.2rc1.dist-info → mlrun-1.3.2rc2.dist-info}/entry_points.txt +0 -0
  93. {mlrun-1.3.2rc1.dist-info → mlrun-1.3.2rc2.dist-info}/top_level.txt +0 -0
@@ -13,16 +13,97 @@
13
13
  # limitations under the License.
14
14
  #
15
15
 
16
- import json
17
- import warnings
18
- from typing import Union
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
- from mlrun.config import is_running_as_api
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(access_key: str, project: str = None):
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={model_monitoring_constants.ProjectSecretKeys.ACCESS_KEY: access_key},
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
- )
@@ -1,4 +1,4 @@
1
1
  {
2
- "git_commit": "b95ec3c5e7e8954875e4a1eb82ef96e8222b7ce9",
3
- "version": "1.3.2-rc1"
2
+ "git_commit": "c39a103bc6462422660bcdf40270b35469ad1b48",
3
+ "version": "1.3.2-rc2"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mlrun
3
- Version: 1.3.2rc1
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 (~=2023.1.0)
54
+ Requires-Dist: fsspec (~=2021.8.1)
55
55
  Requires-Dist: v3iofs (~=0.1.15)
56
- Requires-Dist: storey (~=1.3.19)
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 (~=2022.2.0) ; extra == 'all'
65
- Requires-Dist: aiobotocore (~=2.4.2) ; extra == 'all'
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 (~=1.24.59) ; extra == 'all'
72
- Requires-Dist: gcsfs (~=2023.1.0) ; extra == 'all'
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 (~=2023.1.0) ; extra == 'all'
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 (~=2022.2.0) ; extra == 'azure-blob-storage'
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 (~=2022.2.0) ; extra == 'complete'
103
- Requires-Dist: aiobotocore (~=2.4.2) ; extra == 'complete'
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 (~=1.24.59) ; extra == 'complete'
109
- Requires-Dist: gcsfs (~=2023.1.0) ; extra == 'complete'
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 (~=2023.1.0) ; extra == 'complete'
119
+ Requires-Dist: s3fs (~=2021.8.1) ; extra == 'complete'
118
120
  Provides-Extra: complete-api
119
- Requires-Dist: adlfs (~=2022.2.0) ; extra == 'complete-api'
120
- Requires-Dist: aiobotocore (~=2.4.2) ; extra == 'complete-api'
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 (~=1.24.59) ; extra == 'complete-api'
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 (~=2023.1.0) ; extra == 'complete-api'
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 (~=2023.1.0) ; extra == 'complete-api'
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 (~=2023.1.0) ; extra == 'google-cloud-storage'
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 (~=1.24.59) ; extra == 's3'
158
- Requires-Dist: aiobotocore (~=2.4.2) ; extra == 's3'
159
- Requires-Dist: s3fs (~=2023.1.0) ; extra == 's3'
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
  [![Build Status](https://github.com/mlrun/mlrun/workflows/CI/badge.svg)](https://github.com/mlrun/mlrun/actions)