mlrun 1.7.0rc5__py3-none-any.whl → 1.7.2__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 (234) hide show
  1. mlrun/__init__.py +11 -1
  2. mlrun/__main__.py +39 -121
  3. mlrun/{datastore/helpers.py → alerts/__init__.py} +2 -5
  4. mlrun/alerts/alert.py +248 -0
  5. mlrun/api/schemas/__init__.py +4 -3
  6. mlrun/artifacts/__init__.py +8 -3
  7. mlrun/artifacts/base.py +39 -254
  8. mlrun/artifacts/dataset.py +9 -190
  9. mlrun/artifacts/manager.py +73 -46
  10. mlrun/artifacts/model.py +30 -158
  11. mlrun/artifacts/plots.py +23 -380
  12. mlrun/common/constants.py +73 -2
  13. mlrun/common/db/sql_session.py +3 -2
  14. mlrun/common/formatters/__init__.py +21 -0
  15. mlrun/common/formatters/artifact.py +46 -0
  16. mlrun/common/formatters/base.py +113 -0
  17. mlrun/common/formatters/feature_set.py +44 -0
  18. mlrun/common/formatters/function.py +46 -0
  19. mlrun/common/formatters/pipeline.py +53 -0
  20. mlrun/common/formatters/project.py +51 -0
  21. mlrun/common/formatters/run.py +29 -0
  22. mlrun/common/helpers.py +11 -1
  23. mlrun/{runtimes → common/runtimes}/constants.py +32 -4
  24. mlrun/common/schemas/__init__.py +21 -4
  25. mlrun/common/schemas/alert.py +202 -0
  26. mlrun/common/schemas/api_gateway.py +113 -2
  27. mlrun/common/schemas/artifact.py +28 -1
  28. mlrun/common/schemas/auth.py +11 -0
  29. mlrun/common/schemas/client_spec.py +2 -1
  30. mlrun/common/schemas/common.py +7 -4
  31. mlrun/common/schemas/constants.py +3 -0
  32. mlrun/common/schemas/feature_store.py +58 -28
  33. mlrun/common/schemas/frontend_spec.py +8 -0
  34. mlrun/common/schemas/function.py +11 -0
  35. mlrun/common/schemas/hub.py +7 -9
  36. mlrun/common/schemas/model_monitoring/__init__.py +21 -4
  37. mlrun/common/schemas/model_monitoring/constants.py +136 -42
  38. mlrun/common/schemas/model_monitoring/grafana.py +9 -5
  39. mlrun/common/schemas/model_monitoring/model_endpoints.py +89 -41
  40. mlrun/common/schemas/notification.py +69 -12
  41. mlrun/{runtimes/mpijob/v1alpha1.py → common/schemas/pagination.py} +10 -13
  42. mlrun/common/schemas/pipeline.py +7 -0
  43. mlrun/common/schemas/project.py +67 -16
  44. mlrun/common/schemas/runs.py +17 -0
  45. mlrun/common/schemas/schedule.py +1 -1
  46. mlrun/common/schemas/workflow.py +10 -2
  47. mlrun/common/types.py +14 -1
  48. mlrun/config.py +224 -58
  49. mlrun/data_types/data_types.py +11 -1
  50. mlrun/data_types/spark.py +5 -4
  51. mlrun/data_types/to_pandas.py +75 -34
  52. mlrun/datastore/__init__.py +8 -10
  53. mlrun/datastore/alibaba_oss.py +131 -0
  54. mlrun/datastore/azure_blob.py +131 -43
  55. mlrun/datastore/base.py +107 -47
  56. mlrun/datastore/datastore.py +17 -7
  57. mlrun/datastore/datastore_profile.py +91 -7
  58. mlrun/datastore/dbfs_store.py +3 -7
  59. mlrun/datastore/filestore.py +1 -3
  60. mlrun/datastore/google_cloud_storage.py +92 -32
  61. mlrun/datastore/hdfs.py +5 -0
  62. mlrun/datastore/inmem.py +6 -3
  63. mlrun/datastore/redis.py +3 -2
  64. mlrun/datastore/s3.py +30 -12
  65. mlrun/datastore/snowflake_utils.py +45 -0
  66. mlrun/datastore/sources.py +274 -59
  67. mlrun/datastore/spark_utils.py +30 -0
  68. mlrun/datastore/store_resources.py +9 -7
  69. mlrun/datastore/storeytargets.py +151 -0
  70. mlrun/datastore/targets.py +374 -102
  71. mlrun/datastore/utils.py +68 -5
  72. mlrun/datastore/v3io.py +28 -50
  73. mlrun/db/auth_utils.py +152 -0
  74. mlrun/db/base.py +231 -22
  75. mlrun/db/factory.py +1 -4
  76. mlrun/db/httpdb.py +864 -228
  77. mlrun/db/nopdb.py +268 -16
  78. mlrun/errors.py +35 -5
  79. mlrun/execution.py +111 -38
  80. mlrun/feature_store/__init__.py +0 -2
  81. mlrun/feature_store/api.py +46 -53
  82. mlrun/feature_store/common.py +6 -11
  83. mlrun/feature_store/feature_set.py +48 -23
  84. mlrun/feature_store/feature_vector.py +13 -2
  85. mlrun/feature_store/ingestion.py +7 -6
  86. mlrun/feature_store/retrieval/base.py +9 -4
  87. mlrun/feature_store/retrieval/dask_merger.py +2 -0
  88. mlrun/feature_store/retrieval/job.py +13 -4
  89. mlrun/feature_store/retrieval/local_merger.py +2 -0
  90. mlrun/feature_store/retrieval/spark_merger.py +24 -32
  91. mlrun/feature_store/steps.py +38 -19
  92. mlrun/features.py +6 -14
  93. mlrun/frameworks/_common/plan.py +3 -3
  94. mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +7 -12
  95. mlrun/frameworks/_ml_common/plan.py +1 -1
  96. mlrun/frameworks/auto_mlrun/auto_mlrun.py +2 -2
  97. mlrun/frameworks/lgbm/__init__.py +1 -1
  98. mlrun/frameworks/lgbm/callbacks/callback.py +2 -4
  99. mlrun/frameworks/lgbm/model_handler.py +1 -1
  100. mlrun/frameworks/parallel_coordinates.py +4 -4
  101. mlrun/frameworks/pytorch/__init__.py +2 -2
  102. mlrun/frameworks/sklearn/__init__.py +1 -1
  103. mlrun/frameworks/sklearn/mlrun_interface.py +13 -3
  104. mlrun/frameworks/tf_keras/__init__.py +5 -2
  105. mlrun/frameworks/tf_keras/callbacks/logging_callback.py +1 -1
  106. mlrun/frameworks/tf_keras/mlrun_interface.py +2 -2
  107. mlrun/frameworks/xgboost/__init__.py +1 -1
  108. mlrun/k8s_utils.py +57 -12
  109. mlrun/launcher/__init__.py +1 -1
  110. mlrun/launcher/base.py +6 -5
  111. mlrun/launcher/client.py +13 -11
  112. mlrun/launcher/factory.py +1 -1
  113. mlrun/launcher/local.py +15 -5
  114. mlrun/launcher/remote.py +10 -3
  115. mlrun/lists.py +6 -2
  116. mlrun/model.py +297 -48
  117. mlrun/model_monitoring/__init__.py +1 -1
  118. mlrun/model_monitoring/api.py +152 -357
  119. mlrun/model_monitoring/applications/__init__.py +10 -0
  120. mlrun/model_monitoring/applications/_application_steps.py +190 -0
  121. mlrun/model_monitoring/applications/base.py +108 -0
  122. mlrun/model_monitoring/applications/context.py +341 -0
  123. mlrun/model_monitoring/{evidently_application.py → applications/evidently_base.py} +27 -22
  124. mlrun/model_monitoring/applications/histogram_data_drift.py +227 -91
  125. mlrun/model_monitoring/applications/results.py +99 -0
  126. mlrun/model_monitoring/controller.py +130 -303
  127. mlrun/model_monitoring/{stores/models/sqlite.py → db/__init__.py} +5 -10
  128. mlrun/model_monitoring/db/stores/__init__.py +136 -0
  129. mlrun/model_monitoring/db/stores/base/__init__.py +15 -0
  130. mlrun/model_monitoring/db/stores/base/store.py +213 -0
  131. mlrun/model_monitoring/db/stores/sqldb/__init__.py +13 -0
  132. mlrun/model_monitoring/db/stores/sqldb/models/__init__.py +71 -0
  133. mlrun/model_monitoring/db/stores/sqldb/models/base.py +190 -0
  134. mlrun/model_monitoring/db/stores/sqldb/models/mysql.py +103 -0
  135. mlrun/model_monitoring/{stores/models/mysql.py → db/stores/sqldb/models/sqlite.py} +19 -13
  136. mlrun/model_monitoring/db/stores/sqldb/sql_store.py +659 -0
  137. mlrun/model_monitoring/db/stores/v3io_kv/__init__.py +13 -0
  138. mlrun/model_monitoring/db/stores/v3io_kv/kv_store.py +726 -0
  139. mlrun/model_monitoring/db/tsdb/__init__.py +105 -0
  140. mlrun/model_monitoring/db/tsdb/base.py +448 -0
  141. mlrun/model_monitoring/db/tsdb/helpers.py +30 -0
  142. mlrun/model_monitoring/db/tsdb/tdengine/__init__.py +15 -0
  143. mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +298 -0
  144. mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py +42 -0
  145. mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +522 -0
  146. mlrun/model_monitoring/db/tsdb/v3io/__init__.py +15 -0
  147. mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py +158 -0
  148. mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +849 -0
  149. mlrun/model_monitoring/features_drift_table.py +34 -22
  150. mlrun/model_monitoring/helpers.py +177 -39
  151. mlrun/model_monitoring/model_endpoint.py +3 -2
  152. mlrun/model_monitoring/stream_processing.py +165 -398
  153. mlrun/model_monitoring/tracking_policy.py +7 -1
  154. mlrun/model_monitoring/writer.py +161 -125
  155. mlrun/package/packagers/default_packager.py +2 -2
  156. mlrun/package/packagers_manager.py +1 -0
  157. mlrun/package/utils/_formatter.py +2 -2
  158. mlrun/platforms/__init__.py +11 -10
  159. mlrun/platforms/iguazio.py +67 -228
  160. mlrun/projects/__init__.py +6 -1
  161. mlrun/projects/operations.py +47 -20
  162. mlrun/projects/pipelines.py +396 -249
  163. mlrun/projects/project.py +1125 -414
  164. mlrun/render.py +28 -22
  165. mlrun/run.py +207 -180
  166. mlrun/runtimes/__init__.py +76 -11
  167. mlrun/runtimes/base.py +40 -14
  168. mlrun/runtimes/daskjob.py +9 -2
  169. mlrun/runtimes/databricks_job/databricks_runtime.py +1 -0
  170. mlrun/runtimes/databricks_job/databricks_wrapper.py +1 -1
  171. mlrun/runtimes/funcdoc.py +1 -29
  172. mlrun/runtimes/kubejob.py +34 -128
  173. mlrun/runtimes/local.py +39 -10
  174. mlrun/runtimes/mpijob/__init__.py +0 -20
  175. mlrun/runtimes/mpijob/abstract.py +8 -8
  176. mlrun/runtimes/mpijob/v1.py +1 -1
  177. mlrun/runtimes/nuclio/api_gateway.py +646 -177
  178. mlrun/runtimes/nuclio/application/__init__.py +15 -0
  179. mlrun/runtimes/nuclio/application/application.py +758 -0
  180. mlrun/runtimes/nuclio/application/reverse_proxy.go +95 -0
  181. mlrun/runtimes/nuclio/function.py +188 -68
  182. mlrun/runtimes/nuclio/serving.py +57 -60
  183. mlrun/runtimes/pod.py +191 -58
  184. mlrun/runtimes/remotesparkjob.py +11 -8
  185. mlrun/runtimes/sparkjob/spark3job.py +17 -18
  186. mlrun/runtimes/utils.py +40 -73
  187. mlrun/secrets.py +6 -2
  188. mlrun/serving/__init__.py +8 -1
  189. mlrun/serving/remote.py +2 -3
  190. mlrun/serving/routers.py +89 -64
  191. mlrun/serving/server.py +54 -26
  192. mlrun/serving/states.py +187 -56
  193. mlrun/serving/utils.py +19 -11
  194. mlrun/serving/v2_serving.py +136 -63
  195. mlrun/track/tracker.py +2 -1
  196. mlrun/track/trackers/mlflow_tracker.py +5 -0
  197. mlrun/utils/async_http.py +26 -6
  198. mlrun/utils/db.py +18 -0
  199. mlrun/utils/helpers.py +375 -105
  200. mlrun/utils/http.py +2 -2
  201. mlrun/utils/logger.py +75 -9
  202. mlrun/utils/notifications/notification/__init__.py +14 -10
  203. mlrun/utils/notifications/notification/base.py +48 -0
  204. mlrun/utils/notifications/notification/console.py +2 -0
  205. mlrun/utils/notifications/notification/git.py +24 -1
  206. mlrun/utils/notifications/notification/ipython.py +2 -0
  207. mlrun/utils/notifications/notification/slack.py +96 -21
  208. mlrun/utils/notifications/notification/webhook.py +63 -2
  209. mlrun/utils/notifications/notification_pusher.py +146 -16
  210. mlrun/utils/regex.py +9 -0
  211. mlrun/utils/retryer.py +3 -2
  212. mlrun/utils/v3io_clients.py +2 -3
  213. mlrun/utils/version/version.json +2 -2
  214. mlrun-1.7.2.dist-info/METADATA +390 -0
  215. mlrun-1.7.2.dist-info/RECORD +351 -0
  216. {mlrun-1.7.0rc5.dist-info → mlrun-1.7.2.dist-info}/WHEEL +1 -1
  217. mlrun/feature_store/retrieval/conversion.py +0 -271
  218. mlrun/kfpops.py +0 -868
  219. mlrun/model_monitoring/application.py +0 -310
  220. mlrun/model_monitoring/batch.py +0 -974
  221. mlrun/model_monitoring/controller_handler.py +0 -37
  222. mlrun/model_monitoring/prometheus.py +0 -216
  223. mlrun/model_monitoring/stores/__init__.py +0 -111
  224. mlrun/model_monitoring/stores/kv_model_endpoint_store.py +0 -574
  225. mlrun/model_monitoring/stores/model_endpoint_store.py +0 -145
  226. mlrun/model_monitoring/stores/models/__init__.py +0 -27
  227. mlrun/model_monitoring/stores/models/base.py +0 -84
  228. mlrun/model_monitoring/stores/sql_model_endpoint_store.py +0 -382
  229. mlrun/platforms/other.py +0 -305
  230. mlrun-1.7.0rc5.dist-info/METADATA +0 -269
  231. mlrun-1.7.0rc5.dist-info/RECORD +0 -323
  232. {mlrun-1.7.0rc5.dist-info → mlrun-1.7.2.dist-info}/LICENSE +0 -0
  233. {mlrun-1.7.0rc5.dist-info → mlrun-1.7.2.dist-info}/entry_points.txt +0 -0
  234. {mlrun-1.7.0rc5.dist-info → mlrun-1.7.2.dist-info}/top_level.txt +0 -0
