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.
mlrun/runtimes/daskjob.py CHANGED
@@ -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.
@@ -23,8 +23,9 @@ from deprecated import deprecated
23
23
  from kubernetes.client.rest import ApiException
24
24
  from sqlalchemy.orm import Session
25
25
 
26
- import mlrun.api.schemas
26
+ import mlrun.common.schemas
27
27
  import mlrun.errors
28
+ import mlrun.k8s_utils
28
29
  import mlrun.utils
29
30
  import mlrun.utils.regex
30
31
  from mlrun.api.db.base import DBInterface
@@ -33,7 +34,6 @@ from mlrun.runtimes.base import BaseRuntimeHandler
33
34
 
34
35
  from ..config import config
35
36
  from ..execution import MLClientCtx
36
- from ..k8s_utils import get_k8s_helper
37
37
  from ..model import RunObject
38
38
  from ..render import ipython_display
39
39
  from ..utils import logger, normalize_name, update_in
@@ -41,7 +41,7 @@ from .base import FunctionStatus, RuntimeClassMode
41
41
  from .kubejob import KubejobRuntime
42
42
  from .local import exec_from_params, load_module
43
43
  from .pod import KubeResourceSpec, kube_resource_spec_to_pod_spec
44
- from .utils import RunError, get_func_selector, get_resource_labels, log_std
44
+ from .utils import RunError, get_func_selector, get_k8s, get_resource_labels, log_std
45
45
 
46
46
 
47
47
  def get_dask_resource():
@@ -106,6 +106,7 @@ class DaskSpec(KubeResourceSpec):
106
106
  tolerations=None,
107
107
  preemption_mode=None,
108
108
  security_context=None,
109
+ clone_target_dir=None,
109
110
  ):
110
111
 
111
112
  super().__init__(
@@ -135,6 +136,7 @@ class DaskSpec(KubeResourceSpec):
135
136
  tolerations=tolerations,
136
137
  preemption_mode=preemption_mode,
137
138
  security_context=security_context,
139
+ clone_target_dir=clone_target_dir,
138
140
  )
139
141
  self.args = args
140
142
 
@@ -201,9 +203,7 @@ class DaskCluster(KubejobRuntime):
201
203
  def __init__(self, spec=None, metadata=None):
202
204
  super().__init__(spec, metadata)
203
205
  self._cluster = None
204
- self.use_remote = not get_k8s_helper(
205
- silent=True
206
- ).is_running_inside_kubernetes_cluster()
206
+ self.use_remote = not mlrun.k8s_utils.is_running_inside_kubernetes_cluster()
207
207
  self.spec.build.base_image = self.spec.build.base_image or "daskdev/dask:latest"
208
208
 
209
209
  @property
@@ -271,11 +271,11 @@ class DaskCluster(KubejobRuntime):
271
271
  )
272
272
  if (
273
273
  background_task.status.state
274
- in mlrun.api.schemas.BackgroundTaskState.terminal_states()
274
+ in mlrun.common.schemas.BackgroundTaskState.terminal_states()
275
275
  ):
276
276
  if (
277
277
  background_task.status.state
278
- == mlrun.api.schemas.BackgroundTaskState.failed
278
+ == mlrun.common.schemas.BackgroundTaskState.failed
279
279
  ):
280
280
  raise mlrun.errors.MLRunRuntimeError(
281
281
  "Failed bringing up dask cluster"
@@ -352,10 +352,6 @@ class DaskCluster(KubejobRuntime):
352
352
  f"remote scheduler at {addr} not ready, will try to restart {err_to_str(exc)}"
353
353
  )
354
354
 
355
- # todo: figure out if test is needed
356
- # if self._is_remote_api():
357
- # raise Exception('no access to Kubernetes API')
358
-
359
355
  status = self.get_status()
360
356
  if status != "running":
361
357
  self._start()
@@ -671,7 +667,9 @@ def get_obj_status(selector=None, namespace=None):
671
667
  if selector is None:
