zenml-nightly 0.64.0.dev20240811__py3-none-any.whl → 0.66.0.dev20240910__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 (291) hide show
  1. README.md +1 -1
  2. RELEASE_NOTES.md +126 -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/compiler.py +34 -0
  13. zenml/config/server_config.py +30 -0
  14. zenml/config/source.py +3 -7
  15. zenml/constants.py +5 -3
  16. zenml/entrypoints/base_entrypoint_configuration.py +41 -27
  17. zenml/entrypoints/step_entrypoint_configuration.py +5 -2
  18. zenml/enums.py +2 -0
  19. zenml/environment.py +31 -0
  20. zenml/feature_stores/base_feature_store.py +4 -6
  21. zenml/integrations/__init__.py +3 -0
  22. zenml/integrations/airflow/flavors/airflow_orchestrator_flavor.py +9 -0
  23. zenml/integrations/aws/__init__.py +2 -2
  24. zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +2 -1
  25. zenml/integrations/azure/__init__.py +2 -2
  26. zenml/integrations/azure/azureml_utils.py +201 -0
  27. zenml/integrations/azure/flavors/azureml.py +139 -0
  28. zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +20 -118
  29. zenml/integrations/azure/flavors/azureml_step_operator_flavor.py +67 -14
  30. zenml/integrations/azure/orchestrators/azureml_orchestrator.py +58 -172
  31. zenml/integrations/azure/orchestrators/azureml_orchestrator_entrypoint_config.py +1 -0
  32. zenml/integrations/azure/service_connectors/azure_service_connector.py +4 -0
  33. zenml/integrations/azure/step_operators/azureml_step_operator.py +78 -177
  34. zenml/integrations/constants.py +3 -0
  35. zenml/integrations/databricks/__init__.py +22 -4
  36. zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +9 -0
  37. zenml/integrations/deepchecks/__init__.py +29 -11
  38. zenml/integrations/deepchecks/materializers/deepchecks_dataset_materializer.py +3 -1
  39. zenml/integrations/deepchecks/validation_checks.py +0 -30
  40. zenml/integrations/evidently/__init__.py +17 -2
  41. zenml/integrations/facets/__init__.py +21 -5
  42. zenml/integrations/feast/__init__.py +19 -6
  43. zenml/integrations/gcp/__init__.py +2 -2
  44. zenml/integrations/gcp/flavors/vertex_orchestrator_flavor.py +9 -0
  45. zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +10 -1
  46. zenml/integrations/great_expectations/__init__.py +21 -7
  47. zenml/integrations/huggingface/__init__.py +39 -15
  48. zenml/integrations/huggingface/materializers/__init__.py +3 -0
  49. zenml/integrations/huggingface/materializers/huggingface_datasets_materializer.py +3 -1
  50. zenml/integrations/huggingface/materializers/huggingface_pt_model_materializer.py +1 -1
  51. zenml/integrations/huggingface/materializers/huggingface_t5_materializer.py +107 -0
  52. zenml/integrations/huggingface/materializers/huggingface_tf_model_materializer.py +1 -1
  53. zenml/integrations/huggingface/materializers/huggingface_tokenizer_materializer.py +2 -2
  54. zenml/integrations/huggingface/steps/accelerate_runner.py +108 -85
  55. zenml/integrations/hyperai/flavors/hyperai_orchestrator_flavor.py +9 -0
  56. zenml/integrations/kubeflow/flavors/kubeflow_orchestrator_flavor.py +9 -0
  57. zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py +10 -1
  58. zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +9 -0
  59. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +10 -1
  60. zenml/integrations/lightning/__init__.py +48 -0
  61. zenml/integrations/lightning/flavors/__init__.py +23 -0
  62. zenml/integrations/lightning/flavors/lightning_orchestrator_flavor.py +148 -0
  63. zenml/integrations/lightning/orchestrators/__init__.py +23 -0
  64. zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +596 -0
  65. zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +307 -0
  66. zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint_configuration.py +77 -0
  67. zenml/integrations/lightning/orchestrators/utils.py +67 -0
  68. zenml/integrations/mlflow/__init__.py +43 -5
  69. zenml/integrations/mlflow/services/mlflow_deployment.py +26 -0
  70. zenml/integrations/numpy/__init__.py +32 -0
  71. zenml/integrations/numpy/materializers/__init__.py +18 -0
  72. zenml/integrations/numpy/materializers/numpy_materializer.py +246 -0
  73. zenml/integrations/pandas/__init__.py +32 -0
  74. zenml/integrations/pandas/materializers/__init__.py +18 -0
  75. zenml/integrations/pandas/materializers/pandas_materializer.py +192 -0
  76. zenml/integrations/prodigy/annotators/prodigy_annotator.py +1 -1
  77. zenml/integrations/seldon/__init__.py +18 -3
  78. zenml/integrations/sklearn/__init__.py +1 -1
  79. zenml/integrations/skypilot_azure/__init__.py +1 -1
  80. zenml/integrations/tensorboard/__init__.py +1 -1
  81. zenml/integrations/tensorflow/__init__.py +2 -2
  82. zenml/integrations/tensorflow/materializers/tf_dataset_materializer.py +2 -2
  83. zenml/integrations/whylogs/__init__.py +18 -2
  84. zenml/logging/step_logging.py +9 -2
  85. zenml/materializers/__init__.py +0 -4
  86. zenml/materializers/base_materializer.py +4 -0
  87. zenml/materializers/numpy_materializer.py +23 -234
  88. zenml/materializers/pandas_materializer.py +22 -179
  89. zenml/model/model.py +91 -2
  90. zenml/model/utils.py +5 -5
  91. zenml/models/__init__.py +16 -3
  92. zenml/models/v2/core/model_version.py +1 -1
  93. zenml/models/v2/core/pipeline_run.py +31 -1
  94. zenml/models/v2/core/stack.py +51 -20
  95. zenml/models/v2/core/step_run.py +28 -0
  96. zenml/models/v2/misc/info_models.py +78 -0
  97. zenml/new/pipelines/pipeline.py +65 -25
  98. zenml/new/pipelines/run_utils.py +57 -136
  99. zenml/new/steps/step_context.py +17 -6
  100. zenml/orchestrators/base_orchestrator.py +9 -0
  101. zenml/orchestrators/step_launcher.py +37 -14
  102. zenml/orchestrators/step_runner.py +14 -13
  103. zenml/orchestrators/utils.py +107 -7
  104. zenml/service_connectors/service_connector_utils.py +2 -2
  105. zenml/stack/utils.py +11 -2
  106. zenml/stack_deployments/azure_stack_deployment.py +2 -1
  107. zenml/steps/base_step.py +62 -25
  108. zenml/steps/utils.py +115 -3
  109. zenml/utils/cloud_utils.py +8 -8
  110. zenml/utils/code_utils.py +130 -32
  111. zenml/utils/function_utils.py +7 -7
  112. zenml/utils/notebook_utils.py +14 -0
  113. zenml/utils/pipeline_docker_image_builder.py +1 -11
  114. zenml/utils/pydantic_utils.py +3 -3
  115. zenml/utils/secret_utils.py +2 -2
  116. zenml/utils/settings_utils.py +1 -1
  117. zenml/utils/source_utils.py +67 -21
  118. zenml/utils/string_utils.py +29 -0
  119. zenml/zen_server/dashboard/assets/{404-CRAA_Lew.js → 404-iO8vpun1.js} +1 -1
  120. zenml/zen_server/dashboard/assets/{@radix-BXWm7HOa.js → @radix-DnFH_oo1.js} +1 -1
  121. zenml/zen_server/dashboard/assets/{@react-router-l3lMcXA2.js → @react-router-APVeuk-U.js} +1 -1
  122. zenml/zen_server/dashboard/assets/{@reactflow-CeVxyqYT.js → @reactflow-B6kq9fJZ.js} +2 -2
  123. zenml/zen_server/dashboard/assets/{@tanstack-FmcYZMuX.js → @tanstack-QbMbTrh5.js} +1 -1
  124. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-BXeSvmMY.js +1 -0
  125. zenml/zen_server/dashboard/assets/{CodeSnippet-D0VLxT2A.js → CodeSnippet-DNWdQmbo.js} +2 -2
  126. zenml/zen_server/dashboard/assets/CollapsibleCard-B2OVjWYE.js +1 -0
  127. zenml/zen_server/dashboard/assets/Commands-DsoaVElZ.js +1 -0
  128. zenml/zen_server/dashboard/assets/CopyButton-BqE_-PHO.js +2 -0
  129. zenml/zen_server/dashboard/assets/{CsvVizualization-D3kAypDj.js → CsvVizualization-Dyasr2jU.js} +6 -6
  130. zenml/zen_server/dashboard/assets/{edit-C0MVvPD2.js → DialogItem-Cz1VLRwa.js} +1 -1
  131. zenml/zen_server/dashboard/assets/{DisplayDate-DizbSeT-.js → DisplayDate-DkCy54Bp.js} +1 -1
  132. zenml/zen_server/dashboard/assets/EditSecretDialog-Du423_3U.js +1 -0
  133. zenml/zen_server/dashboard/assets/{EmptyState-BHblM39I.js → EmptyState-Cs3DEmso.js} +1 -1
  134. zenml/zen_server/dashboard/assets/{Error-C6LeJSER.js → Error-DorJD_va.js} +1 -1
  135. zenml/zen_server/dashboard/assets/ExecutionStatus-CIfQTutR.js +1 -0
  136. zenml/zen_server/dashboard/assets/{Helpbox-aAB2XP-z.js → Helpbox-CmfvtNeq.js} +1 -1
  137. zenml/zen_server/dashboard/assets/Infobox-BL9NOS37.js +1 -0
  138. zenml/zen_server/dashboard/assets/{InlineAvatar-DpTLgM3Q.js → InlineAvatar-Ds2ZFHPc.js} +1 -1
  139. zenml/zen_server/dashboard/assets/{Lock-CNyJvf2r.js → Lock-CmIn0szs.js} +1 -1
  140. zenml/zen_server/dashboard/assets/{MarkdownVisualization-Bajxn0HY.js → MarkdownVisualization-DS05sfBm.js} +1 -1
  141. zenml/zen_server/dashboard/assets/{NumberBox-BmKE0qnO.js → NumberBox-CrN0_kqI.js} +1 -1
  142. zenml/zen_server/dashboard/assets/Partials-DX-8iEa1.js +1 -0
  143. zenml/zen_server/dashboard/assets/{PasswordChecker-yGGoJSB-.js → PasswordChecker-DE71J_3F.js} +1 -1
  144. zenml/zen_server/dashboard/assets/ProviderIcon-BOQJgapd.js +1 -0
  145. zenml/zen_server/dashboard/assets/ProviderRadio-BsYBw9YA.js +1 -0
  146. zenml/zen_server/dashboard/assets/SearchField-W3GXpLlI.js +1 -0
  147. zenml/zen_server/dashboard/assets/SetPassword-B-0a8UCj.js +1 -0
  148. zenml/zen_server/dashboard/assets/{Tick-uxv80Q6a.js → Tick-i1DYsVcX.js} +1 -1
  149. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-oN4G3sKz.js → UpdatePasswordSchemas-C6Zb7ASL.js} +1 -1
  150. zenml/zen_server/dashboard/assets/UsageReason-CCnzmwS8.js +1 -0
  151. zenml/zen_server/dashboard/assets/WizardFooter-BHbO7zOa.js +1 -0
  152. zenml/zen_server/dashboard/assets/all-pipeline-runs-query-BBEe6I9-.js +1 -0
  153. zenml/zen_server/dashboard/assets/{check-circle-1_I207rW.js → check-circle-DOoS4yhF.js} +1 -1
  154. zenml/zen_server/dashboard/assets/{chevron-down-BpaF8JqM.js → chevron-down-Cwb-W_B_.js} +1 -1
  155. zenml/zen_server/dashboard/assets/{chevron-right-double-Dk8e2L99.js → chevron-right-double-c9H46Kl8.js} +1 -1
  156. zenml/zen_server/dashboard/assets/{cloud-only-BkUuI0lZ.js → cloud-only-BuP4Kt_7.js} +1 -1
  157. zenml/zen_server/dashboard/assets/code-browser-BJYErIjr.js +1 -0
  158. zenml/zen_server/dashboard/assets/codespaces-BitYDX9d.gif +0 -0
  159. zenml/zen_server/dashboard/assets/{copy-f3XGPPxt.js → copy-CaGlDsUy.js} +1 -1
  160. zenml/zen_server/dashboard/assets/create-stack-B2x2d4r1.js +1 -0
  161. zenml/zen_server/dashboard/assets/{docker-8uj__HHK.js → docker-BFAFXr2_.js} +1 -1
  162. zenml/zen_server/dashboard/assets/{dots-horizontal-sKQlWEni.js → dots-horizontal-C6K59vUm.js} +1 -1
  163. zenml/zen_server/dashboard/assets/flyte-Cj-xy_8I.svg +10 -0
  164. zenml/zen_server/dashboard/assets/form-schemas-Bap0f854.js +1 -0
  165. zenml/zen_server/dashboard/assets/gcp-Dj6ntk0L.js +1 -0
  166. zenml/zen_server/dashboard/assets/{help-FuHlZwn0.js → help-CwN931fX.js} +1 -1
  167. zenml/zen_server/dashboard/assets/{index-Bd1xgUQG.js → index-5GJ5ysEZ.js} +1 -1
  168. zenml/zen_server/dashboard/assets/{index-DaGknux4.css → index-6DYjZgDn.css} +1 -1
  169. zenml/zen_server/dashboard/assets/index-B9wVwe7u.js +55 -0
  170. zenml/zen_server/dashboard/assets/index-DFi8BroH.js +1 -0
  171. zenml/zen_server/dashboard/assets/{index.esm-DT4uyn2i.js → index.esm-BE1uqCX5.js} +1 -1
  172. zenml/zen_server/dashboard/assets/kubernetes-BjbR6D-1.js +1 -0
  173. zenml/zen_server/dashboard/assets/{layout-D6oiSbfd.js → layout-Dru15_XR.js} +1 -1
  174. zenml/zen_server/dashboard/assets/link-external-BT2L8hAQ.js +1 -0
  175. zenml/zen_server/dashboard/assets/{login-mutation-13A_JSVA.js → login-mutation-DwxUz8VA.js} +1 -1
  176. zenml/zen_server/dashboard/assets/{logs-CgeE2vZP.js → logs-GiDJXbLS.js} +1 -1
  177. zenml/zen_server/dashboard/assets/metaflow-weOkWNyT.svg +10 -0
  178. zenml/zen_server/dashboard/assets/{not-found-B0Mmb90p.js → not-found-D5i9DunU.js} +1 -1
  179. zenml/zen_server/dashboard/assets/{package-DdkziX79.js → package-DYKZ5jKW.js} +1 -1
  180. zenml/zen_server/dashboard/assets/page-BFuJICXM.js +9 -0
  181. zenml/zen_server/dashboard/assets/{page-BGwA9B1M.js → page-BiF8hLbO.js} +1 -1
  182. zenml/zen_server/dashboard/assets/{page-DugsjcQ_.js → page-BitfWsiW.js} +1 -1
  183. zenml/zen_server/dashboard/assets/page-CDOQLrPC.js +1 -0
  184. zenml/zen_server/dashboard/assets/page-CEJWu1YO.js +1 -0
  185. zenml/zen_server/dashboard/assets/page-CIbehp7V.js +1 -0
  186. zenml/zen_server/dashboard/assets/page-CLiRGfWo.js +1 -0
  187. zenml/zen_server/dashboard/assets/page-CV44mQn9.js +1 -0
  188. zenml/zen_server/dashboard/assets/page-CrSdkteO.js +2 -0
  189. zenml/zen_server/dashboard/assets/page-D5F3DJjm.js +1 -0
  190. zenml/zen_server/dashboard/assets/page-DE03uZZR.js +1 -0
  191. zenml/zen_server/dashboard/assets/page-DFCK65G9.js +1 -0
  192. zenml/zen_server/dashboard/assets/{page-RnG-qhv9.js → page-DGMa3ZQL.js} +1 -1
  193. zenml/zen_server/dashboard/assets/page-DI-qTWrm.js +1 -0
  194. zenml/zen_server/dashboard/assets/page-DQGCHKrQ.js +1 -0
  195. zenml/zen_server/dashboard/assets/{page-DSTQnBk-.js → page-DQdwZZ9x.js} +1 -1
  196. zenml/zen_server/dashboard/assets/page-DgM-N9RL.js +1 -0
  197. zenml/zen_server/dashboard/assets/page-Dt8VgzbE.js +1 -0
  198. zenml/zen_server/dashboard/assets/{page-DLpOnf7u.js → page-J0s8Sq3N.js} +1 -1
  199. zenml/zen_server/dashboard/assets/page-WCQ659by.js +1 -0
  200. zenml/zen_server/dashboard/assets/page-bimkItOg.js +1 -0
  201. zenml/zen_server/dashboard/assets/{page-hQaiQXfg.js → page-iwoJnwPv.js} +1 -1
  202. zenml/zen_server/dashboard/assets/{page-YiF_fNbe.js → page-oS4hqS8M.js} +1 -1
  203. zenml/zen_server/dashboard/assets/page-oSqx9dkH.js +1 -0
  204. zenml/zen_server/dashboard/assets/page-p3GqEAUW.js +1 -0
  205. zenml/zen_server/dashboard/assets/page-qvcUVPE-.js +1 -0
  206. zenml/zen_server/dashboard/assets/page-xQG6GmFJ.js +1 -0
  207. zenml/zen_server/dashboard/assets/{persist-3-5nOJ6m.js → persist-mEZN_fgH.js} +1 -1
  208. zenml/zen_server/dashboard/assets/persist-xsYgVtR1.js +1 -0
  209. zenml/zen_server/dashboard/assets/{plus-FB9-lEq_.js → plus-Bc8eLSDM.js} +1 -1
  210. zenml/zen_server/dashboard/assets/{refresh-COb6KYDi.js → refresh-hfgWPeto.js} +1 -1
  211. zenml/zen_server/dashboard/assets/rocket-SESCGQXm.js +1 -0
  212. zenml/zen_server/dashboard/assets/sharedSchema-BfZcy7aP.js +14 -0
  213. zenml/zen_server/dashboard/assets/stack-detail-query-CU4egfhp.js +1 -0
  214. zenml/zen_server/dashboard/assets/templates-1S_8WeSK.webp +0 -0
  215. zenml/zen_server/dashboard/assets/{trash-Cd5CSFqA.js → trash-DUWZWzse.js} +1 -1
  216. zenml/zen_server/dashboard/assets/{update-server-settings-mutation-B8GB_ubU.js → update-server-settings-mutation-DNqmQXDM.js} +1 -1
  217. zenml/zen_server/dashboard/assets/{url-hcMJkz8p.js → url-DwbuKk1b.js} +1 -1
  218. zenml/zen_server/dashboard/assets/{zod-CnykDKJj.js → zod-uFd1wBcd.js} +1 -1
  219. zenml/zen_server/dashboard/index.html +7 -7
  220. zenml/zen_server/dashboard_legacy/asset-manifest.json +4 -4
  221. zenml/zen_server/dashboard_legacy/index.html +1 -1
  222. zenml/zen_server/dashboard_legacy/{precache-manifest.9c473c96a43298343a7ce1256183123b.js → precache-manifest.290b95d5b43efa3368b3dc63d20c4782.js} +4 -4
  223. zenml/zen_server/dashboard_legacy/service-worker.js +1 -1
  224. zenml/zen_server/dashboard_legacy/static/js/{main.463c90b9.chunk.js → main.840d1bf0.chunk.js} +2 -2
  225. zenml/zen_server/dashboard_legacy/static/js/{main.463c90b9.chunk.js.map → main.840d1bf0.chunk.js.map} +1 -1
  226. zenml/zen_server/deploy/helm/Chart.yaml +1 -1
  227. zenml/zen_server/deploy/helm/README.md +2 -2
  228. zenml/zen_server/routers/service_connectors_endpoints.py +2 -4
  229. zenml/zen_server/routers/workspaces_endpoints.py +20 -66
  230. zenml/zen_server/secure_headers.py +120 -0
  231. zenml/zen_server/template_execution/runner_entrypoint_configuration.py +0 -2
  232. zenml/zen_server/template_execution/utils.py +1 -0
  233. zenml/zen_server/utils.py +0 -100
  234. zenml/zen_server/zen_server_api.py +4 -2
  235. zenml/zen_stores/migrations/versions/0.65.0_release.py +23 -0
  236. zenml/zen_stores/migrations/versions/0.66.0_release.py +23 -0
  237. zenml/zen_stores/migrations/versions/bf2120261b5a_add_configured_model_version_id.py +74 -0
  238. zenml/zen_stores/rest_zen_store.py +4 -21
  239. zenml/zen_stores/schemas/constants.py +16 -0
  240. zenml/zen_stores/schemas/model_schemas.py +9 -3
  241. zenml/zen_stores/schemas/pipeline_run_schemas.py +22 -8
  242. zenml/zen_stores/schemas/step_run_schemas.py +23 -12
  243. zenml/zen_stores/sql_zen_store.py +312 -300
  244. zenml/zen_stores/zen_store_interface.py +0 -16
  245. {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/METADATA +10 -12
  246. {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/RECORD +249 -217
  247. zenml/models/v2/misc/full_stack.py +0 -129
  248. zenml/new/pipelines/model_utils.py +0 -72
  249. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-ErO9aOgK.js +0 -1
  250. zenml/zen_server/dashboard/assets/AwarenessChannel-CLXo5rKM.js +0 -1
  251. zenml/zen_server/dashboard/assets/CollapsibleCard-BaUPiVg0.js +0 -1
  252. zenml/zen_server/dashboard/assets/Commands-JrcZK-3j.js +0 -1
  253. zenml/zen_server/dashboard/assets/CopyButton-Dbo52T1K.js +0 -2
  254. zenml/zen_server/dashboard/assets/EditSecretDialog-Bd7mFLS4.js +0 -1
  255. zenml/zen_server/dashboard/assets/ExecutionStatus-jH4OrWBq.js +0 -1
  256. zenml/zen_server/dashboard/assets/Infobox-BQ0aty32.js +0 -1
  257. zenml/zen_server/dashboard/assets/ProviderRadio-BBqkIuTd.js +0 -1
  258. zenml/zen_server/dashboard/assets/RadioItem-xLhXoiFV.js +0 -1
  259. zenml/zen_server/dashboard/assets/SearchField-C9R0mdaX.js +0 -1
  260. zenml/zen_server/dashboard/assets/SetPassword-52sNxNiO.js +0 -1
  261. zenml/zen_server/dashboard/assets/SuccessStep-DlkItqYG.js +0 -1
  262. zenml/zen_server/dashboard/assets/aws-0_3UsPif.js +0 -1
  263. zenml/zen_server/dashboard/assets/database-cXYNX9tt.js +0 -1
  264. zenml/zen_server/dashboard/assets/file-text-B9JibxTs.js +0 -1
  265. zenml/zen_server/dashboard/assets/index-DhIZtpxB.js +0 -55
  266. zenml/zen_server/dashboard/assets/page-7-v2OBm-.js +0 -1
  267. zenml/zen_server/dashboard/assets/page-B3ozwdD1.js +0 -1
  268. zenml/zen_server/dashboard/assets/page-BkjAUyTA.js +0 -1
  269. zenml/zen_server/dashboard/assets/page-BnacgBiy.js +0 -1
  270. zenml/zen_server/dashboard/assets/page-BxF_KMQ3.js +0 -2
  271. zenml/zen_server/dashboard/assets/page-C4POHC0K.js +0 -1
  272. zenml/zen_server/dashboard/assets/page-C9kudd44.js +0 -9
  273. zenml/zen_server/dashboard/assets/page-CA1j3GpJ.js +0 -1
  274. zenml/zen_server/dashboard/assets/page-CCY6yfmu.js +0 -1
  275. zenml/zen_server/dashboard/assets/page-CgTe7Bme.js +0 -1
  276. zenml/zen_server/dashboard/assets/page-Cgn-6v2Y.js +0 -1
  277. zenml/zen_server/dashboard/assets/page-CxQmQqDw.js +0 -1
  278. zenml/zen_server/dashboard/assets/page-D2Goey3H.js +0 -1
  279. zenml/zen_server/dashboard/assets/page-DTysUGOy.js +0 -1
  280. zenml/zen_server/dashboard/assets/page-D_EXUFJb.js +0 -1
  281. zenml/zen_server/dashboard/assets/page-Db15QzsM.js +0 -1
  282. zenml/zen_server/dashboard/assets/page-OFKSPyN7.js +0 -1
  283. zenml/zen_server/dashboard/assets/page-T2BtjwPl.js +0 -1
  284. zenml/zen_server/dashboard/assets/page-TXe1Eo3Z.js +0 -1
  285. zenml/zen_server/dashboard/assets/play-circle-XSkLR12B.js +0 -1
  286. zenml/zen_server/dashboard/assets/sharedSchema-BoYx_B_L.js +0 -14
  287. zenml/zen_server/dashboard/assets/stack-detail-query-B-US_-wa.js +0 -1
  288. zenml/zen_server/dashboard/assets/terminal-grtjrIEJ.js +0 -1
  289. {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/LICENSE +0 -0
  290. {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/WHEEL +0 -0
  291. {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/entry_points.txt +0 -0
README.md CHANGED
@@ -327,7 +327,7 @@ the Apache License Version 2.0.
327
327
  <a href="https://github.com/zenml-io/zenml-projects">Projects Showcase</a>
328
328
  <br />
329
329
  <br />
330
- 🎉 Version 0.64.0 is out. Check out the release notes
330
+ 🎉 Version 0.66.0 is out. Check out the release notes
331
331
  <a href="https://github.com/zenml-io/zenml/releases">here</a>.
332
332
  <br />
333
333
  🖥️ Download our VS Code Extension <a href="https://marketplace.visualstudio.com/items?itemName=ZenML.zenml-vscode">here</a>.
RELEASE_NOTES.md CHANGED
@@ -1,5 +1,127 @@
1
1
  <!-- markdown-link-check-disable -->
2
2
 
3
+ # 0.66.0
4
+
5
+ ## New Features and Improvements
6
+
7
+ ### Python 3.12 support
8
+
9
+ This release adds support for Python 3.12, which means you can now develop your ZenML pipelines
10
+ with the latest python features.
11
+
12
+ ### Easier way to specify component settings
13
+
14
+ Before this release, settings for stack components had to be specified with both the component type
15
+ as well as the flavor. We simplified this and it is now possible to specify settings just using the
16
+ component type:
17
+ ```python
18
+ # Before
19
+ @pipeline(settings={"orchestrator.sagemaker": SagemakerOrchestratorSettings(...)})
20
+ def my_pipeline():
21
+ ...
22
+
23
+ # Now
24
+ @pipeline(settings={"orchestrator": SagemakerOrchestratorSettings(...)})
25
+ def my_pipeline():
26
+ ...
27
+ ```
28
+
29
+ ## Breaking changes
30
+
31
+ * In order to slim down the ZenML library, we removed the `numpy` and `pandas` libraries as dependencies of ZenML. If your
32
+ code uses these libraries, you have to make sure they're installed in your local environment as well as the Docker images that
33
+ get built to run your pipelines (Use `DockerSettings.requirements` or `DockerSettings.required_integrations`).
34
+
35
+ ## What's Changed
36
+ * Add 0.65.0 to migration testing by @avishniakov in https://github.com/zenml-io/zenml/pull/2963
37
+ * Hotfix for release flow by @avishniakov in https://github.com/zenml-io/zenml/pull/2961
38
+ * Fix the one-click AWS and GCP stack deployments by @stefannica in https://github.com/zenml-io/zenml/pull/2964
39
+ * Fix wandb mypy error by @strickvl in https://github.com/zenml-io/zenml/pull/2967
40
+ * Fix accelerate docs for 0.65.0+ by @avishniakov in https://github.com/zenml-io/zenml/pull/2968
41
+ * Dynamic model version names docs by @avishniakov in https://github.com/zenml-io/zenml/pull/2970
42
+ * Logging nits by @avishniakov in https://github.com/zenml-io/zenml/pull/2972
43
+ * Fix excess Azure logging by @strickvl in https://github.com/zenml-io/zenml/pull/2965
44
+ * Fix typo in docs by @strickvl in https://github.com/zenml-io/zenml/pull/2976
45
+ * Pass code path to template run by @schustmi in https://github.com/zenml-io/zenml/pull/2973
46
+ * Prevent extra attributes in component configs by @schustmi in https://github.com/zenml-io/zenml/pull/2978
47
+ * Dependency cleanup and Python 3.12 support by @bcdurak in https://github.com/zenml-io/zenml/pull/2953
48
+ * Few nits in docs based on integrations review by @avishniakov in https://github.com/zenml-io/zenml/pull/2983
49
+ * Update slack alerter docs by @stefannica in https://github.com/zenml-io/zenml/pull/2981
50
+ * Update Kubeflow orchestrator docs by @stefannica in https://github.com/zenml-io/zenml/pull/2985
51
+ * Build docker images for python 3.12 by @schustmi in https://github.com/zenml-io/zenml/pull/2988
52
+ * Allow shortcut keys for component settings by @schustmi in https://github.com/zenml-io/zenml/pull/2957
53
+ * Remove references to workspaces from docs by @strickvl in https://github.com/zenml-io/zenml/pull/2991
54
+ * Added some adjustments for colab by @AlexejPenner in https://github.com/zenml-io/zenml/pull/2966
55
+ * Reverting the installation of `mlstacks` after its new release by @bcdurak in https://github.com/zenml-io/zenml/pull/2980
56
+ * Small dependency and docs updates by @strickvl in https://github.com/zenml-io/zenml/pull/2982
57
+
58
+
59
+ **Full Changelog**: https://github.com/zenml-io/zenml/compare/0.65.0...0.66.0
60
+
61
+ # 0.65.0
62
+
63
+ ## New Features and Improvements
64
+
65
+ ### New Quickstart Experience
66
+
67
+ This example demonstrates how ZenML streamlines the transition of machine learning workflows from local environments to
68
+ cloud-scale operations.
69
+
70
+ ### Run Single Step as a ZenML Pipeline
71
+
72
+ If you want to run just an individual step on your stack, you can simply call the step
73
+ as you would with a normal Python function. ZenML will internally create a pipeline with just your step
74
+ and run it on the active stack.
75
+
76
+ ### Other improvements and fixes
77
+
78
+ * Updated AzureML Step Operator to work with SDKv2 and use Service Connectors
79
+ * Added timestamps to log messages
80
+ * Fixed issue with loading artifacts from artifact store outside of current active artifact store
81
+ * Support of templated names for Model Version (`{date}` and `{time}` are currently supported placeholders)
82
+ * `run_with_accelerate` step wrapper can be used as a Python Decorator on top of ZenML steps
83
+
84
+ ## Breaking changes
85
+
86
+ * Workspace scoped POST endpoint `full-stack` was removed and merged with `stacks` POST endpoint
87
+
88
+
89
+ ## What's Changed
90
+ * Remove broken JIRA sync workflow by @strickvl in https://github.com/zenml-io/zenml/pull/2924
91
+ * Fix Hugging Face Spaces permissions by @strickvl in https://github.com/zenml-io/zenml/pull/2925
92
+ * Fixes for `run_with_accelerate` by @avishniakov in https://github.com/zenml-io/zenml/pull/2935
93
+ * Bump azure skypilot to a stable 0.6.1 by @avishniakov in https://github.com/zenml-io/zenml/pull/2933
94
+ * Add Timestamps to Logs and Update Dashboard URL Message by @htahir1 in https://github.com/zenml-io/zenml/pull/2934
95
+ * Adding 0.64.0 to migration tests by @bcdurak in https://github.com/zenml-io/zenml/pull/2923
96
+ * Removed docker build docs + fixed CLI command for zenml pipeline build list by @htahir1 in https://github.com/zenml-io/zenml/pull/2938
97
+ * Throw an error when running integration installs when uv == False but pip is not installed by @mennoliefstingh in https://github.com/zenml-io/zenml/pull/2930
98
+ * Update AzureML step operator to SDK v2 and add service connector support by @stefannica in https://github.com/zenml-io/zenml/pull/2927
99
+ * Improving the AzureML orchestrator docs by @bcdurak in https://github.com/zenml-io/zenml/pull/2940
100
+ * Update mlflow docs by @htahir1 in https://github.com/zenml-io/zenml/pull/2941
101
+ * Tell users where they can import `DockerSettings` from by @strickvl in https://github.com/zenml-io/zenml/pull/2947
102
+ * Fail early when specifying invalid materializers by @schustmi in https://github.com/zenml-io/zenml/pull/2950
103
+ * Add GitHub Codespaces and VS Code Remote Container support by @htahir1 in https://github.com/zenml-io/zenml/pull/2949
104
+ * Automatically detect whether code download is necessary by @schustmi in https://github.com/zenml-io/zenml/pull/2946
105
+ * Enable running a single step on the active stack by @schustmi in https://github.com/zenml-io/zenml/pull/2942
106
+ * Dynamic (templated) names for model versions by @avishniakov in https://github.com/zenml-io/zenml/pull/2909
107
+ * Adding an orchestrator URL to the AzureML orchestrator by @bcdurak in https://github.com/zenml-io/zenml/pull/2952
108
+ * Update python version of latest docker image by @schustmi in https://github.com/zenml-io/zenml/pull/2954
109
+ * Make `run_with_accelerate` a pythonic decorator by @avishniakov in https://github.com/zenml-io/zenml/pull/2943
110
+ * Bugfix for artifacts coming from a different artifact store by @bcdurak in https://github.com/zenml-io/zenml/pull/2928
111
+ * Stack Request cleanup and improvements by @bcdurak in https://github.com/zenml-io/zenml/pull/2906
112
+ * Silence pydantic protected namespace warnings by @schustmi in https://github.com/zenml-io/zenml/pull/2955
113
+ * Update key for finished onboarding survey by @schustmi in https://github.com/zenml-io/zenml/pull/2956
114
+ * Extend notebook source replacement code to other objects apart from ZenML steps by @schustmi in https://github.com/zenml-io/zenml/pull/2919
115
+ * Fix stack register CLI command by @schustmi in https://github.com/zenml-io/zenml/pull/2958
116
+ * Lightening studio orchestrator by @safoinme in https://github.com/zenml-io/zenml/pull/2931
117
+ * Introduce new quickstart with a focus on Stack switching by @AlexejPenner in https://github.com/zenml-io/zenml/pull/2937
118
+ * Bugfix for the required prompts for the AzureML wizard by @bcdurak in https://github.com/zenml-io/zenml/pull/2959
119
+
120
+ ## New Contributors
121
+ * @mennoliefstingh made their first contribution in https://github.com/zenml-io/zenml/pull/2930
122
+
123
+ **Full Changelog**: https://github.com/zenml-io/zenml/compare/0.64.0...0.65.0
124
+
3
125
  # 0.64.0
4
126
 
5
127
  ## New Features and Improvements
@@ -731,7 +853,7 @@ by adding support for `Schedule.start_time` to the HyperAI orchestrator.
731
853
  ## What's Changed
732
854
  * Really run migration testing by @avishniakov in https://github.com/zenml-io/zenml/pull/2562
733
855
  * Interact with feature gate by @AlexejPenner in https://github.com/zenml-io/zenml/pull/2492
734
- * Allow for logs to be unformatted / without colours by @strickvl in https://github.com/zenml-io/zenml/pull/2544
856
+ * Allow for logs to be unformatted / without colors by @strickvl in https://github.com/zenml-io/zenml/pull/2544
735
857
  * Add VS Code extension to README / docs by @strickvl in https://github.com/zenml-io/zenml/pull/2568
736
858
  * Allow loading of artifacts without needing to activate the artifact store (again) by @avishniakov in https://github.com/zenml-io/zenml/pull/2545
737
859
  * Minor fix by @htahir1 in https://github.com/zenml-io/zenml/pull/2578
@@ -1302,7 +1424,7 @@ and some improvements to the Model Control Plane.
1302
1424
  ## What's Changed
1303
1425
  * Bump aquasecurity/trivy-action from 0.16.0 to 0.16.1 by @dependabot in https://github.com/zenml-io/zenml/pull/2244
1304
1426
  * Bump crate-ci/typos from 1.16.26 to 1.17.0 by @dependabot in https://github.com/zenml-io/zenml/pull/2245
1305
- * Add YAML formatting standardisation to formatting & linting scripts by @strickvl in https://github.com/zenml-io/zenml/pull/2224
1427
+ * Add YAML formatting standardization to formatting & linting scripts by @strickvl in https://github.com/zenml-io/zenml/pull/2224
1306
1428
  * Remove text annotation by @strickvl in https://github.com/zenml-io/zenml/pull/2246
1307
1429
  * Add MariaDB migration testing by @strickvl in https://github.com/zenml-io/zenml/pull/2170
1308
1430
  * Delete artifact links from model version via Client, ModelVersion and API by @avishniakov in https://github.com/zenml-io/zenml/pull/2191
@@ -1383,7 +1505,7 @@ which allows you to define custom blocks for the Slack message.
1383
1505
  * Bump google-github-actions/auth from 1 to 2 by @dependabot in https://github.com/zenml-io/zenml/pull/2203
1384
1506
  * Bump aws-actions/amazon-ecr-login from 1 to 2 by @dependabot in https://github.com/zenml-io/zenml/pull/2200
1385
1507
  * Bump crate-ci/typos from 1.16.25 to 1.16.26 by @dependabot in https://github.com/zenml-io/zenml/pull/2207
1386
- * Fix unreliable test behaviour when using hypothesis by @strickvl in https://github.com/zenml-io/zenml/pull/2208
1508
+ * Fix unreliable test behavior when using hypothesis by @strickvl in https://github.com/zenml-io/zenml/pull/2208
1387
1509
  * Added more pod spec properties for k8s orchestrator by @htahir1 in https://github.com/zenml-io/zenml/pull/2097
1388
1510
  * Fix API docs environment setup by @strickvl in https://github.com/zenml-io/zenml/pull/2190
1389
1511
  * Use placeholder runs to show pipeline runs in the dashboard without delay by @schustmi in https://github.com/zenml-io/zenml/pull/2048
@@ -2602,7 +2724,7 @@ improvements and bug fixes.
2602
2724
  * Delete extra word from `bentoml` docs by @strickvl in https://github.com/zenml-io/zenml/pull/1484
2603
2725
  * Remove top-level config from recommended repo structure by @schustmi in https://github.com/zenml-io/zenml/pull/1485
2604
2726
  * Bump `mypy` and `ruff` by @strickvl in https://github.com/zenml-io/zenml/pull/1481
2605
- * ZenML Version Downgrade - Silence Warnning by @safoinme in https://github.com/zenml-io/zenml/pull/1477
2727
+ * ZenML Version Downgrade - Silence Warning by @safoinme in https://github.com/zenml-io/zenml/pull/1477
2606
2728
  * Update ZenServer recipes to include secret stores by @wjayesh in https://github.com/zenml-io/zenml/pull/1483
2607
2729
  * Fix alembic order by @schustmi in https://github.com/zenml-io/zenml/pull/1487
2608
2730
  * Fix source resolving for classes in notebooks by @schustmi in https://github.com/zenml-io/zenml/pull/1486
zenml/VERSION CHANGED
@@ -1 +1 @@
1
- 0.64.0.dev20240811
1
+ 0.66.0.dev20240910
zenml/artifacts/utils.py CHANGED
@@ -710,12 +710,19 @@ def _get_artifact_store_from_response_or_from_active_stack(
710
710
  "BaseArtifactStore",
711
711
  StackComponent.from_model(artifact_store_model),
712
712
  )
713
- except (KeyError, ImportError):
714
- logger.warning(
715
- "Unable to restore artifact store while trying to load artifact "
716
- "`%s`. If this artifact is stored in a remote artifact store, "
717
- "this might lead to issues when trying to load the artifact.",
718
- artifact.id,
713
+ except KeyError:
714
+ raise RuntimeError(
715
+ "Unable to fetch the artifact store with id: "
716
+ f"'{artifact.artifact_store_id}'. Check whether the artifact "
717
+ "store still exists and you have the right permissions to "
718
+ "access it."
719
+ )
720
+ except ImportError:
721
+ raise RuntimeError(
722
+ "Unable to load the implementation of the artifact store with"
723
+ f"id: '{artifact.artifact_store_id}'. Please make sure that "
724
+ "the environment that you are loading this artifact from "
725
+ "has the right dependencies."
719
726
  )
720
727
  return Client().active_stack.artifact_store
721
728
 
zenml/cli/__init__.py CHANGED
@@ -2186,7 +2186,7 @@ zenml service-connector describe SERVICE_CONNECTOR_NAME_ID_OR_PREFIX
2186
2186
 
2187
2187
  You can update a registered service connector by using the `update` command.
2188
2188
  Keep in mind that all service connector updates are validated before being
2189
- applied. If you want to disable this behaviour please use the `--no-verify`
2189
+ applied. If you want to disable this behavior please use the `--no-verify`
2190
2190
  flag.
2191
2191
 
2192
2192
  ```bash
zenml/cli/base.py CHANGED
@@ -79,19 +79,19 @@ class ZenMLProjectTemplateLocation(BaseModel):
79
79
  ZENML_PROJECT_TEMPLATES = dict(
80
80
  e2e_batch=ZenMLProjectTemplateLocation(
81
81
  github_url="zenml-io/template-e2e-batch",
82
- github_tag="2024.06.06", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
82
+ github_tag="2024.08.29", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
83
83
  ),
84
84
  starter=ZenMLProjectTemplateLocation(
85
85
  github_url="zenml-io/template-starter",
86
- github_tag="2024.07.26", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
86
+ github_tag="2024.08.28", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
87
87
  ),
88
88
  nlp=ZenMLProjectTemplateLocation(
89
89
  github_url="zenml-io/template-nlp",
90
- github_tag="2024.08.07", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
90
+ github_tag="2024.08.29", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
91
91
  ),
92
92
  llm_finetuning=ZenMLProjectTemplateLocation(
93
93
  github_url="zenml-io/template-llm-finetuning",
94
- github_tag="2024.06.20", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
94
+ github_tag="2024.08.29", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
95
95
  ),
96
96
  )
97
97
 
zenml/cli/integration.py CHANGED
@@ -247,32 +247,43 @@ def install(
247
247
  Args:
248
248
  integrations: The name of the integration to install the requirements
249
249
  for.
250
- ignore_integration: Integrations to ignore explicitly (passed in separately).
250
+ ignore_integration: Integrations to ignore explicitly (passed in
251
+ separately).
251
252
  force: Force the installation of the required packages.
252
253
  uv: Use uv for package installation (experimental).
253
254
  """
254
- from zenml.cli.utils import is_uv_installed
255
+ from zenml.cli.utils import is_pip_installed, is_uv_installed
255
256
  from zenml.integrations.registry import integration_registry
256
257
 
257
258
  if uv and not is_uv_installed():
258
259
  error(
259
- "UV is not installed but the uv flag was passed in. Please install uv or remove the uv flag."
260
+ "UV is not installed but the uv flag was passed in. Please install "
261
+ "uv or remove the uv flag."
262
+ )
263
+
264
+ if not uv and not is_pip_installed():
265
+ error(
266
+ "Pip is not installed. Please install pip or use the uv flag "
267
+ "(--uv) for package installation."
260
268
  )
261
269
 
262
270
  if not integrations:
263
271
  # no integrations specified, use all registered integrations
264
- integrations = set(integration_registry.integrations.keys())
272
+ integration_set = set(integration_registry.integrations.keys())
265
273
 
266
274
  for i in ignore_integration:
267
275
  try:
268
- integrations.remove(i)
276
+ integration_set.remove(i)
269
277
  except KeyError:
270
278
  error(
271
279
  f"Integration {i} does not exist. Available integrations: "
272
280
  f"{list(integration_registry.integrations.keys())}"
273
281
  )
282
+ else:
283
+ integration_set = set(integrations)
284
+
274
285
  # TODO: remove once python 3.8 is deprecated
275
- if sys.version_info.minor == 8 and "tensorflow" in integrations:
286
+ if sys.version_info.minor == 8 and "tensorflow" in integration_set:
276
287
  warning(
277
288
  "Python 3.8 with TensorFlow is not fully compatible with "
278
289
  "Pydantic 2 requirements. Consider upgrading to a "
@@ -280,9 +291,25 @@ def install(
280
291
  "Tensorflow integration."
281
292
  )
282
293
 
294
+ if sys.version_info.minor == 12 and "tensorflow" in integration_set:
295
+ warning(
296
+ "The TensorFlow integration is not yet compatible with Python "
297
+ "3.12, thus its installation is skipped. Consider using a "
298
+ "different version of Python and stay in touch for further updates."
299
+ )
300
+ integration_set.remove("tensorflow")
301
+
302
+ if sys.version_info.minor == 12 and "deepchecks" in integration_set:
303
+ warning(
304
+ "The Deepchecks integration is not yet compatible with Python "
305
+ "3.12, thus its installation is skipped. Consider using a "
306
+ "different version of Python and stay in touch for further updates."
307
+ )
308
+ integration_set.remove("deepchecks")
309
+
283
310
  requirements = []
284
311
  integrations_to_install = []
285
- for integration_name in integrations:
312
+ for integration_name in integration_set:
286
313
  try:
287
314
  if force or not integration_registry.is_installed(
288
315
  integration_name
@@ -346,12 +373,18 @@ def uninstall(
346
373
  force: Force the uninstallation of the required packages.
347
374
  uv: Use uv for package uninstallation (experimental).
348
375
  """
349
- from zenml.cli.utils import is_uv_installed
376
+ from zenml.cli.utils import is_pip_installed, is_uv_installed
350
377
  from zenml.integrations.registry import integration_registry
351
378
 
352
379
  if uv and not is_uv_installed():
353
380
  error("Package `uv` is not installed. Please install it and retry.")
354
381
 
382
+ if not uv and not is_pip_installed():
383
+ error(
384
+ "Pip is not installed. Please install pip or use the uv flag "
385
+ "(--uv) for package installation."
386
+ )
387
+
355
388
  if not integrations:
356
389
  # no integrations specified, use all registered integrations
357
390
  integrations = tuple(integration_registry.integrations.keys())
@@ -423,12 +456,18 @@ def upgrade(
423
456
  force: Force the installation of the required packages.
424
457
  uv: Use uv for package installation (experimental).
425
458
  """
426
- from zenml.cli.utils import is_uv_installed
459
+ from zenml.cli.utils import is_pip_installed, is_uv_installed
427
460
  from zenml.integrations.registry import integration_registry
428
461
 
429
462
  if uv and not is_uv_installed():
430
463
  error("Package `uv` is not installed. Please install it and retry.")
431
464
 
465
+ if not uv and not is_pip_installed():
466
+ error(
467
+ "Pip is not installed. Please install pip or use the uv flag "
468
+ "(--uv) for package installation."
469
+ )
470
+
432
471
  if not integrations:
433
472
  # no integrations specified, use all registered integrations
434
473
  integrations = set(integration_registry.integrations.keys())
zenml/cli/pipeline.py CHANGED
@@ -516,7 +516,7 @@ def list_pipeline_builds(**kwargs: Any) -> None:
516
516
  client = Client()
517
517
  try:
518
518
  with console.status("Listing pipeline builds...\n"):
519
- pipeline_builds = client.list_builds(**kwargs)
519
+ pipeline_builds = client.list_builds(hydrate=True, **kwargs)
520
520
  except KeyError as err:
521
521
  cli_utils.error(str(err))
522
522
  else:
@@ -526,7 +526,14 @@ def list_pipeline_builds(**kwargs: Any) -> None:
526
526
 
527
527
  cli_utils.print_pydantic_models(
528
528
  pipeline_builds,
529
- exclude_columns=["created", "updated", "user", "workspace"],
529
+ exclude_columns=[
530
+ "created",
531
+ "updated",
532
+ "user",
533
+ "workspace",
534
+ "images",
535
+ "stack_checksum",
536
+ ],
530
537
  )
531
538
 
532
539
 
zenml/cli/stack.py CHANGED
@@ -74,16 +74,16 @@ from zenml.exceptions import (
74
74
  )
75
75
  from zenml.io.fileio import rmtree
76
76
  from zenml.logger import get_logger
77
- from zenml.models import StackFilter
78
- from zenml.models.v2.core.service_connector import (
79
- ServiceConnectorRequest,
80
- ServiceConnectorResponse,
81
- )
82
- from zenml.models.v2.misc.full_stack import (
77
+ from zenml.models import (
83
78
  ComponentInfo,
84
- FullStackRequest,
85
79
  ServiceConnectorInfo,
86
80
  ServiceConnectorResourcesInfo,
81
+ StackFilter,
82
+ StackRequest,
83
+ )
84
+ from zenml.models.v2.core.service_connector import (
85
+ ServiceConnectorRequest,
86
+ ServiceConnectorResponse,
87
87
  )
88
88
  from zenml.service_connectors.service_connector_utils import (
89
89
  get_resources_options_from_resource_model_for_full_stack,
@@ -281,10 +281,11 @@ def register_stack(
281
281
  artifact_store is None or orchestrator is None
282
282
  ):
283
283
  cli_utils.error(
284
- "Only stack using service connector can be registered "
285
- "without specifying an artifact store and an orchestrator. "
286
- "Please specify the artifact store and the orchestrator or "
287
- "the service connector or cloud type settings."
284
+ "The only way to register a stack without specifying an "
285
+ "orchestrator and an artifact store is by using either a provider"
286
+ "(-p/--provider) or an existing service connector "
287
+ "(-sc/--connector). Please specify the artifact store and "
288
+ "the orchestrator or the service connector or cloud type settings."
288
289
  )
289
290
 
290
291
  client = Client()
@@ -294,12 +295,12 @@ def register_stack(
294
295
  cli_utils.error(
295
296
  "You are registering a stack using a service connector, but "
296
297
  "this feature cannot be used with a local ZenML deployment. "
297
- "ZenML needs to be accessible from the cloud provider to allow the "
298
- "stack and its components to be registered automatically. "
299
- "Please deploy ZenML in a remote environment as described in the "
300
- "documentation: https://docs.zenml.io/getting-started/deploying-zenml "
301
- "or use a managed ZenML Pro server instance for quick access to "
302
- "this feature and more: https://www.zenml.io/pro"
298
+ "ZenML needs to be accessible from the cloud provider to allow "
299
+ "the stack and its components to be registered automatically. "
300
+ "Please deploy ZenML in a remote environment as described in "
301
+ "the documentation: https://docs.zenml.io/getting-started/deploying-zenml "
302
+ "or use a managed ZenML Pro server instance for quick access "
303
+ "to this feature and more: https://www.zenml.io/pro"
303
304
  )
304
305
 
305
306
  try:
@@ -315,8 +316,9 @@ def register_stack(
315
316
  pass
316
317
 
317
318
  labels: Dict[str, str] = {}
318
- components: Dict[StackComponentType, Union[UUID, ComponentInfo]] = {}
319
- # cloud flow
319
+ components: Dict[StackComponentType, List[Union[UUID, ComponentInfo]]] = {}
320
+
321
+ # Cloud Flow
320
322
  created_objects: Set[str] = set()
321
323
  service_connector: Optional[Union[UUID, ServiceConnectorInfo]] = None
322
324
  if provider is not None and connector is None:
@@ -339,6 +341,7 @@ def register_stack(
339
341
  )
340
342
  except Exception:
341
343
  pass
344
+
342
345
  if service_connector_response:
343
346
  use_auto_configure = Confirm.ask(
344
347
  f"[bold]{provider.upper()} cloud service connector[/bold] "
@@ -364,8 +367,9 @@ def register_stack(
364
367
  for connector in existing_connectors.items
365
368
  ],
366
369
  headers=["Name"],
367
- prompt_text=f"We found these {provider.upper()} service connectors. "
368
- "Do you want to create a new one or use one of the existing ones?",
370
+ prompt_text=f"We found these {provider.upper()} service "
371
+ "connectors. Do you want to create a new one or use one "
372
+ "of the existing ones?",
369
373
  default_choice="0",
370
374
  allow_zero_be_a_new_object=True,
371
375
  )
@@ -486,7 +490,7 @@ def register_stack(
486
490
  component_info = selected_component.id
487
491
  component_name = selected_component.name
488
492
 
489
- components[component_type] = component_info
493
+ components[component_type] = [component_info]
490
494
  if component_type == StackComponentType.ARTIFACT_STORE:
491
495
  artifact_store = component_name
492
496
  if component_type == StackComponentType.ORCHESTRATOR:
@@ -511,13 +515,15 @@ def register_stack(
511
515
  (StackComponentType.CONTAINER_REGISTRY, container_registry),
512
516
  ]:
513
517
  if component_name_ and component_type_ not in components:
514
- components[component_type_] = client.get_stack_component(
515
- component_type_, component_name_
516
- ).id
518
+ components[component_type_] = [
519
+ client.get_stack_component(
520
+ component_type_, component_name_
521
+ ).id
522
+ ]
517
523
 
518
524
  try:
519
- created_stack = client.zen_store.create_full_stack(
520
- full_stack=FullStackRequest(
525
+ created_stack = client.zen_store.create_stack(
526
+ stack=StackRequest(
521
527
  user=client.active_user.id,
522
528
  workspace=client.active_workspace.id,
523
529
  name=stack_name,
@@ -2471,6 +2477,12 @@ def _get_stack_component_info(
2471
2477
  "Skypilot cluster",
2472
2478
  is_skypilot=True,
2473
2479
  )
2480
+ elif flavor == "azureml":
2481
+ config["subscription_id"] = Prompt.ask(
2482
+ "Enter the subscription ID:"
2483
+ )
2484
+ config["resource_group"] = Prompt.ask("Enter the resource group:")
2485
+ config["workspace"] = Prompt.ask("Enter the workspace name:")
2474
2486
  elif flavor == "vertex":
2475
2487
  config["location"] = query_region(
2476
2488
  StackDeploymentProvider.GCP, "Vertex AI job"
zenml/cli/utils.py CHANGED
@@ -1169,6 +1169,19 @@ def is_uv_installed() -> bool:
1169
1169
  return False
1170
1170
 
1171
1171
 
1172
+ def is_pip_installed() -> bool:
1173
+ """Check if pip is installed in the current environment.
1174
+
1175
+ Returns:
1176
+ True if pip is installed, False otherwise.
1177
+ """
1178
+ try:
1179
+ pkg_resources.get_distribution("pip")
1180
+ return True
1181
+ except pkg_resources.DistributionNotFound:
1182
+ return False
1183
+
1184
+
1172
1185
  def pretty_print_secret(
1173
1186
  secret: Dict[str, str],
1174
1187
  hide_secret: bool = True,
zenml/client.py CHANGED
@@ -1522,25 +1522,23 @@ class Client(metaclass=ClientMetaClass):
1522
1522
  stack: The stack to validate.
1523
1523
 
1524
1524
  Raises:
1525
- KeyError: If the stack references missing components.
1526
1525
  ValidationError: If the stack configuration is invalid.
1527
1526
  """
1528
1527
  local_components: List[str] = []
1529
1528
  remote_components: List[str] = []
1530
1529
  assert stack.components is not None
1531
- for component_type, component_ids in stack.components.items():
1532
- for component_id in component_ids:
1533
- try:
1534
- component = self.get_stack_component(
1535
- name_id_or_prefix=component_id,
1530
+ for component_type, components in stack.components.items():
1531
+ for component in components:
1532
+ if isinstance(component, UUID):
1533
+ component_response = self.get_stack_component(
1534
+ name_id_or_prefix=component,
1536
1535
  component_type=component_type,
1537
1536
  )
1538
- except KeyError as e:
1539
- raise KeyError(
1540
- f"Cannot register stack '{stack.name}' since it has an "
1541
- f"unregistered {component_type} with id "
1542
- f"'{component_id}'."
1543
- ) from e
1537
+ component_config = component_response.configuration
1538
+ component_flavor = component_response.flavor
1539
+ else:
1540
+ component_config = component.configuration
1541
+ component_flavor = component.flavor
1544
1542
 
1545
1543
  # Create and validate the configuration
1546
1544
  from zenml.stack.utils import (
@@ -1549,9 +1547,9 @@ class Client(metaclass=ClientMetaClass):
1549
1547
  )
1550
1548
 
1551
1549
  configuration = validate_stack_component_config(
1552
- configuration_dict=component.configuration,
1553
- flavor_name=component.flavor,
1554
- component_type=component.type,
1550
+ configuration_dict=component_config,
1551
+ flavor_name=component_flavor,
1552
+ component_type=component_type,
1555
1553
  # Always enforce validation of custom flavors
1556
1554
  validate_custom_flavors=True,
1557
1555
  )
@@ -1561,11 +1559,11 @@ class Client(metaclass=ClientMetaClass):
1561
1559
  warn_if_config_server_mismatch(configuration)
1562
1560
  if configuration.is_local:
1563
1561
  local_components.append(
1564
- f"{component.type.value}: {component.name}"
1562
+ f"{component_type.value}: {component_flavor}"
1565
1563
  )
1566
1564
  elif configuration.is_remote:
1567
1565
  remote_components.append(
1568
- f"{component.type.value}: {component.name}"
1566
+ f"{component_type.value}: {component_flavor}"
1569
1567
  )
1570
1568
 
1571
1569
  if local_components and remote_components:
zenml/config/compiler.py CHANGED
@@ -93,6 +93,10 @@ class Compiler:
93
93
  self._apply_run_configuration(
94
94
  pipeline=pipeline, config=run_configuration
95
95
  )
96
+ convert_component_shortcut_settings_keys(
97
+ pipeline.configuration.settings, stack=stack
98
+ )
99
+
96
100
  self._apply_stack_default_settings(pipeline=pipeline, stack=stack)
97
101
  if run_configuration.run_name:
98
102
  self._verify_run_name(run_configuration.run_name)
@@ -445,6 +449,9 @@ class Compiler:
445
449
  step_config, runtime_parameters=invocation.parameters
446
450
  )
447
451
 
452
+ convert_component_shortcut_settings_keys(
453
+ step.configuration.settings, stack=stack
454
+ )
448
455
  step_spec = self._get_step_spec(invocation=invocation)
449
456
  step_settings = self._filter_and_validate_settings(
450
457
  settings=step.configuration.settings,
@@ -596,3 +603,30 @@ class Compiler:
596
603
  additional_spec_args["parameters"] = pipeline._parameters
597
604
 
598
605
  return PipelineSpec(steps=step_specs, **additional_spec_args)
606
+
607
+
608
+ def convert_component_shortcut_settings_keys(
609
+ settings: Dict[str, "BaseSettings"], stack: "Stack"
610
+ ) -> None:
611
+ """Convert component shortcut settings keys.
612
+
613
+ Args:
614
+ settings: Dictionary of settings.
615
+ stack: The stack that the pipeline will run on.
616
+
617
+ Raises:
618
+ ValueError: If stack component settings were defined both using the
619
+ full and the shortcut key.
620
+ """
621
+ for component in stack.components.values():
622
+ shortcut_key = str(component.type)
623
+ if component_settings := settings.pop(shortcut_key, None):
624
+ key = settings_utils.get_stack_component_setting_key(component)
625
+ if key in settings:
626
+ raise ValueError(
627
+ f"Duplicate settings provided for your {shortcut_key} "
628
+ f"using the keys {shortcut_key} and {key}. Remove settings "
629
+ "for one of them to fix this error."
630
+ )
631
+
632
+ settings[key] = component_settings