zenml-nightly 0.83.1.dev20250710__py3-none-any.whl → 0.84.0.dev20250712__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 (267) hide show
  1. zenml/VERSION +1 -1
  2. zenml/artifact_stores/base_artifact_store.py +51 -23
  3. zenml/artifacts/utils.py +3 -1
  4. zenml/cli/pipeline.py +13 -2
  5. zenml/constants.py +4 -0
  6. zenml/container_registries/base_container_registry.py +17 -5
  7. zenml/enums.py +9 -0
  8. zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py +150 -117
  9. zenml/integrations/aws/flavors/sagemaker_step_operator_flavor.py +43 -42
  10. zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +16 -7
  11. zenml/integrations/azure/orchestrators/azureml_orchestrator.py +18 -12
  12. zenml/integrations/bentoml/flavors/bentoml_model_deployer_flavor.py +7 -1
  13. zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +58 -23
  14. zenml/integrations/feast/flavors/feast_feature_store_flavor.py +18 -5
  15. zenml/integrations/gcp/flavors/vertex_experiment_tracker_flavor.py +10 -42
  16. zenml/integrations/gcp/flavors/vertex_orchestrator_flavor.py +99 -92
  17. zenml/integrations/gcp/google_credentials_mixin.py +13 -8
  18. zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +18 -9
  19. zenml/integrations/huggingface/__init__.py +1 -1
  20. zenml/integrations/hyperai/flavors/hyperai_orchestrator_flavor.py +28 -30
  21. zenml/integrations/kaniko/flavors/kaniko_image_builder_flavor.py +56 -40
  22. zenml/integrations/kubeflow/flavors/kubeflow_orchestrator_flavor.py +59 -48
  23. zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +159 -121
  24. zenml/integrations/kubernetes/flavors/kubernetes_step_operator_flavor.py +48 -33
  25. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +182 -1
  26. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +7 -3
  27. zenml/integrations/lightning/flavors/lightning_orchestrator_flavor.py +41 -25
  28. zenml/integrations/mlflow/flavors/mlflow_experiment_tracker_flavor.py +51 -44
  29. zenml/integrations/mlflow/flavors/mlflow_model_deployer_flavor.py +9 -4
  30. zenml/integrations/neptune/flavors/neptune_experiment_tracker_flavor.py +13 -12
  31. zenml/integrations/s3/flavors/s3_artifact_store_flavor.py +32 -7
  32. zenml/integrations/vllm/flavors/vllm_model_deployer_flavor.py +7 -1
  33. zenml/integrations/wandb/flavors/wandb_experiment_tracker_flavor.py +34 -25
  34. zenml/integrations/whylogs/flavors/whylogs_data_validator_flavor.py +14 -11
  35. zenml/logging/step_logging.py +8 -7
  36. zenml/models/v2/core/logs.py +2 -1
  37. zenml/models/v2/core/pipeline_run.py +0 -59
  38. zenml/orchestrators/base_orchestrator.py +7 -1
  39. zenml/pipelines/build_utils.py +2 -1
  40. zenml/stack/authentication_mixin.py +6 -5
  41. zenml/stack/flavor.py +5 -1
  42. zenml/utils/code_utils.py +2 -1
  43. zenml/utils/docker_utils.py +22 -0
  44. zenml/utils/io_utils.py +18 -0
  45. zenml/utils/pipeline_docker_image_builder.py +4 -1
  46. zenml/utils/run_utils.py +101 -8
  47. zenml/zen_server/dashboard/assets/{404-B5eko6XL.js → 404-B5cfnwZ1.js} +1 -1
  48. zenml/zen_server/dashboard/assets/{@radix-Cdvw4jJ8.js → @radix-C_LirfyT.js} +1 -1
  49. zenml/zen_server/dashboard/assets/{@react-router-DeDfXbUF.js → @react-router-BSsrkPOd.js} +1 -1
  50. zenml/zen_server/dashboard/assets/{@reactflow-B_iCtR7X.js → @reactflow-D9hglKLF.js} +2 -2
  51. zenml/zen_server/dashboard/assets/{@tanstack-5gTMR7G2.js → @tanstack-C0SeHZng.js} +1 -1
  52. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-druRNuO2.js +1 -0
  53. zenml/zen_server/dashboard/assets/ButtonGroup-SF2DlzHV.js +1 -0
  54. zenml/zen_server/dashboard/assets/{CodeSnippet-Ctplhzdc.js → CodeSnippet-D8iBqOVv.js} +1 -1
  55. zenml/zen_server/dashboard/assets/CollapsibleCard-D0-pQi1n.js +1 -0
  56. zenml/zen_server/dashboard/assets/{ComponentBadge-Cnecw3qz.js → ComponentBadge-mw2Ja_ON.js} +1 -1
  57. zenml/zen_server/dashboard/assets/ComponentIcon-BXgpt-jw.js +1 -0
  58. zenml/zen_server/dashboard/assets/{DeleteAlertDialog-DEI0YDzP.js → DeleteAlertDialog-BbyFVnVI.js} +1 -1
  59. zenml/zen_server/dashboard/assets/DialogItem-DeME0oSt.js +1 -0
  60. zenml/zen_server/dashboard/assets/{DisplayDate-8RESqe5H.js → DisplayDate-v3KW7oez.js} +1 -1
  61. zenml/zen_server/dashboard/assets/{EmptyState-CjrgDtVk.js → EmptyState-DG0m-CGv.js} +1 -1
  62. zenml/zen_server/dashboard/assets/Error-DcVLcrLs.js +1 -0
  63. zenml/zen_server/dashboard/assets/ExecutionStatus-C4tlFnlh.js +1 -0
  64. zenml/zen_server/dashboard/assets/{Helpbox-DtUG2Bf_.js → Helpbox-C-RGHz3S.js} +1 -1
  65. zenml/zen_server/dashboard/assets/{Infobox-CSBRrM6r.js → Infobox-DFCWPbMb.js} +1 -1
  66. zenml/zen_server/dashboard/assets/{LeftSideMenu-DPsCCK3z.js → LeftSideMenu-Czev0KCA.js} +1 -1
  67. zenml/zen_server/dashboard/assets/{Lock-CrIAdQo6.js → Lock-CRP5J_su.js} +1 -1
  68. zenml/zen_server/dashboard/assets/NestedCollapsible-CN9scBUn.js +1 -0
  69. zenml/zen_server/dashboard/assets/{NumberBox-DtCv7jh3.js → NumberBox-CoQjQYDJ.js} +1 -1
  70. zenml/zen_server/dashboard/assets/{Pagination-CWnEpSpN.js → Pagination-CcDD5yHh.js} +1 -1
  71. zenml/zen_server/dashboard/assets/Partials-DlMzfKgs.js +1 -0
  72. zenml/zen_server/dashboard/assets/{PasswordChecker-B88WjuCe.js → PasswordChecker-BZwoeQIm.js} +1 -1
  73. zenml/zen_server/dashboard/assets/{ProCta-CNyp04C8.js → ProCta-CU2ycJDo.js} +1 -1
  74. zenml/zen_server/dashboard/assets/ProviderIcon-BMAn9Jld.js +1 -0
  75. zenml/zen_server/dashboard/assets/ProviderRadio-D_q9tE3G.js +1 -0
  76. zenml/zen_server/dashboard/assets/RunsBody-BToytB8e.js +1 -0
  77. zenml/zen_server/dashboard/assets/{SearchField-BtUi6cYl.js → SearchField-D_0-uAPj.js} +1 -1
  78. zenml/zen_server/dashboard/assets/SecretTooltip-BcWMKb9f.js +1 -0
  79. zenml/zen_server/dashboard/assets/{SetPassword-BmbgL_ed.js → SetPassword-CaKVSqAL.js} +1 -1
  80. zenml/zen_server/dashboard/assets/{SheetHeader-DkH7aG9K.js → SheetHeader-7vwlsY_i.js} +1 -1
  81. zenml/zen_server/dashboard/assets/StackComponentList-s7eSfm8o.js +1 -0
  82. zenml/zen_server/dashboard/assets/StackList-Dt0FrIkM.js +1 -0
  83. zenml/zen_server/dashboard/assets/Tabs-B27AHUfo.js +1 -0
  84. zenml/zen_server/dashboard/assets/Tick-DDeDgTuT.js +1 -0
  85. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-D_DCETSO.js → UpdatePasswordSchemas-Da5RndbV.js} +1 -1
  86. zenml/zen_server/dashboard/assets/{Wizard-BHvY75u_.js → Wizard-8aJzxUjb.js} +1 -1
  87. zenml/zen_server/dashboard/assets/WizardFooter-Bt7_UE14.js +1 -0
  88. zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-DpKw9WL9.js → all-pipeline-runs-query-gorNNEaT.js} +1 -1
  89. zenml/zen_server/dashboard/assets/{arrow-left-MRXv5pAH.js → arrow-left-hcj2H8HY.js} +1 -1
  90. zenml/zen_server/dashboard/assets/bar-chart-square-check-9siI9icm.js +1 -0
  91. zenml/zen_server/dashboard/assets/{bulk-delete-CzYA--cC.js → bulk-delete-B5RTlnD_.js} +1 -1
  92. zenml/zen_server/dashboard/assets/{check-B9QMTa3f.js → check-D1bHMJkL.js} +1 -1
  93. zenml/zen_server/dashboard/assets/{check-circle-C4tYvbtw.js → check-circle-mnEgPhPF.js} +1 -1
  94. zenml/zen_server/dashboard/assets/{chevron-down-jbbQh82s.js → chevron-down-Z3nUe-0U.js} +1 -1
  95. zenml/zen_server/dashboard/assets/{chevron-right-double-Dgp_gEsp.js → chevron-right-double-CbRQKN4Q.js} +1 -1
  96. zenml/zen_server/dashboard/assets/{clock-B_mTG8PH.js → clock-BMjHXT3f.js} +1 -1
  97. zenml/zen_server/dashboard/assets/{code-browser-CiD8qkBx.js → code-browser-DftoiCIg.js} +1 -1
  98. zenml/zen_server/dashboard/assets/configuration-form-Yz8m0QIG.js +1 -0
  99. zenml/zen_server/dashboard/assets/constants-DeV48DuZ.js +1 -0
  100. zenml/zen_server/dashboard/assets/{create-stack-BpZrmKDu.js → create-stack-BruqH_6X.js} +1 -1
  101. zenml/zen_server/dashboard/assets/credit-card-CH1BHrXY.js +1 -0
  102. zenml/zen_server/dashboard/assets/dataflow-2-qHjWt7zp.js +1 -0
  103. zenml/zen_server/dashboard/assets/{delete-run-BkyDsKQc.js → delete-run-ibBtciMR.js} +1 -1
  104. zenml/zen_server/dashboard/assets/{expand-full-BPiXpch2.js → expand-full-CD4fFvM-.js} +1 -1
  105. zenml/zen_server/dashboard/assets/{eye-CbVlAYty.js → eye-CLNgIh_K.js} +1 -1
  106. zenml/zen_server/dashboard/assets/{file-text-Cd8wVfq5.js → file-text-CltVhgwZ.js} +1 -1
  107. zenml/zen_server/dashboard/assets/form-6aSt3tIl.js +1 -0
  108. zenml/zen_server/dashboard/assets/form-schemas-B9XgTS1V.js +1 -0
  109. zenml/zen_server/dashboard/assets/gradient_bg-BH8t8fi6.webp +0 -0
  110. zenml/zen_server/dashboard/assets/{help-Co6aedki.js → help-B0CvBhCm.js} +1 -1
  111. zenml/zen_server/dashboard/assets/icon-hDriJUXY.js +1 -0
  112. zenml/zen_server/dashboard/assets/{index-eoDB_1XX.js → index-B7CRNU8l.js} +1 -1
  113. zenml/zen_server/dashboard/assets/index-BQWlHo1Y.js +1 -0
  114. zenml/zen_server/dashboard/assets/{index-DWpiv-Ft.js → index-BRhKF2z-.js} +1 -1
  115. zenml/zen_server/dashboard/assets/{index-BgEfQ3_G.js → index-BacoJBEQ.js} +11 -11
  116. zenml/zen_server/dashboard/assets/{index-BBt0LDtR.js → index-dCcVgFNl.js} +1 -1
  117. zenml/zen_server/dashboard/assets/index-eggipFZS.css +1 -0
  118. zenml/zen_server/dashboard/assets/index-mA8kL088.js +14 -0
  119. zenml/zen_server/dashboard/assets/{index.es-C1gfATPn.js → index.es-DcVFDpJU.js} +1 -1
  120. zenml/zen_server/dashboard/assets/{index.esm-DhJo3mA6.js → index.esm-COnaHLSh.js} +1 -1
  121. zenml/zen_server/dashboard/assets/{info-QkbQz4QU.js → info-CyMih3vQ.js} +1 -1
  122. zenml/zen_server/dashboard/assets/{key-icon-C07HKw8z.js → key-icon-HOx2gazv.js} +1 -1
  123. zenml/zen_server/dashboard/assets/{layout-DBbfEFBe.js → layout-C5dgIReC.js} +1 -1
  124. zenml/zen_server/dashboard/assets/layout-CFLL6-CM.js +1 -0
  125. zenml/zen_server/dashboard/assets/{login-mutation-C1hvP_cX.js → login-mutation-CidpsqyH.js} +1 -1
  126. zenml/zen_server/dashboard/assets/{logs-CQKlJjo0.js → logs-DoLoTEfj.js} +1 -1
  127. zenml/zen_server/dashboard/assets/mail-C160gvB0.js +1 -0
  128. zenml/zen_server/dashboard/assets/message-chat-square-DLz6XmPS.js +1 -0
  129. zenml/zen_server/dashboard/assets/{package-miExReQl.js → package-BhYXGPxF.js} +1 -1
  130. zenml/zen_server/dashboard/assets/page-6huxSHEu.js +1 -0
  131. zenml/zen_server/dashboard/assets/page-7CJ4Wq3O.js +1 -0
  132. zenml/zen_server/dashboard/assets/page-8U20Tu_8.js +1 -0
  133. zenml/zen_server/dashboard/assets/{page-4zc4xPv2.js → page-BByayrO-.js} +2 -2
  134. zenml/zen_server/dashboard/assets/page-BCRXJXC9.js +1 -0
  135. zenml/zen_server/dashboard/assets/page-BK59rZvf.js +1 -0
  136. zenml/zen_server/dashboard/assets/page-BMpXak4U.js +1 -0
  137. zenml/zen_server/dashboard/assets/page-BTDi81N3.js +1 -0
  138. zenml/zen_server/dashboard/assets/{page-D-tJ_Y0a.js → page-BX67x4iL.js} +1 -1
  139. zenml/zen_server/dashboard/assets/page-Bjmcdg64.js +1 -0
  140. zenml/zen_server/dashboard/assets/page-BsAn8p4m.js +1 -0
  141. zenml/zen_server/dashboard/assets/{page-C2i-C7jv.js → page-BwjPRuaY.js} +1 -1
  142. zenml/zen_server/dashboard/assets/page-CDtSVkNc.js +1 -0
  143. zenml/zen_server/dashboard/assets/page-CEDU0L2T.js +1 -0
  144. zenml/zen_server/dashboard/assets/page-COJK90rG.js +1 -0
  145. zenml/zen_server/dashboard/assets/page-CY0LPcAJ.js +1 -0
  146. zenml/zen_server/dashboard/assets/page-C_XMn4GU.js +1 -0
  147. zenml/zen_server/dashboard/assets/page-Cb3KGsPK.js +22 -0
  148. zenml/zen_server/dashboard/assets/page-Cc8owYXQ.js +1 -0
  149. zenml/zen_server/dashboard/assets/{page-C3JfJxuR.js → page-CeGBDh1Q.js} +1 -1
  150. zenml/zen_server/dashboard/assets/page-CiGOVsj3.js +1 -0
  151. zenml/zen_server/dashboard/assets/page-CmLSFMkW.js +1 -0
  152. zenml/zen_server/dashboard/assets/page-CnfCptXq.js +1 -0
  153. zenml/zen_server/dashboard/assets/page-CvllZMBF.js +1 -0
  154. zenml/zen_server/dashboard/assets/page-CxzglV3-.js +1 -0
  155. zenml/zen_server/dashboard/assets/{page-rVhXI5ZO.js → page-D6cvOG8w.js} +1 -1
  156. zenml/zen_server/dashboard/assets/{page-BxeZrG_t.js → page-DDWW21kl.js} +1 -1
  157. zenml/zen_server/dashboard/assets/{page-DiHZK-1w.js → page-DF4FVxxW.js} +2 -2
  158. zenml/zen_server/dashboard/assets/page-DSZfclXt.js +1 -0
  159. zenml/zen_server/dashboard/assets/page-DVLez4R1.js +1 -0
  160. zenml/zen_server/dashboard/assets/page-DcXrWWWh.js +1 -0
  161. zenml/zen_server/dashboard/assets/page-Dg7-H_9i.js +1 -0
  162. zenml/zen_server/dashboard/assets/{page-BPQ66vR-.js → page-DgldL5UB.js} +2 -2
  163. zenml/zen_server/dashboard/assets/page-Dw7XuiSo.js +18 -0
  164. zenml/zen_server/dashboard/assets/{page-DOCOmmKn.js → page-FQxi1Otg.js} +1 -1
  165. zenml/zen_server/dashboard/assets/page-XrmOHHg7.js +1 -0
  166. zenml/zen_server/dashboard/assets/page-YdWnx9MX.js +1 -0
  167. zenml/zen_server/dashboard/assets/page-oRm7D4TC.js +1 -0
  168. zenml/zen_server/dashboard/assets/{page-uxjMX8Iq.js → page-q41JNDWO.js} +1 -1
  169. zenml/zen_server/dashboard/assets/page-x2GXC8sI.js +1 -0
  170. zenml/zen_server/dashboard/assets/page-z2FXP4GY.js +1 -0
  171. zenml/zen_server/dashboard/assets/{persist-CFPbMcJX.js → persist-BKKcL1Kp.js} +1 -1
  172. zenml/zen_server/dashboard/assets/{persist-BsdEtCkd.js → persist-DxiyfAax.js} +1 -1
  173. zenml/zen_server/dashboard/assets/{pipeline-CSUlkd50.js → pipeline-BJ8liDnl.js} +1 -1
  174. zenml/zen_server/dashboard/assets/{plus-Cl0_rCVF.js → plus-cI8zD2xh.js} +1 -1
  175. zenml/zen_server/dashboard/assets/primary-role-CPGHymjN.js +1 -0
  176. zenml/zen_server/dashboard/assets/{react-error-boundary.esm-7_MuhCay.js → react-error-boundary.esm-DoXxY4pT.js} +1 -1
  177. zenml/zen_server/dashboard/assets/{refresh-BcTM09NW.js → refresh-3EF2R7ja.js} +1 -1
  178. zenml/zen_server/dashboard/assets/{resource-tyes-list-79FqS3LY.js → resource-tyes-list-B5rkZcbc.js} +1 -1
  179. zenml/zen_server/dashboard/assets/resource-type-tooltip-E97WGqfk.js +1 -0
  180. zenml/zen_server/dashboard/assets/service-B9aVzfAF.js +2 -0
  181. zenml/zen_server/dashboard/assets/service-connectors-DL2-k_E2.js +1 -0
  182. zenml/zen_server/dashboard/assets/{sharedSchema-C_HkejsG.js → sharedSchema-DyUO09BR.js} +1 -1
  183. zenml/zen_server/dashboard/assets/slash-circle-D2Lb2FyR.js +1 -0
  184. zenml/zen_server/dashboard/assets/stack-detail-query-Bc4QKlWg.js +1 -0
  185. zenml/zen_server/dashboard/assets/{terminal-XFL_4QN-.js → terminal-BObrvDlO.js} +1 -1
  186. zenml/zen_server/dashboard/assets/{terminal-square-XFL_4QN-.js → terminal-square-BObrvDlO.js} +1 -1
  187. zenml/zen_server/dashboard/assets/{transform-CeZdrxDZ.js → transform-DFpKTKgF.js} +1 -1
  188. zenml/zen_server/dashboard/assets/{trash-DP6Tpp_E.js → trash-HKxXWbSG.js} +1 -1
  189. zenml/zen_server/dashboard/assets/{update-current-user-mutation-Ca-Lmwuj.js → update-current-user-mutation-DSyUyHVj.js} +1 -1
  190. zenml/zen_server/dashboard/assets/update-server-settings-mutation-CdM-Sdds.js +1 -0
  191. zenml/zen_server/dashboard/assets/{zod-XdS2h1ws.js → zod-DgEcN9jD.js} +1 -1
  192. zenml/zen_server/dashboard/index.html +7 -7
  193. zenml/zen_server/deploy/daemon/daemon_zen_server.py +4 -0
  194. zenml/zen_server/deploy/docker/docker_zen_server.py +2 -0
  195. zenml/zen_server/routers/runs_endpoints.py +20 -28
  196. zenml/zen_stores/migrations/versions/0.84.0_release.py +23 -0
  197. zenml/zen_stores/sql_zen_store.py +9 -3
  198. {zenml_nightly-0.83.1.dev20250710.dist-info → zenml_nightly-0.84.0.dev20250712.dist-info}/METADATA +9 -22
  199. {zenml_nightly-0.83.1.dev20250710.dist-info → zenml_nightly-0.84.0.dev20250712.dist-info}/RECORD +202 -195
  200. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-DsOmO1FH.js +0 -1
  201. zenml/zen_server/dashboard/assets/ButtonGroup-4sPZDv70.js +0 -1
  202. zenml/zen_server/dashboard/assets/CollapsibleCard-CBKenz9f.js +0 -1
  203. zenml/zen_server/dashboard/assets/ComponentIcon-CMiVW-O6.js +0 -1
  204. zenml/zen_server/dashboard/assets/DialogItem-CRCDpYU6.js +0 -1
  205. zenml/zen_server/dashboard/assets/Error-BG6f_WRd.js +0 -1
  206. zenml/zen_server/dashboard/assets/ExecutionStatus-BuhNAE9w.js +0 -1
  207. zenml/zen_server/dashboard/assets/NestedCollapsible-CMuDIJlp.js +0 -1
  208. zenml/zen_server/dashboard/assets/Partials-CfHD6OH5.js +0 -1
  209. zenml/zen_server/dashboard/assets/ProviderIcon-DHejyg7C.js +0 -1
  210. zenml/zen_server/dashboard/assets/ProviderRadio-tGtie8Gc.js +0 -1
  211. zenml/zen_server/dashboard/assets/RunsBody-mYwMcWWj.js +0 -1
  212. zenml/zen_server/dashboard/assets/SecretTooltip-B5u1UsQ9.js +0 -1
  213. zenml/zen_server/dashboard/assets/StackComponentList-Bi8BKqCu.js +0 -1
  214. zenml/zen_server/dashboard/assets/StackList-Cvxapo0p.js +0 -1
  215. zenml/zen_server/dashboard/assets/StackName-CFSZL8ec.js +0 -1
  216. zenml/zen_server/dashboard/assets/Tabs-D4dv48ry.js +0 -1
  217. zenml/zen_server/dashboard/assets/Tick-Qquvr4P3.js +0 -1
  218. zenml/zen_server/dashboard/assets/UsageReason-DhiUV1bu.js +0 -1
  219. zenml/zen_server/dashboard/assets/WizardFooter-FQm8y-jP.js +0 -1
  220. zenml/zen_server/dashboard/assets/configuration-form-DSoMMiPE.js +0 -1
  221. zenml/zen_server/dashboard/assets/constants-DTfsIqHy.js +0 -1
  222. zenml/zen_server/dashboard/assets/flyte-Cj-xy_8I.svg +0 -10
  223. zenml/zen_server/dashboard/assets/form-BgtamtJm.js +0 -1
  224. zenml/zen_server/dashboard/assets/form-schemas-dyDkAxXP.js +0 -1
  225. zenml/zen_server/dashboard/assets/gcp-B1I3Qvcx.js +0 -1
  226. zenml/zen_server/dashboard/assets/index-BfNISy0X.css +0 -1
  227. zenml/zen_server/dashboard/assets/layout-o1x87a3q.js +0 -1
  228. zenml/zen_server/dashboard/assets/metaflow-weOkWNyT.svg +0 -10
  229. zenml/zen_server/dashboard/assets/page-4xUZpMN0.js +0 -31
  230. zenml/zen_server/dashboard/assets/page-B0104V6C.js +0 -1
  231. zenml/zen_server/dashboard/assets/page-BNJsjvof.js +0 -1
  232. zenml/zen_server/dashboard/assets/page-BQgSZ2nH.js +0 -1
  233. zenml/zen_server/dashboard/assets/page-BXl2ZX6J.js +0 -1
  234. zenml/zen_server/dashboard/assets/page-C2A-2Cj_.js +0 -1
  235. zenml/zen_server/dashboard/assets/page-CESEqC2L.js +0 -1
  236. zenml/zen_server/dashboard/assets/page-CF8cTZ7l.js +0 -1
  237. zenml/zen_server/dashboard/assets/page-CKjsimVu.js +0 -1
  238. zenml/zen_server/dashboard/assets/page-COLzBwff.js +0 -1
  239. zenml/zen_server/dashboard/assets/page-COifg5fa.js +0 -1
  240. zenml/zen_server/dashboard/assets/page-CQeJuA8T.js +0 -1
  241. zenml/zen_server/dashboard/assets/page-CcjWEjre.js +0 -1
  242. zenml/zen_server/dashboard/assets/page-CefGLeWy.js +0 -1
  243. zenml/zen_server/dashboard/assets/page-CfxpV3j4.js +0 -1
  244. zenml/zen_server/dashboard/assets/page-ClcUzawe.js +0 -1
  245. zenml/zen_server/dashboard/assets/page-Ct_LB3zo.js +0 -1
  246. zenml/zen_server/dashboard/assets/page-D-ZWUMYY.js +0 -1
  247. zenml/zen_server/dashboard/assets/page-DHrvih9u.js +0 -1
  248. zenml/zen_server/dashboard/assets/page-DMhaHZDw.js +0 -1
  249. zenml/zen_server/dashboard/assets/page-DcQmxKLp.js +0 -1
  250. zenml/zen_server/dashboard/assets/page-Dh4GRWw5.js +0 -1
  251. zenml/zen_server/dashboard/assets/page-Dn7ZNapg.js +0 -1
  252. zenml/zen_server/dashboard/assets/page-Dy4vSQY7.js +0 -1
  253. zenml/zen_server/dashboard/assets/page-QrvWQwZb.js +0 -1
  254. zenml/zen_server/dashboard/assets/page-RF3Fup0q.js +0 -40
  255. zenml/zen_server/dashboard/assets/page-WuvCrN47.js +0 -1
  256. zenml/zen_server/dashboard/assets/page-_WnHBI1F.js +0 -1
  257. zenml/zen_server/dashboard/assets/page-ghjVNgVE.js +0 -1
  258. zenml/zen_server/dashboard/assets/page-iDsDiDXw.js +0 -1
  259. zenml/zen_server/dashboard/assets/resource-type-tooltip-BL9ZTRKi.js +0 -1
  260. zenml/zen_server/dashboard/assets/service-connectors-Q8h7-_rG.js +0 -1
  261. zenml/zen_server/dashboard/assets/service-k-9Vsb30.js +0 -2
  262. zenml/zen_server/dashboard/assets/stack-detail-query-CNmVZ0Bo.js +0 -1
  263. zenml/zen_server/dashboard/assets/type-guards-CNgPYg8l.js +0 -1
  264. zenml/zen_server/dashboard/assets/update-server-settings-mutation-Bwe3gUt4.js +0 -1
  265. {zenml_nightly-0.83.1.dev20250710.dist-info → zenml_nightly-0.84.0.dev20250712.dist-info}/LICENSE +0 -0
  266. {zenml_nightly-0.83.1.dev20250710.dist-info → zenml_nightly-0.84.0.dev20250712.dist-info}/WHEEL +0 -0
  267. {zenml_nightly-0.83.1.dev20250710.dist-info → zenml_nightly-0.84.0.dev20250712.dist-info}/entry_points.txt +0 -0
