zenml-nightly 0.66.0.dev20240930__py3-none-any.whl → 0.68.0.dev20241026__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 (531) hide show
  1. README.md +2 -2
  2. RELEASE_NOTES.md +227 -0
  3. zenml/VERSION +1 -1
  4. zenml/__init__.py +4 -9
  5. zenml/analytics/enums.py +0 -13
  6. zenml/artifact_stores/base_artifact_store.py +11 -0
  7. zenml/artifacts/artifact_config.py +19 -65
  8. zenml/artifacts/external_artifact.py +7 -53
  9. zenml/artifacts/external_artifact_config.py +21 -40
  10. zenml/artifacts/load_directory_materializer.py +91 -0
  11. zenml/artifacts/utils.py +320 -85
  12. zenml/cli/__init__.py +1 -39
  13. zenml/cli/base.py +5 -5
  14. zenml/cli/integration.py +0 -9
  15. zenml/cli/pipeline.py +1 -1
  16. zenml/cli/served_model.py +8 -1
  17. zenml/cli/server.py +8 -232
  18. zenml/cli/stack.py +1 -567
  19. zenml/cli/stack_components.py +0 -578
  20. zenml/cli/utils.py +0 -65
  21. zenml/client.py +11 -26
  22. zenml/client_lazy_loader.py +29 -12
  23. zenml/config/compiler.py +6 -11
  24. zenml/config/server_config.py +7 -5
  25. zenml/config/step_configurations.py +2 -0
  26. zenml/constants.py +3 -33
  27. zenml/enums.py +0 -3
  28. zenml/environment.py +1 -315
  29. zenml/exceptions.py +1 -41
  30. zenml/hooks/hook_validators.py +1 -8
  31. zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +2 -3
  32. zenml/integrations/argilla/__init__.py +1 -1
  33. zenml/integrations/argilla/annotators/argilla_annotator.py +234 -89
  34. zenml/integrations/argilla/flavors/argilla_annotator_flavor.py +10 -5
  35. zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py +9 -5
  36. zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +15 -2
  37. zenml/integrations/aws/service_connectors/aws_service_connector.py +6 -0
  38. zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +5 -4
  39. zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
  40. zenml/integrations/bentoml/model_deployers/bentoml_model_deployer.py +85 -19
  41. zenml/integrations/bentoml/services/__init__.py +15 -4
  42. zenml/integrations/bentoml/services/bentoml_container_deployment.py +399 -0
  43. zenml/integrations/bentoml/services/{bentoml_deployment.py → bentoml_local_deployment.py} +81 -40
  44. zenml/{steps/base_parameters.py → integrations/bentoml/services/deployment_type.py} +8 -5
  45. zenml/integrations/bentoml/steps/bento_builder.py +1 -0
  46. zenml/integrations/bentoml/steps/bentoml_deployer.py +93 -41
  47. zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py +6 -1
  48. zenml/integrations/huggingface/__init__.py +1 -6
  49. zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +3 -3
  50. zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +3 -3
  51. zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +2 -2
  52. zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +6 -3
  53. zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +6 -0
  54. zenml/integrations/mlflow/services/mlflow_deployment.py +2 -2
  55. zenml/integrations/mlflow/steps/mlflow_deployer.py +1 -1
  56. zenml/integrations/mlflow/steps/mlflow_registry.py +1 -1
  57. zenml/integrations/neptune/experiment_trackers/run_state.py +2 -2
  58. zenml/integrations/pytorch/materializers/base_pytorch_materializer.py +8 -2
  59. zenml/integrations/pytorch/materializers/pytorch_module_materializer.py +4 -1
  60. zenml/integrations/s3/artifact_stores/s3_artifact_store.py +98 -0
  61. zenml/integrations/s3/flavors/s3_artifact_store_flavor.py +14 -0
  62. zenml/integrations/s3/utils.py +40 -0
  63. zenml/integrations/tensorflow/__init__.py +0 -9
  64. zenml/logging/step_logging.py +13 -15
  65. zenml/materializers/__init__.py +2 -0
  66. zenml/materializers/uuid_materializer.py +79 -0
  67. zenml/metadata/lazy_load.py +10 -7
  68. zenml/model/lazy_load.py +85 -4
  69. zenml/model/model.py +61 -45
  70. zenml/model/utils.py +47 -118
  71. zenml/models/__init__.py +3 -0
  72. zenml/models/v2/core/artifact_version.py +4 -15
  73. zenml/models/v2/core/model.py +1 -0
  74. zenml/models/v2/core/model_version.py +1 -1
  75. zenml/models/v2/core/pipeline_run.py +1 -2
  76. zenml/models/v2/core/run_metadata.py +2 -2
  77. zenml/models/v2/core/step_run.py +15 -12
  78. zenml/models/v2/misc/server_models.py +0 -4
  79. zenml/orchestrators/base_orchestrator.py +33 -0
  80. zenml/orchestrators/input_utils.py +52 -36
  81. zenml/orchestrators/step_launcher.py +49 -171
  82. zenml/orchestrators/step_run_utils.py +566 -0
  83. zenml/orchestrators/step_runner.py +102 -151
  84. zenml/orchestrators/utils.py +1 -158
  85. zenml/pipelines/__init__.py +3 -16
  86. zenml/{new/pipelines → pipelines}/pipeline_context.py +3 -18
  87. zenml/pipelines/pipeline_decorator.py +29 -60
  88. zenml/{new/pipelines/pipeline.py → pipelines/pipeline_definition.py} +4 -47
  89. zenml/stack/stack.py +1 -102
  90. zenml/stack/stack_component.py +0 -71
  91. zenml/stack_deployments/aws_stack_deployment.py +3 -0
  92. zenml/step_operators/step_operator_entrypoint_configuration.py +1 -1
  93. zenml/steps/__init__.py +3 -9
  94. zenml/steps/base_step.py +17 -265
  95. zenml/steps/entrypoint_function_utils.py +2 -80
  96. zenml/{new/steps → steps}/step_context.py +12 -63
  97. zenml/steps/step_decorator.py +42 -89
  98. zenml/steps/step_invocation.py +2 -55
  99. zenml/steps/utils.py +3 -23
  100. zenml/utils/dashboard_utils.py +16 -51
  101. zenml/utils/typing_utils.py +8 -28
  102. zenml/zen_server/dashboard/assets/{404-Y50hSt65.js → 404-DT4QRUqN.js} +1 -1
  103. zenml/zen_server/dashboard/assets/@radix-DP6vWzyx.js +85 -0
  104. zenml/zen_server/dashboard/assets/@react-router-BMhZulnd.js +29 -0
  105. zenml/zen_server/dashboard/assets/@reactflow-8U9qNlMR.js +17 -0
  106. zenml/zen_server/dashboard/assets/@tanstack-BUCbhJyH.js +22 -0
  107. zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-xLR9a1iw.js → AlertDialogDropdownItem-C6N2rGrB.js} +1 -1
  108. zenml/zen_server/dashboard/assets/{CodeSnippet-IxXNxUDa.js → CodeSnippet-CqybNv0k.js} +1 -1
  109. zenml/zen_server/dashboard/assets/{CollapsibleCard-BhutZbBL.js → CollapsibleCard-0r_8G2Lj.js} +1 -1
  110. zenml/zen_server/dashboard/assets/{Commands-Bf-rd1z8.js → Commands-BDjgBQKi.js} +1 -1
  111. zenml/zen_server/dashboard/assets/ComponentBadge-DUiEYJHu.js +1 -0
  112. zenml/zen_server/dashboard/assets/ComponentFallbackDialog-BFoH5K4V.js +1 -0
  113. zenml/zen_server/dashboard/assets/ComponentIcon-CAIoUis2.js +1 -0
  114. zenml/zen_server/dashboard/assets/{CopyButton-DcFHidFJ.js → CopyButton-C745BrKi.js} +1 -1
  115. zenml/zen_server/dashboard/assets/{CsvVizualization-QSbjrfxw.js → CsvVizualization-PpAq0CeZ.js} +5 -5
  116. zenml/zen_server/dashboard/assets/{DialogItem-Cd3HqST4.js → DialogItem-DcVCZEew.js} +1 -1
  117. zenml/zen_server/dashboard/assets/{DisplayDate-DkCy54Bp.js → DisplayDate-BeXgUG_C.js} +1 -1
  118. zenml/zen_server/dashboard/assets/{EmptyState-Cs3DEmso.js → EmptyState-DeK7H4pr.js} +1 -1
  119. zenml/zen_server/dashboard/assets/{Error-BhwdmqK7.js → Error-BMlzibXj.js} +1 -1
  120. zenml/zen_server/dashboard/assets/{Helpbox-0pBpTwTm.js → Helpbox-BLf40fLV.js} +1 -1
  121. zenml/zen_server/dashboard/assets/{Infobox-BTK_EUKT.js → Infobox-BwisKifi.js} +1 -1
  122. zenml/zen_server/dashboard/assets/{InlineAvatar-CA3DFMcM.js → InlineAvatar-jEgodSgX.js} +1 -1
  123. zenml/zen_server/dashboard/assets/{Lock-CmIn0szs.js → Lock-3lLt1ih0.js} +1 -1
  124. zenml/zen_server/dashboard/assets/MarkdownVisualization-8O9kTr-2.js +14 -0
  125. zenml/zen_server/dashboard/assets/{NumberBox-CrN0_kqI.js → NumberBox-T9eELfLZ.js} +1 -1
  126. zenml/zen_server/dashboard/assets/{Partials-QLOZw624.js → Partials-YPBB3V4q.js} +1 -1
  127. zenml/zen_server/dashboard/assets/{PasswordChecker-DE71J_3F.js → PasswordChecker-CW0kqY0W.js} +1 -1
  128. zenml/zen_server/dashboard/assets/{ProviderIcon-C16CCIN4.js → ProviderIcon-Bb3Xha5A.js} +1 -1
  129. zenml/zen_server/dashboard/assets/{ProviderRadio-D3FuCHf3.js → ProviderRadio-BROY1700.js} +1 -1
  130. zenml/zen_server/dashboard/assets/RunSelector-DCiL3M1c.js +1 -0
  131. zenml/zen_server/dashboard/assets/SearchField-DfUiGFVd.js +1 -0
  132. zenml/zen_server/dashboard/assets/{SecretTooltip-BaMwHF-Q.js → SecretTooltip-C_qByGWB.js} +1 -1
  133. zenml/zen_server/dashboard/assets/{SetPassword-DuIC65H9.js → SetPassword-7pRB00El.js} +1 -1
  134. zenml/zen_server/dashboard/assets/{Tick-DJTCF0Re.js → Tick-CykQFPj2.js} +1 -1
  135. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-CUm-DMpw.js → UpdatePasswordSchemas-DckMEkFf.js} +1 -1
  136. zenml/zen_server/dashboard/assets/{UsageReason-CKw0juLF.js → UsageReason-DVceN14P.js} +1 -1
  137. zenml/zen_server/dashboard/assets/{WizardFooter-Cv9ApYWU.js → WizardFooter-CW0Cvd70.js} +1 -1
  138. zenml/zen_server/dashboard/assets/{check-circle-DOoS4yhF.js → check-circle-Dwxliy1Z.js} +1 -1
  139. zenml/zen_server/dashboard/assets/{chevron-down-Cwb-W_B_.js → chevron-down-8wLBS5pQ.js} +1 -1
  140. zenml/zen_server/dashboard/assets/{chevron-right-double-c9H46Kl8.js → chevron-right-double-DoD8iXWM.js} +1 -1
  141. zenml/zen_server/dashboard/assets/{cloud-only-BB4BVa6E.js → cloud-only-B-s_HMDm.js} +1 -1
  142. zenml/zen_server/dashboard/assets/{code-browser-BJYErIjr.js → code-browser-CZUQs3Wa.js} +1 -1
  143. zenml/zen_server/dashboard/assets/{copy-CaGlDsUy.js → copy-CaSMXwiU.js} +1 -1
  144. zenml/zen_server/dashboard/assets/{create-stack-F29xAUEx.js → create-stack-CEmaPZ4c.js} +1 -1
  145. zenml/zen_server/dashboard/assets/delete-run-D-LKbGyz.js +1 -0
  146. zenml/zen_server/dashboard/assets/{docker-BFAFXr2_.js → docker-BFNgg-z3.js} +1 -1
  147. zenml/zen_server/dashboard/assets/{dots-horizontal-C6K59vUm.js → dots-horizontal-DK5Duzx4.js} +1 -1
  148. zenml/zen_server/dashboard/assets/{form-schemas-BKXwSDK2.js → form-schemas-1AyOCx90.js} +1 -1
  149. zenml/zen_server/dashboard/assets/{gcp-Dj6ntk0L.js → gcp-7M2Yf3ZK.js} +1 -1
  150. zenml/zen_server/dashboard/assets/{help-CwN931fX.js → help-Dam461dC.js} +1 -1
  151. zenml/zen_server/dashboard/assets/{index-5GJ5ysEZ.js → index-BVJ8n2-j.js} +1 -1
  152. zenml/zen_server/dashboard/assets/index-Bpmj40BI.js +1 -0
  153. zenml/zen_server/dashboard/assets/index-CbU4Ln_E.css +1 -0
  154. zenml/zen_server/dashboard/assets/{index-D-mtoBj3.js → index-DKPhqP2B.js} +1 -1
  155. zenml/zen_server/dashboard/assets/index-QQb7wQEC.js +55 -0
  156. zenml/zen_server/dashboard/assets/index.esm-cuVep_NJ.js +1 -0
  157. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-BLGc9T1a.woff2 +0 -0
  158. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-ZzOtrSSW.woff +0 -0
  159. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-D4Vwzodn.woff2 +0 -0
  160. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DH2hs3aW.woff +0 -0
  161. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BGBWG807.woff2 +0 -0
  162. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BuzJQFbW.woff +0 -0
  163. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-BPnxn4xp.woff +0 -0
  164. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-Dc4VJyIJ.woff2 +0 -0
  165. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-BShVwWPj.woff2 +0 -0
  166. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-CUiC4oBV.woff +0 -0
  167. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-Bt9VVOA-.woff +0 -0
  168. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-CaqZN2hq.woff2 +0 -0
  169. zenml/zen_server/dashboard/assets/inter-greek-400-normal-BZzXV7-1.woff +0 -0
  170. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DxZsaF_h.woff2 +0 -0
  171. zenml/zen_server/dashboard/assets/inter-greek-500-normal-CeQXL5ds.woff2 +0 -0
  172. zenml/zen_server/dashboard/assets/inter-greek-500-normal-d_eO-yCQ.woff +0 -0
  173. zenml/zen_server/dashboard/assets/inter-greek-600-normal-CwicyhtI.woff +0 -0
  174. zenml/zen_server/dashboard/assets/inter-greek-600-normal-Dhlb-90d.woff2 +0 -0
  175. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-Bput3-QP.woff2 +0 -0
  176. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-DCpCPQOf.woff +0 -0
  177. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-B6guLgqG.woff2 +0 -0
  178. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-M2hEX8vc.woff +0 -0
  179. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-C9WLioJ8.woff +0 -0
  180. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-Cnui8OiR.woff2 +0 -0
  181. zenml/zen_server/dashboard/assets/inter-latin-400-normal-BOOGhInR.woff2 +0 -0
  182. zenml/zen_server/dashboard/assets/inter-latin-400-normal-gitzw0hO.woff +0 -0
  183. zenml/zen_server/dashboard/assets/inter-latin-500-normal-D2bGa7uu.woff2 +0 -0
  184. zenml/zen_server/dashboard/assets/inter-latin-500-normal-deR1Tlfd.woff +0 -0
  185. zenml/zen_server/dashboard/assets/inter-latin-600-normal-B5cFAncS.woff +0 -0
  186. zenml/zen_server/dashboard/assets/inter-latin-600-normal-D273HNI0.woff2 +0 -0
  187. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-C1t-h-pH.woff +0 -0
  188. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-hnt3BR84.woff2 +0 -0
  189. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2 +0 -0
  190. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-UMdmhHu2.woff +0 -0
  191. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-BnYJhD27.woff2 +0 -0
  192. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-CAF0vJDd.woff +0 -0
  193. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-BUNmGMP1.woff +0 -0
  194. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
  195. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
  196. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DQPw2Hwd.woff +0 -0
  197. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
  198. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cm6aH8_k.woff +0 -0
  199. zenml/zen_server/dashboard/assets/{kubernetes-BjbR6D-1.js → kubernetes--g7r02Zu.js} +1 -1
  200. zenml/zen_server/dashboard/assets/{layout-Dru15_XR.js → layout-DCSYN7-C.js} +1 -1
  201. zenml/zen_server/dashboard/assets/{link-external-BT2L8hAQ.js → link-external-CBEk6kEG.js} +1 -1
  202. zenml/zen_server/dashboard/assets/{login-mutation-ax6iL2Mb.js → login-mutation-DTcAFP1l.js} +1 -1
  203. zenml/zen_server/dashboard/assets/{logs-GiDJXbLS.js → logs-D5bdJGur.js} +1 -1
  204. zenml/zen_server/dashboard/assets/not-found-Cc-JkRH2.js +1 -0
  205. zenml/zen_server/dashboard/assets/{package-DYKZ5jKW.js → package-Cs35Szwh.js} +1 -1
  206. zenml/zen_server/dashboard/assets/{page-HkVBdZl6.js → page-9yplj5JT.js} +1 -1
  207. zenml/zen_server/dashboard/assets/{page-uORspyRu.js → page-B-y2XKIc.js} +1 -1
  208. zenml/zen_server/dashboard/assets/page-BBpOxVcY.js +1 -0
  209. zenml/zen_server/dashboard/assets/{page-BDg1F-Ug.js → page-BQQKaabe.js} +2 -2
  210. zenml/zen_server/dashboard/assets/page-BRInM1Lg.js +1 -0
  211. zenml/zen_server/dashboard/assets/{page-CvKnNK1S.js → page-BjjlMk7s.js} +1 -1
  212. zenml/zen_server/dashboard/assets/{page-BukXK1Aa.js → page-Bvd7YH2A.js} +1 -1
  213. zenml/zen_server/dashboard/assets/{page-DcTjHmYZ.js → page-C0N5q3l7.js} +1 -1
  214. zenml/zen_server/dashboard/assets/page-CT3Nep8W.js +1 -0
  215. zenml/zen_server/dashboard/assets/{page-DuqYMYmH.js → page-C_f47pBf.js} +1 -1
  216. zenml/zen_server/dashboard/assets/{page-DRfcRK1w.js → page-ClUVkl-O.js} +1 -1
  217. zenml/zen_server/dashboard/assets/page-Cmv8C_yM.js +3 -0
  218. zenml/zen_server/dashboard/assets/{page-p0BhSAWx.js → page-CyN2bdWG.js} +1 -1
  219. zenml/zen_server/dashboard/assets/page-CzzXH4fs.js +1 -0
  220. zenml/zen_server/dashboard/assets/{page-6mfzecin.js → page-DH_Z7iW1.js} +1 -1
  221. zenml/zen_server/dashboard/assets/{page-8kYmrh0B.js → page-DIOXwhiD.js} +1 -1
  222. zenml/zen_server/dashboard/assets/{page-BXarY9K2.js → page-DLixvR-7.js} +1 -1
  223. zenml/zen_server/dashboard/assets/page-DTlGjgnG.js +1 -0
  224. zenml/zen_server/dashboard/assets/page-Dbpl86h0.js +1 -0
  225. zenml/zen_server/dashboard/assets/{page-MAXyfXBq.js → page-Ddgy6kDS.js} +1 -1
  226. zenml/zen_server/dashboard/assets/page-DtCAfBLy.js +9 -0
  227. zenml/zen_server/dashboard/assets/{page-CKHNAq7z.js → page-Dx16z7nA.js} +1 -1
  228. zenml/zen_server/dashboard/assets/{page-DMSLXKGT.js → page-DzpVUZ8f.js} +1 -1
  229. zenml/zen_server/dashboard/assets/page-McUyYbo1.js +1 -0
  230. zenml/zen_server/dashboard/assets/{page-miU2rhYG.js → page-N4qoPHKb.js} +1 -1
  231. zenml/zen_server/dashboard/assets/page-T1P3RyAR.js +1 -0
  232. zenml/zen_server/dashboard/assets/{page-3qPX9WYH.js → page-bKaULTGG.js} +1 -1
  233. zenml/zen_server/dashboard/assets/page-sbXUJy9t.js +1 -0
  234. zenml/zen_server/dashboard/assets/{persist-CfJMar_k.js → persist-CP0JmYZ4.js} +1 -1
  235. zenml/zen_server/dashboard/assets/{persist-BxIR2XZs.js → persist-DNb5cdrU.js} +1 -1
  236. zenml/zen_server/dashboard/assets/{plus-Bc8eLSDM.js → plus-C9IxgN2M.js} +1 -1
  237. zenml/zen_server/dashboard/assets/{refresh-hfgWPeto.js → refresh-BVu22P_C.js} +1 -1
  238. zenml/zen_server/dashboard/assets/{rocket-SESCGQXm.js → rocket-CONEmRmB.js} +1 -1
  239. zenml/zen_server/dashboard/assets/{sharedSchema-vub0rii3.js → sharedSchema-TMLu-nYQ.js} +1 -1
  240. zenml/zen_server/dashboard/assets/stack-detail-query-xmYxSsUY.js +1 -0
  241. zenml/zen_server/dashboard/assets/{tick-circle-m-hJG8i9.js → tick-circle-CM1ZScbQ.js} +1 -1
  242. zenml/zen_server/dashboard/assets/{trash-DUWZWzse.js → trash-DkJHMOg7.js} +1 -1
  243. zenml/zen_server/dashboard/assets/{update-server-settings-mutation-FGVP7X2U.js → update-server-settings-mutation-DsU8cNVl.js} +1 -1
  244. zenml/zen_server/dashboard/assets/{url-CbAPzsmT.js → url-D5le3J4q.js} +1 -1
  245. zenml/zen_server/dashboard/assets/zod-D89GC_vc.js +1 -0
  246. zenml/zen_server/dashboard/index.html +7 -7
  247. zenml/zen_server/deploy/__init__.py +0 -9
  248. zenml/zen_server/deploy/docker/docker_zen_server.py +0 -6
  249. zenml/zen_server/deploy/helm/Chart.yaml +1 -1
  250. zenml/zen_server/deploy/helm/README.md +2 -2
  251. zenml/zen_server/deploy/local/local_zen_server.py +0 -6
  252. zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +1 -1
  253. zenml/zen_server/routers/artifact_version_endpoints.py +1 -1
  254. zenml/zen_server/routers/runs_endpoints.py +0 -28
  255. zenml/zen_server/template_execution/runner_entrypoint_configuration.py +1 -1
  256. zenml/zen_server/template_execution/utils.py +2 -2
  257. zenml/zen_server/utils.py +10 -40
  258. zenml/zen_server/zen_server_api.py +107 -17
  259. zenml/zen_stores/base_zen_store.py +0 -2
  260. zenml/zen_stores/migrations/versions/0.67.0_release.py +23 -0
  261. zenml/zen_stores/migrations/versions/0.68.0_release.py +23 -0
  262. zenml/zen_stores/migrations/versions/1d8f30c54477_migrate_to_new_.py +124 -0
  263. zenml/zen_stores/schemas/pipeline_run_schemas.py +12 -4
  264. zenml/zen_stores/schemas/step_run_schemas.py +2 -2
  265. zenml/zen_stores/sql_zen_store.py +29 -5
  266. {zenml_nightly-0.66.0.dev20240930.dist-info → zenml_nightly-0.68.0.dev20241026.dist-info}/METADATA +4 -8
  267. {zenml_nightly-0.66.0.dev20240930.dist-info → zenml_nightly-0.68.0.dev20241026.dist-info}/RECORD +273 -452
  268. {zenml_nightly-0.66.0.dev20240930.dist-info → zenml_nightly-0.68.0.dev20241026.dist-info}/WHEEL +1 -1
  269. zenml/cli/stack_recipes.py +0 -469
  270. zenml/lineage_graph/__init__.py +0 -34
  271. zenml/lineage_graph/edge.py +0 -24
  272. zenml/lineage_graph/lineage_graph.py +0 -244
  273. zenml/lineage_graph/node/__init__.py +0 -32
  274. zenml/lineage_graph/node/artifact_node.py +0 -51
  275. zenml/lineage_graph/node/base_node.py +0 -31
  276. zenml/lineage_graph/node/step_node.py +0 -41
  277. zenml/model/model_version.py +0 -38
  278. zenml/new/__init__.py +0 -13
  279. zenml/new/pipelines/__init__.py +0 -13
  280. zenml/new/pipelines/code_archive.py +0 -157
  281. zenml/new/pipelines/pipeline_decorator.py +0 -118
  282. zenml/new/steps/__init__.py +0 -13
  283. zenml/new/steps/step_decorator.py +0 -176
  284. zenml/pipelines/base_pipeline.py +0 -273
  285. zenml/post_execution/__init__.py +0 -30
  286. zenml/post_execution/pipeline.py +0 -55
  287. zenml/post_execution/pipeline_run.py +0 -55
  288. zenml/services/terraform/__init__.py +0 -14
  289. zenml/services/terraform/terraform_service.py +0 -441
  290. zenml/steps/external_artifact.py +0 -26
  291. zenml/steps/step_environment.py +0 -108
  292. zenml/steps/step_output.py +0 -36
  293. zenml/utils/mlstacks_utils.py +0 -635
  294. zenml/utils/terraform_utils.py +0 -43
  295. zenml/zen_server/dashboard/assets/@radix-DnFH_oo1.js +0 -85
  296. zenml/zen_server/dashboard/assets/@react-router-APVeuk-U.js +0 -29
  297. zenml/zen_server/dashboard/assets/@reactflow-ytavUpwh.js +0 -17
  298. zenml/zen_server/dashboard/assets/@tanstack-QbMbTrh5.js +0 -22
  299. zenml/zen_server/dashboard/assets/ComponentBadge-gKR1OIwG.js +0 -1
  300. zenml/zen_server/dashboard/assets/ExecutionStatus-D6r6aK8J.js +0 -1
  301. zenml/zen_server/dashboard/assets/MarkdownVisualization-DS05sfBm.js +0 -14
  302. zenml/zen_server/dashboard/assets/SearchField-BzmfxS0L.js +0 -1
  303. zenml/zen_server/dashboard/assets/all-pipeline-runs-query-BA3R2Sey.js +0 -1
  304. zenml/zen_server/dashboard/assets/delete-run-CP0pcJ3U.js +0 -1
  305. zenml/zen_server/dashboard/assets/index-BhJ6ZJxv.css +0 -1
  306. zenml/zen_server/dashboard/assets/index-Ci0nJ8EZ.js +0 -55
  307. zenml/zen_server/dashboard/assets/index.esm-BE1uqCX5.js +0 -1
  308. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-Df6ckaLK.woff2 +0 -0
  309. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-JrS_4yms.woff +0 -0
  310. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-BRrLR67x.woff2 +0 -0
  311. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DskEQOpE.woff +0 -0
  312. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-DDpWG8g5.woff2 +0 -0
  313. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-iz1--dBq.woff +0 -0
  314. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-CzG7Kr3z.woff +0 -0
  315. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-tyfMZHQw.woff2 +0 -0
  316. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-DOnSzjnx.woff2 +0 -0
  317. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-Xebo2OyJ.woff +0 -0
  318. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-DpA2xaRd.woff2 +0 -0
  319. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-KAwcVx6H.woff +0 -0
  320. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DQXyrmoy.woff2 +0 -0
  321. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DvIPHDQ7.woff +0 -0
  322. zenml/zen_server/dashboard/assets/inter-greek-500-normal-BjpBGs91.woff +0 -0
  323. zenml/zen_server/dashboard/assets/inter-greek-500-normal-CmOavsDc.woff2 +0 -0
  324. zenml/zen_server/dashboard/assets/inter-greek-600-normal-B-l8Lzzd.woff2 +0 -0
  325. zenml/zen_server/dashboard/assets/inter-greek-600-normal-BLZsI-P3.woff +0 -0
  326. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-CIdlr5YK.woff2 +0 -0
  327. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-_Rr29XE2.woff +0 -0
  328. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-2pdUafRD.woff2 +0 -0
  329. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-Dtavx3qw.woff +0 -0
  330. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-BmtRFZgT.woff +0 -0
  331. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-CkBLDEl_.woff2 +0 -0
  332. zenml/zen_server/dashboard/assets/inter-latin-400-normal-BT1H-PT_.woff2 +0 -0
  333. zenml/zen_server/dashboard/assets/inter-latin-400-normal-Cdi8t5Mu.woff +0 -0
  334. zenml/zen_server/dashboard/assets/inter-latin-500-normal-D4I8BKCx.woff +0 -0
  335. zenml/zen_server/dashboard/assets/inter-latin-500-normal-kWhwEdDH.woff2 +0 -0
  336. zenml/zen_server/dashboard/assets/inter-latin-600-normal-B2Ssfs8e.woff2 +0 -0
  337. zenml/zen_server/dashboard/assets/inter-latin-600-normal-Dbvh0wvx.woff +0 -0
  338. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-8tIzm-yw.woff +0 -0
  339. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-D3W-OpO-.woff2 +0 -0
  340. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-B9u8Q_zH.woff2 +0 -0
  341. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-SuUkSNTU.woff +0 -0
  342. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-Dg0Bk0Yr.woff +0 -0
  343. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-ao35dkSb.woff2 +0 -0
  344. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-Cnt0N5Vm.woff2 +0 -0
  345. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DIOGfGLL.woff +0 -0
  346. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-0i6yoQMg.woff +0 -0
  347. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-5IkPJ6Nk.woff2 +0 -0
  348. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-BQ_dbMbg.woff +0 -0
  349. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-DjnxGF-L.woff2 +0 -0
  350. zenml/zen_server/dashboard/assets/not-found-DbjllLY_.js +0 -1
  351. zenml/zen_server/dashboard/assets/page-B1n7_W7z.js +0 -1
  352. zenml/zen_server/dashboard/assets/page-BZZhLo2u.js +0 -1
  353. zenml/zen_server/dashboard/assets/page-Bbf_oBjn.js +0 -1
  354. zenml/zen_server/dashboard/assets/page-BjjuBvZG.js +0 -9
  355. zenml/zen_server/dashboard/assets/page-CHaQkFK5.js +0 -1
  356. zenml/zen_server/dashboard/assets/page-CS0SYFK8.js +0 -1
  357. zenml/zen_server/dashboard/assets/page-DGM1CbYT.js +0 -2
  358. zenml/zen_server/dashboard/assets/page-DOmIZ2ra.js +0 -1
  359. zenml/zen_server/dashboard/assets/page-DYVmJ9_w.js +0 -3
  360. zenml/zen_server/dashboard/assets/page-Dwow2doB.js +0 -1
  361. zenml/zen_server/dashboard/assets/stack-detail-query-DQcyzG-2.js +0 -1
  362. zenml/zen_server/dashboard/assets/zod-uFd1wBcd.js +0 -1
  363. zenml/zen_server/dashboard_legacy/_redirects +0 -1
  364. zenml/zen_server/dashboard_legacy/asset-manifest.json +0 -131
  365. zenml/zen_server/dashboard_legacy/favicon.ico +0 -0
  366. zenml/zen_server/dashboard_legacy/index.html +0 -1
  367. zenml/zen_server/dashboard_legacy/manifest.json +0 -25
  368. zenml/zen_server/dashboard_legacy/precache-manifest.6d320abb70db612019dda6c4948e7a90.js +0 -462
  369. zenml/zen_server/dashboard_legacy/robots.txt +0 -2
  370. zenml/zen_server/dashboard_legacy/service-worker.js +0 -39
  371. zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css +0 -16
  372. zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css.map +0 -1
  373. zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css +0 -2
  374. zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css.map +0 -1
  375. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js +0 -3
  376. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.LICENSE.txt +0 -95
  377. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.map +0 -1
  378. zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js +0 -2
  379. zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js.map +0 -1
  380. zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js +0 -2
  381. zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js.map +0 -1
  382. zenml/zen_server/dashboard_legacy/static/media/AlertTriangle.28aee535.svg +0 -5
  383. zenml/zen_server/dashboard_legacy/static/media/ArrowSquareOut.abfb9bc7.svg +0 -5
  384. zenml/zen_server/dashboard_legacy/static/media/Back.86c23a22.svg +0 -4
  385. zenml/zen_server/dashboard_legacy/static/media/BookOpen.5cb101ff.svg +0 -4
  386. zenml/zen_server/dashboard_legacy/static/media/BoundingBox.1eb98717.svg +0 -10
  387. zenml/zen_server/dashboard_legacy/static/media/Burger.9b1c67d7.svg +0 -3
  388. zenml/zen_server/dashboard_legacy/static/media/Cached.2381fb8d.svg +0 -1
  389. zenml/zen_server/dashboard_legacy/static/media/Calendar.356e11c7.svg +0 -3
  390. zenml/zen_server/dashboard_legacy/static/media/ChartBarHorizontal.0247447b.svg +0 -6
  391. zenml/zen_server/dashboard_legacy/static/media/ChartLine.0d79e18d.svg +0 -4
  392. zenml/zen_server/dashboard_legacy/static/media/ChatDots.2e1c9211.svg +0 -6
  393. zenml/zen_server/dashboard_legacy/static/media/Check.dad6beb2.svg +0 -3
  394. zenml/zen_server/dashboard_legacy/static/media/CheckCircleFilled.c19566d0.svg +0 -3
  395. zenml/zen_server/dashboard_legacy/static/media/Checkbox.af50e31e.svg +0 -3
  396. zenml/zen_server/dashboard_legacy/static/media/ChevronDown.f860ce32.svg +0 -3
  397. zenml/zen_server/dashboard_legacy/static/media/ChevronDownLight.6642d756.svg +0 -3
  398. zenml/zen_server/dashboard_legacy/static/media/ChevronLeft.f6edfcdb.svg +0 -3
  399. zenml/zen_server/dashboard_legacy/static/media/CircleCheck.f98fd6ca.svg +0 -1
  400. zenml/zen_server/dashboard_legacy/static/media/Clock.ffc9de95.svg +0 -3
  401. zenml/zen_server/dashboard_legacy/static/media/Close.74e9efbc.svg +0 -5
  402. zenml/zen_server/dashboard_legacy/static/media/CloseWithBorder.6960930a.svg +0 -3
  403. zenml/zen_server/dashboard_legacy/static/media/CloseWithoutBorder.cd6f71df.svg +0 -3
  404. zenml/zen_server/dashboard_legacy/static/media/CloudArrowUp.0aecb235.svg +0 -6
  405. zenml/zen_server/dashboard_legacy/static/media/Code.ef0f33b5.svg +0 -3
  406. zenml/zen_server/dashboard_legacy/static/media/Config.0be63f8a.svg +0 -1
  407. zenml/zen_server/dashboard_legacy/static/media/Connector.9fd46ef1.svg +0 -10
  408. zenml/zen_server/dashboard_legacy/static/media/Copy.36e2112a.svg +0 -1
  409. zenml/zen_server/dashboard_legacy/static/media/Dashboard.d05787e0.svg +0 -3
  410. zenml/zen_server/dashboard_legacy/static/media/Data.b1c3b5f8.svg +0 -3
  411. zenml/zen_server/dashboard_legacy/static/media/Delete.3c361b28.svg +0 -8
  412. zenml/zen_server/dashboard_legacy/static/media/Docs.7541d478.svg +0 -7
  413. zenml/zen_server/dashboard_legacy/static/media/Download.fba04d87.svg +0 -5
  414. zenml/zen_server/dashboard_legacy/static/media/Edit.490eb294.svg +0 -6
  415. zenml/zen_server/dashboard_legacy/static/media/EmptyRightArrow.23749d01.svg +0 -3
  416. zenml/zen_server/dashboard_legacy/static/media/Example.6396cd37.svg +0 -5
  417. zenml/zen_server/dashboard_legacy/static/media/Extension.1394cd4a.svg +0 -3
  418. zenml/zen_server/dashboard_legacy/static/media/Eye.d9e4ee62.svg +0 -4
  419. zenml/zen_server/dashboard_legacy/static/media/Failed.0213c1a0.svg +0 -1
  420. zenml/zen_server/dashboard_legacy/static/media/FileText.1f15bacd.svg +0 -7
  421. zenml/zen_server/dashboard_legacy/static/media/Filter.ab6b9c0d.svg +0 -3
  422. zenml/zen_server/dashboard_legacy/static/media/Folders.12b29887.svg +0 -5
  423. zenml/zen_server/dashboard_legacy/static/media/FunnelFill.6df4c143.svg +0 -3
  424. zenml/zen_server/dashboard_legacy/static/media/GitCommit.7dd9c2aa.svg +0 -5
  425. zenml/zen_server/dashboard_legacy/static/media/GitHub_Logo.cefc2023.png +0 -0
  426. zenml/zen_server/dashboard_legacy/static/media/Graph.2c63a892.svg +0 -11
  427. zenml/zen_server/dashboard_legacy/static/media/History.08329240.svg +0 -3
  428. zenml/zen_server/dashboard_legacy/static/media/Home.0843b0d5.svg +0 -3
  429. zenml/zen_server/dashboard_legacy/static/media/ImageBuilder.ea762d9c.svg +0 -6
  430. zenml/zen_server/dashboard_legacy/static/media/InProgress.304a0edc.svg +0 -1
  431. zenml/zen_server/dashboard_legacy/static/media/Info.9fe10c5c.svg +0 -3
  432. zenml/zen_server/dashboard_legacy/static/media/KeyboardReturn.491afbe3.svg +0 -3
  433. zenml/zen_server/dashboard_legacy/static/media/Link.72bbb55d.svg +0 -4
  434. zenml/zen_server/dashboard_legacy/static/media/Lock.30f5e1fe.svg +0 -5
  435. zenml/zen_server/dashboard_legacy/static/media/Lock2.a769ea52.svg +0 -3
  436. zenml/zen_server/dashboard_legacy/static/media/LockKey.92f21621.svg +0 -6
  437. zenml/zen_server/dashboard_legacy/static/media/Logs.8bf4d005.svg +0 -5
  438. zenml/zen_server/dashboard_legacy/static/media/MinusCircle.4188f418.svg +0 -4
  439. zenml/zen_server/dashboard_legacy/static/media/ModelRegistry.f0de050a.svg +0 -6
  440. zenml/zen_server/dashboard_legacy/static/media/MultiUser.a2ba7c67.svg +0 -10
  441. zenml/zen_server/dashboard_legacy/static/media/PaginationFirst.92628634.svg +0 -4
  442. zenml/zen_server/dashboard_legacy/static/media/PaginationLast.00d3c732.svg +0 -4
  443. zenml/zen_server/dashboard_legacy/static/media/PaginationNext.86158845.svg +0 -3
  444. zenml/zen_server/dashboard_legacy/static/media/PaginationPrev.60c18a88.svg +0 -3
  445. zenml/zen_server/dashboard_legacy/static/media/Pen.f2d831d4.svg +0 -6
  446. zenml/zen_server/dashboard_legacy/static/media/PhotoCamera.179d6d4c.svg +0 -3
  447. zenml/zen_server/dashboard_legacy/static/media/Pipeline.30d298b0.svg +0 -7
  448. zenml/zen_server/dashboard_legacy/static/media/Plus.5aa1c16b.svg +0 -3
  449. zenml/zen_server/dashboard_legacy/static/media/PlusCircle.92d860dd.svg +0 -5
  450. zenml/zen_server/dashboard_legacy/static/media/Repositories.71a36b8c.svg +0 -3
  451. zenml/zen_server/dashboard_legacy/static/media/RightArrow.f30d3871.svg +0 -29
  452. zenml/zen_server/dashboard_legacy/static/media/Rocket.63bf7b9d.svg +0 -3
  453. zenml/zen_server/dashboard_legacy/static/media/RocketLaunch.1bff2b59.svg +0 -6
  454. zenml/zen_server/dashboard_legacy/static/media/Rubik-Medium.c87313aa.ttf +0 -0
  455. zenml/zen_server/dashboard_legacy/static/media/Rubik-Regular.b3d0902b.ttf +0 -0
  456. zenml/zen_server/dashboard_legacy/static/media/Run.daec4fb2.svg +0 -6
  457. zenml/zen_server/dashboard_legacy/static/media/Search.d1afcce5.svg +0 -4
  458. zenml/zen_server/dashboard_legacy/static/media/Settings.59ca73ae.svg +0 -4
  459. zenml/zen_server/dashboard_legacy/static/media/Share2.46c3ff66.svg +0 -3
  460. zenml/zen_server/dashboard_legacy/static/media/SignOut.6aa718c5.svg +0 -3
  461. zenml/zen_server/dashboard_legacy/static/media/SimplePlus.5cf7ec20.svg +0 -3
  462. zenml/zen_server/dashboard_legacy/static/media/SingleUser.bef3a095.svg +0 -4
  463. zenml/zen_server/dashboard_legacy/static/media/SourceCodePro-Regular.b484b32f.ttf +0 -0
  464. zenml/zen_server/dashboard_legacy/static/media/Stack.19b604ac.svg +0 -5
  465. zenml/zen_server/dashboard_legacy/static/media/StackComponent.b1ba90b5.svg +0 -4
  466. zenml/zen_server/dashboard_legacy/static/media/Star.f0c25022.svg +0 -9
  467. zenml/zen_server/dashboard_legacy/static/media/StarOutline.94ca8cd9.svg +0 -3
  468. zenml/zen_server/dashboard_legacy/static/media/Storefront.4b4796fe.svg +0 -3
  469. zenml/zen_server/dashboard_legacy/static/media/Stream.543e3039.svg +0 -3
  470. zenml/zen_server/dashboard_legacy/static/media/SupportAgent.510ddf1f.svg +0 -8
  471. zenml/zen_server/dashboard_legacy/static/media/Table.77033750.svg +0 -6
  472. zenml/zen_server/dashboard_legacy/static/media/Tool.d5785486.svg +0 -3
  473. zenml/zen_server/dashboard_legacy/static/media/UserPlus.741a99d7.svg +0 -6
  474. zenml/zen_server/dashboard_legacy/static/media/Verified.0625b2a0.svg +0 -3
  475. zenml/zen_server/dashboard_legacy/static/media/addNew.4fb6c939.svg +0 -8
  476. zenml/zen_server/dashboard_legacy/static/media/arrowClose.cbd53f3f.svg +0 -3
  477. zenml/zen_server/dashboard_legacy/static/media/arrowOpen.6ceef0af.svg +0 -3
  478. zenml/zen_server/dashboard_legacy/static/media/check_small.30bc0138.svg +0 -3
  479. zenml/zen_server/dashboard_legacy/static/media/circleArrowSideClose.98d6013e.svg +0 -18
  480. zenml/zen_server/dashboard_legacy/static/media/circleArrowSideOpen.63653df6.svg +0 -18
  481. zenml/zen_server/dashboard_legacy/static/media/image.104fd14b.png +0 -0
  482. zenml/zen_server/dashboard_legacy/static/media/imageAddIcon.e83004a9.svg +0 -7
  483. zenml/zen_server/dashboard_legacy/static/media/logo.93333e5c.svg +0 -1
  484. zenml/zen_server/dashboard_legacy/static/media/logo_small.4204397d.svg +0 -3
  485. zenml/zen_server/dashboard_legacy/static/media/logo_white.d4b4414e.svg +0 -20
  486. zenml/zen_server/dashboard_legacy/static/media/notConnected.5e2c8ea7.svg +0 -8
  487. zenml/zen_server/dashboard_legacy/static/media/plugin-fallback.72c294e6.svg +0 -6
  488. zenml/zen_server/dashboard_legacy/static/media/share.bcd998b0.svg +0 -5
  489. zenml/zen_server/dashboard_legacy/static/media/stars.08a9b19a.svg +0 -8
  490. zenml/zen_server/deploy/terraform/__init__.py +0 -41
  491. zenml/zen_server/deploy/terraform/providers/__init__.py +0 -14
  492. zenml/zen_server/deploy/terraform/providers/aws_provider.py +0 -61
  493. zenml/zen_server/deploy/terraform/providers/azure_provider.py +0 -59
  494. zenml/zen_server/deploy/terraform/providers/gcp_provider.py +0 -59
  495. zenml/zen_server/deploy/terraform/providers/terraform_provider.py +0 -331
  496. zenml/zen_server/deploy/terraform/recipes/aws/.gitignore +0 -8
  497. zenml/zen_server/deploy/terraform/recipes/aws/helm.tf +0 -20
  498. zenml/zen_server/deploy/terraform/recipes/aws/ingress.tf +0 -30
  499. zenml/zen_server/deploy/terraform/recipes/aws/outputs.tf +0 -7
  500. zenml/zen_server/deploy/terraform/recipes/aws/printf.cmd +0 -2
  501. zenml/zen_server/deploy/terraform/recipes/aws/sql.tf +0 -62
  502. zenml/zen_server/deploy/terraform/recipes/aws/terraform.tf +0 -44
  503. zenml/zen_server/deploy/terraform/recipes/aws/variables.tf +0 -167
  504. zenml/zen_server/deploy/terraform/recipes/aws/vpc.tf +0 -47
  505. zenml/zen_server/deploy/terraform/recipes/aws/zen_server.tf +0 -103
  506. zenml/zen_server/deploy/terraform/recipes/azure/.gitignore +0 -8
  507. zenml/zen_server/deploy/terraform/recipes/azure/helm.tf +0 -20
  508. zenml/zen_server/deploy/terraform/recipes/azure/ingress.tf +0 -30
  509. zenml/zen_server/deploy/terraform/recipes/azure/key_vault.tf +0 -73
  510. zenml/zen_server/deploy/terraform/recipes/azure/outputs.tf +0 -7
  511. zenml/zen_server/deploy/terraform/recipes/azure/printf.cmd +0 -2
  512. zenml/zen_server/deploy/terraform/recipes/azure/rg.tf +0 -36
  513. zenml/zen_server/deploy/terraform/recipes/azure/sql.tf +0 -65
  514. zenml/zen_server/deploy/terraform/recipes/azure/terraform.tf +0 -52
  515. zenml/zen_server/deploy/terraform/recipes/azure/variables.tf +0 -176
  516. zenml/zen_server/deploy/terraform/recipes/azure/zen_server.tf +0 -103
  517. zenml/zen_server/deploy/terraform/recipes/gcp/.gitignore +0 -8
  518. zenml/zen_server/deploy/terraform/recipes/gcp/helm.tf +0 -20
  519. zenml/zen_server/deploy/terraform/recipes/gcp/ingress.tf +0 -30
  520. zenml/zen_server/deploy/terraform/recipes/gcp/outputs.tf +0 -7
  521. zenml/zen_server/deploy/terraform/recipes/gcp/printf.cmd +0 -2
  522. zenml/zen_server/deploy/terraform/recipes/gcp/sql.tf +0 -64
  523. zenml/zen_server/deploy/terraform/recipes/gcp/terraform.tf +0 -44
  524. zenml/zen_server/deploy/terraform/recipes/gcp/variables.tf +0 -171
  525. zenml/zen_server/deploy/terraform/recipes/gcp/zen_server.tf +0 -114
  526. zenml/zen_server/deploy/terraform/terraform_zen_server.py +0 -246
  527. /zenml/{new/pipelines → pipelines}/build_utils.py +0 -0
  528. /zenml/{new/pipelines → pipelines}/run_utils.py +0 -0
  529. /zenml/{new/steps → steps}/decorated_step.py +0 -0
  530. {zenml_nightly-0.66.0.dev20240930.dist-info → zenml_nightly-0.68.0.dev20241026.dist-info}/LICENSE +0 -0
  531. {zenml_nightly-0.66.0.dev20240930.dist-info → zenml_nightly-0.68.0.dev20241026.dist-info}/entry_points.txt +0 -0