mlrun/db/nopdb.py CHANGED
@@ -16,8 +16,12 @@
16
16
  import datetime
17
17
  from typing import Optional, Union
18
18
 
19
+ import mlrun.alerts
20
+ import mlrun.common.formatters
21
+ import mlrun.common.runtimes.constants
19
22
  import mlrun.common.schemas
20
23
  import mlrun.errors
24
+ import mlrun.lists
21
25
 
22
26
  from ..config import config
23
27
  from ..utils import logger
@@ -70,7 +74,29 @@ class NopDB(RunDBInterface):
70
74
  def abort_run(self, uid, project="", iter=0, timeout=45, status_text=""):
71
75
  pass
72
76
 
73
- def read_run(self, uid, project="", iter=0):
77
+ def list_runtime_resources(
78
+ self,
79
+ project: Optional[str] = None,
80
+ label_selector: Optional[str] = None,
81
+ kind: Optional[str] = None,
82
+ object_id: Optional[str] = None,
83
+ group_by: Optional[
84
+ mlrun.common.schemas.ListRuntimeResourcesGroupByField
85
+ ] = None,
86
+ ) -> Union[
87
+ mlrun.common.schemas.RuntimeResourcesOutput,
88
+ mlrun.common.schemas.GroupedByJobRuntimeResourcesOutput,
89
+ mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput,
90
+ ]:
91
+ return []
92
+
93
+ def read_run(
94
+ self,
95
+ uid,
96
+ project="",
97
+ iter=0,
98
+ format_: mlrun.common.formatters.RunFormat = mlrun.common.formatters.RunFormat.full,
99
+ ):
74
100
  pass