@@ -807,14 +807,20 @@ class SagemakerOrchestrator(ContainerizedOrchestrator):
807
807
  settings=settings,
808
808
  )
809
809
 
810
- def fetch_status(self, run: "PipelineRunResponse") -> ExecutionStatus:
810
+ def fetch_status(
811
+ self, run: "PipelineRunResponse", include_steps: bool = False
812
+ ) -> Tuple[
813
+ Optional[ExecutionStatus], Optional[Dict[str, ExecutionStatus]]
814
+ ]:
811
815
  """Refreshes the status of a specific pipeline run.
812
816
 
813
817
  Args:
814
818
  run: The run that was executed by this orchestrator.
819
+ include_steps: Whether to fetch steps
815
820
 
816
821
  Returns:
817
- the actual status of the pipeline job.
822
+ A tuple of (pipeline_status, step_statuses_dict).
823
+ Step statuses are not supported for SageMaker, so step_statuses_dict will always be None.
818
824
 
819
825
  Raises:
820
826
  AssertionError: If the run was not executed by to this orchestrator.
@@ -855,18 +861,21 @@ class SagemakerOrchestrator(ContainerizedOrchestrator):
855
861
  # Map the potential outputs to ZenML ExecutionStatus. Potential values:
856
862
  # https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribePipelineExecution.html
857
863
  if status == "Executing":
858
- return ExecutionStatus.RUNNING
864
+ pipeline_status = ExecutionStatus.RUNNING
859
865
  elif status == "Stopping":
860
- return ExecutionStatus.STOPPING
866
+ pipeline_status = ExecutionStatus.STOPPING
861
867
  elif status == "Stopped":
862
- return ExecutionStatus.STOPPED
868
+ pipeline_status = ExecutionStatus.STOPPED
863
869
  elif status == "Failed":
864
- return ExecutionStatus.FAILED
870
+ pipeline_status = ExecutionStatus.FAILED
865
871
  elif status == "Succeeded":
866
- return ExecutionStatus.COMPLETED
872
+ pipeline_status = ExecutionStatus.COMPLETED
867
873
  else:
868
874
  raise ValueError("Unknown status for the pipeline execution.")
869
875
 
876
+ # SageMaker doesn't support step-level status fetching yet
877
+ return pipeline_status, None
878
+
870
879
  def compute_metadata(
871
880
  self,
872
881
  execution_arn: str,
@@ -451,14 +451,20 @@ class AzureMLOrchestrator(ContainerizedOrchestrator):
451
451
  )
452
452
  return {}
453
453
 
454
- def fetch_status(self, run: "PipelineRunResponse") -> ExecutionStatus:
454
+ def fetch_status(
455
+ self, run: "PipelineRunResponse", include_steps: bool = False
456
+ ) -> Tuple[
457
+ Optional[ExecutionStatus], Optional[Dict[str, ExecutionStatus]]
458
+ ]:
455
459
  """Refreshes the status of a specific pipeline run.
