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.
@@ -35,23 +35,25 @@ from kubernetes.client.rest import ApiException
35
35
  from sqlalchemy.orm import Session
36
36
 
37
37
  import mlrun.api.crud
38
+ import mlrun.api.crud.runtimes.nuclio.function
38
39
  import mlrun.api.db.session
39
- import mlrun.api.schemas
40
+ import mlrun.api.launcher
40
41
  import mlrun.api.utils.auth.verifier
41
42
  import mlrun.api.utils.background_tasks
42
43
  import mlrun.api.utils.clients.chief
44
+ import mlrun.api.utils.singletons.k8s
43
45
  import mlrun.api.utils.singletons.project_member
46
+ import mlrun.common.model_monitoring
47
+ import mlrun.common.schemas
44
48
  from mlrun.api.api import deps
45
49
  from mlrun.api.api.utils import get_run_db_instance, log_and_raise, log_path
46
50
  from mlrun.api.crud.secrets import Secrets, SecretsClientType
47
- from mlrun.api.schemas import SecretProviderName, SecretsData
48
- from mlrun.api.utils.singletons.k8s import get_k8s
49
- from mlrun.builder import build_runtime
51
+ from mlrun.api.utils.builder import build_runtime
52
+ from mlrun.api.utils.singletons.scheduler import get_scheduler
50
53
  from mlrun.config import config
51
54
  from mlrun.errors import MLRunRuntimeError, err_to_str
52
55
  from mlrun.run import new_function
53
56
  from mlrun.runtimes import RuntimeKinds, ServingRuntime, runtime_resources_map
54
- from mlrun.runtimes.function import deploy_nuclio_function, get_nuclio_deploy_status
55
57
  from mlrun.runtimes.utils import get_item_name
56
58
  from mlrun.utils import get_in, logger, parse_versioned_object_uri, update_in
57
59
  from mlrun.utils.model_monitoring import parse_model_endpoint_store_prefix
@@ -59,14 +61,20 @@ from mlrun.utils.model_monitoring import parse_model_endpoint_store_prefix
59
61
  router = APIRouter()
60
62
 
61
63
 
62
- @router.post("/func/{project}/{name}")
64
+ @router.post(
65
+ "/func/{project}/{name}",
66
+ deprecated=True,
67
+ description="/func/{project}/{name} is deprecated in 1.4.0 and will be removed in 1.6.0, "
68
+ "use /projects/{project}/functions/{name} instead",
69
+ )
70
+ @router.post("/projects/{project}/functions/{name}")
63
71
  async def store_function(
64
72
  request: Request,
65
73
  project: str,
66
74
  name: str,
67
75
  tag: str = "",
68
76
  versioned: bool = False,
69
- auth_info: mlrun.api.schemas.AuthInfo = Depends(deps.authenticate_request),
77
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(deps.authenticate_request),
70
78
  db_session: Session = Depends(deps.get_db_session),
71
79
  ):
72
80
  await run_in_threadpool(
@@ -76,10 +84,10 @@ async def store_function(
76
84
  auth_info=auth_info,
77
85
  )
78
86
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
79
- mlrun.api.schemas.AuthorizationResourceTypes.function,
87
+ mlrun.common.schemas.AuthorizationResourceTypes.function,
80
88
  project,
81
89
  name,
82
- mlrun.api.schemas.AuthorizationAction.store,
90
+ mlrun.common.schemas.AuthorizationAction.store,
83
91
  auth_info,
84
92
  )
85
93
  data = None
@@ -104,13 +112,19 @@ async def store_function(
104
112
  }
105
113
 
106
114
 
107
- @router.get("/func/{project}/{name}")
115
+ @router.get(
116
+ "/func/{project}/{name}",
117
+ deprecated=True,
118
+ description="/func/{project}/{name} is deprecated in 1.4.0 and will be removed in 1.6.0, "
119
+ "use /projects/{project}/functions/{name} instead",
120
+ )
121
+ @router.get("/projects/{project}/functions/{name}")
108
122
  async def get_function(
109
123
  project: str,
110
124
  name: str,
111
125
  tag: str = "",
112
126
  hash_key="",
113
- auth_info: mlrun.api.schemas.AuthInfo = Depends(deps.authenticate_request),
127
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(deps.authenticate_request),
114
128
  db_session: Session = Depends(deps.get_db_session),
115
129
  ):
