zenml-nightly 0.67.0.dev20241002__py3-none-any.whl → 0.68.0.dev20241027__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 (528) hide show
  1. README.md +2 -2
  2. RELEASE_NOTES.md +129 -0
  3. zenml/VERSION +1 -1
  4. zenml/__init__.py +4 -9
  5. zenml/analytics/enums.py +0 -13
  6. zenml/artifact_stores/base_artifact_store.py +11 -0
  7. zenml/artifacts/artifact_config.py +19 -65
  8. zenml/artifacts/external_artifact.py +7 -53
  9. zenml/artifacts/external_artifact_config.py +21 -40
  10. zenml/artifacts/load_directory_materializer.py +91 -0
  11. zenml/artifacts/utils.py +320 -85
  12. zenml/cli/__init__.py +1 -39
  13. zenml/cli/base.py +5 -5
  14. zenml/cli/integration.py +0 -9
  15. zenml/cli/pipeline.py +1 -1
  16. zenml/cli/served_model.py +8 -1
  17. zenml/cli/server.py +8 -232
  18. zenml/cli/stack.py +1 -567
  19. zenml/cli/stack_components.py +0 -578
  20. zenml/cli/utils.py +0 -65
  21. zenml/client.py +11 -26
  22. zenml/client_lazy_loader.py +29 -12
  23. zenml/config/compiler.py +6 -11
  24. zenml/config/server_config.py +7 -5
  25. zenml/config/step_configurations.py +2 -0
  26. zenml/constants.py +3 -33
  27. zenml/enums.py +0 -3
  28. zenml/environment.py +1 -315
  29. zenml/exceptions.py +1 -41
  30. zenml/hooks/hook_validators.py +1 -8
  31. zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +2 -3
  32. zenml/integrations/argilla/__init__.py +1 -1
  33. zenml/integrations/argilla/annotators/argilla_annotator.py +234 -89
  34. zenml/integrations/argilla/flavors/argilla_annotator_flavor.py +10 -5
  35. zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py +9 -5
  36. zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +15 -2
  37. zenml/integrations/aws/service_connectors/aws_service_connector.py +6 -0
  38. zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +5 -4
  39. zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
  40. zenml/integrations/bentoml/model_deployers/bentoml_model_deployer.py +85 -19
  41. zenml/integrations/bentoml/services/__init__.py +15 -4
  42. zenml/integrations/bentoml/services/bentoml_container_deployment.py +399 -0
  43. zenml/integrations/bentoml/services/{bentoml_deployment.py → bentoml_local_deployment.py} +81 -40
  44. zenml/{steps/base_parameters.py → integrations/bentoml/services/deployment_type.py} +8 -5
  45. zenml/integrations/bentoml/steps/bento_builder.py +1 -0
  46. zenml/integrations/bentoml/steps/bentoml_deployer.py +93 -41
  47. zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py +6 -1
  48. zenml/integrations/huggingface/__init__.py +1 -6
  49. zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +3 -3
  50. zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +3 -3
  51. zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +2 -2
  52. zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +6 -3
  53. zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +6 -0
  54. zenml/integrations/mlflow/services/mlflow_deployment.py +2 -2
  55. zenml/integrations/mlflow/steps/mlflow_deployer.py +1 -1
  56. zenml/integrations/mlflow/steps/mlflow_registry.py +1 -1
  57. zenml/integrations/neptune/experiment_trackers/run_state.py +2 -2
  58. zenml/integrations/s3/artifact_stores/s3_artifact_store.py +98 -0
  59. zenml/integrations/s3/flavors/s3_artifact_store_flavor.py +14 -0
  60. zenml/integrations/s3/utils.py +40 -0
  61. zenml/integrations/tensorflow/__init__.py +0 -9
  62. zenml/logging/step_logging.py +13 -15
  63. zenml/materializers/__init__.py +2 -0
  64. zenml/materializers/uuid_materializer.py +79 -0
  65. zenml/metadata/lazy_load.py +10 -7
  66. zenml/model/lazy_load.py +85 -4
  67. zenml/model/model.py +61 -45
  68. zenml/model/utils.py +47 -118
  69. zenml/models/__init__.py +3 -0
  70. zenml/models/v2/core/artifact_version.py +4 -15
  71. zenml/models/v2/core/model.py +1 -0
  72. zenml/models/v2/core/model_version.py +1 -1
  73. zenml/models/v2/core/pipeline_run.py +1 -2
  74. zenml/models/v2/core/run_metadata.py +2 -2
  75. zenml/models/v2/core/step_run.py +15 -12
  76. zenml/models/v2/misc/server_models.py +0 -4
  77. zenml/orchestrators/base_orchestrator.py +33 -0
  78. zenml/orchestrators/input_utils.py +52 -36
  79. zenml/orchestrators/step_launcher.py +49 -171
  80. zenml/orchestrators/step_run_utils.py +566 -0
  81. zenml/orchestrators/step_runner.py +102 -151
  82. zenml/orchestrators/utils.py +1 -158
  83. zenml/pipelines/__init__.py +3 -16
  84. zenml/{new/pipelines → pipelines}/pipeline_context.py +3 -18
  85. zenml/pipelines/pipeline_decorator.py +29 -60
  86. zenml/{new/pipelines/pipeline.py → pipelines/pipeline_definition.py} +4 -47
  87. zenml/stack/stack.py +1 -102
  88. zenml/stack/stack_component.py +0 -71
  89. zenml/stack_deployments/aws_stack_deployment.py +3 -0
  90. zenml/step_operators/step_operator_entrypoint_configuration.py +1 -1
  91. zenml/steps/__init__.py +3 -9
  92. zenml/steps/base_step.py +17 -265
  93. zenml/steps/entrypoint_function_utils.py +2 -80
  94. zenml/{new/steps → steps}/step_context.py +12 -63
  95. zenml/steps/step_decorator.py +42 -89
  96. zenml/steps/step_invocation.py +2 -55
  97. zenml/steps/utils.py +3 -23
  98. zenml/utils/dashboard_utils.py +16 -51
  99. zenml/utils/typing_utils.py +8 -28
  100. zenml/zen_server/dashboard/assets/{404-Y50hSt65.js → 404-DT4QRUqN.js} +1 -1
  101. zenml/zen_server/dashboard/assets/@radix-DP6vWzyx.js +85 -0
  102. zenml/zen_server/dashboard/assets/@react-router-BMhZulnd.js +29 -0
  103. zenml/zen_server/dashboard/assets/@reactflow-8U9qNlMR.js +17 -0
  104. zenml/zen_server/dashboard/assets/@tanstack-BUCbhJyH.js +22 -0
  105. zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-xLR9a1iw.js → AlertDialogDropdownItem-C6N2rGrB.js} +1 -1
  106. zenml/zen_server/dashboard/assets/{CodeSnippet-IxXNxUDa.js → CodeSnippet-CqybNv0k.js} +1 -1
  107. zenml/zen_server/dashboard/assets/{CollapsibleCard-BhutZbBL.js → CollapsibleCard-0r_8G2Lj.js} +1 -1
  108. zenml/zen_server/dashboard/assets/{Commands-Bf-rd1z8.js → Commands-BDjgBQKi.js} +1 -1
  109. zenml/zen_server/dashboard/assets/ComponentBadge-DUiEYJHu.js +1 -0
  110. zenml/zen_server/dashboard/assets/ComponentFallbackDialog-BFoH5K4V.js +1 -0
  111. zenml/zen_server/dashboard/assets/ComponentIcon-CAIoUis2.js +1 -0
  112. zenml/zen_server/dashboard/assets/{CopyButton-DcFHidFJ.js → CopyButton-C745BrKi.js} +1 -1
  113. zenml/zen_server/dashboard/assets/{CsvVizualization-QSbjrfxw.js → CsvVizualization-PpAq0CeZ.js} +5 -5
  114. zenml/zen_server/dashboard/assets/{DialogItem-Cd3HqST4.js → DialogItem-DcVCZEew.js} +1 -1
  115. zenml/zen_server/dashboard/assets/{DisplayDate-DkCy54Bp.js → DisplayDate-BeXgUG_C.js} +1 -1
  116. zenml/zen_server/dashboard/assets/{EmptyState-Cs3DEmso.js → EmptyState-DeK7H4pr.js} +1 -1
  117. zenml/zen_server/dashboard/assets/{Error-BhwdmqK7.js → Error-BMlzibXj.js} +1 -1
  118. zenml/zen_server/dashboard/assets/{Helpbox-0pBpTwTm.js → Helpbox-BLf40fLV.js} +1 -1
  119. zenml/zen_server/dashboard/assets/{Infobox-BTK_EUKT.js → Infobox-BwisKifi.js} +1 -1
  120. zenml/zen_server/dashboard/assets/{InlineAvatar-CA3DFMcM.js → InlineAvatar-jEgodSgX.js} +1 -1
  121. zenml/zen_server/dashboard/assets/{Lock-CmIn0szs.js → Lock-3lLt1ih0.js} +1 -1
  122. zenml/zen_server/dashboard/assets/MarkdownVisualization-8O9kTr-2.js +14 -0
  123. zenml/zen_server/dashboard/assets/{NumberBox-CrN0_kqI.js → NumberBox-T9eELfLZ.js} +1 -1
  124. zenml/zen_server/dashboard/assets/{Partials-QLOZw624.js → Partials-YPBB3V4q.js} +1 -1
  125. zenml/zen_server/dashboard/assets/{PasswordChecker-DE71J_3F.js → PasswordChecker-CW0kqY0W.js} +1 -1
  126. zenml/zen_server/dashboard/assets/{ProviderIcon-C16CCIN4.js → ProviderIcon-Bb3Xha5A.js} +1 -1
  127. zenml/zen_server/dashboard/assets/{ProviderRadio-D3FuCHf3.js → ProviderRadio-BROY1700.js} +1 -1
  128. zenml/zen_server/dashboard/assets/RunSelector-DCiL3M1c.js +1 -0
  129. zenml/zen_server/dashboard/assets/SearchField-DfUiGFVd.js +1 -0
  130. zenml/zen_server/dashboard/assets/{SecretTooltip-BaMwHF-Q.js → SecretTooltip-C_qByGWB.js} +1 -1
  131. zenml/zen_server/dashboard/assets/{SetPassword-DuIC65H9.js → SetPassword-7pRB00El.js} +1 -1
  132. zenml/zen_server/dashboard/assets/{Tick-DJTCF0Re.js → Tick-CykQFPj2.js} +1 -1
  133. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-CUm-DMpw.js → UpdatePasswordSchemas-DckMEkFf.js} +1 -1
  134. zenml/zen_server/dashboard/assets/{UsageReason-CKw0juLF.js → UsageReason-DVceN14P.js} +1 -1
  135. zenml/zen_server/dashboard/assets/{WizardFooter-Cv9ApYWU.js → WizardFooter-CW0Cvd70.js} +1 -1
  136. zenml/zen_server/dashboard/assets/{check-circle-DOoS4yhF.js → check-circle-Dwxliy1Z.js} +1 -1
  137. zenml/zen_server/dashboard/assets/{chevron-down-Cwb-W_B_.js → chevron-down-8wLBS5pQ.js} +1 -1
  138. zenml/zen_server/dashboard/assets/{chevron-right-double-c9H46Kl8.js → chevron-right-double-DoD8iXWM.js} +1 -1
  139. zenml/zen_server/dashboard/assets/{cloud-only-BB4BVa6E.js → cloud-only-B-s_HMDm.js} +1 -1
  140. zenml/zen_server/dashboard/assets/{code-browser-BJYErIjr.js → code-browser-CZUQs3Wa.js} +1 -1
  141. zenml/zen_server/dashboard/assets/{copy-CaGlDsUy.js → copy-CaSMXwiU.js} +1 -1
  142. zenml/zen_server/dashboard/assets/{create-stack-F29xAUEx.js → create-stack-CEmaPZ4c.js} +1 -1
  143. zenml/zen_server/dashboard/assets/delete-run-D-LKbGyz.js +1 -0
  144. zenml/zen_server/dashboard/assets/{docker-BFAFXr2_.js → docker-BFNgg-z3.js} +1 -1
  145. zenml/zen_server/dashboard/assets/{dots-horizontal-C6K59vUm.js → dots-horizontal-DK5Duzx4.js} +1 -1
  146. zenml/zen_server/dashboard/assets/{form-schemas-BKXwSDK2.js → form-schemas-1AyOCx90.js} +1 -1
  147. zenml/zen_server/dashboard/assets/{gcp-Dj6ntk0L.js → gcp-7M2Yf3ZK.js} +1 -1
  148. zenml/zen_server/dashboard/assets/{help-CwN931fX.js → help-Dam461dC.js} +1 -1
  149. zenml/zen_server/dashboard/assets/{index-5GJ5ysEZ.js → index-BVJ8n2-j.js} +1 -1
  150. zenml/zen_server/dashboard/assets/index-Bpmj40BI.js +1 -0
  151. zenml/zen_server/dashboard/assets/index-CbU4Ln_E.css +1 -0
  152. zenml/zen_server/dashboard/assets/{index-D-mtoBj3.js → index-DKPhqP2B.js} +1 -1
  153. zenml/zen_server/dashboard/assets/index-QQb7wQEC.js +55 -0
  154. zenml/zen_server/dashboard/assets/index.esm-cuVep_NJ.js +1 -0
  155. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-BLGc9T1a.woff2 +0 -0
  156. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-ZzOtrSSW.woff +0 -0
  157. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-D4Vwzodn.woff2 +0 -0
  158. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DH2hs3aW.woff +0 -0
  159. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BGBWG807.woff2 +0 -0
  160. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BuzJQFbW.woff +0 -0
  161. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-BPnxn4xp.woff +0 -0
  162. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-Dc4VJyIJ.woff2 +0 -0
  163. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-BShVwWPj.woff2 +0 -0
  164. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-CUiC4oBV.woff +0 -0
  165. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-Bt9VVOA-.woff +0 -0
  166. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-CaqZN2hq.woff2 +0 -0
  167. zenml/zen_server/dashboard/assets/inter-greek-400-normal-BZzXV7-1.woff +0 -0
  168. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DxZsaF_h.woff2 +0 -0
  169. zenml/zen_server/dashboard/assets/inter-greek-500-normal-CeQXL5ds.woff2 +0 -0
  170. zenml/zen_server/dashboard/assets/inter-greek-500-normal-d_eO-yCQ.woff +0 -0
  171. zenml/zen_server/dashboard/assets/inter-greek-600-normal-CwicyhtI.woff +0 -0
  172. zenml/zen_server/dashboard/assets/inter-greek-600-normal-Dhlb-90d.woff2 +0 -0
  173. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-Bput3-QP.woff2 +0 -0
  174. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-DCpCPQOf.woff +0 -0
  175. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-B6guLgqG.woff2 +0 -0
  176. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-M2hEX8vc.woff +0 -0
  177. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-C9WLioJ8.woff +0 -0
  178. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-Cnui8OiR.woff2 +0 -0
  179. zenml/zen_server/dashboard/assets/inter-latin-400-normal-BOOGhInR.woff2 +0 -0
  180. zenml/zen_server/dashboard/assets/inter-latin-400-normal-gitzw0hO.woff +0 -0
  181. zenml/zen_server/dashboard/assets/inter-latin-500-normal-D2bGa7uu.woff2 +0 -0
  182. zenml/zen_server/dashboard/assets/inter-latin-500-normal-deR1Tlfd.woff +0 -0
  183. zenml/zen_server/dashboard/assets/inter-latin-600-normal-B5cFAncS.woff +0 -0
  184. zenml/zen_server/dashboard/assets/inter-latin-600-normal-D273HNI0.woff2 +0 -0
  185. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-C1t-h-pH.woff +0 -0
  186. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-hnt3BR84.woff2 +0 -0
  187. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2 +0 -0
  188. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-UMdmhHu2.woff +0 -0
  189. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-BnYJhD27.woff2 +0 -0
  190. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-CAF0vJDd.woff +0 -0
  191. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-BUNmGMP1.woff +0 -0
  192. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
  193. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
  194. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DQPw2Hwd.woff +0 -0
  195. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
  196. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cm6aH8_k.woff +0 -0
  197. zenml/zen_server/dashboard/assets/{kubernetes-BjbR6D-1.js → kubernetes--g7r02Zu.js} +1 -1
  198. zenml/zen_server/dashboard/assets/{layout-Dru15_XR.js → layout-DCSYN7-C.js} +1 -1
  199. zenml/zen_server/dashboard/assets/{link-external-BT2L8hAQ.js → link-external-CBEk6kEG.js} +1 -1
  200. zenml/zen_server/dashboard/assets/{login-mutation-ax6iL2Mb.js → login-mutation-DTcAFP1l.js} +1 -1
  201. zenml/zen_server/dashboard/assets/{logs-GiDJXbLS.js → logs-D5bdJGur.js} +1 -1
  202. zenml/zen_server/dashboard/assets/not-found-Cc-JkRH2.js +1 -0
  203. zenml/zen_server/dashboard/assets/{package-DYKZ5jKW.js → package-Cs35Szwh.js} +1 -1
  204. zenml/zen_server/dashboard/assets/{page-HkVBdZl6.js → page-9yplj5JT.js} +1 -1
  205. zenml/zen_server/dashboard/assets/{page-uORspyRu.js → page-B-y2XKIc.js} +1 -1
  206. zenml/zen_server/dashboard/assets/page-BBpOxVcY.js +1 -0
  207. zenml/zen_server/dashboard/assets/{page-BDg1F-Ug.js → page-BQQKaabe.js} +2 -2
  208. zenml/zen_server/dashboard/assets/page-BRInM1Lg.js +1 -0
  209. zenml/zen_server/dashboard/assets/{page-CvKnNK1S.js → page-BjjlMk7s.js} +1 -1
  210. zenml/zen_server/dashboard/assets/{page-BukXK1Aa.js → page-Bvd7YH2A.js} +1 -1
  211. zenml/zen_server/dashboard/assets/{page-DcTjHmYZ.js → page-C0N5q3l7.js} +1 -1
  212. zenml/zen_server/dashboard/assets/page-CT3Nep8W.js +1 -0
  213. zenml/zen_server/dashboard/assets/{page-DuqYMYmH.js → page-C_f47pBf.js} +1 -1
  214. zenml/zen_server/dashboard/assets/{page-DRfcRK1w.js → page-ClUVkl-O.js} +1 -1
  215. zenml/zen_server/dashboard/assets/page-Cmv8C_yM.js +3 -0
  216. zenml/zen_server/dashboard/assets/{page-p0BhSAWx.js → page-CyN2bdWG.js} +1 -1
  217. zenml/zen_server/dashboard/assets/page-CzzXH4fs.js +1 -0
  218. zenml/zen_server/dashboard/assets/{page-6mfzecin.js → page-DH_Z7iW1.js} +1 -1
  219. zenml/zen_server/dashboard/assets/{page-8kYmrh0B.js → page-DIOXwhiD.js} +1 -1
  220. zenml/zen_server/dashboard/assets/{page-BXarY9K2.js → page-DLixvR-7.js} +1 -1
  221. zenml/zen_server/dashboard/assets/page-DTlGjgnG.js +1 -0
  222. zenml/zen_server/dashboard/assets/page-Dbpl86h0.js +1 -0
  223. zenml/zen_server/dashboard/assets/{page-MAXyfXBq.js → page-Ddgy6kDS.js} +1 -1
  224. zenml/zen_server/dashboard/assets/page-DtCAfBLy.js +9 -0
  225. zenml/zen_server/dashboard/assets/{page-CKHNAq7z.js → page-Dx16z7nA.js} +1 -1
  226. zenml/zen_server/dashboard/assets/{page-DMSLXKGT.js → page-DzpVUZ8f.js} +1 -1
  227. zenml/zen_server/dashboard/assets/page-McUyYbo1.js +1 -0
  228. zenml/zen_server/dashboard/assets/{page-miU2rhYG.js → page-N4qoPHKb.js} +1 -1
  229. zenml/zen_server/dashboard/assets/page-T1P3RyAR.js +1 -0
  230. zenml/zen_server/dashboard/assets/{page-3qPX9WYH.js → page-bKaULTGG.js} +1 -1
  231. zenml/zen_server/dashboard/assets/page-sbXUJy9t.js +1 -0
  232. zenml/zen_server/dashboard/assets/{persist-CfJMar_k.js → persist-CP0JmYZ4.js} +1 -1
  233. zenml/zen_server/dashboard/assets/{persist-BxIR2XZs.js → persist-DNb5cdrU.js} +1 -1
  234. zenml/zen_server/dashboard/assets/{plus-Bc8eLSDM.js → plus-C9IxgN2M.js} +1 -1
  235. zenml/zen_server/dashboard/assets/{refresh-hfgWPeto.js → refresh-BVu22P_C.js} +1 -1
  236. zenml/zen_server/dashboard/assets/{rocket-SESCGQXm.js → rocket-CONEmRmB.js} +1 -1
  237. zenml/zen_server/dashboard/assets/{sharedSchema-vub0rii3.js → sharedSchema-TMLu-nYQ.js} +1 -1
  238. zenml/zen_server/dashboard/assets/stack-detail-query-xmYxSsUY.js +1 -0
  239. zenml/zen_server/dashboard/assets/{tick-circle-m-hJG8i9.js → tick-circle-CM1ZScbQ.js} +1 -1
  240. zenml/zen_server/dashboard/assets/{trash-DUWZWzse.js → trash-DkJHMOg7.js} +1 -1
  241. zenml/zen_server/dashboard/assets/{update-server-settings-mutation-FGVP7X2U.js → update-server-settings-mutation-DsU8cNVl.js} +1 -1
  242. zenml/zen_server/dashboard/assets/{url-CbAPzsmT.js → url-D5le3J4q.js} +1 -1
  243. zenml/zen_server/dashboard/assets/zod-D89GC_vc.js +1 -0
  244. zenml/zen_server/dashboard/index.html +7 -7
  245. zenml/zen_server/deploy/__init__.py +0 -9
  246. zenml/zen_server/deploy/docker/docker_zen_server.py +0 -6
  247. zenml/zen_server/deploy/helm/Chart.yaml +1 -1
  248. zenml/zen_server/deploy/helm/README.md +2 -2
  249. zenml/zen_server/deploy/local/local_zen_server.py +0 -6
  250. zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +1 -1
  251. zenml/zen_server/routers/artifact_version_endpoints.py +1 -1
  252. zenml/zen_server/routers/runs_endpoints.py +0 -28
  253. zenml/zen_server/template_execution/runner_entrypoint_configuration.py +1 -1
  254. zenml/zen_server/template_execution/utils.py +2 -2
  255. zenml/zen_server/utils.py +10 -40
  256. zenml/zen_server/zen_server_api.py +107 -17
  257. zenml/zen_stores/base_zen_store.py +0 -2
  258. zenml/zen_stores/migrations/versions/0.68.0_release.py +23 -0
  259. zenml/zen_stores/migrations/versions/1d8f30c54477_migrate_to_new_.py +124 -0
  260. zenml/zen_stores/schemas/pipeline_run_schemas.py +12 -4
  261. zenml/zen_stores/schemas/step_run_schemas.py +2 -2
  262. zenml/zen_stores/sql_zen_store.py +29 -5
  263. {zenml_nightly-0.67.0.dev20241002.dist-info → zenml_nightly-0.68.0.dev20241027.dist-info}/METADATA +4 -8
  264. {zenml_nightly-0.67.0.dev20241002.dist-info → zenml_nightly-0.68.0.dev20241027.dist-info}/RECORD +270 -450
  265. {zenml_nightly-0.67.0.dev20241002.dist-info → zenml_nightly-0.68.0.dev20241027.dist-info}/WHEEL +1 -1
  266. zenml/cli/stack_recipes.py +0 -469
  267. zenml/lineage_graph/__init__.py +0 -34
  268. zenml/lineage_graph/edge.py +0 -24
  269. zenml/lineage_graph/lineage_graph.py +0 -244
  270. zenml/lineage_graph/node/__init__.py +0 -32
  271. zenml/lineage_graph/node/artifact_node.py +0 -51
  272. zenml/lineage_graph/node/base_node.py +0 -31
  273. zenml/lineage_graph/node/step_node.py +0 -41
  274. zenml/model/model_version.py +0 -38
  275. zenml/new/__init__.py +0 -13
  276. zenml/new/pipelines/__init__.py +0 -13
  277. zenml/new/pipelines/code_archive.py +0 -157
  278. zenml/new/pipelines/pipeline_decorator.py +0 -118
  279. zenml/new/steps/__init__.py +0 -13
  280. zenml/new/steps/step_decorator.py +0 -176
  281. zenml/pipelines/base_pipeline.py +0 -273
  282. zenml/post_execution/__init__.py +0 -30
  283. zenml/post_execution/pipeline.py +0 -55
  284. zenml/post_execution/pipeline_run.py +0 -55
  285. zenml/services/terraform/__init__.py +0 -14
  286. zenml/services/terraform/terraform_service.py +0 -441
  287. zenml/steps/external_artifact.py +0 -26
  288. zenml/steps/step_environment.py +0 -108
  289. zenml/steps/step_output.py +0 -36
  290. zenml/utils/mlstacks_utils.py +0 -635
  291. zenml/utils/terraform_utils.py +0 -43
  292. zenml/zen_server/dashboard/assets/@radix-DnFH_oo1.js +0 -85
  293. zenml/zen_server/dashboard/assets/@react-router-APVeuk-U.js +0 -29
  294. zenml/zen_server/dashboard/assets/@reactflow-ytavUpwh.js +0 -17
  295. zenml/zen_server/dashboard/assets/@tanstack-QbMbTrh5.js +0 -22
  296. zenml/zen_server/dashboard/assets/ComponentBadge-gKR1OIwG.js +0 -1
  297. zenml/zen_server/dashboard/assets/ExecutionStatus-D6r6aK8J.js +0 -1
  298. zenml/zen_server/dashboard/assets/MarkdownVisualization-DS05sfBm.js +0 -14
  299. zenml/zen_server/dashboard/assets/SearchField-BzmfxS0L.js +0 -1
  300. zenml/zen_server/dashboard/assets/all-pipeline-runs-query-BA3R2Sey.js +0 -1
  301. zenml/zen_server/dashboard/assets/delete-run-CP0pcJ3U.js +0 -1
  302. zenml/zen_server/dashboard/assets/index-BhJ6ZJxv.css +0 -1
  303. zenml/zen_server/dashboard/assets/index-Ci0nJ8EZ.js +0 -55
  304. zenml/zen_server/dashboard/assets/index.esm-BE1uqCX5.js +0 -1
  305. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-Df6ckaLK.woff2 +0 -0
  306. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-JrS_4yms.woff +0 -0
  307. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-BRrLR67x.woff2 +0 -0
  308. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DskEQOpE.woff +0 -0
  309. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-DDpWG8g5.woff2 +0 -0
  310. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-iz1--dBq.woff +0 -0
  311. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-CzG7Kr3z.woff +0 -0
  312. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-tyfMZHQw.woff2 +0 -0
  313. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-DOnSzjnx.woff2 +0 -0
  314. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-Xebo2OyJ.woff +0 -0
  315. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-DpA2xaRd.woff2 +0 -0
  316. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-KAwcVx6H.woff +0 -0
  317. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DQXyrmoy.woff2 +0 -0
  318. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DvIPHDQ7.woff +0 -0
  319. zenml/zen_server/dashboard/assets/inter-greek-500-normal-BjpBGs91.woff +0 -0
  320. zenml/zen_server/dashboard/assets/inter-greek-500-normal-CmOavsDc.woff2 +0 -0
  321. zenml/zen_server/dashboard/assets/inter-greek-600-normal-B-l8Lzzd.woff2 +0 -0
  322. zenml/zen_server/dashboard/assets/inter-greek-600-normal-BLZsI-P3.woff +0 -0
  323. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-CIdlr5YK.woff2 +0 -0
  324. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-_Rr29XE2.woff +0 -0
  325. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-2pdUafRD.woff2 +0 -0
  326. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-Dtavx3qw.woff +0 -0
  327. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-BmtRFZgT.woff +0 -0
  328. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-CkBLDEl_.woff2 +0 -0
  329. zenml/zen_server/dashboard/assets/inter-latin-400-normal-BT1H-PT_.woff2 +0 -0
  330. zenml/zen_server/dashboard/assets/inter-latin-400-normal-Cdi8t5Mu.woff +0 -0
  331. zenml/zen_server/dashboard/assets/inter-latin-500-normal-D4I8BKCx.woff +0 -0
  332. zenml/zen_server/dashboard/assets/inter-latin-500-normal-kWhwEdDH.woff2 +0 -0
  333. zenml/zen_server/dashboard/assets/inter-latin-600-normal-B2Ssfs8e.woff2 +0 -0
  334. zenml/zen_server/dashboard/assets/inter-latin-600-normal-Dbvh0wvx.woff +0 -0
  335. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-8tIzm-yw.woff +0 -0
  336. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-D3W-OpO-.woff2 +0 -0
  337. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-B9u8Q_zH.woff2 +0 -0
  338. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-SuUkSNTU.woff +0 -0
  339. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-Dg0Bk0Yr.woff +0 -0
  340. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-ao35dkSb.woff2 +0 -0
  341. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-Cnt0N5Vm.woff2 +0 -0
  342. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DIOGfGLL.woff +0 -0
  343. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-0i6yoQMg.woff +0 -0
  344. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-5IkPJ6Nk.woff2 +0 -0
  345. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-BQ_dbMbg.woff +0 -0
  346. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-DjnxGF-L.woff2 +0 -0
  347. zenml/zen_server/dashboard/assets/not-found-DbjllLY_.js +0 -1
  348. zenml/zen_server/dashboard/assets/page-B1n7_W7z.js +0 -1
  349. zenml/zen_server/dashboard/assets/page-BZZhLo2u.js +0 -1
  350. zenml/zen_server/dashboard/assets/page-Bbf_oBjn.js +0 -1
  351. zenml/zen_server/dashboard/assets/page-BjjuBvZG.js +0 -9
  352. zenml/zen_server/dashboard/assets/page-CHaQkFK5.js +0 -1
  353. zenml/zen_server/dashboard/assets/page-CS0SYFK8.js +0 -1
  354. zenml/zen_server/dashboard/assets/page-DGM1CbYT.js +0 -2
  355. zenml/zen_server/dashboard/assets/page-DOmIZ2ra.js +0 -1
  356. zenml/zen_server/dashboard/assets/page-DYVmJ9_w.js +0 -3
  357. zenml/zen_server/dashboard/assets/page-Dwow2doB.js +0 -1
  358. zenml/zen_server/dashboard/assets/stack-detail-query-DQcyzG-2.js +0 -1
  359. zenml/zen_server/dashboard/assets/zod-uFd1wBcd.js +0 -1
  360. zenml/zen_server/dashboard_legacy/_redirects +0 -1
  361. zenml/zen_server/dashboard_legacy/asset-manifest.json +0 -131
  362. zenml/zen_server/dashboard_legacy/favicon.ico +0 -0
  363. zenml/zen_server/dashboard_legacy/index.html +0 -1
  364. zenml/zen_server/dashboard_legacy/manifest.json +0 -25
  365. zenml/zen_server/dashboard_legacy/precache-manifest.6d320abb70db612019dda6c4948e7a90.js +0 -462
  366. zenml/zen_server/dashboard_legacy/robots.txt +0 -2
  367. zenml/zen_server/dashboard_legacy/service-worker.js +0 -39
  368. zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css +0 -16
  369. zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css.map +0 -1
  370. zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css +0 -2
  371. zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css.map +0 -1
  372. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js +0 -3
  373. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.LICENSE.txt +0 -95
  374. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.map +0 -1
  375. zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js +0 -2
  376. zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js.map +0 -1
  377. zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js +0 -2
  378. zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js.map +0 -1
  379. zenml/zen_server/dashboard_legacy/static/media/AlertTriangle.28aee535.svg +0 -5
  380. zenml/zen_server/dashboard_legacy/static/media/ArrowSquareOut.abfb9bc7.svg +0 -5
  381. zenml/zen_server/dashboard_legacy/static/media/Back.86c23a22.svg +0 -4
  382. zenml/zen_server/dashboard_legacy/static/media/BookOpen.5cb101ff.svg +0 -4
  383. zenml/zen_server/dashboard_legacy/static/media/BoundingBox.1eb98717.svg +0 -10
  384. zenml/zen_server/dashboard_legacy/static/media/Burger.9b1c67d7.svg +0 -3
  385. zenml/zen_server/dashboard_legacy/static/media/Cached.2381fb8d.svg +0 -1
  386. zenml/zen_server/dashboard_legacy/static/media/Calendar.356e11c7.svg +0 -3
  387. zenml/zen_server/dashboard_legacy/static/media/ChartBarHorizontal.0247447b.svg +0 -6
  388. zenml/zen_server/dashboard_legacy/static/media/ChartLine.0d79e18d.svg +0 -4
  389. zenml/zen_server/dashboard_legacy/static/media/ChatDots.2e1c9211.svg +0 -6
  390. zenml/zen_server/dashboard_legacy/static/media/Check.dad6beb2.svg +0 -3
  391. zenml/zen_server/dashboard_legacy/static/media/CheckCircleFilled.c19566d0.svg +0 -3
  392. zenml/zen_server/dashboard_legacy/static/media/Checkbox.af50e31e.svg +0 -3
  393. zenml/zen_server/dashboard_legacy/static/media/ChevronDown.f860ce32.svg +0 -3
  394. zenml/zen_server/dashboard_legacy/static/media/ChevronDownLight.6642d756.svg +0 -3
  395. zenml/zen_server/dashboard_legacy/static/media/ChevronLeft.f6edfcdb.svg +0 -3
  396. zenml/zen_server/dashboard_legacy/static/media/CircleCheck.f98fd6ca.svg +0 -1
  397. zenml/zen_server/dashboard_legacy/static/media/Clock.ffc9de95.svg +0 -3
  398. zenml/zen_server/dashboard_legacy/static/media/Close.74e9efbc.svg +0 -5
  399. zenml/zen_server/dashboard_legacy/static/media/CloseWithBorder.6960930a.svg +0 -3
  400. zenml/zen_server/dashboard_legacy/static/media/CloseWithoutBorder.cd6f71df.svg +0 -3
  401. zenml/zen_server/dashboard_legacy/static/media/CloudArrowUp.0aecb235.svg +0 -6
  402. zenml/zen_server/dashboard_legacy/static/media/Code.ef0f33b5.svg +0 -3
  403. zenml/zen_server/dashboard_legacy/static/media/Config.0be63f8a.svg +0 -1
  404. zenml/zen_server/dashboard_legacy/static/media/Connector.9fd46ef1.svg +0 -10
  405. zenml/zen_server/dashboard_legacy/static/media/Copy.36e2112a.svg +0 -1
  406. zenml/zen_server/dashboard_legacy/static/media/Dashboard.d05787e0.svg +0 -3
  407. zenml/zen_server/dashboard_legacy/static/media/Data.b1c3b5f8.svg +0 -3
  408. zenml/zen_server/dashboard_legacy/static/media/Delete.3c361b28.svg +0 -8
  409. zenml/zen_server/dashboard_legacy/static/media/Docs.7541d478.svg +0 -7
  410. zenml/zen_server/dashboard_legacy/static/media/Download.fba04d87.svg +0 -5
  411. zenml/zen_server/dashboard_legacy/static/media/Edit.490eb294.svg +0 -6
  412. zenml/zen_server/dashboard_legacy/static/media/EmptyRightArrow.23749d01.svg +0 -3
  413. zenml/zen_server/dashboard_legacy/static/media/Example.6396cd37.svg +0 -5
  414. zenml/zen_server/dashboard_legacy/static/media/Extension.1394cd4a.svg +0 -3
  415. zenml/zen_server/dashboard_legacy/static/media/Eye.d9e4ee62.svg +0 -4
  416. zenml/zen_server/dashboard_legacy/static/media/Failed.0213c1a0.svg +0 -1
  417. zenml/zen_server/dashboard_legacy/static/media/FileText.1f15bacd.svg +0 -7
  418. zenml/zen_server/dashboard_legacy/static/media/Filter.ab6b9c0d.svg +0 -3
  419. zenml/zen_server/dashboard_legacy/static/media/Folders.12b29887.svg +0 -5
  420. zenml/zen_server/dashboard_legacy/static/media/FunnelFill.6df4c143.svg +0 -3
  421. zenml/zen_server/dashboard_legacy/static/media/GitCommit.7dd9c2aa.svg +0 -5
  422. zenml/zen_server/dashboard_legacy/static/media/GitHub_Logo.cefc2023.png +0 -0
  423. zenml/zen_server/dashboard_legacy/static/media/Graph.2c63a892.svg +0 -11
  424. zenml/zen_server/dashboard_legacy/static/media/History.08329240.svg +0 -3
  425. zenml/zen_server/dashboard_legacy/static/media/Home.0843b0d5.svg +0 -3
  426. zenml/zen_server/dashboard_legacy/static/media/ImageBuilder.ea762d9c.svg +0 -6
  427. zenml/zen_server/dashboard_legacy/static/media/InProgress.304a0edc.svg +0 -1
  428. zenml/zen_server/dashboard_legacy/static/media/Info.9fe10c5c.svg +0 -3
  429. zenml/zen_server/dashboard_legacy/static/media/KeyboardReturn.491afbe3.svg +0 -3
  430. zenml/zen_server/dashboard_legacy/static/media/Link.72bbb55d.svg +0 -4
  431. zenml/zen_server/dashboard_legacy/static/media/Lock.30f5e1fe.svg +0 -5
  432. zenml/zen_server/dashboard_legacy/static/media/Lock2.a769ea52.svg +0 -3
  433. zenml/zen_server/dashboard_legacy/static/media/LockKey.92f21621.svg +0 -6
  434. zenml/zen_server/dashboard_legacy/static/media/Logs.8bf4d005.svg +0 -5
  435. zenml/zen_server/dashboard_legacy/static/media/MinusCircle.4188f418.svg +0 -4
  436. zenml/zen_server/dashboard_legacy/static/media/ModelRegistry.f0de050a.svg +0 -6
  437. zenml/zen_server/dashboard_legacy/static/media/MultiUser.a2ba7c67.svg +0 -10
  438. zenml/zen_server/dashboard_legacy/static/media/PaginationFirst.92628634.svg +0 -4
  439. zenml/zen_server/dashboard_legacy/static/media/PaginationLast.00d3c732.svg +0 -4
  440. zenml/zen_server/dashboard_legacy/static/media/PaginationNext.86158845.svg +0 -3
  441. zenml/zen_server/dashboard_legacy/static/media/PaginationPrev.60c18a88.svg +0 -3
  442. zenml/zen_server/dashboard_legacy/static/media/Pen.f2d831d4.svg +0 -6
  443. zenml/zen_server/dashboard_legacy/static/media/PhotoCamera.179d6d4c.svg +0 -3
  444. zenml/zen_server/dashboard_legacy/static/media/Pipeline.30d298b0.svg +0 -7
  445. zenml/zen_server/dashboard_legacy/static/media/Plus.5aa1c16b.svg +0 -3
  446. zenml/zen_server/dashboard_legacy/static/media/PlusCircle.92d860dd.svg +0 -5
  447. zenml/zen_server/dashboard_legacy/static/media/Repositories.71a36b8c.svg +0 -3
  448. zenml/zen_server/dashboard_legacy/static/media/RightArrow.f30d3871.svg +0 -29
  449. zenml/zen_server/dashboard_legacy/static/media/Rocket.63bf7b9d.svg +0 -3
  450. zenml/zen_server/dashboard_legacy/static/media/RocketLaunch.1bff2b59.svg +0 -6
  451. zenml/zen_server/dashboard_legacy/static/media/Rubik-Medium.c87313aa.ttf +0 -0
  452. zenml/zen_server/dashboard_legacy/static/media/Rubik-Regular.b3d0902b.ttf +0 -0
  453. zenml/zen_server/dashboard_legacy/static/media/Run.daec4fb2.svg +0 -6
  454. zenml/zen_server/dashboard_legacy/static/media/Search.d1afcce5.svg +0 -4
  455. zenml/zen_server/dashboard_legacy/static/media/Settings.59ca73ae.svg +0 -4
  456. zenml/zen_server/dashboard_legacy/static/media/Share2.46c3ff66.svg +0 -3
  457. zenml/zen_server/dashboard_legacy/static/media/SignOut.6aa718c5.svg +0 -3
  458. zenml/zen_server/dashboard_legacy/static/media/SimplePlus.5cf7ec20.svg +0 -3
  459. zenml/zen_server/dashboard_legacy/static/media/SingleUser.bef3a095.svg +0 -4
  460. zenml/zen_server/dashboard_legacy/static/media/SourceCodePro-Regular.b484b32f.ttf +0 -0
  461. zenml/zen_server/dashboard_legacy/static/media/Stack.19b604ac.svg +0 -5
  462. zenml/zen_server/dashboard_legacy/static/media/StackComponent.b1ba90b5.svg +0 -4
  463. zenml/zen_server/dashboard_legacy/static/media/Star.f0c25022.svg +0 -9
  464. zenml/zen_server/dashboard_legacy/static/media/StarOutline.94ca8cd9.svg +0 -3
  465. zenml/zen_server/dashboard_legacy/static/media/Storefront.4b4796fe.svg +0 -3
  466. zenml/zen_server/dashboard_legacy/static/media/Stream.543e3039.svg +0 -3
  467. zenml/zen_server/dashboard_legacy/static/media/SupportAgent.510ddf1f.svg +0 -8
  468. zenml/zen_server/dashboard_legacy/static/media/Table.77033750.svg +0 -6
  469. zenml/zen_server/dashboard_legacy/static/media/Tool.d5785486.svg +0 -3
  470. zenml/zen_server/dashboard_legacy/static/media/UserPlus.741a99d7.svg +0 -6
  471. zenml/zen_server/dashboard_legacy/static/media/Verified.0625b2a0.svg +0 -3
  472. zenml/zen_server/dashboard_legacy/static/media/addNew.4fb6c939.svg +0 -8
  473. zenml/zen_server/dashboard_legacy/static/media/arrowClose.cbd53f3f.svg +0 -3
  474. zenml/zen_server/dashboard_legacy/static/media/arrowOpen.6ceef0af.svg +0 -3
  475. zenml/zen_server/dashboard_legacy/static/media/check_small.30bc0138.svg +0 -3
  476. zenml/zen_server/dashboard_legacy/static/media/circleArrowSideClose.98d6013e.svg +0 -18
  477. zenml/zen_server/dashboard_legacy/static/media/circleArrowSideOpen.63653df6.svg +0 -18
  478. zenml/zen_server/dashboard_legacy/static/media/image.104fd14b.png +0 -0
  479. zenml/zen_server/dashboard_legacy/static/media/imageAddIcon.e83004a9.svg +0 -7
  480. zenml/zen_server/dashboard_legacy/static/media/logo.93333e5c.svg +0 -1
  481. zenml/zen_server/dashboard_legacy/static/media/logo_small.4204397d.svg +0 -3
  482. zenml/zen_server/dashboard_legacy/static/media/logo_white.d4b4414e.svg +0 -20
  483. zenml/zen_server/dashboard_legacy/static/media/notConnected.5e2c8ea7.svg +0 -8
  484. zenml/zen_server/dashboard_legacy/static/media/plugin-fallback.72c294e6.svg +0 -6
  485. zenml/zen_server/dashboard_legacy/static/media/share.bcd998b0.svg +0 -5
  486. zenml/zen_server/dashboard_legacy/static/media/stars.08a9b19a.svg +0 -8
  487. zenml/zen_server/deploy/terraform/__init__.py +0 -41
  488. zenml/zen_server/deploy/terraform/providers/__init__.py +0 -14
  489. zenml/zen_server/deploy/terraform/providers/aws_provider.py +0 -61
  490. zenml/zen_server/deploy/terraform/providers/azure_provider.py +0 -59
  491. zenml/zen_server/deploy/terraform/providers/gcp_provider.py +0 -59
  492. zenml/zen_server/deploy/terraform/providers/terraform_provider.py +0 -331
  493. zenml/zen_server/deploy/terraform/recipes/aws/.gitignore +0 -8
  494. zenml/zen_server/deploy/terraform/recipes/aws/helm.tf +0 -20
  495. zenml/zen_server/deploy/terraform/recipes/aws/ingress.tf +0 -30
  496. zenml/zen_server/deploy/terraform/recipes/aws/outputs.tf +0 -7
  497. zenml/zen_server/deploy/terraform/recipes/aws/printf.cmd +0 -2
  498. zenml/zen_server/deploy/terraform/recipes/aws/sql.tf +0 -62
  499. zenml/zen_server/deploy/terraform/recipes/aws/terraform.tf +0 -44
  500. zenml/zen_server/deploy/terraform/recipes/aws/variables.tf +0 -167
  501. zenml/zen_server/deploy/terraform/recipes/aws/vpc.tf +0 -47
  502. zenml/zen_server/deploy/terraform/recipes/aws/zen_server.tf +0 -103
  503. zenml/zen_server/deploy/terraform/recipes/azure/.gitignore +0 -8
  504. zenml/zen_server/deploy/terraform/recipes/azure/helm.tf +0 -20
  505. zenml/zen_server/deploy/terraform/recipes/azure/ingress.tf +0 -30
  506. zenml/zen_server/deploy/terraform/recipes/azure/key_vault.tf +0 -73
  507. zenml/zen_server/deploy/terraform/recipes/azure/outputs.tf +0 -7
  508. zenml/zen_server/deploy/terraform/recipes/azure/printf.cmd +0 -2
  509. zenml/zen_server/deploy/terraform/recipes/azure/rg.tf +0 -36
  510. zenml/zen_server/deploy/terraform/recipes/azure/sql.tf +0 -65
  511. zenml/zen_server/deploy/terraform/recipes/azure/terraform.tf +0 -52
  512. zenml/zen_server/deploy/terraform/recipes/azure/variables.tf +0 -176
  513. zenml/zen_server/deploy/terraform/recipes/azure/zen_server.tf +0 -103
  514. zenml/zen_server/deploy/terraform/recipes/gcp/.gitignore +0 -8
  515. zenml/zen_server/deploy/terraform/recipes/gcp/helm.tf +0 -20
  516. zenml/zen_server/deploy/terraform/recipes/gcp/ingress.tf +0 -30
  517. zenml/zen_server/deploy/terraform/recipes/gcp/outputs.tf +0 -7
  518. zenml/zen_server/deploy/terraform/recipes/gcp/printf.cmd +0 -2
  519. zenml/zen_server/deploy/terraform/recipes/gcp/sql.tf +0 -64
  520. zenml/zen_server/deploy/terraform/recipes/gcp/terraform.tf +0 -44
  521. zenml/zen_server/deploy/terraform/recipes/gcp/variables.tf +0 -171
  522. zenml/zen_server/deploy/terraform/recipes/gcp/zen_server.tf +0 -114
  523. zenml/zen_server/deploy/terraform/terraform_zen_server.py +0 -246
  524. /zenml/{new/pipelines → pipelines}/build_utils.py +0 -0
  525. /zenml/{new/pipelines → pipelines}/run_utils.py +0 -0
  526. /zenml/{new/steps → steps}/decorated_step.py +0 -0
  527. {zenml_nightly-0.67.0.dev20241002.dist-info → zenml_nightly-0.68.0.dev20241027.dist-info}/LICENSE +0 -0
  528. {zenml_nightly-0.67.0.dev20241002.dist-info → zenml_nightly-0.68.0.dev20241027.dist-info}/entry_points.txt +0 -0