456
460
 
457
461
  Args:
458
462
  run: The run that was executed by this orchestrator.
463
+ include_steps: Whether to fetch steps (not supported for AzureML).
459
464
 
460
465
  Returns:
461
- the actual status of the pipeline execution.
466
+ A tuple of (pipeline_status, step_statuses_dict).
467
+ Step statuses are not supported for AzureML, so step_statuses_dict will always be None.
462
468
 
463
469
  Raises:
464
470
  AssertionError: If the run was not executed by to this orchestrator.
@@ -512,23 +518,23 @@ class AzureMLOrchestrator(ContainerizedOrchestrator):
512
518
  "Preparing",
513
519
  "Queued",
514
520
  ]:
515
- return ExecutionStatus.INITIALIZING
521
+ pipeline_status = ExecutionStatus.INITIALIZING
516
522
  elif status in ["Running", "Finalizing"]:
517
- return ExecutionStatus.RUNNING
523
+ pipeline_status = ExecutionStatus.RUNNING
518
524
  elif status == "CancelRequested":
519
- return ExecutionStatus.STOPPING
525
+ pipeline_status = ExecutionStatus.STOPPING
520
526
  elif status == "Canceled":
521
- return ExecutionStatus.STOPPED
522
- elif status in [
523
- "Failed",
524
- "NotResponding",
525
- ]:
526
- return ExecutionStatus.FAILED
527
+ pipeline_status = ExecutionStatus.STOPPED
528
+ elif status in ["Failed", "NotResponding"]:
529
+ pipeline_status = ExecutionStatus.FAILED
527
530
  elif status == "Completed":
