zenml-nightly 0.64.0.dev20240811__py3-none-any.whl → 0.65.0.dev20240906__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.
Files changed (274) hide show
  1. README.md +1 -1
  2. RELEASE_NOTES.md +68 -4
  3. zenml/VERSION +1 -1
  4. zenml/artifacts/utils.py +13 -6
  5. zenml/cli/__init__.py +1 -1
  6. zenml/cli/base.py +4 -4
  7. zenml/cli/integration.py +48 -9
  8. zenml/cli/pipeline.py +9 -2
  9. zenml/cli/stack.py +39 -27
  10. zenml/cli/utils.py +13 -0
  11. zenml/client.py +15 -17
  12. zenml/config/server_config.py +30 -0
  13. zenml/config/source.py +3 -7
  14. zenml/constants.py +5 -3
  15. zenml/entrypoints/base_entrypoint_configuration.py +41 -27
  16. zenml/entrypoints/step_entrypoint_configuration.py +5 -2
  17. zenml/enums.py +2 -0
  18. zenml/environment.py +31 -0
  19. zenml/feature_stores/base_feature_store.py +4 -6
  20. zenml/integrations/__init__.py +3 -0
  21. zenml/integrations/airflow/flavors/airflow_orchestrator_flavor.py +9 -0
  22. zenml/integrations/aws/__init__.py +2 -2
  23. zenml/integrations/azure/__init__.py +2 -2
  24. zenml/integrations/azure/azureml_utils.py +201 -0
  25. zenml/integrations/azure/flavors/azureml.py +139 -0
  26. zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +20 -118
  27. zenml/integrations/azure/flavors/azureml_step_operator_flavor.py +67 -14
  28. zenml/integrations/azure/orchestrators/azureml_orchestrator.py +58 -172
  29. zenml/integrations/azure/orchestrators/azureml_orchestrator_entrypoint_config.py +1 -0
  30. zenml/integrations/azure/service_connectors/azure_service_connector.py +4 -0
  31. zenml/integrations/azure/step_operators/azureml_step_operator.py +78 -177
  32. zenml/integrations/constants.py +3 -0
  33. zenml/integrations/databricks/__init__.py +22 -4
  34. zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +9 -0
  35. zenml/integrations/deepchecks/__init__.py +29 -11
  36. zenml/integrations/deepchecks/materializers/deepchecks_dataset_materializer.py +3 -1
  37. zenml/integrations/deepchecks/validation_checks.py +0 -30
  38. zenml/integrations/evidently/__init__.py +17 -2
  39. zenml/integrations/facets/__init__.py +21 -5
  40. zenml/integrations/feast/__init__.py +18 -5
  41. zenml/integrations/gcp/__init__.py +2 -2
  42. zenml/integrations/gcp/flavors/vertex_orchestrator_flavor.py +9 -0
  43. zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +10 -1
  44. zenml/integrations/great_expectations/__init__.py +21 -7
  45. zenml/integrations/huggingface/__init__.py +39 -15
  46. zenml/integrations/huggingface/materializers/__init__.py +3 -0
  47. zenml/integrations/huggingface/materializers/huggingface_datasets_materializer.py +3 -1
  48. zenml/integrations/huggingface/materializers/huggingface_pt_model_materializer.py +1 -1
  49. zenml/integrations/huggingface/materializers/huggingface_t5_materializer.py +107 -0
  50. zenml/integrations/huggingface/materializers/huggingface_tf_model_materializer.py +1 -1
  51. zenml/integrations/huggingface/materializers/huggingface_tokenizer_materializer.py +2 -2
  52. zenml/integrations/huggingface/steps/accelerate_runner.py +108 -85
  53. zenml/integrations/hyperai/flavors/hyperai_orchestrator_flavor.py +9 -0
  54. zenml/integrations/kubeflow/flavors/kubeflow_orchestrator_flavor.py +9 -0
  55. zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py +10 -1
  56. zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +9 -0
  57. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +10 -1
  58. zenml/integrations/lightning/__init__.py +48 -0
  59. zenml/integrations/lightning/flavors/__init__.py +23 -0
  60. zenml/integrations/lightning/flavors/lightning_orchestrator_flavor.py +148 -0
  61. zenml/integrations/lightning/orchestrators/__init__.py +23 -0
  62. zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +596 -0
  63. zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +307 -0
  64. zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint_configuration.py +77 -0
  65. zenml/integrations/lightning/orchestrators/utils.py +67 -0
  66. zenml/integrations/mlflow/__init__.py +43 -5
  67. zenml/integrations/mlflow/services/mlflow_deployment.py +26 -0
  68. zenml/integrations/numpy/__init__.py +32 -0
  69. zenml/integrations/numpy/materializers/__init__.py +18 -0
  70. zenml/integrations/numpy/materializers/numpy_materializer.py +246 -0
  71. zenml/integrations/pandas/__init__.py +32 -0
  72. zenml/integrations/pandas/materializers/__init__.py +18 -0
  73. zenml/integrations/pandas/materializers/pandas_materializer.py +192 -0
  74. zenml/integrations/prodigy/annotators/prodigy_annotator.py +1 -1
  75. zenml/integrations/seldon/__init__.py +18 -3
  76. zenml/integrations/sklearn/__init__.py +1 -1
  77. zenml/integrations/skypilot_azure/__init__.py +1 -1
  78. zenml/integrations/tensorboard/__init__.py +1 -1
  79. zenml/integrations/tensorflow/__init__.py +2 -2
  80. zenml/integrations/wandb/experiment_trackers/wandb_experiment_tracker.py +1 -1
  81. zenml/integrations/whylogs/__init__.py +18 -2
  82. zenml/logging/step_logging.py +9 -2
  83. zenml/materializers/__init__.py +0 -4
  84. zenml/materializers/base_materializer.py +4 -0
  85. zenml/materializers/numpy_materializer.py +23 -234
  86. zenml/materializers/pandas_materializer.py +22 -179
  87. zenml/model/model.py +91 -2
  88. zenml/model/utils.py +5 -5
  89. zenml/models/__init__.py +16 -3
  90. zenml/models/v2/core/model_version.py +1 -1
  91. zenml/models/v2/core/pipeline_run.py +31 -1
  92. zenml/models/v2/core/stack.py +51 -20
  93. zenml/models/v2/core/step_run.py +28 -0
  94. zenml/models/v2/misc/info_models.py +78 -0
  95. zenml/new/pipelines/pipeline.py +65 -25
  96. zenml/new/pipelines/run_utils.py +57 -136
  97. zenml/new/steps/step_context.py +17 -6
  98. zenml/orchestrators/base_orchestrator.py +9 -0
  99. zenml/orchestrators/step_launcher.py +37 -14
  100. zenml/orchestrators/step_runner.py +14 -13
  101. zenml/orchestrators/utils.py +107 -7
  102. zenml/service_connectors/service_connector_utils.py +2 -2
  103. zenml/stack/utils.py +11 -2
  104. zenml/stack_deployments/azure_stack_deployment.py +2 -1
  105. zenml/steps/base_step.py +62 -25
  106. zenml/steps/utils.py +115 -3
  107. zenml/utils/cloud_utils.py +8 -8
  108. zenml/utils/code_utils.py +130 -32
  109. zenml/utils/function_utils.py +7 -7
  110. zenml/utils/notebook_utils.py +14 -0
  111. zenml/utils/pipeline_docker_image_builder.py +1 -11
  112. zenml/utils/pydantic_utils.py +3 -3
  113. zenml/utils/secret_utils.py +2 -2
  114. zenml/utils/source_utils.py +67 -21
  115. zenml/utils/string_utils.py +29 -0
  116. zenml/zen_server/dashboard/assets/{404-CRAA_Lew.js → 404-nKxQ4QDX.js} +1 -1
  117. zenml/zen_server/dashboard/assets/{@radix-BXWm7HOa.js → @radix-DnFH_oo1.js} +1 -1
  118. zenml/zen_server/dashboard/assets/{@react-router-l3lMcXA2.js → @react-router-APVeuk-U.js} +1 -1
  119. zenml/zen_server/dashboard/assets/{@reactflow-CeVxyqYT.js → @reactflow-IuMOnBUC.js} +2 -2
  120. zenml/zen_server/dashboard/assets/{@tanstack-FmcYZMuX.js → @tanstack-QbMbTrh5.js} +1 -1
  121. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-CO2rOw5M.js +1 -0
  122. zenml/zen_server/dashboard/assets/{CodeSnippet-D0VLxT2A.js → CodeSnippet-i_WEOWw9.js} +1 -1
  123. zenml/zen_server/dashboard/assets/{CollapsibleCard-BaUPiVg0.js → CollapsibleCard-C9BzoY6q.js} +1 -1
  124. zenml/zen_server/dashboard/assets/Commands-m9HMl-eh.js +1 -0
  125. zenml/zen_server/dashboard/assets/{CopyButton-Dbo52T1K.js → CopyButton-BAYaQlWF.js} +1 -1
  126. zenml/zen_server/dashboard/assets/{CsvVizualization-D3kAypDj.js → CsvVizualization-Bbzv7VEL.js} +5 -5
  127. zenml/zen_server/dashboard/assets/{edit-C0MVvPD2.js → DialogItem-B576Svvy.js} +1 -1
  128. zenml/zen_server/dashboard/assets/{DisplayDate-DizbSeT-.js → DisplayDate-DkCy54Bp.js} +1 -1
  129. zenml/zen_server/dashboard/assets/EditSecretDialog-CmY9fiM0.js +1 -0
  130. zenml/zen_server/dashboard/assets/{EmptyState-BHblM39I.js → EmptyState-Cs3DEmso.js} +1 -1
  131. zenml/zen_server/dashboard/assets/{Error-C6LeJSER.js → Error-QMgFNDTs.js} +1 -1
  132. zenml/zen_server/dashboard/assets/{ExecutionStatus-jH4OrWBq.js → ExecutionStatus-BSQgMpzk.js} +1 -1
  133. zenml/zen_server/dashboard/assets/{Helpbox-aAB2XP-z.js → Helpbox-C96LeSX9.js} +1 -1
  134. zenml/zen_server/dashboard/assets/{Infobox-BQ0aty32.js → Infobox-BB7dfbrO.js} +1 -1
  135. zenml/zen_server/dashboard/assets/{InlineAvatar-DpTLgM3Q.js → InlineAvatar-C2ZECnGP.js} +1 -1
  136. zenml/zen_server/dashboard/assets/{Lock-CNyJvf2r.js → Lock-CmIn0szs.js} +1 -1
  137. zenml/zen_server/dashboard/assets/{MarkdownVisualization-Bajxn0HY.js → MarkdownVisualization-DS05sfBm.js} +1 -1
  138. zenml/zen_server/dashboard/assets/{NumberBox-BmKE0qnO.js → NumberBox-CrN0_kqI.js} +1 -1
  139. zenml/zen_server/dashboard/assets/Partials-RDhJ8Ci7.js +1 -0
  140. zenml/zen_server/dashboard/assets/{PasswordChecker-yGGoJSB-.js → PasswordChecker-DE71J_3F.js} +1 -1
  141. zenml/zen_server/dashboard/assets/ProviderIcon-wA4qBOv1.js +1 -0
  142. zenml/zen_server/dashboard/assets/ProviderRadio-DkPE6alG.js +1 -0
  143. zenml/zen_server/dashboard/assets/SearchField-BPNazO4G.js +1 -0
  144. zenml/zen_server/dashboard/assets/SetPassword-kA6Bi_Kp.js +1 -0
  145. zenml/zen_server/dashboard/assets/{Tick-uxv80Q6a.js → Tick-DEACFydX.js} +1 -1
  146. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-oN4G3sKz.js → UpdatePasswordSchemas-BKyR7Eqi.js} +1 -1
  147. zenml/zen_server/dashboard/assets/UsageReason-DbgUeRkI.js +1 -0
  148. zenml/zen_server/dashboard/assets/WizardFooter-sUnbJ70r.js +1 -0
  149. zenml/zen_server/dashboard/assets/{check-circle-1_I207rW.js → check-circle-DOoS4yhF.js} +1 -1
  150. zenml/zen_server/dashboard/assets/{chevron-down-BpaF8JqM.js → chevron-down-Cwb-W_B_.js} +1 -1
  151. zenml/zen_server/dashboard/assets/{chevron-right-double-Dk8e2L99.js → chevron-right-double-c9H46Kl8.js} +1 -1
  152. zenml/zen_server/dashboard/assets/{cloud-only-BkUuI0lZ.js → cloud-only-DrdxC8NV.js} +1 -1
  153. zenml/zen_server/dashboard/assets/code-browser-BJYErIjr.js +1 -0
  154. zenml/zen_server/dashboard/assets/{copy-f3XGPPxt.js → copy-CaGlDsUy.js} +1 -1
  155. zenml/zen_server/dashboard/assets/create-stack-u6VyIXZP.js +1 -0
  156. zenml/zen_server/dashboard/assets/{docker-8uj__HHK.js → docker-BFAFXr2_.js} +1 -1
  157. zenml/zen_server/dashboard/assets/{dots-horizontal-sKQlWEni.js → dots-horizontal-C6K59vUm.js} +1 -1
  158. zenml/zen_server/dashboard/assets/flyte-Cj-xy_8I.svg +10 -0
  159. zenml/zen_server/dashboard/assets/form-schemas-DD4OppNK.js +1 -0
  160. zenml/zen_server/dashboard/assets/gcp-Dj6ntk0L.js +1 -0
  161. zenml/zen_server/dashboard/assets/{help-FuHlZwn0.js → help-CwN931fX.js} +1 -1
  162. zenml/zen_server/dashboard/assets/{index-Bd1xgUQG.js → index-5GJ5ysEZ.js} +1 -1
  163. zenml/zen_server/dashboard/assets/index-CnqMjIZT.js +1 -0
  164. zenml/zen_server/dashboard/assets/index-CsIuf3i6.css +1 -0
  165. zenml/zen_server/dashboard/assets/index-Davdjm1d.js +55 -0
  166. zenml/zen_server/dashboard/assets/{index.esm-DT4uyn2i.js → index.esm-BE1uqCX5.js} +1 -1
  167. zenml/zen_server/dashboard/assets/kubernetes-BjbR6D-1.js +1 -0
  168. zenml/zen_server/dashboard/assets/{layout-D6oiSbfd.js → layout-Dru15_XR.js} +1 -1
  169. zenml/zen_server/dashboard/assets/{login-mutation-13A_JSVA.js → login-mutation-TIWnZoJ7.js} +1 -1
  170. zenml/zen_server/dashboard/assets/{logs-CgeE2vZP.js → logs-GiDJXbLS.js} +1 -1
  171. zenml/zen_server/dashboard/assets/metaflow-weOkWNyT.svg +10 -0
  172. zenml/zen_server/dashboard/assets/{not-found-B0Mmb90p.js → not-found-C_bW_Kkr.js} +1 -1
  173. zenml/zen_server/dashboard/assets/{package-DdkziX79.js → package-DYKZ5jKW.js} +1 -1
  174. zenml/zen_server/dashboard/assets/page-0eecLRNs.js +1 -0
  175. zenml/zen_server/dashboard/assets/{page-DugsjcQ_.js → page-BN7n3Dsp.js} +1 -1
  176. zenml/zen_server/dashboard/assets/{page-OFKSPyN7.js → page-BPFkP_IB.js} +1 -1
  177. zenml/zen_server/dashboard/assets/page-BSkbj719.js +1 -0
  178. zenml/zen_server/dashboard/assets/{page-YiF_fNbe.js → page-Bg5X2mLz.js} +1 -1
  179. zenml/zen_server/dashboard/assets/{page-DSTQnBk-.js → page-BhqIV8mu.js} +1 -1
  180. zenml/zen_server/dashboard/assets/page-BxPQz4Q8.js +1 -0
  181. zenml/zen_server/dashboard/assets/{page-DLpOnf7u.js → page-CDG9uQT9.js} +1 -1
  182. zenml/zen_server/dashboard/assets/{page-CCY6yfmu.js → page-CUOBhxxU.js} +1 -1
  183. zenml/zen_server/dashboard/assets/page-CrjI9mjm.js +1 -0
  184. zenml/zen_server/dashboard/assets/page-D4J2Oy-I.js +1 -0
  185. zenml/zen_server/dashboard/assets/{page-TXe1Eo3Z.js → page-D5I0-LSs.js} +1 -1
  186. zenml/zen_server/dashboard/assets/page-D7bwpJvV.js +1 -0
  187. zenml/zen_server/dashboard/assets/page-DCnizFO_.js +9 -0
  188. zenml/zen_server/dashboard/assets/page-DQBv3t8t.js +1 -0
  189. zenml/zen_server/dashboard/assets/page-DYNlbmas.js +1 -0
  190. zenml/zen_server/dashboard/assets/{page-Cgn-6v2Y.js → page-DsKroTLH.js} +1 -1
  191. zenml/zen_server/dashboard/assets/page-DsQOL6ZL.js +1 -0
  192. zenml/zen_server/dashboard/assets/{page-BGwA9B1M.js → page-Dvr6lpJm.js} +1 -1
  193. zenml/zen_server/dashboard/assets/{page-hQaiQXfg.js → page-Dy0EbJQD.js} +1 -1
  194. zenml/zen_server/dashboard/assets/page-DyM2M_wT.js +1 -0
  195. zenml/zen_server/dashboard/assets/page-HXZtxyWq.js +1 -0
  196. zenml/zen_server/dashboard/assets/page-OmVfClGH.js +2 -0
  197. zenml/zen_server/dashboard/assets/{page-RnG-qhv9.js → page-XReFLy-1.js} +1 -1
  198. zenml/zen_server/dashboard/assets/page-t1VWIy6W.js +1 -0
  199. zenml/zen_server/dashboard/assets/{page-BkjAUyTA.js → page-wPiJkPp6.js} +1 -1
  200. zenml/zen_server/dashboard/assets/{page-CxQmQqDw.js → page-wQ8_y5mW.js} +1 -1
  201. zenml/zen_server/dashboard/assets/persist-CnMMI8ls.js +1 -0
  202. zenml/zen_server/dashboard/assets/{persist-3-5nOJ6m.js → persist-g4uRK-v-.js} +1 -1
  203. zenml/zen_server/dashboard/assets/{plus-FB9-lEq_.js → plus-Bc8eLSDM.js} +1 -1
  204. zenml/zen_server/dashboard/assets/{refresh-COb6KYDi.js → refresh-CtPKdk2G.js} +1 -1
  205. zenml/zen_server/dashboard/assets/rocket-SESCGQXm.js +1 -0
  206. zenml/zen_server/dashboard/assets/sharedSchema-Dbpe2oAO.js +14 -0
  207. zenml/zen_server/dashboard/assets/stack-detail-query-fuuoot1D.js +1 -0
  208. zenml/zen_server/dashboard/assets/{terminal-grtjrIEJ.js → terminal-DRIPb4oF.js} +1 -1
  209. zenml/zen_server/dashboard/assets/{trash-Cd5CSFqA.js → trash-DUWZWzse.js} +1 -1
  210. zenml/zen_server/dashboard/assets/{update-server-settings-mutation-B8GB_ubU.js → update-server-settings-mutation-YhoZKgC9.js} +1 -1
  211. zenml/zen_server/dashboard/assets/{url-hcMJkz8p.js → url-DNHuFfYx.js} +1 -1
  212. zenml/zen_server/dashboard/assets/{zod-CnykDKJj.js → zod-uFd1wBcd.js} +1 -1
  213. zenml/zen_server/dashboard/index.html +7 -7
  214. zenml/zen_server/dashboard_legacy/asset-manifest.json +4 -4
  215. zenml/zen_server/dashboard_legacy/index.html +1 -1
  216. zenml/zen_server/dashboard_legacy/{precache-manifest.9c473c96a43298343a7ce1256183123b.js → precache-manifest.123c8e8fafecee40f30294ab26484cf1.js} +4 -4
  217. zenml/zen_server/dashboard_legacy/service-worker.js +1 -1
  218. zenml/zen_server/dashboard_legacy/static/js/{main.463c90b9.chunk.js → main.a98a73cf.chunk.js} +2 -2
  219. zenml/zen_server/dashboard_legacy/static/js/{main.463c90b9.chunk.js.map → main.a98a73cf.chunk.js.map} +1 -1
  220. zenml/zen_server/deploy/helm/Chart.yaml +1 -1
  221. zenml/zen_server/deploy/helm/README.md +2 -2
  222. zenml/zen_server/routers/service_connectors_endpoints.py +2 -4
  223. zenml/zen_server/routers/workspaces_endpoints.py +20 -66
  224. zenml/zen_server/secure_headers.py +120 -0
  225. zenml/zen_server/template_execution/runner_entrypoint_configuration.py +0 -2
  226. zenml/zen_server/template_execution/utils.py +1 -0
  227. zenml/zen_server/utils.py +0 -100
  228. zenml/zen_server/zen_server_api.py +4 -2
  229. zenml/zen_stores/migrations/versions/0.65.0_release.py +23 -0
  230. zenml/zen_stores/migrations/versions/bf2120261b5a_add_configured_model_version_id.py +74 -0
  231. zenml/zen_stores/rest_zen_store.py +4 -21
  232. zenml/zen_stores/schemas/constants.py +16 -0
  233. zenml/zen_stores/schemas/model_schemas.py +9 -3
  234. zenml/zen_stores/schemas/pipeline_run_schemas.py +22 -8
  235. zenml/zen_stores/schemas/step_run_schemas.py +23 -12
  236. zenml/zen_stores/sql_zen_store.py +312 -300
  237. zenml/zen_stores/zen_store_interface.py +0 -16
  238. {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.65.0.dev20240906.dist-info}/METADATA +9 -11
  239. {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.65.0.dev20240906.dist-info}/RECORD +242 -214
  240. zenml/models/v2/misc/full_stack.py +0 -129
  241. zenml/new/pipelines/model_utils.py +0 -72
  242. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-ErO9aOgK.js +0 -1
  243. zenml/zen_server/dashboard/assets/AwarenessChannel-CLXo5rKM.js +0 -1
  244. zenml/zen_server/dashboard/assets/Commands-JrcZK-3j.js +0 -1
  245. zenml/zen_server/dashboard/assets/EditSecretDialog-Bd7mFLS4.js +0 -1
  246. zenml/zen_server/dashboard/assets/ProviderRadio-BBqkIuTd.js +0 -1
  247. zenml/zen_server/dashboard/assets/RadioItem-xLhXoiFV.js +0 -1
  248. zenml/zen_server/dashboard/assets/SearchField-C9R0mdaX.js +0 -1
  249. zenml/zen_server/dashboard/assets/SetPassword-52sNxNiO.js +0 -1
  250. zenml/zen_server/dashboard/assets/SuccessStep-DlkItqYG.js +0 -1
  251. zenml/zen_server/dashboard/assets/aws-0_3UsPif.js +0 -1
  252. zenml/zen_server/dashboard/assets/database-cXYNX9tt.js +0 -1
  253. zenml/zen_server/dashboard/assets/file-text-B9JibxTs.js +0 -1
  254. zenml/zen_server/dashboard/assets/index-DaGknux4.css +0 -1
  255. zenml/zen_server/dashboard/assets/index-DhIZtpxB.js +0 -55
  256. zenml/zen_server/dashboard/assets/page-7-v2OBm-.js +0 -1
  257. zenml/zen_server/dashboard/assets/page-B3ozwdD1.js +0 -1
  258. zenml/zen_server/dashboard/assets/page-BnacgBiy.js +0 -1
  259. zenml/zen_server/dashboard/assets/page-BxF_KMQ3.js +0 -2
  260. zenml/zen_server/dashboard/assets/page-C4POHC0K.js +0 -1
  261. zenml/zen_server/dashboard/assets/page-C9kudd44.js +0 -9
  262. zenml/zen_server/dashboard/assets/page-CA1j3GpJ.js +0 -1
  263. zenml/zen_server/dashboard/assets/page-CgTe7Bme.js +0 -1
  264. zenml/zen_server/dashboard/assets/page-D2Goey3H.js +0 -1
  265. zenml/zen_server/dashboard/assets/page-DTysUGOy.js +0 -1
  266. zenml/zen_server/dashboard/assets/page-D_EXUFJb.js +0 -1
  267. zenml/zen_server/dashboard/assets/page-Db15QzsM.js +0 -1
  268. zenml/zen_server/dashboard/assets/page-T2BtjwPl.js +0 -1
  269. zenml/zen_server/dashboard/assets/play-circle-XSkLR12B.js +0 -1
  270. zenml/zen_server/dashboard/assets/sharedSchema-BoYx_B_L.js +0 -14
  271. zenml/zen_server/dashboard/assets/stack-detail-query-B-US_-wa.js +0 -1
  272. {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.65.0.dev20240906.dist-info}/LICENSE +0 -0
  273. {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.65.0.dev20240906.dist-info}/WHEEL +0 -0
  274. {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.65.0.dev20240906.dist-info}/entry_points.txt +0 -0