@@ -24,12 +24,20 @@ from zenml.integrations.bentoml.flavors.bentoml_model_deployer_flavor import (
24
24
  BentoMLModelDeployerConfig,
25
25
  BentoMLModelDeployerFlavor,
26
26
  )
27
- from zenml.integrations.bentoml.services.bentoml_deployment import (
28
- BentoMLDeploymentConfig,
29
- BentoMLDeploymentService,
27
+ from zenml.integrations.bentoml.services.bentoml_container_deployment import (
28
+ BENTOML_CONTAINER_DEPLOYMENT_SERVICE_NAME,
29
+ BentoMLContainerDeploymentConfig,
30
+ BentoMLContainerDeploymentService,
31
+ )
32
+ from zenml.integrations.bentoml.services.bentoml_local_deployment import (
33
+ BENTOML_LOCAL_DEPLOYMENT_SERVICE_NAME,
34
+ BentoMLLocalDeploymentConfig,
35
+ BentoMLLocalDeploymentService,
30
36
  )
31
37
  from zenml.logger import get_logger
32
38
  from zenml.model_deployers import BaseModelDeployer, BaseModelDeployerFlavor
39
+ from zenml.services.container.container_service import ContainerServiceStatus
40
+ from zenml.services.local.local_service import LocalDaemonServiceStatus
33
41
  from zenml.services.service import BaseService, ServiceConfig
34
42
  from zenml.utils.io_utils import create_dir_recursive_if_not_exists
35
43
 
@@ -100,8 +108,8 @@ class BentoMLModelDeployer(BaseModelDeployer):
100
108
  return self._service_path
101
109
 
102
110
  @staticmethod
103
- def get_model_server_info( # type: ignore[override]
104
- service_instance: "BentoMLDeploymentService",
111
+ def get_model_server_info(
112
+ service_instance: BaseService,
105
113
  ) -> Dict[str, Optional[str]]:
106
114
  """Return implementation specific information on the model server.
107
115
 
@@ -110,26 +118,61 @@ class BentoMLModelDeployer(BaseModelDeployer):
110
118
 
111
119
  Returns:
112
120
  A dictionary containing the model server information.
121
+
122
+ Raises:
123
+ ValueError: If the service type is not supported.
113
124
  """
125
+ if (
126
+ service_instance.SERVICE_TYPE.name
127
+ == BENTOML_CONTAINER_DEPLOYMENT_SERVICE_NAME
128
+ ):
129
+ service_instance = cast(
130
+ BentoMLContainerDeploymentService, service_instance
131
+ )
132
+ elif (
133
+ service_instance.SERVICE_TYPE.name
134
+ == BENTOML_LOCAL_DEPLOYMENT_SERVICE_NAME
135
+ ):
136
+ service_instance = cast(
137
+ BentoMLLocalDeploymentService, service_instance
138
+ )
139
+ else:
140
+ raise ValueError(
141
+ f"Unsupported service type: {service_instance.SERVICE_TYPE.name}"
142
+ )
143
+
114
144
  predictions_apis_urls = ""
115
- if service_instance.prediction_apis_urls is not None:
145
+ if service_instance.prediction_apis_urls is not None: # type: ignore
116
146
  predictions_apis_urls = ", ".join(
117
147
  [
118
148
  api
119
- for api in service_instance.prediction_apis_urls
149
+ for api in service_instance.prediction_apis_urls # type: ignore
120
150
  if api is not None
121
151
  ]
122
152
  )
123
153
 
154
+ service_config = service_instance.config
155
+ assert isinstance(
156
+ service_config,
157
+ (BentoMLLocalDeploymentConfig, BentoMLContainerDeploymentConfig),
158
+ )
159
+
160
+ service_status = service_instance.status
161
+ assert isinstance(
162
+ service_status, (ContainerServiceStatus, LocalDaemonServiceStatus)
163
+ )
164
+
124
165
  return {
125
166
  "HEALTH_CHECK_URL": service_instance.get_healthcheck_url(),
126
167
  "PREDICTION_URL": service_instance.get_prediction_url(),
127
- "BENTO_TAG": service_instance.config.bento,
128
- "MODEL_NAME": service_instance.config.model_name,
129
- "MODEL_URI": service_instance.config.model_uri,
130
- "BENTO_URI": service_instance.config.bento_uri,
131
- "SERVICE_PATH": service_instance.status.runtime_path,
132
- "DAEMON_PID": str(service_instance.status.pid),
168
+ "BENTO_TAG": service_config.bento_tag,
169
+ "MODEL_NAME": service_config.model_name,
170
+ "MODEL_URI": service_config.model_uri,
171
+ "BENTO_URI": service_config.bento_uri,
172
+ "SERVICE_PATH": service_status.runtime_path,
173
+ "DAEMON_PID": str(service_status.pid)
174
+ if hasattr(service_status, "pid")
175
+ else None,
133
176
  "PREDICTION_APIS_URLS": predictions_apis_urls,
134
177
  }
135
178
 
@@ -179,7 +222,6 @@ class BentoMLModelDeployer(BaseModelDeployer):
179
222
  The ZenML BentoML deployment service object that can be used to
180
223
  interact with the BentoML model http server.
181
224
  """
182
- config = cast(BentoMLDeploymentConfig, config)
183
225
  service = self._create_new_service(
184
226
  id=id, timeout=timeout, config=config
185
227
  )
@@ -190,11 +232,20 @@ class BentoMLModelDeployer(BaseModelDeployer):
190
232
  self,
191
233
  timeout: int,
192
234
  force: bool,
193
- existing_service: BentoMLDeploymentService,
235
+ existing_service: BaseService,
194
236
  ) -> None:
195
237
  # stop the older service
196
238
  existing_service.stop(timeout=timeout, force=force)
197
239
 
240
+ # assert that the service is either a BentoMLLocalDeploymentService or a BentoMLContainerDeploymentService
241
+ if not isinstance(
242
+ existing_service,
243
+ (BentoMLLocalDeploymentService, BentoMLContainerDeploymentService),
244
+ ):
245
+ raise ValueError(
246
+ f"Unsupported service type: {type(existing_service)}"
247
+ )
248
+
198
249
  # delete the old configuration file
199
250
  if existing_service.status.runtime_path:
200
251
  shutil.rmtree(existing_service.status.runtime_path)
@@ -203,8 +254,8 @@ class BentoMLModelDeployer(BaseModelDeployer):
203
254
  # of workers etc.the step implementation will create a new config using
204
255
  # all values from the user and add values like pipeline name, model_uri
205
256
  def _create_new_service(
206
- self, id: UUID, timeout: int, config: BentoMLDeploymentConfig
207
- ) -> BentoMLDeploymentService:
257
+ self, id: UUID, timeout: int, config: ServiceConfig
258
+ ) -> BaseService:
208
259
  """Creates a new BentoMLDeploymentService.
209
260
 
210
261
  Args:
@@ -216,11 +267,27 @@ class BentoMLModelDeployer(BaseModelDeployer):
216
267
  Returns:
217
268
  The BentoMLDeploymentService object that can be used to interact
218
269
  with the BentoML model server.
270
+
271
+ Raises:
272
+ ValueError: If the service type is not supported.
219
273
  """
274
+ assert isinstance(
275
+ config,
276
+ (BentoMLLocalDeploymentConfig, BentoMLContainerDeploymentConfig),
277
+ )
220
278
  # set the root runtime path with the stack component's UUID
221
279
  config.root_runtime_path = self.local_path
222
280
  # create a new service for the new model
223
- service = BentoMLDeploymentService(uuid=id, config=config)
281
+ # if the config is of type BentoMLLocalDeploymentConfig, create a
282
+ # BentoMLLocalDeploymentService, otherwise create a
283
+ # BentoMLContainerDeploymentService
284
+ service: BaseService
285
+ if isinstance(config, BentoMLLocalDeploymentConfig):
286
+ service = BentoMLLocalDeploymentService(uuid=id, config=config)
287
+ elif isinstance(config, BentoMLContainerDeploymentConfig):
288
+ service = BentoMLContainerDeploymentService(uuid=id, config=config)
289
+ else:
290
+ raise ValueError(f"Unsupported service type: {type(config)}")
224
291
  service.start(timeout=timeout)
225
292
 
226
293
  return service
@@ -274,7 +341,6 @@ class BentoMLModelDeployer(BaseModelDeployer):
274
341
  timeout: Timeout in seconds to wait for the service to stop.
275
342
  force: If True, force the service to stop.
276
343
  """
277
- service = cast(BentoMLDeploymentService, service)
278
344
  self._clean_up_existing_service(
279
345
  existing_service=service, timeout=timeout, force=force
280
346
  )
@@ -13,9 +13,20 @@
13
13
  # permissions and limitations under the License.
14
14
  """Initialization for BentoML services."""
15
15
 
16
- from zenml.integrations.bentoml.services.bentoml_deployment import ( # noqa
17
- BentoMLDeploymentConfig,
18
- BentoMLDeploymentService,
16
+ from zenml.integrations.bentoml.services.bentoml_local_deployment import ( # noqa
17
+ BentoMLLocalDeploymentConfig,
18
+ BentoMLLocalDeploymentService,
19
19
  )
20
+ from zenml.integrations.bentoml.services.bentoml_container_deployment import ( # noqa
21
+ BentoMLContainerDeploymentConfig,
22
+ BentoMLContainerDeploymentService,
23
+ )
24
+ from zenml.integrations.bentoml.services.deployment_type import BentoMLDeploymentType
20
25
 
21
- __all__ = ["BentoMLDeploymentConfig", "BentoMLDeploymentService"]
26
+ __all__ = [
27
+ "BentoMLLocalDeploymentConfig",
28
+ "BentoMLLocalDeploymentService",
29
+ "BentoMLContainerDeploymentConfig",
30
+ "BentoMLContainerDeploymentService",
31
+ "BentoMLDeploymentType",
32
+ ]
@@ -0,0 +1,399 @@
1
+ # Copyright (c) ZenML GmbH 2024. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at:
6
+ #
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12
+ # or implied. See the License for the specific language governing
13
+ # permissions and limitations under the License.
14
+ """Implementation for the BentoML container deployment service."""
15
+
16
+ import os
17
+ import sys
18
+ from typing import Any, Dict, List, Optional, Union
19
+
20
+ import bentoml
21
+ import docker.errors as docker_errors
22
+ from bentoml.client import Client
23
+
24
+ from zenml.client import Client as ZenMLClient
25
+ from zenml.constants import DEFAULT_LOCAL_SERVICE_IP_ADDRESS
26
+ from zenml.integrations.bentoml.constants import (
27
+ BENTOML_DEFAULT_PORT,
28
+ BENTOML_HEALTHCHECK_URL_PATH,
29
+ BENTOML_PREDICTION_URL_PATH,
30
+ )
31
+ from zenml.logger import get_logger
32
+ from zenml.services.container.container_service import (
33
+ ContainerService,
34
+ ContainerServiceConfig,
35
+ )
36
+ from zenml.services.container.container_service_endpoint import (
37
+ ContainerServiceEndpoint,
38
+ ContainerServiceEndpointConfig,
39
+ )
40
+ from zenml.services.service import BaseDeploymentService
41
+ from zenml.services.service_endpoint import ServiceEndpointProtocol
42
+ from zenml.services.service_monitor import (
43
+ HTTPEndpointHealthMonitor,
44
+ HTTPEndpointHealthMonitorConfig,
45
+ )
46
+ from zenml.services.service_status import ServiceState
47
+ from zenml.services.service_type import ServiceType
48
+
49
+ logger = get_logger(__name__)
50
+
51
+ BENTOML_CONTAINER_DEPLOYMENT_SERVICE_NAME = "bentoml-container-deployment"
52
+
53
+
54
+ class BentoMLContainerDeploymentConfig(ContainerServiceConfig):
55
+ """BentoML container deployment configuration."""
56
+
57
+ model_name: str
58
+ model_uri: str
59
+ bento_tag: str
60
+ bento_uri: Optional[str] = None
61
+ platform: Optional[str] = None
62
+ image: str = ""
63
+ image_tag: Optional[str] = None
64
+ features: Optional[List[str]] = None
65
+ file: Optional[str] = None
66
+ apis: List[str] = []
67
+ working_dir: Optional[str] = None
68
+ workers: int = 1
69
+ backlog: int = 2048
70
+ host: Optional[str] = None
71
+ port: Optional[int] = None
72
+
73
+
74
+ class BentoMLContainerDeploymentEndpointConfig(ContainerServiceEndpointConfig):
75
+ """BentoML container deployment service configuration.
76
+
77
+ Attributes:
78
+ prediction_url_path: URI subpath for prediction requests
79
+ """
80
+
81
+ prediction_url_path: str
82
+
83
+
84
+ class BentoMLContainerDeploymentEndpoint(ContainerServiceEndpoint):
85
+ """A service endpoint exposed by the BentoML container deployment service.
86
+
87
+ Attributes:
88
+ config: service endpoint configuration
89
+ """
90
+
91
+ config: BentoMLContainerDeploymentEndpointConfig
92
+
93
+ @property
94
+ def prediction_url(self) -> Optional[str]:
95
+ """Gets the prediction URL for the endpoint.
96
+
97
+ Returns:
98
+ the prediction URL for the endpoint
99
+ """
100
+ uri = self.status.uri
101
+ if not uri:
102
+ return None
103
+ return os.path.join(uri, self.config.prediction_url_path)
104
+
105
+
106
+ class BentoMLContainerDeploymentService(
107
+ ContainerService, BaseDeploymentService
108
+ ):
109
+ """BentoML container deployment service."""
110
+
111
+ SERVICE_TYPE = ServiceType(
112
+ name=BENTOML_CONTAINER_DEPLOYMENT_SERVICE_NAME,
113
+ type="model-serving",
114
+ flavor="bentoml",
115
+ description="BentoML container prediction service",
116
+ logo_url="https://public-flavor-logos.s3.eu-central-1.amazonaws.com/model_deployer/bentoml.png",
117
+ )
118
+
119
+ config: BentoMLContainerDeploymentConfig
120
+ endpoint: BentoMLContainerDeploymentEndpoint
121
+
122
+ def __init__(
123
+ self,
124
+ config: Union[BentoMLContainerDeploymentConfig, Dict[str, Any]],
125
+ **attrs: Any,
126
+ ) -> None:
127
+ """Initialize the BentoML deployment service.
128
+
129
+ Args:
130
+ config: service configuration
131
+ attrs: additional attributes to set on the service
132
+ """
133
+ # ensure that the endpoint is created before the service is initialized
134
+ # TODO [ENG-700]: implement a service factory or builder for BentoML
135
+ # deployment services
136
+ if (
137
+ isinstance(config, BentoMLContainerDeploymentConfig)
138
+ and "endpoint" not in attrs
139
+ ):
140
+ endpoint = BentoMLContainerDeploymentEndpoint(
141
+ config=BentoMLContainerDeploymentEndpointConfig(
142
+ protocol=ServiceEndpointProtocol.HTTP,
143
+ port=config.port or BENTOML_DEFAULT_PORT,
144
+ ip_address=config.host or DEFAULT_LOCAL_SERVICE_IP_ADDRESS,
145
+ prediction_url_path=BENTOML_PREDICTION_URL_PATH,
146
+ ),
147
+ monitor=HTTPEndpointHealthMonitor(
148
+ config=HTTPEndpointHealthMonitorConfig(
149
+ healthcheck_uri_path=BENTOML_HEALTHCHECK_URL_PATH,
150
+ )
151
+ ),
152
+ )
153
+ attrs["endpoint"] = endpoint
154
+ super().__init__(config=config, **attrs)
155
+
156
+ # override the is_running property to check if the bentoml container is running
157
+ @property
158
+ def is_running(self) -> bool:
159
+ """Check if the service is currently running.
160
+
161
+ This method will actively poll the external service to get its status
162
+ and will return the result.
163
+
164
+ Returns:
165
+ True if the service is running and active (i.e. the endpoints are
166
+ responsive, if any are configured), otherwise False.
167
+ """
168
+ self.update_status()
169
+ return self.status.state == ServiceState.ACTIVE
170
+
171
+ # override the container start method to use the root user
172
+ def _start_container(self) -> None:
173
+ """Start the service docker container associated with this service."""
174
+ container = self.container
175
+
176
+ if container:
177
+ # the container exists, check if it is running
178
+ if container.status == "running":
179
+ logger.debug(
180
+ "Container for service '%s' is already running",
181
+ self,
182
+ )
183
+ return
184
+
185
+ # the container is stopped or in an error state, remove it
186
+ logger.debug(
187
+ "Removing previous container for service '%s'",
188
+ self,
189
+ )
190
+ container.remove(force=True)
191
+
192
+ logger.debug("Starting container for service '%s'...", self)
193
+
194
+ try:
195
+ self.docker_client.images.get(self.config.image)
196
+ except docker_errors.ImageNotFound:
197
+ logger.debug(
198
+ "Pulling container image '%s' for service '%s'...",
199
+ self.config.image,
200
+ self,
201
+ )
202
+ self.docker_client.images.pull(self.config.image)
203
+
204
+ self._setup_runtime_path()
205
+
206
+ ports: Dict[int, Optional[int]] = {}
207
+ if self.endpoint:
208
+ self.endpoint.prepare_for_start()
209
+ if self.endpoint.status.port:
210
+ ports[self.endpoint.status.port] = self.endpoint.status.port
211
+
212
+ command, env = self._get_container_cmd()
213
+ volumes = self._get_container_volumes()
214
+
215
+ try:
216
+ container = self.docker_client.containers.run(
217
+ name=self.container_id,
218
+ image=self.config.image,
219
+ entrypoint=command,
220
+ detach=True,
221
+ volumes=volumes,
222
+ environment=env,
223
+ remove=False,
224
+ auto_remove=False,
225
+ ports=ports,
226
+ user="root",
227
+ labels={
228
+ "zenml-service-uuid": str(self.uuid),
229
+ },
230
+ working_dir="/home/bentoml/bento",
231
+ extra_hosts={"host.docker.internal": "host-gateway"},
232
+ )
233
+
234
+ logger.debug(
235
+ "Docker container for service '%s' started with ID: %s",
236
+ self,
237
+ self.container_id,
238
+ )
239
+ except docker_errors.DockerException as e:
240
+ logger.error(
241
+ "Docker container for service '%s' failed to start: %s",
242
+ self,
243
+ e,
244
+ )
245
+
246
+ def _containerize_and_push_bento(self) -> None:
247
+ """Containerize the bento and push it to the container registry.
248
+
249
+ Raises:
250
+ Exception: If the bento containerization fails.
251
+ """
252
+ zenml_client = ZenMLClient()
253
+ container_registry = zenml_client.active_stack.container_registry
254
+ # a tuple of config image and image tag
255
+ if self.config.image and self.config.image_tag:
256
+ image_tag = (self.config.image, self.config.image_tag)
257
+ else:
258
+ # if container registry is present in the stack, name the image
259
+ # with the container registry uri, else name the image with the bento tag
260
+ if container_registry:
261
+ image_name = (
262
+ f"{container_registry.config.uri}/{self.config.bento_tag}"
263
+ )
264
+ image_tag = (image_name,) # type: ignore
265
+ self.config.image = image_name
266
+ else:
267
+ # bentoml will use the bento tag as the name of the image
268
+ image_tag = (self.config.bento_tag,) # type: ignore
269
+ self.config.image = self.config.bento_tag
270
+ try:
271
+ bentoml.container.build(
272
+ bento_tag=self.config.bento_tag,
273
+ backend="docker", # hardcoding docker since container service only supports docker
274
+ image_tag=image_tag,
275
+ features=self.config.features,
276
+ file=self.config.file,
277
+ platform=self.config.platform,
278
+ )
279
+
280
+ except Exception as e:
281
+ logger.error(f"Error containerizing the bento: {e}")
282
+ raise e
283
+
284
+ if container_registry:
285
+ logger.info(
286
+ f"Pushing bento to container registry {container_registry.config.uri}"
287
+ )
288
+ # push the bento to the image registry
289
+ container_registry.push_image(self.config.image)
290
+ else:
291
+ logger.warning(
292
+ "No container registry found in the active stack. "
293
+ "Please add a container registry to your stack to push "
294
+ "the bento to an image registry."
295
+ )
296
+
297
+ def provision(self) -> None:
298
+ """Provision the service."""
299
+ # containerize the bento
300
+ self._containerize_and_push_bento()
301
+ # run the container
302
+ super().provision()
303
+
304
+ def run(self) -> None:
305
+ """Start the service.
306
+
307
+ Raises:
308
+ FileNotFoundError: If the bento file is not found.
309
+ subprocess.CalledProcessError: If the bentoml serve command fails.
310
+ """
311
+ from bentoml._internal.service.loader import load
312
+
313
+ logger.info("Starting BentoML container deployment service...")
314
+
315
+ self.endpoint.prepare_for_start()
316
+
317
+ if self.config.working_dir is None:
318
+ if os.path.isdir(os.path.expanduser(self.config.bento_tag)):
319
+ self.config.working_dir = os.path.expanduser(
320
+ self.config.bento_tag
321
+ )
322
+ else:
323
+ self.config.working_dir = "."
324
+ if sys.path[0] != self.config.working_dir:
325
+ sys.path.insert(0, self.config.working_dir)
326
+
327
+ _ = load(bento_identifier=".", working_dir=self.config.working_dir)
328
+ # run bentoml serve command inside the container
329
+ # Use subprocess for better control and error handling
330
+ import subprocess
331
+
332
+ try:
333
+ subprocess.run(["bentoml", "serve"], check=True)
334
+ except subprocess.CalledProcessError as e:
335
+ logger.error(f"Failed to start BentoML service: {e}")
336
+ raise
337
+ except FileNotFoundError:
338
+ logger.error(
339
+ "BentoML command not found. Make sure it's installed and in the PATH."
340
+ )
341
+ raise
342
+
343
+ @property
344
+ def prediction_url(self) -> Optional[str]:
345
+ """Get the URI where the http server is running.
346
+
347
+ Returns:
348
+ The URI where the http service can be accessed to get more information
349
+ about the service and to make predictions.
350
+ """
351
+ if not self.is_running:
352
+ return None
353
+ return self.endpoint.prediction_url
354
+
355
+ @property
356
+ def prediction_apis_urls(self) -> Optional[List[str]]:
357
+ """Get the URI where the prediction api services is answering requests.
358
+
359
+ Returns:
360
+ The URI where the prediction service apis can be contacted to process
361
+ HTTP/REST inference requests, or None, if the service isn't running.
362
+ """
363
+ if not self.is_running:
364
+ return None
365
+
366
+ if self.config.apis:
367
+ return [
368
+ f"{self.endpoint.prediction_url}/{api}"
369
+ for api in self.config.apis
370
+ ]
371
+ return None
372
+
373
+ def predict(self, api_endpoint: str, data: Any) -> Any:
374
+ """Make a prediction using the service.
375
+
376
+ Args:
377
+ data: data to make a prediction on
378
+ api_endpoint: the api endpoint to make the prediction on
379
+
380
+ Returns:
381
+ The prediction result.
382
+
383
+ Raises:
384
+ Exception: if the service is not running
385
+ ValueError: if the prediction endpoint is unknown.
386
+ """
387
+ if not self.is_running:
388
+ raise Exception(
389
+ "BentoML prediction service is not running. "
390
+ "Please start the service before making predictions."
391
+ )
392
+ if self.endpoint.prediction_url is not None:
393
+ client = Client.from_url(
394
+ self.endpoint.prediction_url.replace("http://", "").rstrip("/")
395
+ )
396
+ result = client.call(api_endpoint, data)
397
+ else:
398
+ raise ValueError("No endpoint known for prediction.")
399
+ return result