528
- return ExecutionStatus.COMPLETED
531
+ pipeline_status = ExecutionStatus.COMPLETED
529
532
  else:
530
533
  raise ValueError("Unknown status for the pipeline job.")
531
534
 
535
+ # AzureML doesn't support step-level status fetching yet
536
+ return pipeline_status, None
537
+
532
538
  def compute_metadata(self, job: Any) -> Dict[str, MetadataType]:
533
539
  """Generate run metadata based on the generated AzureML PipelineJob.
534
540
 
@@ -15,6 +15,8 @@
15
15
 
16
16
  from typing import TYPE_CHECKING, Optional, Type
17
17
 
18
+ from pydantic import Field
19
+
18
20
  from zenml.integrations.bentoml import BENTOML_MODEL_DEPLOYER_FLAVOR
19
21
  from zenml.model_deployers.base_model_deployer import (
20
22
  BaseModelDeployerConfig,
@@ -28,7 +30,11 @@ if TYPE_CHECKING:
28
30
  class BentoMLModelDeployerConfig(BaseModelDeployerConfig):
29
31
  """Configuration for the BentoMLModelDeployer."""
30
32
 
31
- service_path: str = ""
33
+ service_path: str = Field(
34
+ "",
35
+ description="Path to the BentoML service directory. "
36
+ "If not provided, a default service path will be used.",
37
+ )
32
38
 
33
39
 
34
40
  class BentoMLModelDeployerFlavor(BaseModelDeployerFlavor):
@@ -15,6 +15,8 @@
15
15
 
16
16
  from typing import TYPE_CHECKING, Dict, Optional, Tuple, Type
17
17
 
18
+ from pydantic import Field
19
+
18
20
  from zenml.config.base_settings import BaseSettings
19
21
  from zenml.integrations.databricks import DATABRICKS_ORCHESTRATOR_FLAVOR
20
22
  from zenml.logger import get_logger
@@ -42,31 +44,64 @@ class DatabricksAvailabilityType(StrEnum):
42
44
  class DatabricksOrchestratorSettings(BaseSettings):
43
45
  """Databricks orchestrator base settings.