@@ -13,14 +13,13 @@
13
13
  # permissions and limitations under the License.
14
14
  """External artifact definition."""
15
15
 
16
- from typing import Optional
16
+ from typing import Any, Dict, Optional
17
17
  from uuid import UUID
18
18
 
19
19
  from pydantic import BaseModel, model_validator
20
20
 
21
21
  from zenml.logger import get_logger
22
- from zenml.model.model import Model
23
- from zenml.models.v2.core.artifact_version import ArtifactVersionResponse
22
+ from zenml.utils.pydantic_utils import before_validator_handler
24
23
 
25
24
  logger = get_logger(__name__)
26
25
 
@@ -32,26 +31,23 @@ class ExternalArtifactConfiguration(BaseModel):
32
31
  """
33
32
 
34
33
  id: Optional[UUID] = None
35
- name: Optional[str] = None
36
- version: Optional[str] = None
37
- model: Optional[Model] = None
38
34
 
39
- @model_validator(mode="after")
40
- def external_artifact_validator(self) -> "ExternalArtifactConfiguration":
41
- """Model validator for the external artifact configuration.
35
+ @model_validator(mode="before")
36
+ @classmethod
37
+ @before_validator_handler
38
+ def _remove_old_attributes(cls, data: Dict[str, Any]) -> Dict[str, Any]:
39
+ """Remove old attributes that are not used anymore.
42
40
 
43
- Raises:
44
- ValueError: if both version and model fields are set.
41
+ Args:
42
+ data: The model data.
45
43
 
46
44
  Returns:
47
- the validated instance.
45
+ Model data without the removed attributes.
48
46
  """