@@ -13,29 +13,16 @@
13
13
  # permissions and limitations under the License.
14
14
  """Implementation of the ZenML AzureML Step Operator."""
15
15
 
16
- import itertools
17
- import os
18
16
  from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Type, cast
19
17
 
20
- from azureml.core import (
21
- ComputeTarget,
22
- Environment,
23
- Experiment,
24
- ScriptRunConfig,
25
- Workspace,
26
- )
27
- from azureml.core.authentication import (
28
- AbstractAuthentication,
29
- ServicePrincipalAuthentication,
30
- )
31
- from azureml.core.conda_dependencies import CondaDependencies
18
+ from azure.ai.ml import MLClient, command
19
+ from azure.ai.ml.entities import Environment
20
+ from azure.core.credentials import TokenCredential
21
+ from azure.identity import ClientSecretCredential, DefaultAzureCredential
32
22
 
33
- import zenml
34
- from zenml.client import Client
35
- from zenml.constants import (
36
- ENV_ZENML_CONFIG_PATH,
37
- )
38
- from zenml.environment import Environment as ZenMLEnvironment
23
+ from zenml.config.build_configuration import BuildConfiguration
24
+ from zenml.enums import StackComponentType
25
+ from zenml.integrations.azure.azureml_utils import create_or_get_compute
39
26
  from zenml.integrations.azure.flavors.azureml_step_operator_flavor import (
40
27
  AzureMLStepOperatorConfig,
41
28
  AzureMLStepOperatorSettings,
@@ -43,20 +30,18 @@ from zenml.integrations.azure.flavors.azureml_step_operator_flavor import (
43
30
  from zenml.logger import get_logger
44
31
  from zenml.stack import Stack, StackValidator
45
32
  from zenml.step_operators import BaseStepOperator
46
- from zenml.utils import source_utils
47
- from zenml.utils.pipeline_docker_image_builder import (
48
- DOCKER_IMAGE_ZENML_CONFIG_DIR,
49
- PipelineDockerImageBuilder,
50
- )
51
33
 
52
34
  if TYPE_CHECKING:
53
- from zenml.config import DockerSettings
54
35
  from zenml.config.base_settings import BaseSettings
55
36
  from zenml.config.step_run_info import StepRunInfo
37
+ from zenml.models import PipelineDeploymentBase
56
38
 
57
39
  logger = get_logger(__name__)
58
40
 
59
41
 
42
+ AZUREML_STEP_OPERATOR_DOCKER_IMAGE_KEY = "azureml_step_operator"
43
+
44
+
60
45
  class AzureMLStepOperator(BaseStepOperator):
61
46
  """Step operator to run a step on AzureML.
62
47
 
@@ -87,11 +72,11 @@ class AzureMLStepOperator(BaseStepOperator):
87
72
  """Validates the stack.
88
73
 
89
74
  Returns:
90
- A validator that checks that the stack contains a remote artifact
91
- store.
75
+ A validator that checks that the stack contains a remote container
76
+ registry and a remote artifact store.
92
77
  """
93
78
 
94
- def _validate_remote_artifact_store(
79
+ def _validate_remote_components(
95
80
  stack: "Stack",
96
81
  ) -> Tuple[bool, str]:
97
82
  if stack.artifact_store.config.is_local:
@@ -104,113 +89,75 @@ class AzureMLStepOperator(BaseStepOperator):
104
89
  "step operator."
105
90
  )
106
91
 
92
+ container_registry = stack.container_registry
93
+ assert container_registry is not None
94
+
95
+ if container_registry.config.is_local:
96
+ return False, (
97
+ "The AzureML step operator runs code remotely and "
98
+ "needs to push/pull Docker images, but the "
99
+ f"container registry `{container_registry.name}` of the "
100
+ "active stack is local. Please ensure that your stack "
101
+ "contains a remote container registry when using the "
102
+ "AzureML step operator."
103
+ )
104
+
107
105
  return True, ""
108
106
 
109
107
  return StackValidator(
110
- custom_validation_function=_validate_remote_artifact_store,
108
+ required_components={
109
+ StackComponentType.CONTAINER_REGISTRY,
110
+ StackComponentType.IMAGE_BUILDER,
111
+ },
112
+ custom_validation_function=_validate_remote_components,
111
113
  )
112
114
 
113
- def _get_authentication(self) -> Optional[AbstractAuthentication]:
115
+ def _get_credentials(self) -> TokenCredential:
114
116
  """Returns the authentication object for the AzureML environment.
115
117
 
116
118
  Returns:
117
119
  The authentication object for the AzureML environment.
118
120
  """
119
- if (
121
+ # Authentication
122
+ if connector := self.get_connector():
123
+ credentials = connector.connect()
124
+ assert isinstance(credentials, TokenCredential)
125
+ return credentials
126
+ elif (
120
127
  self.config.tenant_id
121
128
  and self.config.service_principal_id
122
129
  and self.config.service_principal_password
123
130
  ):
124
- return ServicePrincipalAuthentication(
131
+ return ClientSecretCredential(
125
132
  tenant_id=self.config.tenant_id,
126
- service_principal_id=self.config.service_principal_id,
127
- service_principal_password=self.config.service_principal_password,
133
+ client_id=self.config.service_principal_id,
134
+ client_secret=self.config.service_principal_password,
128
135
  )
129
- return None
136
+ else:
137
+ return DefaultAzureCredential()
130
138
 
131
- def _prepare_environment(
132
- self,
133
- workspace: Workspace,
134
- docker_settings: "DockerSettings",
135
- run_name: str,
136
- environment_variables: Dict[str, str],
137
- environment_name: Optional[str] = None,
138
- ) -> Environment:
139
- """Prepares the environment in which Azure will run all jobs.
139
+ def get_docker_builds(
140
+ self, deployment: "PipelineDeploymentBase"
141
+ ) -> List["BuildConfiguration"]:
142
+ """Gets the Docker builds required for the component.
140
143
 
141
144
  Args:
142
- workspace: The AzureML Workspace that has configuration
143
- for a storage account, container registry among other
144
- things.
145
- docker_settings: The Docker settings for this step.
146
- run_name: The name of the pipeline run that can be used
147
- for naming environments and runs.
148
- environment_variables: Environment variables to set in the
149
- environment.
150
- environment_name: Optional name of an existing environment to use.
145
+ deployment: The pipeline deployment for which to get the builds.
151
146
 
152
147
  Returns:
153
- The AzureML Environment object.
148
+ The required Docker builds.
154
149
  """
155
- docker_image_builder = PipelineDockerImageBuilder()
156
- requirements_files = docker_image_builder.gather_requirements_files(
157
- docker_settings=docker_settings,
158
- stack=Client().active_stack,
159
- log=False,
160
- )
161
- requirements = list(
162
- itertools.chain.from_iterable(
163
- r[1].split("\n") for r in requirements_files
164
- )
165
- )
166
- requirements.append(f"zenml=={zenml.__version__}")
167
- logger.info(
168
- "Using requirements for AzureML step operator environment: %s",
169
- requirements,
170
- )
171
- if environment_name:
172
- environment = Environment.get(
173
- workspace=workspace, name=environment_name
174
- )
175
- if not environment.python.conda_dependencies:
176
- environment.python.conda_dependencies = (
177
- CondaDependencies.create(
178
- python_version=ZenMLEnvironment.python_version()
179
- )
150
+ builds = []
151
+ for step_name, step in deployment.step_configurations.items():
152
+ if step.config.step_operator == self.name:
153
+ build = BuildConfiguration(
154
+ key=AZUREML_STEP_OPERATOR_DOCKER_IMAGE_KEY,
155
+ settings=step.config.docker_settings,
156
+ step_name=step_name,
180
157
  )
158
+ builds.append(build)
181
159
 
182
- for requirement in requirements:
183
- environment.python.conda_dependencies.add_pip_package(
184
- requirement
185
- )
186
- else:
187
- environment = Environment(name=f"zenml-{run_name}")
188
- environment.python.conda_dependencies = CondaDependencies.create(
189
- pip_packages=requirements,
190
- python_version=ZenMLEnvironment.python_version(),
191
- )
192
-
193
- if docker_settings.parent_image:
194
- # replace the default azure base image
195
- environment.docker.base_image = docker_settings.parent_image
196
-
197
- # set credentials to access azure storage
198
- for key in [
199
- "AZURE_STORAGE_ACCOUNT_KEY",
200
- "AZURE_STORAGE_ACCOUNT_NAME",
201
- "AZURE_STORAGE_CONNECTION_STRING",
202
- "AZURE_STORAGE_SAS_TOKEN",
203
- ]:
204
- value = os.getenv(key)
205
- if value:
206
- environment_variables[key] = value
207
-
208
- environment_variables[ENV_ZENML_CONFIG_PATH] = (
209
- f"./{DOCKER_IMAGE_ZENML_CONFIG_DIR}"
210
- )
211
- environment_variables.update(docker_settings.environment)
212
- environment.environment_variables = environment_variables
213
- return environment
160
+ return builds
214
161
 
215
162
  def launch(
216
163
  self,
@@ -226,79 +173,33 @@ class AzureMLStepOperator(BaseStepOperator):
226
173
  environment: Environment variables to set in the step operator
227
174
  environment.
228
175
  """
229
- if not info.config.resource_settings.empty:
230
- logger.warning(
231
- "Specifying custom step resources is not supported for "
232
- "the AzureML step operator. If you want to run this step "
233
- "operator on specific resources, you can do so by creating an "
234
- "Azure compute target (https://docs.microsoft.com/en-us/azure/machine-learning/concept-compute-target) "
235
- "with a specific machine type and then updating this step "
236
- "operator: `zenml step-operator update %s "
237
- "--compute_target_name=<COMPUTE_TARGET_NAME>`",
238
- self.name,
239
- )
240
-
241
- unused_docker_fields = [
242
- "dockerfile",
243
- "build_context_root",
244
- "build_options",
245
- "skip_build",
246
- "target_repository",
247
- "dockerignore",
248
- "copy_files",
249
- "copy_global_config",
250
- "apt_packages",
251
- "user",
252
- "source_files",
253
- "allow_including_files_in_images",
254
- "allow_download_from_code_repository",
255
- "allow_download_from_artifact_store",
256
- ]
257
- docker_settings = info.config.docker_settings
258
- ignored_docker_fields = docker_settings.model_fields_set.intersection(
259
- unused_docker_fields
260
- )
261
-
262
- if ignored_docker_fields:
263
- logger.warning(
264
- "The AzureML step operator currently does not support all "
265
- "options defined in your Docker settings. Ignoring all "
266
- "values set for the attributes: %s",
267
- ignored_docker_fields,
268
- )
269
-
270
176
  settings = cast(AzureMLStepOperatorSettings, self.get_settings(info))
177
+ image_name = info.get_image(key=AZUREML_STEP_OPERATOR_DOCKER_IMAGE_KEY)
271
178
 
272
- workspace = Workspace.get(
179
+ # Client creation
180
+ ml_client = MLClient(
181
+ credential=self._get_credentials(),
273
182
  subscription_id=self.config.subscription_id,
274
- resource_group=self.config.resource_group,
275
- name=self.config.workspace_name,
276
- auth=self._get_authentication(),
183
+ resource_group_name=self.config.resource_group,
184
+ workspace_name=self.config.workspace_name,
277
185
  )
278
186
 
279
- source_directory = source_utils.get_source_root()
187
+ env = Environment(name=f"zenml-{info.run_name}", image=image_name)
280
188
 
281
- environment = self._prepare_environment(
282
- workspace=workspace,
283
- docker_settings=docker_settings,
284
- run_name=info.run_name,
285
- environment_variables=environment,
286
- environment_name=settings.environment_name,
287
- )
288
- compute_target = ComputeTarget(
289
- workspace=workspace, name=self.config.compute_target_name
189
+ compute_target = create_or_get_compute(
190
+ ml_client, settings, default_compute_name=f"zenml_{self.id}"
290
191
  )
291
192
 
292
- run_config = ScriptRunConfig(
293
- source_directory=source_directory,
294
- environment=environment,
295
- compute_target=compute_target,
296
- command=entrypoint_command,
193
+ command_job = command(
194
+ name=info.run_name,
195
+ command=" ".join(entrypoint_command),
196
+ environment=env,
197
+ environment_variables=environment,
198
+ compute=compute_target,
199
+ experiment_name=info.pipeline.name,
297
200
  )
298
201
 
299
- experiment = Experiment(workspace=workspace, name=info.pipeline.name)
300
- run = experiment.submit(config=run_config)
202
+ job = ml_client.jobs.create_or_update(command_job)
301
203
 
302
- run.display_name = info.run_name
303
- info.force_write_logs()
304
- run.wait_for_completion(show_output=True)
204
+ logger.info(f"AzureML job created with id: {job.id}")
205
+ ml_client.jobs.stream(info.run_name)
@@ -44,7 +44,9 @@ LIGHTGBM = "lightgbm"
44
44
  MLFLOW = "mlflow"
45
45
  NEPTUNE = "neptune"
46
46
  NEURAL_PROPHET = "neural_prophet"
47
+ NUMPY = "numpy"
47
48
  OPEN_AI = "openai"
49
+ PANDAS = "pandas"
48
50
  PIGEON = "pigeon"
49
51
  PILLOW = "pillow"
50
52
  PLOTLY = "plotly"
@@ -73,3 +75,4 @@ WANDB = "wandb"
73
75
  VERTEX = "vertex"
74
76
  XGBOOST = "xgboost"
75
77
  VAULT = "vault"
78
+ LIGHTNING = "lightning"
@@ -13,11 +13,10 @@
13
13
  # permissions and limitations under the License.
14
14
  """Initialization of the Databricks integration for ZenML."""
15
15
 
16
- from typing import List, Type
16
+ from typing import List, Type, Optional
17
+
18
+ from zenml.integrations.constants import DATABRICKS
17
19
 
18
- from zenml.integrations.constants import (
19
- DATABRICKS,
20
- )
21
20
  from zenml.integrations.integration import Integration
22
21
  from zenml.stack import Flavor
23
22
 
@@ -32,6 +31,25 @@ class DatabricksIntegration(Integration):
32
31
  NAME = DATABRICKS
33
32
  REQUIREMENTS = ["databricks-sdk==0.28.0"]
34
33
 
34
+ REQUIREMENTS_IGNORED_ON_UNINSTALL = ["numpy", "pandas"]
35
+
36
+ @classmethod
37
+ def get_requirements(cls, target_os: Optional[str] = None) -> List[str]:
38
+ """Method to get the requirements for the integration.
39
+
40
+ Args:
41
+ target_os: The target operating system to get the requirements for.
42
+
43
+ Returns:
44
+ A list of requirements.
45
+ """
46
+ from zenml.integrations.numpy import NumpyIntegration
47
+ from zenml.integrations.pandas import PandasIntegration
48
+
49
+ return cls.REQUIREMENTS + \
50
+ NumpyIntegration.get_requirements(target_os=target_os) + \
51
+ PandasIntegration.get_requirements(target_os=target_os)
52
+
35
53
  @classmethod
36
54
  def flavors(cls) -> List[Type[Flavor]]:
37
55
  """Declare the stack component flavors for the Databricks integration.
@@ -102,6 +102,15 @@ class DatabricksOrchestratorConfig(
102
102
  """
103
103
  return True
104
104
 
105
+ @property
106
+ def is_schedulable(self) -> bool:
107
+ """Whether the orchestrator is schedulable or not.
108
+
109
+ Returns:
110
+ Whether the orchestrator is schedulable or not.
111
+ """
112
+ return True
113
+
105
114
 
106
115
  class DatabricksOrchestratorFlavor(BaseOrchestratorFlavor):
107
116
  """Databricks orchestrator flavor."""
@@ -13,18 +13,17 @@
13
13
  # permissions and limitations under the License.
14
14
  """Deepchecks integration for ZenML.
15
15
 
16
- The Deepchecks integration provides a way to validate your data in your pipelines.
17
- It includes a way to detect data anomalies and define checks to ensure quality of
18
- data.
16
+ The Deepchecks integration provides a way to validate your data in your
17
+ pipelines. It includes a way to detect data anomalies and define checks to
18
+ ensure quality of data.
19
19
 
20
20
  The integration includes custom materializers to store and visualize Deepchecks
21
21
  `SuiteResults`.
22
22
  """
23
23
 
24
- from typing import List, Type
24
+ from typing import List, Type, Optional
25
25
 
26
- from zenml.enums import StackComponentType
27
- from zenml.integrations.constants import DEEPCHECKS
26
+ from zenml.integrations.constants import DEEPCHECKS, PANDAS
28
27
  from zenml.integrations.integration import Integration
29
28
  from zenml.stack import Flavor
30
29
 
@@ -36,21 +35,40 @@ class DeepchecksIntegration(Integration):
36
35
 
37
36
  NAME = DEEPCHECKS
38
37
  REQUIREMENTS = [
39
- "deepchecks[vision]==0.8.0",
38
+ "deepchecks[vision]>=0.18.0",
40
39
  "torchvision>=0.14.0",
41
- "pandas<2.0.0",
42
40
  "opencv-python==4.5.5.64", # pin to same version
43
41
  "opencv-python-headless==4.5.5.64", # pin to same version
44
42
  "tenacity!=8.4.0", # https://github.com/jd/tenacity/issues/471
43
+ # The deepchecks integrations requires pandas to work.
44
+ # However, their version 0.18.0 is still not compatible with
45
+ # pandas>=2.2.0, so we limit the version here.
46
+ "pandas<2.2.0",
45
47
  ]
48
+
46
49
  APT_PACKAGES = ["ffmpeg", "libsm6", "libxext6"]
47
- REQUIREMENTS_IGNORED_ON_UNINSTALL = ["pandas","torchvision","tenacity"]
50
+ REQUIREMENTS_IGNORED_ON_UNINSTALL = ["pandas", "torchvision", "tenacity"]
48
51
 
49
- @staticmethod
50
- def activate() -> None:
52
+ @classmethod
53
+ def activate(cls) -> None:
51
54
  """Activate the Deepchecks integration."""
52
55
  from zenml.integrations.deepchecks import materializers # noqa
53
56
 
57
+ @classmethod
58
+ def get_requirements(cls, target_os: Optional[str] = None) -> List[str]:
59
+ """Method to get the requirements for the integration.
60
+
61
+ Args:
62
+ target_os: The target operating system to get the requirements for.
63
+
64
+ Returns:
65
+ A list of requirements.
66
+ """
67
+ from zenml.integrations.pandas import PandasIntegration
68
+
69
+ return cls.REQUIREMENTS + \
70
+ PandasIntegration.get_requirements(target_os=target_os)
71
+
54
72
  @classmethod
55
73
  def flavors(cls) -> List[Type[Flavor]]:
56
74
  """Declare the stack component flavors for the Deepchecks integration.
@@ -18,7 +18,9 @@ from typing import TYPE_CHECKING, Any, ClassVar, Dict, Tuple, Type
18
18
  from deepchecks.tabular import Dataset
19
19
 
20
20
  from zenml.enums import ArtifactType, VisualizationType
21
- from zenml.materializers.pandas_materializer import PandasMaterializer
21
+ from zenml.integrations.pandas.materializers.pandas_materializer import (
22
+ PandasMaterializer,
23
+ )
22
24
 
23
25
  if TYPE_CHECKING:
24
26
  from zenml.metadata.metadata_types import MetadataType
@@ -176,9 +176,6 @@ class DeepchecksDataIntegrityCheck(DeepchecksValidationCheck):
176
176
  TABULAR_FEATURE_LABEL_CORRELATION = source_utils.resolve(
177
177
  tabular_checks.FeatureLabelCorrelation
178
178
  ).import_path
179
- TABULAR_IDENTIFIER_LEAKAGE = source_utils.resolve(
180
- tabular_checks.IdentifierLeakage
181
- ).import_path
182
179
  TABULAR_IS_SINGLE_VALUE = source_utils.resolve(
183
180
  tabular_checks.IsSingleValue
184
181
  ).import_path
@@ -234,9 +231,6 @@ class DeepchecksDataDriftCheck(DeepchecksValidationCheck):
234
231
  TABULAR_DATE_TRAIN_TEST_LEAKAGE_OVERLAP = source_utils.resolve(
235
232
  tabular_checks.DateTrainTestLeakageOverlap
236
233
  ).import_path
237
- TABULAR_DOMINANT_FREQUENCY_CHANGE = source_utils.resolve(
238
- tabular_checks.DominantFrequencyChange
239
- ).import_path
240
234
  TABULAR_FEATURE_LABEL_CORRELATION_CHANGE = source_utils.resolve(
241
235
  tabular_checks.FeatureLabelCorrelationChange
242
236
  ).import_path
@@ -262,9 +256,6 @@ class DeepchecksDataDriftCheck(DeepchecksValidationCheck):
262
256
  tabular_checks.WholeDatasetDrift
263
257
  ).import_path
264
258
 
265
- VISION_FEATURE_LABEL_CORRELATION_CHANGE = source_utils.resolve(
266
- vision_checks.FeatureLabelCorrelationChange
267
- ).import_path
268
259
  VISION_HEATMAP_COMPARISON = source_utils.resolve(
269
260
  vision_checks.HeatmapComparison
270
261
  ).import_path
@@ -277,9 +268,6 @@ class DeepchecksDataDriftCheck(DeepchecksValidationCheck):
277
268
  VISION_NEW_LABELS = source_utils.resolve(
278
269
  vision_checks.NewLabels
279
270
  ).import_path
280
- VISION_SIMILAR_IMAGE_LEAKAGE = source_utils.resolve(
281
- vision_checks.SimilarImageLeakage
282
- ).import_path
283
271
  VISION_TRAIN_TEST_LABEL_DRIFT = source_utils.resolve(
284
272
  vision_checks.TrainTestLabelDrift
285
273
  ).import_path
@@ -324,21 +312,12 @@ class DeepchecksModelValidationCheck(DeepchecksValidationCheck):
324
312
  VISION_CONFUSION_MATRIX_REPORT = source_utils.resolve(
325
313
  vision_checks.ConfusionMatrixReport
326
314
  ).import_path
327
- VISION_IMAGE_SEGMENT_PERFORMANCE = source_utils.resolve(
328
- vision_checks.ImageSegmentPerformance
329
- ).import_path
330
315
  VISION_MEAN_AVERAGE_PRECISION_REPORT = source_utils.resolve(
331
316
  vision_checks.MeanAveragePrecisionReport
332
317
  ).import_path
333
318
  VISION_MEAN_AVERAGE_RECALL_REPORT = source_utils.resolve(
334
319
  vision_checks.MeanAverageRecallReport
335
320
  ).import_path
336
- VISION_ROBUSTNESS_REPORT = source_utils.resolve(
337
- vision_checks.RobustnessReport
338
- ).import_path
339
- VISION_SINGLE_DATASET_SCALAR_PERFORMANCE = source_utils.resolve(
340
- vision_checks.SingleDatasetScalarPerformance
341
- ).import_path
342
321
 
343
322
 
344
323
  class DeepchecksModelDriftCheck(DeepchecksValidationCheck):
@@ -358,12 +337,6 @@ class DeepchecksModelDriftCheck(DeepchecksValidationCheck):
358
337
  TABULAR_BOOSTING_OVERFIT = source_utils.resolve(
359
338
  tabular_checks.BoostingOverfit
360
339
  ).import_path
361
- TABULAR_MODEL_ERROR_ANALYSIS = source_utils.resolve(
362
- tabular_checks.ModelErrorAnalysis
363
- ).import_path
364
- TABULAR_PERFORMANCE_REPORT = source_utils.resolve(
365
- tabular_checks.PerformanceReport
366
- ).import_path
367
340
  TABULAR_SIMPLE_MODEL_COMPARISON = source_utils.resolve(
368
341
  tabular_checks.SimpleModelComparison
369
342
  ).import_path
@@ -377,9 +350,6 @@ class DeepchecksModelDriftCheck(DeepchecksValidationCheck):
377
350
  VISION_CLASS_PERFORMANCE = source_utils.resolve(
378
351
  vision_checks.ClassPerformance
379
352
  ).import_path
380
- VISION_MODEL_ERROR_ANALYSIS = source_utils.resolve(
381
- vision_checks.ModelErrorAnalysis
382
- ).import_path
383
353
  VISION_SIMPLE_MODEL_COMPARISON = source_utils.resolve(
384
354
  vision_checks.SimpleModelComparison
385
355
  ).import_path
@@ -25,7 +25,7 @@ file.
25
25
  import logging
26
26
  import os
27
27
  import warnings
28
- from typing import List, Type
28
+ from typing import List, Type, Optional
29
29
 
30
30
  from zenml.integrations.constants import EVIDENTLY
31
31
  from zenml.integrations.integration import Integration
@@ -57,7 +57,22 @@ class EvidentlyIntegration(Integration):
57
57
  "evidently>=0.4.16,<=0.4.22",
58
58
  "tenacity!=8.4.0", # https://github.com/jd/tenacity/issues/471
59
59
  ]
60
- REQUIREMENTS_IGNORED_ON_UNINSTALL = ["tenacity"]
60
+ REQUIREMENTS_IGNORED_ON_UNINSTALL = ["tenacity", "pandas"]
61
+
62
+ @classmethod
63
+ def get_requirements(cls, target_os: Optional[str] = None) -> List[str]:
64
+ """Method to get the requirements for the integration.
65
+
66
+ Args:
67
+ target_os: The target operating system to get the requirements for.
68
+
69
+ Returns:
70
+ A list of requirements.
71
+ """
72
+ from zenml.integrations.pandas import PandasIntegration
73
+
74
+ return cls.REQUIREMENTS + \
75
+ PandasIntegration.get_requirements(target_os=target_os)
61
76
 
62
77
  @classmethod
63
78
  def flavors(cls) -> List[Type[Flavor]]:
@@ -12,8 +12,8 @@
12
12
  # or implied. See the License for the specific language governing
13
13
  # permissions and limitations under the License.
14
14
  """Facets integration for ZenML."""
15
-
16
- from zenml.integrations.constants import FACETS
15
+ from typing import Optional, List
16
+ from zenml.integrations.constants import FACETS, PANDAS
17
17
  from zenml.integrations.integration import Integration
18
18
 
19
19
 
@@ -21,13 +21,29 @@ class FacetsIntegration(Integration):
21
21
  """Definition of Facets integration for ZenML."""
22
22
 
23
23
  NAME = FACETS
24
- REQUIREMENTS = ["facets-overview>=1.0.0", "pandas"]
24
+ REQUIREMENTS = ["facets-overview>=1.0.0"]
25
+
25
26
  REQUIREMENTS_IGNORED_ON_UNINSTALL = ["pandas"]
26
27
 
27
- @staticmethod
28
- def activate() -> None:
28
+ @classmethod
29
+ def activate(cls) -> None:
29
30
  """Activate the Facets integration."""
30
31
  from zenml.integrations.facets import materializers # noqa
31
32
 
33
+ @classmethod
34
+ def get_requirements(cls, target_os: Optional[str] = None) -> List[str]:
35
+ """Method to get the requirements for the integration.
36
+
37
+ Args:
38
+ target_os: The target operating system to get the requirements for.
39
+
40
+ Returns:
41
+ A list of requirements.
42
+ """
43
+ from zenml.integrations.pandas import PandasIntegration
44
+
45
+ return cls.REQUIREMENTS + \
46
+ PandasIntegration.get_requirements(target_os=target_os)
47
+
32
48
 
33
49
  FacetsIntegration.check_installation()