44
46
 
45
- Attributes:
46
- spark_version: Spark version.
47
- num_workers: Number of workers.
48
- node_type_id: Node type id.
49
- policy_id: Policy id.
50
- autotermination_minutes: Autotermination minutes.
51
- autoscale: Autoscale.
52
- single_user_name: Single user name.
53
- spark_conf: Spark configuration.
54
- spark_env_vars: Spark environment variables.
55
- schedule_timezone: Schedule timezone.
47
+ Configuration for Databricks cluster and Spark execution settings.
48
+ Field descriptions are defined inline using Field() descriptors.
56
49
  """
57
50
 
58
- # Resources
59
- spark_version: Optional[str] = None
60
- num_workers: Optional[int] = None
61
- node_type_id: Optional[str] = None
62
- policy_id: Optional[str] = None
63
- autotermination_minutes: Optional[int] = None
64
- autoscale: Tuple[int, int] = (0, 1)
65
- single_user_name: Optional[str] = None
66
- spark_conf: Optional[Dict[str, str]] = None
67
- spark_env_vars: Optional[Dict[str, str]] = None
68
- schedule_timezone: Optional[str] = None
69
- availability_type: Optional[DatabricksAvailabilityType] = None
51
+ # Cluster Configuration
52
+ spark_version: Optional[str] = Field(
53
+ default=None,
54
+ description="Apache Spark version for the Databricks cluster. "
55
+ "Uses workspace default if not specified. Example: '3.2.x-scala2.12'",
56
+ )
57
+ num_workers: Optional[int] = Field(
58
+ default=None,
59
+ description="Fixed number of worker nodes. Cannot be used with autoscaling.",
60
+ )
61
+ node_type_id: Optional[str] = Field(
62
+ default=None,
63
+ description="Databricks node type identifier. "
64
+ "Refer to Databricks documentation for available instance types. "
65
+ "Example: 'i3.xlarge'",
66
+ )
67
+ policy_id: Optional[str] = Field(
68
+ default=None,
69
+ description="Databricks cluster policy ID for governance and cost control.",
70
+ )
71
+ autotermination_minutes: Optional[int] = Field(
72
+ default=None,
73
+ description="Minutes of inactivity before automatic cluster termination. "
74
+ "Helps control costs by shutting down idle clusters.",
75
+ )
76
+ autoscale: Tuple[int, int] = Field(
77
+ default=(0, 1),
78
+ description="Cluster autoscaling bounds as (min_workers, max_workers). "
79
+ "Automatically adjusts cluster size based on workload.",
80
+ )
81
+ single_user_name: Optional[str] = Field(
82
+ default=None,
83
+ description="Databricks username for single-user cluster access mode.",
84
+ )
85
+ spark_conf: Optional[Dict[str, str]] = Field(
86
+ default=None,
87
+ description="Custom Spark configuration properties as key-value pairs. "
88
+ "Example: {'spark.sql.adaptive.enabled': 'true', 'spark.sql.adaptive.coalescePartitions.enabled': 'true'}",
89
+ )
90
+ spark_env_vars: Optional[Dict[str, str]] = Field(
91
+ default=None,
92
+ description="Environment variables for the Spark driver and executors. "
93
+ "Example: {'SPARK_WORKER_MEMORY': '4g', 'SPARK_DRIVER_MEMORY': '2g'}",
94
+ )
95
+ schedule_timezone: Optional[str] = Field(
96
+ default=None,
97
+ description="Timezone for scheduled pipeline execution. "
98
+ "Uses IANA timezone format (e.g., 'America/New_York').",
99
+ )
100
+ availability_type: Optional[DatabricksAvailabilityType] = Field(
101
+ default=None,
102
+ description="Instance availability type: ON_DEMAND (guaranteed), SPOT (cost-optimized), "
103
+ "or SPOT_WITH_FALLBACK (spot with on-demand backup).",
104
+ )
70
105
 
71
106
 
72
107
  class DatabricksOrchestratorConfig(
@@ -15,6 +15,8 @@
15
15
 
16
16
  from typing import TYPE_CHECKING, Optional, Type
17
17
 
18
+ from pydantic import Field
19
+
18
20
  from zenml.feature_stores.base_feature_store import (
19
21
  BaseFeatureStoreConfig,
20
22
  BaseFeatureStoreFlavor,
@@ -26,11 +28,22 @@ if TYPE_CHECKING:
26
28
 
27
29
 
28
30
  class FeastFeatureStoreConfig(BaseFeatureStoreConfig):
29
- """Config for Feast feature store."""
30
-
31
- online_host: str = "localhost"
32
- online_port: int = 6379
33
- feast_repo: str
31
+ """Config for Feast feature store.
32
+
33
+ Configuration for connecting to Feast feature stores.
34
+ Field descriptions are defined inline using Field() descriptors.
35
+ """
36
+
37
+ online_host: str = Field(
38
+ default="localhost",
39
+ description="Online feature store host address (typically Redis server).",
40
+ )
41
+ online_port: int = Field(
42
+ default=6379, description="Online feature store port number."
43
+ )
44
+ feast_repo: str = Field(
45
+ description="Local filesystem path to the Feast repository with feature definitions."
46
+ )
34
47
 
35
48
  @property
36
49
  def is_local(self) -> bool:
@@ -16,7 +16,7 @@
16
16
  import re
17
17
  from typing import TYPE_CHECKING, Any, Dict, Optional, Type, Union
18
18
 
19
- from pydantic import field_validator
19
+ from pydantic import Field, field_validator
20
20
 
21
21
  from zenml.config.base_settings import BaseSettings
22
22
  from zenml.experiment_trackers.base_experiment_tracker import (
@@ -40,15 +40,15 @@ if TYPE_CHECKING:
40
40
 
41
41
 
42
42
  class VertexExperimentTrackerSettings(BaseSettings):
43
- """Settings for the VertexAI experiment tracker.
43
+ """Settings for the VertexAI experiment tracker."""
44
44
 