49
- if self.version and self.model:
50
- raise ValueError(
51
- "Cannot provide both `version` and `model` when "
52
- "creating an external artifact."
53
- )
54
- return self
47
+ data.pop("name", None)
48
+ data.pop("version", None)
49
+ data.pop("model", None)
50
+ return data
55
51
 
56
52
  def get_artifact_version_id(self) -> UUID:
57
53
  """Get the artifact.
@@ -71,29 +67,16 @@ class ExternalArtifactConfiguration(BaseModel):
71
67
 
72
68
  if self.id:
73
69
  response = client.get_artifact_version(self.id)
74
- elif self.name:
75
- if self.version:
76
- response = client.get_artifact_version(
77
- self.name, version=self.version
78
- )
79
- elif self.model:
80
- response_ = self.model.get_artifact(self.name)
81
- if not isinstance(response_, ArtifactVersionResponse):
82
- raise RuntimeError(
83
- f"Failed to pull artifact `{self.name}` from the Model "
84
- f"(name=`{self.model.name}`, version="
85
- f"`{self.model.version}`). Please validate the "
86
- "input and try again."
87
- )
88
- response = response_
89
- else:
90
- response = client.get_artifact_version(self.name)
91
70
  else:
92
71
  raise RuntimeError(
93
- "Either the ID or name of the artifact must be provided. "
94
- "If you created this ExternalArtifact from a value, please "
72
+ "The ID of the artifact must be provided. "
73
+ "- If you created this ExternalArtifact from a value, please "
95
74
  "ensure that `upload_by_value` was called before trying to "
96
- "fetch the artifact ID."
75
+ "fetch the artifact ID.\n- If you specified an artifact name "
76
+ "or model name for this external artifact, this functionality "
77
+ "was removed from the ExternalArtifact class. Use Client "
78
+ "methods instead to dynamically fetch an artifact via name or "
79
+ "from a model instead."
97
80
  )
98
81
 
99
82
  artifact_store_id = client.active_stack.artifact_store.id
@@ -107,6 +90,4 @@ class ExternalArtifactConfiguration(BaseModel):
107
90
  "store."
108
91
  )
109
92
 
110
- self.id = response.id
111
-
112
93
  return self.id
@@ -0,0 +1,91 @@
1
+ # Copyright (c) ZenML GmbH 2023. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at:
6
+ #
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12
+ # or implied. See the License for the specific language governing
13
+ # permissions and limitations under the License.
14
+ """Only-load materializer for directories."""
15
+
16
+ import os
17
+ import tempfile
18
+ from pathlib import Path
19
+ from typing import Any, ClassVar, Tuple, Type
20
+
21
+ from zenml.enums import ArtifactType
22
+ from zenml.io import fileio
23
+ from zenml.materializers.base_materializer import BaseMaterializer
24
+
25
+
26
+ class PreexistingDataMaterializer(BaseMaterializer):
27
+ """Materializer to load directories from the artifact store.
28
+
29
+ This materializer is very special, since it do not implement save
30
+ logic at all. The save of the data to some URI inside the artifact store
31
+ shall happen outside and is in user's responsibility.
32
+
33
+ This materializer solely supports the `register_artifact` function.
34
+ """
35
+
36
+ ASSOCIATED_TYPES: ClassVar[Tuple[Type[Any], ...]] = (Path,)
37
+ ASSOCIATED_ARTIFACT_TYPE: ClassVar[ArtifactType] = ArtifactType.DATA
38
+ SKIP_REGISTRATION: ClassVar[bool] = True
39
+
40
+ def load(self, data_type: Type[Any]) -> Any:
41
+ """Copy the artifact file(s) to a local temp directory.
42
+
43
+ Args:
44
+ data_type: Unused.
45
+
46
+ Returns:
47
+ Path to the local directory that contains the artifact files.
48
+ """
49
+ directory = tempfile.mkdtemp(prefix="zenml-artifact")
50
+ if fileio.isdir(self.uri):
51
+ self._copy_directory(src=self.uri, dst=directory)
52
+ return Path(directory)
53
+ else:
54
+ dst = os.path.join(directory, os.path.split(self.uri)[-1])
55
+ fileio.copy(src=self.uri, dst=dst)
56
+ return Path(dst)
57
+
58
+ def save(self, data: Any) -> None:
59
+ """Store the directory in the artifact store.
60
+
61
+ Args:
62
+ data: Path to a local directory to store.
63
+
64
+ Raises:
65
+ NotImplementedError: Always
66
+ """
67
+ raise NotImplementedError(
68
+ "`PreexistingDataMaterializer` can only be used in the "
69
+ "context of `register_artifact` function, "
70
+ "which expects the data to be already properly saved in "
71
+ "the Artifact Store, thus `save` logic makes no sense here."
72
+ )
73
+
74
+ @staticmethod
75
+ def _copy_directory(src: str, dst: str) -> None:
76
+ """Recursively copy a directory.
77
+
78
+ Args:
79
+ src: The directory to copy.
80
+ dst: Where to copy the directory to.
81
+ """
82
+ for src_dir, _, files in fileio.walk(src):
83
+ src_dir_ = str(src_dir)
84
+ dst_dir = str(os.path.join(dst, os.path.relpath(src_dir_, src)))
85
+ fileio.makedirs(dst_dir)
86
+
87
+ for file in files:
88
+ file_ = str(file)
89
+ src_file = os.path.join(src_dir_, file_)
90
+ dst_file = os.path.join(dst_dir, file_)
91
+ fileio.copy(src_file, dst_file)
zenml/artifacts/utils.py CHANGED
@@ -19,15 +19,30 @@ import tempfile
19
19
  import time
20
20
  import zipfile
21
21
  from pathlib import Path
22
- from typing import TYPE_CHECKING, Any, Dict, List, Optional, Type, Union, cast
22
+ from typing import (
23
+ TYPE_CHECKING,
24
+ Any,
25
+ Callable,
26
+ Dict,
27
+ List,
28
+ Optional,
29
+ Type,
30
+ Union,
31
+ cast,
32
+ )
23
33
  from uuid import UUID, uuid4
24
34
 
35
+ from zenml.artifacts.artifact_config import ArtifactConfig
36
+ from zenml.artifacts.load_directory_materializer import (
37
+ PreexistingDataMaterializer,
38
+ )
25
39
  from zenml.client import Client
26
40
  from zenml.constants import (
27
41
  MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION,
28
42
  MODEL_METADATA_YAML_FILE_NAME,
29
43
  )
30
44
  from zenml.enums import (
45
+ ArtifactType,
31
46
  ExecutionStatus,
32
47
  MetadataResourceTypes,
33
48
  StackComponentType,
@@ -50,8 +65,9 @@ from zenml.models import (
50
65
  StepRunResponse,
51
66
  StepRunUpdate,
52
67
  )
53
- from zenml.new.steps.step_context import get_step_context
68
+ from zenml.models.v2.core.artifact import ArtifactResponse
54
69
  from zenml.stack import StackComponent
70
+ from zenml.steps.step_context import get_step_context
55
71
  from zenml.utils import source_utils
56
72
  from zenml.utils.yaml_utils import read_yaml, write_yaml
57
73
 
@@ -111,10 +127,6 @@ def save_artifact(
111
127
 
112
128
  Returns:
113
129
  The saved artifact response.
114
-
115
- Raises:
116
- RuntimeError: If artifact URI already exists.
117
- EntityExistsError: If artifact version already exists.
118
130
  """