75
101
 
76
102
  def list_runs(
@@ -79,7 +105,10 @@ class NopDB(RunDBInterface):
79
105
  uid: Optional[Union[str, list[str]]] = None,
80
106
  project: Optional[str] = None,
81
107
  labels: Optional[Union[str, list[str]]] = None,
82
- state: Optional[str] = None,
108
+ state: Optional[
109
+ mlrun.common.runtimes.constants.RunStates
110
+ ] = None, # Backward compatibility
111
+ states: Optional[list[mlrun.common.runtimes.constants.RunStates]] = None,
83
112
  sort: bool = True,
84
113
  last: int = 0,
85
114
  iter: bool = False,
@@ -96,7 +125,7 @@ class NopDB(RunDBInterface):
96
125
  max_partitions: int = 0,
97
126
  with_notifications: bool = False,
98
127
  ):
99
- pass
128
+ return mlrun.lists.RunList()
100
129
 
101
130
  def del_run(self, uid, project="", iter=0):
102
131
  pass
@@ -109,7 +138,16 @@ class NopDB(RunDBInterface):
109
138
  ):
110
139
  pass
111
140
 
112
- def read_artifact(self, key, tag="", iter=None, project="", tree=None, uid=None):
141
+ def read_artifact(
142
+ self,
143
+ key,
144
+ tag="",
145
+ iter=None,
146
+ project="",
147
+ tree=None,
148
+ uid=None,
149
+ format_: mlrun.common.formatters.ArtifactFormat = mlrun.common.formatters.ArtifactFormat.full,
150
+ ):
113
151
  pass
