zenml-nightly 0.80.1.dev20250408__py3-none-any.whl → 0.80.1.dev20250409__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 (180) hide show
  1. zenml/VERSION +1 -1
  2. zenml/cli/integration.py +36 -0
  3. zenml/client.py +6 -0
  4. zenml/config/step_configurations.py +3 -2
  5. zenml/constants.py +1 -1
  6. zenml/entrypoints/step_entrypoint_configuration.py +2 -0
  7. zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +7 -2
  8. zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +2 -0
  9. zenml/integrations/azure/orchestrators/azureml_orchestrator.py +2 -0
  10. zenml/integrations/databricks/orchestrators/databricks_orchestrator.py +3 -1
  11. zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +2 -0
  12. zenml/integrations/hyperai/orchestrators/hyperai_orchestrator.py +3 -1
  13. zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py +3 -1
  14. zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +12 -0
  15. zenml/integrations/kubernetes/orchestrators/kube_utils.py +3 -0
  16. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +4 -1
  17. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +164 -19
  18. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint_configuration.py +8 -1
  19. zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +3 -1
  20. zenml/integrations/mlflow/__init__.py +0 -27
  21. zenml/integrations/mlflow/services/mlflow_deployment.py +25 -7
  22. zenml/integrations/seldon/services/seldon_deployment.py +1 -1
  23. zenml/integrations/skypilot/orchestrators/skypilot_base_vm_orchestrator.py +3 -1
  24. zenml/integrations/tekton/orchestrators/tekton_orchestrator.py +3 -1
  25. zenml/integrations/vllm/services/vllm_deployment.py +1 -1
  26. zenml/model/model.py +3 -1
  27. zenml/models/__init__.py +5 -0
  28. zenml/models/v2/core/run_template.py +32 -1
  29. zenml/orchestrators/base_orchestrator.py +3 -0
  30. zenml/orchestrators/dag_runner.py +48 -15
  31. zenml/orchestrators/local/local_orchestrator.py +3 -1
  32. zenml/orchestrators/local_docker/local_docker_orchestrator.py +3 -1
  33. zenml/utils/secret_utils.py +2 -2
  34. zenml/zen_server/dashboard/assets/{404-2I8egBQu.js → 404-CYPi9d8E.js} +1 -1
  35. zenml/zen_server/dashboard/assets/@radix-C7hRs6Kx.js +95 -0
  36. zenml/zen_server/dashboard/assets/{@react-router-BUo5vhN4.js → @react-router-BGgzhn5D.js} +5 -5
  37. zenml/zen_server/dashboard/assets/@reactflow-CQi1Z1Wq.js +17 -0
  38. zenml/zen_server/dashboard/assets/@tanstack-CSxjHCME.js +22 -0
  39. zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-D7KZcPFw.js → AlertDialogDropdownItem-Dn8bgaXG.js} +1 -1
  40. zenml/zen_server/dashboard/assets/{CodeSnippet-DUkCnBpQ.js → CodeSnippet-CSINAl3I.js} +1 -1
  41. zenml/zen_server/dashboard/assets/{CollapsibleCard-B5-5Plnd.js → CollapsibleCard-CQOb53t9.js} +1 -1
  42. zenml/zen_server/dashboard/assets/{Commands-CbOMmarC.js → Commands-CPleXvse.js} +1 -1
  43. zenml/zen_server/dashboard/assets/{ComponentBadge-FrujKBC6.js → ComponentBadge-CIFj0W7T.js} +1 -1
  44. zenml/zen_server/dashboard/assets/{ComponentIcon-Dx5fBrDX.js → ComponentIcon-D3JHFhJU.js} +1 -1
  45. zenml/zen_server/dashboard/assets/{CsvVizualization-B8E3p9we.js → CsvVizualization-Cklc1Vb5.js} +6 -6
  46. zenml/zen_server/dashboard/assets/{DeleteAlertDialog-BgTZbbAt.js → DeleteAlertDialog-Bzq-uSd7.js} +1 -1
  47. zenml/zen_server/dashboard/assets/{DialogItem-CNWLiJcc.js → DialogItem-zjMgCmCl.js} +1 -1
  48. zenml/zen_server/dashboard/assets/{DisplayDate-C5Aw-Yca.js → DisplayDate-CYVBBSgr.js} +1 -1
  49. zenml/zen_server/dashboard/assets/{EmptyState-DpbfQBDE.js → EmptyState-M1jafpg6.js} +1 -1
  50. zenml/zen_server/dashboard/assets/{Error-BkUP4Luv.js → Error-kdeNHm_o.js} +1 -1
  51. zenml/zen_server/dashboard/assets/{ExecutionStatus-CD8Vj7sp.js → ExecutionStatus-UE6Rbmtk.js} +1 -1
  52. zenml/zen_server/dashboard/assets/{Helpbox-DIx6mDOH.js → Helpbox-CeM-FPQl.js} +1 -1
  53. zenml/zen_server/dashboard/assets/{Infobox-BHEdNmME.js → Infobox-CD0fDbYF.js} +1 -1
  54. zenml/zen_server/dashboard/assets/{InlineAvatar-Bin9UPKJ.js → InlineAvatar-CrHWwlf4.js} +1 -1
  55. zenml/zen_server/dashboard/assets/{Lock-tO9Z41I9.js → Lock-DW-0_M0o.js} +1 -1
  56. zenml/zen_server/dashboard/assets/{MarkdownVisualization-C3JLiPCY.js → MarkdownVisualization-URCyUPcZ.js} +2 -2
  57. zenml/zen_server/dashboard/assets/{NestedCollapsible-Da-k0Mff.js → NestedCollapsible-DfTTGG8u.js} +1 -1
  58. zenml/zen_server/dashboard/assets/{NumberBox-BvBJYxCu.js → NumberBox-D2A7ENHb.js} +1 -1
  59. zenml/zen_server/dashboard/assets/Partials-DggkUpWp.js +1 -0
  60. zenml/zen_server/dashboard/assets/{PasswordChecker-B4Uw6BJZ.js → PasswordChecker-lYTOtNom.js} +1 -1
  61. zenml/zen_server/dashboard/assets/ProBadge-BCdprj69.js +1 -0
  62. zenml/zen_server/dashboard/assets/{ProCta-7_FtpX3I.js → ProCta-szzPO0Y7.js} +1 -1
  63. zenml/zen_server/dashboard/assets/{ProviderIcon-CxeziA5a.js → ProviderIcon-MdqWDO6-.js} +1 -1
  64. zenml/zen_server/dashboard/assets/{ProviderRadio-DPmZHff_.js → ProviderRadio-B4CB4vzP.js} +1 -1
  65. zenml/zen_server/dashboard/assets/{RunSelector-BVKB4Z8F.js → RunSelector-Bhb83FyB.js} +1 -1
  66. zenml/zen_server/dashboard/assets/{RunsBody-Cj4sIqQB.js → RunsBody-Csn2VEOE.js} +1 -1
  67. zenml/zen_server/dashboard/assets/{SearchField-DjAOZic5.js → SearchField-Cce00eQL.js} +1 -1
  68. zenml/zen_server/dashboard/assets/{SecretTooltip-mMAAP4dM.js → SecretTooltip-DaDLBVj-.js} +1 -1
  69. zenml/zen_server/dashboard/assets/{SetPassword-B0o5kSJU.js → SetPassword-tX6fom1Y.js} +1 -1
  70. zenml/zen_server/dashboard/assets/{StackList-5UB8LoEq.js → StackList-CQt1xGRh.js} +1 -1
  71. zenml/zen_server/dashboard/assets/{Tabs-AuhCyzle.js → Tabs-CCQyIqRb.js} +1 -1
  72. zenml/zen_server/dashboard/assets/{Tick-CHW0jc8Y.js → Tick-D63_jhf1.js} +1 -1
  73. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-Bauivjf-.js → UpdatePasswordSchemas-CbbvoGYV.js} +1 -1
  74. zenml/zen_server/dashboard/assets/{UsageReason-Dr5ca5M4.js → UsageReason-C2cNrUeS.js} +1 -1
  75. zenml/zen_server/dashboard/assets/{Wizard-XEp9rGmf.js → Wizard-BVkN2a2x.js} +1 -1
  76. zenml/zen_server/dashboard/assets/WizardFooter-Bk7gIKiS.js +1 -0
  77. zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-COvsm3bC.js → all-pipeline-runs-query-BLclwQSi.js} +1 -1
  78. zenml/zen_server/dashboard/assets/{arrow-left-B2hyhFky.js → arrow-left-CwgF2MEM.js} +1 -1
  79. zenml/zen_server/dashboard/assets/{check-DZ0KAh3W.js → check-DK77doTf.js} +1 -1
  80. zenml/zen_server/dashboard/assets/{check-circle-DyCCYTA0.js → check-circle-mvyzYvIW.js} +1 -1
  81. zenml/zen_server/dashboard/assets/{chevron-down-A3PXOshS.js → chevron-down-A-rmltmI.js} +1 -1
  82. zenml/zen_server/dashboard/assets/{chevron-right-double-zKz7rAaU.js → chevron-right-double-uNWbJT-C.js} +1 -1
  83. zenml/zen_server/dashboard/assets/{clock-k5T5tYrt.js → clock-CPA5cYxq.js} +1 -1
  84. zenml/zen_server/dashboard/assets/{code-browser-DvB0W2Ix.js → code-browser-j2EpcxIA.js} +1 -1
  85. zenml/zen_server/dashboard/assets/{configuration-form-BJUCr0wl.js → configuration-form-CjrAp0GS.js} +1 -1
  86. zenml/zen_server/dashboard/assets/{create-stack-B2c98UlP.js → create-stack-Bd2JdQer.js} +1 -1
  87. zenml/zen_server/dashboard/assets/delete-run-Cwpxu1-d.js +1 -0
  88. zenml/zen_server/dashboard/assets/{docker-B3Sqzd8J.js → docker-BuDBFEDL.js} +1 -1
  89. zenml/zen_server/dashboard/assets/{file-text-CgxVzNph.js → file-text-BdxZdjP_.js} +1 -1
  90. zenml/zen_server/dashboard/assets/{flavor-select-D8CranSY.js → flavor-select-c0w-6o9w.js} +1 -1
  91. zenml/zen_server/dashboard/assets/{form-schemas-Bm-dTV3L.js → form-schemas-B5Ax1SZf.js} +1 -1
  92. zenml/zen_server/dashboard/assets/{gcp-0u4le6mC.js → gcp-CHNvgEss.js} +1 -1
  93. zenml/zen_server/dashboard/assets/{help-CfT0tY2I.js → help-DyMolRxD.js} +1 -1
  94. zenml/zen_server/dashboard/assets/index-BW-KaQ2p.js +1 -0
  95. zenml/zen_server/dashboard/assets/{index-DPjvk73v.js → index-Be2jLIYM.js} +8 -8
  96. zenml/zen_server/dashboard/assets/{index-D-n6tspq.js → index-CjdtNrfJ.js} +1 -1
  97. zenml/zen_server/dashboard/assets/{index-BVVKxTWC.js → index-DR30v9MZ.js} +1 -1
  98. zenml/zen_server/dashboard/assets/{index-CzhJC6pc.js → index-d_40qKeY.js} +1 -1
  99. zenml/zen_server/dashboard/assets/index.esm-D7jFlf5N.js +1 -0
  100. zenml/zen_server/dashboard/assets/{key-icon-CjwWwoOU.js → key-icon-DO4DPJHZ.js} +1 -1
  101. zenml/zen_server/dashboard/assets/{kubernetes-eA-Y6gE7.js → kubernetes-D6OUjwSK.js} +1 -1
  102. zenml/zen_server/dashboard/assets/{layout-3_rgDUxf.js → layout-h3cbx8WZ.js} +1 -1
  103. zenml/zen_server/dashboard/assets/{link-external-BYm_zH_8.js → link-external-DUhCSKNm.js} +1 -1
  104. zenml/zen_server/dashboard/assets/{login-mutation-D6uiKsKk.js → login-mutation-DOajKct8.js} +1 -1
  105. zenml/zen_server/dashboard/assets/{logs-D6_diV2k.js → logs-B5n0U7tB.js} +1 -1
  106. zenml/zen_server/dashboard/assets/{not-found-DFrksY0r.js → not-found-DolTp0dr.js} +1 -1
  107. zenml/zen_server/dashboard/assets/{package-BOms6B-A.js → package-D1Mhqeh8.js} +1 -1
  108. zenml/zen_server/dashboard/assets/{page-DBNBYSwq.js → page-48DMcIQw.js} +2 -2
  109. zenml/zen_server/dashboard/assets/{page-DOzFoJuo.js → page-B32kCGPe.js} +1 -1
  110. zenml/zen_server/dashboard/assets/page-BAjhc2bs.js +1 -0
  111. zenml/zen_server/dashboard/assets/{page-D5GZlpKq.js → page-BBNrvxC1.js} +1 -1
  112. zenml/zen_server/dashboard/assets/{page-DF9q7ySu.js → page-BEAx6ZvH.js} +1 -1
  113. zenml/zen_server/dashboard/assets/{page-DDvwWgKP.js → page-BRfeowe0.js} +1 -1
  114. zenml/zen_server/dashboard/assets/{page-BJ15SGwt.js → page-BbRtQC2E.js} +1 -1
  115. zenml/zen_server/dashboard/assets/{page-D2F0Rvak.js → page-BgUR_5z3.js} +1 -1
  116. zenml/zen_server/dashboard/assets/{page-D0Zt2-7X.js → page-BiAjLLww.js} +1 -1
  117. zenml/zen_server/dashboard/assets/{page-B80TE04v.js → page-BkPPfNfG.js} +1 -1
  118. zenml/zen_server/dashboard/assets/{page-DkJfgcDi.js → page-BmTf1Lf1.js} +2 -2
  119. zenml/zen_server/dashboard/assets/{page-CAKBSE9f.js → page-BuZC8z6N.js} +1 -1
  120. zenml/zen_server/dashboard/assets/{page-BwAFqFCf.js → page-C4zMMcaH.js} +1 -1
  121. zenml/zen_server/dashboard/assets/{page-BnUwQBeg.js → page-CKVbEdX2.js} +1 -1
  122. zenml/zen_server/dashboard/assets/{page-BXh1mF-D.js → page-CPRymOIS.js} +1 -1
  123. zenml/zen_server/dashboard/assets/{page-BMZaECzB.js → page-CaTJVICi.js} +1 -1
  124. zenml/zen_server/dashboard/assets/{page-NIWnUdVg.js → page-CmzmFF4S.js} +1 -1
  125. zenml/zen_server/dashboard/assets/{page-BIseZTJt.js → page-CwAbTnvK.js} +2 -2
  126. zenml/zen_server/dashboard/assets/{page-BeFiRx31.js → page-D-MjLTXS.js} +1 -1
  127. zenml/zen_server/dashboard/assets/{page-B1Un9vAU.js → page-D3m9-YWJ.js} +1 -1
  128. zenml/zen_server/dashboard/assets/{page-DhNnHHmX.js → page-DCpZju6a.js} +1 -1
  129. zenml/zen_server/dashboard/assets/page-DEUeF3mO.js +1 -0
  130. zenml/zen_server/dashboard/assets/{page-B150LbzG.js → page-DWOAh8Pp.js} +1 -1
  131. zenml/zen_server/dashboard/assets/{page-EhqRFAZc.js → page-DezabeEO.js} +1 -1
  132. zenml/zen_server/dashboard/assets/{page-BTvnIFGR.js → page-DivlNKt9.js} +1 -1
  133. zenml/zen_server/dashboard/assets/{page-BqQ6y8Hb.js → page-DmOcZO8U.js} +1 -1
  134. zenml/zen_server/dashboard/assets/page-DnY59jOg.js +1 -0
  135. zenml/zen_server/dashboard/assets/{page-DaHH2ZEF.js → page-Dv3qtvm8.js} +1 -1
  136. zenml/zen_server/dashboard/assets/page-P81CcE2L.js +1 -0
  137. zenml/zen_server/dashboard/assets/{page-Dd-0y3SU.js → page-a1c6o4vv.js} +1 -1
  138. zenml/zen_server/dashboard/assets/{page-BJrZsPSh.js → page-bS5tHLDW.js} +1 -1
  139. zenml/zen_server/dashboard/assets/{page-C11vPVkH.js → page-gRfUvR0E.js} +1 -1
  140. zenml/zen_server/dashboard/assets/{page-BZUxCBoD.js → page-hNHJPQtK.js} +1 -1
  141. zenml/zen_server/dashboard/assets/{page-kYlFrH53.js → page-ir7Scz2Y.js} +1 -1
  142. zenml/zen_server/dashboard/assets/{page-ygCPGHAV.js → page-mtwS5oci.js} +1 -1
  143. zenml/zen_server/dashboard/assets/{persist-DHGuHP2H.js → persist-BUqILw7G.js} +1 -1
  144. zenml/zen_server/dashboard/assets/{persist-C5RlwSq6.js → persist-BbdfLc0W.js} +1 -1
  145. zenml/zen_server/dashboard/assets/{plus-CoKtHiA9.js → plus-COjQg3AG.js} +1 -1
  146. zenml/zen_server/dashboard/assets/{react-error-boundary.esm-BkGIR1Du.js → react-error-boundary.esm-fyoUBS25.js} +1 -1
  147. zenml/zen_server/dashboard/assets/{refresh-CupyU1Vs.js → refresh-CM5T3QeU.js} +1 -1
  148. zenml/zen_server/dashboard/assets/{rocket-k68ONPDS.js → rocket-Cf-B-XOR.js} +1 -1
  149. zenml/zen_server/dashboard/assets/{service-Do7yitqe.js → service-CV2zjc-p.js} +1 -1
  150. zenml/zen_server/dashboard/assets/{sharedSchema-i_9Y4WcA.js → sharedSchema-DpGc9kQg.js} +1 -1
  151. zenml/zen_server/dashboard/assets/stack-detail-query-BpzLZjvw.js +1 -0
  152. zenml/zen_server/dashboard/assets/{terminal-square-URAPn9DB.js → terminal-square-DMtel8mb.js} +1 -1
  153. zenml/zen_server/dashboard/assets/{tick-circle-AaVBszPn.js → tick-circle-m94Aa6Zt.js} +1 -1
  154. zenml/zen_server/dashboard/assets/{trash-B_JgTgqd.js → trash-BWSZ7NRK.js} +1 -1
  155. zenml/zen_server/dashboard/assets/update-server-settings-mutation-Dv6qHtK9.js +1 -0
  156. zenml/zen_server/dashboard/assets/{zod-CRNUMWWg.js → zod-C0xYeTvL.js} +1 -1
  157. zenml/zen_server/dashboard/index.html +6 -6
  158. zenml/zen_server/template_execution/utils.py +53 -33
  159. zenml/zen_stores/migrations/versions/6611d4bcc95b_add_hidden_option_for_templates.py +47 -0
  160. zenml/zen_stores/schemas/run_template_schemas.py +7 -0
  161. {zenml_nightly-0.80.1.dev20250408.dist-info → zenml_nightly-0.80.1.dev20250409.dist-info}/METADATA +2 -2
  162. {zenml_nightly-0.80.1.dev20250408.dist-info → zenml_nightly-0.80.1.dev20250409.dist-info}/RECORD +165 -164
  163. zenml/zen_server/dashboard/assets/@radix-AvWw-1nd.js +0 -95
  164. zenml/zen_server/dashboard/assets/@reactflow-BHoFKFSZ.js +0 -17
  165. zenml/zen_server/dashboard/assets/@tanstack-CcI3lvwB.js +0 -22
  166. zenml/zen_server/dashboard/assets/Partials-TNaYjHsV.js +0 -1
  167. zenml/zen_server/dashboard/assets/ProBadge-BfPp-B97.js +0 -1
  168. zenml/zen_server/dashboard/assets/WizardFooter-BtL1Gi1k.js +0 -1
  169. zenml/zen_server/dashboard/assets/delete-run-Do3XyF4W.js +0 -1
  170. zenml/zen_server/dashboard/assets/index-eIIP-0dQ.js +0 -1
  171. zenml/zen_server/dashboard/assets/index.esm-cf-8NBxV.js +0 -1
  172. zenml/zen_server/dashboard/assets/page-B-uHUFcm.js +0 -1
  173. zenml/zen_server/dashboard/assets/page-B0Llmzo_.js +0 -1
  174. zenml/zen_server/dashboard/assets/page-BzlVs5tC.js +0 -1
  175. zenml/zen_server/dashboard/assets/page-CPe9nQSo.js +0 -1
  176. zenml/zen_server/dashboard/assets/stack-detail-query-omCumL7U.js +0 -1
  177. zenml/zen_server/dashboard/assets/update-server-settings-mutation-B4eE33z-.js +0 -1
  178. {zenml_nightly-0.80.1.dev20250408.dist-info → zenml_nightly-0.80.1.dev20250409.dist-info}/LICENSE +0 -0
  179. {zenml_nightly-0.80.1.dev20250408.dist-info → zenml_nightly-0.80.1.dev20250409.dist-info}/WHEEL +0 -0
  180. {zenml_nightly-0.80.1.dev20250408.dist-info → zenml_nightly-0.80.1.dev20250409.dist-info}/entry_points.txt +0 -0
