zenml-nightly 0.66.0.dev20240928__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 (596) 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/flavors/azureml_orchestrator_flavor.py +5 -4
  47. zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
  48. zenml/integrations/bentoml/model_deployers/bentoml_model_deployer.py +85 -19
  49. zenml/integrations/bentoml/services/__init__.py +15 -4
  50. zenml/integrations/bentoml/services/bentoml_container_deployment.py +399 -0
  51. zenml/integrations/bentoml/services/{bentoml_deployment.py → bentoml_local_deployment.py} +81 -40
  52. zenml/{steps/base_parameters.py → integrations/bentoml/services/deployment_type.py} +8 -5
  53. zenml/integrations/bentoml/steps/bento_builder.py +1 -0
  54. zenml/integrations/bentoml/steps/bentoml_deployer.py +93 -41
  55. zenml/integrations/github/code_repositories/github_code_repository.py +1 -1
  56. zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py +6 -1
  57. zenml/integrations/huggingface/__init__.py +1 -6
  58. zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +3 -3
  59. zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +3 -3
  60. zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +2 -2
  61. zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +6 -3
  62. zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +6 -0
  63. zenml/integrations/mlflow/services/mlflow_deployment.py +2 -2
  64. zenml/integrations/mlflow/steps/mlflow_deployer.py +1 -1
  65. zenml/integrations/mlflow/steps/mlflow_registry.py +1 -1
  66. zenml/integrations/neptune/experiment_trackers/run_state.py +2 -2
  67. zenml/integrations/pytorch/materializers/base_pytorch_materializer.py +8 -2
  68. zenml/integrations/pytorch/materializers/pytorch_module_materializer.py +4 -1
  69. zenml/integrations/s3/artifact_stores/s3_artifact_store.py +98 -0
  70. zenml/integrations/s3/flavors/s3_artifact_store_flavor.py +14 -0
  71. zenml/integrations/s3/utils.py +40 -0
  72. zenml/integrations/tensorflow/__init__.py +0 -9
  73. zenml/logging/step_logging.py +13 -15
  74. zenml/{new/pipelines → login}/__init__.py +4 -1
  75. zenml/login/credentials.py +346 -0
  76. zenml/login/credentials_store.py +603 -0
  77. zenml/{new → login/pro}/__init__.py +4 -1
  78. zenml/login/pro/client.py +496 -0
  79. zenml/login/pro/constants.py +34 -0
  80. zenml/{lineage_graph/edge.py → login/pro/models.py} +9 -8
  81. zenml/{zen_server/deploy/terraform/providers → login/pro/organization}/__init__.py +2 -2
  82. zenml/login/pro/organization/client.py +79 -0
  83. zenml/{lineage_graph/node/base_node.py → login/pro/organization/models.py} +13 -12
  84. zenml/{new/steps → login/pro/tenant}/__init__.py +2 -1
  85. zenml/login/pro/tenant/client.py +92 -0
  86. zenml/login/pro/tenant/models.py +174 -0
  87. zenml/login/pro/utils.py +121 -0
  88. zenml/{cli → login}/web_login.py +64 -28
  89. zenml/materializers/__init__.py +2 -0
  90. zenml/materializers/base_materializer.py +43 -9
  91. zenml/materializers/built_in_materializer.py +1 -1
  92. zenml/materializers/uuid_materializer.py +79 -0
  93. zenml/metadata/lazy_load.py +10 -7
  94. zenml/metadata/metadata_types.py +49 -0
  95. zenml/model/lazy_load.py +85 -4
  96. zenml/model/model.py +61 -83
  97. zenml/model/utils.py +47 -118
  98. zenml/models/__init__.py +6 -0
  99. zenml/models/v2/base/base.py +12 -8
  100. zenml/models/v2/base/filter.py +9 -0
  101. zenml/models/v2/core/artifact_version.py +53 -25
  102. zenml/models/v2/core/component.py +54 -19
  103. zenml/models/v2/core/flavor.py +13 -13
  104. zenml/models/v2/core/model.py +4 -1
  105. zenml/models/v2/core/model_version.py +4 -6
  106. zenml/models/v2/core/model_version_artifact.py +3 -1
  107. zenml/models/v2/core/model_version_pipeline_run.py +3 -1
  108. zenml/models/v2/core/pipeline.py +3 -1
  109. zenml/models/v2/core/pipeline_run.py +24 -3
  110. zenml/models/v2/core/run_metadata.py +2 -2
  111. zenml/models/v2/core/run_template.py +3 -1
  112. zenml/models/v2/core/stack.py +7 -3
  113. zenml/models/v2/core/step_run.py +58 -14
  114. zenml/models/v2/misc/auth_models.py +11 -2
  115. zenml/models/v2/misc/server_models.py +2 -4
  116. zenml/orchestrators/base_orchestrator.py +41 -4
  117. zenml/orchestrators/input_utils.py +52 -36
  118. zenml/orchestrators/step_launcher.py +50 -171
  119. zenml/orchestrators/step_run_utils.py +574 -0
  120. zenml/orchestrators/step_runner.py +83 -120
  121. zenml/orchestrators/utils.py +46 -180
  122. zenml/pipelines/__init__.py +3 -16
  123. zenml/{new/pipelines → pipelines}/pipeline_context.py +3 -18
  124. zenml/pipelines/pipeline_decorator.py +34 -60
  125. zenml/{new/pipelines/pipeline.py → pipelines/pipeline_definition.py} +210 -207
  126. zenml/{new/pipelines → pipelines}/run_utils.py +11 -10
  127. zenml/services/local/local_daemon_entrypoint.py +4 -4
  128. zenml/services/service.py +2 -2
  129. zenml/stack/stack.py +3 -108
  130. zenml/stack/stack_component.py +2 -78
  131. zenml/stack/utils.py +26 -14
  132. zenml/stack_deployments/aws_stack_deployment.py +3 -0
  133. zenml/step_operators/step_operator_entrypoint_configuration.py +1 -1
  134. zenml/steps/__init__.py +3 -9
  135. zenml/steps/base_step.py +25 -267
  136. zenml/steps/entrypoint_function_utils.py +2 -80
  137. zenml/{new/steps → steps}/step_context.py +12 -66
  138. zenml/steps/step_decorator.py +42 -89
  139. zenml/steps/step_invocation.py +16 -60
  140. zenml/steps/utils.py +4 -23
  141. zenml/utils/dashboard_utils.py +16 -51
  142. zenml/utils/materializer_utils.py +1 -1
  143. zenml/utils/requirements_utils.py +71 -0
  144. zenml/utils/singleton.py +15 -3
  145. zenml/utils/source_utils.py +39 -2
  146. zenml/utils/typing_utils.py +8 -28
  147. zenml/utils/visualization_utils.py +1 -1
  148. zenml/zen_server/auth.py +44 -39
  149. zenml/zen_server/dashboard/assets/{404-Y50hSt65.js → 404-DT4QRUqN.js} +1 -1
  150. zenml/zen_server/dashboard/assets/@radix-DP6vWzyx.js +85 -0
  151. zenml/zen_server/dashboard/assets/@react-router-BMhZulnd.js +29 -0
  152. zenml/zen_server/dashboard/assets/@reactflow-8U9qNlMR.js +17 -0
  153. zenml/zen_server/dashboard/assets/@tanstack-BUCbhJyH.js +22 -0
  154. zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-xLR9a1iw.js → AlertDialogDropdownItem-C6N2rGrB.js} +1 -1
  155. zenml/zen_server/dashboard/assets/{CodeSnippet-IxXNxUDa.js → CodeSnippet-CqybNv0k.js} +1 -1
  156. zenml/zen_server/dashboard/assets/{CollapsibleCard-BhutZbBL.js → CollapsibleCard-0r_8G2Lj.js} +1 -1
  157. zenml/zen_server/dashboard/assets/{Commands-Bf-rd1z8.js → Commands-BDjgBQKi.js} +1 -1
  158. zenml/zen_server/dashboard/assets/ComponentBadge-DUiEYJHu.js +1 -0
  159. zenml/zen_server/dashboard/assets/ComponentFallbackDialog-BFoH5K4V.js +1 -0
  160. zenml/zen_server/dashboard/assets/ComponentIcon-CAIoUis2.js +1 -0
  161. zenml/zen_server/dashboard/assets/{CopyButton-DcFHidFJ.js → CopyButton-C745BrKi.js} +1 -1
  162. zenml/zen_server/dashboard/assets/{CsvVizualization-QSbjrfxw.js → CsvVizualization-PpAq0CeZ.js} +5 -5
  163. zenml/zen_server/dashboard/assets/{DialogItem-Cd3HqST4.js → DialogItem-DcVCZEew.js} +1 -1
  164. zenml/zen_server/dashboard/assets/{DisplayDate-DkCy54Bp.js → DisplayDate-BeXgUG_C.js} +1 -1
  165. zenml/zen_server/dashboard/assets/{EmptyState-Cs3DEmso.js → EmptyState-DeK7H4pr.js} +1 -1
  166. zenml/zen_server/dashboard/assets/{Error-BhwdmqK7.js → Error-BMlzibXj.js} +1 -1
  167. zenml/zen_server/dashboard/assets/{Helpbox-0pBpTwTm.js → Helpbox-BLf40fLV.js} +1 -1
  168. zenml/zen_server/dashboard/assets/{Infobox-BTK_EUKT.js → Infobox-BwisKifi.js} +1 -1
  169. zenml/zen_server/dashboard/assets/{InlineAvatar-CA3DFMcM.js → InlineAvatar-jEgodSgX.js} +1 -1
  170. zenml/zen_server/dashboard/assets/{Lock-CmIn0szs.js → Lock-3lLt1ih0.js} +1 -1
  171. zenml/zen_server/dashboard/assets/MarkdownVisualization-8O9kTr-2.js +14 -0
  172. zenml/zen_server/dashboard/assets/{NumberBox-CrN0_kqI.js → NumberBox-T9eELfLZ.js} +1 -1
  173. zenml/zen_server/dashboard/assets/{Partials-QLOZw624.js → Partials-YPBB3V4q.js} +1 -1
  174. zenml/zen_server/dashboard/assets/{PasswordChecker-DE71J_3F.js → PasswordChecker-CW0kqY0W.js} +1 -1
  175. zenml/zen_server/dashboard/assets/{ProviderIcon-C16CCIN4.js → ProviderIcon-Bb3Xha5A.js} +1 -1
  176. zenml/zen_server/dashboard/assets/{ProviderRadio-D3FuCHf3.js → ProviderRadio-BROY1700.js} +1 -1
  177. zenml/zen_server/dashboard/assets/RunSelector-DCiL3M1c.js +1 -0
  178. zenml/zen_server/dashboard/assets/SearchField-DfUiGFVd.js +1 -0
  179. zenml/zen_server/dashboard/assets/{SecretTooltip-BaMwHF-Q.js → SecretTooltip-C_qByGWB.js} +1 -1
  180. zenml/zen_server/dashboard/assets/{SetPassword-DuIC65H9.js → SetPassword-7pRB00El.js} +1 -1
  181. zenml/zen_server/dashboard/assets/{Tick-DJTCF0Re.js → Tick-CykQFPj2.js} +1 -1
  182. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-CUm-DMpw.js → UpdatePasswordSchemas-DckMEkFf.js} +1 -1
  183. zenml/zen_server/dashboard/assets/{UsageReason-CKw0juLF.js → UsageReason-DVceN14P.js} +1 -1
  184. zenml/zen_server/dashboard/assets/{WizardFooter-Cv9ApYWU.js → WizardFooter-CW0Cvd70.js} +1 -1
  185. zenml/zen_server/dashboard/assets/{check-circle-DOoS4yhF.js → check-circle-Dwxliy1Z.js} +1 -1
  186. zenml/zen_server/dashboard/assets/{chevron-down-Cwb-W_B_.js → chevron-down-8wLBS5pQ.js} +1 -1
  187. zenml/zen_server/dashboard/assets/{chevron-right-double-c9H46Kl8.js → chevron-right-double-DoD8iXWM.js} +1 -1
  188. zenml/zen_server/dashboard/assets/{cloud-only-BB4BVa6E.js → cloud-only-B-s_HMDm.js} +1 -1
  189. zenml/zen_server/dashboard/assets/{code-browser-BJYErIjr.js → code-browser-CZUQs3Wa.js} +1 -1
  190. zenml/zen_server/dashboard/assets/{copy-CaGlDsUy.js → copy-CaSMXwiU.js} +1 -1
  191. zenml/zen_server/dashboard/assets/{create-stack-F29xAUEx.js → create-stack-CEmaPZ4c.js} +1 -1
  192. zenml/zen_server/dashboard/assets/delete-run-D-LKbGyz.js +1 -0
  193. zenml/zen_server/dashboard/assets/{docker-BFAFXr2_.js → docker-BFNgg-z3.js} +1 -1
  194. zenml/zen_server/dashboard/assets/{dots-horizontal-C6K59vUm.js → dots-horizontal-DK5Duzx4.js} +1 -1
  195. zenml/zen_server/dashboard/assets/{form-schemas-BKXwSDK2.js → form-schemas-1AyOCx90.js} +1 -1
  196. zenml/zen_server/dashboard/assets/{gcp-Dj6ntk0L.js → gcp-7M2Yf3ZK.js} +1 -1
  197. zenml/zen_server/dashboard/assets/{help-CwN931fX.js → help-Dam461dC.js} +1 -1
  198. zenml/zen_server/dashboard/assets/{index-5GJ5ysEZ.js → index-BVJ8n2-j.js} +1 -1
  199. zenml/zen_server/dashboard/assets/index-Bpmj40BI.js +1 -0
  200. zenml/zen_server/dashboard/assets/index-CbU4Ln_E.css +1 -0
  201. zenml/zen_server/dashboard/assets/{index-D-mtoBj3.js → index-DKPhqP2B.js} +1 -1
  202. zenml/zen_server/dashboard/assets/index-QQb7wQEC.js +55 -0
  203. zenml/zen_server/dashboard/assets/index.esm-cuVep_NJ.js +1 -0
  204. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-BLGc9T1a.woff2 +0 -0
  205. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-ZzOtrSSW.woff +0 -0
  206. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-D4Vwzodn.woff2 +0 -0
  207. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DH2hs3aW.woff +0 -0
  208. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BGBWG807.woff2 +0 -0
  209. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BuzJQFbW.woff +0 -0
  210. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-BPnxn4xp.woff +0 -0
  211. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-Dc4VJyIJ.woff2 +0 -0
  212. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-BShVwWPj.woff2 +0 -0
  213. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-CUiC4oBV.woff +0 -0
  214. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-Bt9VVOA-.woff +0 -0
  215. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-CaqZN2hq.woff2 +0 -0
  216. zenml/zen_server/dashboard/assets/inter-greek-400-normal-BZzXV7-1.woff +0 -0
  217. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DxZsaF_h.woff2 +0 -0
  218. zenml/zen_server/dashboard/assets/inter-greek-500-normal-CeQXL5ds.woff2 +0 -0
  219. zenml/zen_server/dashboard/assets/inter-greek-500-normal-d_eO-yCQ.woff +0 -0
  220. zenml/zen_server/dashboard/assets/inter-greek-600-normal-CwicyhtI.woff +0 -0
  221. zenml/zen_server/dashboard/assets/inter-greek-600-normal-Dhlb-90d.woff2 +0 -0
  222. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-Bput3-QP.woff2 +0 -0
  223. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-DCpCPQOf.woff +0 -0
  224. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-B6guLgqG.woff2 +0 -0
  225. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-M2hEX8vc.woff +0 -0
  226. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-C9WLioJ8.woff +0 -0
  227. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-Cnui8OiR.woff2 +0 -0
  228. zenml/zen_server/dashboard/assets/inter-latin-400-normal-BOOGhInR.woff2 +0 -0
  229. zenml/zen_server/dashboard/assets/inter-latin-400-normal-gitzw0hO.woff +0 -0
  230. zenml/zen_server/dashboard/assets/inter-latin-500-normal-D2bGa7uu.woff2 +0 -0
  231. zenml/zen_server/dashboard/assets/inter-latin-500-normal-deR1Tlfd.woff +0 -0
  232. zenml/zen_server/dashboard/assets/inter-latin-600-normal-B5cFAncS.woff +0 -0
  233. zenml/zen_server/dashboard/assets/inter-latin-600-normal-D273HNI0.woff2 +0 -0
  234. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-C1t-h-pH.woff +0 -0
  235. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-hnt3BR84.woff2 +0 -0
  236. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2 +0 -0
  237. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-UMdmhHu2.woff +0 -0
  238. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-BnYJhD27.woff2 +0 -0
  239. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-CAF0vJDd.woff +0 -0
  240. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-BUNmGMP1.woff +0 -0
  241. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
  242. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
  243. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DQPw2Hwd.woff +0 -0
  244. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
  245. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cm6aH8_k.woff +0 -0
  246. zenml/zen_server/dashboard/assets/{kubernetes-BjbR6D-1.js → kubernetes--g7r02Zu.js} +1 -1
  247. zenml/zen_server/dashboard/assets/{layout-Dru15_XR.js → layout-DCSYN7-C.js} +1 -1
  248. zenml/zen_server/dashboard/assets/{link-external-BT2L8hAQ.js → link-external-CBEk6kEG.js} +1 -1
  249. zenml/zen_server/dashboard/assets/{login-mutation-ax6iL2Mb.js → login-mutation-DTcAFP1l.js} +1 -1
  250. zenml/zen_server/dashboard/assets/{logs-GiDJXbLS.js → logs-D5bdJGur.js} +1 -1
  251. zenml/zen_server/dashboard/assets/not-found-Cc-JkRH2.js +1 -0
  252. zenml/zen_server/dashboard/assets/{package-DYKZ5jKW.js → package-Cs35Szwh.js} +1 -1
  253. zenml/zen_server/dashboard/assets/{page-HkVBdZl6.js → page-9yplj5JT.js} +1 -1
  254. zenml/zen_server/dashboard/assets/{page-uORspyRu.js → page-B-y2XKIc.js} +1 -1
  255. zenml/zen_server/dashboard/assets/page-BBpOxVcY.js +1 -0
  256. zenml/zen_server/dashboard/assets/{page-BDg1F-Ug.js → page-BQQKaabe.js} +2 -2
  257. zenml/zen_server/dashboard/assets/page-BRInM1Lg.js +1 -0
  258. zenml/zen_server/dashboard/assets/{page-CvKnNK1S.js → page-BjjlMk7s.js} +1 -1
  259. zenml/zen_server/dashboard/assets/{page-BukXK1Aa.js → page-Bvd7YH2A.js} +1 -1
  260. zenml/zen_server/dashboard/assets/{page-DcTjHmYZ.js → page-C0N5q3l7.js} +1 -1
  261. zenml/zen_server/dashboard/assets/page-CT3Nep8W.js +1 -0
  262. zenml/zen_server/dashboard/assets/{page-DuqYMYmH.js → page-C_f47pBf.js} +1 -1
  263. zenml/zen_server/dashboard/assets/{page-DRfcRK1w.js → page-ClUVkl-O.js} +1 -1
  264. zenml/zen_server/dashboard/assets/page-Cmv8C_yM.js +3 -0
  265. zenml/zen_server/dashboard/assets/{page-p0BhSAWx.js → page-CyN2bdWG.js} +1 -1
  266. zenml/zen_server/dashboard/assets/page-CzzXH4fs.js +1 -0
  267. zenml/zen_server/dashboard/assets/{page-6mfzecin.js → page-DH_Z7iW1.js} +1 -1
  268. zenml/zen_server/dashboard/assets/{page-8kYmrh0B.js → page-DIOXwhiD.js} +1 -1
  269. zenml/zen_server/dashboard/assets/{page-BXarY9K2.js → page-DLixvR-7.js} +1 -1
  270. zenml/zen_server/dashboard/assets/page-DTlGjgnG.js +1 -0
  271. zenml/zen_server/dashboard/assets/page-Dbpl86h0.js +1 -0
  272. zenml/zen_server/dashboard/assets/{page-MAXyfXBq.js → page-Ddgy6kDS.js} +1 -1
  273. zenml/zen_server/dashboard/assets/page-DtCAfBLy.js +9 -0
  274. zenml/zen_server/dashboard/assets/{page-CKHNAq7z.js → page-Dx16z7nA.js} +1 -1
  275. zenml/zen_server/dashboard/assets/{page-DMSLXKGT.js → page-DzpVUZ8f.js} +1 -1
  276. zenml/zen_server/dashboard/assets/page-McUyYbo1.js +1 -0
  277. zenml/zen_server/dashboard/assets/{page-miU2rhYG.js → page-N4qoPHKb.js} +1 -1
  278. zenml/zen_server/dashboard/assets/page-T1P3RyAR.js +1 -0
  279. zenml/zen_server/dashboard/assets/{page-3qPX9WYH.js → page-bKaULTGG.js} +1 -1
  280. zenml/zen_server/dashboard/assets/page-sbXUJy9t.js +1 -0
  281. zenml/zen_server/dashboard/assets/{persist-CfJMar_k.js → persist-CP0JmYZ4.js} +1 -1
  282. zenml/zen_server/dashboard/assets/{persist-BxIR2XZs.js → persist-DNb5cdrU.js} +1 -1
  283. zenml/zen_server/dashboard/assets/{plus-Bc8eLSDM.js → plus-C9IxgN2M.js} +1 -1
  284. zenml/zen_server/dashboard/assets/{refresh-hfgWPeto.js → refresh-BVu22P_C.js} +1 -1
  285. zenml/zen_server/dashboard/assets/{rocket-SESCGQXm.js → rocket-CONEmRmB.js} +1 -1
  286. zenml/zen_server/dashboard/assets/{sharedSchema-vub0rii3.js → sharedSchema-TMLu-nYQ.js} +1 -1
  287. zenml/zen_server/dashboard/assets/stack-detail-query-xmYxSsUY.js +1 -0
  288. zenml/zen_server/dashboard/assets/{tick-circle-m-hJG8i9.js → tick-circle-CM1ZScbQ.js} +1 -1
  289. zenml/zen_server/dashboard/assets/{trash-DUWZWzse.js → trash-DkJHMOg7.js} +1 -1
  290. zenml/zen_server/dashboard/assets/{update-server-settings-mutation-FGVP7X2U.js → update-server-settings-mutation-DsU8cNVl.js} +1 -1
  291. zenml/zen_server/dashboard/assets/{url-CbAPzsmT.js → url-D5le3J4q.js} +1 -1
  292. zenml/zen_server/dashboard/assets/zod-D89GC_vc.js +1 -0
  293. zenml/zen_server/dashboard/index.html +7 -7
  294. zenml/zen_server/deploy/__init__.py +7 -16
  295. zenml/zen_server/deploy/base_provider.py +46 -73
  296. zenml/zen_server/deploy/{local → daemon}/__init__.py +3 -3
  297. zenml/zen_server/deploy/{local/local_provider.py → daemon/daemon_provider.py} +44 -63
  298. zenml/zen_server/deploy/{local/local_zen_server.py → daemon/daemon_zen_server.py} +50 -28
  299. zenml/zen_server/deploy/deployer.py +90 -171
  300. zenml/zen_server/deploy/deployment.py +20 -12
  301. zenml/zen_server/deploy/docker/docker_provider.py +9 -28
  302. zenml/zen_server/deploy/docker/docker_zen_server.py +19 -9
  303. zenml/zen_server/deploy/helm/Chart.yaml +1 -1
  304. zenml/zen_server/deploy/helm/README.md +2 -2
  305. zenml/zen_server/exceptions.py +11 -0
  306. zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +1 -1
  307. zenml/zen_server/jwt.py +9 -9
  308. zenml/zen_server/routers/artifact_version_endpoints.py +1 -1
  309. zenml/zen_server/routers/auth_endpoints.py +30 -8
  310. zenml/zen_server/routers/runs_endpoints.py +0 -28
  311. zenml/zen_server/routers/stack_components_endpoints.py +1 -1
  312. zenml/zen_server/routers/workspaces_endpoints.py +1 -1
  313. zenml/zen_server/template_execution/runner_entrypoint_configuration.py +7 -4
  314. zenml/zen_server/template_execution/utils.py +8 -63
  315. zenml/zen_server/utils.py +67 -69
  316. zenml/zen_server/zen_server_api.py +107 -17
  317. zenml/zen_stores/base_zen_store.py +4 -51
  318. zenml/zen_stores/migrations/versions/0.67.0_release.py +23 -0
  319. zenml/zen_stores/migrations/versions/0.68.0_release.py +23 -0
  320. zenml/zen_stores/migrations/versions/0.68.1_release.py +23 -0
  321. zenml/zen_stores/migrations/versions/1d8f30c54477_migrate_to_new_.py +124 -0
  322. zenml/zen_stores/migrations/versions/c22561cbb3a9_add_artifact_unique_constraints.py +86 -0
  323. zenml/zen_stores/rest_zen_store.py +325 -147
  324. zenml/zen_stores/schemas/api_key_schemas.py +9 -4
  325. zenml/zen_stores/schemas/artifact_schemas.py +21 -2
  326. zenml/zen_stores/schemas/artifact_visualization_schemas.py +1 -1
  327. zenml/zen_stores/schemas/component_schemas.py +49 -6
  328. zenml/zen_stores/schemas/device_schemas.py +9 -4
  329. zenml/zen_stores/schemas/flavor_schemas.py +1 -1
  330. zenml/zen_stores/schemas/model_schemas.py +1 -1
  331. zenml/zen_stores/schemas/pipeline_run_schemas.py +12 -4
  332. zenml/zen_stores/schemas/service_schemas.py +1 -1
  333. zenml/zen_stores/schemas/step_run_schemas.py +3 -3
  334. zenml/zen_stores/schemas/trigger_schemas.py +1 -1
  335. zenml/zen_stores/sql_zen_store.py +422 -145
  336. zenml/zen_stores/template_utils.py +3 -1
  337. {zenml_nightly-0.66.0.dev20240928.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/METADATA +20 -18
  338. {zenml_nightly-0.66.0.dev20240928.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/RECORD +343 -505
  339. {zenml_nightly-0.66.0.dev20240928.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/WHEEL +1 -1
  340. zenml/api.py +0 -60
  341. zenml/cli/stack_recipes.py +0 -469
  342. zenml/lineage_graph/__init__.py +0 -34
  343. zenml/lineage_graph/lineage_graph.py +0 -244
  344. zenml/lineage_graph/node/__init__.py +0 -32
  345. zenml/lineage_graph/node/artifact_node.py +0 -51
  346. zenml/lineage_graph/node/step_node.py +0 -41
  347. zenml/model/model_version.py +0 -38
  348. zenml/new/pipelines/code_archive.py +0 -157
  349. zenml/new/pipelines/pipeline_decorator.py +0 -118
  350. zenml/new/steps/step_decorator.py +0 -176
  351. zenml/pipelines/base_pipeline.py +0 -273
  352. zenml/post_execution/__init__.py +0 -30
  353. zenml/post_execution/pipeline.py +0 -55
  354. zenml/post_execution/pipeline_run.py +0 -55
  355. zenml/services/terraform/__init__.py +0 -14
  356. zenml/services/terraform/terraform_service.py +0 -441
  357. zenml/steps/external_artifact.py +0 -26
  358. zenml/steps/step_environment.py +0 -108
  359. zenml/steps/step_output.py +0 -36
  360. zenml/utils/mlstacks_utils.py +0 -635
  361. zenml/utils/terraform_utils.py +0 -43
  362. zenml/zen_server/dashboard/assets/@radix-DnFH_oo1.js +0 -85
  363. zenml/zen_server/dashboard/assets/@react-router-APVeuk-U.js +0 -29
  364. zenml/zen_server/dashboard/assets/@reactflow-ytavUpwh.js +0 -17
  365. zenml/zen_server/dashboard/assets/@tanstack-QbMbTrh5.js +0 -22
  366. zenml/zen_server/dashboard/assets/ComponentBadge-gKR1OIwG.js +0 -1
  367. zenml/zen_server/dashboard/assets/ExecutionStatus-D6r6aK8J.js +0 -1
  368. zenml/zen_server/dashboard/assets/MarkdownVisualization-DS05sfBm.js +0 -14
  369. zenml/zen_server/dashboard/assets/SearchField-BzmfxS0L.js +0 -1
  370. zenml/zen_server/dashboard/assets/all-pipeline-runs-query-BA3R2Sey.js +0 -1
  371. zenml/zen_server/dashboard/assets/delete-run-CP0pcJ3U.js +0 -1
  372. zenml/zen_server/dashboard/assets/index-BhJ6ZJxv.css +0 -1
  373. zenml/zen_server/dashboard/assets/index-Ci0nJ8EZ.js +0 -55
  374. zenml/zen_server/dashboard/assets/index.esm-BE1uqCX5.js +0 -1
  375. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-Df6ckaLK.woff2 +0 -0
  376. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-JrS_4yms.woff +0 -0
  377. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-BRrLR67x.woff2 +0 -0
  378. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DskEQOpE.woff +0 -0
  379. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-DDpWG8g5.woff2 +0 -0
  380. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-iz1--dBq.woff +0 -0
  381. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-CzG7Kr3z.woff +0 -0
  382. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-tyfMZHQw.woff2 +0 -0
  383. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-DOnSzjnx.woff2 +0 -0
  384. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-Xebo2OyJ.woff +0 -0
  385. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-DpA2xaRd.woff2 +0 -0
  386. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-KAwcVx6H.woff +0 -0
  387. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DQXyrmoy.woff2 +0 -0
  388. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DvIPHDQ7.woff +0 -0
  389. zenml/zen_server/dashboard/assets/inter-greek-500-normal-BjpBGs91.woff +0 -0
  390. zenml/zen_server/dashboard/assets/inter-greek-500-normal-CmOavsDc.woff2 +0 -0
  391. zenml/zen_server/dashboard/assets/inter-greek-600-normal-B-l8Lzzd.woff2 +0 -0
  392. zenml/zen_server/dashboard/assets/inter-greek-600-normal-BLZsI-P3.woff +0 -0
  393. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-CIdlr5YK.woff2 +0 -0
  394. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-_Rr29XE2.woff +0 -0
  395. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-2pdUafRD.woff2 +0 -0
  396. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-Dtavx3qw.woff +0 -0
  397. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-BmtRFZgT.woff +0 -0
  398. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-CkBLDEl_.woff2 +0 -0
  399. zenml/zen_server/dashboard/assets/inter-latin-400-normal-BT1H-PT_.woff2 +0 -0
  400. zenml/zen_server/dashboard/assets/inter-latin-400-normal-Cdi8t5Mu.woff +0 -0
  401. zenml/zen_server/dashboard/assets/inter-latin-500-normal-D4I8BKCx.woff +0 -0
  402. zenml/zen_server/dashboard/assets/inter-latin-500-normal-kWhwEdDH.woff2 +0 -0
  403. zenml/zen_server/dashboard/assets/inter-latin-600-normal-B2Ssfs8e.woff2 +0 -0
  404. zenml/zen_server/dashboard/assets/inter-latin-600-normal-Dbvh0wvx.woff +0 -0
  405. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-8tIzm-yw.woff +0 -0
  406. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-D3W-OpO-.woff2 +0 -0
  407. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-B9u8Q_zH.woff2 +0 -0
  408. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-SuUkSNTU.woff +0 -0
  409. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-Dg0Bk0Yr.woff +0 -0
  410. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-ao35dkSb.woff2 +0 -0
  411. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-Cnt0N5Vm.woff2 +0 -0
  412. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DIOGfGLL.woff +0 -0
  413. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-0i6yoQMg.woff +0 -0
  414. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-5IkPJ6Nk.woff2 +0 -0
  415. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-BQ_dbMbg.woff +0 -0
  416. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-DjnxGF-L.woff2 +0 -0
  417. zenml/zen_server/dashboard/assets/not-found-DbjllLY_.js +0 -1
  418. zenml/zen_server/dashboard/assets/page-B1n7_W7z.js +0 -1
  419. zenml/zen_server/dashboard/assets/page-BZZhLo2u.js +0 -1
  420. zenml/zen_server/dashboard/assets/page-Bbf_oBjn.js +0 -1
  421. zenml/zen_server/dashboard/assets/page-BjjuBvZG.js +0 -9
  422. zenml/zen_server/dashboard/assets/page-CHaQkFK5.js +0 -1
  423. zenml/zen_server/dashboard/assets/page-CS0SYFK8.js +0 -1
  424. zenml/zen_server/dashboard/assets/page-DGM1CbYT.js +0 -2
  425. zenml/zen_server/dashboard/assets/page-DOmIZ2ra.js +0 -1
  426. zenml/zen_server/dashboard/assets/page-DYVmJ9_w.js +0 -3
  427. zenml/zen_server/dashboard/assets/page-Dwow2doB.js +0 -1
  428. zenml/zen_server/dashboard/assets/stack-detail-query-DQcyzG-2.js +0 -1
  429. zenml/zen_server/dashboard/assets/zod-uFd1wBcd.js +0 -1
  430. zenml/zen_server/dashboard_legacy/_redirects +0 -1
  431. zenml/zen_server/dashboard_legacy/asset-manifest.json +0 -131
  432. zenml/zen_server/dashboard_legacy/favicon.ico +0 -0
  433. zenml/zen_server/dashboard_legacy/index.html +0 -1
  434. zenml/zen_server/dashboard_legacy/manifest.json +0 -25
  435. zenml/zen_server/dashboard_legacy/precache-manifest.6d320abb70db612019dda6c4948e7a90.js +0 -462
  436. zenml/zen_server/dashboard_legacy/robots.txt +0 -2
  437. zenml/zen_server/dashboard_legacy/service-worker.js +0 -39
  438. zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css +0 -16
  439. zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css.map +0 -1
  440. zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css +0 -2
  441. zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css.map +0 -1
  442. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js +0 -3
  443. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.LICENSE.txt +0 -95
  444. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.map +0 -1
  445. zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js +0 -2
  446. zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js.map +0 -1
  447. zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js +0 -2
  448. zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js.map +0 -1
  449. zenml/zen_server/dashboard_legacy/static/media/AlertTriangle.28aee535.svg +0 -5
  450. zenml/zen_server/dashboard_legacy/static/media/ArrowSquareOut.abfb9bc7.svg +0 -5
  451. zenml/zen_server/dashboard_legacy/static/media/Back.86c23a22.svg +0 -4
  452. zenml/zen_server/dashboard_legacy/static/media/BookOpen.5cb101ff.svg +0 -4
  453. zenml/zen_server/dashboard_legacy/static/media/BoundingBox.1eb98717.svg +0 -10
  454. zenml/zen_server/dashboard_legacy/static/media/Burger.9b1c67d7.svg +0 -3
  455. zenml/zen_server/dashboard_legacy/static/media/Cached.2381fb8d.svg +0 -1
  456. zenml/zen_server/dashboard_legacy/static/media/Calendar.356e11c7.svg +0 -3
  457. zenml/zen_server/dashboard_legacy/static/media/ChartBarHorizontal.0247447b.svg +0 -6
  458. zenml/zen_server/dashboard_legacy/static/media/ChartLine.0d79e18d.svg +0 -4
  459. zenml/zen_server/dashboard_legacy/static/media/ChatDots.2e1c9211.svg +0 -6
  460. zenml/zen_server/dashboard_legacy/static/media/Check.dad6beb2.svg +0 -3
  461. zenml/zen_server/dashboard_legacy/static/media/CheckCircleFilled.c19566d0.svg +0 -3
  462. zenml/zen_server/dashboard_legacy/static/media/Checkbox.af50e31e.svg +0 -3
  463. zenml/zen_server/dashboard_legacy/static/media/ChevronDown.f860ce32.svg +0 -3
  464. zenml/zen_server/dashboard_legacy/static/media/ChevronDownLight.6642d756.svg +0 -3
  465. zenml/zen_server/dashboard_legacy/static/media/ChevronLeft.f6edfcdb.svg +0 -3
  466. zenml/zen_server/dashboard_legacy/static/media/CircleCheck.f98fd6ca.svg +0 -1
  467. zenml/zen_server/dashboard_legacy/static/media/Clock.ffc9de95.svg +0 -3
  468. zenml/zen_server/dashboard_legacy/static/media/Close.74e9efbc.svg +0 -5
  469. zenml/zen_server/dashboard_legacy/static/media/CloseWithBorder.6960930a.svg +0 -3
  470. zenml/zen_server/dashboard_legacy/static/media/CloseWithoutBorder.cd6f71df.svg +0 -3
  471. zenml/zen_server/dashboard_legacy/static/media/CloudArrowUp.0aecb235.svg +0 -6
  472. zenml/zen_server/dashboard_legacy/static/media/Code.ef0f33b5.svg +0 -3
  473. zenml/zen_server/dashboard_legacy/static/media/Config.0be63f8a.svg +0 -1
  474. zenml/zen_server/dashboard_legacy/static/media/Connector.9fd46ef1.svg +0 -10
  475. zenml/zen_server/dashboard_legacy/static/media/Copy.36e2112a.svg +0 -1
  476. zenml/zen_server/dashboard_legacy/static/media/Dashboard.d05787e0.svg +0 -3
  477. zenml/zen_server/dashboard_legacy/static/media/Data.b1c3b5f8.svg +0 -3
  478. zenml/zen_server/dashboard_legacy/static/media/Delete.3c361b28.svg +0 -8
  479. zenml/zen_server/dashboard_legacy/static/media/Docs.7541d478.svg +0 -7
  480. zenml/zen_server/dashboard_legacy/static/media/Download.fba04d87.svg +0 -5
  481. zenml/zen_server/dashboard_legacy/static/media/Edit.490eb294.svg +0 -6
  482. zenml/zen_server/dashboard_legacy/static/media/EmptyRightArrow.23749d01.svg +0 -3
  483. zenml/zen_server/dashboard_legacy/static/media/Example.6396cd37.svg +0 -5
  484. zenml/zen_server/dashboard_legacy/static/media/Extension.1394cd4a.svg +0 -3
  485. zenml/zen_server/dashboard_legacy/static/media/Eye.d9e4ee62.svg +0 -4
  486. zenml/zen_server/dashboard_legacy/static/media/Failed.0213c1a0.svg +0 -1
  487. zenml/zen_server/dashboard_legacy/static/media/FileText.1f15bacd.svg +0 -7
  488. zenml/zen_server/dashboard_legacy/static/media/Filter.ab6b9c0d.svg +0 -3
  489. zenml/zen_server/dashboard_legacy/static/media/Folders.12b29887.svg +0 -5
  490. zenml/zen_server/dashboard_legacy/static/media/FunnelFill.6df4c143.svg +0 -3
  491. zenml/zen_server/dashboard_legacy/static/media/GitCommit.7dd9c2aa.svg +0 -5
  492. zenml/zen_server/dashboard_legacy/static/media/GitHub_Logo.cefc2023.png +0 -0
  493. zenml/zen_server/dashboard_legacy/static/media/Graph.2c63a892.svg +0 -11
  494. zenml/zen_server/dashboard_legacy/static/media/History.08329240.svg +0 -3
  495. zenml/zen_server/dashboard_legacy/static/media/Home.0843b0d5.svg +0 -3
  496. zenml/zen_server/dashboard_legacy/static/media/ImageBuilder.ea762d9c.svg +0 -6
  497. zenml/zen_server/dashboard_legacy/static/media/InProgress.304a0edc.svg +0 -1
  498. zenml/zen_server/dashboard_legacy/static/media/Info.9fe10c5c.svg +0 -3
  499. zenml/zen_server/dashboard_legacy/static/media/KeyboardReturn.491afbe3.svg +0 -3
  500. zenml/zen_server/dashboard_legacy/static/media/Link.72bbb55d.svg +0 -4
  501. zenml/zen_server/dashboard_legacy/static/media/Lock.30f5e1fe.svg +0 -5
  502. zenml/zen_server/dashboard_legacy/static/media/Lock2.a769ea52.svg +0 -3
  503. zenml/zen_server/dashboard_legacy/static/media/LockKey.92f21621.svg +0 -6
  504. zenml/zen_server/dashboard_legacy/static/media/Logs.8bf4d005.svg +0 -5
  505. zenml/zen_server/dashboard_legacy/static/media/MinusCircle.4188f418.svg +0 -4
  506. zenml/zen_server/dashboard_legacy/static/media/ModelRegistry.f0de050a.svg +0 -6
  507. zenml/zen_server/dashboard_legacy/static/media/MultiUser.a2ba7c67.svg +0 -10
  508. zenml/zen_server/dashboard_legacy/static/media/PaginationFirst.92628634.svg +0 -4
  509. zenml/zen_server/dashboard_legacy/static/media/PaginationLast.00d3c732.svg +0 -4
  510. zenml/zen_server/dashboard_legacy/static/media/PaginationNext.86158845.svg +0 -3
  511. zenml/zen_server/dashboard_legacy/static/media/PaginationPrev.60c18a88.svg +0 -3
  512. zenml/zen_server/dashboard_legacy/static/media/Pen.f2d831d4.svg +0 -6
  513. zenml/zen_server/dashboard_legacy/static/media/PhotoCamera.179d6d4c.svg +0 -3
  514. zenml/zen_server/dashboard_legacy/static/media/Pipeline.30d298b0.svg +0 -7
  515. zenml/zen_server/dashboard_legacy/static/media/Plus.5aa1c16b.svg +0 -3
  516. zenml/zen_server/dashboard_legacy/static/media/PlusCircle.92d860dd.svg +0 -5
  517. zenml/zen_server/dashboard_legacy/static/media/Repositories.71a36b8c.svg +0 -3
  518. zenml/zen_server/dashboard_legacy/static/media/RightArrow.f30d3871.svg +0 -29
  519. zenml/zen_server/dashboard_legacy/static/media/Rocket.63bf7b9d.svg +0 -3
  520. zenml/zen_server/dashboard_legacy/static/media/RocketLaunch.1bff2b59.svg +0 -6
  521. zenml/zen_server/dashboard_legacy/static/media/Rubik-Medium.c87313aa.ttf +0 -0
  522. zenml/zen_server/dashboard_legacy/static/media/Rubik-Regular.b3d0902b.ttf +0 -0
  523. zenml/zen_server/dashboard_legacy/static/media/Run.daec4fb2.svg +0 -6
  524. zenml/zen_server/dashboard_legacy/static/media/Search.d1afcce5.svg +0 -4
  525. zenml/zen_server/dashboard_legacy/static/media/Settings.59ca73ae.svg +0 -4
  526. zenml/zen_server/dashboard_legacy/static/media/Share2.46c3ff66.svg +0 -3
  527. zenml/zen_server/dashboard_legacy/static/media/SignOut.6aa718c5.svg +0 -3
  528. zenml/zen_server/dashboard_legacy/static/media/SimplePlus.5cf7ec20.svg +0 -3
  529. zenml/zen_server/dashboard_legacy/static/media/SingleUser.bef3a095.svg +0 -4
  530. zenml/zen_server/dashboard_legacy/static/media/SourceCodePro-Regular.b484b32f.ttf +0 -0
  531. zenml/zen_server/dashboard_legacy/static/media/Stack.19b604ac.svg +0 -5
  532. zenml/zen_server/dashboard_legacy/static/media/StackComponent.b1ba90b5.svg +0 -4
  533. zenml/zen_server/dashboard_legacy/static/media/Star.f0c25022.svg +0 -9
  534. zenml/zen_server/dashboard_legacy/static/media/StarOutline.94ca8cd9.svg +0 -3
  535. zenml/zen_server/dashboard_legacy/static/media/Storefront.4b4796fe.svg +0 -3
  536. zenml/zen_server/dashboard_legacy/static/media/Stream.543e3039.svg +0 -3
  537. zenml/zen_server/dashboard_legacy/static/media/SupportAgent.510ddf1f.svg +0 -8
  538. zenml/zen_server/dashboard_legacy/static/media/Table.77033750.svg +0 -6
  539. zenml/zen_server/dashboard_legacy/static/media/Tool.d5785486.svg +0 -3
  540. zenml/zen_server/dashboard_legacy/static/media/UserPlus.741a99d7.svg +0 -6
  541. zenml/zen_server/dashboard_legacy/static/media/Verified.0625b2a0.svg +0 -3
  542. zenml/zen_server/dashboard_legacy/static/media/addNew.4fb6c939.svg +0 -8
  543. zenml/zen_server/dashboard_legacy/static/media/arrowClose.cbd53f3f.svg +0 -3
  544. zenml/zen_server/dashboard_legacy/static/media/arrowOpen.6ceef0af.svg +0 -3
  545. zenml/zen_server/dashboard_legacy/static/media/check_small.30bc0138.svg +0 -3
  546. zenml/zen_server/dashboard_legacy/static/media/circleArrowSideClose.98d6013e.svg +0 -18
  547. zenml/zen_server/dashboard_legacy/static/media/circleArrowSideOpen.63653df6.svg +0 -18
  548. zenml/zen_server/dashboard_legacy/static/media/image.104fd14b.png +0 -0
  549. zenml/zen_server/dashboard_legacy/static/media/imageAddIcon.e83004a9.svg +0 -7
  550. zenml/zen_server/dashboard_legacy/static/media/logo.93333e5c.svg +0 -1
  551. zenml/zen_server/dashboard_legacy/static/media/logo_small.4204397d.svg +0 -3
  552. zenml/zen_server/dashboard_legacy/static/media/logo_white.d4b4414e.svg +0 -20
  553. zenml/zen_server/dashboard_legacy/static/media/notConnected.5e2c8ea7.svg +0 -8
  554. zenml/zen_server/dashboard_legacy/static/media/plugin-fallback.72c294e6.svg +0 -6
  555. zenml/zen_server/dashboard_legacy/static/media/share.bcd998b0.svg +0 -5
  556. zenml/zen_server/dashboard_legacy/static/media/stars.08a9b19a.svg +0 -8
  557. zenml/zen_server/deploy/terraform/__init__.py +0 -41
  558. zenml/zen_server/deploy/terraform/providers/aws_provider.py +0 -61
  559. zenml/zen_server/deploy/terraform/providers/azure_provider.py +0 -59
  560. zenml/zen_server/deploy/terraform/providers/gcp_provider.py +0 -59
  561. zenml/zen_server/deploy/terraform/providers/terraform_provider.py +0 -331
  562. zenml/zen_server/deploy/terraform/recipes/aws/.gitignore +0 -8
  563. zenml/zen_server/deploy/terraform/recipes/aws/helm.tf +0 -20
  564. zenml/zen_server/deploy/terraform/recipes/aws/ingress.tf +0 -30
  565. zenml/zen_server/deploy/terraform/recipes/aws/outputs.tf +0 -7
  566. zenml/zen_server/deploy/terraform/recipes/aws/printf.cmd +0 -2
  567. zenml/zen_server/deploy/terraform/recipes/aws/sql.tf +0 -62
  568. zenml/zen_server/deploy/terraform/recipes/aws/terraform.tf +0 -44
  569. zenml/zen_server/deploy/terraform/recipes/aws/variables.tf +0 -167
  570. zenml/zen_server/deploy/terraform/recipes/aws/vpc.tf +0 -47
  571. zenml/zen_server/deploy/terraform/recipes/aws/zen_server.tf +0 -103
  572. zenml/zen_server/deploy/terraform/recipes/azure/.gitignore +0 -8
  573. zenml/zen_server/deploy/terraform/recipes/azure/helm.tf +0 -20
  574. zenml/zen_server/deploy/terraform/recipes/azure/ingress.tf +0 -30
  575. zenml/zen_server/deploy/terraform/recipes/azure/key_vault.tf +0 -73
  576. zenml/zen_server/deploy/terraform/recipes/azure/outputs.tf +0 -7
  577. zenml/zen_server/deploy/terraform/recipes/azure/printf.cmd +0 -2
  578. zenml/zen_server/deploy/terraform/recipes/azure/rg.tf +0 -36
  579. zenml/zen_server/deploy/terraform/recipes/azure/sql.tf +0 -65
  580. zenml/zen_server/deploy/terraform/recipes/azure/terraform.tf +0 -52
  581. zenml/zen_server/deploy/terraform/recipes/azure/variables.tf +0 -176
  582. zenml/zen_server/deploy/terraform/recipes/azure/zen_server.tf +0 -103
  583. zenml/zen_server/deploy/terraform/recipes/gcp/.gitignore +0 -8
  584. zenml/zen_server/deploy/terraform/recipes/gcp/helm.tf +0 -20
  585. zenml/zen_server/deploy/terraform/recipes/gcp/ingress.tf +0 -30
  586. zenml/zen_server/deploy/terraform/recipes/gcp/outputs.tf +0 -7
  587. zenml/zen_server/deploy/terraform/recipes/gcp/printf.cmd +0 -2
  588. zenml/zen_server/deploy/terraform/recipes/gcp/sql.tf +0 -64
  589. zenml/zen_server/deploy/terraform/recipes/gcp/terraform.tf +0 -44
  590. zenml/zen_server/deploy/terraform/recipes/gcp/variables.tf +0 -171
  591. zenml/zen_server/deploy/terraform/recipes/gcp/zen_server.tf +0 -114
  592. zenml/zen_server/deploy/terraform/terraform_zen_server.py +0 -246
  593. /zenml/{new/pipelines → pipelines}/build_utils.py +0 -0
  594. /zenml/{new/steps → steps}/decorated_step.py +0 -0
  595. {zenml_nightly-0.66.0.dev20240928.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/LICENSE +0 -0
  596. {zenml_nightly-0.66.0.dev20240928.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/entry_points.txt +0 -0
@@ -11,16 +11,17 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12
12
  # or implied. See the License for the specific language governing
13
13
  # permissions and limitations under the License.
14
- """Implementation for the BentoML inference service."""
14
+ """Implementation for the BentoML local deployment service."""
15
15
 
16
16
  import os
17
17
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
18
18
 
19
- from bentoml.client import Client
19
+ from bentoml import AsyncHTTPClient, SyncHTTPClient
20
20
  from pydantic import BaseModel, Field
21
21
 
22
22
  from zenml.constants import DEFAULT_LOCAL_SERVICE_IP_ADDRESS
23
23
  from zenml.integrations.bentoml.constants import (
24
+ BENTOML_DEFAULT_PORT,
24
25
  BENTOML_HEALTHCHECK_URL_PATH,
25
26
  BENTOML_PREDICTION_URL_PATH,
26
27
  )
@@ -44,6 +45,8 @@ if TYPE_CHECKING:
44
45
 
45
46
  logger = get_logger(__name__)
46
47
 
48
+ BENTOML_LOCAL_DEPLOYMENT_SERVICE_NAME = "bentoml-local-deployment"
49
+
47
50
 
48
51
  class BentoMLDeploymentEndpointConfig(LocalDaemonServiceEndpointConfig):
49
52
  """BentoML deployment service configuration.
@@ -100,14 +103,15 @@ class SSLBentoMLParametersConfig(BaseModel):
100
103
  ssl_ciphers: Optional[str] = None
101
104
 
102
105
 
103
- class BentoMLDeploymentConfig(LocalDaemonServiceConfig):
106
+ class BentoMLLocalDeploymentConfig(LocalDaemonServiceConfig):
104
107
  """BentoML model deployment configuration.
105
108
 
106
109
  Attributes:
107
110
  model_name: name of the model to deploy
108
111
  model_uri: URI of the model to deploy
109
112
  port: port to expose the service on
110
- bento: Bento package to deploy
113
+ bento_tag: Bento package to deploy. A bento tag is a combination of the
114
+ name of the bento and its version.
111
115
  workers: number of workers to use
112
116
  backlog: number of requests to queue
113
117
  production: whether to run in production mode
@@ -118,11 +122,11 @@ class BentoMLDeploymentConfig(LocalDaemonServiceConfig):
118
122
 
119
123
  model_name: str
120
124
  model_uri: str
121
- bento: str
125
+ bento_tag: str
122
126
  bento_uri: Optional[str] = None
123
127
  apis: List[str] = []
124
128
  workers: int = 1
125
- port: int
129
+ port: Optional[int] = None
126
130
  backlog: int = 2048
127
131
  production: bool = False
128
132
  working_dir: str
@@ -132,7 +136,7 @@ class BentoMLDeploymentConfig(LocalDaemonServiceConfig):
132
136
  )
133
137
 
134
138
 
135
- class BentoMLDeploymentService(LocalDaemonService, BaseDeploymentService):
139
+ class BentoMLLocalDeploymentService(LocalDaemonService, BaseDeploymentService):
136
140
  """BentoML deployment service used to start a local prediction server for BentoML models.
137
141
 
138
142
  Attributes:
@@ -143,19 +147,19 @@ class BentoMLDeploymentService(LocalDaemonService, BaseDeploymentService):
143
147
  """
144
148
 
145
149
  SERVICE_TYPE = ServiceType(
146
- name="bentoml-deployment",
150
+ name=BENTOML_LOCAL_DEPLOYMENT_SERVICE_NAME,
147
151
  type="model-serving",
148
152
  flavor="bentoml",
149
- description="BentoML prediction service",
153
+ description="BentoML local prediction service",
150
154
  logo_url="https://public-flavor-logos.s3.eu-central-1.amazonaws.com/model_deployer/bentoml.png",
151
155
  )
152
156
 
153
- config: BentoMLDeploymentConfig
157
+ config: BentoMLLocalDeploymentConfig
154
158
  endpoint: BentoMLDeploymentEndpoint
155
159
 
156
160
  def __init__(
157
161
  self,
158
- config: Union[BentoMLDeploymentConfig, Dict[str, Any]],
162
+ config: Union[BentoMLLocalDeploymentConfig, Dict[str, Any]],
159
163
  **attrs: Any,
160
164
  ) -> None:
161
165
  """Initialize the BentoML deployment service.
@@ -168,13 +172,15 @@ class BentoMLDeploymentService(LocalDaemonService, BaseDeploymentService):
168
172
  # TODO [ENG-700]: implement a service factory or builder for BentoML
169
173
  # deployment services
170
174
  if (
171
- isinstance(config, BentoMLDeploymentConfig)
175
+ isinstance(config, BentoMLLocalDeploymentConfig)
172
176
  and "endpoint" not in attrs
173
177
  ):
174
178
  endpoint = BentoMLDeploymentEndpoint(
175
179
  config=BentoMLDeploymentEndpointConfig(
176
180
  protocol=ServiceEndpointProtocol.HTTP,
177
- port=config.port,
181
+ port=config.port
182
+ if config.port is not None
183
+ else BENTOML_DEFAULT_PORT,
178
184
  ip_address=config.host or DEFAULT_LOCAL_SERVICE_IP_ADDRESS,
179
185
  prediction_url_path=BENTOML_PREDICTION_URL_PATH,
180
186
  ),
@@ -189,6 +195,9 @@ class BentoMLDeploymentService(LocalDaemonService, BaseDeploymentService):
189
195
 
190
196
  def run(self) -> None:
191
197
  """Start the service."""
198
+ from bentoml import Service
199
+ from bentoml._internal.service.loader import load
200
+
192
201
  logger.info(
193
202
  "Starting BentoML prediction service as blocking "
194
203
  "process... press CTRL+C once to stop it."
@@ -198,26 +207,55 @@ class BentoMLDeploymentService(LocalDaemonService, BaseDeploymentService):
198
207
  ssl_params = self.config.ssl_parameters or SSLBentoMLParametersConfig()
199
208
  # verify if to deploy in production mode or development mode
200
209
  logger.info("Running in production mode.")
201
- from bentoml.serve import serve_http_production
202
-
203
- try:
204
- serve_http_production(
205
- self.config.bento,
206
- working_dir=self.config.working_dir,
207
- port=self.config.port,
208
- api_workers=self.config.workers,
209
- host=self.config.host or DEFAULT_LOCAL_SERVICE_IP_ADDRESS,
210
- backlog=self.config.backlog,
211
- ssl_certfile=ssl_params.ssl_certfile,
212
- ssl_keyfile=ssl_params.ssl_keyfile,
213
- ssl_keyfile_password=ssl_params.ssl_keyfile_password,
214
- ssl_version=ssl_params.ssl_version,
215
- ssl_cert_reqs=ssl_params.ssl_cert_reqs,
216
- ssl_ca_certs=ssl_params.ssl_ca_certs,
217
- ssl_ciphers=ssl_params.ssl_ciphers,
218
- )
219
- except KeyboardInterrupt:
220
- logger.info("Stopping BentoML prediction service...")
210
+ svc = load(
211
+ bento_identifier=self.config.bento_tag,
212
+ working_dir=self.config.working_dir or ".",
213
+ )
214
+
215
+ if isinstance(svc, Service):
216
+ # bentoml<1.2
217
+ from bentoml.serving import serve_http_production
218
+
219
+ try:
220
+ serve_http_production(
221
+ self.config.bento_tag,
222
+ working_dir=self.config.working_dir,
223
+ port=self.config.port,
224
+ api_workers=self.config.workers,
225
+ host=self.config.host or DEFAULT_LOCAL_SERVICE_IP_ADDRESS,
226
+ backlog=self.config.backlog,
227
+ ssl_certfile=ssl_params.ssl_certfile,
228
+ ssl_keyfile=ssl_params.ssl_keyfile,
229
+ ssl_keyfile_password=ssl_params.ssl_keyfile_password,
230
+ ssl_version=ssl_params.ssl_version,
231
+ ssl_cert_reqs=ssl_params.ssl_cert_reqs,
232
+ ssl_ca_certs=ssl_params.ssl_ca_certs,
233
+ ssl_ciphers=ssl_params.ssl_ciphers,
234
+ )
235
+ except KeyboardInterrupt:
236
+ logger.info("Stopping BentoML prediction service...")
237
+ else:
238
+ # bentoml>=1.2
239
+ from _bentoml_impl.server import serve_http # type: ignore
240
+
241
+ svc.inject_config()
242
+ try:
243
+ serve_http(
244
+ self.config.bento_tag,
245
+ working_dir=self.config.working_dir or ".",
246
+ host=self.config.host or DEFAULT_LOCAL_SERVICE_IP_ADDRESS,
247
+ port=self.config.port,
248
+ backlog=self.config.backlog,
249
+ ssl_certfile=ssl_params.ssl_certfile,
250
+ ssl_keyfile=ssl_params.ssl_keyfile,
251
+ ssl_keyfile_password=ssl_params.ssl_keyfile_password,
252
+ ssl_version=ssl_params.ssl_version,
253
+ ssl_cert_reqs=ssl_params.ssl_cert_reqs,
254
+ ssl_ca_certs=ssl_params.ssl_ca_certs,
255
+ ssl_ciphers=ssl_params.ssl_ciphers,
256
+ )
257
+ except KeyboardInterrupt:
258
+ logger.info("Stopping BentoML prediction service...")
221
259
 
222
260
  @property
223
261
  def prediction_url(self) -> Optional[str]:
@@ -249,12 +287,15 @@ class BentoMLDeploymentService(LocalDaemonService, BaseDeploymentService):
249
287
  ]
250
288
  return None
251
289
 
252
- def predict(self, api_endpoint: str, data: "Any") -> "Any":
290
+ def predict(
291
+ self, api_endpoint: str, data: "Any", sync: bool = True
292
+ ) -> "Any":
253
293
  """Make a prediction using the service.
254
294
 
255
295
  Args:
256
296
  data: data to make a prediction on
257
297
  api_endpoint: the api endpoint to make the prediction on
298
+ sync: if set to False, the prediction will be made asynchronously
258
299
 
259
300
  Returns:
260
301
  The prediction result.
@@ -268,11 +309,11 @@ class BentoMLDeploymentService(LocalDaemonService, BaseDeploymentService):
268
309
  "BentoML prediction service is not running. "
269
310
  "Please start the service before making predictions."
270
311
  )
271
- if self.endpoint.prediction_url is not None:
272
- client = Client.from_url(
273
- self.endpoint.prediction_url.replace("http://", "").rstrip("/")
274
- )
275
- result = client.call(api_endpoint, data)
276
- else:
312
+ if self.endpoint.prediction_url is None:
277
313
  raise ValueError("No endpoint known for prediction.")
314
+ if sync:
315
+ client = SyncHTTPClient(self.endpoint.prediction_url)
316
+ else:
317
+ client = AsyncHTTPClient(self.endpoint.prediction_url)
318
+ result = client.call(api_endpoint, data)
278
319
  return result
@@ -1,4 +1,4 @@
1
- # Copyright (c) ZenML GmbH 2021. All Rights Reserved.
1
+ # Copyright (c) ZenML GmbH 2024. All Rights Reserved.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -11,10 +11,13 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12
12
  # or implied. See the License for the specific language governing
13
13
  # permissions and limitations under the License.
14
- """Step parameters."""
14
+ """BentoML Service Deployment Types."""
15
15
 
16
- from pydantic import BaseModel
16
+ from enum import Enum
17
17
 
18
18
 
19
- class BaseParameters(BaseModel):
20
- """Base class to pass parameters into a step."""
19
+ class BentoMLDeploymentType(Enum):
20
+ """BentoML Service Deployment Types."""
21
+
22
+ LOCAL = "local"
23
+ CONTAINER = "container"
@@ -93,6 +93,7 @@ def bento_builder_step(
93
93
  # Build the BentoML bundle
94
94
  bento = bentos.build(
95
95
  service=service,
96
+ models=[model_name],
96
97
  version=version,
97
98
  labels=labels,
98
99
  description=description,
@@ -13,7 +13,7 @@
13
13
  # permissions and limitations under the License.
14
14
  """Implementation of the BentoML model deployer pipeline step."""
15
15
 
16
- from typing import List, Optional, cast
16
+ from typing import List, Optional, Tuple, cast
17
17
 
18
18
  import bentoml
19
19
  from bentoml._internal.bento import bento
@@ -22,12 +22,21 @@ from zenml import get_step_context, step
22
22
  from zenml.integrations.bentoml.model_deployers.bentoml_model_deployer import (
23
23
  BentoMLModelDeployer,
24
24
  )
25
- from zenml.integrations.bentoml.services.bentoml_deployment import (
26
- BentoMLDeploymentConfig,
27
- BentoMLDeploymentService,
25
+ from zenml.integrations.bentoml.services.bentoml_container_deployment import (
26
+ BentoMLContainerDeploymentConfig,
27
+ BentoMLContainerDeploymentService,
28
+ )
29
+ from zenml.integrations.bentoml.services.bentoml_local_deployment import (
30
+ BentoMLLocalDeploymentConfig,
31
+ BentoMLLocalDeploymentService,
28
32
  SSLBentoMLParametersConfig,
29
33
  )
34
+ from zenml.integrations.bentoml.services.deployment_type import (
35
+ BentoMLDeploymentType,
36
+ )
30
37
  from zenml.logger import get_logger
38
+ from zenml.services.service import BaseService, ServiceConfig
39
+ from zenml.services.service_type import ServiceType
31
40
  from zenml.utils import source_utils
32
41
 
33
42
  logger = get_logger(__name__)
@@ -38,12 +47,16 @@ def bentoml_model_deployer_step(
38
47
  bento: bento.Bento,
39
48
  model_name: str,
40
49
  port: int,
50
+ deployment_type: BentoMLDeploymentType = BentoMLDeploymentType.LOCAL,
41
51
  deploy_decision: bool = True,
42
52
  workers: Optional[int] = 1,
43
53
  backlog: Optional[int] = 2048,
44
54
  production: bool = False,
45
55
  working_dir: Optional[str] = None,
46
56
  host: Optional[str] = None,
57
+ image: Optional[str] = None,
58
+ image_tag: Optional[str] = None,
59
+ platform: Optional[str] = None,
47
60
  ssl_certfile: Optional[str] = None,
48
61
  ssl_keyfile: Optional[str] = None,
49
62
  ssl_keyfile_password: Optional[str] = None,
@@ -52,7 +65,7 @@ def bentoml_model_deployer_step(
52
65
  ssl_ca_certs: Optional[str] = None,
53
66
  ssl_ciphers: Optional[str] = None,
54
67
  timeout: int = 30,
55
- ) -> BentoMLDeploymentService:
68
+ ) -> BaseService:
56
69
  """Model deployer pipeline step for BentoML.
57
70
 
58
71
  This step deploys a given Bento to a local BentoML http prediction server.
@@ -61,12 +74,16 @@ def bentoml_model_deployer_step(
61
74
  bento: the bento artifact to deploy
62
75
  model_name: the name of the model to deploy.
63
76
  port: the port to use for the prediction service.
77
+ deployment_type: the type of deployment to use. Either "local" or "container".
64
78
  deploy_decision: whether to deploy the model or not
65
79
  workers: number of workers to use for the prediction service
66
80
  backlog: the number of requests to queue up before rejecting requests.
67
81
  production: whether to deploy the service in production mode.
68
82
  working_dir: the working directory to use for the prediction service.
69
83
  host: the host to use for the prediction service.
84
+ image: the image to use for the prediction service in the container deployment.
85
+ image_tag: the image tag to use for the prediction service in the container deployment.
86
+ platform: the platform to use to build the image for the container deployment.
70
87
  ssl_certfile: the path to the ssl cert file.
71
88
  ssl_keyfile: the path to the ssl key file.
72
89
  ssl_keyfile_password: the password for the ssl key file.
@@ -102,40 +119,62 @@ def bentoml_model_deployer_step(
102
119
  apis_paths = list(apis.keys())
103
120
  return apis_paths
104
121
 
105
- # create a config for the new model service
106
- predictor_cfg = BentoMLDeploymentConfig(
107
- model_name=model_name,
108
- bento=str(bento.tag),
109
- model_uri=bento.info.labels.get("model_uri"),
110
- bento_uri=bento.info.labels.get("bento_uri"),
111
- apis=service_apis(str(bento.tag)),
112
- workers=workers,
113
- host=host,
114
- backlog=backlog,
115
- working_dir=working_dir or source_utils.get_source_root(),
116
- port=port,
117
- pipeline_name=pipeline_name,
118
- pipeline_step_name=step_name,
119
- ssl_parameters=SSLBentoMLParametersConfig(
120
- ssl_certfile=ssl_certfile,
121
- ssl_keyfile=ssl_keyfile,
122
- ssl_keyfile_password=ssl_keyfile_password,
123
- ssl_version=ssl_version,
124
- ssl_cert_reqs=ssl_cert_reqs,
125
- ssl_ca_certs=ssl_ca_certs,
126
- ssl_ciphers=ssl_ciphers,
127
- ),
128
- )
129
-
122
+ def create_deployment_config(
123
+ deployment_type: BentoMLDeploymentType,
124
+ ) -> Tuple[ServiceConfig, ServiceType]:
125
+ common_config = {
126
+ "model_name": model_name,
127
+ "bento_tag": str(bento.tag),
128
+ "model_uri": bento.info.labels.get("model_uri"),
129
+ "bento_uri": bento.info.labels.get("bento_uri"),
130
+ "apis": service_apis(str(bento.tag)),
131
+ "host": host,
132
+ "port": port,
133
+ "pipeline_name": pipeline_name,
134
+ "pipeline_step_name": step_name,
135
+ "workers": workers,
136
+ "backlog": backlog,
137
+ }
138
+
139
+ if deployment_type == BentoMLDeploymentType.CONTAINER:
140
+ return BentoMLContainerDeploymentConfig(
141
+ **common_config,
142
+ image=image,
143
+ image_tag=image_tag,
144
+ platform=platform,
145
+ ), BentoMLContainerDeploymentService.SERVICE_TYPE
146
+ else:
147
+ return BentoMLLocalDeploymentConfig(
148
+ **common_config,
149
+ working_dir=working_dir or source_utils.get_source_root(),
150
+ ssl_parameters=SSLBentoMLParametersConfig(
151
+ ssl_certfile=ssl_certfile,
152
+ ssl_keyfile=ssl_keyfile,
153
+ ssl_keyfile_password=ssl_keyfile_password,
154
+ ssl_version=ssl_version,
155
+ ssl_cert_reqs=ssl_cert_reqs,
156
+ ssl_ca_certs=ssl_ca_certs,
157
+ ssl_ciphers=ssl_ciphers,
158
+ ),
159
+ production=production,
160
+ ), BentoMLLocalDeploymentService.SERVICE_TYPE
161
+
162
+ predictor_cfg, service_type = create_deployment_config(deployment_type)
130
163
  # fetch existing services with same pipeline name, step name and model name
131
164
  existing_services = model_deployer.find_model_server(
132
165
  config=predictor_cfg.model_dump(),
133
- service_type=BentoMLDeploymentService.SERVICE_TYPE,
166
+ service_type=service_type,
134
167
  )
135
168
 
136
169
  # Creating a new service with inactive state and status by default
170
+ service: Optional[BaseService] = None
137
171
  if existing_services:
138
- service = cast(BentoMLDeploymentService, existing_services[0])
172
+ if deployment_type == BentoMLDeploymentType.CONTAINER:
173
+ service = cast(
174
+ BentoMLContainerDeploymentService, existing_services[0]
175
+ )
176
+ else:
177
+ service = cast(BentoMLLocalDeploymentService, existing_services[0])
139
178
 
140
179
  if not deploy_decision and existing_services:
141
180
  logger.info(
@@ -144,20 +183,33 @@ def bentoml_model_deployer_step(
144
183
  f"'{step_name}' and pipeline '{pipeline_name}' for model "
145
184
  f"'{model_name}'..."
146
185
  )
186
+ assert service is not None
147
187
  if not service.is_running:
148
188
  service.start(timeout=timeout)
149
189
  return service
150
190
 
151
191
  # create a new model deployment and replace an old one if it exists
152
- new_service = cast(
153
- BentoMLDeploymentService,
154
- model_deployer.deploy_model(
155
- replace=True,
156
- config=predictor_cfg,
157
- timeout=timeout,
158
- service_type=BentoMLDeploymentService.SERVICE_TYPE,
159
- ),
160
- )
192
+ new_service: BaseService
193
+ if deployment_type == BentoMLDeploymentType.CONTAINER:
194
+ new_service = cast(
195
+ BentoMLContainerDeploymentService,
196
+ model_deployer.deploy_model(
197
+ replace=True,
198
+ config=cast(BentoMLContainerDeploymentConfig, predictor_cfg),
199
+ timeout=timeout,
200
+ service_type=service_type,
201
+ ),
202
+ )
203
+ else:
204
+ new_service = cast(
205
+ BentoMLLocalDeploymentService,
206
+ model_deployer.deploy_model(
207
+ replace=True,
208
+ config=cast(BentoMLLocalDeploymentConfig, predictor_cfg),
209
+ timeout=timeout,
210
+ service_type=service_type,
211
+ ),
212
+ )
161
213
 
162
214
  logger.info(
163
215
  f"BentoML deployment service started and reachable at:\n"
@@ -164,7 +164,7 @@ class GitHubCodeRepository(BaseCodeRepository):
164
164
  try:
165
165
  with open(local_path, "wb") as f:
166
166
  f.write(content.decoded_content)
167
- except (GithubException, IOError) as e:
167
+ except (GithubException, IOError, AssertionError) as e:
168
168
  logger.error("Error processing %s: %s", content.path, e)
169
169
 
170
170
  def get_local_context(self, path: str) -> Optional[LocalRepositoryContext]:
@@ -159,7 +159,12 @@ class GitLabCodeRepository(BaseCodeRepository):
159
159
  return True
160
160
 
161
161
  ssh_regex = re.compile(
162
- f".*{self.config.host}:{self.config.group}/{self.config.project}.git"
162
+ r"^(?P<scheme_with_delimiter>ssh://)?"
163
+ r"(?P<userinfo>git)"
164
+ f"@{self.config.host}:"
165
+ r"(?P<port>\d+)?"
166
+ r"(?(scheme_with_delimiter)/|/?)"
167
+ f"{self.config.group}/{self.config.project}.git$",
163
168
  )
164
169
  if ssh_regex.fullmatch(url):
165
170
  return True
@@ -57,14 +57,9 @@ class HuggingfaceIntegration(Integration):
57
57
  # - https://github.com/huggingface/datasets/issues/6697
58
58
  # TODO try relaxing it back going forward
59
59
  "fsspec<=2023.12.0",
60
+ "transformers",
60
61
  ]
61
62
 
62
- # In python 3.8 higher transformers version lead to other packages breaking
63
- if sys.version_info.minor > 8:
64
- requirements += ["transformers"]
65
- else:
66
- requirements += ["transformers<=4.31"]
67
-
68
63
  # Add the pandas integration requirements
69
64
  from zenml.integrations.pandas import PandasIntegration
70
65
 
@@ -199,9 +199,9 @@ class KanikoImageBuilder(BaseImageBuilder):
199
199
  "--image-name-with-digest-file=/dev/termination-log",
200
200
  ] + self.config.executor_args
201
201
 
202
- optional_container_args: Dict[str, Any] = {}
202
+ optional_spec_args: Dict[str, Any] = {}
203
203
  if self.config.service_account_name:
204
- optional_container_args["serviceAccountName"] = (
204
+ optional_spec_args["serviceAccountName"] = (
205
205
  self.config.service_account_name
206
206
  )
207
207
 
@@ -218,10 +218,10 @@ class KanikoImageBuilder(BaseImageBuilder):
218
218
  "env": self.config.env,
219
219
  "envFrom": self.config.env_from,
220
220
  "volumeMounts": self.config.volume_mounts,
221
- **optional_container_args,
222
221
  }
223
222
  ],
224
223
  "volumes": self.config.volumes,
224
+ **optional_spec_args,
225
225
  },
226
226
  }
227
227
 
@@ -399,7 +399,7 @@ class LightningOrchestrator(WheeledOrchestrator):
399
399
  f"Installing requirements: {pipeline_requirements_to_string}"
400
400
  )
401
401
  studio.run(f"uv pip install {pipeline_requirements_to_string}")
402
- studio.run("pip install zenml -y")
402
+ studio.run("pip install zenml")
403
403
 
404
404
  for custom_command in settings.custom_commands or []:
405
405
  studio.run(
@@ -493,7 +493,7 @@ class LightningOrchestrator(WheeledOrchestrator):
493
493
  )
494
494
  studio.run("pip install uv")
495
495
  studio.run(f"uv pip install {requirements}")
496
- studio.run("pip install zenml -y")
496
+ studio.run("pip install zenml")
497
497
  # studio.run(f"pip install {wheel_path.rsplit('/', 1)[-1]}")
498
498
  for command in settings.custom_commands or []:
499
499
  output = studio.run(
@@ -566,7 +566,7 @@ class LightningOrchestrator(WheeledOrchestrator):
566
566
  )
567
567
  studio.run("pip install uv")
568
568
  studio.run(f"uv pip install {details['requirements']}")
569
- studio.run("pip install zenml -y")
569
+ studio.run("pip install zenml")
570
570
  # studio.run(f"pip install {wheel_path.rsplit('/', 1)[-1]}")
571
571
  for command in custom_commands or []:
572
572
  output = studio.run(
@@ -166,7 +166,7 @@ def main() -> None:
166
166
  f"uv pip install {pipeline_requirements_to_string}"
167
167
  )
168
168
  logger.info(output)
169
- output = main_studio.run("pip install zenml -y")
169
+ output = main_studio.run("pip install zenml")
170
170
  logger.info(output)
171
171
 
172
172
  for command in pipeline_settings.custom_commands or []:
@@ -248,7 +248,7 @@ def main() -> None:
248
248
  f"uv pip install {step_requirements_to_string}"
249
249
  )
250
250
  logger.info(output)
251
- output = studio.run("pip install zenml -y")
251
+ output = studio.run("pip install zenml")
252
252
  logger.info(output)
253
253
  for command in step_settings.custom_commands or []:
254
254
  output = studio.run(
@@ -221,13 +221,16 @@ class MLFlowExperimentTracker(BaseExperimentTracker):
221
221
  Returns:
222
222
  A dictionary of metadata.
223
223
  """
224
- return {
224
+ metadata: Dict[str, Any] = {
225
225
  METADATA_EXPERIMENT_TRACKER_URL: Uri(
226
226
  self.get_tracking_uri(as_plain_text=False)
227
227
  ),
228
- "mlflow_run_id": mlflow.active_run().info.run_id,
229
- "mlflow_experiment_id": mlflow.active_run().info.experiment_id,
230
228
  }
229
+ if run := mlflow.active_run():
230
+ metadata["mlflow_run_id"] = run.info.run_id
231
+ metadata["mlflow_experiment_id"] = run.info.experiment_id
232
+
233
+ return metadata
231
234
 
232
235
  def disable_autologging(self) -> None:
233
236
  """Disables MLflow autologging for all supported frameworks."""
@@ -362,10 +362,16 @@ class MLFlowModelRegistry(BaseModelRegistry):
362
362
 
363
363
  Raises:
364
364
  RuntimeError: If the registered model does not exist.
365
+ ValueError: If no model source URI was provided.
365
366
 
366
367
  Returns:
367
368
  The registered model version.
368
369
  """
370
+ if not model_source_uri:
371
+ raise ValueError(
372
+ "Unable to register model version without model source URI."
373
+ )
374
+
369
375
  # Check if the model exists, if not create it.
370
376
  try:
371
377
  self.get_model(name=name)
@@ -225,7 +225,7 @@ class MLFlowDeploymentService(LocalDaemonService, BaseDeploymentService):
225
225
  # to run the deploy the model on the local running environment
226
226
  if int(mlflow_version[0]) >= 2:
227
227
  backend_kwargs["env_manager"] = "local"
228
- backend = PyFuncBackend(
228
+ backend = PyFuncBackend( # type: ignore[no-untyped-call]
229
229
  config={},
230
230
  no_conda=True,
231
231
  workers=self.config.workers,
@@ -240,7 +240,7 @@ class MLFlowDeploymentService(LocalDaemonService, BaseDeploymentService):
240
240
  "stack."
241
241
  )
242
242
  experiment_tracker.configure_mlflow()
243
- backend.serve(
243
+ backend.serve( # type: ignore[no-untyped-call]
244
244
  model_uri=self.config.model_uri,
245
245
  port=self.endpoint.status.port,
246
246
  host="localhost",
@@ -114,7 +114,7 @@ def mlflow_model_deployer_step(
114
114
  # Fetch the model URI from the MLflow artifact store
115
115
  model_uri = ""
116
116
  if mlflow_run_id and client.list_artifacts(mlflow_run_id, model_name):
117
- model_uri = artifact_utils.get_artifact_uri(
117
+ model_uri = artifact_utils.get_artifact_uri( # type: ignore[no-untyped-call]
118
118
  run_id=mlflow_run_id, artifact_path=model_name
119
119
  )
120
120
 
@@ -124,7 +124,7 @@ def mlflow_register_model_step(
124
124
  if not model_source_uri and client.list_artifacts(
125
125
  mlflow_run_id, trained_model_name
126
126
  ):
127
- model_source_uri = artifact_utils.get_artifact_uri(
127
+ model_source_uri = artifact_utils.get_artifact_uri( # type: ignore[no-untyped-call]
128
128
  run_id=mlflow_run_id, artifact_path=trained_model_name
129
129
  )
130
130
  if not model_source_uri: