zenml-nightly 0.66.0.dev20240930__py3-none-any.whl → 0.68.0.dev20241026__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 +2 -2
- RELEASE_NOTES.md +227 -0
- zenml/VERSION +1 -1
- zenml/__init__.py +4 -9
- zenml/analytics/enums.py +0 -13
- 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 +320 -85
- zenml/cli/__init__.py +1 -39
- zenml/cli/base.py +5 -5
- zenml/cli/integration.py +0 -9
- zenml/cli/pipeline.py +1 -1
- zenml/cli/served_model.py +8 -1
- zenml/cli/server.py +8 -232
- zenml/cli/stack.py +1 -567
- zenml/cli/stack_components.py +0 -578
- zenml/cli/utils.py +0 -65
- zenml/client.py +11 -26
- zenml/client_lazy_loader.py +29 -12
- zenml/config/compiler.py +6 -11
- zenml/config/server_config.py +7 -5
- zenml/config/step_configurations.py +2 -0
- zenml/constants.py +3 -33
- zenml/enums.py +0 -3
- zenml/environment.py +1 -315
- zenml/exceptions.py +1 -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/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/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/materializers/__init__.py +2 -0
- zenml/materializers/uuid_materializer.py +79 -0
- zenml/metadata/lazy_load.py +10 -7
- zenml/model/lazy_load.py +85 -4
- zenml/model/model.py +61 -45
- zenml/model/utils.py +47 -118
- zenml/models/__init__.py +3 -0
- zenml/models/v2/core/artifact_version.py +4 -15
- zenml/models/v2/core/model.py +1 -0
- zenml/models/v2/core/model_version.py +1 -1
- zenml/models/v2/core/pipeline_run.py +1 -2
- zenml/models/v2/core/run_metadata.py +2 -2
- zenml/models/v2/core/step_run.py +15 -12
- zenml/models/v2/misc/server_models.py +0 -4
- zenml/orchestrators/base_orchestrator.py +33 -0
- zenml/orchestrators/input_utils.py +52 -36
- zenml/orchestrators/step_launcher.py +49 -171
- zenml/orchestrators/step_run_utils.py +566 -0
- zenml/orchestrators/step_runner.py +102 -151
- zenml/orchestrators/utils.py +1 -158
- zenml/pipelines/__init__.py +3 -16
- zenml/{new/pipelines → pipelines}/pipeline_context.py +3 -18
- zenml/pipelines/pipeline_decorator.py +29 -60
- zenml/{new/pipelines/pipeline.py → pipelines/pipeline_definition.py} +4 -47
- zenml/stack/stack.py +1 -102
- zenml/stack/stack_component.py +0 -71
- 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 +17 -265
- zenml/steps/entrypoint_function_utils.py +2 -80
- zenml/{new/steps → steps}/step_context.py +12 -63
- zenml/steps/step_decorator.py +42 -89
- zenml/steps/step_invocation.py +2 -55
- zenml/steps/utils.py +3 -23
- zenml/utils/dashboard_utils.py +16 -51
- zenml/utils/typing_utils.py +8 -28
- 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 +0 -9
- zenml/zen_server/deploy/docker/docker_zen_server.py +0 -6
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/deploy/local/local_zen_server.py +0 -6
- zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +1 -1
- zenml/zen_server/routers/artifact_version_endpoints.py +1 -1
- zenml/zen_server/routers/runs_endpoints.py +0 -28
- zenml/zen_server/template_execution/runner_entrypoint_configuration.py +1 -1
- zenml/zen_server/template_execution/utils.py +2 -2
- zenml/zen_server/utils.py +10 -40
- zenml/zen_server/zen_server_api.py +107 -17
- zenml/zen_stores/base_zen_store.py +0 -2
- 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/1d8f30c54477_migrate_to_new_.py +124 -0
- zenml/zen_stores/schemas/pipeline_run_schemas.py +12 -4
- zenml/zen_stores/schemas/step_run_schemas.py +2 -2
- zenml/zen_stores/sql_zen_store.py +29 -5
- {zenml_nightly-0.66.0.dev20240930.dist-info → zenml_nightly-0.68.0.dev20241026.dist-info}/METADATA +4 -8
- {zenml_nightly-0.66.0.dev20240930.dist-info → zenml_nightly-0.68.0.dev20241026.dist-info}/RECORD +273 -452
- {zenml_nightly-0.66.0.dev20240930.dist-info → zenml_nightly-0.68.0.dev20241026.dist-info}/WHEEL +1 -1
- zenml/cli/stack_recipes.py +0 -469
- zenml/lineage_graph/__init__.py +0 -34
- zenml/lineage_graph/edge.py +0 -24
- 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/base_node.py +0 -31
- zenml/lineage_graph/node/step_node.py +0 -41
- zenml/model/model_version.py +0 -38
- zenml/new/__init__.py +0 -13
- zenml/new/pipelines/__init__.py +0 -13
- zenml/new/pipelines/code_archive.py +0 -157
- zenml/new/pipelines/pipeline_decorator.py +0 -118
- zenml/new/steps/__init__.py +0 -13
- 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/__init__.py +0 -14
- 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/pipelines → pipelines}/run_utils.py +0 -0
- /zenml/{new/steps → steps}/decorated_step.py +0 -0
- {zenml_nightly-0.66.0.dev20240930.dist-info → zenml_nightly-0.68.0.dev20241026.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.66.0.dev20240930.dist-info → zenml_nightly-0.68.0.dev20241026.dist-info}/entry_points.txt +0 -0
@@ -13,14 +13,13 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""External artifact definition."""
|
15
15
|
|
16
|
-
from typing import Optional
|
16
|
+
from typing import Any, Dict, Optional
|
17
17
|
from uuid import UUID
|
18
18
|
|
19
19
|
from pydantic import BaseModel, model_validator
|
20
20
|
|
21
21
|
from zenml.logger import get_logger
|
22
|
-
from zenml.
|
23
|
-
from zenml.models.v2.core.artifact_version import ArtifactVersionResponse
|
22
|
+
from zenml.utils.pydantic_utils import before_validator_handler
|
24
23
|
|
25
24
|
logger = get_logger(__name__)
|
26
25
|
|
@@ -32,26 +31,23 @@ class ExternalArtifactConfiguration(BaseModel):
|
|
32
31
|
"""
|
33
32
|
|
34
33
|
id: Optional[UUID] = None
|
35
|
-
name: Optional[str] = None
|
36
|
-
version: Optional[str] = None
|
37
|
-
model: Optional[Model] = None
|
38
34
|
|
39
|
-
@model_validator(mode="
|
40
|
-
|
41
|
-
|
35
|
+
@model_validator(mode="before")
|
36
|
+
@classmethod
|
37
|
+
@before_validator_handler
|
38
|
+
def _remove_old_attributes(cls, data: Dict[str, Any]) -> Dict[str, Any]:
|
39
|
+
"""Remove old attributes that are not used anymore.
|
42
40
|
|
43
|
-
|
44
|
-
|
41
|
+
Args:
|
42
|
+
data: The model data.
|
45
43
|
|
46
44
|
Returns:
|
47
|
-
the
|
45
|
+
Model data without the removed attributes.
|
48
46
|
"""
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
)
|
54
|
-
return self
|
47
|
+
data.pop("name", None)
|
48
|
+
data.pop("version", None)
|
49
|
+
data.pop("model", None)
|
50
|
+
return data
|
55
51
|
|
56
52
|
def get_artifact_version_id(self) -> UUID:
|
57
53
|
"""Get the artifact.
|
@@ -71,29 +67,16 @@ class ExternalArtifactConfiguration(BaseModel):
|
|
71
67
|
|
72
68
|
if self.id:
|
73
69
|
response = client.get_artifact_version(self.id)
|
74
|
-
elif self.name:
|
75
|
-
if self.version:
|
76
|
-
response = client.get_artifact_version(
|
77
|
-
self.name, version=self.version
|
78
|
-
)
|
79
|
-
elif self.model:
|
80
|
-
response_ = self.model.get_artifact(self.name)
|
81
|
-
if not isinstance(response_, ArtifactVersionResponse):
|
82
|
-
raise RuntimeError(
|
83
|
-
f"Failed to pull artifact `{self.name}` from the Model "
|
84
|
-
f"(name=`{self.model.name}`, version="
|
85
|
-
f"`{self.model.version}`). Please validate the "
|
86
|
-
"input and try again."
|
87
|
-
)
|
88
|
-
response = response_
|
89
|
-
else:
|
90
|
-
response = client.get_artifact_version(self.name)
|
91
70
|
else:
|
92
71
|
raise RuntimeError(
|
93
|
-
"
|
94
|
-
"If you created this ExternalArtifact from a value, please "
|
72
|
+
"The ID of the artifact must be provided. "
|
73
|
+
"- If you created this ExternalArtifact from a value, please "
|
95
74
|
"ensure that `upload_by_value` was called before trying to "
|
96
|
-
"fetch the artifact ID
|
75
|
+
"fetch the artifact ID.\n- If you specified an artifact name "
|
76
|
+
"or model name for this external artifact, this functionality "
|
77
|
+
"was removed from the ExternalArtifact class. Use Client "
|
78
|
+
"methods instead to dynamically fetch an artifact via name or "
|
79
|
+
"from a model instead."
|
97
80
|
)
|
98
81
|
|
99
82
|
artifact_store_id = client.active_stack.artifact_store.id
|
@@ -107,6 +90,4 @@ class ExternalArtifactConfiguration(BaseModel):
|
|
107
90
|
"store."
|
108
91
|
)
|
109
92
|
|
110
|
-
self.id = response.id
|
111
|
-
|
112
93
|
return self.id
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# Copyright (c) ZenML GmbH 2023. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at:
|
6
|
+
#
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
12
|
+
# or implied. See the License for the specific language governing
|
13
|
+
# permissions and limitations under the License.
|
14
|
+
"""Only-load materializer for directories."""
|
15
|
+
|
16
|
+
import os
|
17
|
+
import tempfile
|
18
|
+
from pathlib import Path
|
19
|
+
from typing import Any, ClassVar, Tuple, Type
|
20
|
+
|
21
|
+
from zenml.enums import ArtifactType
|
22
|
+
from zenml.io import fileio
|
23
|
+
from zenml.materializers.base_materializer import BaseMaterializer
|
24
|
+
|
25
|
+
|
26
|
+
class PreexistingDataMaterializer(BaseMaterializer):
|
27
|
+
"""Materializer to load directories from the artifact store.
|
28
|
+
|
29
|
+
This materializer is very special, since it do not implement save
|
30
|
+
logic at all. The save of the data to some URI inside the artifact store
|
31
|
+
shall happen outside and is in user's responsibility.
|
32
|
+
|
33
|
+
This materializer solely supports the `register_artifact` function.
|
34
|
+
"""
|
35
|
+
|
36
|
+
ASSOCIATED_TYPES: ClassVar[Tuple[Type[Any], ...]] = (Path,)
|
37
|
+
ASSOCIATED_ARTIFACT_TYPE: ClassVar[ArtifactType] = ArtifactType.DATA
|
38
|
+
SKIP_REGISTRATION: ClassVar[bool] = True
|
39
|
+
|
40
|
+
def load(self, data_type: Type[Any]) -> Any:
|
41
|
+
"""Copy the artifact file(s) to a local temp directory.
|
42
|
+
|
43
|
+
Args:
|
44
|
+
data_type: Unused.
|
45
|
+
|
46
|
+
Returns:
|
47
|
+
Path to the local directory that contains the artifact files.
|
48
|
+
"""
|
49
|
+
directory = tempfile.mkdtemp(prefix="zenml-artifact")
|
50
|
+
if fileio.isdir(self.uri):
|
51
|
+
self._copy_directory(src=self.uri, dst=directory)
|
52
|
+
return Path(directory)
|
53
|
+
else:
|
54
|
+
dst = os.path.join(directory, os.path.split(self.uri)[-1])
|
55
|
+
fileio.copy(src=self.uri, dst=dst)
|
56
|
+
return Path(dst)
|
57
|
+
|
58
|
+
def save(self, data: Any) -> None:
|
59
|
+
"""Store the directory in the artifact store.
|
60
|
+
|
61
|
+
Args:
|
62
|
+
data: Path to a local directory to store.
|
63
|
+
|
64
|
+
Raises:
|
65
|
+
NotImplementedError: Always
|
66
|
+
"""
|
67
|
+
raise NotImplementedError(
|
68
|
+
"`PreexistingDataMaterializer` can only be used in the "
|
69
|
+
"context of `register_artifact` function, "
|
70
|
+
"which expects the data to be already properly saved in "
|
71
|
+
"the Artifact Store, thus `save` logic makes no sense here."
|
72
|
+
)
|
73
|
+
|
74
|
+
@staticmethod
|
75
|
+
def _copy_directory(src: str, dst: str) -> None:
|
76
|
+
"""Recursively copy a directory.
|
77
|
+
|
78
|
+
Args:
|
79
|
+
src: The directory to copy.
|
80
|
+
dst: Where to copy the directory to.
|
81
|
+
"""
|
82
|
+
for src_dir, _, files in fileio.walk(src):
|
83
|
+
src_dir_ = str(src_dir)
|
84
|
+
dst_dir = str(os.path.join(dst, os.path.relpath(src_dir_, src)))
|
85
|
+
fileio.makedirs(dst_dir)
|
86
|
+
|
87
|
+
for file in files:
|
88
|
+
file_ = str(file)
|
89
|
+
src_file = os.path.join(src_dir_, file_)
|
90
|
+
dst_file = os.path.join(dst_dir, file_)
|
91
|
+
fileio.copy(src_file, dst_file)
|
zenml/artifacts/utils.py
CHANGED
@@ -19,15 +19,30 @@ import tempfile
|
|
19
19
|
import time
|
20
20
|
import zipfile
|
21
21
|
from pathlib import Path
|
22
|
-
from typing import
|
22
|
+
from typing import (
|
23
|
+
TYPE_CHECKING,
|
24
|
+
Any,
|
25
|
+
Callable,
|
26
|
+
Dict,
|
27
|
+
List,
|
28
|
+
Optional,
|
29
|
+
Type,
|
30
|
+
Union,
|
31
|
+
cast,
|
32
|
+
)
|
23
33
|
from uuid import UUID, uuid4
|
24
34
|
|
35
|
+
from zenml.artifacts.artifact_config import ArtifactConfig
|
36
|
+
from zenml.artifacts.load_directory_materializer import (
|
37
|
+
PreexistingDataMaterializer,
|
38
|
+
)
|
25
39
|
from zenml.client import Client
|
26
40
|
from zenml.constants import (
|
27
41
|
MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION,
|
28
42
|
MODEL_METADATA_YAML_FILE_NAME,
|
29
43
|
)
|
30
44
|
from zenml.enums import (
|
45
|
+
ArtifactType,
|
31
46
|
ExecutionStatus,
|
32
47
|
MetadataResourceTypes,
|
33
48
|
StackComponentType,
|
@@ -50,8 +65,9 @@ from zenml.models import (
|
|
50
65
|
StepRunResponse,
|
51
66
|
StepRunUpdate,
|
52
67
|
)
|
53
|
-
from zenml.
|
68
|
+
from zenml.models.v2.core.artifact import ArtifactResponse
|
54
69
|
from zenml.stack import StackComponent
|
70
|
+
from zenml.steps.step_context import get_step_context
|
55
71
|
from zenml.utils import source_utils
|
56
72
|
from zenml.utils.yaml_utils import read_yaml, write_yaml
|
57
73
|
|
@@ -111,10 +127,6 @@ def save_artifact(
|
|
111
127
|
|
112
128
|
Returns:
|
113
129
|
The saved artifact response.
|
114
|
-
|
115
|
-
Raises:
|
116
|
-
RuntimeError: If artifact URI already exists.
|
117
|
-
EntityExistsError: If artifact version already exists.
|
118
130
|
"""
|
119
131
|
from zenml.materializers.materializer_registry import (
|
120
132
|
materializer_registry,
|
@@ -123,24 +135,11 @@ def save_artifact(
|
|
123
135
|
|
124
136
|
client = Client()
|
125
137
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
name_id_or_prefix=artifact.id, has_custom_name=has_custom_name
|
132
|
-
)
|
133
|
-
except IndexError:
|
134
|
-
try:
|
135
|
-
artifact = client.zen_store.create_artifact(
|
136
|
-
ArtifactRequest(
|
137
|
-
name=name,
|
138
|
-
has_custom_name=has_custom_name,
|
139
|
-
tags=tags,
|
140
|
-
)
|
141
|
-
)
|
142
|
-
except EntityExistsError:
|
143
|
-
artifact = client.list_artifacts(name=name)[0]
|
138
|
+
artifact = _get_or_create_artifact(
|
139
|
+
name=name,
|
140
|
+
has_custom_name=has_custom_name,
|
141
|
+
tags=tags,
|
142
|
+
)
|
144
143
|
|
145
144
|
# Get the current artifact store
|
146
145
|
artifact_store = client.active_stack.artifact_store
|
@@ -151,16 +150,14 @@ def save_artifact(
|
|
151
150
|
if not uri.startswith(artifact_store.path):
|
152
151
|
uri = os.path.join(artifact_store.path, uri)
|
153
152
|
|
154
|
-
if manual_save
|
153
|
+
if manual_save:
|
155
154
|
# This check is only necessary for manual saves as we already check
|
156
155
|
# it when creating the directory for step output artifacts
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
f"{other_artifact.name} (version {other_artifact.version})."
|
163
|
-
)
|
156
|
+
_check_if_artifact_with_given_uri_already_registered(
|
157
|
+
artifact_store=artifact_store,
|
158
|
+
uri=uri,
|
159
|
+
name=name,
|
160
|
+
)
|
164
161
|
artifact_store.makedirs(uri)
|
165
162
|
|
166
163
|
# Find and initialize the right materializer class
|
@@ -211,7 +208,9 @@ def save_artifact(
|
|
211
208
|
)
|
212
209
|
|
213
210
|
# Create the artifact version
|
214
|
-
def _create_version(
|
211
|
+
def _create_version(
|
212
|
+
version: Union[int, str],
|
213
|
+
) -> Optional[ArtifactVersionResponse]:
|
215
214
|
artifact_version = ArtifactVersionRequest(
|
216
215
|
artifact_id=artifact.id,
|
217
216
|
version=version,
|
@@ -233,37 +232,12 @@ def save_artifact(
|
|
233
232
|
except EntityExistsError:
|
234
233
|
return None
|
235
234
|
|
236
|
-
response =
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
if response := _create_version():
|
243
|
-
break
|
244
|
-
# smoothed exponential back-off, it will go as 0.2, 0.3,
|
245
|
-
# 0.45, 0.68, 1.01, 1.52, 2.28, 3.42, 5.13, 7.69, ...
|
246
|
-
sleep = 0.2 * 1.5**i
|
247
|
-
logger.debug(
|
248
|
-
f"Failed to create artifact version `{version}` for "
|
249
|
-
f"artifact `{name}`. Retrying in {sleep}..."
|
250
|
-
)
|
251
|
-
time.sleep(sleep)
|
252
|
-
retries_made += 1
|
253
|
-
if not response:
|
254
|
-
raise EntityExistsError(
|
255
|
-
f"Failed to create new artifact version for artifact "
|
256
|
-
f"`{name}`. Retried {retries_made} times. "
|
257
|
-
"This could be driven by exceptionally high concurrency of "
|
258
|
-
"pipeline runs. Please, reach out to us on ZenML Slack for support."
|
259
|
-
)
|
260
|
-
else:
|
261
|
-
response = _create_version()
|
262
|
-
if not response:
|
263
|
-
raise EntityExistsError(
|
264
|
-
f"Failed to create artifact version `{version}` for artifact "
|
265
|
-
f"`{name}`. Given version already exists."
|
266
|
-
)
|
235
|
+
response = _create_artifact_version_with_retries(
|
236
|
+
name=name,
|
237
|
+
version=version,
|
238
|
+
create_version_fn=_create_version,
|
239
|
+
)
|
240
|
+
|
267
241
|
if artifact_metadata:
|
268
242
|
client.create_run_metadata(
|
269
243
|
metadata=artifact_metadata,
|
@@ -272,29 +246,112 @@ def save_artifact(
|
|
272
246
|
)
|
273
247
|
|
274
248
|
if manual_save:
|
249
|
+
_link_artifact_version_to_the_step_and_model(
|
250
|
+
artifact_version=response,
|
251
|
+
is_model_artifact=is_model_artifact,
|
252
|
+
is_deployment_artifact=is_deployment_artifact,
|
253
|
+
)
|
254
|
+
|
255
|
+
return response
|
256
|
+
|
257
|
+
|
258
|
+
def register_artifact(
|
259
|
+
folder_or_file_uri: str,
|
260
|
+
name: str,
|
261
|
+
version: Optional[Union[int, str]] = None,
|
262
|
+
tags: Optional[List[str]] = None,
|
263
|
+
has_custom_name: bool = True,
|
264
|
+
is_model_artifact: bool = False,
|
265
|
+
is_deployment_artifact: bool = False,
|
266
|
+
artifact_metadata: Dict[str, "MetadataType"] = {},
|
267
|
+
) -> "ArtifactVersionResponse":
|
268
|
+
"""Register existing data stored in the artifact store as a ZenML Artifact.
|
269
|
+
|
270
|
+
Args:
|
271
|
+
folder_or_file_uri: The full URI within the artifact store to the folder
|
272
|
+
or to the file.
|
273
|
+
name: The name of the artifact.
|
274
|
+
version: The version of the artifact. If not provided, a new
|
275
|
+
auto-incremented version will be used.
|
276
|
+
tags: Tags to associate with the artifact.
|
277
|
+
has_custom_name: If the artifact name is custom and should be listed in
|
278
|
+
the dashboard "Artifacts" tab.
|
279
|
+
is_model_artifact: If the artifact is a model artifact.
|
280
|
+
is_deployment_artifact: If the artifact is a deployment artifact.
|
281
|
+
artifact_metadata: Metadata dictionary to attach to the artifact version.
|
282
|
+
|
283
|
+
Returns:
|
284
|
+
The saved artifact response.
|
285
|
+
|
286
|
+
Raises:
|
287
|
+
FileNotFoundError: If the folder URI is outside of the artifact store
|
288
|
+
bounds.
|
289
|
+
"""
|
290
|
+
client = Client()
|
291
|
+
|
292
|
+
# Get the current artifact store
|
293
|
+
artifact_store = client.active_stack.artifact_store
|
294
|
+
|
295
|
+
if not folder_or_file_uri.startswith(artifact_store.path):
|
296
|
+
raise FileNotFoundError(
|
297
|
+
f"Folder `{folder_or_file_uri}` is outside of "
|
298
|
+
f"artifact store bounds `{artifact_store.path}`"
|
299
|
+
)
|
300
|
+
|
301
|
+
_check_if_artifact_with_given_uri_already_registered(
|
302
|
+
artifact_store=artifact_store,
|
303
|
+
uri=folder_or_file_uri,
|
304
|
+
name=name,
|
305
|
+
)
|
306
|
+
|
307
|
+
artifact = _get_or_create_artifact(
|
308
|
+
name=name,
|
309
|
+
has_custom_name=has_custom_name,
|
310
|
+
tags=tags,
|
311
|
+
)
|
312
|
+
|
313
|
+
# Create the artifact version
|
314
|
+
def _create_version(
|
315
|
+
version: Union[int, str],
|
316
|
+
) -> Optional[ArtifactVersionResponse]:
|
317
|
+
artifact_version = ArtifactVersionRequest(
|
318
|
+
artifact_id=artifact.id,
|
319
|
+
version=version,
|
320
|
+
tags=tags,
|
321
|
+
type=ArtifactType.DATA,
|
322
|
+
uri=folder_or_file_uri,
|
323
|
+
materializer=source_utils.resolve(PreexistingDataMaterializer),
|
324
|
+
data_type=source_utils.resolve(Path),
|
325
|
+
user=Client().active_user.id,
|
326
|
+
workspace=Client().active_workspace.id,
|
327
|
+
artifact_store_id=artifact_store.id,
|
328
|
+
has_custom_name=has_custom_name,
|
329
|
+
)
|
275
330
|
try:
|
276
|
-
|
277
|
-
|
278
|
-
step_run = step_context.step_run
|
279
|
-
client.zen_store.update_run_step(
|
280
|
-
step_run_id=step_run.id,
|
281
|
-
step_run_update=StepRunUpdate(
|
282
|
-
saved_artifact_versions={name: response.id}
|
283
|
-
),
|
331
|
+
return client.zen_store.create_artifact_version(
|
332
|
+
artifact_version=artifact_version
|
284
333
|
)
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
334
|
+
except EntityExistsError:
|
335
|
+
return None
|
336
|
+
|
337
|
+
response = _create_artifact_version_with_retries(
|
338
|
+
name=name,
|
339
|
+
version=version,
|
340
|
+
create_version_fn=_create_version,
|
341
|
+
)
|
342
|
+
|
343
|
+
if artifact_metadata:
|
344
|
+
client.create_run_metadata(
|
345
|
+
metadata=artifact_metadata,
|
346
|
+
resource_id=response.id,
|
347
|
+
resource_type=MetadataResourceTypes.ARTIFACT_VERSION,
|
348
|
+
)
|
349
|
+
|
350
|
+
_link_artifact_version_to_the_step_and_model(
|
351
|
+
artifact_version=response,
|
352
|
+
is_model_artifact=is_model_artifact,
|
353
|
+
is_deployment_artifact=is_deployment_artifact,
|
354
|
+
)
|
298
355
|
|
299
356
|
return response
|
300
357
|
|
@@ -577,6 +634,184 @@ def get_artifacts_versions_of_pipeline_run(
|
|
577
634
|
# -------------------------
|
578
635
|
|
579
636
|
|
637
|
+
def _check_if_artifact_with_given_uri_already_registered(
|
638
|
+
artifact_store: "BaseArtifactStore",
|
639
|
+
uri: str,
|
640
|
+
name: str,
|
641
|
+
) -> None:
|
642
|
+
"""Check if the given artifact store already contains an artifact with the given URI.
|
643
|
+
|
644
|
+
Args:
|
645
|
+
artifact_store: The artifact store to check.
|
646
|
+
uri: The uri of the artifact.
|
647
|
+
name: The name of the artifact.
|
648
|
+
|
649
|
+
Raises:
|
650
|
+
RuntimeError: If the artifact store already contains an artifact with
|
651
|
+
the given URI.
|
652
|
+
"""
|
653
|
+
if artifact_store.exists(uri):
|
654
|
+
# This check is only necessary for manual saves as we already check
|
655
|
+
# it when creating the directory for step output artifacts
|
656
|
+
other_artifacts = Client().list_artifact_versions(uri=uri, size=1)
|
657
|
+
if other_artifacts and (other_artifact := other_artifacts[0]):
|
658
|
+
raise RuntimeError(
|
659
|
+
f"Cannot create new artifact {name} version with URI "
|
660
|
+
f"{uri} because the URI is already used by artifact "
|
661
|
+
f"{other_artifact.name} (version {other_artifact.version})."
|
662
|
+
)
|
663
|
+
|
664
|
+
|
665
|
+
def _get_or_create_artifact(
|
666
|
+
name: str, has_custom_name: bool, tags: Optional[List[str]] = None
|
667
|
+
) -> ArtifactResponse:
|
668
|
+
"""Get or create an artifact with the given name.
|
669
|
+
|
670
|
+
Args:
|
671
|
+
name: The name of the artifact.
|
672
|
+
has_custom_name: If the artifact name is custom and should be listed in
|
673
|
+
the dashboard "Artifacts" tab.
|
674
|
+
tags: Tags to associate with the artifact.
|
675
|
+
|
676
|
+
Returns:
|
677
|
+
The artifact.
|
678
|
+
"""
|
679
|
+
client = Client()
|
680
|
+
# Get or create the artifact
|
681
|
+
try:
|
682
|
+
artifact = client.list_artifacts(name=name)[0]
|
683
|
+
if artifact.has_custom_name != has_custom_name:
|
684
|
+
client.update_artifact(
|
685
|
+
name_id_or_prefix=artifact.id, has_custom_name=has_custom_name
|
686
|
+
)
|
687
|
+
except IndexError:
|
688
|
+
try:
|
689
|
+
artifact = client.zen_store.create_artifact(
|
690
|
+
ArtifactRequest(
|
691
|
+
name=name,
|
692
|
+
has_custom_name=has_custom_name,
|
693
|
+
tags=tags,
|
694
|
+
)
|
695
|
+
)
|
696
|
+
except EntityExistsError:
|
697
|
+
artifact = client.list_artifacts(name=name)[0]
|
698
|
+
return artifact
|
699
|
+
|
700
|
+
|
701
|
+
def _create_artifact_version_with_retries(
|
702
|
+
name: str,
|
703
|
+
version: Optional[Union[int, str]],
|
704
|
+
create_version_fn: Callable[
|
705
|
+
[
|
706
|
+
Union[int, str],
|
707
|
+
],
|
708
|
+
Optional[ArtifactVersionResponse],
|
709
|
+
],
|
710
|
+
) -> ArtifactVersionResponse:
|
711
|
+
"""Create an artifact version with some retries.
|
712
|
+
|
713
|
+
This function will retry the creation of an artifact version up to
|
714
|
+
MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION times if it fails.
|
715
|
+
It can fail in high-concurrency environments.
|
716
|
+
|
717
|
+
Args:
|
718
|
+
name: The name of the artifact.
|
719
|
+
version: The version of the artifact. If not provided, a new
|
720
|
+
auto-incremented version will be used.
|
721
|
+
create_version_fn: The function to create the artifact version.
|
722
|
+
|
723
|
+
Returns:
|
724
|
+
The created artifact version.
|
725
|
+
|
726
|
+
Raises:
|
727
|
+
EntityExistsError: If the artifact version could not be created
|
728
|
+
after MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION attempts due
|
729
|
+
to collisions.
|
730
|
+
|
731
|
+
"""
|
732
|
+
response = None
|
733
|
+
if not version:
|
734
|
+
retries_made = 0
|
735
|
+
for i in range(MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION):
|
736
|
+
# Get new artifact version
|
737
|
+
version = _get_new_artifact_version(name)
|
738
|
+
if response := create_version_fn(version):
|
739
|
+
break
|
740
|
+
# smoothed exponential back-off, it will go as 0.2, 0.3,
|
741
|
+
# 0.45, 0.68, 1.01, 1.52, 2.28, 3.42, 5.13, 7.69, ...
|
742
|
+
sleep = 0.2 * 1.5**i
|
743
|
+
logger.debug(
|
744
|
+
f"Failed to create artifact version `{version}` for "
|
745
|
+
f"artifact `{name}`. Retrying in {sleep}..."
|
746
|
+
)
|
747
|
+
time.sleep(sleep)
|
748
|
+
retries_made += 1
|
749
|
+
if not response:
|
750
|
+
raise EntityExistsError(
|
751
|
+
f"Failed to create new artifact version for artifact "
|
752
|
+
f"`{name}`. Retried {retries_made} times. "
|
753
|
+
"This could be driven by exceptionally high concurrency of "
|
754
|
+
"pipeline runs. Please, reach out to us on ZenML Slack for support."
|
755
|
+
)
|
756
|
+
else:
|
757
|
+
response = create_version_fn(version)
|
758
|
+
if not response:
|
759
|
+
raise EntityExistsError(
|
760
|
+
f"Failed to create artifact version `{version}` for artifact "
|
761
|
+
f"`{name}`. Given version already exists."
|
762
|
+
)
|
763
|
+
return response
|
764
|
+
|
765
|
+
|
766
|
+
def _link_artifact_version_to_the_step_and_model(
|
767
|
+
artifact_version: ArtifactVersionResponse,
|
768
|
+
is_model_artifact: bool,
|
769
|
+
is_deployment_artifact: bool,
|
770
|
+
) -> None:
|
771
|
+
"""Link an artifact version to the step and its' context model.
|
772
|
+
|
773
|
+
This function links the AV to:
|
774
|
+
- the step run
|
775
|
+
- the MV from the step context
|
776
|
+
|
777
|
+
Args:
|
778
|
+
artifact_version: The artifact version to link.
|
779
|
+
is_model_artifact: Whether the artifact is a model artifact.
|
780
|
+
is_deployment_artifact: Whether the artifact is a deployment artifact.
|
781
|
+
"""
|
782
|
+
client = Client()
|
783
|
+
try:
|
784
|
+
error_message = "step run"
|
785
|
+
step_context = get_step_context()
|
786
|
+
step_run = step_context.step_run
|
787
|
+
client.zen_store.update_run_step(
|
788
|
+
step_run_id=step_run.id,
|
789
|
+
step_run_update=StepRunUpdate(
|
790
|
+
saved_artifact_versions={
|
791
|
+
artifact_version.artifact.name: artifact_version.id
|
792
|
+
}
|
793
|
+
),
|
794
|
+
)
|
795
|
+
error_message = "model"
|
796
|
+
|
797
|
+
if step_context.model_version:
|
798
|
+
from zenml.model.utils import (
|
799
|
+
link_artifact_version_to_model_version,
|
800
|
+
)
|
801
|
+
|
802
|
+
artifact_config = ArtifactConfig(
|
803
|
+
is_model_artifact=is_model_artifact,
|
804
|
+
is_deployment_artifact=is_deployment_artifact,
|
805
|
+
)
|
806
|
+
link_artifact_version_to_model_version(
|
807
|
+
artifact_version=artifact_version,
|
808
|
+
model_version=step_context.model_version,
|
809
|
+
artifact_config=artifact_config,
|
810
|
+
)
|
811
|
+
except (RuntimeError, StepContextError):
|
812
|
+
logger.debug(f"Unable to link saved artifact to {error_message}.")
|
813
|
+
|
814
|
+
|
580
815
|
def _load_artifact_from_uri(
|
581
816
|
materializer: Union["Source", str],
|
582
817
|
data_type: Union["Source", str],
|