@@ -20,6 +20,8 @@ from zenml.config.step_configurations import Step, StepConfiguration
20
20
  from zenml.constants import (
21
21
  ENV_ZENML_ACTIVE_PROJECT_ID,
22
22
  ENV_ZENML_ACTIVE_STACK_ID,
23
+ ENV_ZENML_RUNNER_IMAGE_DISABLE_UV,
24
+ handle_bool_env_var,
23
25
  )
24
26
  from zenml.enums import ExecutionStatus, StackComponentType, StoreType
25
27
  from zenml.logger import get_logger
@@ -148,35 +150,36 @@ def run_template(
148
150
  deployment_id=new_deployment.id
149
151
  )
150
152
 
151
- def _task() -> None:
152
- if build.python_version:
153
- version_info = version.parse(build.python_version)
154
- python_version = f"{version_info.major}.{version_info.minor}"
155
- else:
156
- python_version = (
157
- f"{sys.version_info.major}.{sys.version_info.minor}"
158
- )
153
+ if build.python_version:
154
+ version_info = version.parse(build.python_version)
155
+ python_version = f"{version_info.major}.{version_info.minor}"
156
+ else:
157
+ python_version = f"{sys.version_info.major}.{sys.version_info.minor}"
159
158
 
160
- (
161
- pypi_requirements,
162
- apt_packages,
163
- ) = requirements_utils.get_requirements_for_stack(
164
- stack=stack, python_version=python_version
165
- )
159
+ (
160
+ pypi_requirements,
161
+ apt_packages,
162
+ ) = requirements_utils.get_requirements_for_stack(
163
+ stack=stack, python_version=python_version
164
+ )
166
165
 
