zenml-nightly 0.66.0.dev20240927__py3-none-any.whl → 0.68.1.dev20241102__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +18 -12
- RELEASE_NOTES.md +236 -0
- zenml/VERSION +1 -1
- zenml/__init__.py +5 -10
- zenml/analytics/context.py +16 -1
- zenml/analytics/enums.py +0 -13
- zenml/analytics/utils.py +18 -7
- zenml/artifact_stores/base_artifact_store.py +11 -0
- zenml/artifacts/artifact_config.py +19 -65
- zenml/artifacts/external_artifact.py +7 -53
- zenml/artifacts/external_artifact_config.py +21 -40
- zenml/artifacts/load_directory_materializer.py +91 -0
- zenml/artifacts/utils.py +204 -145
- zenml/cli/__init__.py +62 -127
- zenml/cli/base.py +8 -8
- zenml/cli/integration.py +0 -9
- zenml/cli/login.py +951 -0
- zenml/cli/pipeline.py +1 -1
- zenml/cli/served_model.py +8 -1
- zenml/cli/server.py +462 -577
- zenml/cli/service_accounts.py +4 -4
- zenml/cli/stack.py +78 -569
- zenml/cli/stack_components.py +5 -594
- zenml/cli/user_management.py +0 -12
- zenml/cli/utils.py +24 -142
- zenml/client.py +57 -40
- zenml/client_lazy_loader.py +29 -12
- zenml/config/compiler.py +7 -11
- zenml/config/global_config.py +9 -0
- zenml/config/pipeline_configurations.py +2 -1
- zenml/config/pipeline_run_configuration.py +2 -1
- zenml/config/server_config.py +7 -5
- zenml/config/step_configurations.py +2 -0
- zenml/constants.py +6 -42
- zenml/enums.py +1 -4
- zenml/environment.py +1 -315
- zenml/exceptions.py +12 -41
- zenml/hooks/hook_validators.py +1 -8
- zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +2 -3
- zenml/integrations/argilla/__init__.py +1 -1
- zenml/integrations/argilla/annotators/argilla_annotator.py +234 -89
- zenml/integrations/argilla/flavors/argilla_annotator_flavor.py +10 -5
- zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py +9 -5
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +15 -2
- zenml/integrations/aws/service_connectors/aws_service_connector.py +6 -0
- zenml/integrations/azure/__init__.py +6 -2
- zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +5 -4
- zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
- zenml/integrations/bentoml/model_deployers/bentoml_model_deployer.py +85 -19
- zenml/integrations/bentoml/services/__init__.py +15 -4
- zenml/integrations/bentoml/services/bentoml_container_deployment.py +399 -0
- zenml/integrations/bentoml/services/{bentoml_deployment.py → bentoml_local_deployment.py} +81 -40
- zenml/{steps/base_parameters.py → integrations/bentoml/services/deployment_type.py} +8 -5
- zenml/integrations/bentoml/steps/bento_builder.py +1 -0
- zenml/integrations/bentoml/steps/bentoml_deployer.py +93 -41
- zenml/integrations/github/code_repositories/github_code_repository.py +1 -1
- zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py +6 -1
- zenml/integrations/huggingface/__init__.py +1 -6
- zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +3 -3
- zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +3 -3
- zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +2 -2
- zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +6 -3
- zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +6 -0
- zenml/integrations/mlflow/services/mlflow_deployment.py +2 -2
- zenml/integrations/mlflow/steps/mlflow_deployer.py +1 -1
- zenml/integrations/mlflow/steps/mlflow_registry.py +1 -1
- zenml/integrations/neptune/experiment_trackers/run_state.py +2 -2
- zenml/integrations/pytorch/materializers/base_pytorch_materializer.py +8 -2
- zenml/integrations/pytorch/materializers/pytorch_module_materializer.py +4 -1
- zenml/integrations/s3/artifact_stores/s3_artifact_store.py +98 -0
- zenml/integrations/s3/flavors/s3_artifact_store_flavor.py +14 -0
- zenml/integrations/s3/utils.py +40 -0
- zenml/integrations/tensorflow/__init__.py +0 -9
- zenml/logging/step_logging.py +13 -15
- zenml/{new/pipelines → login}/__init__.py +4 -1
- zenml/login/credentials.py +346 -0
- zenml/login/credentials_store.py +603 -0
- zenml/{new → login/pro}/__init__.py +4 -1
- zenml/login/pro/client.py +496 -0
- zenml/login/pro/constants.py +34 -0
- zenml/{lineage_graph/edge.py → login/pro/models.py} +9 -8
- zenml/{zen_server/deploy/terraform/providers → login/pro/organization}/__init__.py +2 -2
- zenml/login/pro/organization/client.py +79 -0
- zenml/{lineage_graph/node/base_node.py → login/pro/organization/models.py} +13 -12
- zenml/{new/steps → login/pro/tenant}/__init__.py +2 -1
- zenml/login/pro/tenant/client.py +92 -0
- zenml/login/pro/tenant/models.py +174 -0
- zenml/login/pro/utils.py +121 -0
- zenml/{cli → login}/web_login.py +64 -28
- zenml/materializers/__init__.py +2 -0
- zenml/materializers/base_materializer.py +43 -9
- zenml/materializers/built_in_materializer.py +1 -1
- zenml/materializers/uuid_materializer.py +79 -0
- zenml/metadata/lazy_load.py +10 -7
- zenml/metadata/metadata_types.py +49 -0
- zenml/model/lazy_load.py +85 -4
- zenml/model/model.py +61 -83
- zenml/model/utils.py +47 -118
- zenml/models/__init__.py +6 -0
- zenml/models/v2/base/base.py +12 -8
- zenml/models/v2/base/filter.py +9 -0
- zenml/models/v2/core/artifact_version.py +53 -25
- zenml/models/v2/core/component.py +54 -19
- zenml/models/v2/core/flavor.py +13 -13
- zenml/models/v2/core/model.py +4 -1
- zenml/models/v2/core/model_version.py +4 -6
- zenml/models/v2/core/model_version_artifact.py +3 -1
- zenml/models/v2/core/model_version_pipeline_run.py +3 -1
- zenml/models/v2/core/pipeline.py +3 -1
- zenml/models/v2/core/pipeline_run.py +24 -3
- zenml/models/v2/core/run_metadata.py +2 -2
- zenml/models/v2/core/run_template.py +3 -1
- zenml/models/v2/core/stack.py +7 -3
- zenml/models/v2/core/step_run.py +58 -14
- zenml/models/v2/misc/auth_models.py +11 -2
- zenml/models/v2/misc/server_models.py +2 -4
- zenml/orchestrators/base_orchestrator.py +41 -4
- zenml/orchestrators/input_utils.py +52 -36
- zenml/orchestrators/step_launcher.py +50 -171
- zenml/orchestrators/step_run_utils.py +574 -0
- zenml/orchestrators/step_runner.py +83 -120
- zenml/orchestrators/utils.py +46 -180
- zenml/pipelines/__init__.py +3 -16
- zenml/{new/pipelines → pipelines}/pipeline_context.py +3 -18
- zenml/pipelines/pipeline_decorator.py +34 -60
- zenml/{new/pipelines/pipeline.py → pipelines/pipeline_definition.py} +210 -207
- zenml/{new/pipelines → pipelines}/run_utils.py +11 -10
- zenml/services/local/local_daemon_entrypoint.py +4 -4
- zenml/services/service.py +2 -2
- zenml/stack/stack.py +3 -108
- zenml/stack/stack_component.py +2 -78
- zenml/stack/utils.py +26 -14
- zenml/stack_deployments/aws_stack_deployment.py +3 -0
- zenml/step_operators/step_operator_entrypoint_configuration.py +1 -1
- zenml/steps/__init__.py +3 -9
- zenml/steps/base_step.py +25 -267
- zenml/steps/entrypoint_function_utils.py +2 -80
- zenml/{new/steps → steps}/step_context.py +12 -66
- zenml/steps/step_decorator.py +42 -89
- zenml/steps/step_invocation.py +16 -60
- zenml/steps/utils.py +4 -23
- zenml/utils/dashboard_utils.py +16 -51
- zenml/utils/materializer_utils.py +1 -1
- zenml/utils/requirements_utils.py +71 -0
- zenml/utils/singleton.py +15 -3
- zenml/utils/source_utils.py +39 -2
- zenml/utils/typing_utils.py +8 -28
- zenml/utils/visualization_utils.py +1 -1
- zenml/zen_server/auth.py +44 -39
- zenml/zen_server/dashboard/assets/{404-Y50hSt65.js → 404-DT4QRUqN.js} +1 -1
- zenml/zen_server/dashboard/assets/@radix-DP6vWzyx.js +85 -0
- zenml/zen_server/dashboard/assets/@react-router-BMhZulnd.js +29 -0
- zenml/zen_server/dashboard/assets/@reactflow-8U9qNlMR.js +17 -0
- zenml/zen_server/dashboard/assets/@tanstack-BUCbhJyH.js +22 -0
- zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-xLR9a1iw.js → AlertDialogDropdownItem-C6N2rGrB.js} +1 -1
- zenml/zen_server/dashboard/assets/{CodeSnippet-IxXNxUDa.js → CodeSnippet-CqybNv0k.js} +1 -1
- zenml/zen_server/dashboard/assets/{CollapsibleCard-BhutZbBL.js → CollapsibleCard-0r_8G2Lj.js} +1 -1
- zenml/zen_server/dashboard/assets/{Commands-Bf-rd1z8.js → Commands-BDjgBQKi.js} +1 -1
- zenml/zen_server/dashboard/assets/ComponentBadge-DUiEYJHu.js +1 -0
- zenml/zen_server/dashboard/assets/ComponentFallbackDialog-BFoH5K4V.js +1 -0
- zenml/zen_server/dashboard/assets/ComponentIcon-CAIoUis2.js +1 -0
- zenml/zen_server/dashboard/assets/{CopyButton-DcFHidFJ.js → CopyButton-C745BrKi.js} +1 -1
- zenml/zen_server/dashboard/assets/{CsvVizualization-QSbjrfxw.js → CsvVizualization-PpAq0CeZ.js} +5 -5
- zenml/zen_server/dashboard/assets/{DialogItem-Cd3HqST4.js → DialogItem-DcVCZEew.js} +1 -1
- zenml/zen_server/dashboard/assets/{DisplayDate-DkCy54Bp.js → DisplayDate-BeXgUG_C.js} +1 -1
- zenml/zen_server/dashboard/assets/{EmptyState-Cs3DEmso.js → EmptyState-DeK7H4pr.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-BhwdmqK7.js → Error-BMlzibXj.js} +1 -1
- zenml/zen_server/dashboard/assets/{Helpbox-0pBpTwTm.js → Helpbox-BLf40fLV.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-BTK_EUKT.js → Infobox-BwisKifi.js} +1 -1
- zenml/zen_server/dashboard/assets/{InlineAvatar-CA3DFMcM.js → InlineAvatar-jEgodSgX.js} +1 -1
- zenml/zen_server/dashboard/assets/{Lock-CmIn0szs.js → Lock-3lLt1ih0.js} +1 -1
- zenml/zen_server/dashboard/assets/MarkdownVisualization-8O9kTr-2.js +14 -0
- zenml/zen_server/dashboard/assets/{NumberBox-CrN0_kqI.js → NumberBox-T9eELfLZ.js} +1 -1
- zenml/zen_server/dashboard/assets/{Partials-QLOZw624.js → Partials-YPBB3V4q.js} +1 -1
- zenml/zen_server/dashboard/assets/{PasswordChecker-DE71J_3F.js → PasswordChecker-CW0kqY0W.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderIcon-C16CCIN4.js → ProviderIcon-Bb3Xha5A.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderRadio-D3FuCHf3.js → ProviderRadio-BROY1700.js} +1 -1
- zenml/zen_server/dashboard/assets/RunSelector-DCiL3M1c.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-DfUiGFVd.js +1 -0
- zenml/zen_server/dashboard/assets/{SecretTooltip-BaMwHF-Q.js → SecretTooltip-C_qByGWB.js} +1 -1
- zenml/zen_server/dashboard/assets/{SetPassword-DuIC65H9.js → SetPassword-7pRB00El.js} +1 -1
- zenml/zen_server/dashboard/assets/{Tick-DJTCF0Re.js → Tick-CykQFPj2.js} +1 -1
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-CUm-DMpw.js → UpdatePasswordSchemas-DckMEkFf.js} +1 -1
- zenml/zen_server/dashboard/assets/{UsageReason-CKw0juLF.js → UsageReason-DVceN14P.js} +1 -1
- zenml/zen_server/dashboard/assets/{WizardFooter-Cv9ApYWU.js → WizardFooter-CW0Cvd70.js} +1 -1
- zenml/zen_server/dashboard/assets/{check-circle-DOoS4yhF.js → check-circle-Dwxliy1Z.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-down-Cwb-W_B_.js → chevron-down-8wLBS5pQ.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-c9H46Kl8.js → chevron-right-double-DoD8iXWM.js} +1 -1
- zenml/zen_server/dashboard/assets/{cloud-only-BB4BVa6E.js → cloud-only-B-s_HMDm.js} +1 -1
- zenml/zen_server/dashboard/assets/{code-browser-BJYErIjr.js → code-browser-CZUQs3Wa.js} +1 -1
- zenml/zen_server/dashboard/assets/{copy-CaGlDsUy.js → copy-CaSMXwiU.js} +1 -1
- zenml/zen_server/dashboard/assets/{create-stack-F29xAUEx.js → create-stack-CEmaPZ4c.js} +1 -1
- zenml/zen_server/dashboard/assets/delete-run-D-LKbGyz.js +1 -0
- zenml/zen_server/dashboard/assets/{docker-BFAFXr2_.js → docker-BFNgg-z3.js} +1 -1
- zenml/zen_server/dashboard/assets/{dots-horizontal-C6K59vUm.js → dots-horizontal-DK5Duzx4.js} +1 -1
- zenml/zen_server/dashboard/assets/{form-schemas-BKXwSDK2.js → form-schemas-1AyOCx90.js} +1 -1
- zenml/zen_server/dashboard/assets/{gcp-Dj6ntk0L.js → gcp-7M2Yf3ZK.js} +1 -1
- zenml/zen_server/dashboard/assets/{help-CwN931fX.js → help-Dam461dC.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-5GJ5ysEZ.js → index-BVJ8n2-j.js} +1 -1
- zenml/zen_server/dashboard/assets/index-Bpmj40BI.js +1 -0
- zenml/zen_server/dashboard/assets/index-CbU4Ln_E.css +1 -0
- zenml/zen_server/dashboard/assets/{index-D-mtoBj3.js → index-DKPhqP2B.js} +1 -1
- zenml/zen_server/dashboard/assets/index-QQb7wQEC.js +55 -0
- zenml/zen_server/dashboard/assets/index.esm-cuVep_NJ.js +1 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-BLGc9T1a.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-ZzOtrSSW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-D4Vwzodn.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DH2hs3aW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BGBWG807.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BuzJQFbW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-BPnxn4xp.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-Dc4VJyIJ.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-BShVwWPj.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-CUiC4oBV.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-Bt9VVOA-.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-CaqZN2hq.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-BZzXV7-1.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-DxZsaF_h.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-CeQXL5ds.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-d_eO-yCQ.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-CwicyhtI.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-Dhlb-90d.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-Bput3-QP.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-DCpCPQOf.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-B6guLgqG.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-M2hEX8vc.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-C9WLioJ8.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-Cnui8OiR.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-BOOGhInR.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-gitzw0hO.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-D2bGa7uu.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-deR1Tlfd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-B5cFAncS.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-D273HNI0.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-C1t-h-pH.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-hnt3BR84.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-UMdmhHu2.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-BnYJhD27.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-CAF0vJDd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-BUNmGMP1.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DQPw2Hwd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cm6aH8_k.woff +0 -0
- zenml/zen_server/dashboard/assets/{kubernetes-BjbR6D-1.js → kubernetes--g7r02Zu.js} +1 -1
- zenml/zen_server/dashboard/assets/{layout-Dru15_XR.js → layout-DCSYN7-C.js} +1 -1
- zenml/zen_server/dashboard/assets/{link-external-BT2L8hAQ.js → link-external-CBEk6kEG.js} +1 -1
- zenml/zen_server/dashboard/assets/{login-mutation-ax6iL2Mb.js → login-mutation-DTcAFP1l.js} +1 -1
- zenml/zen_server/dashboard/assets/{logs-GiDJXbLS.js → logs-D5bdJGur.js} +1 -1
- zenml/zen_server/dashboard/assets/not-found-Cc-JkRH2.js +1 -0
- zenml/zen_server/dashboard/assets/{package-DYKZ5jKW.js → package-Cs35Szwh.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-HkVBdZl6.js → page-9yplj5JT.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-uORspyRu.js → page-B-y2XKIc.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BBpOxVcY.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BDg1F-Ug.js → page-BQQKaabe.js} +2 -2
- zenml/zen_server/dashboard/assets/page-BRInM1Lg.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CvKnNK1S.js → page-BjjlMk7s.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BukXK1Aa.js → page-Bvd7YH2A.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DcTjHmYZ.js → page-C0N5q3l7.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CT3Nep8W.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DuqYMYmH.js → page-C_f47pBf.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DRfcRK1w.js → page-ClUVkl-O.js} +1 -1
- zenml/zen_server/dashboard/assets/page-Cmv8C_yM.js +3 -0
- zenml/zen_server/dashboard/assets/{page-p0BhSAWx.js → page-CyN2bdWG.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CzzXH4fs.js +1 -0
- zenml/zen_server/dashboard/assets/{page-6mfzecin.js → page-DH_Z7iW1.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-8kYmrh0B.js → page-DIOXwhiD.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BXarY9K2.js → page-DLixvR-7.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DTlGjgnG.js +1 -0
- zenml/zen_server/dashboard/assets/page-Dbpl86h0.js +1 -0
- zenml/zen_server/dashboard/assets/{page-MAXyfXBq.js → page-Ddgy6kDS.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DtCAfBLy.js +9 -0
- zenml/zen_server/dashboard/assets/{page-CKHNAq7z.js → page-Dx16z7nA.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DMSLXKGT.js → page-DzpVUZ8f.js} +1 -1
- zenml/zen_server/dashboard/assets/page-McUyYbo1.js +1 -0
- zenml/zen_server/dashboard/assets/{page-miU2rhYG.js → page-N4qoPHKb.js} +1 -1
- zenml/zen_server/dashboard/assets/page-T1P3RyAR.js +1 -0
- zenml/zen_server/dashboard/assets/{page-3qPX9WYH.js → page-bKaULTGG.js} +1 -1
- zenml/zen_server/dashboard/assets/page-sbXUJy9t.js +1 -0
- zenml/zen_server/dashboard/assets/{persist-CfJMar_k.js → persist-CP0JmYZ4.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-BxIR2XZs.js → persist-DNb5cdrU.js} +1 -1
- zenml/zen_server/dashboard/assets/{plus-Bc8eLSDM.js → plus-C9IxgN2M.js} +1 -1
- zenml/zen_server/dashboard/assets/{refresh-hfgWPeto.js → refresh-BVu22P_C.js} +1 -1
- zenml/zen_server/dashboard/assets/{rocket-SESCGQXm.js → rocket-CONEmRmB.js} +1 -1
- zenml/zen_server/dashboard/assets/{sharedSchema-vub0rii3.js → sharedSchema-TMLu-nYQ.js} +1 -1
- zenml/zen_server/dashboard/assets/stack-detail-query-xmYxSsUY.js +1 -0
- zenml/zen_server/dashboard/assets/{tick-circle-m-hJG8i9.js → tick-circle-CM1ZScbQ.js} +1 -1
- zenml/zen_server/dashboard/assets/{trash-DUWZWzse.js → trash-DkJHMOg7.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-FGVP7X2U.js → update-server-settings-mutation-DsU8cNVl.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-CbAPzsmT.js → url-D5le3J4q.js} +1 -1
- zenml/zen_server/dashboard/assets/zod-D89GC_vc.js +1 -0
- zenml/zen_server/dashboard/index.html +7 -7
- zenml/zen_server/deploy/__init__.py +7 -16
- zenml/zen_server/deploy/base_provider.py +46 -73
- zenml/zen_server/deploy/{local → daemon}/__init__.py +3 -3
- zenml/zen_server/deploy/{local/local_provider.py → daemon/daemon_provider.py} +44 -63
- zenml/zen_server/deploy/{local/local_zen_server.py → daemon/daemon_zen_server.py} +50 -28
- zenml/zen_server/deploy/deployer.py +90 -171
- zenml/zen_server/deploy/deployment.py +20 -12
- zenml/zen_server/deploy/docker/docker_provider.py +9 -28
- zenml/zen_server/deploy/docker/docker_zen_server.py +19 -9
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/exceptions.py +11 -0
- zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +1 -1
- zenml/zen_server/jwt.py +9 -9
- zenml/zen_server/routers/artifact_version_endpoints.py +1 -1
- zenml/zen_server/routers/auth_endpoints.py +30 -8
- zenml/zen_server/routers/runs_endpoints.py +0 -28
- zenml/zen_server/routers/stack_components_endpoints.py +1 -1
- zenml/zen_server/routers/workspaces_endpoints.py +1 -1
- zenml/zen_server/template_execution/runner_entrypoint_configuration.py +7 -4
- zenml/zen_server/template_execution/utils.py +8 -63
- zenml/zen_server/utils.py +67 -69
- zenml/zen_server/zen_server_api.py +107 -17
- zenml/zen_stores/base_zen_store.py +4 -51
- zenml/zen_stores/migrations/versions/0.67.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.68.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.68.1_release.py +23 -0
- zenml/zen_stores/migrations/versions/1d8f30c54477_migrate_to_new_.py +124 -0
- zenml/zen_stores/migrations/versions/c22561cbb3a9_add_artifact_unique_constraints.py +86 -0
- zenml/zen_stores/rest_zen_store.py +325 -147
- zenml/zen_stores/schemas/api_key_schemas.py +9 -4
- zenml/zen_stores/schemas/artifact_schemas.py +21 -2
- zenml/zen_stores/schemas/artifact_visualization_schemas.py +1 -1
- zenml/zen_stores/schemas/component_schemas.py +49 -6
- zenml/zen_stores/schemas/device_schemas.py +9 -4
- zenml/zen_stores/schemas/flavor_schemas.py +1 -1
- zenml/zen_stores/schemas/model_schemas.py +1 -1
- zenml/zen_stores/schemas/pipeline_run_schemas.py +12 -4
- zenml/zen_stores/schemas/service_schemas.py +1 -1
- zenml/zen_stores/schemas/step_run_schemas.py +3 -3
- zenml/zen_stores/schemas/trigger_schemas.py +1 -1
- zenml/zen_stores/sql_zen_store.py +422 -145
- zenml/zen_stores/template_utils.py +3 -1
- {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/METADATA +20 -18
- {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/RECORD +344 -506
- {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/WHEEL +1 -1
- zenml/api.py +0 -60
- zenml/cli/stack_recipes.py +0 -469
- zenml/lineage_graph/__init__.py +0 -34
- zenml/lineage_graph/lineage_graph.py +0 -244
- zenml/lineage_graph/node/__init__.py +0 -32
- zenml/lineage_graph/node/artifact_node.py +0 -51
- zenml/lineage_graph/node/step_node.py +0 -41
- zenml/model/model_version.py +0 -38
- zenml/new/pipelines/code_archive.py +0 -157
- zenml/new/pipelines/pipeline_decorator.py +0 -118
- zenml/new/steps/step_decorator.py +0 -176
- zenml/pipelines/base_pipeline.py +0 -273
- zenml/post_execution/__init__.py +0 -30
- zenml/post_execution/pipeline.py +0 -55
- zenml/post_execution/pipeline_run.py +0 -55
- zenml/services/terraform/__init__.py +0 -14
- zenml/services/terraform/terraform_service.py +0 -441
- zenml/steps/external_artifact.py +0 -26
- zenml/steps/step_environment.py +0 -108
- zenml/steps/step_output.py +0 -36
- zenml/utils/mlstacks_utils.py +0 -635
- zenml/utils/terraform_utils.py +0 -43
- zenml/zen_server/dashboard/assets/@radix-DnFH_oo1.js +0 -85
- zenml/zen_server/dashboard/assets/@react-router-APVeuk-U.js +0 -29
- zenml/zen_server/dashboard/assets/@reactflow-ytavUpwh.js +0 -17
- zenml/zen_server/dashboard/assets/@tanstack-QbMbTrh5.js +0 -22
- zenml/zen_server/dashboard/assets/ComponentBadge-gKR1OIwG.js +0 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-D6r6aK8J.js +0 -1
- zenml/zen_server/dashboard/assets/MarkdownVisualization-DS05sfBm.js +0 -14
- zenml/zen_server/dashboard/assets/SearchField-BzmfxS0L.js +0 -1
- zenml/zen_server/dashboard/assets/all-pipeline-runs-query-BA3R2Sey.js +0 -1
- zenml/zen_server/dashboard/assets/delete-run-CP0pcJ3U.js +0 -1
- zenml/zen_server/dashboard/assets/index-BhJ6ZJxv.css +0 -1
- zenml/zen_server/dashboard/assets/index-Ci0nJ8EZ.js +0 -55
- zenml/zen_server/dashboard/assets/index.esm-BE1uqCX5.js +0 -1
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-Df6ckaLK.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-JrS_4yms.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-BRrLR67x.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DskEQOpE.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-DDpWG8g5.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-iz1--dBq.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-CzG7Kr3z.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-tyfMZHQw.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-DOnSzjnx.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-Xebo2OyJ.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-DpA2xaRd.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-KAwcVx6H.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-DQXyrmoy.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-DvIPHDQ7.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-BjpBGs91.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-CmOavsDc.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-B-l8Lzzd.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-BLZsI-P3.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-CIdlr5YK.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-_Rr29XE2.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-2pdUafRD.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-Dtavx3qw.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-BmtRFZgT.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-CkBLDEl_.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-BT1H-PT_.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-Cdi8t5Mu.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-D4I8BKCx.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-kWhwEdDH.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-B2Ssfs8e.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-Dbvh0wvx.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-8tIzm-yw.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-D3W-OpO-.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-B9u8Q_zH.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-SuUkSNTU.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-Dg0Bk0Yr.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-ao35dkSb.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-Cnt0N5Vm.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DIOGfGLL.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-0i6yoQMg.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-5IkPJ6Nk.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-BQ_dbMbg.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-DjnxGF-L.woff2 +0 -0
- zenml/zen_server/dashboard/assets/not-found-DbjllLY_.js +0 -1
- zenml/zen_server/dashboard/assets/page-B1n7_W7z.js +0 -1
- zenml/zen_server/dashboard/assets/page-BZZhLo2u.js +0 -1
- zenml/zen_server/dashboard/assets/page-Bbf_oBjn.js +0 -1
- zenml/zen_server/dashboard/assets/page-BjjuBvZG.js +0 -9
- zenml/zen_server/dashboard/assets/page-CHaQkFK5.js +0 -1
- zenml/zen_server/dashboard/assets/page-CS0SYFK8.js +0 -1
- zenml/zen_server/dashboard/assets/page-DGM1CbYT.js +0 -2
- zenml/zen_server/dashboard/assets/page-DOmIZ2ra.js +0 -1
- zenml/zen_server/dashboard/assets/page-DYVmJ9_w.js +0 -3
- zenml/zen_server/dashboard/assets/page-Dwow2doB.js +0 -1
- zenml/zen_server/dashboard/assets/stack-detail-query-DQcyzG-2.js +0 -1
- zenml/zen_server/dashboard/assets/zod-uFd1wBcd.js +0 -1
- zenml/zen_server/dashboard_legacy/_redirects +0 -1
- zenml/zen_server/dashboard_legacy/asset-manifest.json +0 -131
- zenml/zen_server/dashboard_legacy/favicon.ico +0 -0
- zenml/zen_server/dashboard_legacy/index.html +0 -1
- zenml/zen_server/dashboard_legacy/manifest.json +0 -25
- zenml/zen_server/dashboard_legacy/precache-manifest.6d320abb70db612019dda6c4948e7a90.js +0 -462
- zenml/zen_server/dashboard_legacy/robots.txt +0 -2
- zenml/zen_server/dashboard_legacy/service-worker.js +0 -39
- zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css +0 -16
- zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css.map +0 -1
- zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css +0 -2
- zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css.map +0 -1
- zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js +0 -3
- zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.LICENSE.txt +0 -95
- zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.map +0 -1
- zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js +0 -2
- zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js.map +0 -1
- zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js +0 -2
- zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js.map +0 -1
- zenml/zen_server/dashboard_legacy/static/media/AlertTriangle.28aee535.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/ArrowSquareOut.abfb9bc7.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Back.86c23a22.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/BookOpen.5cb101ff.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/BoundingBox.1eb98717.svg +0 -10
- zenml/zen_server/dashboard_legacy/static/media/Burger.9b1c67d7.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Cached.2381fb8d.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Calendar.356e11c7.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ChartBarHorizontal.0247447b.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/ChartLine.0d79e18d.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/ChatDots.2e1c9211.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Check.dad6beb2.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/CheckCircleFilled.c19566d0.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Checkbox.af50e31e.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ChevronDown.f860ce32.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ChevronDownLight.6642d756.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ChevronLeft.f6edfcdb.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/CircleCheck.f98fd6ca.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Clock.ffc9de95.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Close.74e9efbc.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/CloseWithBorder.6960930a.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/CloseWithoutBorder.cd6f71df.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/CloudArrowUp.0aecb235.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Code.ef0f33b5.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Config.0be63f8a.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Connector.9fd46ef1.svg +0 -10
- zenml/zen_server/dashboard_legacy/static/media/Copy.36e2112a.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Dashboard.d05787e0.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Data.b1c3b5f8.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Delete.3c361b28.svg +0 -8
- zenml/zen_server/dashboard_legacy/static/media/Docs.7541d478.svg +0 -7
- zenml/zen_server/dashboard_legacy/static/media/Download.fba04d87.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Edit.490eb294.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/EmptyRightArrow.23749d01.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Example.6396cd37.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Extension.1394cd4a.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Eye.d9e4ee62.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Failed.0213c1a0.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/FileText.1f15bacd.svg +0 -7
- zenml/zen_server/dashboard_legacy/static/media/Filter.ab6b9c0d.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Folders.12b29887.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/FunnelFill.6df4c143.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/GitCommit.7dd9c2aa.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/GitHub_Logo.cefc2023.png +0 -0
- zenml/zen_server/dashboard_legacy/static/media/Graph.2c63a892.svg +0 -11
- zenml/zen_server/dashboard_legacy/static/media/History.08329240.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Home.0843b0d5.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ImageBuilder.ea762d9c.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/InProgress.304a0edc.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Info.9fe10c5c.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/KeyboardReturn.491afbe3.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Link.72bbb55d.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Lock.30f5e1fe.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Lock2.a769ea52.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/LockKey.92f21621.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Logs.8bf4d005.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/MinusCircle.4188f418.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/ModelRegistry.f0de050a.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/MultiUser.a2ba7c67.svg +0 -10
- zenml/zen_server/dashboard_legacy/static/media/PaginationFirst.92628634.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/PaginationLast.00d3c732.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/PaginationNext.86158845.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/PaginationPrev.60c18a88.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Pen.f2d831d4.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/PhotoCamera.179d6d4c.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Pipeline.30d298b0.svg +0 -7
- zenml/zen_server/dashboard_legacy/static/media/Plus.5aa1c16b.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/PlusCircle.92d860dd.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Repositories.71a36b8c.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/RightArrow.f30d3871.svg +0 -29
- zenml/zen_server/dashboard_legacy/static/media/Rocket.63bf7b9d.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/RocketLaunch.1bff2b59.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Rubik-Medium.c87313aa.ttf +0 -0
- zenml/zen_server/dashboard_legacy/static/media/Rubik-Regular.b3d0902b.ttf +0 -0
- zenml/zen_server/dashboard_legacy/static/media/Run.daec4fb2.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Search.d1afcce5.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Settings.59ca73ae.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Share2.46c3ff66.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/SignOut.6aa718c5.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/SimplePlus.5cf7ec20.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/SingleUser.bef3a095.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/SourceCodePro-Regular.b484b32f.ttf +0 -0
- zenml/zen_server/dashboard_legacy/static/media/Stack.19b604ac.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/StackComponent.b1ba90b5.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Star.f0c25022.svg +0 -9
- zenml/zen_server/dashboard_legacy/static/media/StarOutline.94ca8cd9.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Storefront.4b4796fe.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Stream.543e3039.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/SupportAgent.510ddf1f.svg +0 -8
- zenml/zen_server/dashboard_legacy/static/media/Table.77033750.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Tool.d5785486.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/UserPlus.741a99d7.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Verified.0625b2a0.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/addNew.4fb6c939.svg +0 -8
- zenml/zen_server/dashboard_legacy/static/media/arrowClose.cbd53f3f.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/arrowOpen.6ceef0af.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/check_small.30bc0138.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/circleArrowSideClose.98d6013e.svg +0 -18
- zenml/zen_server/dashboard_legacy/static/media/circleArrowSideOpen.63653df6.svg +0 -18
- zenml/zen_server/dashboard_legacy/static/media/image.104fd14b.png +0 -0
- zenml/zen_server/dashboard_legacy/static/media/imageAddIcon.e83004a9.svg +0 -7
- zenml/zen_server/dashboard_legacy/static/media/logo.93333e5c.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/logo_small.4204397d.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/logo_white.d4b4414e.svg +0 -20
- zenml/zen_server/dashboard_legacy/static/media/notConnected.5e2c8ea7.svg +0 -8
- zenml/zen_server/dashboard_legacy/static/media/plugin-fallback.72c294e6.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/share.bcd998b0.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/stars.08a9b19a.svg +0 -8
- zenml/zen_server/deploy/terraform/__init__.py +0 -41
- zenml/zen_server/deploy/terraform/providers/aws_provider.py +0 -61
- zenml/zen_server/deploy/terraform/providers/azure_provider.py +0 -59
- zenml/zen_server/deploy/terraform/providers/gcp_provider.py +0 -59
- zenml/zen_server/deploy/terraform/providers/terraform_provider.py +0 -331
- zenml/zen_server/deploy/terraform/recipes/aws/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/aws/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/aws/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/aws/outputs.tf +0 -7
- zenml/zen_server/deploy/terraform/recipes/aws/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/aws/sql.tf +0 -62
- zenml/zen_server/deploy/terraform/recipes/aws/terraform.tf +0 -44
- zenml/zen_server/deploy/terraform/recipes/aws/variables.tf +0 -167
- zenml/zen_server/deploy/terraform/recipes/aws/vpc.tf +0 -47
- zenml/zen_server/deploy/terraform/recipes/aws/zen_server.tf +0 -103
- zenml/zen_server/deploy/terraform/recipes/azure/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/azure/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/azure/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/azure/key_vault.tf +0 -73
- zenml/zen_server/deploy/terraform/recipes/azure/outputs.tf +0 -7
- zenml/zen_server/deploy/terraform/recipes/azure/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/azure/rg.tf +0 -36
- zenml/zen_server/deploy/terraform/recipes/azure/sql.tf +0 -65
- zenml/zen_server/deploy/terraform/recipes/azure/terraform.tf +0 -52
- zenml/zen_server/deploy/terraform/recipes/azure/variables.tf +0 -176
- zenml/zen_server/deploy/terraform/recipes/azure/zen_server.tf +0 -103
- zenml/zen_server/deploy/terraform/recipes/gcp/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/gcp/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/gcp/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/gcp/outputs.tf +0 -7
- zenml/zen_server/deploy/terraform/recipes/gcp/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/gcp/sql.tf +0 -64
- zenml/zen_server/deploy/terraform/recipes/gcp/terraform.tf +0 -44
- zenml/zen_server/deploy/terraform/recipes/gcp/variables.tf +0 -171
- zenml/zen_server/deploy/terraform/recipes/gcp/zen_server.tf +0 -114
- zenml/zen_server/deploy/terraform/terraform_zen_server.py +0 -246
- /zenml/{new/pipelines → pipelines}/build_utils.py +0 -0
- /zenml/{new/steps → steps}/decorated_step.py +0 -0
- {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/entry_points.txt +0 -0
zenml/cli/stack.py
CHANGED
@@ -14,12 +14,10 @@
|
|
14
14
|
"""CLI for manipulating ZenML local and global config file."""
|
15
15
|
|
16
16
|
import getpass
|
17
|
-
import os
|
18
17
|
import re
|
19
18
|
import time
|
20
19
|
import webbrowser
|
21
20
|
from datetime import datetime
|
22
|
-
from pathlib import Path
|
23
21
|
from typing import (
|
24
22
|
TYPE_CHECKING,
|
25
23
|
Any,
|
@@ -46,23 +44,14 @@ from zenml.cli.cli import TagGroup, cli
|
|
46
44
|
from zenml.cli.text_utils import OldSchoolMarkdownHeading
|
47
45
|
from zenml.cli.utils import (
|
48
46
|
_component_display_name,
|
49
|
-
confirmation,
|
50
|
-
declare,
|
51
|
-
error,
|
52
47
|
is_sorted_or_filtered,
|
53
48
|
list_options,
|
54
49
|
print_model_url,
|
55
50
|
print_page_info,
|
56
51
|
print_stacks_table,
|
57
|
-
verify_mlstacks_prerequisites_installation,
|
58
52
|
)
|
59
53
|
from zenml.client import Client
|
60
54
|
from zenml.console import console
|
61
|
-
from zenml.constants import (
|
62
|
-
ALPHA_MESSAGE,
|
63
|
-
MLSTACKS_SUPPORTED_STACK_COMPONENTS,
|
64
|
-
STACK_RECIPE_MODULAR_RECIPES,
|
65
|
-
)
|
66
55
|
from zenml.enums import (
|
67
56
|
CliCategories,
|
68
57
|
StackComponentType,
|
@@ -70,9 +59,7 @@ from zenml.enums import (
|
|
70
59
|
)
|
71
60
|
from zenml.exceptions import (
|
72
61
|
IllegalOperationError,
|
73
|
-
ProvisioningError,
|
74
62
|
)
|
75
|
-
from zenml.io.fileio import rmtree
|
76
63
|
from zenml.logger import get_logger
|
77
64
|
from zenml.models import (
|
78
65
|
ComponentInfo,
|
@@ -88,17 +75,8 @@ from zenml.models.v2.core.service_connector import (
|
|
88
75
|
from zenml.service_connectors.service_connector_utils import (
|
89
76
|
get_resources_options_from_resource_model_for_full_stack,
|
90
77
|
)
|
78
|
+
from zenml.utils import requirements_utils
|
91
79
|
from zenml.utils.dashboard_utils import get_component_url, get_stack_url
|
92
|
-
from zenml.utils.io_utils import create_dir_recursive_if_not_exists
|
93
|
-
from zenml.utils.mlstacks_utils import (
|
94
|
-
convert_click_params_to_mlstacks_primitives,
|
95
|
-
convert_mlstacks_primitives_to_dicts,
|
96
|
-
deploy_mlstacks_stack,
|
97
|
-
get_stack_spec_file_path,
|
98
|
-
stack_exists,
|
99
|
-
stack_spec_exists,
|
100
|
-
verify_spec_and_tf_files_exist,
|
101
|
-
)
|
102
80
|
from zenml.utils.yaml_utils import read_yaml, write_yaml
|
103
81
|
|
104
82
|
if TYPE_CHECKING:
|
@@ -451,7 +429,7 @@ def register_stack(
|
|
451
429
|
object_type=component_type.value.replace("_", " "),
|
452
430
|
choices=[
|
453
431
|
[
|
454
|
-
component.
|
432
|
+
component.flavor_name,
|
455
433
|
component.name,
|
456
434
|
component.configuration or "",
|
457
435
|
component.connector_resource_id,
|
@@ -990,21 +968,11 @@ def list_stacks(ctx: click.Context, **kwargs: Any) -> None:
|
|
990
968
|
type=click.STRING,
|
991
969
|
required=False,
|
992
970
|
)
|
993
|
-
|
994
|
-
"--outputs",
|
995
|
-
"-o",
|
996
|
-
is_flag=True,
|
997
|
-
default=False,
|
998
|
-
help="Include the outputs from mlstacks deployments.",
|
999
|
-
)
|
1000
|
-
def describe_stack(
|
1001
|
-
stack_name_or_id: Optional[str] = None, outputs: bool = False
|
1002
|
-
) -> None:
|
971
|
+
def describe_stack(stack_name_or_id: Optional[str] = None) -> None:
|
1003
972
|
"""Show details about a named stack or the active stack.
|
1004
973
|
|
1005
974
|
Args:
|
1006
975
|
stack_name_or_id: Name of the stack to describe.
|
1007
|
-
outputs: Include the outputs from mlstacks deployments.
|
1008
976
|
"""
|
1009
977
|
client = Client()
|
1010
978
|
|
@@ -1020,8 +988,6 @@ def describe_stack(
|
|
1020
988
|
stack=stack_,
|
1021
989
|
active=stack_.id == client.active_stack_model.id,
|
1022
990
|
)
|
1023
|
-
if outputs:
|
1024
|
-
cli_utils.print_stack_outputs(stack_)
|
1025
991
|
|
1026
992
|
print_model_url(get_stack_url(stack_))
|
1027
993
|
|
@@ -1126,51 +1092,6 @@ def get_active_stack() -> None:
|
|
1126
1092
|
cli_utils.error(str(err))
|
1127
1093
|
|
1128
1094
|
|
1129
|
-
@stack.command("up")
|
1130
|
-
def up_stack() -> None:
|
1131
|
-
"""Provisions resources for the active stack."""
|
1132
|
-
stack_ = Client().active_stack
|
1133
|
-
|
1134
|
-
cli_utils.declare(
|
1135
|
-
f"Provisioning resources for active stack '{stack_.name}'."
|
1136
|
-
)
|
1137
|
-
try:
|
1138
|
-
stack_.provision()
|
1139
|
-
stack_.resume()
|
1140
|
-
except ProvisioningError as e:
|
1141
|
-
cli_utils.error(str(e))
|
1142
|
-
|
1143
|
-
|
1144
|
-
@stack.command(
|
1145
|
-
"down", help="Suspends resources of the active stack deployment."
|
1146
|
-
)
|
1147
|
-
@click.option(
|
1148
|
-
"--force",
|
1149
|
-
"-f",
|
1150
|
-
"force",
|
1151
|
-
is_flag=True,
|
1152
|
-
help="Deprovisions local resources instead of suspending them.",
|
1153
|
-
)
|
1154
|
-
def down_stack(force: bool = False) -> None:
|
1155
|
-
"""Suspends resources of the active stack deployment.
|
1156
|
-
|
1157
|
-
Args:
|
1158
|
-
force: Deprovisions local resources instead of suspending them.
|
1159
|
-
"""
|
1160
|
-
stack_ = Client().active_stack
|
1161
|
-
|
1162
|
-
if force:
|
1163
|
-
cli_utils.declare(
|
1164
|
-
f"Deprovisioning resources for active stack '{stack_.name}'."
|
1165
|
-
)
|
1166
|
-
stack_.deprovision()
|
1167
|
-
else:
|
1168
|
-
cli_utils.declare(
|
1169
|
-
f"Suspending resources for active stack '{stack_.name}'."
|
1170
|
-
)
|
1171
|
-
stack_.suspend()
|
1172
|
-
|
1173
|
-
|
1174
1095
|
@stack.command("export", help="Exports a stack to a YAML file.")
|
1175
1096
|
@click.argument("stack_name_or_id", type=str, required=False)
|
1176
1097
|
@click.argument("filename", type=str, required=False)
|
@@ -1487,105 +1408,6 @@ def register_secrets(
|
|
1487
1408
|
client.update_secret(secret_name, add_or_update_values=secret_values)
|
1488
1409
|
|
1489
1410
|
|
1490
|
-
def _get_deployment_params_interactively(
|
1491
|
-
click_params: Dict[str, Any],
|
1492
|
-
) -> Dict[str, Any]:
|
1493
|
-
"""Get deployment values from command line arguments.
|
1494
|
-
|
1495
|
-
Args:
|
1496
|
-
click_params: Required and pre-existing values.
|
1497
|
-
|
1498
|
-
Returns:
|
1499
|
-
Full deployment arguments.
|
1500
|
-
"""
|
1501
|
-
deployment_values = {
|
1502
|
-
"provider": click_params["provider"],
|
1503
|
-
"stack_name": click_params["stack_name"],
|
1504
|
-
"region": click_params["region"],
|
1505
|
-
}
|
1506
|
-
for component_type in MLSTACKS_SUPPORTED_STACK_COMPONENTS:
|
1507
|
-
verify_mlstacks_prerequisites_installation()
|
1508
|
-
from mlstacks.constants import ALLOWED_FLAVORS
|
1509
|
-
|
1510
|
-
if (
|
1511
|
-
click.prompt(
|
1512
|
-
f"Enable {component_type}?",
|
1513
|
-
type=click.Choice(["y", "n"]),
|
1514
|
-
default="n",
|
1515
|
-
)
|
1516
|
-
== "y"
|
1517
|
-
):
|
1518
|
-
component_flavor = click.prompt(
|
1519
|
-
f" Enter {component_type} flavor",
|
1520
|
-
type=click.Choice(ALLOWED_FLAVORS[component_type]),
|
1521
|
-
)
|
1522
|
-
deployment_values[component_type] = component_flavor
|
1523
|
-
|
1524
|
-
if (
|
1525
|
-
click.prompt(
|
1526
|
-
"Deploy using debug_mode?",
|
1527
|
-
type=click.Choice(["y", "n"]),
|
1528
|
-
default="n",
|
1529
|
-
)
|
1530
|
-
== "y"
|
1531
|
-
):
|
1532
|
-
deployment_values["debug_mode"] = True
|
1533
|
-
|
1534
|
-
extra_config = []
|
1535
|
-
# use click.prompt to populate extra_config until someone just hits enter
|
1536
|
-
while True:
|
1537
|
-
declare(
|
1538
|
-
"\nAdd to extra_config for stack deployment -->\n",
|
1539
|
-
bold=True,
|
1540
|
-
)
|
1541
|
-
key = click.prompt(
|
1542
|
-
"Enter `extra_config` key or hit enter to skip",
|
1543
|
-
type=str,
|
1544
|
-
default="",
|
1545
|
-
)
|
1546
|
-
if key == "":
|
1547
|
-
break
|
1548
|
-
value = click.prompt(
|
1549
|
-
f"Enter value for '{key}'",
|
1550
|
-
type=str,
|
1551
|
-
)
|
1552
|
-
extra_config.append(f"{key}={value}")
|
1553
|
-
|
1554
|
-
# get mandatory GCP project_id if provider is GCP
|
1555
|
-
# skip if project_id already specified in extra_config
|
1556
|
-
if click_params["provider"] == "gcp" and not any(
|
1557
|
-
s.startswith("project_id=") for s in extra_config
|
1558
|
-
):
|
1559
|
-
project_id = click.prompt("What is your GCP project_id?", type=str)
|
1560
|
-
extra_config.append(f"project_id={project_id}")
|
1561
|
-
declare(f"Project ID '{project_id}' added to extra_config.")
|
1562
|
-
|
1563
|
-
deployment_values["extra_config"] = extra_config
|
1564
|
-
|
1565
|
-
tags = []
|
1566
|
-
# use click.prompt to populate tags until someone just hits enter
|
1567
|
-
while True:
|
1568
|
-
declare(
|
1569
|
-
"\nAdd to tags for stack deployment -->\n",
|
1570
|
-
bold=True,
|
1571
|
-
)
|
1572
|
-
tag = click.prompt(
|
1573
|
-
"Enter `tags` key or hit enter to skip",
|
1574
|
-
type=str,
|
1575
|
-
default="",
|
1576
|
-
)
|
1577
|
-
if tag == "":
|
1578
|
-
break
|
1579
|
-
value = click.prompt(
|
1580
|
-
f"Enter value for '{tag}'",
|
1581
|
-
type=str,
|
1582
|
-
)
|
1583
|
-
tags.append(f"{tag}={value}")
|
1584
|
-
deployment_values["tags"] = tags
|
1585
|
-
|
1586
|
-
return deployment_values
|
1587
|
-
|
1588
|
-
|
1589
1411
|
def validate_name(ctx: click.Context, param: str, value: str) -> str:
|
1590
1412
|
"""Validate the name of the stack.
|
1591
1413
|
|
@@ -1803,7 +1625,7 @@ Stack [{deployed_stack.stack.name}]({get_stack_url(deployed_stack.stack)}):\n"""
|
|
1803
1625
|
if components:
|
1804
1626
|
component = components[0]
|
1805
1627
|
stack_desc += (
|
1806
|
-
f" * `{component.
|
1628
|
+
f" * `{component.flavor_name}` {component_type.value}: "
|
1807
1629
|
f"[{component.name}]({get_component_url(component)})\n"
|
1808
1630
|
)
|
1809
1631
|
|
@@ -1838,393 +1660,6 @@ To use the `{deployed_stack.stack.name}` stack to run pipelines:
|
|
1838
1660
|
)
|
1839
1661
|
|
1840
1662
|
|
1841
|
-
@stack.command(help="[DEPRECATED] Deploy a stack using mlstacks.")
|
1842
|
-
@click.option(
|
1843
|
-
"--provider",
|
1844
|
-
"-p",
|
1845
|
-
"provider",
|
1846
|
-
required=True,
|
1847
|
-
type=click.Choice(STACK_RECIPE_MODULAR_RECIPES),
|
1848
|
-
)
|
1849
|
-
@click.option(
|
1850
|
-
"--name",
|
1851
|
-
"-n",
|
1852
|
-
"stack_name",
|
1853
|
-
type=click.STRING,
|
1854
|
-
required=True,
|
1855
|
-
help="Set a name for the ZenML stack that will be imported from the YAML "
|
1856
|
-
"configuration file which gets generated after deploying the stack recipe. "
|
1857
|
-
"Defaults to the name of the stack recipe being deployed.",
|
1858
|
-
)
|
1859
|
-
@click.option(
|
1860
|
-
"--region",
|
1861
|
-
"-r",
|
1862
|
-
"region",
|
1863
|
-
type=click.STRING,
|
1864
|
-
required=True,
|
1865
|
-
help="The region to deploy the stack to.",
|
1866
|
-
)
|
1867
|
-
@click.option(
|
1868
|
-
"--no-import",
|
1869
|
-
"-ni",
|
1870
|
-
"no_import_stack_flag",
|
1871
|
-
is_flag=True,
|
1872
|
-
help="If you don't want the stack to be imported automatically.",
|
1873
|
-
)
|
1874
|
-
@click.option(
|
1875
|
-
"--artifact-store",
|
1876
|
-
"-a",
|
1877
|
-
"artifact_store",
|
1878
|
-
required=False,
|
1879
|
-
is_flag=True,
|
1880
|
-
help="Whether to deploy an artifact store.",
|
1881
|
-
)
|
1882
|
-
@click.option(
|
1883
|
-
"--container-registry",
|
1884
|
-
"-c",
|
1885
|
-
"container_registry",
|
1886
|
-
required=False,
|
1887
|
-
is_flag=True,
|
1888
|
-
help="Whether to deploy a container registry.",
|
1889
|
-
)
|
1890
|
-
@click.option(
|
1891
|
-
"--mlops-platform",
|
1892
|
-
"-m",
|
1893
|
-
"mlops_platform",
|
1894
|
-
type=click.Choice(["zenml"]),
|
1895
|
-
required=False,
|
1896
|
-
help="The flavor of MLOps platform to use."
|
1897
|
-
"If not specified, the default MLOps platform will be used.",
|
1898
|
-
)
|
1899
|
-
@click.option(
|
1900
|
-
"--orchestrator",
|
1901
|
-
"-o",
|
1902
|
-
required=False,
|
1903
|
-
type=click.Choice(
|
1904
|
-
[
|
1905
|
-
"kubernetes",
|
1906
|
-
"kubeflow",
|
1907
|
-
"tekton",
|
1908
|
-
"sagemaker",
|
1909
|
-
"skypilot",
|
1910
|
-
"vertex",
|
1911
|
-
]
|
1912
|
-
),
|
1913
|
-
help="The flavor of orchestrator to use. "
|
1914
|
-
"If not specified, the default orchestrator will be used.",
|
1915
|
-
)
|
1916
|
-
@click.option(
|
1917
|
-
"--model-deployer",
|
1918
|
-
"-md",
|
1919
|
-
"model_deployer",
|
1920
|
-
required=False,
|
1921
|
-
type=click.Choice(["mlflow", "seldon"]),
|
1922
|
-
help="The flavor of model deployer to use. ",
|
1923
|
-
)
|
1924
|
-
@click.option(
|
1925
|
-
"--experiment-tracker",
|
1926
|
-
"-e",
|
1927
|
-
"experiment_tracker",
|
1928
|
-
required=False,
|
1929
|
-
type=click.Choice(["mlflow"]),
|
1930
|
-
help="The flavor of experiment tracker to use.",
|
1931
|
-
)
|
1932
|
-
@click.option(
|
1933
|
-
"--step-operator",
|
1934
|
-
"-s",
|
1935
|
-
"step_operator",
|
1936
|
-
required=False,
|
1937
|
-
type=click.Choice(["sagemaker"]),
|
1938
|
-
help="The flavor of step operator to use.",
|
1939
|
-
)
|
1940
|
-
@click.option(
|
1941
|
-
"--file",
|
1942
|
-
"-f",
|
1943
|
-
"file",
|
1944
|
-
required=False,
|
1945
|
-
type=click.Path(exists=True, dir_okay=False, readable=True),
|
1946
|
-
help="Use a YAML specification file as the basis of the stack deployment.",
|
1947
|
-
)
|
1948
|
-
@click.option(
|
1949
|
-
"--debug-mode",
|
1950
|
-
"-d",
|
1951
|
-
"debug_mode",
|
1952
|
-
is_flag=True,
|
1953
|
-
default=False,
|
1954
|
-
help="Whether to run the stack deployment in debug mode.",
|
1955
|
-
)
|
1956
|
-
@click.option(
|
1957
|
-
"--extra-config",
|
1958
|
-
"-x",
|
1959
|
-
"extra_config",
|
1960
|
-
multiple=True,
|
1961
|
-
help="Extra configurations as key=value pairs. This option can be used multiple times.",
|
1962
|
-
)
|
1963
|
-
@click.option(
|
1964
|
-
"--tags",
|
1965
|
-
"-t",
|
1966
|
-
"tags",
|
1967
|
-
required=False,
|
1968
|
-
type=click.STRING,
|
1969
|
-
help="Pass one or more tags.",
|
1970
|
-
multiple=True,
|
1971
|
-
)
|
1972
|
-
@click.option(
|
1973
|
-
"--interactive",
|
1974
|
-
"-i",
|
1975
|
-
"interactive",
|
1976
|
-
is_flag=True,
|
1977
|
-
default=False,
|
1978
|
-
help="Deploy the stack interactively.",
|
1979
|
-
)
|
1980
|
-
@click.pass_context
|
1981
|
-
def deploy_mlstack(
|
1982
|
-
ctx: click.Context,
|
1983
|
-
provider: str,
|
1984
|
-
stack_name: str,
|
1985
|
-
region: str,
|
1986
|
-
mlops_platform: Optional[str] = None,
|
1987
|
-
orchestrator: Optional[str] = None,
|
1988
|
-
model_deployer: Optional[str] = None,
|
1989
|
-
experiment_tracker: Optional[str] = None,
|
1990
|
-
step_operator: Optional[str] = None,
|
1991
|
-
no_import_stack_flag: bool = False,
|
1992
|
-
artifact_store: Optional[bool] = None,
|
1993
|
-
container_registry: Optional[bool] = None,
|
1994
|
-
file: Optional[str] = None,
|
1995
|
-
debug_mode: bool = False,
|
1996
|
-
tags: Optional[List[str]] = None,
|
1997
|
-
extra_config: Optional[List[str]] = None,
|
1998
|
-
interactive: bool = False,
|
1999
|
-
) -> None:
|
2000
|
-
"""Deploy a stack with mlstacks.
|
2001
|
-
|
2002
|
-
`zenml stack_recipe pull <STACK_RECIPE_NAME>` has to be called with the
|
2003
|
-
same relative path before the `deploy` command.
|
2004
|
-
|
2005
|
-
Args:
|
2006
|
-
ctx: The click context.
|
2007
|
-
provider: The cloud provider to deploy the stack to.
|
2008
|
-
stack_name: A name for the ZenML stack that gets imported as a result
|
2009
|
-
of the recipe deployment.
|
2010
|
-
no_import_stack_flag: If you don't want the stack to be imported into
|
2011
|
-
ZenML after deployment.
|
2012
|
-
artifact_store: The flavor of artifact store to deploy. In the case of
|
2013
|
-
the artifact store, it doesn't matter what you specify here, as
|
2014
|
-
there's only one flavor per cloud provider and that will be deployed.
|
2015
|
-
orchestrator: The flavor of orchestrator to use.
|
2016
|
-
container_registry: The flavor of container registry to deploy. In the case of
|
2017
|
-
the container registry, it doesn't matter what you specify here, as
|
2018
|
-
there's only one flavor per cloud provider and that will be deployed.
|
2019
|
-
model_deployer: The flavor of model deployer to deploy.
|
2020
|
-
experiment_tracker: The flavor of experiment tracker to deploy.
|
2021
|
-
step_operator: The flavor of step operator to deploy.
|
2022
|
-
extra_config: Extra configurations as key=value pairs.
|
2023
|
-
tags: Pass one or more tags.
|
2024
|
-
debug_mode: Whether to run the stack deployment in debug mode.
|
2025
|
-
file: Use a YAML specification file as the basis of the stack
|
2026
|
-
deployment.
|
2027
|
-
mlops_platform: The flavor of MLOps platform to use.
|
2028
|
-
region: The region to deploy the stack to.
|
2029
|
-
interactive: Deploy the stack interactively.
|
2030
|
-
"""
|
2031
|
-
cli_utils.warning(
|
2032
|
-
"The `zenml stack deploy-mlstack` (former `zenml stack deploy`) CLI "
|
2033
|
-
"command has been deprecated and will be removed in a future release. "
|
2034
|
-
"Please use `zenml stack deploy` instead for a simplified "
|
2035
|
-
"experience."
|
2036
|
-
)
|
2037
|
-
|
2038
|
-
with track_handler(
|
2039
|
-
event=AnalyticsEvent.DEPLOY_STACK,
|
2040
|
-
) as analytics_handler:
|
2041
|
-
if stack_exists(stack_name):
|
2042
|
-
cli_utils.error(
|
2043
|
-
f"Stack with name '{stack_name}' already exists. Please choose a "
|
2044
|
-
"different name."
|
2045
|
-
)
|
2046
|
-
elif stack_spec_exists(stack_name):
|
2047
|
-
cli_utils.error(
|
2048
|
-
f"Stack spec for stack named '{stack_name}' already exists. "
|
2049
|
-
"Please choose a different name."
|
2050
|
-
)
|
2051
|
-
|
2052
|
-
cli_utils.declare("Checking prerequisites are installed...")
|
2053
|
-
cli_utils.verify_mlstacks_prerequisites_installation()
|
2054
|
-
cli_utils.warning(ALPHA_MESSAGE)
|
2055
|
-
|
2056
|
-
if not file:
|
2057
|
-
cli_params: Dict[str, Any] = ctx.params
|
2058
|
-
if interactive:
|
2059
|
-
cli_params = _get_deployment_params_interactively(cli_params)
|
2060
|
-
stack, components = convert_click_params_to_mlstacks_primitives(
|
2061
|
-
cli_params
|
2062
|
-
)
|
2063
|
-
|
2064
|
-
from mlstacks.utils import zenml_utils
|
2065
|
-
|
2066
|
-
cli_utils.declare("Checking flavor compatibility...")
|
2067
|
-
if not zenml_utils.has_valid_flavor_combinations(
|
2068
|
-
stack, components
|
2069
|
-
):
|
2070
|
-
cli_utils.error(
|
2071
|
-
"The specified stack and component flavors are not compatible "
|
2072
|
-
"with the provider or with one another. Please try again."
|
2073
|
-
)
|
2074
|
-
|
2075
|
-
stack_dict, component_dicts = convert_mlstacks_primitives_to_dicts(
|
2076
|
-
stack, components
|
2077
|
-
)
|
2078
|
-
# write the stack and component yaml files
|
2079
|
-
from mlstacks.constants import MLSTACKS_PACKAGE_NAME
|
2080
|
-
|
2081
|
-
spec_dir = os.path.join(
|
2082
|
-
click.get_app_dir(MLSTACKS_PACKAGE_NAME),
|
2083
|
-
"stack_specs",
|
2084
|
-
stack.name,
|
2085
|
-
)
|
2086
|
-
cli_utils.declare(f"Writing spec files to {spec_dir}...")
|
2087
|
-
create_dir_recursive_if_not_exists(spec_dir)
|
2088
|
-
|
2089
|
-
stack_file_path = os.path.join(
|
2090
|
-
spec_dir, f"stack-{stack.name}.yaml"
|
2091
|
-
)
|
2092
|
-
write_yaml(file_path=stack_file_path, contents=stack_dict)
|
2093
|
-
for component in component_dicts:
|
2094
|
-
write_yaml(
|
2095
|
-
file_path=os.path.join(
|
2096
|
-
spec_dir, f"{component['name']}.yaml"
|
2097
|
-
),
|
2098
|
-
contents=component,
|
2099
|
-
)
|
2100
|
-
else:
|
2101
|
-
declare("Importing from stack specification file...")
|
2102
|
-
stack_file_path = file
|
2103
|
-
|
2104
|
-
from mlstacks.utils.yaml_utils import load_stack_yaml
|
2105
|
-
|
2106
|
-
stack = load_stack_yaml(stack_file_path)
|
2107
|
-
|
2108
|
-
analytics_handler.metadata = {
|
2109
|
-
"stack_provider": stack.provider,
|
2110
|
-
"debug_mode": debug_mode,
|
2111
|
-
"no_import_stack_flag": no_import_stack_flag,
|
2112
|
-
"user_created_spec": bool(file),
|
2113
|
-
"mlops_platform": mlops_platform,
|
2114
|
-
"orchestrator": orchestrator,
|
2115
|
-
"model_deployer": model_deployer,
|
2116
|
-
"experiment_tracker": experiment_tracker,
|
2117
|
-
"step_operator": step_operator,
|
2118
|
-
"artifact_store": artifact_store,
|
2119
|
-
"container_registry": container_registry,
|
2120
|
-
}
|
2121
|
-
|
2122
|
-
deploy_mlstacks_stack(
|
2123
|
-
spec_file_path=stack_file_path,
|
2124
|
-
stack_name=stack.name,
|
2125
|
-
stack_provider=stack.provider,
|
2126
|
-
debug_mode=debug_mode,
|
2127
|
-
no_import_stack_flag=no_import_stack_flag,
|
2128
|
-
user_created_spec=bool(file),
|
2129
|
-
)
|
2130
|
-
|
2131
|
-
|
2132
|
-
@stack.command(
|
2133
|
-
help="Destroy stack components created previously with "
|
2134
|
-
"`zenml stack deploy`"
|
2135
|
-
)
|
2136
|
-
@click.argument("stack_name", required=True)
|
2137
|
-
@click.option(
|
2138
|
-
"--debug",
|
2139
|
-
"-d",
|
2140
|
-
"debug_mode",
|
2141
|
-
is_flag=True,
|
2142
|
-
default=False,
|
2143
|
-
help="Whether to run Terraform in debug mode.",
|
2144
|
-
)
|
2145
|
-
def destroy(
|
2146
|
-
stack_name: str,
|
2147
|
-
debug_mode: bool = False,
|
2148
|
-
) -> None:
|
2149
|
-
"""Destroy all resources previously created with `zenml stack deploy`.
|
2150
|
-
|
2151
|
-
Args:
|
2152
|
-
stack_name: Name of the stack
|
2153
|
-
debug_mode: Whether to run Terraform in debug mode.
|
2154
|
-
"""
|
2155
|
-
if not confirmation(
|
2156
|
-
f"Are you sure you want to destroy stack '{stack_name}' and all "
|
2157
|
-
"associated infrastructure?"
|
2158
|
-
):
|
2159
|
-
error("Aborting stack destroy...")
|
2160
|
-
|
2161
|
-
with track_handler(
|
2162
|
-
event=AnalyticsEvent.DESTROY_STACK,
|
2163
|
-
) as analytics_handler:
|
2164
|
-
analytics_handler.metadata["debug_mode"] = debug_mode
|
2165
|
-
cli_utils.verify_mlstacks_prerequisites_installation()
|
2166
|
-
from mlstacks.constants import MLSTACKS_PACKAGE_NAME
|
2167
|
-
|
2168
|
-
# check the stack actually exists
|
2169
|
-
if not stack_exists(stack_name):
|
2170
|
-
cli_utils.error(
|
2171
|
-
f"Stack with name '{stack_name}' does not exist. Please check and "
|
2172
|
-
"try again."
|
2173
|
-
)
|
2174
|
-
|
2175
|
-
spec_file_path = get_stack_spec_file_path(stack_name)
|
2176
|
-
spec_files_dir: str = os.path.join(
|
2177
|
-
click.get_app_dir(MLSTACKS_PACKAGE_NAME), "stack_specs", stack_name
|
2178
|
-
)
|
2179
|
-
user_created_spec = str(Path(spec_file_path).parent) != spec_files_dir
|
2180
|
-
|
2181
|
-
provider = read_yaml(file_path=spec_file_path).get("provider")
|
2182
|
-
tf_definitions_path: str = os.path.join(
|
2183
|
-
click.get_app_dir(MLSTACKS_PACKAGE_NAME),
|
2184
|
-
"terraform",
|
2185
|
-
f"{provider}-modular",
|
2186
|
-
)
|
2187
|
-
|
2188
|
-
cli_utils.declare(
|
2189
|
-
"Checking Terraform definitions and spec files are present..."
|
2190
|
-
)
|
2191
|
-
verify_spec_and_tf_files_exist(spec_file_path, tf_definitions_path)
|
2192
|
-
|
2193
|
-
from mlstacks.utils import terraform_utils
|
2194
|
-
|
2195
|
-
cli_utils.declare(
|
2196
|
-
f"Destroying stack '{stack_name}' using Terraform..."
|
2197
|
-
)
|
2198
|
-
terraform_utils.destroy_stack(
|
2199
|
-
stack_path=spec_file_path, debug_mode=debug_mode
|
2200
|
-
)
|
2201
|
-
cli_utils.declare(f"Stack '{stack_name}' successfully destroyed.")
|
2202
|
-
|
2203
|
-
if cli_utils.confirmation(
|
2204
|
-
f"Would you like to recursively delete the associated ZenML "
|
2205
|
-
f"stack '{stack_name}'?\nThis will delete the stack and any "
|
2206
|
-
"underlying stack components."
|
2207
|
-
):
|
2208
|
-
from zenml.client import Client
|
2209
|
-
|
2210
|
-
client = Client()
|
2211
|
-
client.delete_stack(name_id_or_prefix=stack_name, recursive=True)
|
2212
|
-
cli_utils.declare(
|
2213
|
-
f"Stack '{stack_name}' successfully deleted from ZenML."
|
2214
|
-
)
|
2215
|
-
|
2216
|
-
spec_dir = os.path.dirname(spec_file_path)
|
2217
|
-
if not user_created_spec and cli_utils.confirmation(
|
2218
|
-
f"Would you like to delete the `mlstacks` spec directory for "
|
2219
|
-
f"this stack, located at {spec_dir}?"
|
2220
|
-
):
|
2221
|
-
rmtree(spec_files_dir)
|
2222
|
-
cli_utils.declare(
|
2223
|
-
f"Spec directory for stack '{stack_name}' successfully deleted."
|
2224
|
-
)
|
2225
|
-
cli_utils.declare(f"Stack '{stack_name}' successfully destroyed.")
|
2226
|
-
|
2227
|
-
|
2228
1663
|
@stack.command(
|
2229
1664
|
"connect",
|
2230
1665
|
help="Connect a service-connector to a stack's components. "
|
@@ -2510,3 +1945,77 @@ def _get_stack_component_info(
|
|
2510
1945
|
service_connector_index=service_connector_index,
|
2511
1946
|
service_connector_resource_id=service_connector_resource_id,
|
2512
1947
|
)
|
1948
|
+
|
1949
|
+
|
1950
|
+
@stack.command(
|
1951
|
+
name="export-requirements", help="Export the stack requirements."
|
1952
|
+
)
|
1953
|
+
@click.argument(
|
1954
|
+
"stack_name_or_id",
|
1955
|
+
type=click.STRING,
|
1956
|
+
required=False,
|
1957
|
+
)
|
1958
|
+
@click.option(
|
1959
|
+
"--output-file",
|
1960
|
+
"-o",
|
1961
|
+
"output_file",
|
1962
|
+
type=str,
|
1963
|
+
required=False,
|
1964
|
+
help="File to which to export the stack requirements. If not "
|
1965
|
+
"provided, the requirements will be printed to stdout instead.",
|
1966
|
+
)
|
1967
|
+
@click.option(
|
1968
|
+
"--overwrite",
|
1969
|
+
"-ov",
|
1970
|
+
"overwrite",
|
1971
|
+
type=bool,
|
1972
|
+
required=False,
|
1973
|
+
is_flag=True,
|
1974
|
+
help="Overwrite the output file if it already exists. This option is "
|
1975
|
+
"only valid if the output file is provided.",
|
1976
|
+
)
|
1977
|
+
def export_requirements(
|
1978
|
+
stack_name_or_id: Optional[str] = None,
|
1979
|
+
output_file: Optional[str] = None,
|
1980
|
+
overwrite: bool = False,
|
1981
|
+
) -> None:
|
1982
|
+
"""Exports stack requirements so they can be installed using pip.
|
1983
|
+
|
1984
|
+
Args:
|
1985
|
+
stack_name_or_id: Stack name or ID. If not given, the active stack will
|
1986
|
+
be used.
|
1987
|
+
output_file: Optional path to the requirements output file.
|
1988
|
+
overwrite: Overwrite the output file if it already exists. This option
|
1989
|
+
is only valid if the output file is provided.
|
1990
|
+
"""
|
1991
|
+
try:
|
1992
|
+
stack_model: "StackResponse" = Client().get_stack(
|
1993
|
+
name_id_or_prefix=stack_name_or_id
|
1994
|
+
)
|
1995
|
+
except KeyError as err:
|
1996
|
+
cli_utils.error(str(err))
|
1997
|
+
|
1998
|
+
requirements, _ = requirements_utils.get_requirements_for_stack(
|
1999
|
+
stack_model
|
2000
|
+
)
|
2001
|
+
|
2002
|
+
if not requirements:
|
2003
|
+
cli_utils.declare(f"Stack `{stack_model.name}` has no requirements.")
|
2004
|
+
return
|
2005
|
+
|
2006
|
+
if output_file:
|
2007
|
+
try:
|
2008
|
+
with open(output_file, "x") as f:
|
2009
|
+
f.write("\n".join(requirements))
|
2010
|
+
except FileExistsError:
|
2011
|
+
if overwrite or cli_utils.confirmation(
|
2012
|
+
"A file already exists at the specified path. "
|
2013
|
+
"Would you like to overwrite it?"
|
2014
|
+
):
|
2015
|
+
with open(output_file, "w") as f:
|
2016
|
+
f.write("\n".join(requirements))
|
2017
|
+
cli_utils.declare(
|
2018
|
+
f"Requirements for stack `{stack_model.name}` exported to {output_file}."
|
2019
|
+
)
|
2020
|
+
else:
|
2021
|
+
click.echo(" ".join(requirements), nl=False)
|