zenml-nightly 0.64.0.dev20240811__py3-none-any.whl → 0.66.0.dev20240910__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 +1 -1
- RELEASE_NOTES.md +126 -4
- zenml/VERSION +1 -1
- zenml/artifacts/utils.py +13 -6
- zenml/cli/__init__.py +1 -1
- zenml/cli/base.py +4 -4
- zenml/cli/integration.py +48 -9
- zenml/cli/pipeline.py +9 -2
- zenml/cli/stack.py +39 -27
- zenml/cli/utils.py +13 -0
- zenml/client.py +15 -17
- zenml/config/compiler.py +34 -0
- zenml/config/server_config.py +30 -0
- zenml/config/source.py +3 -7
- zenml/constants.py +5 -3
- zenml/entrypoints/base_entrypoint_configuration.py +41 -27
- zenml/entrypoints/step_entrypoint_configuration.py +5 -2
- zenml/enums.py +2 -0
- zenml/environment.py +31 -0
- zenml/feature_stores/base_feature_store.py +4 -6
- zenml/integrations/__init__.py +3 -0
- zenml/integrations/airflow/flavors/airflow_orchestrator_flavor.py +9 -0
- zenml/integrations/aws/__init__.py +2 -2
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +2 -1
- zenml/integrations/azure/__init__.py +2 -2
- zenml/integrations/azure/azureml_utils.py +201 -0
- zenml/integrations/azure/flavors/azureml.py +139 -0
- zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +20 -118
- zenml/integrations/azure/flavors/azureml_step_operator_flavor.py +67 -14
- zenml/integrations/azure/orchestrators/azureml_orchestrator.py +58 -172
- zenml/integrations/azure/orchestrators/azureml_orchestrator_entrypoint_config.py +1 -0
- zenml/integrations/azure/service_connectors/azure_service_connector.py +4 -0
- zenml/integrations/azure/step_operators/azureml_step_operator.py +78 -177
- zenml/integrations/constants.py +3 -0
- zenml/integrations/databricks/__init__.py +22 -4
- zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +9 -0
- zenml/integrations/deepchecks/__init__.py +29 -11
- zenml/integrations/deepchecks/materializers/deepchecks_dataset_materializer.py +3 -1
- zenml/integrations/deepchecks/validation_checks.py +0 -30
- zenml/integrations/evidently/__init__.py +17 -2
- zenml/integrations/facets/__init__.py +21 -5
- zenml/integrations/feast/__init__.py +19 -6
- zenml/integrations/gcp/__init__.py +2 -2
- zenml/integrations/gcp/flavors/vertex_orchestrator_flavor.py +9 -0
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +10 -1
- zenml/integrations/great_expectations/__init__.py +21 -7
- zenml/integrations/huggingface/__init__.py +39 -15
- zenml/integrations/huggingface/materializers/__init__.py +3 -0
- zenml/integrations/huggingface/materializers/huggingface_datasets_materializer.py +3 -1
- zenml/integrations/huggingface/materializers/huggingface_pt_model_materializer.py +1 -1
- zenml/integrations/huggingface/materializers/huggingface_t5_materializer.py +107 -0
- zenml/integrations/huggingface/materializers/huggingface_tf_model_materializer.py +1 -1
- zenml/integrations/huggingface/materializers/huggingface_tokenizer_materializer.py +2 -2
- zenml/integrations/huggingface/steps/accelerate_runner.py +108 -85
- zenml/integrations/hyperai/flavors/hyperai_orchestrator_flavor.py +9 -0
- zenml/integrations/kubeflow/flavors/kubeflow_orchestrator_flavor.py +9 -0
- zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py +10 -1
- zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +9 -0
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +10 -1
- zenml/integrations/lightning/__init__.py +48 -0
- zenml/integrations/lightning/flavors/__init__.py +23 -0
- zenml/integrations/lightning/flavors/lightning_orchestrator_flavor.py +148 -0
- zenml/integrations/lightning/orchestrators/__init__.py +23 -0
- zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +596 -0
- zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +307 -0
- zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint_configuration.py +77 -0
- zenml/integrations/lightning/orchestrators/utils.py +67 -0
- zenml/integrations/mlflow/__init__.py +43 -5
- zenml/integrations/mlflow/services/mlflow_deployment.py +26 -0
- zenml/integrations/numpy/__init__.py +32 -0
- zenml/integrations/numpy/materializers/__init__.py +18 -0
- zenml/integrations/numpy/materializers/numpy_materializer.py +246 -0
- zenml/integrations/pandas/__init__.py +32 -0
- zenml/integrations/pandas/materializers/__init__.py +18 -0
- zenml/integrations/pandas/materializers/pandas_materializer.py +192 -0
- zenml/integrations/prodigy/annotators/prodigy_annotator.py +1 -1
- zenml/integrations/seldon/__init__.py +18 -3
- zenml/integrations/sklearn/__init__.py +1 -1
- zenml/integrations/skypilot_azure/__init__.py +1 -1
- zenml/integrations/tensorboard/__init__.py +1 -1
- zenml/integrations/tensorflow/__init__.py +2 -2
- zenml/integrations/tensorflow/materializers/tf_dataset_materializer.py +2 -2
- zenml/integrations/whylogs/__init__.py +18 -2
- zenml/logging/step_logging.py +9 -2
- zenml/materializers/__init__.py +0 -4
- zenml/materializers/base_materializer.py +4 -0
- zenml/materializers/numpy_materializer.py +23 -234
- zenml/materializers/pandas_materializer.py +22 -179
- zenml/model/model.py +91 -2
- zenml/model/utils.py +5 -5
- zenml/models/__init__.py +16 -3
- zenml/models/v2/core/model_version.py +1 -1
- zenml/models/v2/core/pipeline_run.py +31 -1
- zenml/models/v2/core/stack.py +51 -20
- zenml/models/v2/core/step_run.py +28 -0
- zenml/models/v2/misc/info_models.py +78 -0
- zenml/new/pipelines/pipeline.py +65 -25
- zenml/new/pipelines/run_utils.py +57 -136
- zenml/new/steps/step_context.py +17 -6
- zenml/orchestrators/base_orchestrator.py +9 -0
- zenml/orchestrators/step_launcher.py +37 -14
- zenml/orchestrators/step_runner.py +14 -13
- zenml/orchestrators/utils.py +107 -7
- zenml/service_connectors/service_connector_utils.py +2 -2
- zenml/stack/utils.py +11 -2
- zenml/stack_deployments/azure_stack_deployment.py +2 -1
- zenml/steps/base_step.py +62 -25
- zenml/steps/utils.py +115 -3
- zenml/utils/cloud_utils.py +8 -8
- zenml/utils/code_utils.py +130 -32
- zenml/utils/function_utils.py +7 -7
- zenml/utils/notebook_utils.py +14 -0
- zenml/utils/pipeline_docker_image_builder.py +1 -11
- zenml/utils/pydantic_utils.py +3 -3
- zenml/utils/secret_utils.py +2 -2
- zenml/utils/settings_utils.py +1 -1
- zenml/utils/source_utils.py +67 -21
- zenml/utils/string_utils.py +29 -0
- zenml/zen_server/dashboard/assets/{404-CRAA_Lew.js → 404-iO8vpun1.js} +1 -1
- zenml/zen_server/dashboard/assets/{@radix-BXWm7HOa.js → @radix-DnFH_oo1.js} +1 -1
- zenml/zen_server/dashboard/assets/{@react-router-l3lMcXA2.js → @react-router-APVeuk-U.js} +1 -1
- zenml/zen_server/dashboard/assets/{@reactflow-CeVxyqYT.js → @reactflow-B6kq9fJZ.js} +2 -2
- zenml/zen_server/dashboard/assets/{@tanstack-FmcYZMuX.js → @tanstack-QbMbTrh5.js} +1 -1
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-BXeSvmMY.js +1 -0
- zenml/zen_server/dashboard/assets/{CodeSnippet-D0VLxT2A.js → CodeSnippet-DNWdQmbo.js} +2 -2
- zenml/zen_server/dashboard/assets/CollapsibleCard-B2OVjWYE.js +1 -0
- zenml/zen_server/dashboard/assets/Commands-DsoaVElZ.js +1 -0
- zenml/zen_server/dashboard/assets/CopyButton-BqE_-PHO.js +2 -0
- zenml/zen_server/dashboard/assets/{CsvVizualization-D3kAypDj.js → CsvVizualization-Dyasr2jU.js} +6 -6
- zenml/zen_server/dashboard/assets/{edit-C0MVvPD2.js → DialogItem-Cz1VLRwa.js} +1 -1
- zenml/zen_server/dashboard/assets/{DisplayDate-DizbSeT-.js → DisplayDate-DkCy54Bp.js} +1 -1
- zenml/zen_server/dashboard/assets/EditSecretDialog-Du423_3U.js +1 -0
- zenml/zen_server/dashboard/assets/{EmptyState-BHblM39I.js → EmptyState-Cs3DEmso.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-C6LeJSER.js → Error-DorJD_va.js} +1 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-CIfQTutR.js +1 -0
- zenml/zen_server/dashboard/assets/{Helpbox-aAB2XP-z.js → Helpbox-CmfvtNeq.js} +1 -1
- zenml/zen_server/dashboard/assets/Infobox-BL9NOS37.js +1 -0
- zenml/zen_server/dashboard/assets/{InlineAvatar-DpTLgM3Q.js → InlineAvatar-Ds2ZFHPc.js} +1 -1
- zenml/zen_server/dashboard/assets/{Lock-CNyJvf2r.js → Lock-CmIn0szs.js} +1 -1
- zenml/zen_server/dashboard/assets/{MarkdownVisualization-Bajxn0HY.js → MarkdownVisualization-DS05sfBm.js} +1 -1
- zenml/zen_server/dashboard/assets/{NumberBox-BmKE0qnO.js → NumberBox-CrN0_kqI.js} +1 -1
- zenml/zen_server/dashboard/assets/Partials-DX-8iEa1.js +1 -0
- zenml/zen_server/dashboard/assets/{PasswordChecker-yGGoJSB-.js → PasswordChecker-DE71J_3F.js} +1 -1
- zenml/zen_server/dashboard/assets/ProviderIcon-BOQJgapd.js +1 -0
- zenml/zen_server/dashboard/assets/ProviderRadio-BsYBw9YA.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-W3GXpLlI.js +1 -0
- zenml/zen_server/dashboard/assets/SetPassword-B-0a8UCj.js +1 -0
- zenml/zen_server/dashboard/assets/{Tick-uxv80Q6a.js → Tick-i1DYsVcX.js} +1 -1
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-oN4G3sKz.js → UpdatePasswordSchemas-C6Zb7ASL.js} +1 -1
- zenml/zen_server/dashboard/assets/UsageReason-CCnzmwS8.js +1 -0
- zenml/zen_server/dashboard/assets/WizardFooter-BHbO7zOa.js +1 -0
- zenml/zen_server/dashboard/assets/all-pipeline-runs-query-BBEe6I9-.js +1 -0
- zenml/zen_server/dashboard/assets/{check-circle-1_I207rW.js → check-circle-DOoS4yhF.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-down-BpaF8JqM.js → chevron-down-Cwb-W_B_.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-Dk8e2L99.js → chevron-right-double-c9H46Kl8.js} +1 -1
- zenml/zen_server/dashboard/assets/{cloud-only-BkUuI0lZ.js → cloud-only-BuP4Kt_7.js} +1 -1
- zenml/zen_server/dashboard/assets/code-browser-BJYErIjr.js +1 -0
- zenml/zen_server/dashboard/assets/codespaces-BitYDX9d.gif +0 -0
- zenml/zen_server/dashboard/assets/{copy-f3XGPPxt.js → copy-CaGlDsUy.js} +1 -1
- zenml/zen_server/dashboard/assets/create-stack-B2x2d4r1.js +1 -0
- zenml/zen_server/dashboard/assets/{docker-8uj__HHK.js → docker-BFAFXr2_.js} +1 -1
- zenml/zen_server/dashboard/assets/{dots-horizontal-sKQlWEni.js → dots-horizontal-C6K59vUm.js} +1 -1
- zenml/zen_server/dashboard/assets/flyte-Cj-xy_8I.svg +10 -0
- zenml/zen_server/dashboard/assets/form-schemas-Bap0f854.js +1 -0
- zenml/zen_server/dashboard/assets/gcp-Dj6ntk0L.js +1 -0
- zenml/zen_server/dashboard/assets/{help-FuHlZwn0.js → help-CwN931fX.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-Bd1xgUQG.js → index-5GJ5ysEZ.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-DaGknux4.css → index-6DYjZgDn.css} +1 -1
- zenml/zen_server/dashboard/assets/index-B9wVwe7u.js +55 -0
- zenml/zen_server/dashboard/assets/index-DFi8BroH.js +1 -0
- zenml/zen_server/dashboard/assets/{index.esm-DT4uyn2i.js → index.esm-BE1uqCX5.js} +1 -1
- zenml/zen_server/dashboard/assets/kubernetes-BjbR6D-1.js +1 -0
- zenml/zen_server/dashboard/assets/{layout-D6oiSbfd.js → layout-Dru15_XR.js} +1 -1
- zenml/zen_server/dashboard/assets/link-external-BT2L8hAQ.js +1 -0
- zenml/zen_server/dashboard/assets/{login-mutation-13A_JSVA.js → login-mutation-DwxUz8VA.js} +1 -1
- zenml/zen_server/dashboard/assets/{logs-CgeE2vZP.js → logs-GiDJXbLS.js} +1 -1
- zenml/zen_server/dashboard/assets/metaflow-weOkWNyT.svg +10 -0
- zenml/zen_server/dashboard/assets/{not-found-B0Mmb90p.js → not-found-D5i9DunU.js} +1 -1
- zenml/zen_server/dashboard/assets/{package-DdkziX79.js → package-DYKZ5jKW.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BFuJICXM.js +9 -0
- zenml/zen_server/dashboard/assets/{page-BGwA9B1M.js → page-BiF8hLbO.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DugsjcQ_.js → page-BitfWsiW.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CDOQLrPC.js +1 -0
- zenml/zen_server/dashboard/assets/page-CEJWu1YO.js +1 -0
- zenml/zen_server/dashboard/assets/page-CIbehp7V.js +1 -0
- zenml/zen_server/dashboard/assets/page-CLiRGfWo.js +1 -0
- zenml/zen_server/dashboard/assets/page-CV44mQn9.js +1 -0
- zenml/zen_server/dashboard/assets/page-CrSdkteO.js +2 -0
- zenml/zen_server/dashboard/assets/page-D5F3DJjm.js +1 -0
- zenml/zen_server/dashboard/assets/page-DE03uZZR.js +1 -0
- zenml/zen_server/dashboard/assets/page-DFCK65G9.js +1 -0
- zenml/zen_server/dashboard/assets/{page-RnG-qhv9.js → page-DGMa3ZQL.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DI-qTWrm.js +1 -0
- zenml/zen_server/dashboard/assets/page-DQGCHKrQ.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DSTQnBk-.js → page-DQdwZZ9x.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DgM-N9RL.js +1 -0
- zenml/zen_server/dashboard/assets/page-Dt8VgzbE.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DLpOnf7u.js → page-J0s8Sq3N.js} +1 -1
- zenml/zen_server/dashboard/assets/page-WCQ659by.js +1 -0
- zenml/zen_server/dashboard/assets/page-bimkItOg.js +1 -0
- zenml/zen_server/dashboard/assets/{page-hQaiQXfg.js → page-iwoJnwPv.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-YiF_fNbe.js → page-oS4hqS8M.js} +1 -1
- zenml/zen_server/dashboard/assets/page-oSqx9dkH.js +1 -0
- zenml/zen_server/dashboard/assets/page-p3GqEAUW.js +1 -0
- zenml/zen_server/dashboard/assets/page-qvcUVPE-.js +1 -0
- zenml/zen_server/dashboard/assets/page-xQG6GmFJ.js +1 -0
- zenml/zen_server/dashboard/assets/{persist-3-5nOJ6m.js → persist-mEZN_fgH.js} +1 -1
- zenml/zen_server/dashboard/assets/persist-xsYgVtR1.js +1 -0
- zenml/zen_server/dashboard/assets/{plus-FB9-lEq_.js → plus-Bc8eLSDM.js} +1 -1
- zenml/zen_server/dashboard/assets/{refresh-COb6KYDi.js → refresh-hfgWPeto.js} +1 -1
- zenml/zen_server/dashboard/assets/rocket-SESCGQXm.js +1 -0
- zenml/zen_server/dashboard/assets/sharedSchema-BfZcy7aP.js +14 -0
- zenml/zen_server/dashboard/assets/stack-detail-query-CU4egfhp.js +1 -0
- zenml/zen_server/dashboard/assets/templates-1S_8WeSK.webp +0 -0
- zenml/zen_server/dashboard/assets/{trash-Cd5CSFqA.js → trash-DUWZWzse.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-B8GB_ubU.js → update-server-settings-mutation-DNqmQXDM.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-hcMJkz8p.js → url-DwbuKk1b.js} +1 -1
- zenml/zen_server/dashboard/assets/{zod-CnykDKJj.js → zod-uFd1wBcd.js} +1 -1
- zenml/zen_server/dashboard/index.html +7 -7
- zenml/zen_server/dashboard_legacy/asset-manifest.json +4 -4
- zenml/zen_server/dashboard_legacy/index.html +1 -1
- zenml/zen_server/dashboard_legacy/{precache-manifest.9c473c96a43298343a7ce1256183123b.js → precache-manifest.290b95d5b43efa3368b3dc63d20c4782.js} +4 -4
- zenml/zen_server/dashboard_legacy/service-worker.js +1 -1
- zenml/zen_server/dashboard_legacy/static/js/{main.463c90b9.chunk.js → main.840d1bf0.chunk.js} +2 -2
- zenml/zen_server/dashboard_legacy/static/js/{main.463c90b9.chunk.js.map → main.840d1bf0.chunk.js.map} +1 -1
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/routers/service_connectors_endpoints.py +2 -4
- zenml/zen_server/routers/workspaces_endpoints.py +20 -66
- zenml/zen_server/secure_headers.py +120 -0
- zenml/zen_server/template_execution/runner_entrypoint_configuration.py +0 -2
- zenml/zen_server/template_execution/utils.py +1 -0
- zenml/zen_server/utils.py +0 -100
- zenml/zen_server/zen_server_api.py +4 -2
- zenml/zen_stores/migrations/versions/0.65.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.66.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/bf2120261b5a_add_configured_model_version_id.py +74 -0
- zenml/zen_stores/rest_zen_store.py +4 -21
- zenml/zen_stores/schemas/constants.py +16 -0
- zenml/zen_stores/schemas/model_schemas.py +9 -3
- zenml/zen_stores/schemas/pipeline_run_schemas.py +22 -8
- zenml/zen_stores/schemas/step_run_schemas.py +23 -12
- zenml/zen_stores/sql_zen_store.py +312 -300
- zenml/zen_stores/zen_store_interface.py +0 -16
- {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/METADATA +10 -12
- {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/RECORD +249 -217
- zenml/models/v2/misc/full_stack.py +0 -129
- zenml/new/pipelines/model_utils.py +0 -72
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-ErO9aOgK.js +0 -1
- zenml/zen_server/dashboard/assets/AwarenessChannel-CLXo5rKM.js +0 -1
- zenml/zen_server/dashboard/assets/CollapsibleCard-BaUPiVg0.js +0 -1
- zenml/zen_server/dashboard/assets/Commands-JrcZK-3j.js +0 -1
- zenml/zen_server/dashboard/assets/CopyButton-Dbo52T1K.js +0 -2
- zenml/zen_server/dashboard/assets/EditSecretDialog-Bd7mFLS4.js +0 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-jH4OrWBq.js +0 -1
- zenml/zen_server/dashboard/assets/Infobox-BQ0aty32.js +0 -1
- zenml/zen_server/dashboard/assets/ProviderRadio-BBqkIuTd.js +0 -1
- zenml/zen_server/dashboard/assets/RadioItem-xLhXoiFV.js +0 -1
- zenml/zen_server/dashboard/assets/SearchField-C9R0mdaX.js +0 -1
- zenml/zen_server/dashboard/assets/SetPassword-52sNxNiO.js +0 -1
- zenml/zen_server/dashboard/assets/SuccessStep-DlkItqYG.js +0 -1
- zenml/zen_server/dashboard/assets/aws-0_3UsPif.js +0 -1
- zenml/zen_server/dashboard/assets/database-cXYNX9tt.js +0 -1
- zenml/zen_server/dashboard/assets/file-text-B9JibxTs.js +0 -1
- zenml/zen_server/dashboard/assets/index-DhIZtpxB.js +0 -55
- zenml/zen_server/dashboard/assets/page-7-v2OBm-.js +0 -1
- zenml/zen_server/dashboard/assets/page-B3ozwdD1.js +0 -1
- zenml/zen_server/dashboard/assets/page-BkjAUyTA.js +0 -1
- zenml/zen_server/dashboard/assets/page-BnacgBiy.js +0 -1
- zenml/zen_server/dashboard/assets/page-BxF_KMQ3.js +0 -2
- zenml/zen_server/dashboard/assets/page-C4POHC0K.js +0 -1
- zenml/zen_server/dashboard/assets/page-C9kudd44.js +0 -9
- zenml/zen_server/dashboard/assets/page-CA1j3GpJ.js +0 -1
- zenml/zen_server/dashboard/assets/page-CCY6yfmu.js +0 -1
- zenml/zen_server/dashboard/assets/page-CgTe7Bme.js +0 -1
- zenml/zen_server/dashboard/assets/page-Cgn-6v2Y.js +0 -1
- zenml/zen_server/dashboard/assets/page-CxQmQqDw.js +0 -1
- zenml/zen_server/dashboard/assets/page-D2Goey3H.js +0 -1
- zenml/zen_server/dashboard/assets/page-DTysUGOy.js +0 -1
- zenml/zen_server/dashboard/assets/page-D_EXUFJb.js +0 -1
- zenml/zen_server/dashboard/assets/page-Db15QzsM.js +0 -1
- zenml/zen_server/dashboard/assets/page-OFKSPyN7.js +0 -1
- zenml/zen_server/dashboard/assets/page-T2BtjwPl.js +0 -1
- zenml/zen_server/dashboard/assets/page-TXe1Eo3Z.js +0 -1
- zenml/zen_server/dashboard/assets/play-circle-XSkLR12B.js +0 -1
- zenml/zen_server/dashboard/assets/sharedSchema-BoYx_B_L.js +0 -14
- zenml/zen_server/dashboard/assets/stack-detail-query-B-US_-wa.js +0 -1
- zenml/zen_server/dashboard/assets/terminal-grtjrIEJ.js +0 -1
- {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/entry_points.txt +0 -0
@@ -177,7 +177,6 @@ from zenml.models import (
|
|
177
177
|
FlavorRequest,
|
178
178
|
FlavorResponse,
|
179
179
|
FlavorUpdate,
|
180
|
-
FullStackRequest,
|
181
180
|
LogsResponse,
|
182
181
|
ModelFilter,
|
183
182
|
ModelRequest,
|
@@ -283,7 +282,6 @@ from zenml.models import (
|
|
283
282
|
WorkspaceUpdate,
|
284
283
|
)
|
285
284
|
from zenml.models.v2.core.component import InternalComponentRequest
|
286
|
-
from zenml.models.v2.core.stack import InternalStackRequest
|
287
285
|
from zenml.service_connectors.service_connector_registry import (
|
288
286
|
service_connector_registry,
|
289
287
|
)
|
@@ -3193,6 +3191,22 @@ class SqlZenStore(BaseZenStore):
|
|
3193
3191
|
session=session,
|
3194
3192
|
)
|
3195
3193
|
|
3194
|
+
# We have to skip the validation of the default components
|
3195
|
+
# as it creates a loop of initialization.
|
3196
|
+
if component.name != "default" or (
|
3197
|
+
component.type != StackComponentType.ORCHESTRATOR
|
3198
|
+
and component.type != StackComponentType.ARTIFACT_STORE
|
3199
|
+
):
|
3200
|
+
from zenml.stack.utils import validate_stack_component_config
|
3201
|
+
|
3202
|
+
validate_stack_component_config(
|
3203
|
+
configuration_dict=component.configuration,
|
3204
|
+
flavor_name=component.flavor,
|
3205
|
+
component_type=component.type,
|
3206
|
+
zen_store=self,
|
3207
|
+
validate_custom_flavors=False,
|
3208
|
+
)
|
3209
|
+
|
3196
3210
|
service_connector: Optional[ServiceConnectorSchema] = None
|
3197
3211
|
if component.connector:
|
3198
3212
|
service_connector = session.exec(
|
@@ -3223,10 +3237,12 @@ class SqlZenStore(BaseZenStore):
|
|
3223
3237
|
not in skypilot_regions
|
3224
3238
|
):
|
3225
3239
|
logger.warning(
|
3226
|
-
f"Region `{component.configuration['region']}` is
|
3227
|
-
|
3228
|
-
"
|
3229
|
-
"
|
3240
|
+
f"Region `{component.configuration['region']}` is "
|
3241
|
+
"not enabled in Skypilot by default. Supported regions "
|
3242
|
+
f"by default are: {skypilot_regions}. Check the "
|
3243
|
+
"Skypilot documentation to learn how to enable "
|
3244
|
+
"regions rather than default ones. (If you have "
|
3245
|
+
"already extended your configuration - "
|
3230
3246
|
"simply ignore this warning)"
|
3231
3247
|
)
|
3232
3248
|
|
@@ -3345,6 +3361,17 @@ class SqlZenStore(BaseZenStore):
|
|
3345
3361
|
f"existing component with this id."
|
3346
3362
|
)
|
3347
3363
|
|
3364
|
+
if component_update.configuration is not None:
|
3365
|
+
from zenml.stack.utils import validate_stack_component_config
|
3366
|
+
|
3367
|
+
validate_stack_component_config(
|
3368
|
+
configuration_dict=component_update.configuration,
|
3369
|
+
flavor_name=existing_component.flavor,
|
3370
|
+
component_type=StackComponentType(existing_component.type),
|
3371
|
+
zen_store=self,
|
3372
|
+
validate_custom_flavors=False,
|
3373
|
+
)
|
3374
|
+
|
3348
3375
|
if (
|
3349
3376
|
existing_component.name == DEFAULT_STACK_AND_COMPONENT_NAME
|
3350
3377
|
and existing_component.type
|
@@ -4937,7 +4964,7 @@ class SqlZenStore(BaseZenStore):
|
|
4937
4964
|
# orchestrator_run_id.
|
4938
4965
|
# Note: This only locks a single row if the where clause of
|
4939
4966
|
# the query is indexed (we have a unique index due to the
|
4940
|
-
# unique constraint on those columns). Otherwise this will lock
|
4967
|
+
# unique constraint on those columns). Otherwise, this will lock
|
4941
4968
|
# multiple rows or even the complete table which we want to
|
4942
4969
|
# avoid.
|
4943
4970
|
.with_for_update()
|
@@ -7191,77 +7218,11 @@ class SqlZenStore(BaseZenStore):
|
|
7191
7218
|
)
|
7192
7219
|
|
7193
7220
|
# ----------------------------- Stacks -----------------------------
|
7194
|
-
|
7195
|
-
@track_decorator(AnalyticsEvent.REGISTERED_STACK)
|
7196
7221
|
def create_stack(self, stack: StackRequest) -> StackResponse:
|
7197
|
-
"""Register a new stack.
|
7198
|
-
|
7199
|
-
Args:
|
7200
|
-
stack: The stack to register.
|
7201
|
-
|
7202
|
-
Returns:
|
7203
|
-
The registered stack.
|
7204
|
-
"""
|
7205
|
-
validate_name(stack)
|
7206
|
-
with Session(self.engine) as session:
|
7207
|
-
self._fail_if_stack_with_name_exists(
|
7208
|
-
stack_name=stack.name,
|
7209
|
-
workspace_id=stack.workspace,
|
7210
|
-
session=session,
|
7211
|
-
)
|
7212
|
-
|
7213
|
-
# Get the Schemas of all components mentioned
|
7214
|
-
component_ids = (
|
7215
|
-
[
|
7216
|
-
component_id
|
7217
|
-
for list_of_component_ids in stack.components.values()
|
7218
|
-
for component_id in list_of_component_ids
|
7219
|
-
]
|
7220
|
-
if stack.components is not None
|
7221
|
-
else []
|
7222
|
-
)
|
7223
|
-
filters = [
|
7224
|
-
(StackComponentSchema.id == component_id)
|
7225
|
-
for component_id in component_ids
|
7226
|
-
]
|
7227
|
-
|
7228
|
-
defined_components = session.exec(
|
7229
|
-
select(StackComponentSchema).where(or_(*filters))
|
7230
|
-
).all()
|
7231
|
-
|
7232
|
-
new_stack_schema = StackSchema(
|
7233
|
-
workspace_id=stack.workspace,
|
7234
|
-
user_id=stack.user,
|
7235
|
-
stack_spec_path=stack.stack_spec_path,
|
7236
|
-
name=stack.name,
|
7237
|
-
description=stack.description,
|
7238
|
-
components=defined_components,
|
7239
|
-
labels=base64.b64encode(
|
7240
|
-
json.dumps(stack.labels).encode("utf-8")
|
7241
|
-
),
|
7242
|
-
)
|
7243
|
-
|
7244
|
-
session.add(new_stack_schema)
|
7245
|
-
session.commit()
|
7246
|
-
session.refresh(new_stack_schema)
|
7247
|
-
|
7248
|
-
for component in defined_components:
|
7249
|
-
if component.type == StackComponentType.ORCHESTRATOR:
|
7250
|
-
if component.flavor not in {"local", "local_docker"}:
|
7251
|
-
self._update_onboarding_state(
|
7252
|
-
completed_steps={
|
7253
|
-
OnboardingStep.STACK_WITH_REMOTE_ORCHESTRATOR_CREATED
|
7254
|
-
},
|
7255
|
-
session=session,
|
7256
|
-
)
|
7257
|
-
|
7258
|
-
return new_stack_schema.to_model(include_metadata=True)
|
7259
|
-
|
7260
|
-
def create_full_stack(self, full_stack: FullStackRequest) -> StackResponse:
|
7261
7222
|
"""Register a full stack.
|
7262
7223
|
|
7263
7224
|
Args:
|
7264
|
-
|
7225
|
+
stack: The full stack configuration.
|
7265
7226
|
|
7266
7227
|
Returns:
|
7267
7228
|
The registered stack.
|
@@ -7269,254 +7230,304 @@ class SqlZenStore(BaseZenStore):
|
|
7269
7230
|
Raises:
|
7270
7231
|
ValueError: If the full stack creation fails, due to the corrupted
|
7271
7232
|
input.
|
7272
|
-
|
7233
|
+
Exception: If the full stack creation fails, due to unforeseen
|
7273
7234
|
errors.
|
7274
7235
|
"""
|
7275
|
-
|
7276
|
-
|
7277
|
-
|
7278
|
-
|
7279
|
-
try:
|
7280
|
-
# Validate the name of the new stack
|
7281
|
-
validate_name(full_stack)
|
7282
|
-
|
7283
|
-
if full_stack.labels is None:
|
7284
|
-
full_stack.labels = {}
|
7236
|
+
with Session(self.engine) as session:
|
7237
|
+
# For clean-up purposes, each created entity is tracked here
|
7238
|
+
service_connectors_created_ids: List[UUID] = []
|
7239
|
+
components_created_ids: List[UUID] = []
|
7285
7240
|
|
7286
|
-
|
7241
|
+
try:
|
7242
|
+
# Validate the name of the new stack
|
7243
|
+
validate_name(stack)
|
7287
7244
|
|
7288
|
-
|
7289
|
-
|
7245
|
+
if stack.labels is None:
|
7246
|
+
stack.labels = {}
|
7290
7247
|
|
7291
|
-
|
7292
|
-
|
7293
|
-
StackComponentType.ORCHESTRATOR
|
7294
|
-
]
|
7295
|
-
if isinstance(orchestrator_component, UUID):
|
7296
|
-
orchestrator = self.get_stack_component(
|
7297
|
-
orchestrator_component,
|
7298
|
-
hydrate=False,
|
7299
|
-
)
|
7300
|
-
need_to_generate_permanent_tokens = (
|
7301
|
-
orchestrator.flavor.startswith("vm_")
|
7302
|
-
)
|
7303
|
-
else:
|
7304
|
-
need_to_generate_permanent_tokens = (
|
7305
|
-
orchestrator_component.flavor.startswith("vm_")
|
7306
|
-
)
|
7248
|
+
# Service Connectors
|
7249
|
+
service_connectors: List[ServiceConnectorResponse] = []
|
7307
7250
|
|
7308
|
-
|
7309
|
-
|
7310
|
-
|
7311
|
-
|
7312
|
-
|
7313
|
-
|
7314
|
-
|
7315
|
-
|
7316
|
-
|
7317
|
-
|
7318
|
-
)
|
7319
|
-
|
7320
|
-
|
7321
|
-
|
7322
|
-
|
7323
|
-
|
7324
|
-
connector_config["generate_temporary_tokens"] = (
|
7325
|
-
False
|
7326
|
-
)
|
7327
|
-
self.update_service_connector(
|
7328
|
-
existing_service_connector.id,
|
7329
|
-
ServiceConnectorUpdate(
|
7330
|
-
configuration=connector_config
|
7331
|
-
),
|
7332
|
-
)
|
7333
|
-
service_connectors.append(
|
7334
|
-
self.get_service_connector(connector_id_or_info)
|
7335
|
-
)
|
7336
|
-
# Create a new service connector
|
7337
|
-
else:
|
7338
|
-
connector_name = full_stack.name
|
7339
|
-
connector_config = connector_id_or_info.configuration
|
7340
|
-
connector_config[
|
7341
|
-
"generate_temporary_tokens"
|
7342
|
-
] = not need_to_generate_permanent_tokens
|
7251
|
+
orchestrator_components = stack.components[
|
7252
|
+
StackComponentType.ORCHESTRATOR
|
7253
|
+
]
|
7254
|
+
for orchestrator_component in orchestrator_components:
|
7255
|
+
if isinstance(orchestrator_component, UUID):
|
7256
|
+
orchestrator = self.get_stack_component(
|
7257
|
+
orchestrator_component,
|
7258
|
+
hydrate=False,
|
7259
|
+
)
|
7260
|
+
need_to_generate_permanent_tokens = (
|
7261
|
+
orchestrator.flavor.startswith("vm_")
|
7262
|
+
)
|
7263
|
+
else:
|
7264
|
+
need_to_generate_permanent_tokens = (
|
7265
|
+
orchestrator_component.flavor.startswith("vm_")
|
7266
|
+
)
|
7343
7267
|
|
7344
|
-
|
7345
|
-
|
7346
|
-
|
7347
|
-
|
7348
|
-
|
7349
|
-
|
7350
|
-
|
7351
|
-
|
7352
|
-
|
7353
|
-
|
7354
|
-
|
7355
|
-
|
7356
|
-
|
7357
|
-
|
7358
|
-
|
7359
|
-
|
7268
|
+
for connector_id_or_info in stack.service_connectors:
|
7269
|
+
# Fetch an existing service connector
|
7270
|
+
if isinstance(connector_id_or_info, UUID):
|
7271
|
+
existing_service_connector = (
|
7272
|
+
self.get_service_connector(connector_id_or_info)
|
7273
|
+
)
|
7274
|
+
if need_to_generate_permanent_tokens:
|
7275
|
+
if (
|
7276
|
+
existing_service_connector.configuration.get(
|
7277
|
+
"generate_temporary_tokens", None
|
7278
|
+
)
|
7279
|
+
is not False
|
7280
|
+
):
|
7281
|
+
connector_config = (
|
7282
|
+
existing_service_connector.configuration
|
7283
|
+
)
|
7284
|
+
connector_config[
|
7285
|
+
"generate_temporary_tokens"
|
7286
|
+
] = False
|
7287
|
+
self.update_service_connector(
|
7288
|
+
existing_service_connector.id,
|
7289
|
+
ServiceConnectorUpdate(
|
7290
|
+
configuration=connector_config
|
7291
|
+
),
|
7292
|
+
)
|
7293
|
+
service_connectors.append(
|
7294
|
+
self.get_service_connector(connector_id_or_info)
|
7295
|
+
)
|
7296
|
+
# Create a new service connector
|
7297
|
+
else:
|
7298
|
+
connector_name = stack.name
|
7299
|
+
connector_config = connector_id_or_info.configuration
|
7300
|
+
connector_config[
|
7301
|
+
"generate_temporary_tokens"
|
7302
|
+
] = not need_to_generate_permanent_tokens
|
7303
|
+
|
7304
|
+
while True:
|
7305
|
+
try:
|
7306
|
+
service_connector_request = ServiceConnectorRequest(
|
7307
|
+
name=connector_name,
|
7308
|
+
connector_type=connector_id_or_info.type,
|
7309
|
+
auth_method=connector_id_or_info.auth_method,
|
7310
|
+
configuration=connector_config,
|
7311
|
+
user=stack.user,
|
7312
|
+
workspace=stack.workspace,
|
7313
|
+
labels={
|
7314
|
+
k: str(v)
|
7315
|
+
for k, v in stack.labels.items()
|
7316
|
+
},
|
7317
|
+
)
|
7318
|
+
service_connector_response = self.create_service_connector(
|
7360
7319
|
service_connector=service_connector_request
|
7361
7320
|
)
|
7321
|
+
service_connectors.append(
|
7322
|
+
service_connector_response
|
7323
|
+
)
|
7324
|
+
service_connectors_created_ids.append(
|
7325
|
+
service_connector_response.id
|
7326
|
+
)
|
7327
|
+
break
|
7328
|
+
except EntityExistsError:
|
7329
|
+
connector_name = (
|
7330
|
+
f"{stack.name}-{random_str(4)}".lower()
|
7331
|
+
)
|
7332
|
+
continue
|
7333
|
+
|
7334
|
+
# Stack Components
|
7335
|
+
components_mapping: Dict[StackComponentType, List[UUID]] = {}
|
7336
|
+
for (
|
7337
|
+
component_type,
|
7338
|
+
components,
|
7339
|
+
) in stack.components.items():
|
7340
|
+
for component_info in components:
|
7341
|
+
# Fetch an existing component
|
7342
|
+
if isinstance(component_info, UUID):
|
7343
|
+
component = self.get_stack_component(
|
7344
|
+
component_id=component_info
|
7362
7345
|
)
|
7363
|
-
|
7364
|
-
|
7365
|
-
|
7366
|
-
|
7367
|
-
|
7368
|
-
|
7369
|
-
|
7370
|
-
except EntityExistsError:
|
7371
|
-
connector_name = (
|
7372
|
-
f"{full_stack.name}-{random_str(4)}".lower()
|
7346
|
+
# Create a new component
|
7347
|
+
else:
|
7348
|
+
flavor_list = self.list_flavors(
|
7349
|
+
flavor_filter_model=FlavorFilter(
|
7350
|
+
name=component_info.flavor,
|
7351
|
+
type=component_type,
|
7352
|
+
)
|
7373
7353
|
)
|
7374
|
-
|
7354
|
+
if not len(flavor_list):
|
7355
|
+
raise ValueError(
|
7356
|
+
f"Flavor '{component_info.flavor}' not found "
|
7357
|
+
f"for component type '{component_type}'."
|
7358
|
+
)
|
7375
7359
|
|
7376
|
-
|
7377
|
-
|
7378
|
-
|
7379
|
-
|
7380
|
-
|
7381
|
-
|
7382
|
-
|
7383
|
-
|
7384
|
-
|
7385
|
-
|
7386
|
-
|
7387
|
-
|
7388
|
-
|
7389
|
-
|
7390
|
-
|
7391
|
-
|
7392
|
-
|
7393
|
-
|
7394
|
-
|
7395
|
-
|
7396
|
-
|
7397
|
-
|
7398
|
-
|
7399
|
-
|
7360
|
+
flavor_model = flavor_list[0]
|
7361
|
+
|
7362
|
+
component_name = stack.name
|
7363
|
+
while True:
|
7364
|
+
try:
|
7365
|
+
component_request = ComponentRequest(
|
7366
|
+
name=component_name,
|
7367
|
+
type=component_type,
|
7368
|
+
flavor=component_info.flavor,
|
7369
|
+
configuration=component_info.configuration,
|
7370
|
+
user=stack.user,
|
7371
|
+
workspace=stack.workspace,
|
7372
|
+
labels=stack.labels,
|
7373
|
+
)
|
7374
|
+
component = self.create_stack_component(
|
7375
|
+
component=component_request
|
7376
|
+
)
|
7377
|
+
components_created_ids.append(component.id)
|
7378
|
+
break
|
7379
|
+
except EntityExistsError:
|
7380
|
+
component_name = (
|
7381
|
+
f"{stack.name}-{random_str(4)}".lower()
|
7382
|
+
)
|
7383
|
+
continue
|
7384
|
+
|
7385
|
+
if (
|
7386
|
+
component_info.service_connector_index
|
7387
|
+
is not None
|
7388
|
+
):
|
7389
|
+
service_connector = service_connectors[
|
7390
|
+
component_info.service_connector_index
|
7391
|
+
]
|
7392
|
+
|
7393
|
+
requirements = (
|
7394
|
+
flavor_model.connector_requirements
|
7395
|
+
)
|
7400
7396
|
|
7401
|
-
|
7397
|
+
if not requirements:
|
7398
|
+
raise ValueError(
|
7399
|
+
f"The '{flavor_model.name}' implementation "
|
7400
|
+
"does not support using a service "
|
7401
|
+
"connector to connect to resources."
|
7402
|
+
)
|
7403
|
+
|
7404
|
+
if component_info.service_connector_resource_id:
|
7405
|
+
resource_id = component_info.service_connector_resource_id
|
7406
|
+
else:
|
7407
|
+
resource_id = None
|
7408
|
+
resource_type = requirements.resource_type
|
7409
|
+
if (
|
7410
|
+
requirements.resource_id_attr
|
7411
|
+
is not None
|
7412
|
+
):
|
7413
|
+
resource_id = (
|
7414
|
+
component_info.configuration.get(
|
7415
|
+
requirements.resource_id_attr
|
7416
|
+
)
|
7417
|
+
)
|
7418
|
+
|
7419
|
+
satisfied, msg = requirements.is_satisfied_by(
|
7420
|
+
connector=service_connector,
|
7421
|
+
component=component,
|
7422
|
+
)
|
7402
7423
|
|
7403
|
-
|
7404
|
-
|
7405
|
-
|
7406
|
-
|
7407
|
-
|
7408
|
-
|
7409
|
-
|
7410
|
-
|
7411
|
-
|
7412
|
-
|
7413
|
-
|
7414
|
-
|
7415
|
-
|
7416
|
-
|
7417
|
-
|
7418
|
-
|
7419
|
-
|
7420
|
-
|
7421
|
-
|
7422
|
-
|
7423
|
-
|
7424
|
-
|
7424
|
+
if not satisfied:
|
7425
|
+
raise ValueError(
|
7426
|
+
"Please pick a connector that is "
|
7427
|
+
"compatible with the component flavor and "
|
7428
|
+
"try again.."
|
7429
|
+
)
|
7430
|
+
|
7431
|
+
if not resource_id:
|
7432
|
+
if service_connector.resource_id:
|
7433
|
+
resource_id = (
|
7434
|
+
service_connector.resource_id
|
7435
|
+
)
|
7436
|
+
elif service_connector.supports_instances:
|
7437
|
+
raise ValueError(
|
7438
|
+
f"Multiple {resource_type} resources "
|
7439
|
+
"are available for the selected "
|
7440
|
+
"connector. Please use a `resource_id` "
|
7441
|
+
"to configure a "
|
7442
|
+
f"{resource_type} resource."
|
7443
|
+
)
|
7444
|
+
|
7445
|
+
component_update = ComponentUpdate(
|
7446
|
+
connector=service_connector.id,
|
7447
|
+
connector_resource_id=resource_id,
|
7448
|
+
)
|
7449
|
+
self.update_stack_component(
|
7450
|
+
component_id=component.id,
|
7451
|
+
component_update=component_update,
|
7452
|
+
)
|
7425
7453
|
|
7426
|
-
|
7427
|
-
|
7428
|
-
component_info.service_connector_index
|
7454
|
+
components_mapping[component_type] = [
|
7455
|
+
component.id,
|
7429
7456
|
]
|
7430
7457
|
|
7431
|
-
|
7432
|
-
|
7433
|
-
if not requirements:
|
7434
|
-
raise ValueError(
|
7435
|
-
f"The '{flavor_model.name}' implementation "
|
7436
|
-
"does not support using a service connector to "
|
7437
|
-
"connect to resources."
|
7438
|
-
)
|
7458
|
+
# Stack
|
7459
|
+
assert stack.workspace is not None
|
7439
7460
|
|
7440
|
-
|
7441
|
-
|
7442
|
-
|
7443
|
-
|
7444
|
-
|
7445
|
-
resource_id = None
|
7446
|
-
resource_type = requirements.resource_type
|
7447
|
-
if requirements.resource_id_attr is not None:
|
7448
|
-
resource_id = component_info.configuration.get(
|
7449
|
-
requirements.resource_id_attr
|
7450
|
-
)
|
7461
|
+
self._fail_if_stack_with_name_exists(
|
7462
|
+
stack_name=stack.name,
|
7463
|
+
workspace_id=stack.workspace,
|
7464
|
+
session=session,
|
7465
|
+
)
|
7451
7466
|
|
7452
|
-
|
7453
|
-
|
7454
|
-
|
7455
|
-
)
|
7467
|
+
component_ids = (
|
7468
|
+
[
|
7469
|
+
component_id
|
7470
|
+
for list_of_component_ids in components_mapping.values()
|
7471
|
+
for component_id in list_of_component_ids
|
7472
|
+
]
|
7473
|
+
if stack.components is not None
|
7474
|
+
else []
|
7475
|
+
)
|
7476
|
+
filters = [
|
7477
|
+
(StackComponentSchema.id == component_id)
|
7478
|
+
for component_id in component_ids
|
7479
|
+
]
|
7456
7480
|
|
7457
|
-
|
7458
|
-
|
7459
|
-
|
7460
|
-
"compatible with the component flavor and "
|
7461
|
-
"try again.."
|
7462
|
-
)
|
7481
|
+
defined_components = session.exec(
|
7482
|
+
select(StackComponentSchema).where(or_(*filters))
|
7483
|
+
).all()
|
7463
7484
|
|
7464
|
-
|
7465
|
-
|
7466
|
-
|
7467
|
-
|
7468
|
-
|
7469
|
-
|
7470
|
-
|
7471
|
-
|
7472
|
-
|
7473
|
-
|
7474
|
-
|
7485
|
+
new_stack_schema = StackSchema(
|
7486
|
+
workspace_id=stack.workspace,
|
7487
|
+
user_id=stack.user,
|
7488
|
+
stack_spec_path=stack.stack_spec_path,
|
7489
|
+
name=stack.name,
|
7490
|
+
description=stack.description,
|
7491
|
+
components=defined_components,
|
7492
|
+
labels=base64.b64encode(
|
7493
|
+
json.dumps(stack.labels).encode("utf-8")
|
7494
|
+
),
|
7495
|
+
)
|
7475
7496
|
|
7476
|
-
|
7477
|
-
|
7478
|
-
|
7479
|
-
|
7480
|
-
|
7481
|
-
|
7482
|
-
|
7483
|
-
|
7497
|
+
session.add(new_stack_schema)
|
7498
|
+
session.commit()
|
7499
|
+
session.refresh(new_stack_schema)
|
7500
|
+
|
7501
|
+
for defined_component in defined_components:
|
7502
|
+
if (
|
7503
|
+
defined_component.type
|
7504
|
+
== StackComponentType.ORCHESTRATOR
|
7505
|
+
):
|
7506
|
+
if defined_component.flavor not in {
|
7507
|
+
"local",
|
7508
|
+
"local_docker",
|
7509
|
+
}:
|
7510
|
+
self._update_onboarding_state(
|
7511
|
+
completed_steps={
|
7512
|
+
OnboardingStep.STACK_WITH_REMOTE_ORCHESTRATOR_CREATED
|
7513
|
+
},
|
7514
|
+
session=session,
|
7515
|
+
)
|
7484
7516
|
|
7485
|
-
|
7486
|
-
component.id,
|
7487
|
-
]
|
7517
|
+
return new_stack_schema.to_model(include_metadata=True)
|
7488
7518
|
|
7489
|
-
|
7490
|
-
|
7491
|
-
|
7492
|
-
|
7493
|
-
|
7494
|
-
|
7495
|
-
workspace=full_stack.workspace,
|
7496
|
-
name=stack_name,
|
7497
|
-
description=full_stack.description,
|
7498
|
-
components=components_mapping,
|
7499
|
-
labels=full_stack.labels,
|
7519
|
+
except Exception:
|
7520
|
+
for component_id in components_created_ids:
|
7521
|
+
self.delete_stack_component(component_id=component_id)
|
7522
|
+
for service_connector_id in service_connectors_created_ids:
|
7523
|
+
self.delete_service_connector(
|
7524
|
+
service_connector_id=service_connector_id
|
7500
7525
|
)
|
7501
|
-
|
7502
|
-
|
7503
|
-
|
7504
|
-
except EntityExistsError:
|
7505
|
-
stack_name = f"{full_stack.name}-{random_str(4)}".lower()
|
7506
|
-
|
7507
|
-
return stack_response
|
7508
|
-
|
7509
|
-
except Exception as e:
|
7510
|
-
for component_id in components_created_ids:
|
7511
|
-
self.delete_stack_component(component_id=component_id)
|
7512
|
-
for service_connector_id in service_connectors_created_ids:
|
7513
|
-
self.delete_service_connector(
|
7514
|
-
service_connector_id=service_connector_id
|
7526
|
+
logger.error(
|
7527
|
+
"Stack creation has failed. Cleaned up the entities "
|
7528
|
+
"that are created in the process."
|
7515
7529
|
)
|
7516
|
-
|
7517
|
-
f"Full Stack creation has failed {e}. Cleaning up the "
|
7518
|
-
f"created entities."
|
7519
|
-
) from e
|
7530
|
+
raise
|
7520
7531
|
|
7521
7532
|
def get_stack(self, stack_id: UUID, hydrate: bool = True) -> StackResponse:
|
7522
7533
|
"""Get a stack by its unique ID.
|
@@ -7731,7 +7742,6 @@ class SqlZenStore(BaseZenStore):
|
|
7731
7742
|
logger.info(
|
7732
7743
|
f"Creating default stack in workspace {workspace.name}..."
|
7733
7744
|
)
|
7734
|
-
|
7735
7745
|
orchestrator = self.create_stack_component(
|
7736
7746
|
component=InternalComponentRequest(
|
7737
7747
|
# Passing `None` for the user here means the orchestrator
|
@@ -7764,9 +7774,7 @@ class SqlZenStore(BaseZenStore):
|
|
7764
7774
|
c.type: [c.id] for c in [orchestrator, artifact_store]
|
7765
7775
|
}
|
7766
7776
|
|
7767
|
-
stack =
|
7768
|
-
# Passing `None` for the user here means the stack is owned by
|
7769
|
-
# the server, which for RBAC indicates that everyone can read it
|
7777
|
+
stack = StackRequest(
|
7770
7778
|
user=None,
|
7771
7779
|
name=DEFAULT_STACK_AND_COMPONENT_NAME,
|
7772
7780
|
components=components,
|
@@ -8736,6 +8744,10 @@ class SqlZenStore(BaseZenStore):
|
|
8736
8744
|
# For Python versions <3.9, leave out the third parameter to
|
8737
8745
|
# _evaluate
|
8738
8746
|
target_schema = schema_ref._evaluate(vars(zenml_schemas), {})
|
8747
|
+
elif sys.version_info >= (3, 12, 4):
|
8748
|
+
target_schema = schema_ref._evaluate(
|
8749
|
+
vars(zenml_schemas), {}, recursive_guard=frozenset()
|
8750
|
+
)
|
8739
8751
|
else:
|
8740
8752
|
target_schema = schema_ref._evaluate(
|
8741
8753
|
vars(zenml_schemas), {}, frozenset()
|