116
130
  func = await run_in_threadpool(
@@ -122,10 +136,10 @@ async def get_function(
122
136
  hash_key,
123
137
  )
124
138
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
125
- mlrun.api.schemas.AuthorizationResourceTypes.function,
139
+ mlrun.common.schemas.AuthorizationResourceTypes.function,
126
140
  project,
127
141
  name,
128
- mlrun.api.schemas.AuthorizationAction.read,
142
+ mlrun.common.schemas.AuthorizationAction.read,
129
143
  auth_info,
130
144
  )
131
145
  return {
@@ -139,37 +153,73 @@ async def get_function(
139
153
  async def delete_function(
140
154
  project: str,
141
155
  name: str,
142
- auth_info: mlrun.api.schemas.AuthInfo = Depends(deps.authenticate_request),
156
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(deps.authenticate_request),
143
157
  db_session: Session = Depends(deps.get_db_session),
144
158
  ):
145
159
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
146
- mlrun.api.schemas.AuthorizationResourceTypes.function,
160
+ mlrun.common.schemas.AuthorizationResourceTypes.function,
147
161
  project,
148
162
  name,
149
- mlrun.api.schemas.AuthorizationAction.delete,
163
+ mlrun.common.schemas.AuthorizationAction.delete,
150
164
  auth_info,
151
165
  )
166
+ # If the requested function has a schedule, we must delete it before deleting the function
167
+ try:
168
+ function_schedule = await run_in_threadpool(
169
+ get_scheduler().get_schedule,
170
+ db_session,
171
+ project,
172
+ name,
173
+ )
174
+ except mlrun.errors.MLRunNotFoundError:
175
+ function_schedule = None
176
+
177
+ if function_schedule:
178
+ # when deleting a function, we should also delete its schedules if exists
179
+ # schedules are only supposed to be run by the chief, therefore, if the function has a schedule,
180
+ # and we are running in worker, we send the request to the chief client
181
+ if (
182
+ mlrun.mlconf.httpdb.clusterization.role
183
+ != mlrun.common.schemas.ClusterizationRole.chief
184
+ ):
185
+ logger.info(
186
+ "Function has a schedule, deleting",
187
+ function=name,
188
+ project=project,
189
+ )
190
+ chief_client = mlrun.api.utils.clients.chief.Client()
191
+ await chief_client.delete_schedule(project=project, name=name)
192
+ else:
193
+ await run_in_threadpool(
194
+ get_scheduler().delete_schedule, db_session, project, name
195
+ )
152
196
  await run_in_threadpool(
153
197
  mlrun.api.crud.Functions().delete_function, db_session, project, name
154
198
  )
155
199
  return Response(status_code=HTTPStatus.NO_CONTENT.value)
156
200
 
157
201
 
158
- @router.get("/funcs")
202
+ @router.get(
203
+ "/funcs",
204
+ deprecated=True,
205
+ description="/funcs is deprecated in 1.4.0 and will be removed in 1.6.0, "
206
+ "use /projects/{project}/functions instead",
207
+ )
208
+ @router.get("/projects/{project}/functions")
159
209
  async def list_functions(
160
210
  project: str = None,
161
211
  name: str = None,
162
212
  tag: str = None,
163
213
  labels: List[str] = Query([], alias="label"),
164
214
  hash_key: str = None,
165
- auth_info: mlrun.api.schemas.AuthInfo = Depends(deps.authenticate_request),
215
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(deps.authenticate_request),
166
216
  db_session: Session = Depends(deps.get_db_session),
167
217
  ):
168
218
  if project is None:
169
219
  project = config.default_project
170
220
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_permissions(
171
221
  project,
172
- mlrun.api.schemas.AuthorizationAction.read,
222
+ mlrun.common.schemas.AuthorizationAction.read,
173
223
  auth_info,
174
224
  )
175
225
  functions = await run_in_threadpool(
@@ -182,7 +232,7 @@ async def list_functions(
182
232
  hash_key=hash_key,
183
233
  )
184
234
  functions = await mlrun.api.utils.auth.verifier.AuthVerifier().filter_project_resources_by_permissions(
185
- mlrun.api.schemas.AuthorizationResourceTypes.function,
235
+ mlrun.common.schemas.AuthorizationResourceTypes.function,
186
236
  functions,
187
237
  lambda function: (
188
238
  function.get("metadata", {}).get("project", mlrun.mlconf.default_project),
@@ -199,13 +249,13 @@ async def list_functions(
199
249
  @router.post("/build/function/")
200
250
  async def build_function(
201
251
  request: Request,
202
- auth_info: mlrun.api.schemas.AuthInfo = Depends(deps.authenticate_request),
252
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(deps.authenticate_request),
203
253
  db_session: Session = Depends(deps.get_db_session),
204
254
  client_version: Optional[str] = Header(
205
- None, alias=mlrun.api.schemas.HeaderNames.client_version
255
+ None, alias=mlrun.common.schemas.HeaderNames.client_version
206
256
  ),
207
257
  client_python_version: Optional[str] = Header(
208
- None, alias=mlrun.api.schemas.HeaderNames.python_version
258
+ None, alias=mlrun.common.schemas.HeaderNames.python_version
209
259
  ),
210
260
  ):
211
261
  data = None
@@ -225,10 +275,10 @@ async def build_function(
225
275
  auth_info=auth_info,
226
276
  )
227
277
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
228
- mlrun.api.schemas.AuthorizationResourceTypes.function,
278
+ mlrun.common.schemas.AuthorizationResourceTypes.function,
229
279
  project,
230
280
  function_name,
231
- mlrun.api.schemas.AuthorizationAction.update,
281
+ mlrun.common.schemas.AuthorizationAction.update,
232
282
  auth_info,
233
283
  )
234
284
 
@@ -240,7 +290,7 @@ async def build_function(
240
290
  ).get("track_models", False):
241
291
  if (
242
292
  mlrun.mlconf.httpdb.clusterization.role
243
- != mlrun.api.schemas.ClusterizationRole.chief
293
+ != mlrun.common.schemas.ClusterizationRole.chief
244
294
  ):
245
295
  logger.info(
246
296
  "Requesting to deploy serving function with track models, re-routing to chief",
@@ -275,18 +325,18 @@ async def build_function(
275
325
  }
276
326
 
277
327
 
278
- @router.post("/start/function", response_model=mlrun.api.schemas.BackgroundTask)
279
- @router.post("/start/function/", response_model=mlrun.api.schemas.BackgroundTask)
328
+ @router.post("/start/function", response_model=mlrun.common.schemas.BackgroundTask)
329
+ @router.post("/start/function/", response_model=mlrun.common.schemas.BackgroundTask)
280
330
  async def start_function(
281
331
  request: Request,
282
332
  background_tasks: BackgroundTasks,
283
- auth_info: mlrun.api.schemas.AuthInfo = Depends(deps.authenticate_request),
333
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(deps.authenticate_request),
284
334
  db_session: Session = Depends(deps.get_db_session),
285
335
  client_version: Optional[str] = Header(
286
- None, alias=mlrun.api.schemas.HeaderNames.client_version
336
+ None, alias=mlrun.common.schemas.HeaderNames.client_version
287
337
  ),
288
338
  client_python_version: Optional[str] = Header(
289
- None, alias=mlrun.api.schemas.HeaderNames.python_version
339
+ None, alias=mlrun.common.schemas.HeaderNames.python_version
290
340
  ),
291
341
  ):
292
342
  # TODO: ensure project here !!! for background task
@@ -300,10 +350,10 @@ async def start_function(
300
350
 
301
351
  function = await run_in_threadpool(_parse_start_function_body, db_session, data)
302
352
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
303
- mlrun.api.schemas.AuthorizationResourceTypes.function,
353
+ mlrun.common.schemas.AuthorizationResourceTypes.function,
304
354
  function.metadata.project,
305
355
  function.metadata.name,
306
- mlrun.api.schemas.AuthorizationAction.update,
356
+ mlrun.common.schemas.AuthorizationAction.update,
307
357
  auth_info,
308
358
  )
309
359
  background_timeout = mlrun.mlconf.background_tasks.default_timeouts.runtimes.dask
@@ -329,7 +379,7 @@ async def start_function(
329
379
  @router.post("/status/function/")
330
380
  async def function_status(
331
381
  request: Request,
332
- auth_info: mlrun.api.schemas.AuthInfo = Depends(deps.authenticate_request),
382
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(deps.authenticate_request),
333
383
  ):
334
384
  data = None
335
385
  try:
@@ -353,16 +403,16 @@ async def build_status(
353
403
  logs: bool = True,
354
404
  last_log_timestamp: float = 0.0,
355
405
  verbose: bool = False,
356
- auth_info: mlrun.api.schemas.AuthInfo = Depends(deps.authenticate_request),
406
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(deps.authenticate_request),
357
407
  db_session: Session = Depends(deps.get_db_session),
358
408
  ):
359
409
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
360
- mlrun.api.schemas.AuthorizationResourceTypes.function,
410
+ mlrun.common.schemas.AuthorizationResourceTypes.function,
361
411
  project or mlrun.mlconf.default_project,
362
412
  name,
363
413
  # store since with the current mechanism we update the status (and store the function) in the DB when a client
364
414
  # query for the status
365
- mlrun.api.schemas.AuthorizationAction.store,
415
+ mlrun.common.schemas.AuthorizationAction.store,
366
416
  auth_info,
367
417
  )
368
418
  fn = await run_in_threadpool(
@@ -388,13 +438,10 @@ async def build_status(
388
438
  return await run_in_threadpool(
389
439
  _handle_job_deploy_status,
390
440
  db_session,
391
- auth_info,
392
441
  fn,
393
442
  name,
394
443
  project,
395
444
  tag,
396
- last_log_timestamp,
397
- verbose,
398
445
  offset,
399
446
  logs,
400
447
  )
@@ -402,13 +449,10 @@ async def build_status(
402
449
 
403
450
  def _handle_job_deploy_status(
404
451
  db_session,
405
- auth_info,
406
452
  fn,
407
453
  name,
408
454
  project,
409
455
  tag,
410
- last_log_timestamp,
411
- verbose,
412
456
  offset,
413
457
  logs,
414
458
  ):
@@ -418,7 +462,7 @@ def _handle_job_deploy_status(
418
462
  image = get_in(fn, "spec.build.image", "")
419
463
  out = b""
420
464
  if not pod:
421
- if state == mlrun.api.schemas.FunctionState.ready:
465
+ if state == mlrun.common.schemas.FunctionState.ready:
422
466
  # when the function has been built we set the created image into the `spec.image` for reference see at the
423
467
  # end of the function where we resolve if the status is ready and then set the spec.build.image to
424
468
  # spec.image
@@ -440,8 +484,7 @@ def _handle_job_deploy_status(
440
484
  terminal_states = ["failed", "error", "ready"]
441
485
  log_file = log_path(project, f"build_{name}__{tag or 'latest'}")
442
486
  if state in terminal_states and log_file.exists():
443
-
444
- if state == mlrun.api.schemas.FunctionState.ready:
487
+ if state == mlrun.common.schemas.FunctionState.ready:
445
488
  # when the function has been built we set the created image into the `spec.image` for reference see at the
446
489
  # end of the function where we resolve if the status is ready and then set the spec.build.image to
447
490
  # spec.image
@@ -464,20 +507,22 @@ def _handle_job_deploy_status(
464
507
  },
465
508
  )
466
509
 
467
- logger.info(f"get pod {pod} status")
468
- state = get_k8s().get_pod_status(pod)
469
- logger.info(f"pod state={state}")
510
+ # TODO: change state to pod_status
511
+ state = mlrun.api.utils.singletons.k8s.get_k8s_helper(silent=False).get_pod_status(
512
+ pod
513
+ )
514
+ logger.info("Resolved pod status", pod_status=state, pod_name=pod)
470
515
 
471
516
  if state == "succeeded":
472
- logger.info("build completed successfully")
473
- state = mlrun.api.schemas.FunctionState.ready
517
+ logger.info("Build completed successfully")
518
+ state = mlrun.common.schemas.FunctionState.ready
474
519
  if state in ["failed", "error"]:
475
- logger.error(f"build {state}, watch the build pod logs: {pod}")
476
- state = mlrun.api.schemas.FunctionState.error
520
+ logger.error("Build failed", pod_name=pod, pod_status=state)
521
+ state = mlrun.common.schemas.FunctionState.error
477
522
 
478
523
  if (logs and state != "pending") or state in terminal_states:
479
524
  try:
480
- resp = get_k8s().logs(pod)
525
+ resp = mlrun.api.utils.singletons.k8s.get_k8s_helper(silent=False).logs(pod)
481
526
  except ApiException as exc:
482
527
  logger.warning(
483
528
  "Failed to get build logs",
@@ -489,6 +534,7 @@ def _handle_job_deploy_status(
489
534
  resp = ""
490
535
 
491
536
  if state in terminal_states:
537
+ # TODO: move to log collector
492
538
  log_file.parent.mkdir(parents=True, exist_ok=True)
493
539
  with log_file.open("wb") as fp:
494
540
  fp.write(resp.encode())
@@ -498,11 +544,11 @@ def _handle_job_deploy_status(
498
544
  out = resp[offset:].encode()
499
545
 
500
546
  update_in(fn, "status.state", state)
501
- if state == mlrun.api.schemas.FunctionState.ready:
547
+ if state == mlrun.common.schemas.FunctionState.ready:
502
548
  update_in(fn, "spec.image", image)
503
549
 
504
550
  versioned = False
505
- if state == mlrun.api.schemas.FunctionState.ready:
551
+ if state == mlrun.common.schemas.FunctionState.ready:
506
552
  versioned = True
507
553
  mlrun.api.crud.Functions().store_function(
508
554
  db_session,
@@ -535,7 +581,7 @@ def _handle_nuclio_deploy_status(
535
581
  last_log_timestamp,
536
582
  text,
537
583
  status,
538
- ) = get_nuclio_deploy_status(
584
+ ) = mlrun.api.crud.runtimes.nuclio.function.get_nuclio_deploy_status(
539
585
  name,
540
586
  project,
541
587
  tag,
@@ -607,7 +653,7 @@ def _handle_nuclio_deploy_status(
607
653
 
608
654
  def _build_function(
609
655
  db_session,
610
- auth_info: mlrun.api.schemas.AuthInfo,
656
+ auth_info: mlrun.common.schemas.AuthInfo,
611
657
  function,
612
658
  with_mlrun=True,
613
659
  skip_deployed=False,
@@ -629,9 +675,9 @@ def _build_function(
629
675
  try:
630
676
  run_db = get_run_db_instance(db_session)
631
677
  fn.set_db_connection(run_db)
678
+ mlrun.api.launcher.ServerSideLauncher.enrich_runtime(runtime=fn)
632
679
  fn.save(versioned=False)
633
680
  if fn.kind in RuntimeKinds.nuclio_runtimes():
634
-
635
681
  mlrun.api.api.utils.apply_enrichment_and_validation_on_function(
636
682
  fn,
637
683
  auth_info,
@@ -642,25 +688,37 @@ def _build_function(
642
688
  try:
643
689
  if fn.spec.track_models:
644
690
  logger.info("Tracking enabled, initializing model monitoring")
645
- _init_serving_function_stream_args(fn=fn)
646
- # get model monitoring access key
647
- model_monitoring_access_key = _process_model_monitoring_secret(
648
- db_session,
649
- fn.metadata.project,
650
- "MODEL_MONITORING_ACCESS_KEY",
651
- )
652
- # initialize model monitoring stream
653
- _create_model_monitoring_stream(project=fn.metadata.project)
691
+
692
+ # Generating model monitoring access key
693
+ model_monitoring_access_key = None
694
+ if not mlrun.mlconf.is_ce_mode():
695
+ model_monitoring_access_key = _process_model_monitoring_secret(
696
+ db_session,
697
+ fn.metadata.project,
698
+ mlrun.common.model_monitoring.ProjectSecretKeys.ACCESS_KEY,
699
+ )
700
+
701
+ stream_path = mlrun.utils.model_monitoring.get_stream_path(
702
+ project=fn.metadata.project
703
+ )
704
+
705
+ if stream_path.startswith("v3io://"):
706
+ # Initialize model monitoring V3IO stream
707
+ _create_model_monitoring_stream(
708
+ project=fn.metadata.project,
709
+ function=fn,
710
+ stream_path=stream_path,
711
+ )
654
712
 
655
713
  if fn.spec.tracking_policy:
656
- # convert to `TrackingPolicy` object as `fn.spec.tracking_policy` is provided as a dict
714
+ # Convert to `TrackingPolicy` object as `fn.spec.tracking_policy` is provided as a dict
657
715
  fn.spec.tracking_policy = (
658
716
  mlrun.utils.model_monitoring.TrackingPolicy.from_dict(
659
717
  fn.spec.tracking_policy
660
718
  )
661
719
  )
662
720
  else:
663
- # initialize tracking policy with default values
721
+ # Initialize tracking policy with default values
664
722
  fn.spec.tracking_policy = (
665
723
  mlrun.utils.model_monitoring.TrackingPolicy()
666
724
  )
@@ -668,10 +726,10 @@ def _build_function(
668
726
  # deploy both model monitoring stream and model monitoring batch job
669
727
  mlrun.api.crud.ModelEndpoints().deploy_monitoring_functions(
670
728
  project=fn.metadata.project,
671
- model_monitoring_access_key=model_monitoring_access_key,
672
729
  db_session=db_session,
673
730
  auth_info=auth_info,
674
731
  tracking_policy=fn.spec.tracking_policy,
732
+ model_monitoring_access_key=model_monitoring_access_key,
675
733
  )
676
734
  except Exception as exc:
677
735
  logger.warning(
@@ -681,7 +739,7 @@ def _build_function(
681
739
  traceback=traceback.format_exc(),
682
740
  )
683
741
 
684
- deploy_nuclio_function(
742
+ mlrun.api.crud.runtimes.nuclio.function.deploy_nuclio_function(
685
743
  fn,
686
744
  auth_info=auth_info,
687
745
  client_version=client_version,
@@ -710,7 +768,7 @@ def _build_function(
710
768
  client_python_version=client_python_version,
711
769
  )
712
770
  fn.save(versioned=True)
713
- logger.info("Fn:\n %s", fn.to_yaml())
771
+ logger.info("Resolved function", fn=fn.to_yaml())
714
772
  except Exception as err:
715
773
  logger.error(traceback.format_exc())
716
774
  log_and_raise(
@@ -743,7 +801,7 @@ def _parse_start_function_body(db_session, data):
743
801
 
744
802
  def _start_function(
745
803
  function,
746
- auth_info: mlrun.api.schemas.AuthInfo,
804
+ auth_info: mlrun.common.schemas.AuthInfo,
747
805
  client_version: str = None,
748
806
  client_python_version: str = None,
749
807
  ):
@@ -781,7 +839,7 @@ def _start_function(
781
839
  mlrun.api.db.session.close_session(db_session)
782
840
 
783
841
 
784
- async def _get_function_status(data, auth_info: mlrun.api.schemas.AuthInfo):
842
+ async def _get_function_status(data, auth_info: mlrun.common.schemas.AuthInfo):
785
843
  logger.info(f"function_status:\n{data}")
786
844
  selector = data.get("selector")
787
845
  kind = data.get("kind")
@@ -797,10 +855,10 @@ async def _get_function_status(data, auth_info: mlrun.api.schemas.AuthInfo):
797
855
  project, name, _ = mlrun.runtimes.utils.parse_function_selector(selector)
798
856
 
799
857
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
800
- mlrun.api.schemas.AuthorizationResourceTypes.function,
858
+ mlrun.common.schemas.AuthorizationResourceTypes.function,
801
859
  project,
802
860
  name,
803
- mlrun.api.schemas.AuthorizationAction.read,
861
+ mlrun.common.schemas.AuthorizationAction.read,
804
862
  auth_info,
805
863
  )
806
864
 
@@ -822,10 +880,8 @@ async def _get_function_status(data, auth_info: mlrun.api.schemas.AuthInfo):
822
880
  )
823
881
 
824
882
 
825
- def _create_model_monitoring_stream(project: str):
826
- stream_path = config.model_endpoint_monitoring.store_prefixes.default.format(
827
- project=project, kind="stream"
828
- )
883
+ def _create_model_monitoring_stream(project: str, function, stream_path):
884
+ _init_serving_function_stream_args(fn=function)
829
885
 
830
886
  _, container, stream_path = parse_model_endpoint_store_prefix(stream_path)
831
887
 
@@ -886,8 +942,7 @@ def _process_model_monitoring_secret(db_session, project_name: str, secret_key:
886
942
  logger.info(
887
943
  "Getting project secret", project_name=project_name, namespace=config.namespace
888
944
  )
889
-
890
- provider = SecretProviderName.kubernetes
945
+ provider = mlrun.common.schemas.SecretProviderName.kubernetes
891
946
  secret_value = Secrets().get_project_secret(
892
947
  project_name,
893
948
  provider,
@@ -908,8 +963,6 @@ def _process_model_monitoring_secret(db_session, project_name: str, secret_key:
908
963
  allow_internal_secrets=True,
909
964
  )
910
965
  if not secret_value:
911
- import mlrun.api.utils.singletons.project_member
912
-
913
966
  project_owner = mlrun.api.utils.singletons.project_member.get_project_member().get_project_owner(
914
967
  db_session, project_name
915
968
  )
@@ -926,7 +979,9 @@ def _process_model_monitoring_secret(db_session, project_name: str, secret_key:
926
979
  project_owner=project_owner.username,
927
980
  )
928
981
 
929
- secrets = SecretsData(provider=provider, secrets={internal_key_name: secret_value})
982
+ secrets = mlrun.common.schemas.SecretsData(
983
+ provider=provider, secrets={internal_key_name: secret_value}
984
+ )
930
985
  Secrets().store_project_secrets(project_name, secrets, allow_internal_secrets=True)
931
986
  if user_provided_key:
932
987
  logger.info(