mlrun 1.3.3__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.3.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.3.dist-info/RECORD +0 -381
  441. {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/LICENSE +0 -0
  442. {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/WHEEL +0 -0
  443. {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/entry_points.txt +0 -0
  444. {mlrun-1.3.3.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.
@@ -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.
@@ -17,7 +17,7 @@
17
17
  # Don't remove this, used by sphinx documentation
18
18
  __all__ = ["get_model", "update_model"]
19
19
 
20
- from .base import Artifact, get_artifact_meta
20
+ from .base import Artifact, ArtifactMetadata, ArtifactSpec, get_artifact_meta
21
21
  from .dataset import DatasetArtifact, TableArtifact, update_dataset_meta
22
22
  from .manager import ArtifactManager, ArtifactProducer, dict_to_artifact
23
23
  from .model import ModelArtifact, get_model, update_model
mlrun/artifacts/base.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.
@@ -83,6 +83,7 @@ class ArtifactSpec(ModelObj):
83
83
  "size",
84
84
  "db_key",
85
85
  "extra_data",
86
+ "unpackaging_instructions",
86
87
  ]
87
88
 
88
89
  _extra_fields = ["annotations", "producer", "sources", "license", "encoding"]
@@ -98,6 +99,7 @@ class ArtifactSpec(ModelObj):
98
99
  db_key=None,
99
100
  extra_data=None,
100
101
  body=None,
102
+ unpackaging_instructions: dict = None,
101
103
  ):
102
104
  self.src_path = src_path
103
105
  self.target_path = target_path
@@ -107,6 +109,7 @@ class ArtifactSpec(ModelObj):
107
109
  self.size = size
108
110
  self.db_key = db_key
109
111
  self.extra_data = extra_data or {}
112
+ self.unpackaging_instructions = unpackaging_instructions
110
113
 
111
114
  self._body = body
112
115
  self.encoding = None
@@ -1024,7 +1027,10 @@ def generate_target_path(item: Artifact, artifact_path, producer):
1024
1027
 
1025
1028
  suffix = "/"
1026
1029
  if not item.is_dir:
1027
- suffix = os.path.splitext(item.src_path or "")[1]
1030
+
1031
+ # suffixes yields a list of suffixes, e.g. ['.tar', '.gz']
1032
+ # join them together to get the full suffix, e.g. '.tar.gz'
1033
+ suffix = "".join(pathlib.Path(item.src_path or "").suffixes)
1028
1034
  if not suffix and item.format:
1029
1035
  suffix = f".{item.format}"
1030
1036
 
@@ -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.
@@ -22,10 +22,11 @@ from deprecated import deprecated
22
22
  from pandas.io.json import build_table_schema
23
23
 
24
24
  import mlrun
25
+ import mlrun.common.schemas
25
26
  import mlrun.utils.helpers
26
27
 
27
28
  from ..datastore import is_store_uri, store_manager
28
- from .base import Artifact, ArtifactSpec, LegacyArtifact
29
+ from .base import Artifact, ArtifactSpec, LegacyArtifact, StorePrefix
29
30
 
30
31
  default_preview_rows_length = 20
31
32
  max_preview_columns = 100
@@ -122,9 +123,10 @@ class DatasetArtifactSpec(ArtifactSpec):
122
123
 
123
124
 
124
125
  class DatasetArtifact(Artifact):
125
- kind = "dataset"
126
+ kind = mlrun.common.schemas.ArtifactCategories.dataset
126
127
  # List of all the supported saving formats of a DataFrame:
127
128
  SUPPORTED_FORMATS = ["csv", "parquet", "pq", "tsdb", "kv"]
129
+ _store_prefix = StorePrefix.Dataset
128
130
 
129
131
  def __init__(
130
132
  self,
@@ -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.
@@ -191,6 +191,12 @@ class ArtifactManager:
191
191
  if db_key is None:
192
192
  # set the default artifact db key
193
193
  if producer.kind == "run":
194
+ # When the producer's type is "run,"
195
+ # we generate a different db_key than the one we obtained in the request.
196
+ # As a result, a new artifact for the requested key will be created,
197
+ # which will contain the new db_key and will represent the current run.
198
+ # We implement this so that the user can query an artifact,
199
+ # and receive back all the runs that are associated with his search result.
194
200
  db_key = producer.name + "_" + key
195
201
  else:
196
202
  db_key = key
mlrun/artifacts/model.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.
@@ -329,7 +329,9 @@ class ModelArtifact(Artifact):
329
329
  artifact=self, extra_data=self.spec.extra_data, artifact_path=artifact_path
330
330
  )
331
331
 
332
- spec_body = self.to_yaml()
332
+ # the model spec yaml should not include the tag, as the same model can be used with different tags,
333
+ # and the tag is not part of the model spec but the metadata of the model artifact
334
+ spec_body = _remove_tag_from_spec_yaml(self)
333
335
  spec_target_path = None
334
336
 
335
337
  if mlrun.mlconf.artifacts.generate_target_path_from_artifact_hash:
@@ -355,7 +357,6 @@ class ModelArtifact(Artifact):
355
357
  self.spec.target_path, model_spec_filename
356
358
  )
357
359
  store_manager.object(url=spec_target_path).put(spec_body)
358
- self.spec.extra_data[model_spec_filename] = spec_target_path
359
360
 
360
361
  def _get_file_body(self):
361
362
  body = self.spec.get_body()
@@ -612,6 +613,12 @@ def _get_extra(target, extra_data, is_dir=False):
612
613
  return extra_dataitems
613
614
 
614
615
 
616
+ def _remove_tag_from_spec_yaml(model_spec):
617
+ spec_dict = model_spec.to_dict()
618
+ spec_dict["metadata"].pop("tag", None)
619
+ return yaml.dump(spec_dict)
620
+
621
+
615
622
  def update_model(
616
623
  model_artifact,
617
624
  parameters: dict = None,
@@ -690,7 +697,11 @@ def update_model(
690
697
 
691
698
  if write_spec_copy:
692
699
  spec_path = path.join(model_spec.target_path, model_spec_filename)
693
- store_manager.object(url=spec_path).put(model_spec.to_yaml())
700
+
701
+ # the model spec yaml should not include the tag, as the same model can be used with different tags,
702
+ # and the tag is not part of the model spec but the metadata of the model artifact
703
+ model_spec_yaml = _remove_tag_from_spec_yaml(model_spec)
704
+ store_manager.object(url=spec_path).put(model_spec_yaml)
694
705
 
695
706
  model_spec.db_key = model_spec.db_key or model_spec.key
696
707
  if store_object:
mlrun/artifacts/plots.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.
mlrun/common/__init__.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.
@@ -0,0 +1,15 @@
1
+ # Copyright 2023 Iguazio
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+ IMAGE_NAME_ENRICH_REGISTRY_PREFIX = "." # prefix for image name to enrich with registry
@@ -0,0 +1,209 @@
1
+ # Copyright 2023 Iguazio
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+
16
+ import enum
17
+ import hashlib
18
+ from dataclasses import dataclass
19
+ from typing import Optional
20
+
21
+ import mlrun.utils
22
+
23
+
24
+ class EventFieldType:
25
+ FUNCTION_URI = "function_uri"
26
+ FUNCTION = "function"
27
+ MODEL_URI = "model_uri"
28
+ MODEL = "model"
29
+ VERSION = "version"
30
+ VERSIONED_MODEL = "versioned_model"
31
+ MODEL_CLASS = "model_class"
32
+ TIMESTAMP = "timestamp"
33
+ # `endpoint_id` is deprecated as a field in the model endpoint schema since 1.3.1, replaced by `uid`.
34
+ ENDPOINT_ID = "endpoint_id"
35
+ UID = "uid"
36
+ ENDPOINT_TYPE = "endpoint_type"
37
+ REQUEST_ID = "request_id"
38
+ RECORD_TYPE = "record_type"
39
+ FEATURES = "features"
40
+ FEATURE_NAMES = "feature_names"
41
+ NAMED_FEATURES = "named_features"
42
+ LABELS = "labels"
43
+ LATENCY = "latency"
44
+ LABEL_NAMES = "label_names"
45
+ PREDICTION = "prediction"
46
+ PREDICTIONS = "predictions"
47
+ NAMED_PREDICTIONS = "named_predictions"
48
+ ERROR_COUNT = "error_count"
49
+ ENTITIES = "entities"
50
+ FIRST_REQUEST = "first_request"
51
+ LAST_REQUEST = "last_request"
52
+ METRICS = "metrics"
53
+ TIME_FORMAT = "%Y-%m-%d %H:%M:%S.%f"
54
+ BATCH_INTERVALS_DICT = "batch_intervals_dict"
55
+ DEFAULT_BATCH_INTERVALS = "default_batch_intervals"
56
+ MINUTES = "minutes"
57
+ HOURS = "hours"
58
+ DAYS = "days"
59
+ MODEL_ENDPOINTS = "model_endpoints"
60
+ STATE = "state"
61
+ PROJECT = "project"
62
+ STREAM_PATH = "stream_path"
63
+ ACTIVE = "active"
64
+ MONITORING_MODE = "monitoring_mode"
65
+ FEATURE_STATS = "feature_stats"
66
+ CURRENT_STATS = "current_stats"
67
+ CHILDREN = "children"
68
+ CHILDREN_UIDS = "children_uids"
69
+ DRIFT_MEASURES = "drift_measures"
70
+ DRIFT_STATUS = "drift_status"
71
+ MONITOR_CONFIGURATION = "monitor_configuration"
72
+ FEATURE_SET_URI = "monitoring_feature_set_uri"
73
+ ALGORITHM = "algorithm"
74
+
75
+
76
+ class EventLiveStats:
77
+ LATENCY_AVG_5M = "latency_avg_5m"
78
+ LATENCY_AVG_1H = "latency_avg_1h"
79
+ PREDICTIONS_PER_SECOND = "predictions_per_second"
80
+ PREDICTIONS_COUNT_5M = "predictions_count_5m"
81
+ PREDICTIONS_COUNT_1H = "predictions_count_1h"
82
+
83
+
84
+ class EventKeyMetrics:
85
+ BASE_METRICS = "base_metrics"
86
+ CUSTOM_METRICS = "custom_metrics"
87
+ ENDPOINT_FEATURES = "endpoint_features"
88
+ GENERIC = "generic"
89
+ REAL_TIME = "real_time"
90
+
91
+
92
+ class TimeSeriesTarget:
93
+ TSDB = "tsdb"
94
+
95
+
96
+ class ModelEndpointTarget:
97
+ V3IO_NOSQL = "v3io-nosql"
98
+ SQL = "sql"
99
+
100
+
101
+ class ProjectSecretKeys:
102
+ ENDPOINT_STORE_CONNECTION = "MODEL_MONITORING_ENDPOINT_STORE_CONNECTION"
103
+ ACCESS_KEY = "MODEL_MONITORING_ACCESS_KEY"
104
+ KAFKA_BOOTSTRAP_SERVERS = "KAFKA_BOOTSTRAP_SERVERS"
105
+ STREAM_PATH = "STREAM_PATH"
106
+
107
+
108
+ class ModelMonitoringStoreKinds:
109
+ ENDPOINTS = "endpoints"
110
+ EVENTS = "events"
111
+
112
+
113
+ class FileTargetKind:
114
+ ENDPOINTS = "endpoints"
115
+ EVENTS = "events"
116
+ STREAM = "stream"
117
+ PARQUET = "parquet"
118
+ LOG_STREAM = "log_stream"
119
+
120
+
121
+ class ModelMonitoringMode(str, enum.Enum):
122
+ enabled = "enabled"
123
+ disabled = "disabled"
124
+
125
+
126
+ class EndpointType(enum.IntEnum):
127
+ NODE_EP = 1 # end point that is not a child of a router
128
+ ROUTER = 2 # endpoint that is router
129
+ LEAF_EP = 3 # end point that is a child of a router
130
+
131
+
132
+ def create_model_endpoint_uid(function_uri: str, versioned_model: str):
133
+ function_uri = FunctionURI.from_string(function_uri)
134
+ versioned_model = VersionedModel.from_string(versioned_model)
135
+
136
+ if (
137
+ not function_uri.project
138
+ or not function_uri.function
139
+ or not versioned_model.model
140
+ ):
141
+ raise ValueError("Both function_uri and versioned_model have to be initialized")
142
+
143
+ uid = EndpointUID(
144
+ function_uri.project,
145
+ function_uri.function,
146
+ function_uri.tag,
147
+ function_uri.hash_key,
148
+ versioned_model.model,
149
+ versioned_model.version,
150
+ )
151
+
152
+ return uid
153
+
154
+
155
+ @dataclass
156
+ class FunctionURI:
157
+ project: str
158
+ function: str
159
+ tag: Optional[str] = None
160
+ hash_key: Optional[str] = None
161
+
162
+ @classmethod
163
+ def from_string(cls, function_uri):
164
+ project, uri, tag, hash_key = mlrun.utils.parse_versioned_object_uri(
165
+ function_uri
166
+ )
167
+ return cls(
168
+ project=project,
169
+ function=uri,
170
+ tag=tag or None,
171
+ hash_key=hash_key or None,
172
+ )
173
+
174
+
175
+ @dataclass
176
+ class VersionedModel:
177
+ model: str
178
+ version: Optional[str]
179
+
180
+ @classmethod
181
+ def from_string(cls, model):
182
+ try:
183
+ model, version = model.split(":")
184
+ except ValueError:
185
+ model, version = model, None
186
+
187
+ return cls(model, version)
188
+
189
+
190
+ @dataclass
191
+ class EndpointUID:
192
+ project: str
193
+ function: str
194
+ function_tag: str
195
+ function_hash_key: str
196
+ model: str
197
+ model_version: str
198
+ uid: Optional[str] = None
199
+
200
+ def __post_init__(self):
201
+ function_ref = (
202
+ f"{self.function}_{self.function_tag or self.function_hash_key or 'N/A'}"
203
+ )
204
+ versioned_model = f"{self.model}_{self.model_version or 'N/A'}"
205
+ unique_string = f"{self.project}_{function_ref}_{versioned_model}"
206
+ self.uid = hashlib.sha1(unique_string.encode("utf-8")).hexdigest()
207
+
208
+ def __str__(self):
209
+ return self.uid
@@ -0,0 +1,167 @@
1
+ # Copyright 2023 Iguazio
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+ # flake8: noqa - this is until we take care of the F401 violations with respect to __all__ & sphinx
16
+
17
+ from .artifact import ArtifactCategories, ArtifactIdentifier, ArtifactsFormat
18
+ from .auth import (
19
+ AuthInfo,
20
+ AuthorizationAction,
21
+ AuthorizationResourceTypes,
22
+ AuthorizationVerificationInput,
23
+ Credentials,
24
+ ProjectsRole,
25
+ )
26
+ from .background_task import (
27
+ BackgroundTask,
28
+ BackgroundTaskMetadata,
29
+ BackgroundTaskSpec,
30
+ BackgroundTaskState,
31
+ BackgroundTaskStatus,
32
+ )
33
+ from .client_spec import ClientSpec
34
+ from .clusterization_spec import (
35
+ ClusterizationSpec,
36
+ WaitForChiefToReachOnlineStateFeatureFlag,
37
+ )
38
+ from .constants import (
39
+ APIStates,
40
+ ClusterizationRole,
41
+ DeletionStrategy,
42
+ FeatureStorePartitionByField,
43
+ HeaderNames,
44
+ LogsCollectorMode,
45
+ OrderType,
46
+ PatchMode,
47
+ RunPartitionByField,
48
+ SortField,
49
+ )
50
+ from .events import (
51
+ AuthSecretEventActions,
52
+ EventClientKinds,
53
+ EventsModes,
54
+ SecretEventActions,
55
+ )
56
+ from .feature_store import (
57
+ EntitiesOutput,
58
+ Entity,
59
+ EntityListOutput,
60
+ EntityRecord,
61
+ Feature,
62
+ FeatureListOutput,
63
+ FeatureRecord,
64
+ FeatureSet,
65
+ FeatureSetDigestOutput,
66
+ FeatureSetDigestSpec,
67
+ FeatureSetIngestInput,
68
+ FeatureSetIngestOutput,
69
+ FeatureSetRecord,
70
+ FeatureSetsOutput,
71
+ FeatureSetSpec,
72
+ FeatureSetsTagsOutput,
73
+ FeaturesOutput,
74
+ FeatureVector,
75
+ FeatureVectorRecord,
76
+ FeatureVectorsOutput,
77
+ FeatureVectorsTagsOutput,
78
+ )
79
+ from .frontend_spec import (
80
+ AuthenticationFeatureFlag,
81
+ FeatureFlags,
82
+ FrontendSpec,
83
+ NuclioStreamsFeatureFlag,
84
+ PreemptionNodesFeatureFlag,
85
+ ProjectMembershipFeatureFlag,
86
+ )
87
+ from .function import FunctionState, PreemptionModes, SecurityContextEnrichmentModes
88
+ from .http import HTTPSessionRetryMode
89
+ from .hub import (
90
+ HubCatalog,
91
+ HubItem,
92
+ HubObjectMetadata,
93
+ HubSource,
94
+ HubSourceSpec,
95
+ IndexedHubSource,
96
+ last_source_index,
97
+ )
98
+ from .k8s import NodeSelectorOperator, Resources, ResourceSpec
99
+ from .memory_reports import MostCommonObjectTypesReport, ObjectTypeReport
100
+ from .model_endpoints import (
101
+ Features,
102
+ FeatureValues,
103
+ GrafanaColumn,
104
+ GrafanaDataPoint,
105
+ GrafanaNumberColumn,
106
+ GrafanaStringColumn,
107
+ GrafanaTable,
108
+ GrafanaTimeSeriesTarget,
109
+ ModelEndpoint,
110
+ ModelEndpointList,
111
+ ModelEndpointMetadata,
112
+ ModelEndpointSpec,
113
+ ModelEndpointStatus,
114
+ ModelMonitoringStoreKinds,
115
+ )
116
+ from .notification import (
117
+ Notification,
118
+ NotificationKind,
119
+ NotificationSeverity,
120
+ NotificationStatus,
121
+ SetNotificationRequest,
122
+ )
123
+ from .object import ObjectKind, ObjectMetadata, ObjectSpec, ObjectStatus
124
+ from .pipeline import PipelinesFormat, PipelinesOutput, PipelinesPagination
125
+ from .project import (
126
+ IguazioProject,
127
+ Project,
128
+ ProjectDesiredState,
129
+ ProjectMetadata,
130
+ ProjectOwner,
131
+ ProjectsFormat,
132
+ ProjectsOutput,
133
+ ProjectSpec,
134
+ ProjectState,
135
+ ProjectStatus,
136
+ ProjectSummariesOutput,
137
+ ProjectSummary,
138
+ )
139
+ from .regex import RegexMatchModes
140
+ from .runs import RunIdentifier
141
+ from .runtime_resource import (
142
+ GroupedByJobRuntimeResourcesOutput,
143
+ GroupedByProjectRuntimeResourcesOutput,
144
+ KindRuntimeResources,
145
+ ListRuntimeResourcesGroupByField,
146
+ RuntimeResource,
147
+ RuntimeResources,
148
+ RuntimeResourcesOutput,
149
+ )
150
+ from .schedule import (
151
+ ScheduleCronTrigger,
152
+ ScheduleIdentifier,
153
+ ScheduleInput,
154
+ ScheduleKinds,
155
+ ScheduleOutput,
156
+ ScheduleRecord,
157
+ SchedulesOutput,
158
+ ScheduleUpdate,
159
+ )
160
+ from .secret import (
161
+ AuthSecretData,
162
+ SecretKeysData,
163
+ SecretProviderName,
164
+ SecretsData,
165
+ UserSecretCreationRequest,
166
+ )
167
+ from .tag import Tag, TagObjects
@@ -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.
@@ -16,31 +16,30 @@ import typing
16
16
 
17
17
  import pydantic
18
18
 
19
- import mlrun.api.utils.helpers
19
+ import mlrun.common.types
20
20
 
21
21
 
22
- class ArtifactCategories(mlrun.api.utils.helpers.StrEnum):
22
+ class ArtifactCategories(mlrun.common.types.StrEnum):
23
23
  model = "model"
24
24
  dataset = "dataset"
25
25
  other = "other"
26
26
 
27
- def to_kinds_filter(self) -> typing.Tuple[typing.List[str], bool]:
28
- # FIXME: these artifact definitions (or at least the kinds enum) should sit in a dedicated module
29
- # import here to prevent import cycle
30
- import mlrun.artifacts.dataset
31
- import mlrun.artifacts.model
27
+ # we define the link as a category to prevent import cycles, but it's not a real category
28
+ # and should not be used as such
29
+ link = "link"
32
30
 
33
- link_kind = mlrun.artifacts.base.LinkArtifact.kind
31
+ def to_kinds_filter(self) -> typing.Tuple[typing.List[str], bool]:
32
+ link_kind = ArtifactCategories.link.value
34
33
 
35
34
  if self.value == ArtifactCategories.model.value:
36
- return [mlrun.artifacts.model.ModelArtifact.kind, link_kind], False
35
+ return [ArtifactCategories.model.value, link_kind], False
37
36
  if self.value == ArtifactCategories.dataset.value:
38
- return [mlrun.artifacts.dataset.DatasetArtifact.kind, link_kind], False
37
+ return [ArtifactCategories.dataset.value, link_kind], False
39
38
  if self.value == ArtifactCategories.other.value:
40
39
  return (
41
40
  [
42
- mlrun.artifacts.model.ModelArtifact.kind,
43
- mlrun.artifacts.dataset.DatasetArtifact.kind,
41
+ ArtifactCategories.model.value,
42
+ ArtifactCategories.dataset.value,
44
43
  ],
45
44
  True,
46
45
  )
@@ -56,6 +55,6 @@ class ArtifactIdentifier(pydantic.BaseModel):
56
55
  # hash: typing.Optional[str]
57
56
 
58
57
 
59
- class ArtifactsFormat(mlrun.api.utils.helpers.StrEnum):
58
+ class ArtifactsFormat(mlrun.common.types.StrEnum):
60
59
  full = "full"
61
60
  legacy = "legacy"
@@ -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.
@@ -18,17 +18,17 @@ import pydantic
18
18
  from nuclio.auth import AuthInfo as NuclioAuthInfo
19
19
  from nuclio.auth import AuthKinds as NuclioAuthKinds
20
20
 
21
- import mlrun.api.utils.helpers
21
+ import mlrun.common.types
22
22
 
23
23
 
24
- class ProjectsRole(mlrun.api.utils.helpers.StrEnum):
24
+ class ProjectsRole(mlrun.common.types.StrEnum):
25
25
  iguazio = "iguazio"
26
26
  mlrun = "mlrun"
27
27
  nuclio = "nuclio"
28
28
  nop = "nop"
29
29
 
30
30
 
31
- class AuthorizationAction(mlrun.api.utils.helpers.StrEnum):
31
+ class AuthorizationAction(mlrun.common.types.StrEnum):
32
32
  read = "read"
33
33
  create = "create"
34
34
  update = "update"
@@ -39,7 +39,7 @@ class AuthorizationAction(mlrun.api.utils.helpers.StrEnum):
39
39
  store = "store"
40
40
 
41
41
 
42
- class AuthorizationResourceTypes(mlrun.api.utils.helpers.StrEnum):
42
+ class AuthorizationResourceTypes(mlrun.common.types.StrEnum):
43
43
  project = "project"
44
44
  log = "log"
45
45
  runtime_resource = "runtime-resource"
@@ -56,7 +56,7 @@ class AuthorizationResourceTypes(mlrun.api.utils.helpers.StrEnum):
56
56
  run = "run"
57
57
  model_endpoint = "model-endpoint"
58
58
  pipeline = "pipeline"
59
- marketplace_source = "marketplace-source"
59
+ hub_source = "hub-source"
60
60
 
61
61
  def to_resource_string(
62
62
  self,
@@ -85,8 +85,10 @@ class AuthorizationResourceTypes(mlrun.api.utils.helpers.StrEnum):
85
85
  AuthorizationResourceTypes.runtime_resource: "/projects/{project_name}/runtime-resources",
86
86
  AuthorizationResourceTypes.model_endpoint: "/projects/{project_name}/model-endpoints/{resource_name}",
87
87
  AuthorizationResourceTypes.pipeline: "/projects/{project_name}/pipelines/{resource_name}",
88
- # Marketplace sources are not project-scoped, and auth is globally on the sources endpoint.
89
- AuthorizationResourceTypes.marketplace_source: "/marketplace/sources",
88
+ # Hub sources are not project-scoped, and auth is globally on the sources endpoint.
89
+ # TODO - this was reverted to /marketplace since MLRun needs to be able to run with old igz versions. Once
90
+ # we only have support for igz versions that support /hub (>=3.5.4), change this to "/hub/sources".
91
+ AuthorizationResourceTypes.hub_source: "/marketplace/sources",
90
92
  }[self].format(project_name=project_name, resource_name=resource_name)
91
93
 
92
94