114
152
 
115
153
  def list_artifacts(
@@ -125,10 +163,24 @@ class NopDB(RunDBInterface):
125
163
  kind: str = None,
126
164
  category: Union[str, mlrun.common.schemas.ArtifactCategories] = None,
127
165
  tree: str = None,
166
+ format_: mlrun.common.formatters.ArtifactFormat = mlrun.common.formatters.ArtifactFormat.full,
167
+ limit: int = None,
128
168
  ):
129
- pass
169
+ return mlrun.lists.ArtifactList()
130
170
 
131
- def del_artifact(self, key, tag="", project="", tree=None, uid=None):
171
+ def del_artifact(
172
+ self,
173
+ key,
174
+ tag="",
175
+ project="",
176
+ tree=None,
177
+ uid=None,
178
+ deletion_strategy: mlrun.common.schemas.artifact.ArtifactsDeletionStrategies = (
179
+ mlrun.common.schemas.artifact.ArtifactsDeletionStrategies.metadata_only
180
+ ),
181
+ secrets: dict = None,
182
+ iter=None,
183
+ ):
132
184
  pass
133
185
 
134
186
  def del_artifacts(self, name="", project="", tag="", labels=None):
@@ -143,8 +195,10 @@ class NopDB(RunDBInterface):
143
195
  def delete_function(self, name: str, project: str = ""):
