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
@@ -16,7 +16,7 @@
|
|
16
16
|
from hashlib import md5
|
17
17
|
from typing import TYPE_CHECKING, Any, List, Optional
|
18
18
|
|
19
|
-
import neptune
|
19
|
+
import neptune
|
20
20
|
|
21
21
|
import zenml
|
22
22
|
from zenml.client import Client
|
@@ -38,7 +38,7 @@ class RunProvider(metaclass=SingletonMetaClass):
|
|
38
38
|
|
39
39
|
def __init__(self) -> None:
|
40
40
|
"""Initialize RunProvider. Called with no arguments."""
|
41
|
-
self._active_run = None
|
41
|
+
self._active_run: Optional["Run"] = None
|
42
42
|
self._project: Optional[str]
|
43
43
|
self._run_name: Optional[str]
|
44
44
|
self._token: Optional[str]
|
@@ -41,7 +41,10 @@ class BasePyTorchMaterializer(BaseMaterializer):
|
|
41
41
|
The loaded PyTorch object.
|
42
42
|
"""
|
43
43
|
with fileio.open(os.path.join(self.uri, self.FILENAME), "rb") as f:
|
44
|
-
|
44
|
+
# NOTE (security): The `torch.load` function uses `pickle` as
|
45
|
+
# the default unpickler, which is NOT secure. This materializer
|
46
|
+
# is intended for use with trusted data sources.
|
47
|
+
return torch.load(f) # nosec
|
45
48
|
|
46
49
|
def save(self, obj: Any) -> None:
|
47
50
|
"""Uses `torch.save` to save a PyTorch object.
|
@@ -50,7 +53,10 @@ class BasePyTorchMaterializer(BaseMaterializer):
|
|
50
53
|
obj: The PyTorch object to save.
|
51
54
|
"""
|
52
55
|
with fileio.open(os.path.join(self.uri, self.FILENAME), "wb") as f:
|
53
|
-
torch.save
|
56
|
+
# NOTE (security): The `torch.save` function uses `cloudpickle` as
|
57
|
+
# the default unpickler, which is NOT secure. This materializer
|
58
|
+
# is intended for use with trusted data sources.
|
59
|
+
torch.save(obj, f, pickle_module=cloudpickle) # nosec
|
54
60
|
|
55
61
|
|
56
62
|
# Alias for the BasePyTorchMaterializer class, allowing users that have already used
|
@@ -61,7 +61,10 @@ class PyTorchModuleMaterializer(BasePyTorchMaterializer):
|
|
61
61
|
with fileio.open(
|
62
62
|
os.path.join(self.uri, CHECKPOINT_FILENAME), "wb"
|
63
63
|
) as f:
|
64
|
-
torch.save
|
64
|
+
# NOTE (security): The `torch.save` function uses `cloudpickle` as
|
65
|
+
# the default unpickler, which is NOT secure. This materializer
|
66
|
+
# is intended for use with trusted data sources.
|
67
|
+
torch.save(model.state_dict(), f, pickle_module=cloudpickle) # nosec
|
65
68
|
|
66
69
|
def extract_metadata(self, model: Module) -> Dict[str, "MetadataType"]:
|
67
70
|
"""Extract metadata from the given `Model` object.
|
@@ -13,10 +13,12 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""Implementation of the S3 Artifact Store."""
|
15
15
|
|
16
|
+
from contextlib import contextmanager
|
16
17
|
from typing import (
|
17
18
|
Any,
|
18
19
|
Callable,
|
19
20
|
Dict,
|
21
|
+
Generator,
|
20
22
|
Iterable,
|
21
23
|
List,
|
22
24
|
Optional,
|
@@ -25,17 +27,23 @@ from typing import (
|
|
25
27
|
cast,
|
26
28
|
)
|
27
29
|
|
30
|
+
import boto3
|
28
31
|
import s3fs
|
32
|
+
from botocore.exceptions import ClientError
|
29
33
|
from fsspec.asyn import FSTimeoutError, sync, sync_wrapper
|
30
34
|
|
31
35
|
from zenml.artifact_stores import BaseArtifactStore
|
32
36
|
from zenml.integrations.s3.flavors.s3_artifact_store_flavor import (
|
33
37
|
S3ArtifactStoreConfig,
|
34
38
|
)
|
39
|
+
from zenml.integrations.s3.utils import split_s3_path
|
35
40
|
from zenml.io.fileio import convert_to_str
|
41
|
+
from zenml.logger import get_logger
|
36
42
|
from zenml.secret.schemas import AWSSecretSchema
|
37
43
|
from zenml.stack.authentication_mixin import AuthenticationMixin
|
38
44
|
|
45
|
+
logger = get_logger(__name__)
|
46
|
+
|
39
47
|
PathType = Union[bytes, str]
|
40
48
|
|
41
49
|
|
@@ -111,6 +119,34 @@ class S3ArtifactStore(BaseArtifactStore, AuthenticationMixin):
|
|
111
119
|
|
112
120
|
_filesystem: Optional[ZenMLS3Filesystem] = None
|
113
121
|
|
122
|
+
is_versioned: bool = False
|
123
|
+
|
124
|
+
def __init__(
|
125
|
+
self,
|
126
|
+
*args: Any,
|
127
|
+
**kwargs: Any,
|
128
|
+
) -> None:
|
129
|
+
"""Initializes the artifact store.
|
130
|
+
|
131
|
+
Args:
|
132
|
+
*args: Additional positional arguments.
|
133
|
+
**kwargs: Additional keyword arguments.
|
134
|
+
"""
|
135
|
+
super().__init__(*args, **kwargs)
|
136
|
+
self._boto3_bucket_holder = None
|
137
|
+
|
138
|
+
# determine bucket versioning status
|
139
|
+
versioning = self._boto3_bucket.Versioning()
|
140
|
+
with self._shield_lack_of_versioning_permissions(
|
141
|
+
"s3:GetBucketVersioning"
|
142
|
+
):
|
143
|
+
if versioning.status == "Enabled":
|
144
|
+
self.is_versioned = True
|
145
|
+
logger.warning(
|
146
|
+
f"The artifact store bucket `{self.config.bucket}` is versioned, "
|
147
|
+
"this may slow down logging process significantly."
|
148
|
+
)
|
149
|
+
|
114
150
|
@property
|
115
151
|
def config(self) -> S3ArtifactStoreConfig:
|
116
152
|
"""Get the config of this artifact store.
|
@@ -422,3 +458,65 @@ class S3ArtifactStore(BaseArtifactStore, AuthenticationMixin):
|
|
422
458
|
# TODO [ENG-153]: Additional params
|
423
459
|
for directory, subdirectories, files in self.filesystem.walk(path=top):
|
424
460
|
yield f"s3://{directory}", subdirectories, files
|
461
|
+
|
462
|
+
def _remove_previous_file_versions(self, path: PathType) -> None:
|
463
|
+
"""Keep only the latest file version in the given path.
|
464
|
+
|
465
|
+
Method is useful for logs stored in versioned file systems
|
466
|
+
like AWS S3.
|
467
|
+
|
468
|
+
Args:
|
469
|
+
path: The path to the file.
|
470
|
+
"""
|
471
|
+
if self.is_versioned:
|
472
|
+
if isinstance(path, bytes):
|
473
|
+
path = path.decode()
|
474
|
+
_, prefix = split_s3_path(path)
|
475
|
+
with self._shield_lack_of_versioning_permissions(
|
476
|
+
"s3:ListBucketVersions"
|
477
|
+
):
|
478
|
+
for version in self._boto3_bucket.object_versions.filter(
|
479
|
+
Prefix=prefix
|
480
|
+
):
|
481
|
+
if not version.is_latest:
|
482
|
+
with self._shield_lack_of_versioning_permissions(
|
483
|
+
"s3:DeleteObjectVersion"
|
484
|
+
):
|
485
|
+
version.delete()
|
486
|
+
|
487
|
+
@property
|
488
|
+
def _boto3_bucket(self) -> Any:
|
489
|
+
"""Get the boto3 bucket object.
|
490
|
+
|
491
|
+
Returns:
|
492
|
+
The boto3 bucket object.
|
493
|
+
"""
|
494
|
+
if self._boto3_bucket_holder and not self.connector_has_expired():
|
495
|
+
return self._boto3_bucket_holder
|
496
|
+
|
497
|
+
key, secret, token, region = self.get_credentials()
|
498
|
+
s3 = boto3.resource(
|
499
|
+
"s3",
|
500
|
+
aws_access_key_id=key,
|
501
|
+
aws_secret_access_key=secret,
|
502
|
+
aws_session_token=token,
|
503
|
+
region_name=region,
|
504
|
+
)
|
505
|
+
self._boto3_bucket_holder = s3.Bucket(self.config.bucket)
|
506
|
+
return self._boto3_bucket_holder
|
507
|
+
|
508
|
+
@contextmanager
|
509
|
+
def _shield_lack_of_versioning_permissions(
|
510
|
+
self, auth_missing: str
|
511
|
+
) -> Generator[Any, None, None]:
|
512
|
+
try:
|
513
|
+
yield
|
514
|
+
except ClientError as e:
|
515
|
+
if "not authorized" in e.args[0] and auth_missing in e.args[0]:
|
516
|
+
logger.warning(
|
517
|
+
"Your AWS Connector is lacking critical Versioning permissions. "
|
518
|
+
f"Please check that `{auth_missing}` is granted."
|
519
|
+
"This is needed to remove previous versions of log files from your "
|
520
|
+
"Artifact Store bucket."
|
521
|
+
)
|
522
|
+
self.is_versioned = False
|
@@ -31,6 +31,7 @@ from zenml.artifact_stores import (
|
|
31
31
|
BaseArtifactStoreFlavor,
|
32
32
|
)
|
33
33
|
from zenml.integrations.s3 import S3_ARTIFACT_STORE_FLAVOR
|
34
|
+
from zenml.integrations.s3.utils import split_s3_path
|
34
35
|
from zenml.models import ServiceConnectorRequirements
|
35
36
|
from zenml.stack.authentication_mixin import AuthenticationConfigMixin
|
36
37
|
from zenml.utils.networking_utils import (
|
@@ -70,6 +71,8 @@ class S3ArtifactStoreConfig(
|
|
70
71
|
config_kwargs: Optional[Dict[str, Any]] = None
|
71
72
|
s3_additional_kwargs: Optional[Dict[str, Any]] = None
|
72
73
|
|
74
|
+
_bucket: Optional[str] = None
|
75
|
+
|
73
76
|
@field_validator("client_kwargs")
|
74
77
|
@classmethod
|
75
78
|
def _validate_client_kwargs(
|
@@ -106,6 +109,17 @@ class S3ArtifactStoreConfig(
|
|
106
109
|
)
|
107
110
|
return value
|
108
111
|
|
112
|
+
@property
|
113
|
+
def bucket(self) -> str:
|
114
|
+
"""The bucket name of the artifact store.
|
115
|
+
|
116
|
+
Returns:
|
117
|
+
The bucket name of the artifact store.
|
118
|
+
"""
|
119
|
+
if self._bucket is None:
|
120
|
+
self._bucket, _ = split_s3_path(self.path)
|
121
|
+
return self._bucket
|
122
|
+
|
109
123
|
|
110
124
|
class S3ArtifactStoreFlavor(BaseArtifactStoreFlavor):
|
111
125
|
"""Flavor of the S3 artifact store."""
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Copyright (c) ZenML GmbH 2022. 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
|
+
"""Utility methods for S3."""
|
15
|
+
|
16
|
+
from typing import Tuple
|
17
|
+
|
18
|
+
|
19
|
+
def split_s3_path(s3_path: str) -> Tuple[str, str]:
|
20
|
+
"""Split S3 URI into bucket and key.
|
21
|
+
|
22
|
+
Args:
|
23
|
+
s3_path: S3 URI (e.g. "s3://bucket/path")
|
24
|
+
|
25
|
+
Returns:
|
26
|
+
A tuple of bucket and key, for "s3://bucket/path/path2"
|
27
|
+
it will return ("bucket","path/path2")
|
28
|
+
|
29
|
+
Raises:
|
30
|
+
ValueError: if the S3 URI is invalid
|
31
|
+
"""
|
32
|
+
if not s3_path.startswith("s3://"):
|
33
|
+
raise ValueError(
|
34
|
+
f"Invalid S3 URI given: {s3_path}. "
|
35
|
+
"It should start with `s3://`."
|
36
|
+
)
|
37
|
+
path_parts = s3_path.replace("s3://", "").split("/")
|
38
|
+
bucket = path_parts.pop(0)
|
39
|
+
key = "/".join(path_parts)
|
40
|
+
return bucket, key
|
@@ -40,15 +40,6 @@ class TensorflowIntegration(Integration):
|
|
40
40
|
|
41
41
|
from zenml.integrations.tensorflow import materializers # noqa
|
42
42
|
|
43
|
-
if sys.version_info.minor == 8:
|
44
|
-
logger.warning(
|
45
|
-
"Python 3.8 with TensorFlow is not fully "
|
46
|
-
"compatible with Pydantic 2 requirements. "
|
47
|
-
"Consider upgrading to a higher Python "
|
48
|
-
"version if you would like to use the "
|
49
|
-
"Tensorflow integration."
|
50
|
-
)
|
51
|
-
|
52
43
|
@classmethod
|
53
44
|
def get_requirements(cls, target_os: Optional[str] = None) -> List[str]:
|
54
45
|
"""Defines platform specific requirements for the integration.
|
zenml/logging/step_logging.py
CHANGED
@@ -28,7 +28,6 @@ from zenml.artifacts.utils import (
|
|
28
28
|
_load_artifact_store,
|
29
29
|
_load_file_from_artifact_store,
|
30
30
|
)
|
31
|
-
from zenml.client import Client
|
32
31
|
from zenml.exceptions import DoesNotExistException
|
33
32
|
from zenml.logger import get_logger
|
34
33
|
from zenml.logging import (
|
@@ -212,6 +211,7 @@ class StepLogsStorage:
|
|
212
211
|
def __init__(
|
213
212
|
self,
|
214
213
|
logs_uri: str,
|
214
|
+
artifact_store: "BaseArtifactStore",
|
215
215
|
max_messages: int = STEP_LOGS_STORAGE_MAX_MESSAGES,
|
216
216
|
time_interval: int = STEP_LOGS_STORAGE_INTERVAL_SECONDS,
|
217
217
|
merge_files_interval: int = STEP_LOGS_STORAGE_MERGE_INTERVAL_SECONDS,
|
@@ -220,6 +220,7 @@ class StepLogsStorage:
|
|
220
220
|
|
221
221
|
Args:
|
222
222
|
logs_uri: the URI of the log file or folder.
|
223
|
+
artifact_store: Artifact Store from the current step context
|
223
224
|
max_messages: the maximum number of messages to save in the buffer.
|
224
225
|
time_interval: the amount of seconds before the buffer gets saved
|
225
226
|
automatically.
|
@@ -237,22 +238,11 @@ class StepLogsStorage:
|
|
237
238
|
self.disabled_buffer: List[str] = []
|
238
239
|
self.last_save_time = time.time()
|
239
240
|
self.disabled = False
|
240
|
-
self.
|
241
|
+
self.artifact_store = artifact_store
|
241
242
|
|
242
243
|
# Immutable filesystems state
|
243
244
|
self.last_merge_time = time.time()
|
244
245
|
|
245
|
-
@property
|
246
|
-
def artifact_store(self) -> "BaseArtifactStore":
|
247
|
-
"""Returns the active artifact store.
|
248
|
-
|
249
|
-
Returns:
|
250
|
-
The active artifact store.
|
251
|
-
"""
|
252
|
-
if self._artifact_store is None:
|
253
|
-
self._artifact_store = Client().active_stack.artifact_store
|
254
|
-
return self._artifact_store
|
255
|
-
|
256
246
|
def write(self, text: str) -> None:
|
257
247
|
"""Main write method.
|
258
248
|
|
@@ -330,6 +320,9 @@ class StepLogsStorage:
|
|
330
320
|
file.write(
|
331
321
|
f"[{timestamp} UTC] {remove_ansi_escape_codes(message)}\n"
|
332
322
|
)
|
323
|
+
self.artifact_store._remove_previous_file_versions(
|
324
|
+
self.logs_uri
|
325
|
+
)
|
333
326
|
|
334
327
|
except (OSError, IOError) as e:
|
335
328
|
# This exception can be raised if there are issues with the
|
@@ -406,13 +399,18 @@ class StepLogsStorage:
|
|
406
399
|
class StepLogsStorageContext:
|
407
400
|
"""Context manager which patches stdout and stderr during step execution."""
|
408
401
|
|
409
|
-
def __init__(
|
402
|
+
def __init__(
|
403
|
+
self, logs_uri: str, artifact_store: "BaseArtifactStore"
|
404
|
+
) -> None:
|
410
405
|
"""Initializes and prepares a storage object.
|
411
406
|
|
412
407
|
Args:
|
413
408
|
logs_uri: the URI of the logs file.
|
409
|
+
artifact_store: Artifact Store from the current step context.
|
414
410
|
"""
|
415
|
-
self.storage = StepLogsStorage(
|
411
|
+
self.storage = StepLogsStorage(
|
412
|
+
logs_uri=logs_uri, artifact_store=artifact_store
|
413
|
+
)
|
416
414
|
|
417
415
|
def __enter__(self) -> "StepLogsStorageContext":
|
418
416
|
"""Enter condition of the context manager.
|
zenml/materializers/__init__.py
CHANGED
@@ -31,6 +31,7 @@ from zenml.materializers.structured_string_materializer import (
|
|
31
31
|
)
|
32
32
|
from zenml.materializers.pydantic_materializer import PydanticMaterializer
|
33
33
|
from zenml.materializers.service_materializer import ServiceMaterializer
|
34
|
+
from zenml.materializers.uuid_materializer import UUIDMaterializer
|
34
35
|
|
35
36
|
__all__ = [
|
36
37
|
"BuiltInContainerMaterializer",
|
@@ -40,4 +41,5 @@ __all__ = [
|
|
40
41
|
"StructuredStringMaterializer",
|
41
42
|
"PydanticMaterializer",
|
42
43
|
"ServiceMaterializer",
|
44
|
+
"UUIDMaterializer",
|
43
45
|
]
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# Copyright (c) ZenML GmbH 2024. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at:
|
6
|
+
#
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
12
|
+
# or implied. See the License for the specific language governing
|
13
|
+
# permissions and limitations under the License.
|
14
|
+
"""Implementation of ZenML's UUID materializer."""
|
15
|
+
|
16
|
+
import os
|
17
|
+
import uuid
|
18
|
+
from typing import Any, ClassVar, Dict, Optional, Tuple, Type
|
19
|
+
|
20
|
+
from zenml.artifact_stores.base_artifact_store import BaseArtifactStore
|
21
|
+
from zenml.enums import ArtifactType
|
22
|
+
from zenml.materializers.base_materializer import BaseMaterializer
|
23
|
+
from zenml.metadata.metadata_types import MetadataType
|
24
|
+
|
25
|
+
DEFAULT_FILENAME = "uuid.txt"
|
26
|
+
|
27
|
+
|
28
|
+
class UUIDMaterializer(BaseMaterializer):
|
29
|
+
"""Materializer to handle UUID objects."""
|
30
|
+
|
31
|
+
ASSOCIATED_TYPES: ClassVar[Tuple[Type[Any], ...]] = (uuid.UUID,)
|
32
|
+
ASSOCIATED_ARTIFACT_TYPE: ClassVar[ArtifactType] = ArtifactType.DATA
|
33
|
+
|
34
|
+
def __init__(
|
35
|
+
self, uri: str, artifact_store: Optional[BaseArtifactStore] = None
|
36
|
+
):
|
37
|
+
"""Define `self.data_path`.
|
38
|
+
|
39
|
+
Args:
|
40
|
+
uri: The URI where the artifact data is stored.
|
41
|
+
artifact_store: The artifact store where the artifact data is stored.
|
42
|
+
"""
|
43
|
+
super().__init__(uri, artifact_store)
|
44
|
+
self.data_path = os.path.join(self.uri, DEFAULT_FILENAME)
|
45
|
+
|
46
|
+
def load(self, _: Type[uuid.UUID]) -> uuid.UUID:
|
47
|
+
"""Read UUID from artifact store.
|
48
|
+
|
49
|
+
Args:
|
50
|
+
_: The type of the data to be loaded.
|
51
|
+
|
52
|
+
Returns:
|
53
|
+
The loaded UUID.
|
54
|
+
"""
|
55
|
+
with self.artifact_store.open(self.data_path, "r") as f:
|
56
|
+
uuid_str = f.read().strip()
|
57
|
+
return uuid.UUID(uuid_str)
|
58
|
+
|
59
|
+
def save(self, data: uuid.UUID) -> None:
|
60
|
+
"""Write UUID to artifact store.
|
61
|
+
|
62
|
+
Args:
|
63
|
+
data: The UUID to be saved.
|
64
|
+
"""
|
65
|
+
with self.artifact_store.open(self.data_path, "w") as f:
|
66
|
+
f.write(str(data))
|
67
|
+
|
68
|
+
def extract_metadata(self, data: uuid.UUID) -> Dict[str, MetadataType]:
|
69
|
+
"""Extract metadata from the UUID.
|
70
|
+
|
71
|
+
Args:
|
72
|
+
data: The UUID to extract metadata from.
|
73
|
+
|
74
|
+
Returns:
|
75
|
+
A dictionary of metadata extracted from the UUID.
|
76
|
+
"""
|
77
|
+
return {
|
78
|
+
"string_representation": str(data),
|
79
|
+
}
|
zenml/metadata/lazy_load.py
CHANGED
@@ -16,7 +16,6 @@
|
|
16
16
|
from typing import TYPE_CHECKING, Optional
|
17
17
|
|
18
18
|
if TYPE_CHECKING:
|
19
|
-
from zenml.model.model import Model
|
20
19
|
from zenml.models import RunMetadataResponse
|
21
20
|
|
22
21
|
|
@@ -30,18 +29,21 @@ class RunMetadataLazyGetter:
|
|
30
29
|
|
31
30
|
def __init__(
|
32
31
|
self,
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
_lazy_load_model_name: str,
|
33
|
+
_lazy_load_model_version: Optional[str],
|
34
|
+
_lazy_load_artifact_name: Optional[str] = None,
|
35
|
+
_lazy_load_artifact_version: Optional[str] = None,
|
36
36
|
):
|
37
37
|
"""Initialize a RunMetadataLazyGetter.
|
38
38
|
|
39
39
|
Args:
|
40
|
-
|
40
|
+
_lazy_load_model_name: The model name.
|
41
|
+
_lazy_load_model_version: The model version.
|
41
42
|
_lazy_load_artifact_name: The artifact name.
|
42
43
|
_lazy_load_artifact_version: The artifact version.
|
43
44
|
"""
|
44
|
-
self.
|
45
|
+
self._lazy_load_model_name = _lazy_load_model_name
|
46
|
+
self._lazy_load_model_version = _lazy_load_model_version
|
45
47
|
self._lazy_load_artifact_name = _lazy_load_artifact_name
|
46
48
|
self._lazy_load_artifact_version = _lazy_load_artifact_version
|
47
49
|
|
@@ -57,7 +59,8 @@ class RunMetadataLazyGetter:
|
|
57
59
|
from zenml.models.v2.core.run_metadata import LazyRunMetadataResponse
|
58
60
|
|
59
61
|
return LazyRunMetadataResponse(
|
60
|
-
|
62
|
+
lazy_load_model_name=self._lazy_load_model_name,
|
63
|
+
lazy_load_model_version=self._lazy_load_model_version,
|
61
64
|
lazy_load_artifact_name=self._lazy_load_artifact_name,
|
62
65
|
lazy_load_artifact_version=self._lazy_load_artifact_version,
|
63
66
|
lazy_load_metadata_name=key,
|
zenml/model/lazy_load.py
CHANGED
@@ -13,11 +13,15 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""Model Version Data Lazy Loader definition."""
|
15
15
|
|
16
|
-
from typing import Optional
|
16
|
+
from typing import TYPE_CHECKING, Any, Dict, Optional
|
17
17
|
|
18
|
-
from pydantic import BaseModel
|
18
|
+
from pydantic import BaseModel, ConfigDict, model_validator
|
19
19
|
|
20
|
-
from zenml.
|
20
|
+
from zenml.pipelines.pipeline_context import get_pipeline_context
|
21
|
+
from zenml.utils.pydantic_utils import before_validator_handler
|
22
|
+
|
23
|
+
if TYPE_CHECKING:
|
24
|
+
from zenml.models import ModelVersionResponse, PipelineRunResponse
|
21
25
|
|
22
26
|
|
23
27
|
class ModelVersionDataLazyLoader(BaseModel):
|
@@ -28,7 +32,84 @@ class ModelVersionDataLazyLoader(BaseModel):
|
|
28
32
|
model version during runtime time of the step.
|
29
33
|
"""
|
30
34
|
|
31
|
-
|
35
|
+
model_name: str
|
36
|
+
model_version: Optional[str] = None
|
32
37
|
artifact_name: Optional[str] = None
|
33
38
|
artifact_version: Optional[str] = None
|
34
39
|
metadata_name: Optional[str] = None
|
40
|
+
|
41
|
+
# TODO: In Pydantic v2, the `model_` is a protected namespaces for all
|
42
|
+
# fields defined under base models. If not handled, this raises a warning.
|
43
|
+
# It is possible to suppress this warning message with the following
|
44
|
+
# configuration, however the ultimate solution is to rename these fields.
|
45
|
+
# Even though they do not cause any problems right now, if we are not
|
46
|
+
# careful we might overwrite some fields protected by pydantic.
|
47
|
+
model_config = ConfigDict(protected_namespaces=())
|
48
|
+
|
49
|
+
@model_validator(mode="before")
|
50
|
+
@classmethod
|
51
|
+
@before_validator_handler
|
52
|
+
def _root_validator(cls, data: Dict[str, Any]) -> Dict[str, Any]:
|
53
|
+
"""Validate all in one.
|
54
|
+
|
55
|
+
Args:
|
56
|
+
data: Dict of values.
|
57
|
+
|
58
|
+
Returns:
|
59
|
+
Dict of validated values.
|
60
|
+
|
61
|
+
Raises:
|
62
|
+
ValueError: If the model version id, but call is not internal.
|
63
|
+
"""
|
64
|
+
if data.get("model_version", None) is None:
|
65
|
+
try:
|
66
|
+
context = get_pipeline_context()
|
67
|
+
if (
|
68
|
+
not context.model
|
69
|
+
or context.model.name != data["model_name"]
|
70
|
+
):
|
71
|
+
raise ValueError(
|
72
|
+
"`version` must be set if you use the `Model` class "
|
73
|
+
"directly in the pipeline body, otherwise, you can use "
|
74
|
+
"`get_pipeline_context().model` to lazy load the current "
|
75
|
+
"Model Version from the pipeline context."
|
76
|
+
)
|
77
|
+
except RuntimeError:
|
78
|
+
pass
|
79
|
+
data["suppress_class_validation_warnings"] = True
|
80
|
+
return data
|
81
|
+
|
82
|
+
def _get_model_response(
|
83
|
+
self, pipeline_run: "PipelineRunResponse"
|
84
|
+
) -> "ModelVersionResponse":
|
85
|
+
# if the version/number is None -> return the model in context
|
86
|
+
if self.model_version is None:
|
87
|
+
if mv := pipeline_run.model_version:
|
88
|
+
if mv.model.name != self.model_name:
|
89
|
+
raise RuntimeError(
|
90
|
+
"Lazy loading of the model failed, since given name "
|
91
|
+
f"`{self.model_name}` does not match the model name "
|
92
|
+
f"in the pipeline context: `{mv.model.name}`."
|
93
|
+
)
|
94
|
+
return mv
|
95
|
+
else:
|
96
|
+
raise RuntimeError(
|
97
|
+
"Lazy loading of the model failed, since the model version "
|
98
|
+
"is not set in the pipeline context."
|
99
|
+
)
|
100
|
+
|
101
|
+
# else return the model version by version
|
102
|
+
else:
|
103
|
+
from zenml.client import Client
|
104
|
+
|
105
|
+
try:
|
106
|
+
return Client().get_model_version(
|
107
|
+
model_name_or_id=self.model_name,
|
108
|
+
model_version_name_or_number_or_id=self.model_version,
|
109
|
+
)
|
110
|
+
except KeyError as e:
|
111
|
+
raise RuntimeError(
|
112
|
+
"Lazy loading of the model version failed: "
|
113
|
+
f"no model `{self.model_name}` with version "
|
114
|
+
f"`{self.model_version}` could be found."
|
115
|
+
) from e
|