167
- dockerfile = generate_dockerfile(
168
- pypi_requirements=pypi_requirements,
169
- apt_packages=apt_packages,
170
- zenml_version=zenml_version,
171
- python_version=python_version,
172
- )
166
+ dockerfile = generate_dockerfile(
167
+ pypi_requirements=pypi_requirements,
168
+ apt_packages=apt_packages,
169
+ zenml_version=zenml_version,
170
+ python_version=python_version,
171
+ )
173
172
 
174
- # building a docker image with requirements and apt packages from the
175
- # stack only (no code). Ideally, only orchestrator requirements should
176
- # be added to the docker image, but we have to instantiate the entire
177
- # stack to get the orchestrator to run pipelines.
178
- image_hash = generate_image_hash(dockerfile=dockerfile)
173
+ # Building a docker image with requirements and apt packages from the
174
+ # stack only (no code). Ideally, only orchestrator requirements should
175
+ # be added to the docker image, but we have to instantiate the entire
176
+ # stack to get the orchestrator to run pipelines.
177
+ image_hash = generate_image_hash(dockerfile=dockerfile)
178
+ logger.info(
179
+ "Building runner image %s for dockerfile:\n%s", image_hash, dockerfile
180
+ )
179
181
 
182
+ def _task() -> None:
180
183
  runner_image = workload_manager().build_and_push_image(
181
184
  workload_id=new_deployment.id,
182
185
  dockerfile=dockerfile,
@@ -322,10 +325,19 @@ def generate_dockerfile(
322
325
  pypi_requirements_string = " ".join(
323
326
  [f"'{r}'" for r in pypi_requirements]
324
327
  )
325
- lines.append(
326
- f"RUN pip install --default-timeout=60 --no-cache-dir "
327
- f"{pypi_requirements_string}"
328
- )
328
+
329
+ if handle_bool_env_var(
330
+ ENV_ZENML_RUNNER_IMAGE_DISABLE_UV, default=False
331
+ ):
332
+ lines.append(
333
+ f"RUN pip install --default-timeout=60 --no-cache-dir "
334
+ f"{pypi_requirements_string}"
335
+ )
336
+ else:
337
+ lines.append("RUN pip install uv")
338
+ lines.append(
339
+ f"RUN uv pip install --no-cache-dir {pypi_requirements_string}"
340
+ )
329
341
 
330
342
  return "\n".join(lines)
331
343
 
@@ -343,7 +355,8 @@ def deployment_request_from_template(
343
355
  user_id: ID of the user that is trying to run the template.
344
356
 
345
357
  Raises:
346
- ValueError: If the run configuration is missing step parameters.
358
+ ValueError: If there are missing/extra step parameters in the run
359
+ configuration.
347
360
 
348
361
  Returns:
349
362
  The generated deployment request.
@@ -394,10 +407,17 @@ def deployment_request_from_template(
394
407
  step_config_dict, update=update_dict
395
408
  )
396
409
 
397
- if configured_parameters != required_parameters:
398
- missing_parameters = required_parameters - configured_parameters
410
+ unknown_parameters = configured_parameters - required_parameters
411
+ if unknown_parameters:
412
+ raise ValueError(
413
+ "Run configuration contains the following unknown "
414
+ f"parameters for step {step.config.name}: {unknown_parameters}."
415
+ )
416
+
417
+ missing_parameters = required_parameters - configured_parameters
418
+ if missing_parameters:
399
419
  raise ValueError(
400
- "Run configuration is missing missing the following required "
420
+ "Run configuration is missing the following required "
401
421
  f"parameters for step {step.config.name}: {missing_parameters}."
402
422
  )
403
423
 
@@ -0,0 +1,47 @@
1
+ """Add hidden option for templates [6611d4bcc95b].
2
+
3
+ Revision ID: 6611d4bcc95b
4
+ Revises: 0.80.1
5
+ Create Date: 2025-04-07 10:29:26.130057
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+
12
+ # revision identifiers, used by Alembic.
13
+ revision = "6611d4bcc95b"
14
+ down_revision = "0.80.1"
15
+ branch_labels = None
16
+ depends_on = None
17
+
18
+
19
+ def upgrade() -> None:
20
+ """Upgrade database schema and/or data, creating a new revision."""
21
+ # ### commands auto generated by Alembic - please adjust! ###
22
+ with op.batch_alter_table("run_template", schema=None) as batch_op:
23
+ batch_op.add_column(sa.Column("hidden", sa.Boolean(), nullable=True))
24
+
25
+ op.execute(
26
+ """
27
+ UPDATE `run_template`
28
+ SET hidden = 0
29
+ """
30
+ )
31
+
32
+ with op.batch_alter_table("run_template", schema=None) as batch_op:
33
+ batch_op.alter_column(
34
+ "hidden",
35
+ existing_type=sa.Boolean(),
36
+ nullable=False,
37
+ )
38
+ # ### end Alembic commands ###
39
+
40
+
41
+ def downgrade() -> None:
42
+ """Downgrade database schema and/or data back to the previous revision."""
43
+ # ### commands auto generated by Alembic - please adjust! ###
44
+ with op.batch_alter_table("run_template", schema=None) as batch_op:
45
+ batch_op.drop_column("hidden")
46
+
47
+ # ### end Alembic commands ###
@@ -57,6 +57,11 @@ class RunTemplateSchema(NamedSchema, table=True):
57
57
  ),
58
58
  )
59
59
 
60
+ hidden: bool = Field(
61
+ default=False,
62
+ title="Whether the run template is hidden.",
63
+ )
64
+
60
65
  description: Optional[str] = Field(
61
66
  sa_column=Column(
62
67
  String(length=MEDIUMTEXT_MAX_LENGTH).with_variant(
@@ -166,6 +171,7 @@ class RunTemplateSchema(NamedSchema, table=True):
166
171
  project_id=request.project,
167
172
  name=request.name,
168
173
  description=request.description,
174
+ hidden=request.hidden,
169
175
  source_deployment_id=request.source_deployment_id,
170
176
  )
171
177
 
@@ -221,6 +227,7 @@ class RunTemplateSchema(NamedSchema, table=True):
221
227
  created=self.created,
222
228
  updated=self.updated,
223
229
  runnable=runnable,
230
+ hidden=self.hidden,
224
231
  latest_run_id=latest_run.id if latest_run else None,
225
232
  latest_run_status=latest_run.status if latest_run else None,
226
233
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: zenml-nightly
3
- Version: 0.80.1.dev20250408
3
+ Version: 0.80.1.dev20250409
4
4
  Summary: ZenML: Write production-ready ML code.
5
5
  License: Apache-2.0
6
6
  Keywords: machine learning,production,pipeline,mlops,devops
@@ -89,7 +89,7 @@ Requires-Dist: orjson (>=3.10.0,<3.11.0) ; extra == "server"
89
89
  Requires-Dist: packaging (>=24.1)
90
90
  Requires-Dist: passlib[bcrypt] (>=1.7.4,<1.8.0)
91
91
  Requires-Dist: psutil (>=5.0.0)
92
- Requires-Dist: pydantic (>=2.8,<2.9)
92
+ Requires-Dist: pydantic (>=2.0,<2.11.2)
93
93
  Requires-Dist: pydantic-settings
94
94
  Requires-Dist: pyjwt[crypto] (==2.7.*) ; extra == "server"
95
95
  Requires-Dist: pyment (>=0.3.3,<0.4.0) ; extra == "dev"