144
196
  pass
145
197
 
146
- def list_functions(self, name=None, project="", tag="", labels=None):
147
- pass
198
+ def list_functions(
199
+ self, name=None, project="", tag="", labels=None, since=None, until=None
200
+ ):
201
+ return []
148
202
 
149
203
  def tag_objects(
150
204
  self,
@@ -196,7 +250,7 @@ class NopDB(RunDBInterface):
196
250
  def list_projects(
197
251
  self,
198
252
  owner: str = None,
199
- format_: mlrun.common.schemas.ProjectsFormat = mlrun.common.schemas.ProjectsFormat.name_only,
253
+ format_: mlrun.common.formatters.ProjectFormat = mlrun.common.formatters.ProjectFormat.name_only,
200
254
  labels: list[str] = None,
201
255
  state: mlrun.common.schemas.ProjectState = None,
202
256
  ) -> mlrun.common.schemas.ProjectsOutput:
@@ -235,11 +289,26 @@ class NopDB(RunDBInterface):
235
289
  ) -> mlrun.common.schemas.FeaturesOutput:
236
290
  pass
237
291
 
292
+ def list_features_v2(
293
+ self,
294
+ project: str,
295
+ name: str = None,
296
+ tag: str = None,
297
+ entities: list[str] = None,
298
+ labels: list[str] = None,
299
+ ) -> mlrun.common.schemas.FeaturesOutputV2:
300
+ pass
301
+
238
302
  def list_entities(
239
303
  self, project: str, name: str = None, tag: str = None, labels: list[str] = None
240
304
  ) -> mlrun.common.schemas.EntitiesOutput:
241
305
  pass
242
306
 