672
668
  selector = []
673
669
 
674
- k8s = get_k8s_helper()
670
+ import mlrun.api.utils.singletons.k8s
671
+
672
+ k8s = mlrun.api.utils.singletons.k8s.get_k8s_helper()
675
673
  namespace = namespace or config.namespace
676
674
  selector = ",".join(["dask.org/component=scheduler"] + selector)
677
675
  pods = k8s.list_pods(namespace, selector=selector)
@@ -730,17 +728,19 @@ class DaskRuntimeHandler(BaseRuntimeHandler):
730
728
  def _enrich_list_resources_response(
731
729
  self,
732
730
  response: Union[
733
- mlrun.api.schemas.RuntimeResources,
734
- mlrun.api.schemas.GroupedByJobRuntimeResourcesOutput,
735
- mlrun.api.schemas.GroupedByProjectRuntimeResourcesOutput,
731
+ mlrun.common.schemas.RuntimeResources,
732
+ mlrun.common.schemas.GroupedByJobRuntimeResourcesOutput,
733
+ mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput,
736
734
  ],
737
735
  namespace: str,
738
736
  label_selector: str = None,
739
- group_by: Optional[mlrun.api.schemas.ListRuntimeResourcesGroupByField] = None,
737
+ group_by: Optional[
738
+ mlrun.common.schemas.ListRuntimeResourcesGroupByField
739
+ ] = None,
740
740
  ) -> Union[
741
- mlrun.api.schemas.RuntimeResources,
742
- mlrun.api.schemas.GroupedByJobRuntimeResourcesOutput,
743
- mlrun.api.schemas.GroupedByProjectRuntimeResourcesOutput,
741
+ mlrun.common.schemas.RuntimeResources,
742
+ mlrun.common.schemas.GroupedByJobRuntimeResourcesOutput,
743
+ mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput,
744
744
  ]:
745
745
  """
746
746
  Handling listing service resources
@@ -748,14 +748,13 @@ class DaskRuntimeHandler(BaseRuntimeHandler):
748
748
  enrich_needed = self._validate_if_enrich_is_needed_by_group_by(group_by)
749
749
  if not enrich_needed:
750
750
  return response
751
- k8s_helper = get_k8s_helper()
752
- services = k8s_helper.v1api.list_namespaced_service(
751
+ services = get_k8s().v1api.list_namespaced_service(
753
752
  namespace, label_selector=label_selector
754
753
  )
755
754
  service_resources = []
756
755
  for service in services.items:
757
756
  service_resources.append(
758
- mlrun.api.schemas.RuntimeResource(
757
+ mlrun.common.schemas.RuntimeResource(
759
758
  name=service.metadata.name, labels=service.metadata.labels
760
759
  )
761
760
  )
@@ -766,12 +765,14 @@ class DaskRuntimeHandler(BaseRuntimeHandler):
766
765
  def _build_output_from_runtime_resources(
767
766
  self,
768
767
  response: Union[
769
- mlrun.api.schemas.RuntimeResources,
770
- mlrun.api.schemas.GroupedByJobRuntimeResourcesOutput,
771
- mlrun.api.schemas.GroupedByProjectRuntimeResourcesOutput,
768
+ mlrun.common.schemas.RuntimeResources,
769
+ mlrun.common.schemas.GroupedByJobRuntimeResourcesOutput,
770
+ mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput,
772
771
  ],
773
- runtime_resources_list: List[mlrun.api.schemas.RuntimeResources],
774
- group_by: Optional[mlrun.api.schemas.ListRuntimeResourcesGroupByField] = None,
772
+ runtime_resources_list: List[mlrun.common.schemas.RuntimeResources],
773
+ group_by: Optional[
774
+ mlrun.common.schemas.ListRuntimeResourcesGroupByField
775
+ ] = None,
775
776
  ):
776
777
  enrich_needed = self._validate_if_enrich_is_needed_by_group_by(group_by)
777
778
  if not enrich_needed:
@@ -786,13 +787,15 @@ class DaskRuntimeHandler(BaseRuntimeHandler):
786
787
 
787
788
  def _validate_if_enrich_is_needed_by_group_by(
788
789
  self,
789
- group_by: Optional[mlrun.api.schemas.ListRuntimeResourcesGroupByField] = None,
790
+ group_by: Optional[
791
+ mlrun.common.schemas.ListRuntimeResourcesGroupByField
792
+ ] = None,
790
793
  ) -> bool:
791
794
  # Dask runtime resources are per function (and not per job) therefore, when grouping by job we're simply
792
795
  # omitting the dask runtime resources
793
- if group_by == mlrun.api.schemas.ListRuntimeResourcesGroupByField.job:
796
+ if group_by == mlrun.common.schemas.ListRuntimeResourcesGroupByField.job:
794
797
  return False
795
- elif group_by == mlrun.api.schemas.ListRuntimeResourcesGroupByField.project:
798
+ elif group_by == mlrun.common.schemas.ListRuntimeResourcesGroupByField.project:
796
799
  return True
797
800
  elif group_by is not None:
798
801
  raise NotImplementedError(
@@ -803,14 +806,16 @@ class DaskRuntimeHandler(BaseRuntimeHandler):
803
806
  def _enrich_service_resources_in_response(
804
807
  self,
805
808
  response: Union[
806
- mlrun.api.schemas.RuntimeResources,
807
- mlrun.api.schemas.GroupedByJobRuntimeResourcesOutput,
808
- mlrun.api.schemas.GroupedByProjectRuntimeResourcesOutput,
809
+ mlrun.common.schemas.RuntimeResources,
810
+ mlrun.common.schemas.GroupedByJobRuntimeResourcesOutput,
811
+ mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput,
809
812
  ],
810
- service_resources: List[mlrun.api.schemas.RuntimeResource],
811
- group_by: Optional[mlrun.api.schemas.ListRuntimeResourcesGroupByField] = None,
813
+ service_resources: List[mlrun.common.schemas.RuntimeResource],
814
+ group_by: Optional[
815
+ mlrun.common.schemas.ListRuntimeResourcesGroupByField
816
+ ] = None,
812
817
  ):
813
- if group_by == mlrun.api.schemas.ListRuntimeResourcesGroupByField.project:
818
+ if group_by == mlrun.common.schemas.ListRuntimeResourcesGroupByField.project:
814
819
  for service_resource in service_resources:
815
820
  self._add_resource_to_grouped_by_project_resources_response(
816
821
  response, "service_resources", service_resource
@@ -845,14 +850,13 @@ class DaskRuntimeHandler(BaseRuntimeHandler):
845
850
  if dask_component == "scheduler" and cluster_name:
846
851
  service_names.append(cluster_name)
847
852
 
848
- k8s_helper = get_k8s_helper()
849
- services = k8s_helper.v1api.list_namespaced_service(
853
+ services = get_k8s().v1api.list_namespaced_service(
850
854
  namespace, label_selector=label_selector
851
855
  )
852
856
  for service in services.items:
853
857
  try:
854
858
  if force or service.metadata.name in service_names:
855
- k8s_helper.v1api.delete_namespaced_service(
859
+ get_k8s().v1api.delete_namespaced_service(
856
860
  service.metadata.name, namespace
857
861
  )
858
862
  logger.info(f"Deleted service: {service.metadata.name}")
mlrun/runtimes/funcdoc.py CHANGED
@@ -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.
@@ -15,6 +15,7 @@
15
15
  import ast
16
16
  import inspect
17
17
  import re
18
+ import sys
18
19
 
19
20
  from mlrun.model import FunctionEntrypoint
20
21
 
@@ -49,13 +50,23 @@ def param_dict(name="", type="", doc="", default=""):
49
50
  }
50
51
 
51
52
 
52
- def func_dict(name, doc, params, returns, lineno):
53
+ def func_dict(
54
+ name,
55
+ doc,
56
+ params,
57
+ returns,
58
+ lineno,
59
+ has_varargs: bool = False,
60
+ has_kwargs: bool = False,
61
+ ):
53
62
  return {
54
63
  "name": name,
55
64
  "doc": doc,
56
65
  "params": params,
57
66
  "return": returns,
58
67
  "lineno": lineno,
68
+ "has_varargs": has_varargs,
69
+ "has_kwargs": has_kwargs,
59
70
  }
60
71
 
61
72
 
@@ -165,6 +176,9 @@ def ast_func_info(func: ast.FunctionDef):
165
176
  doc = ast.get_docstring(func) or ""
166
177
  rtype = getattr(func.returns, "id", "")
167
178
  params = [ast_param_dict(p) for p in func.args.args]
179
+ # adds info about *args and **kwargs to the function doc
180
+ has_varargs = func.args.vararg is not None
181
+ has_kwargs = func.args.kwarg is not None
168
182
  defaults = func.args.defaults
169
183
  if defaults:
170
184
  for param, default in zip(params[-len(defaults) :], defaults):
@@ -176,6 +190,8 @@ def ast_func_info(func: ast.FunctionDef):
176
190
  params=params,
177
191
  returns=param_dict(type=rtype),
178
192
  lineno=func.lineno,
193
+ has_varargs=has_varargs,
194
+ has_kwargs=has_kwargs,
179
195
  )
180
196
 
181
197
  if not doc.strip():
@@ -195,16 +211,33 @@ def ast_param_dict(param: ast.arg) -> dict:
195
211
 
196
212
  def ann_type(ann):
197
213
  if hasattr(ann, "slice"):
198
- name = ann.value.id
214
+ if isinstance(ann.value, ast.Attribute):
215
+ # value is an attribute, e.g. b of a.b - get the full path
216
+ name = get_attr_path(ann.value)
217
+ else:
218
+ name = ann.value.id
199
219
  inner = ", ".join(ann_type(e) for e in iter_elems(ann.slice))
200
220
  return f"{name}[{inner}]"
201
221
 
202
222
  if isinstance(ann, ast.Attribute):
223
+ if isinstance(ann.value, ast.Attribute):
224
+ # value is an attribute, e.g. b of a.b - get the full path
225
+ return get_attr_path(ann)
226
+
203
227
  return ann.attr
204
228
 
205
229
  return getattr(ann, "id", "")
206
230
 
207
231
 
232
+ def get_attr_path(ann: ast.Attribute):
233
+ if isinstance(ann.value, ast.Attribute):
234
+ # value is an attribute, e.g. b of a.b - get the full path
235
+ return f"{get_attr_path(ann.value)}.{ann.attr}"
236
+
237
+ # value can be a subscript or name - get its annotation type and append the attribute
238
+ return f"{ann_type(ann.value)}.{ann.attr}"
239
+
240
+
208
241
  def iter_elems(ann):
209
242
  """
210
243
  Gets the elements of an ast.Subscript.slice, e.g. Union[int, str] -> [int, str]
@@ -219,10 +252,13 @@ def iter_elems(ann):
219
252
  return [ann.value]
220
253
 
221
254
  # From python 3.9, slice is an expr and we should evaluate it recursively. Left this for backward compatibility.
222
- elif hasattr(ann.slice, "elts"):
223
- return ann.slice.elts
224
- elif hasattr(ann.slice, "value"):
225
- return [ann.slice.value]
255
+ # TODO: Remove this in 1.5.0 when we drop support for python 3.7
256
+ if sys.version_info < (3, 9):
257
+ if hasattr(ann.slice, "elts"):
258
+ return ann.slice.elts
259
+ elif hasattr(ann.slice, "value"):
260
+ return [ann.slice.value]
261
+
226
262
  return [ann]
227
263
 
228
264