zenml-nightly 0.64.0.dev20240809__py3-none-any.whl → 0.65.0.dev20240906__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 +68 -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/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/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 +18 -5
- 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/wandb/experiment_trackers/wandb_experiment_tracker.py +1 -1
- 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/source_utils.py +67 -21
- zenml/utils/string_utils.py +29 -0
- zenml/zen_server/dashboard/assets/{404-CRAA_Lew.js → 404-nKxQ4QDX.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-IuMOnBUC.js} +2 -2
- zenml/zen_server/dashboard/assets/{@tanstack-FmcYZMuX.js → @tanstack-QbMbTrh5.js} +1 -1
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-CO2rOw5M.js +1 -0
- zenml/zen_server/dashboard/assets/{CodeSnippet-D0VLxT2A.js → CodeSnippet-i_WEOWw9.js} +1 -1
- zenml/zen_server/dashboard/assets/{CollapsibleCard-BaUPiVg0.js → CollapsibleCard-C9BzoY6q.js} +1 -1
- zenml/zen_server/dashboard/assets/Commands-m9HMl-eh.js +1 -0
- zenml/zen_server/dashboard/assets/{CopyButton-Dbo52T1K.js → CopyButton-BAYaQlWF.js} +1 -1
- zenml/zen_server/dashboard/assets/{CsvVizualization-D3kAypDj.js → CsvVizualization-Bbzv7VEL.js} +5 -5
- zenml/zen_server/dashboard/assets/{edit-C0MVvPD2.js → DialogItem-B576Svvy.js} +1 -1
- zenml/zen_server/dashboard/assets/{DisplayDate-DizbSeT-.js → DisplayDate-DkCy54Bp.js} +1 -1
- zenml/zen_server/dashboard/assets/EditSecretDialog-CmY9fiM0.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-QMgFNDTs.js} +1 -1
- zenml/zen_server/dashboard/assets/{ExecutionStatus-jH4OrWBq.js → ExecutionStatus-BSQgMpzk.js} +1 -1
- zenml/zen_server/dashboard/assets/{Helpbox-aAB2XP-z.js → Helpbox-C96LeSX9.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-BQ0aty32.js → Infobox-BB7dfbrO.js} +1 -1
- zenml/zen_server/dashboard/assets/{InlineAvatar-DpTLgM3Q.js → InlineAvatar-C2ZECnGP.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-RDhJ8Ci7.js +1 -0
- zenml/zen_server/dashboard/assets/{PasswordChecker-yGGoJSB-.js → PasswordChecker-DE71J_3F.js} +1 -1
- zenml/zen_server/dashboard/assets/ProviderIcon-wA4qBOv1.js +1 -0
- zenml/zen_server/dashboard/assets/ProviderRadio-DkPE6alG.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-BPNazO4G.js +1 -0
- zenml/zen_server/dashboard/assets/SetPassword-kA6Bi_Kp.js +1 -0
- zenml/zen_server/dashboard/assets/{Tick-uxv80Q6a.js → Tick-DEACFydX.js} +1 -1
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-oN4G3sKz.js → UpdatePasswordSchemas-BKyR7Eqi.js} +1 -1
- zenml/zen_server/dashboard/assets/UsageReason-DbgUeRkI.js +1 -0
- zenml/zen_server/dashboard/assets/WizardFooter-sUnbJ70r.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-DrdxC8NV.js} +1 -1
- zenml/zen_server/dashboard/assets/code-browser-BJYErIjr.js +1 -0
- zenml/zen_server/dashboard/assets/{copy-f3XGPPxt.js → copy-CaGlDsUy.js} +1 -1
- zenml/zen_server/dashboard/assets/create-stack-u6VyIXZP.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-DD4OppNK.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-CnqMjIZT.js +1 -0
- zenml/zen_server/dashboard/assets/index-CsIuf3i6.css +1 -0
- zenml/zen_server/dashboard/assets/index-Davdjm1d.js +55 -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/{login-mutation-13A_JSVA.js → login-mutation-TIWnZoJ7.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-C_bW_Kkr.js} +1 -1
- zenml/zen_server/dashboard/assets/{package-DdkziX79.js → package-DYKZ5jKW.js} +1 -1
- zenml/zen_server/dashboard/assets/page-0eecLRNs.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DugsjcQ_.js → page-BN7n3Dsp.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-OFKSPyN7.js → page-BPFkP_IB.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BSkbj719.js +1 -0
- zenml/zen_server/dashboard/assets/{page-YiF_fNbe.js → page-Bg5X2mLz.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DSTQnBk-.js → page-BhqIV8mu.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BxPQz4Q8.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DLpOnf7u.js → page-CDG9uQT9.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CCY6yfmu.js → page-CUOBhxxU.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CrjI9mjm.js +1 -0
- zenml/zen_server/dashboard/assets/page-D4J2Oy-I.js +1 -0
- zenml/zen_server/dashboard/assets/{page-TXe1Eo3Z.js → page-D5I0-LSs.js} +1 -1
- zenml/zen_server/dashboard/assets/page-D7bwpJvV.js +1 -0
- zenml/zen_server/dashboard/assets/page-DCnizFO_.js +9 -0
- zenml/zen_server/dashboard/assets/page-DQBv3t8t.js +1 -0
- zenml/zen_server/dashboard/assets/page-DYNlbmas.js +1 -0
- zenml/zen_server/dashboard/assets/{page-Cgn-6v2Y.js → page-DsKroTLH.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DsQOL6ZL.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BGwA9B1M.js → page-Dvr6lpJm.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-hQaiQXfg.js → page-Dy0EbJQD.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DyM2M_wT.js +1 -0
- zenml/zen_server/dashboard/assets/page-HXZtxyWq.js +1 -0
- zenml/zen_server/dashboard/assets/page-OmVfClGH.js +2 -0
- zenml/zen_server/dashboard/assets/{page-RnG-qhv9.js → page-XReFLy-1.js} +1 -1
- zenml/zen_server/dashboard/assets/page-t1VWIy6W.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BkjAUyTA.js → page-wPiJkPp6.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CxQmQqDw.js → page-wQ8_y5mW.js} +1 -1
- zenml/zen_server/dashboard/assets/persist-CnMMI8ls.js +1 -0
- zenml/zen_server/dashboard/assets/{persist-3-5nOJ6m.js → persist-g4uRK-v-.js} +1 -1
- zenml/zen_server/dashboard/assets/{plus-FB9-lEq_.js → plus-Bc8eLSDM.js} +1 -1
- zenml/zen_server/dashboard/assets/{refresh-COb6KYDi.js → refresh-CtPKdk2G.js} +1 -1
- zenml/zen_server/dashboard/assets/rocket-SESCGQXm.js +1 -0
- zenml/zen_server/dashboard/assets/sharedSchema-Dbpe2oAO.js +14 -0
- zenml/zen_server/dashboard/assets/stack-detail-query-fuuoot1D.js +1 -0
- zenml/zen_server/dashboard/assets/{terminal-grtjrIEJ.js → terminal-DRIPb4oF.js} +1 -1
- 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-YhoZKgC9.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-hcMJkz8p.js → url-DNHuFfYx.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.123c8e8fafecee40f30294ab26484cf1.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.a98a73cf.chunk.js} +2 -2
- zenml/zen_server/dashboard_legacy/static/js/{main.463c90b9.chunk.js.map → main.a98a73cf.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/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.dev20240809.dist-info → zenml_nightly-0.65.0.dev20240906.dist-info}/METADATA +9 -11
- {zenml_nightly-0.64.0.dev20240809.dist-info → zenml_nightly-0.65.0.dev20240906.dist-info}/RECORD +242 -214
- 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/Commands-JrcZK-3j.js +0 -1
- zenml/zen_server/dashboard/assets/EditSecretDialog-Bd7mFLS4.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-DaGknux4.css +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-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-CgTe7Bme.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-T2BtjwPl.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_nightly-0.64.0.dev20240809.dist-info → zenml_nightly-0.65.0.dev20240906.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.64.0.dev20240809.dist-info → zenml_nightly-0.65.0.dev20240906.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.64.0.dev20240809.dist-info → zenml_nightly-0.65.0.dev20240906.dist-info}/entry_points.txt +0 -0
README.md
CHANGED
@@ -327,7 +327,7 @@ the Apache License Version 2.0.
|
|
327
327
|
<a href="https://github.com/zenml-io/zenml-projects">Projects Showcase</a>
|
328
328
|
<br />
|
329
329
|
<br />
|
330
|
-
🎉 Version 0.
|
330
|
+
🎉 Version 0.65.0 is out. Check out the release notes
|
331
331
|
<a href="https://github.com/zenml-io/zenml/releases">here</a>.
|
332
332
|
<br />
|
333
333
|
🖥️ Download our VS Code Extension <a href="https://marketplace.visualstudio.com/items?itemName=ZenML.zenml-vscode">here</a>.
|
RELEASE_NOTES.md
CHANGED
@@ -1,5 +1,69 @@
|
|
1
1
|
<!-- markdown-link-check-disable -->
|
2
2
|
|
3
|
+
# 0.65.0
|
4
|
+
|
5
|
+
## New Features and Improvements
|
6
|
+
|
7
|
+
### New Quickstart Experience
|
8
|
+
|
9
|
+
This example demonstrates how ZenML streamlines the transition of machine learning workflows from local environments to
|
10
|
+
cloud-scale operations.
|
11
|
+
|
12
|
+
### Run Single Step as a ZenML Pipeline
|
13
|
+
|
14
|
+
If you want to run just an individual step on your stack, you can simply call the step
|
15
|
+
as you would with a normal Python function. ZenML will internally create a pipeline with just your step
|
16
|
+
and run it on the active stack.
|
17
|
+
|
18
|
+
### Other improvements and fixes
|
19
|
+
|
20
|
+
* Updated AzureML Step Operator to work with SDKv2 and use Service Connectors
|
21
|
+
* Added timestamps to log messages
|
22
|
+
* Fixed issue with loading artifacts from artifact store outside of current active artifact store
|
23
|
+
* Support of templated names for Model Version (`{date}` and `{time}` are currently supported placeholders)
|
24
|
+
* `run_with_accelerate` step wrapper can be used as a Python Decorator on top of ZenML steps
|
25
|
+
|
26
|
+
## Breaking changes
|
27
|
+
|
28
|
+
* Workspace scoped POST endpoint `full-stack` was removed and merged with `stacks` POST endpoint
|
29
|
+
|
30
|
+
|
31
|
+
## What's Changed
|
32
|
+
* Remove broken JIRA sync workflow by @strickvl in https://github.com/zenml-io/zenml/pull/2924
|
33
|
+
* Fix Hugging Face Spaces permissions by @strickvl in https://github.com/zenml-io/zenml/pull/2925
|
34
|
+
* Fixes for `run_with_accelerate` by @avishniakov in https://github.com/zenml-io/zenml/pull/2935
|
35
|
+
* Bump azure skypilot to a stable 0.6.1 by @avishniakov in https://github.com/zenml-io/zenml/pull/2933
|
36
|
+
* Add Timestamps to Logs and Update Dashboard URL Message by @htahir1 in https://github.com/zenml-io/zenml/pull/2934
|
37
|
+
* Adding 0.64.0 to migration tests by @bcdurak in https://github.com/zenml-io/zenml/pull/2923
|
38
|
+
* Removed docker build docs + fixed CLI command for zenml pipeline build list by @htahir1 in https://github.com/zenml-io/zenml/pull/2938
|
39
|
+
* Throw an error when running integration installs when uv == False but pip is not installed by @mennoliefstingh in https://github.com/zenml-io/zenml/pull/2930
|
40
|
+
* Update AzureML step operator to SDK v2 and add service connector support by @stefannica in https://github.com/zenml-io/zenml/pull/2927
|
41
|
+
* Improving the AzureML orchestrator docs by @bcdurak in https://github.com/zenml-io/zenml/pull/2940
|
42
|
+
* Update mlflow docs by @htahir1 in https://github.com/zenml-io/zenml/pull/2941
|
43
|
+
* Tell users where they can import `DockerSettings` from by @strickvl in https://github.com/zenml-io/zenml/pull/2947
|
44
|
+
* Fail early when specifying invalid materializers by @schustmi in https://github.com/zenml-io/zenml/pull/2950
|
45
|
+
* Add GitHub Codespaces and VS Code Remote Container support by @htahir1 in https://github.com/zenml-io/zenml/pull/2949
|
46
|
+
* Automatically detect whether code download is necessary by @schustmi in https://github.com/zenml-io/zenml/pull/2946
|
47
|
+
* Enable running a single step on the active stack by @schustmi in https://github.com/zenml-io/zenml/pull/2942
|
48
|
+
* Dynamic (templated) names for model versions by @avishniakov in https://github.com/zenml-io/zenml/pull/2909
|
49
|
+
* Adding an orchestrator URL to the AzureML orchestrator by @bcdurak in https://github.com/zenml-io/zenml/pull/2952
|
50
|
+
* Update python version of latest docker image by @schustmi in https://github.com/zenml-io/zenml/pull/2954
|
51
|
+
* Make `run_with_accelerate` a pythonic decorator by @avishniakov in https://github.com/zenml-io/zenml/pull/2943
|
52
|
+
* Bugfix for artifacts coming from a different artifact store by @bcdurak in https://github.com/zenml-io/zenml/pull/2928
|
53
|
+
* Stack Request cleanup and improvements by @bcdurak in https://github.com/zenml-io/zenml/pull/2906
|
54
|
+
* Silence pydantic protected namespace warnings by @schustmi in https://github.com/zenml-io/zenml/pull/2955
|
55
|
+
* Update key for finished onboarding survey by @schustmi in https://github.com/zenml-io/zenml/pull/2956
|
56
|
+
* Extend notebook source replacement code to other objects apart from ZenML steps by @schustmi in https://github.com/zenml-io/zenml/pull/2919
|
57
|
+
* Fix stack register CLI command by @schustmi in https://github.com/zenml-io/zenml/pull/2958
|
58
|
+
* Lightening studio orchestrator by @safoinme in https://github.com/zenml-io/zenml/pull/2931
|
59
|
+
* Introduce new quickstart with a focus on Stack switching by @AlexejPenner in https://github.com/zenml-io/zenml/pull/2937
|
60
|
+
* Bugfix for the required prompts for the AzureML wizard by @bcdurak in https://github.com/zenml-io/zenml/pull/2959
|
61
|
+
|
62
|
+
## New Contributors
|
63
|
+
* @mennoliefstingh made their first contribution in https://github.com/zenml-io/zenml/pull/2930
|
64
|
+
|
65
|
+
**Full Changelog**: https://github.com/zenml-io/zenml/compare/0.64.0...0.65.0
|
66
|
+
|
3
67
|
# 0.64.0
|
4
68
|
|
5
69
|
## New Features and Improvements
|
@@ -731,7 +795,7 @@ by adding support for `Schedule.start_time` to the HyperAI orchestrator.
|
|
731
795
|
## What's Changed
|
732
796
|
* Really run migration testing by @avishniakov in https://github.com/zenml-io/zenml/pull/2562
|
733
797
|
* Interact with feature gate by @AlexejPenner in https://github.com/zenml-io/zenml/pull/2492
|
734
|
-
* Allow for logs to be unformatted / without
|
798
|
+
* Allow for logs to be unformatted / without colors by @strickvl in https://github.com/zenml-io/zenml/pull/2544
|
735
799
|
* Add VS Code extension to README / docs by @strickvl in https://github.com/zenml-io/zenml/pull/2568
|
736
800
|
* Allow loading of artifacts without needing to activate the artifact store (again) by @avishniakov in https://github.com/zenml-io/zenml/pull/2545
|
737
801
|
* Minor fix by @htahir1 in https://github.com/zenml-io/zenml/pull/2578
|
@@ -1302,7 +1366,7 @@ and some improvements to the Model Control Plane.
|
|
1302
1366
|
## What's Changed
|
1303
1367
|
* Bump aquasecurity/trivy-action from 0.16.0 to 0.16.1 by @dependabot in https://github.com/zenml-io/zenml/pull/2244
|
1304
1368
|
* Bump crate-ci/typos from 1.16.26 to 1.17.0 by @dependabot in https://github.com/zenml-io/zenml/pull/2245
|
1305
|
-
* Add YAML formatting
|
1369
|
+
* Add YAML formatting standardization to formatting & linting scripts by @strickvl in https://github.com/zenml-io/zenml/pull/2224
|
1306
1370
|
* Remove text annotation by @strickvl in https://github.com/zenml-io/zenml/pull/2246
|
1307
1371
|
* Add MariaDB migration testing by @strickvl in https://github.com/zenml-io/zenml/pull/2170
|
1308
1372
|
* Delete artifact links from model version via Client, ModelVersion and API by @avishniakov in https://github.com/zenml-io/zenml/pull/2191
|
@@ -1383,7 +1447,7 @@ which allows you to define custom blocks for the Slack message.
|
|
1383
1447
|
* Bump google-github-actions/auth from 1 to 2 by @dependabot in https://github.com/zenml-io/zenml/pull/2203
|
1384
1448
|
* Bump aws-actions/amazon-ecr-login from 1 to 2 by @dependabot in https://github.com/zenml-io/zenml/pull/2200
|
1385
1449
|
* Bump crate-ci/typos from 1.16.25 to 1.16.26 by @dependabot in https://github.com/zenml-io/zenml/pull/2207
|
1386
|
-
* Fix unreliable test
|
1450
|
+
* Fix unreliable test behavior when using hypothesis by @strickvl in https://github.com/zenml-io/zenml/pull/2208
|
1387
1451
|
* Added more pod spec properties for k8s orchestrator by @htahir1 in https://github.com/zenml-io/zenml/pull/2097
|
1388
1452
|
* Fix API docs environment setup by @strickvl in https://github.com/zenml-io/zenml/pull/2190
|
1389
1453
|
* Use placeholder runs to show pipeline runs in the dashboard without delay by @schustmi in https://github.com/zenml-io/zenml/pull/2048
|
@@ -2602,7 +2666,7 @@ improvements and bug fixes.
|
|
2602
2666
|
* Delete extra word from `bentoml` docs by @strickvl in https://github.com/zenml-io/zenml/pull/1484
|
2603
2667
|
* Remove top-level config from recommended repo structure by @schustmi in https://github.com/zenml-io/zenml/pull/1485
|
2604
2668
|
* Bump `mypy` and `ruff` by @strickvl in https://github.com/zenml-io/zenml/pull/1481
|
2605
|
-
* ZenML Version Downgrade - Silence
|
2669
|
+
* ZenML Version Downgrade - Silence Warning by @safoinme in https://github.com/zenml-io/zenml/pull/1477
|
2606
2670
|
* Update ZenServer recipes to include secret stores by @wjayesh in https://github.com/zenml-io/zenml/pull/1483
|
2607
2671
|
* Fix alembic order by @schustmi in https://github.com/zenml-io/zenml/pull/1487
|
2608
2672
|
* Fix source resolving for classes in notebooks by @schustmi in https://github.com/zenml-io/zenml/pull/1486
|
zenml/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.65.0.dev20240906
|
zenml/artifacts/utils.py
CHANGED
@@ -710,12 +710,19 @@ def _get_artifact_store_from_response_or_from_active_stack(
|
|
710
710
|
"BaseArtifactStore",
|
711
711
|
StackComponent.from_model(artifact_store_model),
|
712
712
|
)
|
713
|
-
except
|
714
|
-
|
715
|
-
"Unable to
|
716
|
-
"
|
717
|
-
"
|
718
|
-
|
713
|
+
except KeyError:
|
714
|
+
raise RuntimeError(
|
715
|
+
"Unable to fetch the artifact store with id: "
|
716
|
+
f"'{artifact.artifact_store_id}'. Check whether the artifact "
|
717
|
+
"store still exists and you have the right permissions to "
|
718
|
+
"access it."
|
719
|
+
)
|
720
|
+
except ImportError:
|
721
|
+
raise RuntimeError(
|
722
|
+
"Unable to load the implementation of the artifact store with"
|
723
|
+
f"id: '{artifact.artifact_store_id}'. Please make sure that "
|
724
|
+
"the environment that you are loading this artifact from "
|
725
|
+
"has the right dependencies."
|
719
726
|
)
|
720
727
|
return Client().active_stack.artifact_store
|
721
728
|
|
zenml/cli/__init__.py
CHANGED
@@ -2186,7 +2186,7 @@ zenml service-connector describe SERVICE_CONNECTOR_NAME_ID_OR_PREFIX
|
|
2186
2186
|
|
2187
2187
|
You can update a registered service connector by using the `update` command.
|
2188
2188
|
Keep in mind that all service connector updates are validated before being
|
2189
|
-
applied. If you want to disable this
|
2189
|
+
applied. If you want to disable this behavior please use the `--no-verify`
|
2190
2190
|
flag.
|
2191
2191
|
|
2192
2192
|
```bash
|
zenml/cli/base.py
CHANGED
@@ -79,19 +79,19 @@ class ZenMLProjectTemplateLocation(BaseModel):
|
|
79
79
|
ZENML_PROJECT_TEMPLATES = dict(
|
80
80
|
e2e_batch=ZenMLProjectTemplateLocation(
|
81
81
|
github_url="zenml-io/template-e2e-batch",
|
82
|
-
github_tag="2024.
|
82
|
+
github_tag="2024.08.29", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
|
83
83
|
),
|
84
84
|
starter=ZenMLProjectTemplateLocation(
|
85
85
|
github_url="zenml-io/template-starter",
|
86
|
-
github_tag="2024.
|
86
|
+
github_tag="2024.08.28", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
|
87
87
|
),
|
88
88
|
nlp=ZenMLProjectTemplateLocation(
|
89
89
|
github_url="zenml-io/template-nlp",
|
90
|
-
github_tag="2024.08.
|
90
|
+
github_tag="2024.08.29", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
|
91
91
|
),
|
92
92
|
llm_finetuning=ZenMLProjectTemplateLocation(
|
93
93
|
github_url="zenml-io/template-llm-finetuning",
|
94
|
-
github_tag="2024.
|
94
|
+
github_tag="2024.08.29", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
|
95
95
|
),
|
96
96
|
)
|
97
97
|
|
zenml/cli/integration.py
CHANGED
@@ -247,32 +247,43 @@ def install(
|
|
247
247
|
Args:
|
248
248
|
integrations: The name of the integration to install the requirements
|
249
249
|
for.
|
250
|
-
ignore_integration: Integrations to ignore explicitly (passed in
|
250
|
+
ignore_integration: Integrations to ignore explicitly (passed in
|
251
|
+
separately).
|
251
252
|
force: Force the installation of the required packages.
|
252
253
|
uv: Use uv for package installation (experimental).
|
253
254
|
"""
|
254
|
-
from zenml.cli.utils import is_uv_installed
|
255
|
+
from zenml.cli.utils import is_pip_installed, is_uv_installed
|
255
256
|
from zenml.integrations.registry import integration_registry
|
256
257
|
|
257
258
|
if uv and not is_uv_installed():
|
258
259
|
error(
|
259
|
-
"UV is not installed but the uv flag was passed in. Please install
|
260
|
+
"UV is not installed but the uv flag was passed in. Please install "
|
261
|
+
"uv or remove the uv flag."
|
262
|
+
)
|
263
|
+
|
264
|
+
if not uv and not is_pip_installed():
|
265
|
+
error(
|
266
|
+
"Pip is not installed. Please install pip or use the uv flag "
|
267
|
+
"(--uv) for package installation."
|
260
268
|
)
|
261
269
|
|
262
270
|
if not integrations:
|
263
271
|
# no integrations specified, use all registered integrations
|
264
|
-
|
272
|
+
integration_set = set(integration_registry.integrations.keys())
|
265
273
|
|
266
274
|
for i in ignore_integration:
|
267
275
|
try:
|
268
|
-
|
276
|
+
integration_set.remove(i)
|
269
277
|
except KeyError:
|
270
278
|
error(
|
271
279
|
f"Integration {i} does not exist. Available integrations: "
|
272
280
|
f"{list(integration_registry.integrations.keys())}"
|
273
281
|
)
|
282
|
+
else:
|
283
|
+
integration_set = set(integrations)
|
284
|
+
|
274
285
|
# TODO: remove once python 3.8 is deprecated
|
275
|
-
if sys.version_info.minor == 8 and "tensorflow" in
|
286
|
+
if sys.version_info.minor == 8 and "tensorflow" in integration_set:
|
276
287
|
warning(
|
277
288
|
"Python 3.8 with TensorFlow is not fully compatible with "
|
278
289
|
"Pydantic 2 requirements. Consider upgrading to a "
|
@@ -280,9 +291,25 @@ def install(
|
|
280
291
|
"Tensorflow integration."
|
281
292
|
)
|
282
293
|
|
294
|
+
if sys.version_info.minor == 12 and "tensorflow" in integration_set:
|
295
|
+
warning(
|
296
|
+
"The TensorFlow integration is not yet compatible with Python "
|
297
|
+
"3.12, thus its installation is skipped. Consider using a "
|
298
|
+
"different version of Python and stay in touch for further updates."
|
299
|
+
)
|
300
|
+
integration_set.remove("tensorflow")
|
301
|
+
|
302
|
+
if sys.version_info.minor == 12 and "deepchecks" in integration_set:
|
303
|
+
warning(
|
304
|
+
"The Deepchecks integration is not yet compatible with Python "
|
305
|
+
"3.12, thus its installation is skipped. Consider using a "
|
306
|
+
"different version of Python and stay in touch for further updates."
|
307
|
+
)
|
308
|
+
integration_set.remove("deepchecks")
|
309
|
+
|
283
310
|
requirements = []
|
284
311
|
integrations_to_install = []
|
285
|
-
for integration_name in
|
312
|
+
for integration_name in integration_set:
|
286
313
|
try:
|
287
314
|
if force or not integration_registry.is_installed(
|
288
315
|
integration_name
|
@@ -346,12 +373,18 @@ def uninstall(
|
|
346
373
|
force: Force the uninstallation of the required packages.
|
347
374
|
uv: Use uv for package uninstallation (experimental).
|
348
375
|
"""
|
349
|
-
from zenml.cli.utils import is_uv_installed
|
376
|
+
from zenml.cli.utils import is_pip_installed, is_uv_installed
|
350
377
|
from zenml.integrations.registry import integration_registry
|
351
378
|
|
352
379
|
if uv and not is_uv_installed():
|
353
380
|
error("Package `uv` is not installed. Please install it and retry.")
|
354
381
|
|
382
|
+
if not uv and not is_pip_installed():
|
383
|
+
error(
|
384
|
+
"Pip is not installed. Please install pip or use the uv flag "
|
385
|
+
"(--uv) for package installation."
|
386
|
+
)
|
387
|
+
|
355
388
|
if not integrations:
|
356
389
|
# no integrations specified, use all registered integrations
|
357
390
|
integrations = tuple(integration_registry.integrations.keys())
|
@@ -423,12 +456,18 @@ def upgrade(
|
|
423
456
|
force: Force the installation of the required packages.
|
424
457
|
uv: Use uv for package installation (experimental).
|
425
458
|
"""
|
426
|
-
from zenml.cli.utils import is_uv_installed
|
459
|
+
from zenml.cli.utils import is_pip_installed, is_uv_installed
|
427
460
|
from zenml.integrations.registry import integration_registry
|
428
461
|
|
429
462
|
if uv and not is_uv_installed():
|
430
463
|
error("Package `uv` is not installed. Please install it and retry.")
|
431
464
|
|
465
|
+
if not uv and not is_pip_installed():
|
466
|
+
error(
|
467
|
+
"Pip is not installed. Please install pip or use the uv flag "
|
468
|
+
"(--uv) for package installation."
|
469
|
+
)
|
470
|
+
|
432
471
|
if not integrations:
|
433
472
|
# no integrations specified, use all registered integrations
|
434
473
|
integrations = set(integration_registry.integrations.keys())
|
zenml/cli/pipeline.py
CHANGED
@@ -516,7 +516,7 @@ def list_pipeline_builds(**kwargs: Any) -> None:
|
|
516
516
|
client = Client()
|
517
517
|
try:
|
518
518
|
with console.status("Listing pipeline builds...\n"):
|
519
|
-
pipeline_builds = client.list_builds(**kwargs)
|
519
|
+
pipeline_builds = client.list_builds(hydrate=True, **kwargs)
|
520
520
|
except KeyError as err:
|
521
521
|
cli_utils.error(str(err))
|
522
522
|
else:
|
@@ -526,7 +526,14 @@ def list_pipeline_builds(**kwargs: Any) -> None:
|
|
526
526
|
|
527
527
|
cli_utils.print_pydantic_models(
|
528
528
|
pipeline_builds,
|
529
|
-
exclude_columns=[
|
529
|
+
exclude_columns=[
|
530
|
+
"created",
|
531
|
+
"updated",
|
532
|
+
"user",
|
533
|
+
"workspace",
|
534
|
+
"images",
|
535
|
+
"stack_checksum",
|
536
|
+
],
|
530
537
|
)
|
531
538
|
|
532
539
|
|
zenml/cli/stack.py
CHANGED
@@ -74,16 +74,16 @@ from zenml.exceptions import (
|
|
74
74
|
)
|
75
75
|
from zenml.io.fileio import rmtree
|
76
76
|
from zenml.logger import get_logger
|
77
|
-
from zenml.models import
|
78
|
-
from zenml.models.v2.core.service_connector import (
|
79
|
-
ServiceConnectorRequest,
|
80
|
-
ServiceConnectorResponse,
|
81
|
-
)
|
82
|
-
from zenml.models.v2.misc.full_stack import (
|
77
|
+
from zenml.models import (
|
83
78
|
ComponentInfo,
|
84
|
-
FullStackRequest,
|
85
79
|
ServiceConnectorInfo,
|
86
80
|
ServiceConnectorResourcesInfo,
|
81
|
+
StackFilter,
|
82
|
+
StackRequest,
|
83
|
+
)
|
84
|
+
from zenml.models.v2.core.service_connector import (
|
85
|
+
ServiceConnectorRequest,
|
86
|
+
ServiceConnectorResponse,
|
87
87
|
)
|
88
88
|
from zenml.service_connectors.service_connector_utils import (
|
89
89
|
get_resources_options_from_resource_model_for_full_stack,
|
@@ -281,10 +281,11 @@ def register_stack(
|
|
281
281
|
artifact_store is None or orchestrator is None
|
282
282
|
):
|
283
283
|
cli_utils.error(
|
284
|
-
"
|
285
|
-
"
|
286
|
-
"
|
287
|
-
"
|
284
|
+
"The only way to register a stack without specifying an "
|
285
|
+
"orchestrator and an artifact store is by using either a provider"
|
286
|
+
"(-p/--provider) or an existing service connector "
|
287
|
+
"(-sc/--connector). Please specify the artifact store and "
|
288
|
+
"the orchestrator or the service connector or cloud type settings."
|
288
289
|
)
|
289
290
|
|
290
291
|
client = Client()
|
@@ -294,12 +295,12 @@ def register_stack(
|
|
294
295
|
cli_utils.error(
|
295
296
|
"You are registering a stack using a service connector, but "
|
296
297
|
"this feature cannot be used with a local ZenML deployment. "
|
297
|
-
"ZenML needs to be accessible from the cloud provider to allow
|
298
|
-
"stack and its components to be registered automatically. "
|
299
|
-
"Please deploy ZenML in a remote environment as described in
|
300
|
-
"documentation: https://docs.zenml.io/getting-started/deploying-zenml "
|
301
|
-
"or use a managed ZenML Pro server instance for quick access
|
302
|
-
"this feature and more: https://www.zenml.io/pro"
|
298
|
+
"ZenML needs to be accessible from the cloud provider to allow "
|
299
|
+
"the stack and its components to be registered automatically. "
|
300
|
+
"Please deploy ZenML in a remote environment as described in "
|
301
|
+
"the documentation: https://docs.zenml.io/getting-started/deploying-zenml "
|
302
|
+
"or use a managed ZenML Pro server instance for quick access "
|
303
|
+
"to this feature and more: https://www.zenml.io/pro"
|
303
304
|
)
|
304
305
|
|
305
306
|
try:
|
@@ -315,8 +316,9 @@ def register_stack(
|
|
315
316
|
pass
|
316
317
|
|
317
318
|
labels: Dict[str, str] = {}
|
318
|
-
components: Dict[StackComponentType, Union[UUID, ComponentInfo]] = {}
|
319
|
-
|
319
|
+
components: Dict[StackComponentType, List[Union[UUID, ComponentInfo]]] = {}
|
320
|
+
|
321
|
+
# Cloud Flow
|
320
322
|
created_objects: Set[str] = set()
|
321
323
|
service_connector: Optional[Union[UUID, ServiceConnectorInfo]] = None
|
322
324
|
if provider is not None and connector is None:
|
@@ -339,6 +341,7 @@ def register_stack(
|
|
339
341
|
)
|
340
342
|
except Exception:
|
341
343
|
pass
|
344
|
+
|
342
345
|
if service_connector_response:
|
343
346
|
use_auto_configure = Confirm.ask(
|
344
347
|
f"[bold]{provider.upper()} cloud service connector[/bold] "
|
@@ -364,8 +367,9 @@ def register_stack(
|
|
364
367
|
for connector in existing_connectors.items
|
365
368
|
],
|
366
369
|
headers=["Name"],
|
367
|
-
prompt_text=f"We found these {provider.upper()} service
|
368
|
-
"Do you want to create a new one or use one
|
370
|
+
prompt_text=f"We found these {provider.upper()} service "
|
371
|
+
"connectors. Do you want to create a new one or use one "
|
372
|
+
"of the existing ones?",
|
369
373
|
default_choice="0",
|
370
374
|
allow_zero_be_a_new_object=True,
|
371
375
|
)
|
@@ -486,7 +490,7 @@ def register_stack(
|
|
486
490
|
component_info = selected_component.id
|
487
491
|
component_name = selected_component.name
|
488
492
|
|
489
|
-
components[component_type] = component_info
|
493
|
+
components[component_type] = [component_info]
|
490
494
|
if component_type == StackComponentType.ARTIFACT_STORE:
|
491
495
|
artifact_store = component_name
|
492
496
|
if component_type == StackComponentType.ORCHESTRATOR:
|
@@ -511,13 +515,15 @@ def register_stack(
|
|
511
515
|
(StackComponentType.CONTAINER_REGISTRY, container_registry),
|
512
516
|
]:
|
513
517
|
if component_name_ and component_type_ not in components:
|
514
|
-
components[component_type_] =
|
515
|
-
|
516
|
-
|
518
|
+
components[component_type_] = [
|
519
|
+
client.get_stack_component(
|
520
|
+
component_type_, component_name_
|
521
|
+
).id
|
522
|
+
]
|
517
523
|
|
518
524
|
try:
|
519
|
-
created_stack = client.zen_store.
|
520
|
-
|
525
|
+
created_stack = client.zen_store.create_stack(
|
526
|
+
stack=StackRequest(
|
521
527
|
user=client.active_user.id,
|
522
528
|
workspace=client.active_workspace.id,
|
523
529
|
name=stack_name,
|
@@ -2471,6 +2477,12 @@ def _get_stack_component_info(
|
|
2471
2477
|
"Skypilot cluster",
|
2472
2478
|
is_skypilot=True,
|
2473
2479
|
)
|
2480
|
+
elif flavor == "azureml":
|
2481
|
+
config["subscription_id"] = Prompt.ask(
|
2482
|
+
"Enter the subscription ID:"
|
2483
|
+
)
|
2484
|
+
config["resource_group"] = Prompt.ask("Enter the resource group:")
|
2485
|
+
config["workspace"] = Prompt.ask("Enter the workspace name:")
|
2474
2486
|
elif flavor == "vertex":
|
2475
2487
|
config["location"] = query_region(
|
2476
2488
|
StackDeploymentProvider.GCP, "Vertex AI job"
|
zenml/cli/utils.py
CHANGED
@@ -1169,6 +1169,19 @@ def is_uv_installed() -> bool:
|
|
1169
1169
|
return False
|
1170
1170
|
|
1171
1171
|
|
1172
|
+
def is_pip_installed() -> bool:
|
1173
|
+
"""Check if pip is installed in the current environment.
|
1174
|
+
|
1175
|
+
Returns:
|
1176
|
+
True if pip is installed, False otherwise.
|
1177
|
+
"""
|
1178
|
+
try:
|
1179
|
+
pkg_resources.get_distribution("pip")
|
1180
|
+
return True
|
1181
|
+
except pkg_resources.DistributionNotFound:
|
1182
|
+
return False
|
1183
|
+
|
1184
|
+
|
1172
1185
|
def pretty_print_secret(
|
1173
1186
|
secret: Dict[str, str],
|
1174
1187
|
hide_secret: bool = True,
|
zenml/client.py
CHANGED
@@ -1522,25 +1522,23 @@ class Client(metaclass=ClientMetaClass):
|
|
1522
1522
|
stack: The stack to validate.
|
1523
1523
|
|
1524
1524
|
Raises:
|
1525
|
-
KeyError: If the stack references missing components.
|
1526
1525
|
ValidationError: If the stack configuration is invalid.
|
1527
1526
|
"""
|
1528
1527
|
local_components: List[str] = []
|
1529
1528
|
remote_components: List[str] = []
|
1530
1529
|
assert stack.components is not None
|
1531
|
-
for component_type,
|
1532
|
-
for
|
1533
|
-
|
1534
|
-
|
1535
|
-
name_id_or_prefix=
|
1530
|
+
for component_type, components in stack.components.items():
|
1531
|
+
for component in components:
|
1532
|
+
if isinstance(component, UUID):
|
1533
|
+
component_response = self.get_stack_component(
|
1534
|
+
name_id_or_prefix=component,
|
1536
1535
|
component_type=component_type,
|
1537
1536
|
)
|
1538
|
-
|
1539
|
-
|
1540
|
-
|
1541
|
-
|
1542
|
-
|
1543
|
-
) from e
|
1537
|
+
component_config = component_response.configuration
|
1538
|
+
component_flavor = component_response.flavor
|
1539
|
+
else:
|
1540
|
+
component_config = component.configuration
|
1541
|
+
component_flavor = component.flavor
|
1544
1542
|
|
1545
1543
|
# Create and validate the configuration
|
1546
1544
|
from zenml.stack.utils import (
|
@@ -1549,9 +1547,9 @@ class Client(metaclass=ClientMetaClass):
|
|
1549
1547
|
)
|
1550
1548
|
|
1551
1549
|
configuration = validate_stack_component_config(
|
1552
|
-
configuration_dict=
|
1553
|
-
flavor_name=
|
1554
|
-
component_type=
|
1550
|
+
configuration_dict=component_config,
|
1551
|
+
flavor_name=component_flavor,
|
1552
|
+
component_type=component_type,
|
1555
1553
|
# Always enforce validation of custom flavors
|
1556
1554
|
validate_custom_flavors=True,
|
1557
1555
|
)
|
@@ -1561,11 +1559,11 @@ class Client(metaclass=ClientMetaClass):
|
|
1561
1559
|
warn_if_config_server_mismatch(configuration)
|
1562
1560
|
if configuration.is_local:
|
1563
1561
|
local_components.append(
|
1564
|
-
f"{
|
1562
|
+
f"{component_type.value}: {component_flavor}"
|
1565
1563
|
)
|
1566
1564
|
elif configuration.is_remote:
|
1567
1565
|
remote_components.append(
|
1568
|
-
f"{
|
1566
|
+
f"{component_type.value}: {component_flavor}"
|
1569
1567
|
)
|
1570
1568
|
|
1571
1569
|
if local_components and remote_components:
|
zenml/config/server_config.py
CHANGED
@@ -381,6 +381,36 @@ class ServerConfiguration(BaseModel):
|
|
381
381
|
# Revert to the default value if the header is enabled
|
382
382
|
del data[k]
|
383
383
|
|
384
|
+
# Handle merging of user-defined secure_headers_csp value with the default value
|
385
|
+
if "secure_headers_csp" in data:
|
386
|
+
user_defined_csp = data["secure_headers_csp"]
|
387
|
+
if isinstance(user_defined_csp, str):
|
388
|
+
# Parse the user-defined CSP string into a dictionary
|
389
|
+
user_defined_csp_dict = {}
|
390
|
+
for directive in user_defined_csp.split(";"):
|
391
|
+
directive = directive.strip()
|
392
|
+
if directive:
|
393
|
+
key, value = directive.split(" ", 1)
|
394
|
+
user_defined_csp_dict[key] = value.strip("'\"")
|
395
|
+
|
396
|
+
# Merge the user-defined CSP dictionary with the default CSP dictionary
|
397
|
+
default_csp_dict = {}
|
398
|
+
for directive in DEFAULT_ZENML_SERVER_SECURE_HEADERS_CSP.split(
|
399
|
+
";"
|
400
|
+
):
|
401
|
+
directive = directive.strip()
|
402
|
+
if directive:
|
403
|
+
key, value = directive.split(" ", 1)
|
404
|
+
default_csp_dict[key] = value.strip("'\"")
|
405
|
+
|
406
|
+
merged_csp_dict = {**default_csp_dict, **user_defined_csp_dict}
|
407
|
+
|
408
|
+
# Convert the merged CSP dictionary back to a string
|
409
|
+
merged_csp_str = "; ".join(
|
410
|
+
f"{key} {value}" for key, value in merged_csp_dict.items()
|
411
|
+
)
|
412
|
+
data["secure_headers_csp"] = merged_csp_str
|
413
|
+
|
384
414
|
return data
|
385
415
|
|
386
416
|
@property
|
zenml/config/source.py
CHANGED
@@ -234,20 +234,16 @@ class NotebookSource(Source):
|
|
234
234
|
"""Source representing an object defined in a notebook.
|
235
235
|
|
236
236
|
Attributes:
|
237
|
-
code_path: Path where the notebook cell code for this source is
|
238
|
-
uploaded.
|
239
237
|
replacement_module: Name of the module from which this source should
|
240
238
|
be loaded in case the code is not running in a notebook.
|
239
|
+
artifact_store_id: ID of the artifact store in which the replacement
|
240
|
+
module code is stored.
|
241
241
|
"""
|
242
242
|
|
243
|
-
code_path: Optional[str] = None
|
244
243
|
replacement_module: Optional[str] = None
|
244
|
+
artifact_store_id: Optional[UUID] = None
|
245
245
|
type: SourceType = SourceType.NOTEBOOK
|
246
246
|
|
247
|
-
# Private attribute that is used to store the code but should not be
|
248
|
-
# serialized
|
249
|
-
_cell_code: Optional[str] = None
|
250
|
-
|
251
247
|
@field_validator("type")
|
252
248
|
@classmethod
|
253
249
|
def _validate_type(cls, value: SourceType) -> SourceType:
|
zenml/constants.py
CHANGED
@@ -162,7 +162,6 @@ ENV_ZENML_DISABLE_CLIENT_SERVER_MISMATCH_WARNING = (
|
|
162
162
|
)
|
163
163
|
ENV_ZENML_DISABLE_WORKSPACE_WARNINGS = "ZENML_DISABLE_WORKSPACE_WARNINGS"
|
164
164
|
ENV_ZENML_SKIP_IMAGE_BUILDER_DEFAULT = "ZENML_SKIP_IMAGE_BUILDER_DEFAULT"
|
165
|
-
ENV_ZENML_REQUIRES_CODE_DOWNLOAD = "ZENML_REQUIRES_CODE_DOWNLOAD"
|
166
165
|
ENV_ZENML_SERVER = "ZENML_SERVER"
|
167
166
|
ENV_ZENML_LOCAL_SERVER = "ZENML_LOCAL_SERVER"
|
168
167
|
ENV_ZENML_ENFORCE_TYPE_ANNOTATIONS = "ZENML_ENFORCE_TYPE_ANNOTATIONS"
|
@@ -173,6 +172,7 @@ ENV_ZENML_PIPELINE_API_TOKEN_EXPIRES_MINUTES = (
|
|
173
172
|
)
|
174
173
|
ENV_ZENML_IGNORE_FAILURE_HOOK = "ZENML_IGNORE_FAILURE_HOOK"
|
175
174
|
ENV_ZENML_CUSTOM_SOURCE_ROOT = "ZENML_CUSTOM_SOURCE_ROOT"
|
175
|
+
ENV_ZENML_WHEEL_PACKAGE_NAME = "ZENML_WHEEL_PACKAGE_NAME"
|
176
176
|
|
177
177
|
# ZenML Server environment variables
|
178
178
|
ENV_ZENML_SERVER_PREFIX = "ZENML_SERVER_"
|
@@ -185,6 +185,9 @@ ENV_ZENML_SERVER_USE_LEGACY_DASHBOARD = (
|
|
185
185
|
f"{ENV_ZENML_SERVER_PREFIX}USE_LEGACY_DASHBOARD"
|
186
186
|
)
|
187
187
|
ENV_ZENML_SERVER_AUTO_ACTIVATE = f"{ENV_ZENML_SERVER_PREFIX}AUTO_ACTIVATE"
|
188
|
+
ENV_ZENML_RUN_SINGLE_STEPS_WITHOUT_STACK = (
|
189
|
+
"ZENML_RUN_SINGLE_STEPS_WITHOUT_STACK"
|
190
|
+
)
|
188
191
|
|
189
192
|
# Logging variables
|
190
193
|
IS_DEBUG_ENV: bool = handle_bool_env_var(ENV_ZENML_DEBUG, default=False)
|
@@ -348,7 +351,6 @@ EMAIL_ANALYTICS = "/email-opt-in"
|
|
348
351
|
EVENT_FLAVORS = "/event-flavors"
|
349
352
|
EVENT_SOURCES = "/event-sources"
|
350
353
|
FLAVORS = "/flavors"
|
351
|
-
FULL_STACK = "/full-stack"
|
352
354
|
GET_OR_CREATE = "/get-or-create"
|
353
355
|
GRAPH = "/graph"
|
354
356
|
HEALTH = "/health"
|
@@ -486,7 +488,7 @@ MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION = (
|
|
486
488
|
)
|
487
489
|
|
488
490
|
|
489
|
-
FINISHED_ONBOARDING_SURVEY_KEY = "
|
491
|
+
FINISHED_ONBOARDING_SURVEY_KEY = "finished_onboarding_survey"
|
490
492
|
|
491
493
|
# Name validation
|
492
494
|
BANNED_NAME_CHARACTERS = "\t\n\r\v\f"
|