307
+ def list_entities_v2(
308
+ self, project: str, name: str = None, tag: str = None, labels: list[str] = None
309
+ ) -> mlrun.common.schemas.EntitiesOutputV2:
310
+ pass
311
+
243
312
  def list_feature_sets(
244
313
  self,
245
314
  project: str = "",
@@ -257,6 +326,9 @@ class NopDB(RunDBInterface):
257
326
  partition_order: Union[
258
327
  mlrun.common.schemas.OrderType, str
259
328
  ] = mlrun.common.schemas.OrderType.desc,
329
+ format_: Union[
330
+ str, mlrun.common.formatters.FeatureSetFormat
331
+ ] = mlrun.common.formatters.FeatureSetFormat.full,
260
332
  ) -> list[dict]:
261
333
  pass
262
334
 
@@ -351,8 +423,8 @@ class NopDB(RunDBInterface):
351
423
  namespace: str = None,
352
424
  timeout: int = 30,
353
425
  format_: Union[
354
- str, mlrun.common.schemas.PipelinesFormat
355
- ] = mlrun.common.schemas.PipelinesFormat.summary,
426
+ str, mlrun.common.formatters.PipelineFormat
427
+ ] = mlrun.common.formatters.PipelineFormat.summary,
356
428
  project: str = None,
357
429
  ):
358
430
  pass
@@ -365,11 +437,11 @@ class NopDB(RunDBInterface):
365
437
  page_token: str = "",
366
438
  filter_: str = "",
367
439
  format_: Union[
368
- str, mlrun.common.schemas.PipelinesFormat
369
- ] = mlrun.common.schemas.PipelinesFormat.metadata_only,
440
+ str, mlrun.common.formatters.PipelineFormat
441
+ ] = mlrun.common.formatters.PipelineFormat.metadata_only,
370
442
  page_size: int = None,
371
443
  ) -> mlrun.common.schemas.PipelinesOutput:
372
- pass
444
+ return mlrun.common.schemas.PipelinesOutput(runs=[], total_size=0)
373
445
 
374
446
  def create_project_secrets(
375
447
  self,
@@ -508,8 +580,11 @@ class NopDB(RunDBInterface):
508
580
 
509
581
  def store_api_gateway(
510
582
  self,
511
- project: str,
512
- api_gateway: mlrun.runtimes.nuclio.APIGateway,
583
+ api_gateway: Union[
584
+ mlrun.common.schemas.APIGateway,
585
+ mlrun.runtimes.nuclio.api_gateway.APIGateway,
586
+ ],
587
+ project: str = None,
513
588
  ) -> mlrun.common.schemas.APIGateway:
514
589
  pass
515
590
 
@@ -519,12 +594,84 @@ class NopDB(RunDBInterface):
519
594
  def get_api_gateway(self, name, project=None):
520
595
  pass
521
596
 
597
+ def delete_api_gateway(self, name, project=None):
598
+ pass
599
+
522
600
  def verify_authorization(
523
601
  self,
524
602
  authorization_verification_input: mlrun.common.schemas.AuthorizationVerificationInput,
525
603
  ):
526
604
  pass
527
605
 
606
+ def remote_builder(
607
+ self,
608
+ func: "mlrun.runtimes.BaseRuntime",
609
+ with_mlrun: bool,
610
+ mlrun_version_specifier: Optional[str] = None,
611
+ skip_deployed: bool = False,
612
+ builder_env: Optional[dict] = None,
613
+ force_build: bool = False,
614
+ ):
615
+ pass
616
+
617
+ def deploy_nuclio_function(
618
+ self,
619
+ func: "mlrun.runtimes.RemoteRuntime",
620
+ builder_env: Optional[dict] = None,
621
+ ):
622
+ pass
623
+
624
+ def get_builder_status(
625
+ self,
626
+ func: "mlrun.runtimes.BaseRuntime",
627
+ offset: int = 0,
628
+ logs: bool = True,
629
+ last_log_timestamp: float = 0.0,
630
+ verbose: bool = False,
631
+ ):
632
+ pass
633
+
634
+ def get_nuclio_deploy_status(
635
+ self,
636
+ func: "mlrun.runtimes.RemoteRuntime",
637
+ last_log_timestamp: float = 0.0,
638
+ verbose: bool = False,
639
+ ):
640
+ pass
641
+
642
+ def set_run_notifications(
643
+ self,
644
+ project: str,
645
+ runs: list[mlrun.model.RunObject],
646
+ notifications: list[mlrun.model.Notification],
647
+ ):
648
+ pass
649
+
650
+ def store_run_notifications(
651
+ self,
652
+ notification_objects: list[mlrun.model.Notification],
653
+ run_uid: str,
654
+ project: str = None,
655
+ mask_params: bool = True,
656
+ ):
657
+ pass
658
+
659
+ def store_alert_notifications(
660
+ self,
661
+ session,
662
+ notification_objects: list[mlrun.model.Notification],
663
+ alert_id: str,
664
+ project: str,
665
+ mask_params: bool = True,
666
+ ):
667
+ pass
668
+
669
+ def get_log_size(self, uid, project=""):
670
+ pass
671
+
672
+ def watch_log(self, uid, project="", watch=True, offset=0):
673
+ pass
674
+
528
675
  def get_datastore_profile(
529
676
  self, name: str, project: str
530
677
  ) -> Optional[mlrun.common.schemas.DatastoreProfile]:
@@ -542,3 +689,108 @@ class NopDB(RunDBInterface):
542
689
  self, profile: mlrun.common.schemas.DatastoreProfile, project: str
543
690
  ):
