zenml-nightly 0.66.0.dev20240927__py3-none-any.whl → 0.68.1.dev20241102__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 (597) hide show
  1. README.md +18 -12
  2. RELEASE_NOTES.md +236 -0
  3. zenml/VERSION +1 -1
  4. zenml/__init__.py +5 -10
  5. zenml/analytics/context.py +16 -1
  6. zenml/analytics/enums.py +0 -13
  7. zenml/analytics/utils.py +18 -7
  8. zenml/artifact_stores/base_artifact_store.py +11 -0
  9. zenml/artifacts/artifact_config.py +19 -65
  10. zenml/artifacts/external_artifact.py +7 -53
  11. zenml/artifacts/external_artifact_config.py +21 -40
  12. zenml/artifacts/load_directory_materializer.py +91 -0
  13. zenml/artifacts/utils.py +204 -145
  14. zenml/cli/__init__.py +62 -127
  15. zenml/cli/base.py +8 -8
  16. zenml/cli/integration.py +0 -9
  17. zenml/cli/login.py +951 -0
  18. zenml/cli/pipeline.py +1 -1
  19. zenml/cli/served_model.py +8 -1
  20. zenml/cli/server.py +462 -577
  21. zenml/cli/service_accounts.py +4 -4
  22. zenml/cli/stack.py +78 -569
  23. zenml/cli/stack_components.py +5 -594
  24. zenml/cli/user_management.py +0 -12
  25. zenml/cli/utils.py +24 -142
  26. zenml/client.py +57 -40
  27. zenml/client_lazy_loader.py +29 -12
  28. zenml/config/compiler.py +7 -11
  29. zenml/config/global_config.py +9 -0
  30. zenml/config/pipeline_configurations.py +2 -1
  31. zenml/config/pipeline_run_configuration.py +2 -1
  32. zenml/config/server_config.py +7 -5
  33. zenml/config/step_configurations.py +2 -0
  34. zenml/constants.py +6 -42
  35. zenml/enums.py +1 -4
  36. zenml/environment.py +1 -315
  37. zenml/exceptions.py +12 -41
  38. zenml/hooks/hook_validators.py +1 -8
  39. zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +2 -3
  40. zenml/integrations/argilla/__init__.py +1 -1
  41. zenml/integrations/argilla/annotators/argilla_annotator.py +234 -89
  42. zenml/integrations/argilla/flavors/argilla_annotator_flavor.py +10 -5
  43. zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py +9 -5
  44. zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +15 -2
  45. zenml/integrations/aws/service_connectors/aws_service_connector.py +6 -0
  46. zenml/integrations/azure/__init__.py +6 -2
  47. zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +5 -4
  48. zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
  49. zenml/integrations/bentoml/model_deployers/bentoml_model_deployer.py +85 -19
  50. zenml/integrations/bentoml/services/__init__.py +15 -4
  51. zenml/integrations/bentoml/services/bentoml_container_deployment.py +399 -0
  52. zenml/integrations/bentoml/services/{bentoml_deployment.py → bentoml_local_deployment.py} +81 -40
  53. zenml/{steps/base_parameters.py → integrations/bentoml/services/deployment_type.py} +8 -5
  54. zenml/integrations/bentoml/steps/bento_builder.py +1 -0
  55. zenml/integrations/bentoml/steps/bentoml_deployer.py +93 -41
  56. zenml/integrations/github/code_repositories/github_code_repository.py +1 -1
  57. zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py +6 -1
  58. zenml/integrations/huggingface/__init__.py +1 -6
  59. zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +3 -3
  60. zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +3 -3
  61. zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +2 -2
  62. zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +6 -3
  63. zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +6 -0
  64. zenml/integrations/mlflow/services/mlflow_deployment.py +2 -2
  65. zenml/integrations/mlflow/steps/mlflow_deployer.py +1 -1
  66. zenml/integrations/mlflow/steps/mlflow_registry.py +1 -1
  67. zenml/integrations/neptune/experiment_trackers/run_state.py +2 -2
  68. zenml/integrations/pytorch/materializers/base_pytorch_materializer.py +8 -2
  69. zenml/integrations/pytorch/materializers/pytorch_module_materializer.py +4 -1
  70. zenml/integrations/s3/artifact_stores/s3_artifact_store.py +98 -0
  71. zenml/integrations/s3/flavors/s3_artifact_store_flavor.py +14 -0
  72. zenml/integrations/s3/utils.py +40 -0
  73. zenml/integrations/tensorflow/__init__.py +0 -9
  74. zenml/logging/step_logging.py +13 -15
  75. zenml/{new/pipelines → login}/__init__.py +4 -1
  76. zenml/login/credentials.py +346 -0
  77. zenml/login/credentials_store.py +603 -0
  78. zenml/{new → login/pro}/__init__.py +4 -1
  79. zenml/login/pro/client.py +496 -0
  80. zenml/login/pro/constants.py +34 -0
  81. zenml/{lineage_graph/edge.py → login/pro/models.py} +9 -8
  82. zenml/{zen_server/deploy/terraform/providers → login/pro/organization}/__init__.py +2 -2
  83. zenml/login/pro/organization/client.py +79 -0
  84. zenml/{lineage_graph/node/base_node.py → login/pro/organization/models.py} +13 -12
  85. zenml/{new/steps → login/pro/tenant}/__init__.py +2 -1
  86. zenml/login/pro/tenant/client.py +92 -0
  87. zenml/login/pro/tenant/models.py +174 -0
  88. zenml/login/pro/utils.py +121 -0
  89. zenml/{cli → login}/web_login.py +64 -28
  90. zenml/materializers/__init__.py +2 -0
  91. zenml/materializers/base_materializer.py +43 -9
  92. zenml/materializers/built_in_materializer.py +1 -1
  93. zenml/materializers/uuid_materializer.py +79 -0
  94. zenml/metadata/lazy_load.py +10 -7
  95. zenml/metadata/metadata_types.py +49 -0
  96. zenml/model/lazy_load.py +85 -4
  97. zenml/model/model.py +61 -83
  98. zenml/model/utils.py +47 -118
  99. zenml/models/__init__.py +6 -0
  100. zenml/models/v2/base/base.py +12 -8
  101. zenml/models/v2/base/filter.py +9 -0
  102. zenml/models/v2/core/artifact_version.py +53 -25
  103. zenml/models/v2/core/component.py +54 -19
  104. zenml/models/v2/core/flavor.py +13 -13
  105. zenml/models/v2/core/model.py +4 -1
  106. zenml/models/v2/core/model_version.py +4 -6
  107. zenml/models/v2/core/model_version_artifact.py +3 -1
  108. zenml/models/v2/core/model_version_pipeline_run.py +3 -1
  109. zenml/models/v2/core/pipeline.py +3 -1
  110. zenml/models/v2/core/pipeline_run.py +24 -3
  111. zenml/models/v2/core/run_metadata.py +2 -2
  112. zenml/models/v2/core/run_template.py +3 -1
  113. zenml/models/v2/core/stack.py +7 -3
  114. zenml/models/v2/core/step_run.py +58 -14
  115. zenml/models/v2/misc/auth_models.py +11 -2
  116. zenml/models/v2/misc/server_models.py +2 -4
  117. zenml/orchestrators/base_orchestrator.py +41 -4
  118. zenml/orchestrators/input_utils.py +52 -36
  119. zenml/orchestrators/step_launcher.py +50 -171
  120. zenml/orchestrators/step_run_utils.py +574 -0
  121. zenml/orchestrators/step_runner.py +83 -120
  122. zenml/orchestrators/utils.py +46 -180
  123. zenml/pipelines/__init__.py +3 -16
  124. zenml/{new/pipelines → pipelines}/pipeline_context.py +3 -18
  125. zenml/pipelines/pipeline_decorator.py +34 -60
  126. zenml/{new/pipelines/pipeline.py → pipelines/pipeline_definition.py} +210 -207
  127. zenml/{new/pipelines → pipelines}/run_utils.py +11 -10
  128. zenml/services/local/local_daemon_entrypoint.py +4 -4
  129. zenml/services/service.py +2 -2
  130. zenml/stack/stack.py +3 -108
  131. zenml/stack/stack_component.py +2 -78
  132. zenml/stack/utils.py +26 -14
  133. zenml/stack_deployments/aws_stack_deployment.py +3 -0
  134. zenml/step_operators/step_operator_entrypoint_configuration.py +1 -1
  135. zenml/steps/__init__.py +3 -9
  136. zenml/steps/base_step.py +25 -267
  137. zenml/steps/entrypoint_function_utils.py +2 -80
  138. zenml/{new/steps → steps}/step_context.py +12 -66
  139. zenml/steps/step_decorator.py +42 -89
  140. zenml/steps/step_invocation.py +16 -60
  141. zenml/steps/utils.py +4 -23
  142. zenml/utils/dashboard_utils.py +16 -51
  143. zenml/utils/materializer_utils.py +1 -1
  144. zenml/utils/requirements_utils.py +71 -0
  145. zenml/utils/singleton.py +15 -3
  146. zenml/utils/source_utils.py +39 -2
  147. zenml/utils/typing_utils.py +8 -28
  148. zenml/utils/visualization_utils.py +1 -1
  149. zenml/zen_server/auth.py +44 -39
  150. zenml/zen_server/dashboard/assets/{404-Y50hSt65.js → 404-DT4QRUqN.js} +1 -1
  151. zenml/zen_server/dashboard/assets/@radix-DP6vWzyx.js +85 -0
  152. zenml/zen_server/dashboard/assets/@react-router-BMhZulnd.js +29 -0
  153. zenml/zen_server/dashboard/assets/@reactflow-8U9qNlMR.js +17 -0
  154. zenml/zen_server/dashboard/assets/@tanstack-BUCbhJyH.js +22 -0
  155. zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-xLR9a1iw.js → AlertDialogDropdownItem-C6N2rGrB.js} +1 -1
  156. zenml/zen_server/dashboard/assets/{CodeSnippet-IxXNxUDa.js → CodeSnippet-CqybNv0k.js} +1 -1
  157. zenml/zen_server/dashboard/assets/{CollapsibleCard-BhutZbBL.js → CollapsibleCard-0r_8G2Lj.js} +1 -1
  158. zenml/zen_server/dashboard/assets/{Commands-Bf-rd1z8.js → Commands-BDjgBQKi.js} +1 -1
  159. zenml/zen_server/dashboard/assets/ComponentBadge-DUiEYJHu.js +1 -0
  160. zenml/zen_server/dashboard/assets/ComponentFallbackDialog-BFoH5K4V.js +1 -0
  161. zenml/zen_server/dashboard/assets/ComponentIcon-CAIoUis2.js +1 -0
  162. zenml/zen_server/dashboard/assets/{CopyButton-DcFHidFJ.js → CopyButton-C745BrKi.js} +1 -1
  163. zenml/zen_server/dashboard/assets/{CsvVizualization-QSbjrfxw.js → CsvVizualization-PpAq0CeZ.js} +5 -5
  164. zenml/zen_server/dashboard/assets/{DialogItem-Cd3HqST4.js → DialogItem-DcVCZEew.js} +1 -1
  165. zenml/zen_server/dashboard/assets/{DisplayDate-DkCy54Bp.js → DisplayDate-BeXgUG_C.js} +1 -1
  166. zenml/zen_server/dashboard/assets/{EmptyState-Cs3DEmso.js → EmptyState-DeK7H4pr.js} +1 -1
  167. zenml/zen_server/dashboard/assets/{Error-BhwdmqK7.js → Error-BMlzibXj.js} +1 -1
  168. zenml/zen_server/dashboard/assets/{Helpbox-0pBpTwTm.js → Helpbox-BLf40fLV.js} +1 -1
  169. zenml/zen_server/dashboard/assets/{Infobox-BTK_EUKT.js → Infobox-BwisKifi.js} +1 -1
  170. zenml/zen_server/dashboard/assets/{InlineAvatar-CA3DFMcM.js → InlineAvatar-jEgodSgX.js} +1 -1
  171. zenml/zen_server/dashboard/assets/{Lock-CmIn0szs.js → Lock-3lLt1ih0.js} +1 -1
  172. zenml/zen_server/dashboard/assets/MarkdownVisualization-8O9kTr-2.js +14 -0
  173. zenml/zen_server/dashboard/assets/{NumberBox-CrN0_kqI.js → NumberBox-T9eELfLZ.js} +1 -1
  174. zenml/zen_server/dashboard/assets/{Partials-QLOZw624.js → Partials-YPBB3V4q.js} +1 -1
  175. zenml/zen_server/dashboard/assets/{PasswordChecker-DE71J_3F.js → PasswordChecker-CW0kqY0W.js} +1 -1
  176. zenml/zen_server/dashboard/assets/{ProviderIcon-C16CCIN4.js → ProviderIcon-Bb3Xha5A.js} +1 -1
  177. zenml/zen_server/dashboard/assets/{ProviderRadio-D3FuCHf3.js → ProviderRadio-BROY1700.js} +1 -1
  178. zenml/zen_server/dashboard/assets/RunSelector-DCiL3M1c.js +1 -0
  179. zenml/zen_server/dashboard/assets/SearchField-DfUiGFVd.js +1 -0
  180. zenml/zen_server/dashboard/assets/{SecretTooltip-BaMwHF-Q.js → SecretTooltip-C_qByGWB.js} +1 -1
  181. zenml/zen_server/dashboard/assets/{SetPassword-DuIC65H9.js → SetPassword-7pRB00El.js} +1 -1
  182. zenml/zen_server/dashboard/assets/{Tick-DJTCF0Re.js → Tick-CykQFPj2.js} +1 -1
  183. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-CUm-DMpw.js → UpdatePasswordSchemas-DckMEkFf.js} +1 -1
  184. zenml/zen_server/dashboard/assets/{UsageReason-CKw0juLF.js → UsageReason-DVceN14P.js} +1 -1
  185. zenml/zen_server/dashboard/assets/{WizardFooter-Cv9ApYWU.js → WizardFooter-CW0Cvd70.js} +1 -1
  186. zenml/zen_server/dashboard/assets/{check-circle-DOoS4yhF.js → check-circle-Dwxliy1Z.js} +1 -1
  187. zenml/zen_server/dashboard/assets/{chevron-down-Cwb-W_B_.js → chevron-down-8wLBS5pQ.js} +1 -1
  188. zenml/zen_server/dashboard/assets/{chevron-right-double-c9H46Kl8.js → chevron-right-double-DoD8iXWM.js} +1 -1
  189. zenml/zen_server/dashboard/assets/{cloud-only-BB4BVa6E.js → cloud-only-B-s_HMDm.js} +1 -1
  190. zenml/zen_server/dashboard/assets/{code-browser-BJYErIjr.js → code-browser-CZUQs3Wa.js} +1 -1
  191. zenml/zen_server/dashboard/assets/{copy-CaGlDsUy.js → copy-CaSMXwiU.js} +1 -1
  192. zenml/zen_server/dashboard/assets/{create-stack-F29xAUEx.js → create-stack-CEmaPZ4c.js} +1 -1
  193. zenml/zen_server/dashboard/assets/delete-run-D-LKbGyz.js +1 -0
  194. zenml/zen_server/dashboard/assets/{docker-BFAFXr2_.js → docker-BFNgg-z3.js} +1 -1
  195. zenml/zen_server/dashboard/assets/{dots-horizontal-C6K59vUm.js → dots-horizontal-DK5Duzx4.js} +1 -1
  196. zenml/zen_server/dashboard/assets/{form-schemas-BKXwSDK2.js → form-schemas-1AyOCx90.js} +1 -1
  197. zenml/zen_server/dashboard/assets/{gcp-Dj6ntk0L.js → gcp-7M2Yf3ZK.js} +1 -1
  198. zenml/zen_server/dashboard/assets/{help-CwN931fX.js → help-Dam461dC.js} +1 -1
  199. zenml/zen_server/dashboard/assets/{index-5GJ5ysEZ.js → index-BVJ8n2-j.js} +1 -1
  200. zenml/zen_server/dashboard/assets/index-Bpmj40BI.js +1 -0
  201. zenml/zen_server/dashboard/assets/index-CbU4Ln_E.css +1 -0
  202. zenml/zen_server/dashboard/assets/{index-D-mtoBj3.js → index-DKPhqP2B.js} +1 -1
  203. zenml/zen_server/dashboard/assets/index-QQb7wQEC.js +55 -0
  204. zenml/zen_server/dashboard/assets/index.esm-cuVep_NJ.js +1 -0
  205. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-BLGc9T1a.woff2 +0 -0
  206. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-ZzOtrSSW.woff +0 -0
  207. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-D4Vwzodn.woff2 +0 -0
  208. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DH2hs3aW.woff +0 -0
  209. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BGBWG807.woff2 +0 -0
  210. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BuzJQFbW.woff +0 -0
  211. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-BPnxn4xp.woff +0 -0
  212. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-Dc4VJyIJ.woff2 +0 -0
  213. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-BShVwWPj.woff2 +0 -0
  214. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-CUiC4oBV.woff +0 -0
  215. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-Bt9VVOA-.woff +0 -0
  216. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-CaqZN2hq.woff2 +0 -0
  217. zenml/zen_server/dashboard/assets/inter-greek-400-normal-BZzXV7-1.woff +0 -0
  218. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DxZsaF_h.woff2 +0 -0
  219. zenml/zen_server/dashboard/assets/inter-greek-500-normal-CeQXL5ds.woff2 +0 -0
  220. zenml/zen_server/dashboard/assets/inter-greek-500-normal-d_eO-yCQ.woff +0 -0
  221. zenml/zen_server/dashboard/assets/inter-greek-600-normal-CwicyhtI.woff +0 -0
  222. zenml/zen_server/dashboard/assets/inter-greek-600-normal-Dhlb-90d.woff2 +0 -0
  223. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-Bput3-QP.woff2 +0 -0
  224. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-DCpCPQOf.woff +0 -0
  225. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-B6guLgqG.woff2 +0 -0
  226. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-M2hEX8vc.woff +0 -0
  227. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-C9WLioJ8.woff +0 -0
  228. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-Cnui8OiR.woff2 +0 -0
  229. zenml/zen_server/dashboard/assets/inter-latin-400-normal-BOOGhInR.woff2 +0 -0
  230. zenml/zen_server/dashboard/assets/inter-latin-400-normal-gitzw0hO.woff +0 -0
  231. zenml/zen_server/dashboard/assets/inter-latin-500-normal-D2bGa7uu.woff2 +0 -0
  232. zenml/zen_server/dashboard/assets/inter-latin-500-normal-deR1Tlfd.woff +0 -0
  233. zenml/zen_server/dashboard/assets/inter-latin-600-normal-B5cFAncS.woff +0 -0
  234. zenml/zen_server/dashboard/assets/inter-latin-600-normal-D273HNI0.woff2 +0 -0
  235. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-C1t-h-pH.woff +0 -0
  236. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-hnt3BR84.woff2 +0 -0
  237. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2 +0 -0
  238. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-UMdmhHu2.woff +0 -0
  239. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-BnYJhD27.woff2 +0 -0
  240. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-CAF0vJDd.woff +0 -0
  241. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-BUNmGMP1.woff +0 -0
  242. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
  243. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
  244. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DQPw2Hwd.woff +0 -0
  245. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
  246. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cm6aH8_k.woff +0 -0
  247. zenml/zen_server/dashboard/assets/{kubernetes-BjbR6D-1.js → kubernetes--g7r02Zu.js} +1 -1
  248. zenml/zen_server/dashboard/assets/{layout-Dru15_XR.js → layout-DCSYN7-C.js} +1 -1
  249. zenml/zen_server/dashboard/assets/{link-external-BT2L8hAQ.js → link-external-CBEk6kEG.js} +1 -1
  250. zenml/zen_server/dashboard/assets/{login-mutation-ax6iL2Mb.js → login-mutation-DTcAFP1l.js} +1 -1
  251. zenml/zen_server/dashboard/assets/{logs-GiDJXbLS.js → logs-D5bdJGur.js} +1 -1
  252. zenml/zen_server/dashboard/assets/not-found-Cc-JkRH2.js +1 -0
  253. zenml/zen_server/dashboard/assets/{package-DYKZ5jKW.js → package-Cs35Szwh.js} +1 -1
  254. zenml/zen_server/dashboard/assets/{page-HkVBdZl6.js → page-9yplj5JT.js} +1 -1
  255. zenml/zen_server/dashboard/assets/{page-uORspyRu.js → page-B-y2XKIc.js} +1 -1
  256. zenml/zen_server/dashboard/assets/page-BBpOxVcY.js +1 -0
  257. zenml/zen_server/dashboard/assets/{page-BDg1F-Ug.js → page-BQQKaabe.js} +2 -2
  258. zenml/zen_server/dashboard/assets/page-BRInM1Lg.js +1 -0
  259. zenml/zen_server/dashboard/assets/{page-CvKnNK1S.js → page-BjjlMk7s.js} +1 -1
  260. zenml/zen_server/dashboard/assets/{page-BukXK1Aa.js → page-Bvd7YH2A.js} +1 -1
  261. zenml/zen_server/dashboard/assets/{page-DcTjHmYZ.js → page-C0N5q3l7.js} +1 -1
  262. zenml/zen_server/dashboard/assets/page-CT3Nep8W.js +1 -0
  263. zenml/zen_server/dashboard/assets/{page-DuqYMYmH.js → page-C_f47pBf.js} +1 -1
  264. zenml/zen_server/dashboard/assets/{page-DRfcRK1w.js → page-ClUVkl-O.js} +1 -1
  265. zenml/zen_server/dashboard/assets/page-Cmv8C_yM.js +3 -0
  266. zenml/zen_server/dashboard/assets/{page-p0BhSAWx.js → page-CyN2bdWG.js} +1 -1
  267. zenml/zen_server/dashboard/assets/page-CzzXH4fs.js +1 -0
  268. zenml/zen_server/dashboard/assets/{page-6mfzecin.js → page-DH_Z7iW1.js} +1 -1
  269. zenml/zen_server/dashboard/assets/{page-8kYmrh0B.js → page-DIOXwhiD.js} +1 -1
  270. zenml/zen_server/dashboard/assets/{page-BXarY9K2.js → page-DLixvR-7.js} +1 -1
  271. zenml/zen_server/dashboard/assets/page-DTlGjgnG.js +1 -0
  272. zenml/zen_server/dashboard/assets/page-Dbpl86h0.js +1 -0
  273. zenml/zen_server/dashboard/assets/{page-MAXyfXBq.js → page-Ddgy6kDS.js} +1 -1
  274. zenml/zen_server/dashboard/assets/page-DtCAfBLy.js +9 -0
  275. zenml/zen_server/dashboard/assets/{page-CKHNAq7z.js → page-Dx16z7nA.js} +1 -1
  276. zenml/zen_server/dashboard/assets/{page-DMSLXKGT.js → page-DzpVUZ8f.js} +1 -1
  277. zenml/zen_server/dashboard/assets/page-McUyYbo1.js +1 -0
  278. zenml/zen_server/dashboard/assets/{page-miU2rhYG.js → page-N4qoPHKb.js} +1 -1
  279. zenml/zen_server/dashboard/assets/page-T1P3RyAR.js +1 -0
  280. zenml/zen_server/dashboard/assets/{page-3qPX9WYH.js → page-bKaULTGG.js} +1 -1
  281. zenml/zen_server/dashboard/assets/page-sbXUJy9t.js +1 -0
  282. zenml/zen_server/dashboard/assets/{persist-CfJMar_k.js → persist-CP0JmYZ4.js} +1 -1
  283. zenml/zen_server/dashboard/assets/{persist-BxIR2XZs.js → persist-DNb5cdrU.js} +1 -1
  284. zenml/zen_server/dashboard/assets/{plus-Bc8eLSDM.js → plus-C9IxgN2M.js} +1 -1
  285. zenml/zen_server/dashboard/assets/{refresh-hfgWPeto.js → refresh-BVu22P_C.js} +1 -1
  286. zenml/zen_server/dashboard/assets/{rocket-SESCGQXm.js → rocket-CONEmRmB.js} +1 -1
  287. zenml/zen_server/dashboard/assets/{sharedSchema-vub0rii3.js → sharedSchema-TMLu-nYQ.js} +1 -1
  288. zenml/zen_server/dashboard/assets/stack-detail-query-xmYxSsUY.js +1 -0
  289. zenml/zen_server/dashboard/assets/{tick-circle-m-hJG8i9.js → tick-circle-CM1ZScbQ.js} +1 -1
  290. zenml/zen_server/dashboard/assets/{trash-DUWZWzse.js → trash-DkJHMOg7.js} +1 -1
  291. zenml/zen_server/dashboard/assets/{update-server-settings-mutation-FGVP7X2U.js → update-server-settings-mutation-DsU8cNVl.js} +1 -1
  292. zenml/zen_server/dashboard/assets/{url-CbAPzsmT.js → url-D5le3J4q.js} +1 -1
  293. zenml/zen_server/dashboard/assets/zod-D89GC_vc.js +1 -0
  294. zenml/zen_server/dashboard/index.html +7 -7
  295. zenml/zen_server/deploy/__init__.py +7 -16
  296. zenml/zen_server/deploy/base_provider.py +46 -73
  297. zenml/zen_server/deploy/{local → daemon}/__init__.py +3 -3
  298. zenml/zen_server/deploy/{local/local_provider.py → daemon/daemon_provider.py} +44 -63
  299. zenml/zen_server/deploy/{local/local_zen_server.py → daemon/daemon_zen_server.py} +50 -28
  300. zenml/zen_server/deploy/deployer.py +90 -171
  301. zenml/zen_server/deploy/deployment.py +20 -12
  302. zenml/zen_server/deploy/docker/docker_provider.py +9 -28
  303. zenml/zen_server/deploy/docker/docker_zen_server.py +19 -9
  304. zenml/zen_server/deploy/helm/Chart.yaml +1 -1
  305. zenml/zen_server/deploy/helm/README.md +2 -2
  306. zenml/zen_server/exceptions.py +11 -0
  307. zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +1 -1
  308. zenml/zen_server/jwt.py +9 -9
  309. zenml/zen_server/routers/artifact_version_endpoints.py +1 -1
  310. zenml/zen_server/routers/auth_endpoints.py +30 -8
  311. zenml/zen_server/routers/runs_endpoints.py +0 -28
  312. zenml/zen_server/routers/stack_components_endpoints.py +1 -1
  313. zenml/zen_server/routers/workspaces_endpoints.py +1 -1
  314. zenml/zen_server/template_execution/runner_entrypoint_configuration.py +7 -4
  315. zenml/zen_server/template_execution/utils.py +8 -63
  316. zenml/zen_server/utils.py +67 -69
  317. zenml/zen_server/zen_server_api.py +107 -17
  318. zenml/zen_stores/base_zen_store.py +4 -51
  319. zenml/zen_stores/migrations/versions/0.67.0_release.py +23 -0
  320. zenml/zen_stores/migrations/versions/0.68.0_release.py +23 -0
  321. zenml/zen_stores/migrations/versions/0.68.1_release.py +23 -0
  322. zenml/zen_stores/migrations/versions/1d8f30c54477_migrate_to_new_.py +124 -0
  323. zenml/zen_stores/migrations/versions/c22561cbb3a9_add_artifact_unique_constraints.py +86 -0
  324. zenml/zen_stores/rest_zen_store.py +325 -147
  325. zenml/zen_stores/schemas/api_key_schemas.py +9 -4
  326. zenml/zen_stores/schemas/artifact_schemas.py +21 -2
  327. zenml/zen_stores/schemas/artifact_visualization_schemas.py +1 -1
  328. zenml/zen_stores/schemas/component_schemas.py +49 -6
  329. zenml/zen_stores/schemas/device_schemas.py +9 -4
  330. zenml/zen_stores/schemas/flavor_schemas.py +1 -1
  331. zenml/zen_stores/schemas/model_schemas.py +1 -1
  332. zenml/zen_stores/schemas/pipeline_run_schemas.py +12 -4
  333. zenml/zen_stores/schemas/service_schemas.py +1 -1
  334. zenml/zen_stores/schemas/step_run_schemas.py +3 -3
  335. zenml/zen_stores/schemas/trigger_schemas.py +1 -1
  336. zenml/zen_stores/sql_zen_store.py +422 -145
  337. zenml/zen_stores/template_utils.py +3 -1
  338. {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/METADATA +20 -18
  339. {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/RECORD +344 -506
  340. {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/WHEEL +1 -1
  341. zenml/api.py +0 -60
  342. zenml/cli/stack_recipes.py +0 -469
  343. zenml/lineage_graph/__init__.py +0 -34
  344. zenml/lineage_graph/lineage_graph.py +0 -244
  345. zenml/lineage_graph/node/__init__.py +0 -32
  346. zenml/lineage_graph/node/artifact_node.py +0 -51
  347. zenml/lineage_graph/node/step_node.py +0 -41
  348. zenml/model/model_version.py +0 -38
  349. zenml/new/pipelines/code_archive.py +0 -157
  350. zenml/new/pipelines/pipeline_decorator.py +0 -118
  351. zenml/new/steps/step_decorator.py +0 -176
  352. zenml/pipelines/base_pipeline.py +0 -273
  353. zenml/post_execution/__init__.py +0 -30
  354. zenml/post_execution/pipeline.py +0 -55
  355. zenml/post_execution/pipeline_run.py +0 -55
  356. zenml/services/terraform/__init__.py +0 -14
  357. zenml/services/terraform/terraform_service.py +0 -441
  358. zenml/steps/external_artifact.py +0 -26
  359. zenml/steps/step_environment.py +0 -108
  360. zenml/steps/step_output.py +0 -36
  361. zenml/utils/mlstacks_utils.py +0 -635
  362. zenml/utils/terraform_utils.py +0 -43
  363. zenml/zen_server/dashboard/assets/@radix-DnFH_oo1.js +0 -85
  364. zenml/zen_server/dashboard/assets/@react-router-APVeuk-U.js +0 -29
  365. zenml/zen_server/dashboard/assets/@reactflow-ytavUpwh.js +0 -17
  366. zenml/zen_server/dashboard/assets/@tanstack-QbMbTrh5.js +0 -22
  367. zenml/zen_server/dashboard/assets/ComponentBadge-gKR1OIwG.js +0 -1
  368. zenml/zen_server/dashboard/assets/ExecutionStatus-D6r6aK8J.js +0 -1
  369. zenml/zen_server/dashboard/assets/MarkdownVisualization-DS05sfBm.js +0 -14
  370. zenml/zen_server/dashboard/assets/SearchField-BzmfxS0L.js +0 -1
  371. zenml/zen_server/dashboard/assets/all-pipeline-runs-query-BA3R2Sey.js +0 -1
  372. zenml/zen_server/dashboard/assets/delete-run-CP0pcJ3U.js +0 -1
  373. zenml/zen_server/dashboard/assets/index-BhJ6ZJxv.css +0 -1
  374. zenml/zen_server/dashboard/assets/index-Ci0nJ8EZ.js +0 -55
  375. zenml/zen_server/dashboard/assets/index.esm-BE1uqCX5.js +0 -1
  376. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-Df6ckaLK.woff2 +0 -0
  377. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-JrS_4yms.woff +0 -0
  378. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-BRrLR67x.woff2 +0 -0
  379. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DskEQOpE.woff +0 -0
  380. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-DDpWG8g5.woff2 +0 -0
  381. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-iz1--dBq.woff +0 -0
  382. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-CzG7Kr3z.woff +0 -0
  383. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-tyfMZHQw.woff2 +0 -0
  384. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-DOnSzjnx.woff2 +0 -0
  385. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-Xebo2OyJ.woff +0 -0
  386. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-DpA2xaRd.woff2 +0 -0
  387. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-KAwcVx6H.woff +0 -0
  388. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DQXyrmoy.woff2 +0 -0
  389. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DvIPHDQ7.woff +0 -0
  390. zenml/zen_server/dashboard/assets/inter-greek-500-normal-BjpBGs91.woff +0 -0
  391. zenml/zen_server/dashboard/assets/inter-greek-500-normal-CmOavsDc.woff2 +0 -0
  392. zenml/zen_server/dashboard/assets/inter-greek-600-normal-B-l8Lzzd.woff2 +0 -0
  393. zenml/zen_server/dashboard/assets/inter-greek-600-normal-BLZsI-P3.woff +0 -0
  394. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-CIdlr5YK.woff2 +0 -0
  395. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-_Rr29XE2.woff +0 -0
  396. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-2pdUafRD.woff2 +0 -0
  397. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-Dtavx3qw.woff +0 -0
  398. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-BmtRFZgT.woff +0 -0
  399. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-CkBLDEl_.woff2 +0 -0
  400. zenml/zen_server/dashboard/assets/inter-latin-400-normal-BT1H-PT_.woff2 +0 -0
  401. zenml/zen_server/dashboard/assets/inter-latin-400-normal-Cdi8t5Mu.woff +0 -0
  402. zenml/zen_server/dashboard/assets/inter-latin-500-normal-D4I8BKCx.woff +0 -0
  403. zenml/zen_server/dashboard/assets/inter-latin-500-normal-kWhwEdDH.woff2 +0 -0
  404. zenml/zen_server/dashboard/assets/inter-latin-600-normal-B2Ssfs8e.woff2 +0 -0
  405. zenml/zen_server/dashboard/assets/inter-latin-600-normal-Dbvh0wvx.woff +0 -0
  406. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-8tIzm-yw.woff +0 -0
  407. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-D3W-OpO-.woff2 +0 -0
  408. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-B9u8Q_zH.woff2 +0 -0
  409. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-SuUkSNTU.woff +0 -0
  410. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-Dg0Bk0Yr.woff +0 -0
  411. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-ao35dkSb.woff2 +0 -0
  412. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-Cnt0N5Vm.woff2 +0 -0
  413. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DIOGfGLL.woff +0 -0
  414. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-0i6yoQMg.woff +0 -0
  415. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-5IkPJ6Nk.woff2 +0 -0
  416. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-BQ_dbMbg.woff +0 -0
  417. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-DjnxGF-L.woff2 +0 -0
  418. zenml/zen_server/dashboard/assets/not-found-DbjllLY_.js +0 -1
  419. zenml/zen_server/dashboard/assets/page-B1n7_W7z.js +0 -1
  420. zenml/zen_server/dashboard/assets/page-BZZhLo2u.js +0 -1
  421. zenml/zen_server/dashboard/assets/page-Bbf_oBjn.js +0 -1
  422. zenml/zen_server/dashboard/assets/page-BjjuBvZG.js +0 -9
  423. zenml/zen_server/dashboard/assets/page-CHaQkFK5.js +0 -1
  424. zenml/zen_server/dashboard/assets/page-CS0SYFK8.js +0 -1
  425. zenml/zen_server/dashboard/assets/page-DGM1CbYT.js +0 -2
  426. zenml/zen_server/dashboard/assets/page-DOmIZ2ra.js +0 -1
  427. zenml/zen_server/dashboard/assets/page-DYVmJ9_w.js +0 -3
  428. zenml/zen_server/dashboard/assets/page-Dwow2doB.js +0 -1
  429. zenml/zen_server/dashboard/assets/stack-detail-query-DQcyzG-2.js +0 -1
  430. zenml/zen_server/dashboard/assets/zod-uFd1wBcd.js +0 -1
  431. zenml/zen_server/dashboard_legacy/_redirects +0 -1
  432. zenml/zen_server/dashboard_legacy/asset-manifest.json +0 -131
  433. zenml/zen_server/dashboard_legacy/favicon.ico +0 -0
  434. zenml/zen_server/dashboard_legacy/index.html +0 -1
  435. zenml/zen_server/dashboard_legacy/manifest.json +0 -25
  436. zenml/zen_server/dashboard_legacy/precache-manifest.6d320abb70db612019dda6c4948e7a90.js +0 -462
  437. zenml/zen_server/dashboard_legacy/robots.txt +0 -2
  438. zenml/zen_server/dashboard_legacy/service-worker.js +0 -39
  439. zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css +0 -16
  440. zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css.map +0 -1
  441. zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css +0 -2
  442. zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css.map +0 -1
  443. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js +0 -3
  444. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.LICENSE.txt +0 -95
  445. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.map +0 -1
  446. zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js +0 -2
  447. zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js.map +0 -1
  448. zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js +0 -2
  449. zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js.map +0 -1
  450. zenml/zen_server/dashboard_legacy/static/media/AlertTriangle.28aee535.svg +0 -5
  451. zenml/zen_server/dashboard_legacy/static/media/ArrowSquareOut.abfb9bc7.svg +0 -5
  452. zenml/zen_server/dashboard_legacy/static/media/Back.86c23a22.svg +0 -4
  453. zenml/zen_server/dashboard_legacy/static/media/BookOpen.5cb101ff.svg +0 -4
  454. zenml/zen_server/dashboard_legacy/static/media/BoundingBox.1eb98717.svg +0 -10
  455. zenml/zen_server/dashboard_legacy/static/media/Burger.9b1c67d7.svg +0 -3
  456. zenml/zen_server/dashboard_legacy/static/media/Cached.2381fb8d.svg +0 -1
  457. zenml/zen_server/dashboard_legacy/static/media/Calendar.356e11c7.svg +0 -3
  458. zenml/zen_server/dashboard_legacy/static/media/ChartBarHorizontal.0247447b.svg +0 -6
  459. zenml/zen_server/dashboard_legacy/static/media/ChartLine.0d79e18d.svg +0 -4
  460. zenml/zen_server/dashboard_legacy/static/media/ChatDots.2e1c9211.svg +0 -6
  461. zenml/zen_server/dashboard_legacy/static/media/Check.dad6beb2.svg +0 -3
  462. zenml/zen_server/dashboard_legacy/static/media/CheckCircleFilled.c19566d0.svg +0 -3
  463. zenml/zen_server/dashboard_legacy/static/media/Checkbox.af50e31e.svg +0 -3
  464. zenml/zen_server/dashboard_legacy/static/media/ChevronDown.f860ce32.svg +0 -3
  465. zenml/zen_server/dashboard_legacy/static/media/ChevronDownLight.6642d756.svg +0 -3
  466. zenml/zen_server/dashboard_legacy/static/media/ChevronLeft.f6edfcdb.svg +0 -3
  467. zenml/zen_server/dashboard_legacy/static/media/CircleCheck.f98fd6ca.svg +0 -1
  468. zenml/zen_server/dashboard_legacy/static/media/Clock.ffc9de95.svg +0 -3
  469. zenml/zen_server/dashboard_legacy/static/media/Close.74e9efbc.svg +0 -5
  470. zenml/zen_server/dashboard_legacy/static/media/CloseWithBorder.6960930a.svg +0 -3
  471. zenml/zen_server/dashboard_legacy/static/media/CloseWithoutBorder.cd6f71df.svg +0 -3
  472. zenml/zen_server/dashboard_legacy/static/media/CloudArrowUp.0aecb235.svg +0 -6
  473. zenml/zen_server/dashboard_legacy/static/media/Code.ef0f33b5.svg +0 -3
  474. zenml/zen_server/dashboard_legacy/static/media/Config.0be63f8a.svg +0 -1
  475. zenml/zen_server/dashboard_legacy/static/media/Connector.9fd46ef1.svg +0 -10
  476. zenml/zen_server/dashboard_legacy/static/media/Copy.36e2112a.svg +0 -1
  477. zenml/zen_server/dashboard_legacy/static/media/Dashboard.d05787e0.svg +0 -3
  478. zenml/zen_server/dashboard_legacy/static/media/Data.b1c3b5f8.svg +0 -3
  479. zenml/zen_server/dashboard_legacy/static/media/Delete.3c361b28.svg +0 -8
  480. zenml/zen_server/dashboard_legacy/static/media/Docs.7541d478.svg +0 -7
  481. zenml/zen_server/dashboard_legacy/static/media/Download.fba04d87.svg +0 -5
  482. zenml/zen_server/dashboard_legacy/static/media/Edit.490eb294.svg +0 -6
  483. zenml/zen_server/dashboard_legacy/static/media/EmptyRightArrow.23749d01.svg +0 -3
  484. zenml/zen_server/dashboard_legacy/static/media/Example.6396cd37.svg +0 -5
  485. zenml/zen_server/dashboard_legacy/static/media/Extension.1394cd4a.svg +0 -3
  486. zenml/zen_server/dashboard_legacy/static/media/Eye.d9e4ee62.svg +0 -4
  487. zenml/zen_server/dashboard_legacy/static/media/Failed.0213c1a0.svg +0 -1
  488. zenml/zen_server/dashboard_legacy/static/media/FileText.1f15bacd.svg +0 -7
  489. zenml/zen_server/dashboard_legacy/static/media/Filter.ab6b9c0d.svg +0 -3
  490. zenml/zen_server/dashboard_legacy/static/media/Folders.12b29887.svg +0 -5
  491. zenml/zen_server/dashboard_legacy/static/media/FunnelFill.6df4c143.svg +0 -3
  492. zenml/zen_server/dashboard_legacy/static/media/GitCommit.7dd9c2aa.svg +0 -5
  493. zenml/zen_server/dashboard_legacy/static/media/GitHub_Logo.cefc2023.png +0 -0
  494. zenml/zen_server/dashboard_legacy/static/media/Graph.2c63a892.svg +0 -11
  495. zenml/zen_server/dashboard_legacy/static/media/History.08329240.svg +0 -3
  496. zenml/zen_server/dashboard_legacy/static/media/Home.0843b0d5.svg +0 -3
  497. zenml/zen_server/dashboard_legacy/static/media/ImageBuilder.ea762d9c.svg +0 -6
  498. zenml/zen_server/dashboard_legacy/static/media/InProgress.304a0edc.svg +0 -1
  499. zenml/zen_server/dashboard_legacy/static/media/Info.9fe10c5c.svg +0 -3
  500. zenml/zen_server/dashboard_legacy/static/media/KeyboardReturn.491afbe3.svg +0 -3
  501. zenml/zen_server/dashboard_legacy/static/media/Link.72bbb55d.svg +0 -4
  502. zenml/zen_server/dashboard_legacy/static/media/Lock.30f5e1fe.svg +0 -5
  503. zenml/zen_server/dashboard_legacy/static/media/Lock2.a769ea52.svg +0 -3
  504. zenml/zen_server/dashboard_legacy/static/media/LockKey.92f21621.svg +0 -6
  505. zenml/zen_server/dashboard_legacy/static/media/Logs.8bf4d005.svg +0 -5
  506. zenml/zen_server/dashboard_legacy/static/media/MinusCircle.4188f418.svg +0 -4
  507. zenml/zen_server/dashboard_legacy/static/media/ModelRegistry.f0de050a.svg +0 -6
  508. zenml/zen_server/dashboard_legacy/static/media/MultiUser.a2ba7c67.svg +0 -10
  509. zenml/zen_server/dashboard_legacy/static/media/PaginationFirst.92628634.svg +0 -4
  510. zenml/zen_server/dashboard_legacy/static/media/PaginationLast.00d3c732.svg +0 -4
  511. zenml/zen_server/dashboard_legacy/static/media/PaginationNext.86158845.svg +0 -3
  512. zenml/zen_server/dashboard_legacy/static/media/PaginationPrev.60c18a88.svg +0 -3
  513. zenml/zen_server/dashboard_legacy/static/media/Pen.f2d831d4.svg +0 -6
  514. zenml/zen_server/dashboard_legacy/static/media/PhotoCamera.179d6d4c.svg +0 -3
  515. zenml/zen_server/dashboard_legacy/static/media/Pipeline.30d298b0.svg +0 -7
  516. zenml/zen_server/dashboard_legacy/static/media/Plus.5aa1c16b.svg +0 -3
  517. zenml/zen_server/dashboard_legacy/static/media/PlusCircle.92d860dd.svg +0 -5
  518. zenml/zen_server/dashboard_legacy/static/media/Repositories.71a36b8c.svg +0 -3
  519. zenml/zen_server/dashboard_legacy/static/media/RightArrow.f30d3871.svg +0 -29
  520. zenml/zen_server/dashboard_legacy/static/media/Rocket.63bf7b9d.svg +0 -3
  521. zenml/zen_server/dashboard_legacy/static/media/RocketLaunch.1bff2b59.svg +0 -6
  522. zenml/zen_server/dashboard_legacy/static/media/Rubik-Medium.c87313aa.ttf +0 -0
  523. zenml/zen_server/dashboard_legacy/static/media/Rubik-Regular.b3d0902b.ttf +0 -0
  524. zenml/zen_server/dashboard_legacy/static/media/Run.daec4fb2.svg +0 -6
  525. zenml/zen_server/dashboard_legacy/static/media/Search.d1afcce5.svg +0 -4
  526. zenml/zen_server/dashboard_legacy/static/media/Settings.59ca73ae.svg +0 -4
  527. zenml/zen_server/dashboard_legacy/static/media/Share2.46c3ff66.svg +0 -3
  528. zenml/zen_server/dashboard_legacy/static/media/SignOut.6aa718c5.svg +0 -3
  529. zenml/zen_server/dashboard_legacy/static/media/SimplePlus.5cf7ec20.svg +0 -3
  530. zenml/zen_server/dashboard_legacy/static/media/SingleUser.bef3a095.svg +0 -4
  531. zenml/zen_server/dashboard_legacy/static/media/SourceCodePro-Regular.b484b32f.ttf +0 -0
  532. zenml/zen_server/dashboard_legacy/static/media/Stack.19b604ac.svg +0 -5
  533. zenml/zen_server/dashboard_legacy/static/media/StackComponent.b1ba90b5.svg +0 -4
  534. zenml/zen_server/dashboard_legacy/static/media/Star.f0c25022.svg +0 -9
  535. zenml/zen_server/dashboard_legacy/static/media/StarOutline.94ca8cd9.svg +0 -3
  536. zenml/zen_server/dashboard_legacy/static/media/Storefront.4b4796fe.svg +0 -3
  537. zenml/zen_server/dashboard_legacy/static/media/Stream.543e3039.svg +0 -3
  538. zenml/zen_server/dashboard_legacy/static/media/SupportAgent.510ddf1f.svg +0 -8
  539. zenml/zen_server/dashboard_legacy/static/media/Table.77033750.svg +0 -6
  540. zenml/zen_server/dashboard_legacy/static/media/Tool.d5785486.svg +0 -3
  541. zenml/zen_server/dashboard_legacy/static/media/UserPlus.741a99d7.svg +0 -6
  542. zenml/zen_server/dashboard_legacy/static/media/Verified.0625b2a0.svg +0 -3
  543. zenml/zen_server/dashboard_legacy/static/media/addNew.4fb6c939.svg +0 -8
  544. zenml/zen_server/dashboard_legacy/static/media/arrowClose.cbd53f3f.svg +0 -3
  545. zenml/zen_server/dashboard_legacy/static/media/arrowOpen.6ceef0af.svg +0 -3
  546. zenml/zen_server/dashboard_legacy/static/media/check_small.30bc0138.svg +0 -3
  547. zenml/zen_server/dashboard_legacy/static/media/circleArrowSideClose.98d6013e.svg +0 -18
  548. zenml/zen_server/dashboard_legacy/static/media/circleArrowSideOpen.63653df6.svg +0 -18
  549. zenml/zen_server/dashboard_legacy/static/media/image.104fd14b.png +0 -0
  550. zenml/zen_server/dashboard_legacy/static/media/imageAddIcon.e83004a9.svg +0 -7
  551. zenml/zen_server/dashboard_legacy/static/media/logo.93333e5c.svg +0 -1
  552. zenml/zen_server/dashboard_legacy/static/media/logo_small.4204397d.svg +0 -3
  553. zenml/zen_server/dashboard_legacy/static/media/logo_white.d4b4414e.svg +0 -20
  554. zenml/zen_server/dashboard_legacy/static/media/notConnected.5e2c8ea7.svg +0 -8
  555. zenml/zen_server/dashboard_legacy/static/media/plugin-fallback.72c294e6.svg +0 -6
  556. zenml/zen_server/dashboard_legacy/static/media/share.bcd998b0.svg +0 -5
  557. zenml/zen_server/dashboard_legacy/static/media/stars.08a9b19a.svg +0 -8
  558. zenml/zen_server/deploy/terraform/__init__.py +0 -41
  559. zenml/zen_server/deploy/terraform/providers/aws_provider.py +0 -61
  560. zenml/zen_server/deploy/terraform/providers/azure_provider.py +0 -59
  561. zenml/zen_server/deploy/terraform/providers/gcp_provider.py +0 -59
  562. zenml/zen_server/deploy/terraform/providers/terraform_provider.py +0 -331
  563. zenml/zen_server/deploy/terraform/recipes/aws/.gitignore +0 -8
  564. zenml/zen_server/deploy/terraform/recipes/aws/helm.tf +0 -20
  565. zenml/zen_server/deploy/terraform/recipes/aws/ingress.tf +0 -30
  566. zenml/zen_server/deploy/terraform/recipes/aws/outputs.tf +0 -7
  567. zenml/zen_server/deploy/terraform/recipes/aws/printf.cmd +0 -2
  568. zenml/zen_server/deploy/terraform/recipes/aws/sql.tf +0 -62
  569. zenml/zen_server/deploy/terraform/recipes/aws/terraform.tf +0 -44
  570. zenml/zen_server/deploy/terraform/recipes/aws/variables.tf +0 -167
  571. zenml/zen_server/deploy/terraform/recipes/aws/vpc.tf +0 -47
  572. zenml/zen_server/deploy/terraform/recipes/aws/zen_server.tf +0 -103
  573. zenml/zen_server/deploy/terraform/recipes/azure/.gitignore +0 -8
  574. zenml/zen_server/deploy/terraform/recipes/azure/helm.tf +0 -20
  575. zenml/zen_server/deploy/terraform/recipes/azure/ingress.tf +0 -30
  576. zenml/zen_server/deploy/terraform/recipes/azure/key_vault.tf +0 -73
  577. zenml/zen_server/deploy/terraform/recipes/azure/outputs.tf +0 -7
  578. zenml/zen_server/deploy/terraform/recipes/azure/printf.cmd +0 -2
  579. zenml/zen_server/deploy/terraform/recipes/azure/rg.tf +0 -36
  580. zenml/zen_server/deploy/terraform/recipes/azure/sql.tf +0 -65
  581. zenml/zen_server/deploy/terraform/recipes/azure/terraform.tf +0 -52
  582. zenml/zen_server/deploy/terraform/recipes/azure/variables.tf +0 -176
  583. zenml/zen_server/deploy/terraform/recipes/azure/zen_server.tf +0 -103
  584. zenml/zen_server/deploy/terraform/recipes/gcp/.gitignore +0 -8
  585. zenml/zen_server/deploy/terraform/recipes/gcp/helm.tf +0 -20
  586. zenml/zen_server/deploy/terraform/recipes/gcp/ingress.tf +0 -30
  587. zenml/zen_server/deploy/terraform/recipes/gcp/outputs.tf +0 -7
  588. zenml/zen_server/deploy/terraform/recipes/gcp/printf.cmd +0 -2
  589. zenml/zen_server/deploy/terraform/recipes/gcp/sql.tf +0 -64
  590. zenml/zen_server/deploy/terraform/recipes/gcp/terraform.tf +0 -44
  591. zenml/zen_server/deploy/terraform/recipes/gcp/variables.tf +0 -171
  592. zenml/zen_server/deploy/terraform/recipes/gcp/zen_server.tf +0 -114
  593. zenml/zen_server/deploy/terraform/terraform_zen_server.py +0 -246
  594. /zenml/{new/pipelines → pipelines}/build_utils.py +0 -0
  595. /zenml/{new/steps → steps}/decorated_step.py +0 -0
  596. {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/LICENSE +0 -0
  597. {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/entry_points.txt +0 -0
@@ -20,6 +20,7 @@ import math
20
20
  import os
21
21
  import re
22
22
  import sys
23
+ import time
23
24
  from datetime import datetime, timezone
24
25
  from functools import lru_cache
25
26
  from pathlib import Path
@@ -93,9 +94,9 @@ from zenml.constants import (
93
94
  ENV_ZENML_DEFAULT_USER_NAME,
94
95
  ENV_ZENML_DEFAULT_USER_PASSWORD,
95
96
  ENV_ZENML_DISABLE_DATABASE_MIGRATION,
96
- ENV_ZENML_LOCAL_SERVER,
97
97
  ENV_ZENML_SERVER,
98
98
  FINISHED_ONBOARDING_SURVEY_KEY,
99
+ MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION,
99
100
  SORT_PIPELINES_BY_LATEST_RUN_KEY,
100
101
  SQL_STORE_BACKUP_DIRECTORY_NAME,
101
102
  TEXT_FIELD_MAX_LENGTH,
@@ -108,6 +109,7 @@ from zenml.enums import (
108
109
  DatabaseBackupStrategy,
109
110
  ExecutionStatus,
110
111
  LoggingLevels,
112
+ MetadataResourceTypes,
111
113
  ModelStages,
112
114
  OnboardingStep,
113
115
  SecretScope,
@@ -134,6 +136,7 @@ from zenml.exceptions import (
134
136
  )
135
137
  from zenml.io import fileio
136
138
  from zenml.logger import get_console_handler, get_logger, get_logging_level
139
+ from zenml.metadata.metadata_types import get_metadata_type
137
140
  from zenml.models import (
138
141
  ActionFilter,
139
142
  ActionRequest,
@@ -973,7 +976,6 @@ class SqlZenStore(BaseZenStore):
973
976
  ValueError: if the filtered page number is out of bounds.
974
977
  RuntimeError: if the schema does not have a `to_model` method.
975
978
  """
976
- query = query.distinct()
977
979
  query = filter_model.apply_filter(query=query, table=table)
978
980
  query = query.distinct()
979
981
 
@@ -1586,10 +1588,10 @@ class SqlZenStore(BaseZenStore):
1586
1588
  # Fetch the deployment ID from the database and use it to replace
1587
1589
  # the one fetched from the global configuration
1588
1590
  model.id = settings.server_id
1591
+ model.name = settings.server_name
1589
1592
  model.active = settings.active
1590
1593
  model.last_user_activity = settings.last_user_activity
1591
- if not handle_bool_env_var(ENV_ZENML_LOCAL_SERVER):
1592
- model.analytics_enabled = settings.enable_analytics
1594
+ model.analytics_enabled = settings.enable_analytics
1593
1595
  return model
1594
1596
 
1595
1597
  def get_deployment_id(self) -> UUID:
@@ -1647,7 +1649,9 @@ class SqlZenStore(BaseZenStore):
1647
1649
  """
1648
1650
  with Session(self.engine) as session:
1649
1651
  settings = self._get_server_settings(session=session)
1650
- return settings.to_model(include_metadata=hydrate)
1652
+ return settings.to_model(
1653
+ include_metadata=hydrate, include_resources=True
1654
+ )
1651
1655
 
1652
1656
  def update_server_settings(
1653
1657
  self, settings_update: ServerSettingsUpdate
@@ -1688,7 +1692,9 @@ class SqlZenStore(BaseZenStore):
1688
1692
  session.commit()
1689
1693
  session.refresh(settings)
1690
1694
 
1691
- return settings.to_model(include_metadata=True)
1695
+ return settings.to_model(
1696
+ include_metadata=True, include_resources=True
1697
+ )
1692
1698
 
1693
1699
  def _update_last_user_activity_timestamp(
1694
1700
  self, last_user_activity: datetime
@@ -2127,7 +2133,9 @@ class SqlZenStore(BaseZenStore):
2127
2133
  session.add(new_api_key)
2128
2134
  session.commit()
2129
2135
 
2130
- api_key_model = new_api_key.to_model(include_metadata=True)
2136
+ api_key_model = new_api_key.to_model(
2137
+ include_metadata=True, include_resources=True
2138
+ )
2131
2139
  api_key_model.set_key(key_value)
2132
2140
  return api_key_model
2133
2141
 
@@ -2155,7 +2163,9 @@ class SqlZenStore(BaseZenStore):
2155
2163
  api_key_name_or_id=api_key_name_or_id,
2156
2164
  session=session,
2157
2165
  )
2158
- return api_key.to_model(include_metadata=hydrate)
2166
+ return api_key.to_model(
2167
+ include_metadata=hydrate, include_resources=True
2168
+ )
2159
2169
 
2160
2170
  def get_internal_api_key(
2161
2171
  self, api_key_id: UUID, hydrate: bool = True
@@ -2179,7 +2189,9 @@ class SqlZenStore(BaseZenStore):
2179
2189
  ).first()
2180
2190
  if api_key is None:
2181
2191
  raise KeyError(f"API key with ID {api_key_id} not found.")
2182
- return api_key.to_internal_model(hydrate=hydrate)
2192
+ return api_key.to_internal_model(
2193
+ include_metadata=hydrate, include_resources=True
2194
+ )
2183
2195
 
2184
2196
  def list_api_keys(
2185
2197
  self,
@@ -2269,7 +2281,9 @@ class SqlZenStore(BaseZenStore):
2269
2281
 
2270
2282
  # Refresh the Model that was just created
2271
2283
  session.refresh(api_key)
2272
- return api_key.to_model(include_metadata=True)
2284
+ return api_key.to_model(
2285
+ include_metadata=True, include_resources=True
2286
+ )
2273
2287
 
2274
2288
  def update_internal_api_key(
2275
2289
  self, api_key_id: UUID, api_key_update: APIKeyInternalUpdate
@@ -2300,7 +2314,9 @@ class SqlZenStore(BaseZenStore):
2300
2314
 
2301
2315
  # Refresh the Model that was just created
2302
2316
  session.refresh(api_key)
2303
- return api_key.to_model(include_metadata=True)
2317
+ return api_key.to_model(
2318
+ include_metadata=True, include_resources=True
2319
+ )
2304
2320
 
2305
2321
  def rotate_api_key(
2306
2322
  self,
@@ -2568,7 +2584,9 @@ class SqlZenStore(BaseZenStore):
2568
2584
 
2569
2585
  session.add(artifact_schema)
2570
2586
  session.commit()
2571
- return artifact_schema.to_model(include_metadata=True)
2587
+ return artifact_schema.to_model(
2588
+ include_metadata=True, include_resources=True
2589
+ )
2572
2590
 
2573
2591
  def get_artifact(
2574
2592
  self, artifact_id: UUID, hydrate: bool = True
@@ -2595,7 +2613,9 @@ class SqlZenStore(BaseZenStore):
2595
2613
  f"Unable to get artifact with ID {artifact_id}: No "
2596
2614
  "artifact with this ID found."
2597
2615
  )
2598
- return artifact.to_model(include_metadata=hydrate)
2616
+ return artifact.to_model(
2617
+ include_metadata=hydrate, include_resources=True
2618
+ )
2599
2619
 
2600
2620
  def list_artifacts(
2601
2621
  self, filter_model: ArtifactFilter, hydrate: bool = False
@@ -2662,7 +2682,9 @@ class SqlZenStore(BaseZenStore):
2662
2682
  session.add(existing_artifact)
2663
2683
  session.commit()
2664
2684
  session.refresh(existing_artifact)
2665
- return existing_artifact.to_model(include_metadata=True)
2685
+ return existing_artifact.to_model(
2686
+ include_metadata=True, include_resources=True
2687
+ )
2666
2688
 
2667
2689
  def delete_artifact(self, artifact_id: UUID) -> None:
2668
2690
  """Deletes an artifact.
@@ -2684,79 +2706,214 @@ class SqlZenStore(BaseZenStore):
2684
2706
 
2685
2707
  # -------------------- Artifact Versions --------------------
2686
2708
 
2709
+ def _get_or_create_artifact_for_name(
2710
+ self, name: str, has_custom_name: bool
2711
+ ) -> ArtifactSchema:
2712
+ """Get or create an artifact with a specific name.
2713
+
2714
+ Args:
2715
+ name: The artifact name.
2716
+ has_custom_name: Whether the artifact has a custom name.
2717
+
2718
+ Returns:
2719
+ Schema of the artifact.
2720
+ """
2721
+ with Session(self.engine) as session:
2722
+ artifact_query = select(ArtifactSchema).where(
2723
+ ArtifactSchema.name == name
2724
+ )
2725
+ artifact = session.exec(artifact_query).first()
2726
+
2727
+ if artifact is None:
2728
+ try:
2729
+ with session.begin_nested():
2730
+ artifact_request = ArtifactRequest(
2731
+ name=name, has_custom_name=has_custom_name
2732
+ )
2733
+ artifact = ArtifactSchema.from_request(
2734
+ artifact_request
2735
+ )
2736
+ session.add(artifact)
2737
+ session.commit()
2738
+ session.refresh(artifact)
2739
+ except IntegrityError:
2740
+ # We failed to create the artifact due to the unique constraint
2741
+ # for artifact names -> The artifact was already created, we can
2742
+ # just fetch it from the DB now
2743
+ artifact = session.exec(artifact_query).one()
2744
+
2745
+ if artifact.has_custom_name is False and has_custom_name:
2746
+ # If a new version with custom name was created for an artifact
2747
+ # that previously had no custom name, we update it.
2748
+ artifact.has_custom_name = True
2749
+ session.commit()
2750
+ session.refresh(artifact)
2751
+
2752
+ return artifact
2753
+
2754
+ def _get_next_numeric_version_for_artifact(
2755
+ self, session: Session, artifact_id: UUID
2756
+ ) -> int:
2757
+ """Get the next numeric version for an artifact.
2758
+
2759
+ Args:
2760
+ session: DB session.
2761
+ artifact_id: ID of the artifact for which to get the next numeric
2762
+ version.
2763
+
2764
+ Returns:
2765
+ The next numeric version.
2766
+ """
2767
+ current_max_version = session.exec(
2768
+ select(func.max(ArtifactVersionSchema.version_number)).where(
2769
+ ArtifactVersionSchema.artifact_id == artifact_id
2770
+ )
2771
+ ).first()
2772
+
2773
+ if current_max_version is None:
2774
+ return 1
2775
+ else:
2776
+ return int(current_max_version) + 1
2777
+
2687
2778
  def create_artifact_version(
2688
2779
  self, artifact_version: ArtifactVersionRequest
2689
2780
  ) -> ArtifactVersionResponse:
2690
- """Creates an artifact version.
2781
+ """Create an artifact version.
2691
2782
 
2692
2783
  Args:
2693
2784
  artifact_version: The artifact version to create.
2694
2785
 
2786
+ Raises:
2787
+ EntityExistsError: If the artifact version already exists.
2788
+
2695
2789
  Returns:
2696
2790
  The created artifact version.
2697
-
2698
- Raises:
2699
- EntityExistsError: if an artifact with the same name and version
2700
- already exists.
2701
2791
  """
2702
- with Session(self.engine) as session:
2703
- # Check if an artifact with the given name and version exists
2704
- def _check(tolerance: int = 0) -> None:
2705
- query = session.exec(
2706
- select(ArtifactVersionSchema)
2707
- .where(
2708
- ArtifactVersionSchema.artifact_id
2709
- == artifact_version.artifact_id
2710
- )
2711
- .where(
2712
- ArtifactVersionSchema.version
2713
- == artifact_version.version
2792
+ if artifact_name := artifact_version.artifact_name:
2793
+ artifact_schema = self._get_or_create_artifact_for_name(
2794
+ name=artifact_name,
2795
+ has_custom_name=artifact_version.has_custom_name,
2796
+ )
2797
+ artifact_version.artifact_id = artifact_schema.id
2798
+
2799
+ assert artifact_version.artifact_id
2800
+
2801
+ artifact_version_id = None
2802
+
2803
+ if artifact_version.version is None:
2804
+ # No explicit version in the request -> We will try to
2805
+ # auto-increment the numeric version of the artifact version
2806
+ remaining_tries = MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION
2807
+ while remaining_tries > 0:
2808
+ remaining_tries -= 1
2809
+ try:
2810
+ with Session(self.engine) as session:
2811
+ artifact_version.version = str(
2812
+ self._get_next_numeric_version_for_artifact(
2813
+ session=session,
2814
+ artifact_id=artifact_version.artifact_id,
2815
+ )
2816
+ )
2817
+
2818
+ artifact_version_schema = (
2819
+ ArtifactVersionSchema.from_request(
2820
+ artifact_version
2821
+ )
2822
+ )
2823
+ session.add(artifact_version_schema)
2824
+ session.commit()
2825
+ artifact_version_id = artifact_version_schema.id
2826
+ except IntegrityError:
2827
+ if remaining_tries == 0:
2828
+ raise EntityExistsError(
2829
+ f"Failed to create version for artifact "
2830
+ f"{artifact_schema.name}. This is most likely "
2831
+ "caused by multiple parallel requests that try "
2832
+ "to create versions for this artifact in the "
2833
+ "database."
2834
+ )
2835
+ else:
2836
+ # Exponential backoff to account for heavy
2837
+ # parallelization
2838
+ sleep_duration = 0.05 * 1.5 ** (
2839
+ MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION
2840
+ - remaining_tries
2841
+ )
2842
+ logger.debug(
2843
+ "Failed to create artifact version %s "
2844
+ "(version %s) due to an integrity error. "
2845
+ "Retrying in %f seconds.",
2846
+ artifact_schema.name,
2847
+ artifact_version.version,
2848
+ sleep_duration,
2849
+ )
2850
+ time.sleep(sleep_duration)
2851
+ else:
2852
+ break
2853
+ else:
2854
+ # An explicit version was specified for the artifact version.
2855
+ # We don't do any incrementing and fail immediately if the
2856
+ # version already exists.
2857
+ with Session(self.engine) as session:
2858
+ try:
2859
+ artifact_version_schema = (
2860
+ ArtifactVersionSchema.from_request(artifact_version)
2714
2861
  )
2715
- )
2716
- existing_artifact = query.fetchmany(tolerance + 1)
2717
- if (
2718
- existing_artifact is not None
2719
- and len(existing_artifact) > tolerance
2720
- ):
2862
+ session.add(artifact_version_schema)
2863
+ session.commit()
2864
+ artifact_version_id = artifact_version_schema.id
2865
+ except IntegrityError:
2721
2866
  raise EntityExistsError(
2722
- f"Unable to create artifact with name "
2723
- f"'{existing_artifact[0].artifact.name}' and version "
2724
- f"'{artifact_version.version}': An artifact with the same "
2725
- "name and version already exists."
2867
+ f"Unable to create artifact version "
2868
+ f"{artifact_schema.name} (version "
2869
+ f"{artifact_version.version}): An artifact with the "
2870
+ "same name and version already exists."
2726
2871
  )
2727
2872
 
2728
- _check()
2729
- # Create the artifact version.
2730
- artifact_version_schema = ArtifactVersionSchema.from_request(
2731
- artifact_version
2732
- )
2733
- session.add(artifact_version_schema)
2873
+ assert artifact_version_id
2734
2874
 
2735
- # Save visualizations of the artifact.
2875
+ with Session(self.engine) as session:
2876
+ # Save visualizations of the artifact
2736
2877
  if artifact_version.visualizations:
2737
2878
  for vis in artifact_version.visualizations:
2738
2879
  vis_schema = ArtifactVisualizationSchema.from_model(
2739
2880
  artifact_visualization_request=vis,
2740
- artifact_version_id=artifact_version_schema.id,
2881
+ artifact_version_id=artifact_version_id,
2741
2882
  )
2742
2883
  session.add(vis_schema)
2743
2884
 
2744
- # Save tags of the artifact.
2885
+ # Save tags of the artifact
2745
2886
  if artifact_version.tags:
2746
2887
  self._attach_tags_to_resource(
2747
2888
  tag_names=artifact_version.tags,
2748
- resource_id=artifact_version_schema.id,
2889
+ resource_id=artifact_version_id,
2749
2890
  resource_type=TaggableResourceTypes.ARTIFACT_VERSION,
2750
2891
  )
2751
2892
 
2752
- try:
2753
- _check(1)
2754
- session.commit()
2755
- except EntityExistsError as e:
2756
- session.rollback()
2757
- raise e
2893
+ # Save metadata of the artifact
2894
+ if artifact_version.metadata:
2895
+ for key, value in artifact_version.metadata.items():
2896
+ run_metadata_schema = RunMetadataSchema(
2897
+ workspace_id=artifact_version.workspace,
2898
+ user_id=artifact_version.user,
2899
+ resource_id=artifact_version_id,
2900
+ resource_type=MetadataResourceTypes.ARTIFACT_VERSION,
2901
+ key=key,
2902
+ value=json.dumps(value),
2903
+ type=get_metadata_type(value),
2904
+ )
2905
+ session.add(run_metadata_schema)
2758
2906
 
2759
- return artifact_version_schema.to_model(include_metadata=True)
2907
+ session.commit()
2908
+ artifact_version_schema = session.exec(
2909
+ select(ArtifactVersionSchema).where(
2910
+ ArtifactVersionSchema.id == artifact_version_id
2911
+ )
2912
+ ).one()
2913
+
2914
+ return artifact_version_schema.to_model(
2915
+ include_metadata=True, include_resources=True
2916
+ )
2760
2917
 
2761
2918
  def get_artifact_version(
2762
2919
  self, artifact_version_id: UUID, hydrate: bool = True
@@ -2866,7 +3023,9 @@ class SqlZenStore(BaseZenStore):
2866
3023
  session.add(existing_artifact_version)
2867
3024
  session.commit()
2868
3025
  session.refresh(existing_artifact_version)
2869
- return existing_artifact_version.to_model(include_metadata=True)
3026
+ return existing_artifact_version.to_model(
3027
+ include_metadata=True, include_resources=True
3028
+ )
2870
3029
 
2871
3030
  def delete_artifact_version(self, artifact_version_id: UUID) -> None:
2872
3031
  """Deletes an artifact version.
@@ -2973,7 +3132,9 @@ class SqlZenStore(BaseZenStore):
2973
3132
  f"{artifact_visualization_id}: "
2974
3133
  f"No artifact visualization with this ID found."
2975
3134
  )
2976
- return artifact_visualization.to_model(include_metadata=hydrate)
3135
+ return artifact_visualization.to_model(
3136
+ include_metadata=hydrate, include_resources=True
3137
+ )
2977
3138
 
2978
3139
  # ------------------------ Code References ------------------------
2979
3140
 
@@ -3005,7 +3166,9 @@ class SqlZenStore(BaseZenStore):
3005
3166
  f"{code_reference_id}: "
3006
3167
  f"No code reference with this ID found."
3007
3168
  )
3008
- return code_reference.to_model(include_metadata=hydrate)
3169
+ return code_reference.to_model(
3170
+ include_metadata=hydrate, include_resources=True
3171
+ )
3009
3172
 
3010
3173
  # --------------------------- Code Repositories ---------------------------
3011
3174
 
@@ -3046,7 +3209,9 @@ class SqlZenStore(BaseZenStore):
3046
3209
  session.commit()
3047
3210
  session.refresh(new_repo)
3048
3211
 
3049
- return new_repo.to_model(include_metadata=True)
3212
+ return new_repo.to_model(
3213
+ include_metadata=True, include_resources=True
3214
+ )
3050
3215
 
3051
3216
  def get_code_repository(
3052
3217
  self, code_repository_id: UUID, hydrate: bool = True
@@ -3077,7 +3242,9 @@ class SqlZenStore(BaseZenStore):
3077
3242
  "ID found."
3078
3243
  )
3079
3244
 
3080
- return repo.to_model(include_metadata=hydrate)
3245
+ return repo.to_model(
3246
+ include_metadata=hydrate, include_resources=True
3247
+ )
3081
3248
 
3082
3249
  def list_code_repositories(
3083
3250
  self,
@@ -3138,7 +3305,9 @@ class SqlZenStore(BaseZenStore):
3138
3305
  session.add(existing_repo)
3139
3306
  session.commit()
3140
3307
 
3141
- return existing_repo.to_model(include_metadata=True)
3308
+ return existing_repo.to_model(
3309
+ include_metadata=True, include_resources=True
3310
+ )
3142
3311
 
3143
3312
  def delete_code_repository(self, code_repository_id: UUID) -> None:
3144
3313
  """Deletes a code repository.
@@ -3193,17 +3362,22 @@ class SqlZenStore(BaseZenStore):
3193
3362
  session=session,
3194
3363
  )
3195
3364
 
3365
+ is_default_stack_component = (
3366
+ component.name == DEFAULT_STACK_AND_COMPONENT_NAME
3367
+ and component.type
3368
+ in {
3369
+ StackComponentType.ORCHESTRATOR,
3370
+ StackComponentType.ARTIFACT_STORE,
3371
+ }
3372
+ )
3196
3373
  # We have to skip the validation of the default components
3197
3374
  # as it creates a loop of initialization.
3198
- if component.name != "default" or (
3199
- component.type != StackComponentType.ORCHESTRATOR
3200
- and component.type != StackComponentType.ARTIFACT_STORE
3201
- ):
3375
+ if not is_default_stack_component:
3202
3376
  from zenml.stack.utils import validate_stack_component_config
3203
3377
 
3204
3378
  validate_stack_component_config(
3205
3379
  configuration_dict=component.configuration,
3206
- flavor_name=component.flavor,
3380
+ flavor=component.flavor,
3207
3381
  component_type=component.type,
3208
3382
  zen_store=self,
3209
3383
  validate_custom_flavors=False,
@@ -3249,21 +3423,8 @@ class SqlZenStore(BaseZenStore):
3249
3423
  )
3250
3424
 
3251
3425
  # Create the component
3252
- new_component = StackComponentSchema(
3253
- name=component.name,
3254
- workspace_id=component.workspace,
3255
- user_id=component.user,
3256
- component_spec_path=component.component_spec_path,
3257
- type=component.type,
3258
- flavor=component.flavor,
3259
- configuration=base64.b64encode(
3260
- json.dumps(component.configuration).encode("utf-8")
3261
- ),
3262
- labels=base64.b64encode(
3263
- json.dumps(component.labels).encode("utf-8")
3264
- ),
3265
- connector=service_connector,
3266
- connector_resource_id=component.connector_resource_id,
3426
+ new_component = StackComponentSchema.from_request(
3427
+ request=component, service_connector=service_connector
3267
3428
  )
3268
3429
 
3269
3430
  session.add(new_component)
@@ -3271,7 +3432,9 @@ class SqlZenStore(BaseZenStore):
3271
3432
 
3272
3433
  session.refresh(new_component)
3273
3434
 
3274
- return new_component.to_model(include_metadata=True)
3435
+ return new_component.to_model(
3436
+ include_metadata=True, include_resources=True
3437
+ )
3275
3438
 
3276
3439
  def get_stack_component(
3277
3440
  self, component_id: UUID, hydrate: bool = True
@@ -3301,7 +3464,9 @@ class SqlZenStore(BaseZenStore):
3301
3464
  f"Stack component with ID {component_id} not found."
3302
3465
  )
3303
3466
 
3304
- return stack_component.to_model(include_metadata=hydrate)
3467
+ return stack_component.to_model(
3468
+ include_metadata=hydrate, include_resources=True
3469
+ )
3305
3470
 
3306
3471
  def list_stack_components(
3307
3472
  self,
@@ -3368,7 +3533,7 @@ class SqlZenStore(BaseZenStore):
3368
3533
 
3369
3534
  validate_stack_component_config(
3370
3535
  configuration_dict=component_update.configuration,
3371
- flavor_name=existing_component.flavor,
3536
+ flavor=existing_component.flavor,
3372
3537
  component_type=StackComponentType(existing_component.type),
3373
3538
  zen_store=self,
3374
3539
  validate_custom_flavors=False,
@@ -3424,7 +3589,9 @@ class SqlZenStore(BaseZenStore):
3424
3589
  session.add(existing_component)
3425
3590
  session.commit()
3426
3591
 
3427
- return existing_component.to_model(include_metadata=True)
3592
+ return existing_component.to_model(
3593
+ include_metadata=True, include_resources=True
3594
+ )
3428
3595
 
3429
3596
  def delete_stack_component(self, component_id: UUID) -> None:
3430
3597
  """Delete a stack component.
@@ -3565,7 +3732,9 @@ class SqlZenStore(BaseZenStore):
3565
3732
  session.commit()
3566
3733
  session.refresh(new_device)
3567
3734
 
3568
- device_model = new_device.to_internal_model(hydrate=True)
3735
+ device_model = new_device.to_internal_model(
3736
+ include_metadata=True, include_resources=True
3737
+ )
3569
3738
  # Replace the hashed user code with the original user code
3570
3739
  device_model.user_code = user_code
3571
3740
  # Replace the hashed device code with the original device code
@@ -3601,7 +3770,9 @@ class SqlZenStore(BaseZenStore):
3601
3770
  "this ID found."
3602
3771
  )
3603
3772
 
3604
- return device.to_model(include_metadata=hydrate)
3773
+ return device.to_model(
3774
+ include_metadata=hydrate, include_resources=True
3775
+ )
3605
3776
 
3606
3777
  def get_internal_authorized_device(
3607
3778
  self,
@@ -3647,7 +3818,9 @@ class SqlZenStore(BaseZenStore):
3647
3818
  "device with this client ID found."
3648
3819
  )
3649
3820
 
3650
- return device.to_internal_model(hydrate=hydrate)
3821
+ return device.to_internal_model(
3822
+ include_metadata=hydrate, include_resources=True
3823
+ )
3651
3824
 
3652
3825
  def list_authorized_devices(
3653
3826
  self,
@@ -3707,7 +3880,9 @@ class SqlZenStore(BaseZenStore):
3707
3880
  session.add(existing_device)
3708
3881
  session.commit()
3709
3882
 
3710
- return existing_device.to_model(include_metadata=True)
3883
+ return existing_device.to_model(
3884
+ include_metadata=True, include_resources=True
3885
+ )
3711
3886
 
3712
3887
  def update_internal_authorized_device(
3713
3888
  self, device_id: UUID, update: OAuthDeviceInternalUpdate
@@ -3745,7 +3920,9 @@ class SqlZenStore(BaseZenStore):
3745
3920
  session.add(existing_device)
3746
3921
  session.commit()
3747
3922
 
3748
- device_model = existing_device.to_internal_model(hydrate=True)
3923
+ device_model = existing_device.to_internal_model(
3924
+ include_metadata=True, include_resources=True
3925
+ )
3749
3926
  if user_code:
3750
3927
  # Replace the hashed user code with the original user code
3751
3928
  device_model.user_code = user_code
@@ -3861,7 +4038,9 @@ class SqlZenStore(BaseZenStore):
3861
4038
  session.add(new_flavor)
3862
4039
  session.commit()
3863
4040
 
3864
- return new_flavor.to_model(include_metadata=True)
4041
+ return new_flavor.to_model(
4042
+ include_metadata=True, include_resources=True
4043
+ )
3865
4044
 
3866
4045
  def get_flavor(
3867
4046
  self, flavor_id: UUID, hydrate: bool = True
@@ -3885,7 +4064,9 @@ class SqlZenStore(BaseZenStore):
3885
4064
  ).first()
3886
4065
  if flavor_in_db is None:
3887
4066
  raise KeyError(f"Flavor with ID {flavor_id} not found.")
3888
- return flavor_in_db.to_model(include_metadata=hydrate)
4067
+ return flavor_in_db.to_model(
4068
+ include_metadata=hydrate, include_resources=True
4069
+ )
3889
4070
 
3890
4071
  def list_flavors(
3891
4072
  self,
@@ -3942,7 +4123,9 @@ class SqlZenStore(BaseZenStore):
3942
4123
 
3943
4124
  # Refresh the Model that was just created
3944
4125
  session.refresh(existing_flavor)
3945
- return existing_flavor.to_model(include_metadata=True)
4126
+ return existing_flavor.to_model(
4127
+ include_metadata=True, include_resources=True
4128
+ )
3946
4129
 
3947
4130
  def delete_flavor(self, flavor_id: UUID) -> None:
3948
4131
  """Delete a flavor.
@@ -4009,7 +4192,9 @@ class SqlZenStore(BaseZenStore):
4009
4192
  f"{logs_id}: "
4010
4193
  f"No logs with this ID found."
4011
4194
  )
4012
- return logs.to_model(include_metadata=hydrate)
4195
+ return logs.to_model(
4196
+ include_metadata=hydrate, include_resources=True
4197
+ )
4013
4198
 
4014
4199
  # ----------------------------- Pipelines -----------------------------
4015
4200
 
@@ -4108,7 +4293,8 @@ class SqlZenStore(BaseZenStore):
4108
4293
  Returns:
4109
4294
  A list of all pipelines matching the filter criteria.
4110
4295
  """
4111
- query = select(PipelineSchema)
4296
+ query: Union[Select[Any], SelectOfScalar[Any]] = select(PipelineSchema)
4297
+ _custom_conversion: Optional[Callable[[Any], PipelineResponse]] = None
4112
4298
 
4113
4299
  column, operand = pipeline_filter_model.sorting_params
4114
4300
  if column == SORT_PIPELINES_BY_LATEST_RUN_KEY:
@@ -4141,7 +4327,12 @@ class SqlZenStore(BaseZenStore):
4141
4327
  sort_clause = asc
4142
4328
 
4143
4329
  query = (
4144
- query.where(PipelineSchema.id == max_date_subquery.c.id)
4330
+ # We need to include the subquery in the select here to
4331
+ # make this query work with the distinct statement. This
4332
+ # result will be removed in the custom conversion function
4333
+ # applied later
4334
+ select(PipelineSchema, max_date_subquery.c.run_or_created)
4335
+ .where(PipelineSchema.id == max_date_subquery.c.id)
4145
4336
  .order_by(sort_clause(max_date_subquery.c.run_or_created))
4146
4337
  # We always add the `id` column as a tiebreaker to ensure a
4147
4338
  # stable, repeatable order of items, otherwise subsequent
@@ -4149,6 +4340,14 @@ class SqlZenStore(BaseZenStore):
4149
4340
  .order_by(col(PipelineSchema.id))
4150
4341
  )
4151
4342
 
4343
+ def _custom_conversion(row: Any) -> PipelineResponse:
4344
+ return cast(
4345
+ PipelineResponse,
4346
+ row[0].to_model(
4347
+ include_metadata=hydrate, include_resources=True
4348
+ ),
4349
+ )
4350
+
4152
4351
  with Session(self.engine) as session:
4153
4352
  return self.filter_and_paginate(
4154
4353
  session=session,
@@ -4156,6 +4355,7 @@ class SqlZenStore(BaseZenStore):
4156
4355
  table=PipelineSchema,
4157
4356
  filter_model=pipeline_filter_model,
4158
4357
  hydrate=hydrate,
4358
+ custom_schema_to_model_conversion=_custom_conversion,
4159
4359
  )
4160
4360
 
4161
4361
  def count_pipelines(self, filter_model: Optional[PipelineFilter]) -> int:
@@ -4267,7 +4467,9 @@ class SqlZenStore(BaseZenStore):
4267
4467
  session.commit()
4268
4468
  session.refresh(new_build)
4269
4469
 
4270
- return new_build.to_model(include_metadata=True)
4470
+ return new_build.to_model(
4471
+ include_metadata=True, include_resources=True
4472
+ )
4271
4473
 
4272
4474
  def get_build(
4273
4475
  self, build_id: UUID, hydrate: bool = True
@@ -4298,7 +4500,9 @@ class SqlZenStore(BaseZenStore):
4298
4500
  "No build with this ID found."
4299
4501
  )
4300
4502
 
4301
- return build.to_model(include_metadata=hydrate)
4503
+ return build.to_model(
4504
+ include_metadata=hydrate, include_resources=True
4505
+ )
4302
4506
 
4303
4507
  def list_builds(
4304
4508
  self,
@@ -4379,7 +4583,9 @@ class SqlZenStore(BaseZenStore):
4379
4583
  session.commit()
4380
4584
  session.refresh(new_deployment)
4381
4585
 
4382
- return new_deployment.to_model(include_metadata=True)
4586
+ return new_deployment.to_model(
4587
+ include_metadata=True, include_resources=True
4588
+ )
4383
4589
 
4384
4590
  def get_deployment(
4385
4591
  self, deployment_id: UUID, hydrate: bool = True
@@ -4410,7 +4616,9 @@ class SqlZenStore(BaseZenStore):
4410
4616
  "No deployment with this ID found."
4411
4617
  )
4412
4618
 
4413
- return deployment.to_model(include_metadata=hydrate)
4619
+ return deployment.to_model(
4620
+ include_metadata=hydrate, include_resources=True
4621
+ )
4414
4622
 
4415
4623
  def list_deployments(
4416
4624
  self,
@@ -4493,7 +4701,7 @@ class SqlZenStore(BaseZenStore):
4493
4701
  raise EntityExistsError(
4494
4702
  f"Unable to create run template in workspace "
4495
4703
  f"'{existing_template.workspace.name}': A run template "
4496
- "with this name already exists."
4704
+ f"with the name '{template.name}' already exists."
4497
4705
  )
4498
4706
 
4499
4707
  deployment = session.exec(
@@ -5285,7 +5493,9 @@ class SqlZenStore(BaseZenStore):
5285
5493
  session.add(run_metadata_schema)
5286
5494
  session.commit()
5287
5495
  return_value.append(
5288
- run_metadata_schema.to_model(include_metadata=True)
5496
+ run_metadata_schema.to_model(
5497
+ include_metadata=True, include_resources=True
5498
+ )
5289
5499
  )
5290
5500
  return return_value
5291
5501
 
@@ -5317,7 +5527,9 @@ class SqlZenStore(BaseZenStore):
5317
5527
  f"{run_metadata_id}: "
5318
5528
  f"No run metadata with this ID found."
5319
5529
  )
5320
- return run_metadata.to_model(include_metadata=hydrate)
5530
+ return run_metadata.to_model(
5531
+ include_metadata=hydrate, include_resources=True
5532
+ )
5321
5533
 
5322
5534
  def list_run_metadata(
5323
5535
  self,
@@ -5360,7 +5572,9 @@ class SqlZenStore(BaseZenStore):
5360
5572
  new_schedule = ScheduleSchema.from_request(schedule)
5361
5573
  session.add(new_schedule)
5362
5574
  session.commit()
5363
- return new_schedule.to_model(include_metadata=True)
5575
+ return new_schedule.to_model(
5576
+ include_metadata=True, include_resources=True
5577
+ )
5364
5578
 
5365
5579
  def get_schedule(
5366
5580
  self, schedule_id: UUID, hydrate: bool = True
@@ -5388,7 +5602,9 @@ class SqlZenStore(BaseZenStore):
5388
5602
  f"Unable to get schedule with ID '{schedule_id}': "
5389
5603
  "No schedule with this ID found."
5390
5604
  )
5391
- return schedule.to_model(include_metadata=hydrate)
5605
+ return schedule.to_model(
5606
+ include_metadata=hydrate, include_resources=True
5607
+ )
5392
5608
 
5393
5609
  def list_schedules(
5394
5610
  self,
@@ -5448,7 +5664,9 @@ class SqlZenStore(BaseZenStore):
5448
5664
  existing_schedule = existing_schedule.update(schedule_update)
5449
5665
  session.add(existing_schedule)
5450
5666
  session.commit()
5451
- return existing_schedule.to_model(include_metadata=True)
5667
+ return existing_schedule.to_model(
5668
+ include_metadata=True, include_resources=True
5669
+ )
5452
5670
 
5453
5671
  def delete_schedule(self, schedule_id: UUID) -> None:
5454
5672
  """Deletes a schedule.
@@ -5914,7 +6132,9 @@ class SqlZenStore(BaseZenStore):
5914
6132
  session.add(new_secret)
5915
6133
  session.commit()
5916
6134
 
5917
- secret_model = new_secret.to_model(include_metadata=True)
6135
+ secret_model = new_secret.to_model(
6136
+ include_metadata=True, include_resources=True
6137
+ )
5918
6138
 
5919
6139
  try:
5920
6140
  # Set the secret values in the configured secrets store
@@ -5954,7 +6174,9 @@ class SqlZenStore(BaseZenStore):
5954
6174
  ).first()
5955
6175
  if secret_in_db is None:
5956
6176
  raise KeyError(f"Secret with ID {secret_id} not found.")
5957
- secret_model = secret_in_db.to_model(include_metadata=hydrate)
6177
+ secret_model = secret_in_db.to_model(
6178
+ include_metadata=hydrate, include_resources=True
6179
+ )
5958
6180
 
5959
6181
  secret_model.set_secrets(self._get_secret_values(secret_id=secret_id))
5960
6182
 
@@ -6057,7 +6279,9 @@ class SqlZenStore(BaseZenStore):
6057
6279
 
6058
6280
  # Refresh the Model that was just created
6059
6281
  session.refresh(existing_secret)
6060
- secret_model = existing_secret.to_model(include_metadata=True)
6282
+ secret_model = existing_secret.to_model(
6283
+ include_metadata=True, include_resources=True
6284
+ )
6061
6285
 
6062
6286
  if secret_update.values is not None:
6063
6287
  # Update the secret values in the configured secrets store
@@ -6273,7 +6497,9 @@ class SqlZenStore(BaseZenStore):
6273
6497
  # on commit an IntegrityError may arise we let it bubble up
6274
6498
  session.commit()
6275
6499
 
6276
- return new_account.to_service_account_model(include_metadata=True)
6500
+ return new_account.to_service_account_model(
6501
+ include_metadata=True, include_resources=True
6502
+ )
6277
6503
 
6278
6504
  def get_service_account(
6279
6505
  self,
@@ -6300,7 +6526,9 @@ class SqlZenStore(BaseZenStore):
6300
6526
  service_account=True,
6301
6527
  )
6302
6528
 
6303
- return account.to_service_account_model(include_metadata=hydrate)
6529
+ return account.to_service_account_model(
6530
+ include_metadata=hydrate, include_resources=True
6531
+ )
6304
6532
 
6305
6533
  def list_service_accounts(
6306
6534
  self,
@@ -6327,7 +6555,7 @@ class SqlZenStore(BaseZenStore):
6327
6555
  table=UserSchema,
6328
6556
  filter_model=filter_model,
6329
6557
  custom_schema_to_model_conversion=lambda user: user.to_service_account_model(
6330
- include_metadata=hydrate
6558
+ include_metadata=hydrate, include_resources=True
6331
6559
  ),
6332
6560
  hydrate=hydrate,
6333
6561
  )
@@ -6389,7 +6617,7 @@ class SqlZenStore(BaseZenStore):
6389
6617
  # Refresh the Model that was just created
6390
6618
  session.refresh(existing_service_account)
6391
6619
  return existing_service_account.to_service_account_model(
6392
- include_metadata=True
6620
+ include_metadata=True, include_resources=True
6393
6621
  )
6394
6622
 
6395
6623
  def delete_service_account(
@@ -6496,7 +6724,9 @@ class SqlZenStore(BaseZenStore):
6496
6724
 
6497
6725
  raise
6498
6726
 
6499
- connector = new_service_connector.to_model(include_metadata=True)
6727
+ connector = new_service_connector.to_model(
6728
+ include_metadata=True, include_resources=True
6729
+ )
6500
6730
  self._populate_connector_type(connector)
6501
6731
 
6502
6732
  return connector
@@ -6530,7 +6760,9 @@ class SqlZenStore(BaseZenStore):
6530
6760
  "found."
6531
6761
  )
6532
6762
 
6533
- connector = service_connector.to_model(include_metadata=hydrate)
6763
+ connector = service_connector.to_model(
6764
+ include_metadata=hydrate, include_resources=True
6765
+ )
6534
6766
  self._populate_connector_type(connector)
6535
6767
  return connector
6536
6768
 
@@ -6744,7 +6976,9 @@ class SqlZenStore(BaseZenStore):
6744
6976
  session.add(existing_connector)
6745
6977
  session.commit()
6746
6978
 
6747
- connector = existing_connector.to_model(include_metadata=True)
6979
+ connector = existing_connector.to_model(
6980
+ include_metadata=True, include_resources=True
6981
+ )
6748
6982
  self._populate_connector_type(connector)
6749
6983
  return connector
6750
6984
 
@@ -7262,7 +7496,7 @@ class SqlZenStore(BaseZenStore):
7262
7496
  hydrate=False,
7263
7497
  )
7264
7498
  need_to_generate_permanent_tokens = (
7265
- orchestrator.flavor.startswith("vm_")
7499
+ orchestrator.flavor_name.startswith("vm_")
7266
7500
  )
7267
7501
  else:
7268
7502
  need_to_generate_permanent_tokens = (
@@ -7518,7 +7752,9 @@ class SqlZenStore(BaseZenStore):
7518
7752
  session=session,
7519
7753
  )
7520
7754
 
7521
- return new_stack_schema.to_model(include_metadata=True)
7755
+ return new_stack_schema.to_model(
7756
+ include_metadata=True, include_resources=True
7757
+ )
7522
7758
 
7523
7759
  except Exception:
7524
7760
  for component_id in components_created_ids:
@@ -7554,7 +7790,9 @@ class SqlZenStore(BaseZenStore):
7554
7790
 
7555
7791
  if stack is None:
7556
7792
  raise KeyError(f"Stack with ID {stack_id} not found.")
7557
- return stack.to_model(include_metadata=hydrate)
7793
+ return stack.to_model(
7794
+ include_metadata=hydrate, include_resources=True
7795
+ )
7558
7796
 
7559
7797
  def list_stacks(
7560
7798
  self,
@@ -7646,7 +7884,9 @@ class SqlZenStore(BaseZenStore):
7646
7884
  session.commit()
7647
7885
  session.refresh(existing_stack)
7648
7886
 
7649
- return existing_stack.to_model(include_metadata=True)
7887
+ return existing_stack.to_model(
7888
+ include_metadata=True, include_resources=True
7889
+ )
7650
7890
 
7651
7891
  def delete_stack(self, stack_id: UUID) -> None:
7652
7892
  """Delete a stack.
@@ -7960,7 +8200,9 @@ class SqlZenStore(BaseZenStore):
7960
8200
 
7961
8201
  session.commit()
7962
8202
 
7963
- return step_schema.to_model(include_metadata=True)
8203
+ return step_schema.to_model(
8204
+ include_metadata=True, include_resources=True
8205
+ )
7964
8206
 
7965
8207
  def get_run_step(
7966
8208
  self, step_run_id: UUID, hydrate: bool = True
@@ -8093,7 +8335,9 @@ class SqlZenStore(BaseZenStore):
8093
8335
  session.commit()
8094
8336
  session.refresh(existing_step_run)
8095
8337
 
8096
- return existing_step_run.to_model(include_metadata=True)
8338
+ return existing_step_run.to_model(
8339
+ include_metadata=True, include_resources=True
8340
+ )
8097
8341
 
8098
8342
  @staticmethod
8099
8343
  def _set_run_step_parent_step(
@@ -8304,6 +8548,14 @@ class SqlZenStore(BaseZenStore):
8304
8548
  num_steps=num_steps,
8305
8549
  )
8306
8550
 
8551
+ if pipeline_run.is_placeholder_run() and not new_status.is_finished:
8552
+ # If the pipeline run is a placeholder run, no step has been started
8553
+ # for the run yet. This means the orchestrator hasn't started
8554
+ # running yet, and this method is most likely being called as
8555
+ # part of the creation of some cached steps. In this case, we don't
8556
+ # update the status unless the run is finished.
8557
+ return
8558
+
8307
8559
  if new_status != pipeline_run.status:
8308
8560
  run_update = PipelineRunUpdate(status=new_status)
8309
8561
  if new_status in {
@@ -8902,7 +9154,9 @@ class SqlZenStore(BaseZenStore):
8902
9154
  },
8903
9155
  )
8904
9156
 
8905
- return new_user.to_model(include_metadata=True)
9157
+ return new_user.to_model(
9158
+ include_metadata=True, include_resources=True
9159
+ )
8906
9160
 
8907
9161
  def get_user(
8908
9162
  self,
@@ -8949,7 +9203,9 @@ class SqlZenStore(BaseZenStore):
8949
9203
  )
8950
9204
 
8951
9205
  return user.to_model(
8952
- include_private=include_private, include_metadata=hydrate
9206
+ include_private=include_private,
9207
+ include_metadata=hydrate,
9208
+ include_resources=True,
8953
9209
  )
8954
9210
 
8955
9211
  def get_auth_user(
@@ -9077,7 +9333,9 @@ class SqlZenStore(BaseZenStore):
9077
9333
 
9078
9334
  # Refresh the Model that was just created
9079
9335
  session.refresh(existing_user)
9080
- updated_user = existing_user.to_model(include_metadata=True)
9336
+ updated_user = existing_user.to_model(
9337
+ include_metadata=True, include_resources=True
9338
+ )
9081
9339
 
9082
9340
  survey_finished_after = (
9083
9341
  FINISHED_ONBOARDING_SURVEY_KEY in updated_user.user_metadata
@@ -9157,10 +9415,9 @@ class SqlZenStore(BaseZenStore):
9157
9415
  * server deployments that set the `auto_activate` server
9158
9416
  setting explicitly to `True`. This includes:
9159
9417
  * local ZenML server deployments: the server is deployed locally
9160
- with `zenml up`
9418
+ with `zenml login --local`
9161
9419
  * local ZenML docker deployments: the server is deployed locally
9162
- with `zenml up --docker`
9163
- * legacy dashboard deployments
9420
+ with `zenml login --local --docker`
9164
9421
 
9165
9422
  For all other cases, or if the external authentication scheme is used,
9166
9423
  no default admin user is created. The user must activate the server and
@@ -9181,7 +9438,7 @@ class SqlZenStore(BaseZenStore):
9181
9438
  # Running inside server with external auth
9182
9439
  return False
9183
9440
 
9184
- if config.auto_activate or config.use_legacy_dashboard:
9441
+ if config.auto_activate:
9185
9442
  return True
9186
9443
 
9187
9444
  else:
@@ -9255,7 +9512,9 @@ class SqlZenStore(BaseZenStore):
9255
9512
  # Explicitly refresh the new_workspace schema
9256
9513
  session.refresh(new_workspace)
9257
9514
 
9258
- workspace_model = new_workspace.to_model(include_metadata=True)
9515
+ workspace_model = new_workspace.to_model(
9516
+ include_metadata=True, include_resources=True
9517
+ )
9259
9518
 
9260
9519
  self._get_or_create_default_stack(workspace=workspace_model)
9261
9520
  return workspace_model
@@ -9277,7 +9536,9 @@ class SqlZenStore(BaseZenStore):
9277
9536
  workspace = self._get_workspace_schema(
9278
9537
  workspace_name_or_id, session=session
9279
9538
  )
9280
- return workspace.to_model(include_metadata=hydrate)
9539
+ return workspace.to_model(
9540
+ include_metadata=hydrate, include_resources=True
9541
+ )
9281
9542
 
9282
9543
  def list_workspaces(
9283
9544
  self,
@@ -9349,7 +9610,9 @@ class SqlZenStore(BaseZenStore):
9349
9610
 
9350
9611
  # Refresh the Model that was just created
9351
9612
  session.refresh(existing_workspace)
9352
- return existing_workspace.to_model(include_metadata=True)
9613
+ return existing_workspace.to_model(
9614
+ include_metadata=True, include_resources=True
9615
+ )
9353
9616
 
9354
9617
  def delete_workspace(self, workspace_name_or_id: Union[str, UUID]) -> None:
9355
9618
  """Deletes a workspace.
@@ -9790,7 +10053,9 @@ class SqlZenStore(BaseZenStore):
9790
10053
  resource_type=TaggableResourceTypes.MODEL,
9791
10054
  )
9792
10055
  session.commit()
9793
- return model_schema.to_model(include_metadata=True)
10056
+ return model_schema.to_model(
10057
+ include_metadata=True, include_resources=True
10058
+ )
9794
10059
 
9795
10060
  def get_model(
9796
10061
  self,
@@ -9819,7 +10084,9 @@ class SqlZenStore(BaseZenStore):
9819
10084
  f"Unable to get model with ID `{model_name_or_id}`: "
9820
10085
  f"No model with this ID found."
9821
10086
  )
9822
- return model.to_model(include_metadata=hydrate)
10087
+ return model.to_model(
10088
+ include_metadata=hydrate, include_resources=True
10089
+ )
9823
10090
 
9824
10091
  def list_models(
9825
10092
  self,
@@ -9915,7 +10182,9 @@ class SqlZenStore(BaseZenStore):
9915
10182
 
9916
10183
  # Refresh the Model that was just created
9917
10184
  session.refresh(existing_model)
9918
- return existing_model.to_model(include_metadata=True)
10185
+ return existing_model.to_model(
10186
+ include_metadata=True, include_resources=True
10187
+ )
9919
10188
 
9920
10189
  # ----------------------------- Model Versions -----------------------------
9921
10190
 
@@ -9993,7 +10262,9 @@ class SqlZenStore(BaseZenStore):
9993
10262
  session.rollback()
9994
10263
  raise e
9995
10264
 
9996
- return model_version_schema.to_model(include_metadata=True)
10265
+ return model_version_schema.to_model(
10266
+ include_metadata=True, include_resources=True
10267
+ )
9997
10268
 
9998
10269
  def get_model_version(
9999
10270
  self, model_version_id: UUID, hydrate: bool = True
@@ -10218,7 +10489,7 @@ class SqlZenStore(BaseZenStore):
10218
10489
  session.add(model_version_artifact_link_schema)
10219
10490
  session.commit()
10220
10491
  return model_version_artifact_link_schema.to_model(
10221
- include_metadata=True
10492
+ include_metadata=True, include_resources=True
10222
10493
  )
10223
10494
 
10224
10495
  def list_model_version_artifact_links(
@@ -10379,7 +10650,7 @@ class SqlZenStore(BaseZenStore):
10379
10650
  session.add(model_version_pipeline_run_link_schema)
10380
10651
  session.commit()
10381
10652
  return model_version_pipeline_run_link_schema.to_model(
10382
- include_metadata=True
10653
+ include_metadata=True, include_resources=True
10383
10654
  )
10384
10655
 
10385
10656
  def list_model_version_pipeline_run_links(
@@ -10543,7 +10814,9 @@ class SqlZenStore(BaseZenStore):
10543
10814
  session.add(tag_schema)
10544
10815
 
10545
10816
  session.commit()
10546
- return tag_schema.to_model(include_metadata=True)
10817
+ return tag_schema.to_model(
10818
+ include_metadata=True, include_resources=True
10819
+ )
10547
10820
 
10548
10821
  def delete_tag(
10549
10822
  self,
@@ -10594,7 +10867,9 @@ class SqlZenStore(BaseZenStore):
10594
10867
  f"Unable to get tag with ID `{tag_name_or_id}`: "
10595
10868
  f"No tag with this ID found."
10596
10869
  )
10597
- return tag.to_model(include_metadata=hydrate)
10870
+ return tag.to_model(
10871
+ include_metadata=hydrate, include_resources=True
10872
+ )
10598
10873
 
10599
10874
  def list_tags(
10600
10875
  self,
@@ -10652,7 +10927,7 @@ class SqlZenStore(BaseZenStore):
10652
10927
 
10653
10928
  # Refresh the tag that was just created
10654
10929
  session.refresh(tag)
10655
- return tag.to_model(include_metadata=True)
10930
+ return tag.to_model(include_metadata=True, include_resources=True)
10656
10931
 
10657
10932
  ####################
10658
10933
  # Tags <> resources
@@ -10695,7 +10970,9 @@ class SqlZenStore(BaseZenStore):
10695
10970
  session.add(tag_resource_schema)
10696
10971
 
10697
10972
  session.commit()
10698
- return tag_resource_schema.to_model(include_metadata=True)
10973
+ return tag_resource_schema.to_model(
10974
+ include_metadata=True, include_resources=True
10975
+ )
10699
10976
 
10700
10977
  def delete_tag_resource(
10701
10978
  self,