119
131
  from zenml.materializers.materializer_registry import (
120
132
  materializer_registry,
@@ -123,24 +135,11 @@ def save_artifact(
123
135
 
124
136
  client = Client()
125
137
 
126
- # Get or create the artifact
127
- try:
128
- artifact = client.list_artifacts(name=name)[0]
129
- if artifact.has_custom_name != has_custom_name:
130
- client.update_artifact(
131
- name_id_or_prefix=artifact.id, has_custom_name=has_custom_name
132
- )
133
- except IndexError:
134
- try:
135
- artifact = client.zen_store.create_artifact(
136
- ArtifactRequest(
137
- name=name,
138
- has_custom_name=has_custom_name,
139
- tags=tags,
140
- )
141
- )
142
- except EntityExistsError:
143
- artifact = client.list_artifacts(name=name)[0]
138
+ artifact = _get_or_create_artifact(
139
+ name=name,
140
+ has_custom_name=has_custom_name,
141
+ tags=tags,
142
+ )
144
143
 
145
144
  # Get the current artifact store
146
145
  artifact_store = client.active_stack.artifact_store
@@ -151,16 +150,14 @@ def save_artifact(
151
150
  if not uri.startswith(artifact_store.path):
152
151
  uri = os.path.join(artifact_store.path, uri)
153
152
 
154
- if manual_save and artifact_store.exists(uri):
153
+ if manual_save:
155
154
  # This check is only necessary for manual saves as we already check
156
155
  # it when creating the directory for step output artifacts
157
- other_artifacts = client.list_artifact_versions(uri=uri, size=1)
158
- if other_artifacts and (other_artifact := other_artifacts[0]):
159
- raise RuntimeError(
160
- f"Cannot save new artifact {name} version to URI "
161
- f"{uri} because the URI is already used by artifact "
162
- f"{other_artifact.name} (version {other_artifact.version})."
163
- )
156
+ _check_if_artifact_with_given_uri_already_registered(
157
+ artifact_store=artifact_store,
158
+ uri=uri,
159
+ name=name,
160
+ )
164
161
  artifact_store.makedirs(uri)
165
162
 
166
163
  # Find and initialize the right materializer class
@@ -211,7 +208,9 @@ def save_artifact(
211
208
  )
212
209
 
213
210
  # Create the artifact version
214
- def _create_version() -> Optional[ArtifactVersionResponse]:
211
+ def _create_version(
212
+ version: Union[int, str],
213
+ ) -> Optional[ArtifactVersionResponse]:
215
214
  artifact_version = ArtifactVersionRequest(
216
215
  artifact_id=artifact.id,
217
216
  version=version,
@@ -233,37 +232,12 @@ def save_artifact(
233
232
  except EntityExistsError:
234
233
  return None
235
234
 
236
- response = None
237
- if not version:
238
- retries_made = 0
239
- for i in range(MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION):
240
- # Get new artifact version
241
- version = _get_new_artifact_version(name)
242
- if response := _create_version():
243
- break
244
- # smoothed exponential back-off, it will go as 0.2, 0.3,
245
- # 0.45, 0.68, 1.01, 1.52, 2.28, 3.42, 5.13, 7.69, ...
246
- sleep = 0.2 * 1.5**i
247
- logger.debug(
248
- f"Failed to create artifact version `{version}` for "
249
- f"artifact `{name}`. Retrying in {sleep}..."
250
- )
251
- time.sleep(sleep)
252
- retries_made += 1
253
- if not response:
254
- raise EntityExistsError(
255
- f"Failed to create new artifact version for artifact "
256
- f"`{name}`. Retried {retries_made} times. "
257
- "This could be driven by exceptionally high concurrency of "
258
- "pipeline runs. Please, reach out to us on ZenML Slack for support."
259
- )
260
- else:
261
- response = _create_version()
262
- if not response:
263
- raise EntityExistsError(
264
- f"Failed to create artifact version `{version}` for artifact "
265
- f"`{name}`. Given version already exists."
266
- )
235
+ response = _create_artifact_version_with_retries(
236
+ name=name,
237
+ version=version,
238
+ create_version_fn=_create_version,
239
+ )
240
+
267
241
  if artifact_metadata:
268
242
  client.create_run_metadata(
269
243
  metadata=artifact_metadata,
@@ -272,29 +246,112 @@ def save_artifact(
272
246
  )
273
247
 
274
248
  if manual_save:
249
+ _link_artifact_version_to_the_step_and_model(
250
+ artifact_version=response,
251
+ is_model_artifact=is_model_artifact,
252
+ is_deployment_artifact=is_deployment_artifact,
253
+ )
254
+
255
+ return response
256
+
257
+
258
+ def register_artifact(
259
+ folder_or_file_uri: str,
260
+ name: str,
261
+ version: Optional[Union[int, str]] = None,
262
+ tags: Optional[List[str]] = None,
263
+ has_custom_name: bool = True,
264
+ is_model_artifact: bool = False,
265
+ is_deployment_artifact: bool = False,
266
+ artifact_metadata: Dict[str, "MetadataType"] = {},
267
+ ) -> "ArtifactVersionResponse":
268
+ """Register existing data stored in the artifact store as a ZenML Artifact.
269
+
270
+ Args:
271
+ folder_or_file_uri: The full URI within the artifact store to the folder
272
+ or to the file.
273
+ name: The name of the artifact.
274
+ version: The version of the artifact. If not provided, a new
275
+ auto-incremented version will be used.
276
+ tags: Tags to associate with the artifact.
277
+ has_custom_name: If the artifact name is custom and should be listed in
278
+ the dashboard "Artifacts" tab.
279
+ is_model_artifact: If the artifact is a model artifact.
280
+ is_deployment_artifact: If the artifact is a deployment artifact.
281
+ artifact_metadata: Metadata dictionary to attach to the artifact version.
282
+
283
+ Returns:
284
+ The saved artifact response.
285
+
286
+ Raises:
287
+ FileNotFoundError: If the folder URI is outside of the artifact store
288
+ bounds.
289
+ """
290
+ client = Client()
291
+
292
+ # Get the current artifact store
293
+ artifact_store = client.active_stack.artifact_store
294
+
295
+ if not folder_or_file_uri.startswith(artifact_store.path):
296
+ raise FileNotFoundError(
297
+ f"Folder `{folder_or_file_uri}` is outside of "
298
+ f"artifact store bounds `{artifact_store.path}`"
299
+ )
300
+
301
+ _check_if_artifact_with_given_uri_already_registered(
302
+ artifact_store=artifact_store,
303
+ uri=folder_or_file_uri,
304
+ name=name,
305
+ )
306
+
307
+ artifact = _get_or_create_artifact(
308
+ name=name,
309
+ has_custom_name=has_custom_name,
310
+ tags=tags,
311
+ )
312
+
313
+ # Create the artifact version
314
+ def _create_version(
315
+ version: Union[int, str],
316
+ ) -> Optional[ArtifactVersionResponse]:
317
+ artifact_version = ArtifactVersionRequest(
318
+ artifact_id=artifact.id,
319
+ version=version,
320
+ tags=tags,
321
+ type=ArtifactType.DATA,
322
+ uri=folder_or_file_uri,
323
+ materializer=source_utils.resolve(PreexistingDataMaterializer),
324
+ data_type=source_utils.resolve(Path),
325
+ user=Client().active_user.id,
326
+ workspace=Client().active_workspace.id,
327
+ artifact_store_id=artifact_store.id,
328
+ has_custom_name=has_custom_name,
329
+ )
275
330
  try:
276
- error_message = "step run"
277
- step_context = get_step_context()
278
- step_run = step_context.step_run
279
- client.zen_store.update_run_step(
280
- step_run_id=step_run.id,
281
- step_run_update=StepRunUpdate(
282
- saved_artifact_versions={name: response.id}
283
- ),
331
+ return client.zen_store.create_artifact_version(
332
+ artifact_version=artifact_version
284
333
  )
285
- error_message = "model"
286
- model = step_context.model
287
- if model:
288
- from zenml.model.utils import link_artifact_to_model
289
-
290
- link_artifact_to_model(
291
- artifact_version_id=response.id,
292
- model=model,
293
- is_model_artifact=is_model_artifact,
294
- is_deployment_artifact=is_deployment_artifact,
295
- )
296
- except (RuntimeError, StepContextError):
297
- logger.debug(f"Unable to link saved artifact to {error_message}.")
334
+ except EntityExistsError:
335
+ return None
336
+
337
+ response = _create_artifact_version_with_retries(
338
+ name=name,
339
+ version=version,
340
+ create_version_fn=_create_version,
341
+ )
342
+
343
+ if artifact_metadata:
344
+ client.create_run_metadata(
345
+ metadata=artifact_metadata,
346
+ resource_id=response.id,
347
+ resource_type=MetadataResourceTypes.ARTIFACT_VERSION,
348
+ )
349
+
350
+ _link_artifact_version_to_the_step_and_model(
351
+ artifact_version=response,
352
+ is_model_artifact=is_model_artifact,
353
+ is_deployment_artifact=is_deployment_artifact,
354
+ )
298
355
 
299
356
  return response
300
357
 
@@ -577,6 +634,184 @@ def get_artifacts_versions_of_pipeline_run(
577
634
  # -------------------------
578
635
 
579
636
 
637
+ def _check_if_artifact_with_given_uri_already_registered(
638
+ artifact_store: "BaseArtifactStore",
639
+ uri: str,
640
+ name: str,
641
+ ) -> None:
642
+ """Check if the given artifact store already contains an artifact with the given URI.
643
+
644
+ Args:
645
+ artifact_store: The artifact store to check.
646
+ uri: The uri of the artifact.
647
+ name: The name of the artifact.
648
+
649
+ Raises:
650
+ RuntimeError: If the artifact store already contains an artifact with
651
+ the given URI.
652
+ """
653
+ if artifact_store.exists(uri):
654
+ # This check is only necessary for manual saves as we already check
655
+ # it when creating the directory for step output artifacts
656
+ other_artifacts = Client().list_artifact_versions(uri=uri, size=1)
657
+ if other_artifacts and (other_artifact := other_artifacts[0]):
658
+ raise RuntimeError(
659
+ f"Cannot create new artifact {name} version with URI "
660
+ f"{uri} because the URI is already used by artifact "
661
+ f"{other_artifact.name} (version {other_artifact.version})."
662
+ )
663
+
664
+
665
+ def _get_or_create_artifact(
666
+ name: str, has_custom_name: bool, tags: Optional[List[str]] = None
667
+ ) -> ArtifactResponse:
668
+ """Get or create an artifact with the given name.
669
+
670
+ Args:
671
+ name: The name of the artifact.
672
+ has_custom_name: If the artifact name is custom and should be listed in
673
+ the dashboard "Artifacts" tab.
674
+ tags: Tags to associate with the artifact.
675
+
676
+ Returns:
677
+ The artifact.
678
+ """
679
+ client = Client()
680
+ # Get or create the artifact
681
+ try:
682
+ artifact = client.list_artifacts(name=name)[0]
683
+ if artifact.has_custom_name != has_custom_name:
684
+ client.update_artifact(
685
+ name_id_or_prefix=artifact.id, has_custom_name=has_custom_name
686
+ )
687
+ except IndexError:
688
+ try:
689
+ artifact = client.zen_store.create_artifact(
690
+ ArtifactRequest(
691
+ name=name,
692
+ has_custom_name=has_custom_name,
693
+ tags=tags,
694
+ )
695
+ )
696
+ except EntityExistsError:
697
+ artifact = client.list_artifacts(name=name)[0]
698
+ return artifact
699
+
700
+
701
+ def _create_artifact_version_with_retries(
702
+ name: str,
703
+ version: Optional[Union[int, str]],
704
+ create_version_fn: Callable[
705
+ [
706
+ Union[int, str],
707
+ ],
708
+ Optional[ArtifactVersionResponse],
709
+ ],
710
+ ) -> ArtifactVersionResponse:
711
+ """Create an artifact version with some retries.
712
+
713
+ This function will retry the creation of an artifact version up to
714
+ MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION times if it fails.
715
+ It can fail in high-concurrency environments.
716
+
717
+ Args:
718
+ name: The name of the artifact.
719
+ version: The version of the artifact. If not provided, a new
720
+ auto-incremented version will be used.
721
+ create_version_fn: The function to create the artifact version.
722
+
723
+ Returns:
724
+ The created artifact version.
725
+
726
+ Raises:
727
+ EntityExistsError: If the artifact version could not be created
728
+ after MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION attempts due
729
+ to collisions.
730
+
731
+ """
732
+ response = None
733
+ if not version:
734
+ retries_made = 0
735
+ for i in range(MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION):
736
+ # Get new artifact version
737
+ version = _get_new_artifact_version(name)
738
+ if response := create_version_fn(version):
739
+ break
740
+ # smoothed exponential back-off, it will go as 0.2, 0.3,
741
+ # 0.45, 0.68, 1.01, 1.52, 2.28, 3.42, 5.13, 7.69, ...
742
+ sleep = 0.2 * 1.5**i
743
+ logger.debug(
744
+ f"Failed to create artifact version `{version}` for "
745
+ f"artifact `{name}`. Retrying in {sleep}..."
746
+ )
747
+ time.sleep(sleep)
748
+ retries_made += 1
749
+ if not response:
750
+ raise EntityExistsError(
751
+ f"Failed to create new artifact version for artifact "
752
+ f"`{name}`. Retried {retries_made} times. "
753
+ "This could be driven by exceptionally high concurrency of "
754
+ "pipeline runs. Please, reach out to us on ZenML Slack for support."
755
+ )
756
+ else:
757
+ response = create_version_fn(version)
758
+ if not response:
759
+ raise EntityExistsError(
760
+ f"Failed to create artifact version `{version}` for artifact "
761
+ f"`{name}`. Given version already exists."
762
+ )
763
+ return response
764
+
765
+
766
+ def _link_artifact_version_to_the_step_and_model(
767
+ artifact_version: ArtifactVersionResponse,
768
+ is_model_artifact: bool,
769
+ is_deployment_artifact: bool,
770
+ ) -> None:
771
+ """Link an artifact version to the step and its' context model.
772
+
773
+ This function links the AV to:
774
+ - the step run
775
+ - the MV from the step context
776
+
777
+ Args:
778
+ artifact_version: The artifact version to link.
779
+ is_model_artifact: Whether the artifact is a model artifact.
780
+ is_deployment_artifact: Whether the artifact is a deployment artifact.
781
+ """
782
+ client = Client()
783
+ try:
784
+ error_message = "step run"
785
+ step_context = get_step_context()
786
+ step_run = step_context.step_run
787
+ client.zen_store.update_run_step(
788
+ step_run_id=step_run.id,
789
+ step_run_update=StepRunUpdate(
790
+ saved_artifact_versions={
791
+ artifact_version.artifact.name: artifact_version.id
792
+ }
793
+ ),
794
+ )
795
+ error_message = "model"
796
+
797
+ if step_context.model_version:
798
+ from zenml.model.utils import (
799
+ link_artifact_version_to_model_version,
800
+ )
801
+
802
+ artifact_config = ArtifactConfig(
803
+ is_model_artifact=is_model_artifact,
804
+ is_deployment_artifact=is_deployment_artifact,
805
+ )
806
+ link_artifact_version_to_model_version(
807
+ artifact_version=artifact_version,
808
+ model_version=step_context.model_version,
809
+ artifact_config=artifact_config,
810
+ )
811
+ except (RuntimeError, StepContextError):
812
+ logger.debug(f"Unable to link saved artifact to {error_message}.")
813
+
814
+
580
815
  def _load_artifact_from_uri(
581
816
  materializer: Union["Source", str],
582
817
  data_type: Union["Source", str],