45
- Attributes:
46
- experiment: The VertexAI experiment name.
47
- experiment_tensorboard: The VertexAI experiment tensorboard.
48
- """
49
-
50
- experiment: Optional[str] = None
51
- experiment_tensorboard: Optional[Union[str, bool]] = None
45
+ experiment: Optional[str] = Field(
46
+ None, description="The VertexAI experiment name."
47
+ )
48
+ experiment_tensorboard: Optional[Union[str, bool]] = Field(
49
+ None,
50
+ description="The VertexAI experiment tensorboard instance to use.",
51
+ )
52
52
 
53
53
  @field_validator("experiment", mode="before")
54
54
  def _validate_experiment(cls, value: str) -> str:
@@ -76,39 +76,7 @@ class VertexExperimentTrackerConfig(
76
76
  GoogleCredentialsConfigMixin,
77
77
  VertexExperimentTrackerSettings,
78
78
  ):
79
- """Config for the VertexAI experiment tracker.
80
-
81
- Attributes:
82
- location: Optional. The default location to use when making API calls. If not
83
- set defaults to us-central1.
84
- staging_bucket: Optional. The default staging bucket to use to stage artifacts
85
- when making API calls. In the form gs://...
86
- network:
87
- Optional. The full name of the Compute Engine network to which jobs
88
- and resources should be peered. E.g. "projects/12345/global/networks/myVPC".
89
- Private services access must already be configured for the network.
90
- If specified, all eligible jobs and resources created will be peered
91
- with this VPC.
92
- encryption_spec_key_name:
93
- Optional. The Cloud KMS resource identifier of the customer
94
- managed encryption key used to protect a resource. Has the
95
- form:
96
- ``projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key``.
97
- The key needs to be in the same region as where the compute
98
- resource is created.
99
- api_endpoint (str):
100
- Optional. The desired API endpoint,
101
- e.g., us-central1-aiplatform.googleapis.com
102
- api_key (str):
103
- Optional. The API key to use for service calls.
104
- NOTE: Not all services support API keys.
105
- api_transport (str):
106
- Optional. The transport method which is either 'grpc' or 'rest'.
107
- NOTE: "rest" transport functionality is currently in a
108
- beta state (preview).
109
- request_metadata:
110
- Optional. Additional gRPC metadata to send with every client request.
111
- """
79
+ """Config for the VertexAI experiment tracker."""
112
80
 
113
81
  location: Optional[str] = None
114
82
  staging_bucket: Optional[str] = None
@@ -15,6 +15,8 @@
15
15
 
16
16
  from typing import TYPE_CHECKING, Dict, Optional, Tuple, Type
17
17
 
18
+ from pydantic import Field
19
+
18
20
  from zenml.config.base_settings import BaseSettings
19
21
  from zenml.integrations.gcp import (
20
22
  GCP_RESOURCE_TYPE,
@@ -36,35 +38,37 @@ if TYPE_CHECKING:
36
38
 
37
39
 
38
40
  class VertexOrchestratorSettings(BaseSettings):
39
- """Settings for the Vertex orchestrator.
40
-
41
- Attributes:
42
- synchronous: If `True`, the client running a pipeline using this
43
- orchestrator waits until all steps finish running. If `False`,
44
- the client returns immediately and the pipeline is executed
45
- asynchronously. Defaults to `True`.
46
- labels: Labels to assign to the pipeline job.
47
- node_selector_constraint: Each constraint is a key-value pair label.
48
- For the container to be eligible to run on a node, the node must have
49
- each of the constraints appeared as labels.
50
- For example a GPU type can be providing by one of the following tuples:
51
- - ("cloud.google.com/gke-accelerator", "NVIDIA_TESLA_A100")
52
- - ("cloud.google.com/gke-accelerator", "NVIDIA_TESLA_K80")
53
- - ("cloud.google.com/gke-accelerator", "NVIDIA_TESLA_P4")
54
- - ("cloud.google.com/gke-accelerator", "NVIDIA_TESLA_P100")
55
- - ("cloud.google.com/gke-accelerator", "NVIDIA_TESLA_T4")
56
- - ("cloud.google.com/gke-accelerator", "NVIDIA_TESLA_V100")
57
- Hint: the selected region (location) must provide the requested accelerator
58
- (see https://cloud.google.com/compute/docs/gpus/gpu-regions-zones).
59
- pod_settings: Pod settings to apply.
60
- """
61
-
62
- labels: Dict[str, str] = {}
63
- synchronous: bool = True
64
- node_selector_constraint: Optional[Tuple[str, str]] = None
65
- pod_settings: Optional[KubernetesPodSettings] = None
66
-
67
- custom_job_parameters: Optional[VertexCustomJobParameters] = None
41
+ """Settings for the Vertex orchestrator."""
42
+
43
+ labels: Dict[str, str] = Field(
44
+ default_factory=dict,
45
+ description="Labels to assign to the pipeline job. "
46
+ "Example: {'environment': 'production', 'team': 'ml-ops'}",
47
+ )
48
+ synchronous: bool = Field(
49
+ True,
50
+ description="If `True`, the client running a pipeline using this "
51
+ "orchestrator waits until all steps finish running. If `False`, "
52
+ "the client returns immediately and the pipeline is executed "
53
+ "asynchronously.",
54
+ )
55
+ node_selector_constraint: Optional[Tuple[str, str]] = Field(
56
+ None,
57
+ description="Each constraint is a key-value pair label. For the container "
58
+ "to be eligible to run on a node, the node must have each of the "
59
+ "constraints appeared as labels. For example, a GPU type can be provided "
60
+ "by ('cloud.google.com/gke-accelerator', 'NVIDIA_TESLA_T4')."
61
+ "Hint: the selected region (location) must provide the requested accelerator"
62
+ "(see https://cloud.google.com/compute/docs/gpus/gpu-regions-zones).",
63
+ )
64
+ pod_settings: Optional[KubernetesPodSettings] = Field(
65
+ None,
66
+ description="Pod settings to apply to the orchestrator and step pods.",
67
+ )
68
+
69
+ custom_job_parameters: Optional[VertexCustomJobParameters] = Field(
70
+ None, description="Custom parameters for the Vertex AI custom job."
71
+ )
68
72
 
69
73
  _node_selector_deprecation = (
70
74
  deprecation_utils.deprecate_pydantic_attributes(
@@ -78,71 +82,74 @@ class VertexOrchestratorConfig(
78
82
  GoogleCredentialsConfigMixin,
79
83
  VertexOrchestratorSettings,
80
84
  ):
81
- """Configuration for the Vertex orchestrator.
82
-
83
- Attributes:
84
- location: Name of GCP region where the pipeline job will be executed.
85
- Vertex AI Pipelines is available in the following regions:
86
- https://cloud.google.com/vertex-ai/docs/general/locations#feature-availability
87
- pipeline_root: a Cloud Storage URI that will be used by the Vertex AI
88
- Pipelines. If not provided but the artifact store in the stack used
89
- to execute the pipeline is a
90
- `zenml.integrations.gcp.artifact_stores.GCPArtifactStore`,
91
- then a subdirectory of the artifact store will be used.
92
- encryption_spec_key_name: The Cloud KMS resource identifier of the
93
- customer managed encryption key used to protect the job. Has the form:
94
- `projects/<PROJECT>/locations/<REGION>/keyRings/<KR>/cryptoKeys/<KEY>`
95
- . The key needs to be in the same region as where the compute
96
- resource is created.
97
- workload_service_account: the service account for workload run-as
98
- account. Users submitting jobs must have act-as permission on this
99
- run-as account. If not provided, the Compute Engine default service
100
- account for the GCP project in which the pipeline is running is
101
- used.
102
- function_service_account: the service account for cloud function run-as
103
- account, for scheduled pipelines. This service account must have
104
- the act-as permission on the workload_service_account.
105
- If not provided, the Compute Engine default service account for the
106
- GCP project in which the pipeline is running is used.
107
- scheduler_service_account: the service account used by the Google Cloud
108
- Scheduler to trigger and authenticate to the pipeline Cloud Function
109
- on a schedule. If not provided, the Compute Engine default service
110
- account for the GCP project in which the pipeline is running is
111
- used.
112
- network: the full name of the Compute Engine Network to which the job
113
- should be peered. For example, `projects/12345/global/networks/myVPC`
114
- If not provided, the job will not be peered with any network.
115
- private_service_connect: the full name of a Private Service Connect
116
- endpoint to which the job should be peered. For example,
117
- `projects/12345/regions/us-central1/networkAttachments/NETWORK_ATTACHMENT_NAME`
118
- If not provided, the job will not be peered with any private service
119
- connect endpoint.
120
- cpu_limit: The maximum CPU limit for this operator. This string value
121
- can be a number (integer value for number of CPUs) as string,
122
- or a number followed by "m", which means 1/1000. You can specify
123
- at most 96 CPUs.
124
- (see. https://cloud.google.com/vertex-ai/docs/pipelines/machine-types)
125
- memory_limit: The maximum memory limit for this operator. This string
126
- value can be a number, or a number followed by "K" (kilobyte),
127
- "M" (megabyte), or "G" (gigabyte). At most 624GB is supported.
128
- gpu_limit: The GPU limit (positive number) for the operator.
129
- For more information about GPU resources, see:
130
- https://cloud.google.com/vertex-ai/docs/training/configure-compute#specifying_gpus
131
- """
132
-
133
- location: str
134
- pipeline_root: Optional[str] = None
135
- encryption_spec_key_name: Optional[str] = None
136
- workload_service_account: Optional[str] = None
137
- network: Optional[str] = None
138
- private_service_connect: Optional[str] = None
85
+ """Configuration for the Vertex orchestrator."""
86
+
87
+ location: str = Field(
88
+ ...,
89
+ description="Name of GCP region where the pipeline job will be executed. "
90
+ "Vertex AI Pipelines is available in specific regions: "
91
+ "https://cloud.google.com/vertex-ai/docs/general/locations#feature-availability",
92
+ )
93
+ pipeline_root: Optional[str] = Field(
94
+ None,
95
+ description="A Cloud Storage URI that will be used by the Vertex AI Pipelines. "
96
+ "If not provided but the artifact store in the stack is a GCPArtifactStore, "
97
+ "then a subdirectory of the artifact store will be used.",
98
+ )
99
+ encryption_spec_key_name: Optional[str] = Field(
100
+ None,
101
+ description="The Cloud KMS resource identifier of the customer managed "
102
+ "encryption key used to protect the job. Has the form: "
103
+ "projects/<PROJECT>/locations/<REGION>/keyRings/<KR>/cryptoKeys/<KEY>. "
104
+ "The key needs to be in the same region as where the compute resource is created.",
105
+ )
106
+ workload_service_account: Optional[str] = Field(
107
+ None,
108
+ description="The service account for workload run-as account. Users submitting "
109
+ "jobs must have act-as permission on this run-as account. If not provided, "
110
+ "the Compute Engine default service account for the GCP project is used.",
111
+ )
112
+ network: Optional[str] = Field(
113
+ None,
114
+ description="The full name of the Compute Engine Network to which the job "
115
+ "should be peered. For example, 'projects/12345/global/networks/myVPC'. "
116
+ "If not provided, the job will not be peered with any network.",
117
+ )
118
+ private_service_connect: Optional[str] = Field(
119
+ None,
120
+ description="The full name of a Private Service Connect endpoint to which "
121
+ "the job should be peered. For example, "
122
+ "'projects/12345/regions/us-central1/networkAttachments/NETWORK_ATTACHMENT_NAME'. "
123
+ "If not provided, the job will not be peered with any private service connect endpoint.",
124
+ )
139
125
 
140
126
  # Deprecated
141
- cpu_limit: Optional[str] = None
142
- memory_limit: Optional[str] = None
143
- gpu_limit: Optional[int] = None
144
- function_service_account: Optional[str] = None
145
- scheduler_service_account: Optional[str] = None
127
+ cpu_limit: Optional[str] = Field(
128
+ None,
129
+ description="DEPRECATED: The maximum CPU limit for this operator. "
130
+ "Use custom_job_parameters or pod_settings instead.",
131
+ )
132
+ memory_limit: Optional[str] = Field(
133
+ None,
134
+ description="DEPRECATED: The maximum memory limit for this operator. "
135
+ "Use custom_job_parameters or pod_settings instead.",
136
+ )
137
+ gpu_limit: Optional[int] = Field(
138
+ None,
139
+ description="DEPRECATED: The GPU limit for the operator. "
140
+ "Use custom_job_parameters or pod_settings instead.",
141
+ )
142
+ function_service_account: Optional[str] = Field(
143
+ None,
144
+ description="DEPRECATED: The service account for cloud function run-as account, "
145
+ "for scheduled pipelines. This functionality is no longer supported.",
146
+ )
147
+ scheduler_service_account: Optional[str] = Field(
148
+ None,
149
+ description="DEPRECATED: The service account used by the Google Cloud Scheduler "
150
+ "to trigger and authenticate to the pipeline Cloud Function on a schedule. "
151
+ "This functionality is no longer supported.",
152
+ )
146
153
 
147
154
  _resource_deprecation = deprecation_utils.deprecate_pydantic_attributes(
148
155
  "cpu_limit",
@@ -15,6 +15,8 @@
15
15
 
16
16
  from typing import TYPE_CHECKING, Optional, Tuple, cast
17
17
 
18
+ from pydantic import Field
19
+
18
20
  from zenml.logger import get_logger
19
21
  from zenml.stack.stack_component import StackComponent, StackComponentConfig
20
22
 
@@ -28,16 +30,19 @@ logger = get_logger(__name__)
28
30
  class GoogleCredentialsConfigMixin(StackComponentConfig):
29
31
  """Config mixin for Google Cloud Platform credentials.
30
32
 
31
- Attributes:
32
- project: GCP project name. If `None`, the project will be inferred from
33
- the environment.
34
- service_account_path: path to the service account credentials file to be
35
- used for authentication. If not provided, the default credentials
36
- will be used.
33
+ Provides common GCP authentication configuration for stack components.
34
+ Field descriptions are defined inline using Field() descriptors.
37
35
  """
38
36
 
39
- project: Optional[str] = None
40
- service_account_path: Optional[str] = None
37
+ project: Optional[str] = Field(
38
+ default=None,
39
+ description="Google Cloud Project ID. Auto-detected from environment if not specified.",
40
+ )
41
+ service_account_path: Optional[str] = Field(
42
+ default=None,
43
+ description="Path to service account JSON key file for authentication. "
44
+ "Uses Application Default Credentials if not provided.",
45
+ )
41
46
 
42
47
 
43
48
  class GoogleCredentialsMixin(StackComponent):