544
691
  pass
692
+
693
+ def function_status(self, project, name, kind, selector):
694
+ pass
695
+
696
+ def start_function(
697
+ self, func_url: str = None, function: "mlrun.runtimes.BaseRuntime" = None
698
+ ):
699
+ pass
700
+
701
+ def submit_workflow(
702
+ self,
703
+ project: str,
704
+ name: str,
705
+ workflow_spec: Union[
706
+ "mlrun.projects.pipelines.WorkflowSpec",
707
+ "mlrun.common.schemas.WorkflowSpec",
708
+ dict,
709
+ ],
710
+ arguments: Optional[dict] = None,
711
+ artifact_path: Optional[str] = None,
712
+ source: Optional[str] = None,
713
+ run_name: Optional[str] = None,
714
+ namespace: Optional[str] = None,
715
+ notifications: list["mlrun.model.Notification"] = None,
716
+ ) -> "mlrun.common.schemas.WorkflowResponse":
717
+ pass
718
+
719
+ def update_model_monitoring_controller(
720
+ self,
721
+ project: str,
722
+ base_period: int = 10,
723
+ image: str = "mlrun/mlrun",
724
+ ):
725
+ pass
726
+
727
+ def enable_model_monitoring(
728
+ self,
729
+ project: str,
730
+ base_period: int = 10,
731
+ image: str = "mlrun/mlrun",
732
+ deploy_histogram_data_drift_app: bool = True,
733
+ rebuild_images: bool = False,
734
+ fetch_credentials_from_sys_config: bool = False,
735
+ ) -> None:
736
+ pass
737
+
738
+ def disable_model_monitoring(
739
+ self,
740
+ project: str,
741
+ delete_resources: bool = True,
742
+ delete_stream_function: bool = False,
743
+ delete_histogram_data_drift_app: bool = True,
744
+ delete_user_applications: bool = False,
745
+ user_application_list: list[str] = None,
746
+ ) -> bool:
747
+ pass
748
+
749
+ def delete_model_monitoring_function(
750
+ self, project: str, functions: list[str]
751
+ ) -> bool:
752
+ pass
753
+
754
+ def deploy_histogram_data_drift_app(
755
+ self, project: str, image: str = "mlrun/mlrun"
756
+ ) -> None:
757
+ pass
758
+
759
+ def set_model_monitoring_credentials(
760
+ self,
761
+ project: str,
762
+ credentials: dict[str, str],
763
+ replace_creds: bool,
764
+ ) -> None:
765
+ pass
766
+
767
+ def generate_event(
768
+ self, name: str, event_data: Union[dict, mlrun.common.schemas.Event], project=""
769
+ ):
770
+ pass
771
+
772
+ def store_alert_config(
773
+ self,
774
+ alert_name: str,
775
+ alert_data: Union[dict, mlrun.alerts.alert.AlertConfig],
776
+ project="",
777
+ ):
778
+ pass
779
+
780
+ def get_alert_config(self, alert_name: str, project=""):
781
+ pass
782
+
783
+ def list_alerts_configs(self, project=""):
784
+ pass
785
+
786
+ def delete_alert_config(self, alert_name: str, project=""):
787
+ pass
788
+
789
+ def reset_alert_config(self, alert_name: str, project=""):
790
+ pass
791
+
792
+ def get_alert_template(self, template_name: str):
793
+ pass
794
+
795
+ def list_alert_templates(self):
796
+ pass
mlrun/errors.py CHANGED
@@ -29,11 +29,14 @@ class MLRunBaseError(Exception):
29
29
  pass
