mlrun 1.3.3rc1__py3-none-any.whl → 1.4.0__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 (444) hide show
  1. mlrun/__init__.py +3 -3
  2. mlrun/__main__.py +79 -37
  3. mlrun/api/__init__.py +1 -1
  4. mlrun/api/api/__init__.py +1 -1
  5. mlrun/api/api/api.py +4 -4
  6. mlrun/api/api/deps.py +10 -21
  7. mlrun/api/api/endpoints/__init__.py +1 -1
  8. mlrun/api/api/endpoints/artifacts.py +64 -36
  9. mlrun/api/api/endpoints/auth.py +4 -4
  10. mlrun/api/api/endpoints/background_tasks.py +11 -11
  11. mlrun/api/api/endpoints/client_spec.py +5 -5
  12. mlrun/api/api/endpoints/clusterization_spec.py +6 -4
  13. mlrun/api/api/endpoints/feature_store.py +124 -115
  14. mlrun/api/api/endpoints/files.py +22 -14
  15. mlrun/api/api/endpoints/frontend_spec.py +28 -21
  16. mlrun/api/api/endpoints/functions.py +142 -87
  17. mlrun/api/api/endpoints/grafana_proxy.py +89 -442
  18. mlrun/api/api/endpoints/healthz.py +20 -7
  19. mlrun/api/api/endpoints/hub.py +320 -0
  20. mlrun/api/api/endpoints/internal/__init__.py +1 -1
  21. mlrun/api/api/endpoints/internal/config.py +1 -1
  22. mlrun/api/api/endpoints/internal/memory_reports.py +9 -9
  23. mlrun/api/api/endpoints/logs.py +11 -11
  24. mlrun/api/api/endpoints/model_endpoints.py +74 -70
  25. mlrun/api/api/endpoints/operations.py +13 -9
  26. mlrun/api/api/endpoints/pipelines.py +93 -88
  27. mlrun/api/api/endpoints/projects.py +35 -35
  28. mlrun/api/api/endpoints/runs.py +69 -27
  29. mlrun/api/api/endpoints/runtime_resources.py +28 -28
  30. mlrun/api/api/endpoints/schedules.py +98 -41
  31. mlrun/api/api/endpoints/secrets.py +37 -32
  32. mlrun/api/api/endpoints/submit.py +12 -12
  33. mlrun/api/api/endpoints/tags.py +20 -22
  34. mlrun/api/api/utils.py +251 -42
  35. mlrun/api/constants.py +1 -1
  36. mlrun/api/crud/__init__.py +18 -15
  37. mlrun/api/crud/artifacts.py +10 -10
  38. mlrun/api/crud/client_spec.py +4 -4
  39. mlrun/api/crud/clusterization_spec.py +3 -3
  40. mlrun/api/crud/feature_store.py +54 -46
  41. mlrun/api/crud/functions.py +3 -3
  42. mlrun/api/crud/hub.py +312 -0
  43. mlrun/api/crud/logs.py +11 -9
  44. mlrun/api/crud/model_monitoring/__init__.py +3 -3
  45. mlrun/api/crud/model_monitoring/grafana.py +435 -0
  46. mlrun/api/crud/model_monitoring/model_endpoints.py +352 -129
  47. mlrun/api/crud/notifications.py +149 -0
  48. mlrun/api/crud/pipelines.py +67 -52
  49. mlrun/api/crud/projects.py +51 -23
  50. mlrun/api/crud/runs.py +7 -5
  51. mlrun/api/crud/runtime_resources.py +13 -13
  52. mlrun/api/{db/filedb → crud/runtimes}/__init__.py +1 -1
  53. mlrun/api/crud/runtimes/nuclio/__init__.py +14 -0
  54. mlrun/api/crud/runtimes/nuclio/function.py +505 -0
  55. mlrun/api/crud/runtimes/nuclio/helpers.py +310 -0
  56. mlrun/api/crud/secrets.py +88 -46
  57. mlrun/api/crud/tags.py +5 -5
  58. mlrun/api/db/__init__.py +1 -1
  59. mlrun/api/db/base.py +102 -54
  60. mlrun/api/db/init_db.py +2 -3
  61. mlrun/api/db/session.py +4 -12
  62. mlrun/api/db/sqldb/__init__.py +1 -1
  63. mlrun/api/db/sqldb/db.py +439 -196
  64. mlrun/api/db/sqldb/helpers.py +1 -1
  65. mlrun/api/db/sqldb/models/__init__.py +3 -3
  66. mlrun/api/db/sqldb/models/models_mysql.py +82 -64
  67. mlrun/api/db/sqldb/models/models_sqlite.py +76 -64
  68. mlrun/api/db/sqldb/session.py +27 -20
  69. mlrun/api/initial_data.py +82 -24
  70. mlrun/api/launcher.py +196 -0
  71. mlrun/api/main.py +91 -22
  72. mlrun/api/middlewares.py +6 -5
  73. mlrun/api/migrations_mysql/env.py +1 -1
  74. mlrun/api/migrations_mysql/versions/28383af526f3_market_place_to_hub.py +40 -0
  75. mlrun/api/migrations_mysql/versions/32bae1b0e29c_increase_timestamp_fields_precision.py +1 -1
  76. mlrun/api/migrations_mysql/versions/4903aef6a91d_tag_foreign_key_and_cascades.py +1 -1
  77. mlrun/api/migrations_mysql/versions/5f1351c88a19_adding_background_tasks_table.py +1 -1
  78. mlrun/api/migrations_mysql/versions/88e656800d6a_add_requested_logs_column_and_index_to_.py +1 -1
  79. mlrun/api/migrations_mysql/versions/9d16de5f03a7_adding_data_versions_table.py +1 -1
  80. mlrun/api/migrations_mysql/versions/b86f5b53f3d7_adding_name_and_updated_to_runs_table.py +1 -1
  81. mlrun/api/migrations_mysql/versions/c4af40b0bf61_init.py +1 -1
  82. mlrun/api/migrations_mysql/versions/c905d15bd91d_notifications.py +72 -0
  83. mlrun/api/migrations_mysql/versions/ee041e8fdaa0_adding_next_run_time_column_to_schedule_.py +1 -1
  84. mlrun/api/migrations_sqlite/env.py +1 -1
  85. mlrun/api/migrations_sqlite/versions/11f8dd2dc9fe_init.py +1 -1
  86. mlrun/api/migrations_sqlite/versions/1c954f8cb32d_schedule_last_run_uri.py +1 -1
  87. mlrun/api/migrations_sqlite/versions/2b6d23c715aa_adding_feature_sets.py +1 -1
  88. mlrun/api/migrations_sqlite/versions/4acd9430b093_market_place_to_hub.py +77 -0
  89. mlrun/api/migrations_sqlite/versions/6401142f2d7c_adding_next_run_time_column_to_schedule_.py +1 -1
  90. mlrun/api/migrations_sqlite/versions/64d90a1a69bc_adding_background_tasks_table.py +1 -1
  91. mlrun/api/migrations_sqlite/versions/803438ecd005_add_requested_logs_column_to_runs.py +1 -1
  92. mlrun/api/migrations_sqlite/versions/863114f0c659_refactoring_feature_set.py +1 -1
  93. mlrun/api/migrations_sqlite/versions/959ae00528ad_notifications.py +63 -0
  94. mlrun/api/migrations_sqlite/versions/accf9fc83d38_adding_data_versions_table.py +1 -1
  95. mlrun/api/migrations_sqlite/versions/b68e8e897a28_schedule_labels.py +1 -1
  96. mlrun/api/migrations_sqlite/versions/bcd0c1f9720c_adding_project_labels.py +1 -1
  97. mlrun/api/migrations_sqlite/versions/cf21882f938e_schedule_id.py +1 -1
  98. mlrun/api/migrations_sqlite/versions/d781f58f607f_tag_object_name_string.py +1 -1
  99. mlrun/api/migrations_sqlite/versions/deac06871ace_adding_marketplace_sources_table.py +1 -1
  100. mlrun/api/migrations_sqlite/versions/e1dd5983c06b_schedule_concurrency_limit.py +1 -1
  101. mlrun/api/migrations_sqlite/versions/e5594ed3ab53_adding_name_and_updated_to_runs_table.py +1 -1
  102. mlrun/api/migrations_sqlite/versions/f4249b4ba6fa_adding_feature_vectors.py +1 -1
  103. mlrun/api/migrations_sqlite/versions/f7b5a1a03629_adding_feature_labels.py +1 -1
  104. mlrun/api/schemas/__init__.py +216 -138
  105. mlrun/api/utils/__init__.py +1 -1
  106. mlrun/api/utils/asyncio.py +1 -1
  107. mlrun/api/utils/auth/__init__.py +1 -1
  108. mlrun/api/utils/auth/providers/__init__.py +1 -1
  109. mlrun/api/utils/auth/providers/base.py +7 -7
  110. mlrun/api/utils/auth/providers/nop.py +6 -7
  111. mlrun/api/utils/auth/providers/opa.py +17 -17
  112. mlrun/api/utils/auth/verifier.py +36 -34
  113. mlrun/api/utils/background_tasks.py +24 -24
  114. mlrun/{builder.py → api/utils/builder.py} +216 -123
  115. mlrun/api/utils/clients/__init__.py +1 -1
  116. mlrun/api/utils/clients/chief.py +19 -4
  117. mlrun/api/utils/clients/iguazio.py +106 -60
  118. mlrun/api/utils/clients/log_collector.py +1 -1
  119. mlrun/api/utils/clients/nuclio.py +23 -23
  120. mlrun/api/utils/clients/protocols/grpc.py +2 -2
  121. mlrun/api/utils/db/__init__.py +1 -1
  122. mlrun/api/utils/db/alembic.py +1 -1
  123. mlrun/api/utils/db/backup.py +1 -1
  124. mlrun/api/utils/db/mysql.py +24 -25
  125. mlrun/api/utils/db/sql_collation.py +1 -1
  126. mlrun/api/utils/db/sqlite_migration.py +2 -2
  127. mlrun/api/utils/events/__init__.py +14 -0
  128. mlrun/api/utils/events/base.py +57 -0
  129. mlrun/api/utils/events/events_factory.py +41 -0
  130. mlrun/api/utils/events/iguazio.py +217 -0
  131. mlrun/api/utils/events/nop.py +55 -0
  132. mlrun/api/utils/helpers.py +16 -13
  133. mlrun/api/utils/memory_reports.py +1 -1
  134. mlrun/api/utils/periodic.py +6 -3
  135. mlrun/api/utils/projects/__init__.py +1 -1
  136. mlrun/api/utils/projects/follower.py +33 -33
  137. mlrun/api/utils/projects/leader.py +36 -34
  138. mlrun/api/utils/projects/member.py +27 -27
  139. mlrun/api/utils/projects/remotes/__init__.py +1 -1
  140. mlrun/api/utils/projects/remotes/follower.py +13 -13
  141. mlrun/api/utils/projects/remotes/leader.py +10 -10
  142. mlrun/api/utils/projects/remotes/nop_follower.py +27 -21
  143. mlrun/api/utils/projects/remotes/nop_leader.py +17 -16
  144. mlrun/api/utils/scheduler.py +140 -51
  145. mlrun/api/utils/singletons/__init__.py +1 -1
  146. mlrun/api/utils/singletons/db.py +9 -15
  147. mlrun/api/utils/singletons/k8s.py +677 -5
  148. mlrun/api/utils/singletons/logs_dir.py +1 -1
  149. mlrun/api/utils/singletons/project_member.py +1 -1
  150. mlrun/api/utils/singletons/scheduler.py +1 -1
  151. mlrun/artifacts/__init__.py +2 -2
  152. mlrun/artifacts/base.py +8 -2
  153. mlrun/artifacts/dataset.py +5 -3
  154. mlrun/artifacts/manager.py +7 -1
  155. mlrun/artifacts/model.py +15 -4
  156. mlrun/artifacts/plots.py +1 -1
  157. mlrun/common/__init__.py +1 -1
  158. mlrun/common/constants.py +15 -0
  159. mlrun/common/model_monitoring.py +209 -0
  160. mlrun/common/schemas/__init__.py +167 -0
  161. mlrun/{api → common}/schemas/artifact.py +13 -14
  162. mlrun/{api → common}/schemas/auth.py +10 -8
  163. mlrun/{api → common}/schemas/background_task.py +3 -3
  164. mlrun/{api → common}/schemas/client_spec.py +1 -1
  165. mlrun/{api → common}/schemas/clusterization_spec.py +3 -3
  166. mlrun/{api → common}/schemas/constants.py +21 -8
  167. mlrun/common/schemas/events.py +36 -0
  168. mlrun/{api → common}/schemas/feature_store.py +2 -1
  169. mlrun/{api → common}/schemas/frontend_spec.py +7 -6
  170. mlrun/{api → common}/schemas/function.py +5 -5
  171. mlrun/{api → common}/schemas/http.py +3 -3
  172. mlrun/common/schemas/hub.py +134 -0
  173. mlrun/{api → common}/schemas/k8s.py +3 -3
  174. mlrun/{api → common}/schemas/memory_reports.py +1 -1
  175. mlrun/common/schemas/model_endpoints.py +342 -0
  176. mlrun/common/schemas/notification.py +57 -0
  177. mlrun/{api → common}/schemas/object.py +6 -6
  178. mlrun/{api → common}/schemas/pipeline.py +3 -3
  179. mlrun/{api → common}/schemas/project.py +6 -5
  180. mlrun/common/schemas/regex.py +24 -0
  181. mlrun/common/schemas/runs.py +30 -0
  182. mlrun/{api → common}/schemas/runtime_resource.py +3 -3
  183. mlrun/{api → common}/schemas/schedule.py +19 -7
  184. mlrun/{api → common}/schemas/secret.py +3 -3
  185. mlrun/{api → common}/schemas/tag.py +2 -2
  186. mlrun/common/types.py +25 -0
  187. mlrun/config.py +152 -20
  188. mlrun/data_types/__init__.py +7 -2
  189. mlrun/data_types/data_types.py +4 -2
  190. mlrun/data_types/infer.py +1 -1
  191. mlrun/data_types/spark.py +10 -3
  192. mlrun/datastore/__init__.py +10 -3
  193. mlrun/datastore/azure_blob.py +1 -1
  194. mlrun/datastore/base.py +185 -53
  195. mlrun/datastore/datastore.py +1 -1
  196. mlrun/datastore/filestore.py +1 -1
  197. mlrun/datastore/google_cloud_storage.py +1 -1
  198. mlrun/datastore/inmem.py +4 -1
  199. mlrun/datastore/redis.py +1 -1
  200. mlrun/datastore/s3.py +1 -1
  201. mlrun/datastore/sources.py +192 -70
  202. mlrun/datastore/spark_udf.py +44 -0
  203. mlrun/datastore/store_resources.py +4 -4
  204. mlrun/datastore/targets.py +115 -45
  205. mlrun/datastore/utils.py +127 -5
  206. mlrun/datastore/v3io.py +1 -1
  207. mlrun/datastore/wasbfs/__init__.py +1 -1
  208. mlrun/datastore/wasbfs/fs.py +1 -1
  209. mlrun/db/__init__.py +7 -5
  210. mlrun/db/base.py +112 -68
  211. mlrun/db/httpdb.py +445 -277
  212. mlrun/db/nopdb.py +491 -0
  213. mlrun/db/sqldb.py +112 -65
  214. mlrun/errors.py +6 -1
  215. mlrun/execution.py +44 -22
  216. mlrun/feature_store/__init__.py +1 -1
  217. mlrun/feature_store/api.py +143 -95
  218. mlrun/feature_store/common.py +16 -20
  219. mlrun/feature_store/feature_set.py +42 -12
  220. mlrun/feature_store/feature_vector.py +32 -21
  221. mlrun/feature_store/ingestion.py +9 -12
  222. mlrun/feature_store/retrieval/__init__.py +3 -2
  223. mlrun/feature_store/retrieval/base.py +388 -66
  224. mlrun/feature_store/retrieval/dask_merger.py +63 -151
  225. mlrun/feature_store/retrieval/job.py +30 -12
  226. mlrun/feature_store/retrieval/local_merger.py +40 -133
  227. mlrun/feature_store/retrieval/spark_merger.py +129 -127
  228. mlrun/feature_store/retrieval/storey_merger.py +173 -0
  229. mlrun/feature_store/steps.py +132 -15
  230. mlrun/features.py +8 -3
  231. mlrun/frameworks/__init__.py +1 -1
  232. mlrun/frameworks/_common/__init__.py +1 -1
  233. mlrun/frameworks/_common/artifacts_library.py +1 -1
  234. mlrun/frameworks/_common/mlrun_interface.py +1 -1
  235. mlrun/frameworks/_common/model_handler.py +1 -1
  236. mlrun/frameworks/_common/plan.py +1 -1
  237. mlrun/frameworks/_common/producer.py +1 -1
  238. mlrun/frameworks/_common/utils.py +1 -1
  239. mlrun/frameworks/_dl_common/__init__.py +1 -1
  240. mlrun/frameworks/_dl_common/loggers/__init__.py +1 -1
  241. mlrun/frameworks/_dl_common/loggers/logger.py +1 -1
  242. mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +1 -1
  243. mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +1 -1
  244. mlrun/frameworks/_dl_common/model_handler.py +1 -1
  245. mlrun/frameworks/_dl_common/utils.py +1 -1
  246. mlrun/frameworks/_ml_common/__init__.py +1 -1
  247. mlrun/frameworks/_ml_common/artifacts_library.py +1 -1
  248. mlrun/frameworks/_ml_common/loggers/__init__.py +1 -1
  249. mlrun/frameworks/_ml_common/loggers/logger.py +1 -1
  250. mlrun/frameworks/_ml_common/loggers/mlrun_logger.py +1 -1
  251. mlrun/frameworks/_ml_common/model_handler.py +1 -1
  252. mlrun/frameworks/_ml_common/pkl_model_server.py +13 -1
  253. mlrun/frameworks/_ml_common/plan.py +1 -1
  254. mlrun/frameworks/_ml_common/plans/__init__.py +1 -1
  255. mlrun/frameworks/_ml_common/plans/calibration_curve_plan.py +1 -6
  256. mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +1 -1
  257. mlrun/frameworks/_ml_common/plans/dataset_plan.py +1 -1
  258. mlrun/frameworks/_ml_common/plans/feature_importance_plan.py +1 -1
  259. mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +1 -1
  260. mlrun/frameworks/_ml_common/producer.py +1 -1
  261. mlrun/frameworks/_ml_common/utils.py +1 -1
  262. mlrun/frameworks/auto_mlrun/__init__.py +1 -1
  263. mlrun/frameworks/auto_mlrun/auto_mlrun.py +1 -1
  264. mlrun/frameworks/huggingface/__init__.py +1 -1
  265. mlrun/frameworks/huggingface/model_server.py +1 -1
  266. mlrun/frameworks/lgbm/__init__.py +1 -1
  267. mlrun/frameworks/lgbm/callbacks/__init__.py +1 -1
  268. mlrun/frameworks/lgbm/callbacks/callback.py +1 -1
  269. mlrun/frameworks/lgbm/callbacks/logging_callback.py +1 -1
  270. mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +1 -1
  271. mlrun/frameworks/lgbm/mlrun_interfaces/__init__.py +1 -1
  272. mlrun/frameworks/lgbm/mlrun_interfaces/booster_mlrun_interface.py +1 -1
  273. mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +1 -1
  274. mlrun/frameworks/lgbm/mlrun_interfaces/model_mlrun_interface.py +1 -1
  275. mlrun/frameworks/lgbm/model_handler.py +1 -1
  276. mlrun/frameworks/lgbm/model_server.py +1 -1
  277. mlrun/frameworks/lgbm/utils.py +1 -1
  278. mlrun/frameworks/onnx/__init__.py +1 -1
  279. mlrun/frameworks/onnx/dataset.py +1 -1
  280. mlrun/frameworks/onnx/mlrun_interface.py +1 -1
  281. mlrun/frameworks/onnx/model_handler.py +1 -1
  282. mlrun/frameworks/onnx/model_server.py +1 -1
  283. mlrun/frameworks/parallel_coordinates.py +1 -1
  284. mlrun/frameworks/pytorch/__init__.py +1 -1
  285. mlrun/frameworks/pytorch/callbacks/__init__.py +1 -1
  286. mlrun/frameworks/pytorch/callbacks/callback.py +1 -1
  287. mlrun/frameworks/pytorch/callbacks/logging_callback.py +1 -1
  288. mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +1 -1
  289. mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +1 -1
  290. mlrun/frameworks/pytorch/callbacks_handler.py +1 -1
  291. mlrun/frameworks/pytorch/mlrun_interface.py +1 -1
  292. mlrun/frameworks/pytorch/model_handler.py +1 -1
  293. mlrun/frameworks/pytorch/model_server.py +1 -1
  294. mlrun/frameworks/pytorch/utils.py +1 -1
  295. mlrun/frameworks/sklearn/__init__.py +1 -1
  296. mlrun/frameworks/sklearn/estimator.py +1 -1
  297. mlrun/frameworks/sklearn/metric.py +1 -1
  298. mlrun/frameworks/sklearn/metrics_library.py +1 -1
  299. mlrun/frameworks/sklearn/mlrun_interface.py +1 -1
  300. mlrun/frameworks/sklearn/model_handler.py +1 -1
  301. mlrun/frameworks/sklearn/utils.py +1 -1
  302. mlrun/frameworks/tf_keras/__init__.py +1 -1
  303. mlrun/frameworks/tf_keras/callbacks/__init__.py +1 -1
  304. mlrun/frameworks/tf_keras/callbacks/logging_callback.py +1 -1
  305. mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +1 -1
  306. mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +1 -1
  307. mlrun/frameworks/tf_keras/mlrun_interface.py +1 -1
  308. mlrun/frameworks/tf_keras/model_handler.py +1 -1
  309. mlrun/frameworks/tf_keras/model_server.py +1 -1
  310. mlrun/frameworks/tf_keras/utils.py +1 -1
  311. mlrun/frameworks/xgboost/__init__.py +1 -1
  312. mlrun/frameworks/xgboost/mlrun_interface.py +1 -1
  313. mlrun/frameworks/xgboost/model_handler.py +1 -1
  314. mlrun/frameworks/xgboost/utils.py +1 -1
  315. mlrun/k8s_utils.py +14 -765
  316. mlrun/kfpops.py +14 -17
  317. mlrun/launcher/__init__.py +13 -0
  318. mlrun/launcher/base.py +406 -0
  319. mlrun/launcher/client.py +159 -0
  320. mlrun/launcher/factory.py +50 -0
  321. mlrun/launcher/local.py +276 -0
  322. mlrun/launcher/remote.py +178 -0
  323. mlrun/lists.py +10 -2
  324. mlrun/mlutils/__init__.py +1 -1
  325. mlrun/mlutils/data.py +1 -1
  326. mlrun/mlutils/models.py +1 -1
  327. mlrun/mlutils/plots.py +1 -1
  328. mlrun/model.py +252 -14
  329. mlrun/model_monitoring/__init__.py +41 -0
  330. mlrun/model_monitoring/features_drift_table.py +1 -1
  331. mlrun/model_monitoring/helpers.py +123 -38
  332. mlrun/model_monitoring/model_endpoint.py +144 -0
  333. mlrun/model_monitoring/model_monitoring_batch.py +310 -259
  334. mlrun/model_monitoring/stores/__init__.py +106 -0
  335. mlrun/model_monitoring/stores/kv_model_endpoint_store.py +448 -0
  336. mlrun/model_monitoring/stores/model_endpoint_store.py +147 -0
  337. mlrun/model_monitoring/stores/models/__init__.py +23 -0
  338. mlrun/model_monitoring/stores/models/base.py +18 -0
  339. mlrun/model_monitoring/stores/models/mysql.py +100 -0
  340. mlrun/model_monitoring/stores/models/sqlite.py +98 -0
  341. mlrun/model_monitoring/stores/sql_model_endpoint_store.py +370 -0
  342. mlrun/model_monitoring/stream_processing_fs.py +239 -271
  343. mlrun/package/__init__.py +163 -0
  344. mlrun/package/context_handler.py +325 -0
  345. mlrun/package/errors.py +47 -0
  346. mlrun/package/packager.py +298 -0
  347. mlrun/{runtimes/package → package/packagers}/__init__.py +3 -1
  348. mlrun/package/packagers/default_packager.py +422 -0
  349. mlrun/package/packagers/numpy_packagers.py +612 -0
  350. mlrun/package/packagers/pandas_packagers.py +968 -0
  351. mlrun/package/packagers/python_standard_library_packagers.py +616 -0
  352. mlrun/package/packagers_manager.py +786 -0
  353. mlrun/package/utils/__init__.py +53 -0
  354. mlrun/package/utils/_archiver.py +226 -0
  355. mlrun/package/utils/_formatter.py +211 -0
  356. mlrun/package/utils/_pickler.py +234 -0
  357. mlrun/package/utils/_supported_format.py +71 -0
  358. mlrun/package/utils/log_hint_utils.py +93 -0
  359. mlrun/package/utils/type_hint_utils.py +298 -0
  360. mlrun/platforms/__init__.py +1 -1
  361. mlrun/platforms/iguazio.py +34 -2
  362. mlrun/platforms/other.py +1 -1
  363. mlrun/projects/__init__.py +1 -1
  364. mlrun/projects/operations.py +14 -9
  365. mlrun/projects/pipelines.py +31 -13
  366. mlrun/projects/project.py +762 -238
  367. mlrun/render.py +49 -19
  368. mlrun/run.py +57 -326
  369. mlrun/runtimes/__init__.py +3 -9
  370. mlrun/runtimes/base.py +247 -784
  371. mlrun/runtimes/constants.py +1 -1
  372. mlrun/runtimes/daskjob.py +45 -41
  373. mlrun/runtimes/funcdoc.py +43 -7
  374. mlrun/runtimes/function.py +66 -656
  375. mlrun/runtimes/function_reference.py +1 -1
  376. mlrun/runtimes/generators.py +1 -1
  377. mlrun/runtimes/kubejob.py +99 -116
  378. mlrun/runtimes/local.py +59 -66
  379. mlrun/runtimes/mpijob/__init__.py +1 -1
  380. mlrun/runtimes/mpijob/abstract.py +13 -15
  381. mlrun/runtimes/mpijob/v1.py +3 -1
  382. mlrun/runtimes/mpijob/v1alpha1.py +1 -1
  383. mlrun/runtimes/nuclio.py +1 -1
  384. mlrun/runtimes/pod.py +51 -26
  385. mlrun/runtimes/remotesparkjob.py +3 -1
  386. mlrun/runtimes/serving.py +12 -4
  387. mlrun/runtimes/sparkjob/__init__.py +1 -2
  388. mlrun/runtimes/sparkjob/abstract.py +44 -31
  389. mlrun/runtimes/sparkjob/spark3job.py +11 -9
  390. mlrun/runtimes/utils.py +61 -42
  391. mlrun/secrets.py +16 -18
  392. mlrun/serving/__init__.py +3 -2
  393. mlrun/serving/merger.py +1 -1
  394. mlrun/serving/remote.py +1 -1
  395. mlrun/serving/routers.py +39 -42
  396. mlrun/serving/server.py +23 -13
  397. mlrun/serving/serving_wrapper.py +1 -1
  398. mlrun/serving/states.py +172 -39
  399. mlrun/serving/utils.py +1 -1
  400. mlrun/serving/v1_serving.py +1 -1
  401. mlrun/serving/v2_serving.py +29 -21
  402. mlrun/utils/__init__.py +1 -2
  403. mlrun/utils/async_http.py +8 -1
  404. mlrun/utils/azure_vault.py +1 -1
  405. mlrun/utils/clones.py +2 -2
  406. mlrun/utils/condition_evaluator.py +65 -0
  407. mlrun/utils/db.py +52 -0
  408. mlrun/utils/helpers.py +188 -13
  409. mlrun/utils/http.py +89 -54
  410. mlrun/utils/logger.py +48 -8
  411. mlrun/utils/model_monitoring.py +132 -100
  412. mlrun/utils/notifications/__init__.py +1 -1
  413. mlrun/utils/notifications/notification/__init__.py +8 -6
  414. mlrun/utils/notifications/notification/base.py +20 -14
  415. mlrun/utils/notifications/notification/console.py +7 -4
  416. mlrun/utils/notifications/notification/git.py +36 -19
  417. mlrun/utils/notifications/notification/ipython.py +10 -8
  418. mlrun/utils/notifications/notification/slack.py +18 -13
  419. mlrun/utils/notifications/notification_pusher.py +377 -56
  420. mlrun/utils/regex.py +6 -1
  421. mlrun/utils/singleton.py +1 -1
  422. mlrun/utils/v3io_clients.py +1 -1
  423. mlrun/utils/vault.py +270 -269
  424. mlrun/utils/version/__init__.py +1 -1
  425. mlrun/utils/version/version.json +2 -2
  426. mlrun/utils/version/version.py +1 -1
  427. {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/METADATA +16 -10
  428. mlrun-1.4.0.dist-info/RECORD +434 -0
  429. mlrun/api/api/endpoints/marketplace.py +0 -257
  430. mlrun/api/crud/marketplace.py +0 -221
  431. mlrun/api/crud/model_monitoring/model_endpoint_store.py +0 -847
  432. mlrun/api/db/filedb/db.py +0 -518
  433. mlrun/api/schemas/marketplace.py +0 -128
  434. mlrun/api/schemas/model_endpoints.py +0 -185
  435. mlrun/db/filedb.py +0 -891
  436. mlrun/feature_store/retrieval/online.py +0 -92
  437. mlrun/model_monitoring/constants.py +0 -67
  438. mlrun/runtimes/package/context_handler.py +0 -711
  439. mlrun/runtimes/sparkjob/spark2job.py +0 -59
  440. mlrun-1.3.3rc1.dist-info/RECORD +0 -381
  441. {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/LICENSE +0 -0
  442. {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/WHEEL +0 -0
  443. {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/entry_points.txt +0 -0
  444. {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/top_level.txt +0 -0
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Iguazio
1
+ # Copyright 2023 Iguazio
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -24,28 +24,28 @@ from sqlalchemy.orm import Session
24
24
 
25
25
  import mlrun.api.api.deps
26
26
  import mlrun.api.crud
27
- import mlrun.api.schemas
28
27
  import mlrun.api.utils.auth.verifier
28
+ import mlrun.common.schemas
29
29
  from mlrun.errors import MLRunConflictError
30
30
 
31
- router = APIRouter()
31
+ router = APIRouter(prefix="/projects/{project}/model-endpoints")
32
32
 
33
33
 
34
34
  @router.put(
35
- "/projects/{project}/model-endpoints/{endpoint_id}",
36
- status_code=HTTPStatus.NO_CONTENT.value,
35
+ "/{endpoint_id}",
36
+ response_model=mlrun.common.schemas.ModelEndpoint,
37
37
  )
38
38
  async def create_or_patch(
39
39
  project: str,
40
40
  endpoint_id: str,
41
- model_endpoint: mlrun.api.schemas.ModelEndpoint,
42
- auth_info: mlrun.api.schemas.AuthInfo = Depends(
41
+ model_endpoint: mlrun.common.schemas.ModelEndpoint,
42
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(
43
43
  mlrun.api.api.deps.authenticate_request
44
44
  ),
45
45
  db_session: Session = Depends(mlrun.api.api.deps.get_db_session),
46
- ):
46
+ ) -> mlrun.common.schemas.ModelEndpoint:
47
47
  """
48
- Either create or updates the record of a given ModelEndpoint object.
48
+ Either create or update the record of a given `ModelEndpoint` object.
49
49
  Leaving here for backwards compatibility.
50
50
  """
51
51
 
@@ -57,10 +57,10 @@ async def create_or_patch(
57
57
  )
58
58
 
59
59
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
60
- mlrun.api.schemas.AuthorizationResourceTypes.model_endpoint,
60
+ mlrun.common.schemas.AuthorizationResourceTypes.model_endpoint,
61
61
  project,
62
62
  endpoint_id,
63
- mlrun.api.schemas.AuthorizationAction.store,
63
+ mlrun.common.schemas.AuthorizationAction.store,
64
64
  auth_info,
65
65
  )
66
66
  # get_access_key will validate the needed auth (which is used later) exists in the request
@@ -76,7 +76,7 @@ async def create_or_patch(
76
76
  )
77
77
  # Since the endpoint records are created automatically, at point of serving function deployment, we need to use
78
78
  # V3IO_ACCESS_KEY here
79
- await run_in_threadpool(
79
+ return await run_in_threadpool(
80
80
  mlrun.api.crud.ModelEndpoints().create_or_patch,
81
81
  db_session=db_session,
82
82
  access_key=os.environ.get("V3IO_ACCESS_KEY"),
@@ -86,20 +86,20 @@ async def create_or_patch(
86
86
 
87
87
 
88
88
  @router.post(
89
- "/projects/{project}/model-endpoints/{endpoint_id}",
90
- response_model=mlrun.api.schemas.ModelEndpoint,
89
+ "/{endpoint_id}",
90
+ response_model=mlrun.common.schemas.ModelEndpoint,
91
91
  )
92
92
  async def create_model_endpoint(
93
93
  project: str,
94
94
  endpoint_id: str,
95
- model_endpoint: mlrun.api.schemas.ModelEndpoint,
96
- auth_info: mlrun.api.schemas.AuthInfo = Depends(
95
+ model_endpoint: mlrun.common.schemas.ModelEndpoint,
96
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(
97
97
  mlrun.api.api.deps.authenticate_request
98
98
  ),
99
99
  db_session: Session = Depends(mlrun.api.api.deps.get_db_session),
100
- ) -> mlrun.api.schemas.ModelEndpoint:
100
+ ) -> mlrun.common.schemas.ModelEndpoint:
101
101
  """
102
- Create a DB record of a given ModelEndpoint object.
102
+ Create a DB record of a given `ModelEndpoint` object.
103
103
 
104
104
  :param project: The name of the project.
105
105
  :param endpoint_id: The unique id of the model endpoint.
@@ -111,11 +111,12 @@ async def create_model_endpoint(
111
111
 
112
112
  :return: A Model endpoint object.
113
113
  """
114
+
114
115
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
115
- resource_type=mlrun.api.schemas.AuthorizationResourceTypes.model_endpoint,
116
+ resource_type=mlrun.common.schemas.AuthorizationResourceTypes.model_endpoint,
116
117
  project_name=project,
117
118
  resource_name=endpoint_id,
118
- action=mlrun.api.schemas.AuthorizationAction.store,
119
+ action=mlrun.common.schemas.AuthorizationAction.store,
119
120
  auth_info=auth_info,
120
121
  )
121
122
 
@@ -137,26 +138,25 @@ async def create_model_endpoint(
137
138
 
138
139
 
139
140
  @router.patch(
140
- "/projects/{project}/model-endpoints/{endpoint_id}",
141
- response_model=mlrun.api.schemas.ModelEndpoint,
141
+ "/{endpoint_id}",
142
+ response_model=mlrun.common.schemas.ModelEndpoint,
142
143
  )
143
144
  async def patch_model_endpoint(
144
145
  project: str,
145
146
  endpoint_id: str,
146
147
  attributes: str = None,
147
- auth_info: mlrun.api.schemas.AuthInfo = Depends(
148
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(
148
149
  mlrun.api.api.deps.authenticate_request
149
150
  ),
150
- ) -> mlrun.api.schemas.ModelEndpoint:
151
+ ) -> mlrun.common.schemas.ModelEndpoint:
151
152
  """
152
- Update a DB record of a given ModelEndpoint object.
153
+ Update a DB record of a given `ModelEndpoint` object.
153
154
 
154
155
  :param project: The name of the project.
155
156
  :param endpoint_id: The unique id of the model endpoint.
156
157
  :param attributes: Attributes that will be updated. The input is provided in a json structure that will be
157
158
  converted into a dictionary before applying the patch process. Note that the keys of
158
- dictionary should exist in the DB target. More details about the model endpoint available
159
- attributes can be found under :py:class:`~mlrun.api.schemas.ModelEndpoint`.
159
+ the dictionary should exist in the DB target.
160
160
 
161
161
  example::
162
162
 
@@ -168,10 +168,10 @@ async def patch_model_endpoint(
168
168
  """
169
169
 
170
170
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
171
- resource_type=mlrun.api.schemas.AuthorizationResourceTypes.model_endpoint,
171
+ resource_type=mlrun.common.schemas.AuthorizationResourceTypes.model_endpoint,
172
172
  project_name=project,
173
173
  resource_name=endpoint_id,
174
- action=mlrun.api.schemas.AuthorizationAction.update,
174
+ action=mlrun.common.schemas.AuthorizationAction.update,
175
175
  auth_info=auth_info,
176
176
  )
177
177
 
@@ -188,13 +188,13 @@ async def patch_model_endpoint(
188
188
 
189
189
 
190
190
  @router.delete(
191
- "/projects/{project}/model-endpoints/{endpoint_id}",
191
+ "/{endpoint_id}",
192
192
  status_code=HTTPStatus.NO_CONTENT.value,
193
193
  )
194
194
  async def delete_model_endpoint(
195
195
  project: str,
196
196
  endpoint_id: str,
197
- auth_info: mlrun.api.schemas.AuthInfo = Depends(
197
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(
198
198
  mlrun.api.api.deps.authenticate_request
199
199
  ),
200
200
  ):
@@ -208,10 +208,10 @@ async def delete_model_endpoint(
208
208
  """
209
209
 
210
210
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
211
- resource_type=mlrun.api.schemas.AuthorizationResourceTypes.model_endpoint,
211
+ resource_type=mlrun.common.schemas.AuthorizationResourceTypes.model_endpoint,
212
212
  project_name=project,
213
213
  resource_name=endpoint_id,
214
- action=mlrun.api.schemas.AuthorizationAction.delete,
214
+ action=mlrun.common.schemas.AuthorizationAction.delete,
215
215
  auth_info=auth_info,
216
216
  )
217
217
 
@@ -223,8 +223,8 @@ async def delete_model_endpoint(
223
223
 
224
224
 
225
225
  @router.get(
226
- "/projects/{project}/model-endpoints",
227
- response_model=mlrun.api.schemas.ModelEndpointList,
226
+ "",
227
+ response_model=mlrun.common.schemas.ModelEndpointList,
228
228
  )
229
229
  async def list_model_endpoints(
230
230
  project: str,
@@ -236,16 +236,16 @@ async def list_model_endpoints(
236
236
  metrics: List[str] = Query([], alias="metric"),
237
237
  top_level: bool = Query(False, alias="top-level"),
238
238
  uids: List[str] = Query(None, alias="uid"),
239
- auth_info: mlrun.api.schemas.AuthInfo = Depends(
239
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(
240
240
  mlrun.api.api.deps.authenticate_request
241
241
  ),
242
- ) -> mlrun.api.schemas.ModelEndpointList:
242
+ ) -> mlrun.common.schemas.ModelEndpointList:
243
243
  """
244
244
  Returns a list of endpoints of type 'ModelEndpoint', supports filtering by model, function, tag,
245
245
  labels or top level. By default, when no filters are applied, all available endpoints for the given project will be
246
246
  listed.
247
247
 
248
- If uids are passed: will return ModelEndpointList of endpoints with uid in uids
248
+ If uids are passed: will return `ModelEndpointList` of endpoints with uid in uids
249
249
  Labels can be used to filter on the existence of a label:
250
250
  api/projects/{project}/model-endpoints/?label=mylabel
251
251
 
@@ -264,11 +264,11 @@ async def list_model_endpoints(
264
264
  :param model: The name of the model to filter by.
265
265
  :param function: The name of the function to filter by.
266
266
  :param labels: A list of labels to filter by. Label filters work by either filtering a specific value of a label
267
- (i.e. list("key==value")) or by looking for the existence of a given key (i.e. "key").
268
- :param metrics: A list of metrics to return for each endpoint. There are pre-defined metrics for model endpoints
269
- such as predictions_per_second and latency_avg_5m but also custom metrics defined by the user.
270
- Please note that these metrics are stored in the time series DB and the results will be appeared
271
- under model_endpoint.spec.metrics of each endpoint.
267
+ (i.e. list("key=value")) or by looking for the existence of a given key (i.e. "key").
268
+ :param metrics: A list of real-time metrics to return for each endpoint. There are pre-defined real-time metrics
269
+ for model endpoints such as predictions_per_second and latency_avg_5m but also custom metrics
270
+ defined by the user. Please note that these metrics are stored in the time series DB and the
271
+ results will be appeared under model_endpoint.spec.metrics of each endpoint.
272
272
  :param start: The start time of the metrics. Can be represented by a string containing an RFC 3339
273
273
  time, a Unix timestamp in milliseconds, a relative time (`'now'` or `'now-[0-9]+[mhd]'`, where
274
274
  `m` = minutes, `h` = hours, and `'d'` = days), or 0 for the earliest time.
@@ -276,15 +276,15 @@ async def list_model_endpoints(
276
276
  time, a Unix timestamp in milliseconds, a relative time (`'now'` or `'now-[0-9]+[mhd]'`, where
277
277
  `m` = minutes, `h` = hours, and `'d'` = days), or 0 for the earliest time.
278
278
  :param top_level: If True will return only routers and endpoint that are NOT children of any router.
279
- :param uids: Will return ModelEndpointList of endpoints with uid in uids.
279
+ :param uids: Will return `ModelEndpointList` of endpoints with uid in uids.
280
280
 
281
- :return: An object of ModelEndpointList which is literally a list of model endpoints along with some metadata. To
281
+ :return: An object of `ModelEndpointList` which is literally a list of model endpoints along with some metadata. To
282
282
  get a standard list of model endpoints use ModelEndpointList.endpoints.
283
283
  """
284
284
 
285
285
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_permissions(
286
286
  project_name=project,
287
- action=mlrun.api.schemas.AuthorizationAction.read,
287
+ action=mlrun.common.schemas.AuthorizationAction.read,
288
288
  auth_info=auth_info,
289
289
  )
290
290
 
@@ -302,7 +302,7 @@ async def list_model_endpoints(
302
302
  uids=uids,
303
303
  )
304
304
  allowed_endpoints = await mlrun.api.utils.auth.verifier.AuthVerifier().filter_project_resources_by_permissions(
305
- mlrun.api.schemas.AuthorizationResourceTypes.model_endpoint,
305
+ mlrun.common.schemas.AuthorizationResourceTypes.model_endpoint,
306
306
  endpoints.endpoints,
307
307
  lambda _endpoint: (
308
308
  _endpoint.metadata.project,
@@ -316,8 +316,8 @@ async def list_model_endpoints(
316
316
 
317
317
 
318
318
  @router.get(
319
- "/projects/{project}/model-endpoints/{endpoint_id}",
320
- response_model=mlrun.api.schemas.ModelEndpoint,
319
+ "/{endpoint_id}",
320
+ response_model=mlrun.common.schemas.ModelEndpoint,
321
321
  )
322
322
  async def get_model_endpoint(
323
323
  project: str,
@@ -326,36 +326,40 @@ async def get_model_endpoint(
326
326
  end: str = Query(default="now"),
327
327
  metrics: List[str] = Query([], alias="metric"),
328
328
  feature_analysis: bool = Query(default=False),
329
- auth_info: mlrun.api.schemas.AuthInfo = Depends(
329
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(
330
330
  mlrun.api.api.deps.authenticate_request
331
331
  ),
332
- ) -> mlrun.api.schemas.ModelEndpoint:
332
+ ) -> mlrun.common.schemas.ModelEndpoint:
333
333
  """Get a single model endpoint object. You can apply different time series metrics that will be added to the
334
334
  result.
335
335
 
336
- :param project: The name of the project.
337
- :param endpoint_id: The unique id of the model endpoint.
338
- :param start: The start time of the metrics. Can be represented by a string containing an RFC 3339
339
- time, a Unix timestamp in milliseconds, a relative time (`'now'` or `'now-[0-9]+[mhd]'`,
340
- where `m` = minutes, `h` = hours, and `'d'` = days), or 0 for the earliest time.
341
- :param end: The end time of the metrics. Can be represented by a string containing an RFC 3339
342
- time, a Unix timestamp in milliseconds, a relative time (`'now'` or `'now-[0-9]+[mhd]'`,
343
- where `m` = minutes, `h` = hours, and `'d'` = days), or 0 for the earliest time.
344
- :param metrics: A list of metrics to return for the model endpoint. There are pre-defined metrics for model
345
- endpoints such as predictions_per_second and latency_avg_5m but also custom metrics
346
- defined by the user. Please note that these metrics are stored in the time series DB and
347
- the results will be appeared under model_endpoint.spec.metrics.
348
- :param feature_analysis: When True, the base feature statistics and current feature statistics will be added to
349
- the output of the resulting object.
350
- :param auth_info: The auth info of the request.
351
-
352
- :return: A ModelEndpoint object.
336
+
337
+ :param project: The name of the project
338
+ :param endpoint_id: The unique id of the model endpoint.
339
+ :param start: The start time of the metrics. Can be represented by a string containing an
340
+ RFC 3339 time, a Unix timestamp in milliseconds, a relative time (`'now'` or
341
+ `'now-[0-9]+[mhd]'`, where `m` = minutes, `h` = hours, and `'d'` = days), or
342
+ 0 for the earliest time.
343
+ :param end: The end time of the metrics. Can be represented by a string containing an
344
+ RFC 3339 time, a Unix timestamp in milliseconds, a relative time (`'now'` or
345
+ `'now-[0-9]+[mhd]'`, where `m` = minutes, `h` = hours, and `'d'` = days), or
346
+ 0 for the earliest time.
347
+ :param metrics: A list of real-time metrics to return for the model endpoint. There are
348
+ pre-defined real-time metrics for model endpoints such as predictions_per_second
349
+ and latency_avg_5m but also custom metrics defined by the user. Please note that
350
+ these metrics are stored in the time series DB and the results will be
351
+ appeared under model_endpoint.spec.metrics.
352
+ :param feature_analysis: When True, the base feature statistics and current feature statistics will
353
+ be added to the output of the resulting object.
354
+ :param auth_info: The auth info of the request
355
+
356
+ :return: A `ModelEndpoint` object.
353
357
  """
354
358
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
355
- mlrun.api.schemas.AuthorizationResourceTypes.model_endpoint,
359
+ mlrun.common.schemas.AuthorizationResourceTypes.model_endpoint,
356
360
  project,
357
361
  endpoint_id,
358
- mlrun.api.schemas.AuthorizationAction.read,
362
+ mlrun.common.schemas.AuthorizationAction.read,
359
363
  auth_info,
360
364
  )
361
365
 
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Iguazio
1
+ # Copyright 2023 Iguazio
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -21,9 +21,9 @@ from fastapi.concurrency import run_in_threadpool
21
21
  import mlrun.api.api.deps
22
22
  import mlrun.api.crud
23
23
  import mlrun.api.initial_data
24
- import mlrun.api.schemas
25
24
  import mlrun.api.utils.background_tasks
26
25
  import mlrun.api.utils.clients.chief
26
+ import mlrun.common.schemas
27
27
  from mlrun.utils import logger
28
28
 
29
29
  router = fastapi.APIRouter()
@@ -36,7 +36,7 @@ current_migration_background_task_name = None
36
36
  "/operations/migrations",
37
37
  responses={
38
38
  http.HTTPStatus.OK.value: {},
39
- http.HTTPStatus.ACCEPTED.value: {"model": mlrun.api.schemas.BackgroundTask},
39
+ http.HTTPStatus.ACCEPTED.value: {"model": mlrun.common.schemas.BackgroundTask},
40
40
  },
41
41
  )
42
42
  async def trigger_migrations(
@@ -47,7 +47,7 @@ async def trigger_migrations(
47
47
  # only chief can execute migrations, redirecting request to chief
48
48
  if (
49
49
  mlrun.mlconf.httpdb.clusterization.role
50
- != mlrun.api.schemas.ClusterizationRole.chief
50
+ != mlrun.common.schemas.ClusterizationRole.chief
51
51
  ):
52
52
  logger.info("Requesting to trigger migrations, re-routing to chief")
53
53
  chief_client = mlrun.api.utils.clients.chief.Client()
@@ -72,18 +72,22 @@ async def trigger_migrations(
72
72
 
73
73
  def _get_or_create_migration_background_task(
74
74
  task_name: str, background_tasks
75
- ) -> typing.Optional[mlrun.api.schemas.BackgroundTask]:
76
- if mlrun.mlconf.httpdb.state == mlrun.api.schemas.APIStates.migrations_in_progress:
75
+ ) -> typing.Optional[mlrun.common.schemas.BackgroundTask]:
76
+ if (
77
+ mlrun.mlconf.httpdb.state
78
+ == mlrun.common.schemas.APIStates.migrations_in_progress
79
+ ):
77
80
  background_task = mlrun.api.utils.background_tasks.InternalBackgroundTasksHandler().get_background_task(
78
81
  task_name
79
82
  )
80
83
  return background_task
81
- elif mlrun.mlconf.httpdb.state == mlrun.api.schemas.APIStates.migrations_failed:
84
+ elif mlrun.mlconf.httpdb.state == mlrun.common.schemas.APIStates.migrations_failed:
82
85
  raise mlrun.errors.MLRunPreconditionFailedError(
83
86
  "Migrations were already triggered and failed. Restart the API to retry"
84
87
  )
85
88
  elif (
86
- mlrun.mlconf.httpdb.state != mlrun.api.schemas.APIStates.waiting_for_migrations
89
+ mlrun.mlconf.httpdb.state
90
+ != mlrun.common.schemas.APIStates.waiting_for_migrations
87
91
  ):
88
92
  return None
89
93
 
@@ -102,4 +106,4 @@ async def _perform_migration():
102
106
  mlrun.api.initial_data.init_data, perform_migrations_if_needed=True
103
107
  )
104
108
  await mlrun.api.main.move_api_to_online()
105
- mlrun.mlconf.httpdb.state = mlrun.api.schemas.APIStates.online
109
+ mlrun.mlconf.httpdb.state = mlrun.common.schemas.APIStates.online