30
30
 
31
31
 
32
- class MLRunTaskNotReady(MLRunBaseError):
32
+ class MLRunTaskNotReadyError(MLRunBaseError):
33
33
  """indicate we are trying to read a value which is not ready
34
34
  or need to come from a job which is in progress"""
35
35
 
36
36
 
37
+ MLRunTaskNotReady = MLRunTaskNotReadyError # kept for BC only
38
+
39
+
37
40
  class MLRunHTTPError(MLRunBaseError, requests.HTTPError):
38
41
  def __init__(
39
42
  self,
@@ -92,9 +95,7 @@ def raise_for_status(
92
95
  try:
93
96
  response.raise_for_status()
94
97
  except (requests.HTTPError, aiohttp.ClientResponseError) as exc:
95
- error_message = err_to_str(exc)
96
- if message:
97
- error_message = f"{error_message}: {message}"
98
+ error_message = err_to_str(exc) if not message else message
98
99
  status_code = (
99
100
  response.status_code
100
101
  if hasattr(response, "status_code")
@@ -139,7 +140,13 @@ def err_to_str(err):
139
140
  error_strings.append(err_msg)
140
141
  err = err.__cause__
141
142
 
142
- return ", caused by: ".join(error_strings)
143
+ err_msg = ", caused by: ".join(error_strings)
144
+
145
+ # in case the error string is longer than 32k, we truncate it
146
+ # the truncation takes the first 16k, then the last 16k characters
147
+ if len(err_msg) > 32_000:
148
+ err_msg = err_msg[:16_000] + "...truncated..." + err_msg[-16_000:]
149
+ return err_msg
143
150
 
144
151
 
145
152
  # Specific Errors
@@ -155,6 +162,10 @@ class MLRunNotFoundError(MLRunHTTPStatusError):
155
162
  error_status_code = HTTPStatus.NOT_FOUND.value
156
163
 
157
164
 
165
+ class MLRunPaginationEndOfResultsError(MLRunNotFoundError):
166
+ pass
167
+
168
+
158
169
  class MLRunBadRequestError(MLRunHTTPStatusError):
159
170
  error_status_code = HTTPStatus.BAD_REQUEST.value
160
171
 
@@ -183,6 +194,10 @@ class MLRunInternalServerError(MLRunHTTPStatusError):
183
194
  error_status_code = HTTPStatus.INTERNAL_SERVER_ERROR.value
184
195
 
185
196
 
197
+ class MLRunNotImplementedServerError(MLRunHTTPStatusError):
198
+ error_status_code = HTTPStatus.NOT_IMPLEMENTED.value
199
+
200
+
186
201
  class MLRunServiceUnavailableError(MLRunHTTPStatusError):
187
202
  error_status_code = HTTPStatus.SERVICE_UNAVAILABLE.value
188
203
 
@@ -199,6 +214,18 @@ class MLRunTimeoutError(MLRunHTTPStatusError, TimeoutError):
199
214
  error_status_code = HTTPStatus.GATEWAY_TIMEOUT.value
200
215
 
201
216
 
217
+ class MLRunInvalidMMStoreTypeError(MLRunHTTPStatusError, ValueError):
218
+ error_status_code = HTTPStatus.BAD_REQUEST.value
219
+
220
+
221
+ class MLRunStreamConnectionFailureError(MLRunHTTPStatusError, ValueError):
222
+ error_status_code = HTTPStatus.BAD_REQUEST.value
223
+
224
+
225
+ class MLRunTSDBConnectionFailureError(MLRunHTTPStatusError, ValueError):
226
+ error_status_code = HTTPStatus.BAD_REQUEST.value
227
+
228
+
202
229
  class MLRunRetryExhaustedError(Exception):
203
230
  pass
204
231
 
@@ -234,4 +261,7 @@ STATUS_ERRORS = {
234
261
  HTTPStatus.PRECONDITION_FAILED.value: MLRunPreconditionFailedError,
235
262
  HTTPStatus.INTERNAL_SERVER_ERROR.value: MLRunInternalServerError,
236
263
  HTTPStatus.SERVICE_UNAVAILABLE.value: MLRunServiceUnavailableError,
264
+ HTTPStatus.NOT_IMPLEMENTED.value: MLRunNotImplementedServerError,
237
265
  }
266
+
267
+ EXPECTED_ERRORS = (MLRunPaginationEndOfResultsError,)