zenml-nightly 0.68.1.dev20241103__py3-none-any.whl → 0.70.0.dev20241115__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +1 -1
- RELEASE_NOTES.md +77 -0
- zenml/VERSION +1 -1
- zenml/__init__.py +2 -0
- zenml/artifacts/external_artifact.py +2 -1
- zenml/artifacts/{load_directory_materializer.py → preexisting_data_materializer.py} +8 -9
- zenml/artifacts/utils.py +139 -80
- zenml/cli/base.py +4 -4
- zenml/cli/model.py +1 -6
- zenml/cli/stack.py +1 -0
- zenml/client.py +29 -74
- zenml/config/server_config.py +17 -1
- zenml/constants.py +2 -7
- zenml/data_validators/base_data_validator.py +2 -2
- zenml/enums.py +20 -4
- zenml/exceptions.py +4 -0
- zenml/integrations/__init__.py +3 -1
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +20 -18
- zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
- zenml/integrations/bentoml/materializers/bentoml_bento_materializer.py +19 -31
- zenml/integrations/constants.py +1 -0
- zenml/integrations/deepchecks/data_validators/deepchecks_data_validator.py +1 -1
- zenml/integrations/evidently/__init__.py +1 -1
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +1 -1
- zenml/integrations/huggingface/materializers/huggingface_datasets_materializer.py +8 -12
- zenml/integrations/huggingface/materializers/huggingface_pt_model_materializer.py +17 -18
- zenml/integrations/huggingface/materializers/huggingface_t5_materializer.py +2 -5
- zenml/integrations/huggingface/materializers/huggingface_tf_model_materializer.py +17 -18
- zenml/integrations/huggingface/materializers/huggingface_tokenizer_materializer.py +2 -3
- zenml/integrations/langchain/__init__.py +2 -1
- zenml/integrations/langchain/materializers/openai_embedding_materializer.py +28 -2
- zenml/integrations/lightgbm/materializers/lightgbm_booster_materializer.py +8 -15
- zenml/integrations/lightgbm/materializers/lightgbm_dataset_materializer.py +11 -16
- zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +29 -9
- zenml/integrations/openai/__init__.py +1 -1
- zenml/integrations/openai/hooks/open_ai_failure_hook.py +39 -14
- zenml/integrations/pillow/materializers/pillow_image_materializer.py +17 -20
- zenml/integrations/polars/materializers/dataframe_materializer.py +26 -39
- zenml/integrations/pycaret/materializers/model_materializer.py +7 -22
- zenml/integrations/tensorboard/visualizers/tensorboard_visualizer.py +60 -54
- zenml/integrations/tensorflow/materializers/keras_materializer.py +11 -22
- zenml/integrations/tensorflow/materializers/tf_dataset_materializer.py +8 -15
- zenml/integrations/vllm/__init__.py +50 -0
- zenml/integrations/vllm/flavors/__init__.py +21 -0
- zenml/integrations/vllm/flavors/vllm_model_deployer_flavor.py +91 -0
- zenml/integrations/vllm/model_deployers/__init__.py +19 -0
- zenml/integrations/vllm/model_deployers/vllm_model_deployer.py +263 -0
- zenml/integrations/vllm/services/__init__.py +19 -0
- zenml/integrations/vllm/services/vllm_deployment.py +206 -0
- zenml/integrations/whylogs/materializers/whylogs_materializer.py +11 -18
- zenml/integrations/xgboost/materializers/xgboost_booster_materializer.py +11 -22
- zenml/integrations/xgboost/materializers/xgboost_dmatrix_materializer.py +10 -19
- zenml/materializers/base_materializer.py +68 -1
- zenml/metadata/lazy_load.py +20 -7
- zenml/model/model.py +17 -64
- zenml/model/utils.py +5 -0
- zenml/models/__init__.py +0 -12
- zenml/models/v2/base/filter.py +121 -8
- zenml/models/v2/core/artifact_version.py +42 -7
- zenml/models/v2/core/model_version.py +26 -5
- zenml/models/v2/core/pipeline_run.py +25 -6
- zenml/models/v2/core/run_metadata.py +2 -217
- zenml/models/v2/core/step_run.py +62 -24
- zenml/orchestrators/base_orchestrator.py +12 -1
- zenml/orchestrators/input_utils.py +44 -19
- zenml/orchestrators/step_launcher.py +4 -3
- zenml/orchestrators/step_run_utils.py +19 -15
- zenml/orchestrators/step_runner.py +25 -14
- zenml/orchestrators/utils.py +45 -26
- zenml/stack/flavor.py +9 -5
- zenml/stack_deployments/aws_stack_deployment.py +23 -6
- zenml/stack_deployments/azure_stack_deployment.py +28 -5
- zenml/stack_deployments/gcp_stack_deployment.py +25 -8
- zenml/stack_deployments/stack_deployment.py +3 -5
- zenml/steps/base_step.py +1 -1
- zenml/steps/entrypoint_function_utils.py +3 -5
- zenml/steps/step_context.py +5 -2
- zenml/steps/utils.py +13 -2
- zenml/utils/callback_registry.py +71 -0
- zenml/utils/metadata_utils.py +335 -0
- zenml/zen_server/auth.py +221 -3
- zenml/zen_server/cache.py +208 -0
- zenml/zen_server/dashboard/assets/{404-DT4QRUqN.js → 404-NVXKFp-x.js} +1 -1
- zenml/zen_server/dashboard/assets/{@radix-DP6vWzyx.js → @radix-DeK6qiuw.js} +1 -1
- zenml/zen_server/dashboard/assets/{@react-router-BMhZulnd.js → @react-router-B3Z5rLr2.js} +1 -1
- zenml/zen_server/dashboard/assets/{@reactflow-8U9qNlMR.js → @reactflow-CK0KJUen.js} +2 -2
- zenml/zen_server/dashboard/assets/{@tanstack-BUCbhJyH.js → @tanstack-DT5WLu9C.js} +1 -1
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-DezXKmDf.js +1 -0
- zenml/zen_server/dashboard/assets/{CodeSnippet-CqybNv0k.js → CodeSnippet-JzR8CEtw.js} +2 -2
- zenml/zen_server/dashboard/assets/{CollapsibleCard-0r_8G2Lj.js → CollapsibleCard-DQW_ktMO.js} +1 -1
- zenml/zen_server/dashboard/assets/{Commands-BDjgBQKi.js → Commands-DL2kwkRd.js} +1 -1
- zenml/zen_server/dashboard/assets/ComponentBadge-D_g62Wv8.js +1 -0
- zenml/zen_server/dashboard/assets/{CopyButton-C745BrKi.js → CopyButton-LNcWaa14.js} +1 -1
- zenml/zen_server/dashboard/assets/{CsvVizualization-PpAq0CeZ.js → CsvVizualization-DknpE5ej.js} +5 -5
- zenml/zen_server/dashboard/assets/{DialogItem-DcVCZEew.js → DialogItem-Bxf8FuAT.js} +1 -1
- zenml/zen_server/dashboard/assets/{DisplayDate-BeXgUG_C.js → DisplayDate-CDMUcQHS.js} +1 -1
- zenml/zen_server/dashboard/assets/{EmptyState-DeK7H4pr.js → EmptyState-BzdlCwp3.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-BMlzibXj.js → Error-DYflYyps.js} +1 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-C7zyIQKZ.js +1 -0
- zenml/zen_server/dashboard/assets/{Helpbox-BLf40fLV.js → Helpbox-oYSGpLqd.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-BwisKifi.js → Infobox-Cx4xGoXR.js} +1 -1
- zenml/zen_server/dashboard/assets/{InlineAvatar-jEgodSgX.js → InlineAvatar-DiGOWNKF.js} +1 -1
- zenml/zen_server/dashboard/assets/{Lock-3lLt1ih0.js → Lock-CYYy18Mm.js} +1 -1
- zenml/zen_server/dashboard/assets/{MarkdownVisualization-8O9kTr-2.js → MarkdownVisualization-ylXaAxev.js} +1 -1
- zenml/zen_server/dashboard/assets/NestedCollapsible-DYbgyKxK.js +1 -0
- zenml/zen_server/dashboard/assets/{NumberBox-T9eELfLZ.js → NumberBox-Dtp3J6g5.js} +1 -1
- zenml/zen_server/dashboard/assets/Partials-03iZf8-N.js +1 -0
- zenml/zen_server/dashboard/assets/{PasswordChecker-CW0kqY0W.js → PasswordChecker-B0nadgh6.js} +1 -1
- zenml/zen_server/dashboard/assets/ProBadge-D_EB8HNo.js +1 -0
- zenml/zen_server/dashboard/assets/ProCta-DqNS4v3x.js +1 -0
- zenml/zen_server/dashboard/assets/ProviderIcon-Bki2aw8w.js +1 -0
- zenml/zen_server/dashboard/assets/{ProviderRadio-BROY1700.js → ProviderRadio-8f43sPD4.js} +1 -1
- zenml/zen_server/dashboard/assets/RunSelector-DkPiIiNr.js +1 -0
- zenml/zen_server/dashboard/assets/RunsBody-07YEO7qI.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-lp1KgU4e.js +1 -0
- zenml/zen_server/dashboard/assets/{SecretTooltip-C_qByGWB.js → SecretTooltip-CgnbyeOx.js} +1 -1
- zenml/zen_server/dashboard/assets/{SetPassword-7pRB00El.js → SetPassword-CpP418A2.js} +1 -1
- zenml/zen_server/dashboard/assets/StackList-WvuKQusZ.js +1 -0
- zenml/zen_server/dashboard/assets/Tabs-BktHkCJJ.js +1 -0
- zenml/zen_server/dashboard/assets/Tick-BlMoIlJT.js +1 -0
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DckMEkFf.js → UpdatePasswordSchemas-Sc0A0pP-.js} +1 -1
- zenml/zen_server/dashboard/assets/{UsageReason-DVceN14P.js → UsageReason-YYduL4fj.js} +1 -1
- zenml/zen_server/dashboard/assets/{WizardFooter-CW0Cvd70.js → WizardFooter-dgmizSJC.js} +1 -1
- zenml/zen_server/dashboard/assets/all-pipeline-runs-query-D-c2G6lV.js +1 -0
- zenml/zen_server/dashboard/assets/check-DloQpStc.js +1 -0
- zenml/zen_server/dashboard/assets/{check-circle-Dwxliy1Z.js → check-circle-jNbX5-sR.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-down-8wLBS5pQ.js → chevron-down-6JyMkfjR.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-DoD8iXWM.js → chevron-right-double-D7ojK9Co.js} +1 -1
- zenml/zen_server/dashboard/assets/{code-browser-CZUQs3Wa.js → code-browser-CUFUIHfp.js} +1 -1
- zenml/zen_server/dashboard/assets/{copy-CaSMXwiU.js → copy-C8XQA2Ug.js} +1 -1
- zenml/zen_server/dashboard/assets/create-stack-DM_JPgef.js +1 -0
- zenml/zen_server/dashboard/assets/delete-run-CJdh1P_h.js +1 -0
- zenml/zen_server/dashboard/assets/{docker-BFNgg-z3.js → docker-BdA9vrnW.js} +1 -1
- zenml/zen_server/dashboard/assets/{dots-horizontal-DK5Duzx4.js → dots-horizontal-otGBOSDJ.js} +1 -1
- zenml/zen_server/dashboard/assets/{form-schemas-1AyOCx90.js → form-schemas-K6FYKjwa.js} +1 -1
- zenml/zen_server/dashboard/assets/{gcp-7M2Yf3ZK.js → gcp-CFtm4BA7.js} +1 -1
- zenml/zen_server/dashboard/assets/{help-Dam461dC.js → help-Cc9bBIJH.js} +1 -1
- zenml/zen_server/dashboard/assets/index-B1mVPYxf.js +1 -0
- zenml/zen_server/dashboard/assets/index-BAkC7FXi.js +1 -0
- zenml/zen_server/dashboard/assets/{index-QQb7wQEC.js → index-CCOPpudF.js} +8 -8
- zenml/zen_server/dashboard/assets/index-CEV4Cvaf.js +1 -0
- zenml/zen_server/dashboard/assets/index-DlGvJQPn.css +1 -0
- zenml/zen_server/dashboard/assets/{index-BVJ8n2-j.js → index-Uu49AX48.js} +1 -1
- zenml/zen_server/dashboard/assets/{index.esm-cuVep_NJ.js → index.esm-Dy6Z9Ung.js} +1 -1
- zenml/zen_server/dashboard/assets/{kubernetes--g7r02Zu.js → kubernetes-B2wmAJ1d.js} +1 -1
- zenml/zen_server/dashboard/assets/{layout-DCSYN7-C.js → layout-BtHBmE4w.js} +1 -1
- zenml/zen_server/dashboard/assets/{link-external-CBEk6kEG.js → link-external-b9AXw_sW.js} +1 -1
- zenml/zen_server/dashboard/assets/{login-mutation-DTcAFP1l.js → login-mutation-hf-lK87O.js} +1 -1
- zenml/zen_server/dashboard/assets/{logs-D5bdJGur.js → logs-WMSM52RF.js} +1 -1
- zenml/zen_server/dashboard/assets/{not-found-Cc-JkRH2.js → not-found-BGirLjU-.js} +1 -1
- zenml/zen_server/dashboard/assets/{package-Cs35Szwh.js → package-C6uypY4h.js} +1 -1
- zenml/zen_server/dashboard/assets/page-0JE_-Ec1.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DH_Z7iW1.js → page-6m6yHHlE.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BDigxVpo.js +1 -0
- zenml/zen_server/dashboard/assets/page-BR68V0V1.js +1 -0
- zenml/zen_server/dashboard/assets/page-BRLpxOt0.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BQQKaabe.js → page-BU7huvKw.js} +3 -3
- zenml/zen_server/dashboard/assets/page-BvqLv2Ky.js +1 -0
- zenml/zen_server/dashboard/assets/page-C00YAkaB.js +1 -0
- zenml/zen_server/dashboard/assets/{page-N4qoPHKb.js → page-CD-DcWoy.js} +1 -1
- zenml/zen_server/dashboard/assets/page-COXXJj1k.js +1 -0
- zenml/zen_server/dashboard/assets/page-CbpvrsDL.js +1 -0
- zenml/zen_server/dashboard/assets/page-CdMWnQak.js +1 -0
- zenml/zen_server/dashboard/assets/{page-ClUVkl-O.js → page-CjGdWY13.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CwxrFarU.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DLixvR-7.js → page-D01JhjQB.js} +1 -1
- zenml/zen_server/dashboard/assets/page-D6uU2ax4.js +1 -0
- zenml/zen_server/dashboard/assets/page-D7S3aCbF.js +1 -0
- zenml/zen_server/dashboard/assets/{page-9yplj5JT.js → page-DLC-bNBP.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DXSTpqRD.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DzpVUZ8f.js → page-DakHVWXF.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DIOXwhiD.js → page-Df-Fw0aq.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-B-y2XKIc.js → page-DfbXf_8s.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DjRJCGb3.js +1 -0
- zenml/zen_server/dashboard/assets/{page-C0N5q3l7.js → page-Djikxq_S.js} +1 -1
- zenml/zen_server/dashboard/assets/page-Dnovpa0i.js +3 -0
- zenml/zen_server/dashboard/assets/page-Dot3LPmL.js +1 -0
- zenml/zen_server/dashboard/assets/page-Vcxara9U.js +1 -0
- zenml/zen_server/dashboard/assets/page-Xynx4btY.js +14 -0
- zenml/zen_server/dashboard/assets/page-YpKAqVSa.js +1 -0
- zenml/zen_server/dashboard/assets/page-yYC9OI-E.js +1 -0
- zenml/zen_server/dashboard/assets/{persist-DNb5cdrU.js → persist-Coz7ZWvz.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-CP0JmYZ4.js → persist-GjC8PZoC.js} +1 -1
- zenml/zen_server/dashboard/assets/{plus-C9IxgN2M.js → plus-tf1V2hTJ.js} +1 -1
- zenml/zen_server/dashboard/assets/{refresh-BVu22P_C.js → refresh-BjOeWlEq.js} +1 -1
- zenml/zen_server/dashboard/assets/{rocket-CONEmRmB.js → rocket-DjT2cDvG.js} +1 -1
- zenml/zen_server/dashboard/assets/sharedSchema-CQb14VSr.js +14 -0
- zenml/zen_server/dashboard/assets/stack-detail-query-OPEW-cDJ.js +1 -0
- zenml/zen_server/dashboard/assets/{tick-circle-CM1ZScbQ.js → tick-circle-BEX_Tp4v.js} +1 -1
- zenml/zen_server/dashboard/assets/{trash-DkJHMOg7.js → trash-arLUMWMS.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-DsU8cNVl.js → update-server-settings-mutation-LwuQfHYn.js} +1 -1
- zenml/zen_server/dashboard/assets/upgrade-form-CwRHBuXB.webp +0 -0
- zenml/zen_server/dashboard/assets/url-CkvKAnwF.js +1 -0
- zenml/zen_server/dashboard/assets/{zod-D89GC_vc.js → zod-BwEbpOxH.js} +1 -1
- zenml/zen_server/dashboard/index.html +7 -7
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/exceptions.py +2 -0
- zenml/zen_server/jwt.py +30 -13
- zenml/zen_server/rbac/endpoint_utils.py +43 -1
- zenml/zen_server/rbac/utils.py +0 -2
- zenml/zen_server/routers/artifact_version_endpoints.py +27 -1
- zenml/zen_server/routers/auth_endpoints.py +134 -102
- zenml/zen_server/routers/logs_endpoints.py +66 -0
- zenml/zen_server/routers/workspaces_endpoints.py +3 -4
- zenml/zen_server/template_execution/utils.py +14 -16
- zenml/zen_server/utils.py +27 -0
- zenml/zen_server/zen_server_api.py +6 -3
- zenml/zen_stores/migrations/versions/0.70.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/1cb6477f72d6_move_artifact_save_type.py +99 -0
- zenml/zen_stores/migrations/versions/904464ea4041_add_pipeline_model_run_unique_constraints.py +192 -0
- zenml/zen_stores/migrations/versions/b557b2871693_update_step_run_input_types.py +33 -0
- zenml/zen_stores/rest_zen_store.py +68 -64
- zenml/zen_stores/schemas/artifact_schemas.py +8 -1
- zenml/zen_stores/schemas/model_schemas.py +27 -3
- zenml/zen_stores/schemas/pipeline_run_schemas.py +6 -1
- zenml/zen_stores/schemas/pipeline_schemas.py +8 -2
- zenml/zen_stores/schemas/run_metadata_schemas.py +1 -48
- zenml/zen_stores/schemas/step_run_schemas.py +18 -10
- zenml/zen_stores/sql_zen_store.py +283 -219
- zenml/zen_stores/zen_store_interface.py +15 -42
- {zenml_nightly-0.68.1.dev20241103.dist-info → zenml_nightly-0.70.0.dev20241115.dist-info}/METADATA +2 -2
- {zenml_nightly-0.68.1.dev20241103.dist-info → zenml_nightly-0.70.0.dev20241115.dist-info}/RECORD +226 -203
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-C6N2rGrB.js +0 -1
- zenml/zen_server/dashboard/assets/ComponentBadge-DUiEYJHu.js +0 -1
- zenml/zen_server/dashboard/assets/ComponentFallbackDialog-BFoH5K4V.js +0 -1
- zenml/zen_server/dashboard/assets/ComponentIcon-CAIoUis2.js +0 -1
- zenml/zen_server/dashboard/assets/Partials-YPBB3V4q.js +0 -1
- zenml/zen_server/dashboard/assets/ProviderIcon-Bb3Xha5A.js +0 -1
- zenml/zen_server/dashboard/assets/RunSelector-DCiL3M1c.js +0 -1
- zenml/zen_server/dashboard/assets/SearchField-DfUiGFVd.js +0 -1
- zenml/zen_server/dashboard/assets/Tick-CykQFPj2.js +0 -1
- zenml/zen_server/dashboard/assets/cloud-only-B-s_HMDm.js +0 -1
- zenml/zen_server/dashboard/assets/codespaces-BitYDX9d.gif +0 -0
- zenml/zen_server/dashboard/assets/create-stack-CEmaPZ4c.js +0 -1
- zenml/zen_server/dashboard/assets/delete-run-D-LKbGyz.js +0 -1
- zenml/zen_server/dashboard/assets/index-Bpmj40BI.js +0 -1
- zenml/zen_server/dashboard/assets/index-CbU4Ln_E.css +0 -1
- zenml/zen_server/dashboard/assets/index-DKPhqP2B.js +0 -1
- zenml/zen_server/dashboard/assets/page-BBpOxVcY.js +0 -1
- zenml/zen_server/dashboard/assets/page-BRInM1Lg.js +0 -1
- zenml/zen_server/dashboard/assets/page-BjjlMk7s.js +0 -1
- zenml/zen_server/dashboard/assets/page-Bvd7YH2A.js +0 -1
- zenml/zen_server/dashboard/assets/page-CT3Nep8W.js +0 -1
- zenml/zen_server/dashboard/assets/page-C_f47pBf.js +0 -1
- zenml/zen_server/dashboard/assets/page-Cmv8C_yM.js +0 -3
- zenml/zen_server/dashboard/assets/page-CyN2bdWG.js +0 -1
- zenml/zen_server/dashboard/assets/page-CzzXH4fs.js +0 -1
- zenml/zen_server/dashboard/assets/page-DTlGjgnG.js +0 -1
- zenml/zen_server/dashboard/assets/page-Dbpl86h0.js +0 -1
- zenml/zen_server/dashboard/assets/page-Ddgy6kDS.js +0 -1
- zenml/zen_server/dashboard/assets/page-DtCAfBLy.js +0 -9
- zenml/zen_server/dashboard/assets/page-Dx16z7nA.js +0 -1
- zenml/zen_server/dashboard/assets/page-McUyYbo1.js +0 -1
- zenml/zen_server/dashboard/assets/page-T1P3RyAR.js +0 -1
- zenml/zen_server/dashboard/assets/page-bKaULTGG.js +0 -1
- zenml/zen_server/dashboard/assets/page-sbXUJy9t.js +0 -1
- zenml/zen_server/dashboard/assets/sharedSchema-TMLu-nYQ.js +0 -14
- zenml/zen_server/dashboard/assets/stack-detail-query-xmYxSsUY.js +0 -1
- zenml/zen_server/dashboard/assets/url-D5le3J4q.js +0 -1
- zenml/zen_server/routers/run_metadata_endpoints.py +0 -96
- {zenml_nightly-0.68.1.dev20241103.dist-info → zenml_nightly-0.70.0.dev20241115.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.68.1.dev20241103.dist-info → zenml_nightly-0.70.0.dev20241115.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.68.1.dev20241103.dist-info → zenml_nightly-0.70.0.dev20241115.dist-info}/entry_points.txt +0 -0
@@ -29,6 +29,7 @@ from pydantic import BaseModel, ConfigDict, Field, PrivateAttr, field_validator
|
|
29
29
|
|
30
30
|
from zenml.constants import STR_FIELD_MAX_LENGTH, TEXT_FIELD_MAX_LENGTH
|
31
31
|
from zenml.enums import ModelStages
|
32
|
+
from zenml.metadata.metadata_types import MetadataType
|
32
33
|
from zenml.models.v2.base.filter import AnyQuery
|
33
34
|
from zenml.models.v2.base.page import Page
|
34
35
|
from zenml.models.v2.base.scoped import (
|
@@ -49,9 +50,6 @@ if TYPE_CHECKING:
|
|
49
50
|
from zenml.models.v2.core.artifact_version import ArtifactVersionResponse
|
50
51
|
from zenml.models.v2.core.model import ModelResponse
|
51
52
|
from zenml.models.v2.core.pipeline_run import PipelineRunResponse
|
52
|
-
from zenml.models.v2.core.run_metadata import (
|
53
|
-
RunMetadataResponse,
|
54
|
-
)
|
55
53
|
from zenml.zen_stores.schemas import BaseSchema
|
56
54
|
|
57
55
|
AnySchema = TypeVar("AnySchema", bound=BaseSchema)
|
@@ -193,7 +191,7 @@ class ModelVersionResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
193
191
|
max_length=TEXT_FIELD_MAX_LENGTH,
|
194
192
|
default=None,
|
195
193
|
)
|
196
|
-
run_metadata: Dict[str,
|
194
|
+
run_metadata: Dict[str, MetadataType] = Field(
|
197
195
|
description="Metadata linked to the model version",
|
198
196
|
default={},
|
199
197
|
)
|
@@ -304,7 +302,7 @@ class ModelVersionResponse(
|
|
304
302
|
return self.get_metadata().description
|
305
303
|
|
306
304
|
@property
|
307
|
-
def run_metadata(self) ->
|
305
|
+
def run_metadata(self) -> Dict[str, MetadataType]:
|
308
306
|
"""The `run_metadata` property.
|
309
307
|
|
310
308
|
Returns:
|
@@ -592,6 +590,7 @@ class ModelVersionFilter(WorkspaceScopedTaggableFilter):
|
|
592
590
|
FILTER_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
593
591
|
*WorkspaceScopedTaggableFilter.FILTER_EXCLUDE_FIELDS,
|
594
592
|
"user",
|
593
|
+
"run_metadata",
|
595
594
|
]
|
596
595
|
|
597
596
|
name: Optional[str] = Field(
|
@@ -621,6 +620,10 @@ class ModelVersionFilter(WorkspaceScopedTaggableFilter):
|
|
621
620
|
default=None,
|
622
621
|
description="Name/ID of the user that created the model version.",
|
623
622
|
)
|
623
|
+
run_metadata: Optional[Dict[str, str]] = Field(
|
624
|
+
default=None,
|
625
|
+
description="The run_metadata to filter the model versions by.",
|
626
|
+
)
|
624
627
|
|
625
628
|
_model_id: UUID = PrivateAttr(None)
|
626
629
|
|
@@ -653,6 +656,7 @@ class ModelVersionFilter(WorkspaceScopedTaggableFilter):
|
|
653
656
|
|
654
657
|
from zenml.zen_stores.schemas import (
|
655
658
|
ModelVersionSchema,
|
659
|
+
RunMetadataSchema,
|
656
660
|
UserSchema,
|
657
661
|
)
|
658
662
|
|
@@ -667,6 +671,23 @@ class ModelVersionFilter(WorkspaceScopedTaggableFilter):
|
|
667
671
|
)
|
668
672
|
custom_filters.append(user_filter)
|
669
673
|
|
674
|
+
if self.run_metadata is not None:
|
675
|
+
from zenml.enums import MetadataResourceTypes
|
676
|
+
|
677
|
+
for key, value in self.run_metadata.items():
|
678
|
+
additional_filter = and_(
|
679
|
+
RunMetadataSchema.resource_id == ModelVersionSchema.id,
|
680
|
+
RunMetadataSchema.resource_type
|
681
|
+
== MetadataResourceTypes.MODEL_VERSION,
|
682
|
+
RunMetadataSchema.key == key,
|
683
|
+
self.generate_custom_query_conditions_for_column(
|
684
|
+
value=value,
|
685
|
+
table=RunMetadataSchema,
|
686
|
+
column="value",
|
687
|
+
),
|
688
|
+
)
|
689
|
+
custom_filters.append(additional_filter)
|
690
|
+
|
670
691
|
return custom_filters
|
671
692
|
|
672
693
|
def apply_filter(
|
@@ -30,6 +30,7 @@ from pydantic import BaseModel, ConfigDict, Field
|
|
30
30
|
from zenml.config.pipeline_configurations import PipelineConfiguration
|
31
31
|
from zenml.constants import STR_FIELD_MAX_LENGTH
|
32
32
|
from zenml.enums import ExecutionStatus
|
33
|
+
from zenml.metadata.metadata_types import MetadataType
|
33
34
|
from zenml.models.v2.base.scoped import (
|
34
35
|
WorkspaceScopedRequest,
|
35
36
|
WorkspaceScopedResponse,
|
@@ -51,9 +52,6 @@ if TYPE_CHECKING:
|
|
51
52
|
from zenml.models.v2.core.pipeline_build import (
|
52
53
|
PipelineBuildResponse,
|
53
54
|
)
|
54
|
-
from zenml.models.v2.core.run_metadata import (
|
55
|
-
RunMetadataResponse,
|
56
|
-
)
|
57
55
|
from zenml.models.v2.core.schedule import ScheduleResponse
|
58
56
|
from zenml.models.v2.core.stack import StackResponse
|
59
57
|
from zenml.models.v2.core.step_run import StepRunResponse
|
@@ -190,7 +188,7 @@ class PipelineRunResponseBody(WorkspaceScopedResponseBody):
|
|
190
188
|
class PipelineRunResponseMetadata(WorkspaceScopedResponseMetadata):
|
191
189
|
"""Response metadata for pipeline runs."""
|
192
190
|
|
193
|
-
run_metadata: Dict[str,
|
191
|
+
run_metadata: Dict[str, MetadataType] = Field(
|
194
192
|
default={},
|
195
193
|
title="Metadata associated with this pipeline run.",
|
196
194
|
)
|
@@ -450,7 +448,7 @@ class PipelineRunResponse(
|
|
450
448
|
return self.get_body().model_version_id
|
451
449
|
|
452
450
|
@property
|
453
|
-
def run_metadata(self) -> Dict[str,
|
451
|
+
def run_metadata(self) -> Dict[str, MetadataType]:
|
454
452
|
"""The `run_metadata` property.
|
455
453
|
|
456
454
|
Returns:
|
@@ -589,6 +587,7 @@ class PipelineRunFilter(WorkspaceScopedTaggableFilter):
|
|
589
587
|
"stack_component",
|
590
588
|
"pipeline_name",
|
591
589
|
"templatable",
|
590
|
+
"run_metadata",
|
592
591
|
]
|
593
592
|
name: Optional[str] = Field(
|
594
593
|
default=None,
|
@@ -667,6 +666,10 @@ class PipelineRunFilter(WorkspaceScopedTaggableFilter):
|
|
667
666
|
default=None,
|
668
667
|
description="Name/ID of the user that created the run.",
|
669
668
|
)
|
669
|
+
run_metadata: Optional[Dict[str, str]] = Field(
|
670
|
+
default=None,
|
671
|
+
description="The run_metadata to filter the pipeline runs by.",
|
672
|
+
)
|
670
673
|
# TODO: Remove once frontend is ready for it. This is replaced by the more
|
671
674
|
# generic `pipeline` filter below.
|
672
675
|
pipeline_name: Optional[str] = Field(
|
@@ -696,7 +699,6 @@ class PipelineRunFilter(WorkspaceScopedTaggableFilter):
|
|
696
699
|
templatable: Optional[bool] = Field(
|
697
700
|
default=None, description="Whether the run is templatable."
|
698
701
|
)
|
699
|
-
|
700
702
|
model_config = ConfigDict(protected_namespaces=())
|
701
703
|
|
702
704
|
def get_custom_filters(
|
@@ -720,6 +722,7 @@ class PipelineRunFilter(WorkspaceScopedTaggableFilter):
|
|
720
722
|
PipelineDeploymentSchema,
|
721
723
|
PipelineRunSchema,
|
722
724
|
PipelineSchema,
|
725
|
+
RunMetadataSchema,
|
723
726
|
ScheduleSchema,
|
724
727
|
StackComponentSchema,
|
725
728
|
StackCompositionSchema,
|
@@ -889,5 +892,21 @@ class PipelineRunFilter(WorkspaceScopedTaggableFilter):
|
|
889
892
|
)
|
890
893
|
|
891
894
|
custom_filters.append(templatable_filter)
|
895
|
+
if self.run_metadata is not None:
|
896
|
+
from zenml.enums import MetadataResourceTypes
|
897
|
+
|
898
|
+
for key, value in self.run_metadata.items():
|
899
|
+
additional_filter = and_(
|
900
|
+
RunMetadataSchema.resource_id == PipelineRunSchema.id,
|
901
|
+
RunMetadataSchema.resource_type
|
902
|
+
== MetadataResourceTypes.PIPELINE_RUN,
|
903
|
+
RunMetadataSchema.key == key,
|
904
|
+
self.generate_custom_query_conditions_for_column(
|
905
|
+
value=value,
|
906
|
+
table=RunMetadataSchema,
|
907
|
+
column="value",
|
908
|
+
),
|
909
|
+
)
|
910
|
+
custom_filters.append(additional_filter)
|
892
911
|
|
893
912
|
return custom_filters
|
@@ -13,21 +13,15 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""Models representing run metadata."""
|
15
15
|
|
16
|
-
from typing import
|
16
|
+
from typing import Dict, Optional
|
17
17
|
from uuid import UUID
|
18
18
|
|
19
|
-
from pydantic import Field
|
19
|
+
from pydantic import Field
|
20
20
|
|
21
|
-
from zenml.constants import STR_FIELD_MAX_LENGTH, TEXT_FIELD_MAX_LENGTH
|
22
21
|
from zenml.enums import MetadataResourceTypes
|
23
22
|
from zenml.metadata.metadata_types import MetadataType, MetadataTypeEnum
|
24
23
|
from zenml.models.v2.base.scoped import (
|
25
|
-
WorkspaceScopedFilter,
|
26
24
|
WorkspaceScopedRequest,
|
27
|
-
WorkspaceScopedResponse,
|
28
|
-
WorkspaceScopedResponseBody,
|
29
|
-
WorkspaceScopedResponseMetadata,
|
30
|
-
WorkspaceScopedResponseResources,
|
31
25
|
)
|
32
26
|
|
33
27
|
# ------------------ Request Model ------------------
|
@@ -51,212 +45,3 @@ class RunMetadataRequest(WorkspaceScopedRequest):
|
|
51
45
|
types: Dict[str, "MetadataTypeEnum"] = Field(
|
52
46
|
title="The types of the metadata to be created.",
|
53
47
|
)
|
54
|
-
|
55
|
-
|
56
|
-
# ------------------ Update Model ------------------
|
57
|
-
|
58
|
-
# There is no update model for run metadata.
|
59
|
-
|
60
|
-
# ------------------ Response Model ------------------
|
61
|
-
|
62
|
-
|
63
|
-
class RunMetadataResponseBody(WorkspaceScopedResponseBody):
|
64
|
-
"""Response body for run metadata."""
|
65
|
-
|
66
|
-
key: str = Field(title="The key of the metadata.")
|
67
|
-
value: MetadataType = Field(
|
68
|
-
title="The value of the metadata.", union_mode="smart"
|
69
|
-
)
|
70
|
-
type: MetadataTypeEnum = Field(title="The type of the metadata.")
|
71
|
-
|
72
|
-
@field_validator("key", "type")
|
73
|
-
@classmethod
|
74
|
-
def str_field_max_length_check(cls, value: Any) -> Any:
|
75
|
-
"""Checks if the length of the value exceeds the maximum str length.
|
76
|
-
|
77
|
-
Args:
|
78
|
-
value: the value set in the field
|
79
|
-
|
80
|
-
Returns:
|
81
|
-
the value itself.
|
82
|
-
|
83
|
-
Raises:
|
84
|
-
AssertionError: if the length of the field is longer than the
|
85
|
-
maximum threshold.
|
86
|
-
"""
|
87
|
-
assert len(str(value)) < STR_FIELD_MAX_LENGTH, (
|
88
|
-
"The length of the value for this field can not "
|
89
|
-
f"exceed {STR_FIELD_MAX_LENGTH}"
|
90
|
-
)
|
91
|
-
return value
|
92
|
-
|
93
|
-
@field_validator("value")
|
94
|
-
@classmethod
|
95
|
-
def text_field_max_length_check(cls, value: Any) -> Any:
|
96
|
-
"""Checks if the length of the value exceeds the maximum text length.
|
97
|
-
|
98
|
-
Args:
|
99
|
-
value: the value set in the field
|
100
|
-
|
101
|
-
Returns:
|
102
|
-
the value itself.
|
103
|
-
|
104
|
-
Raises:
|
105
|
-
AssertionError: if the length of the field is longer than the
|
106
|
-
maximum threshold.
|
107
|
-
"""
|
108
|
-
assert len(str(value)) < TEXT_FIELD_MAX_LENGTH, (
|
109
|
-
"The length of the value for this field can not "
|
110
|
-
f"exceed {TEXT_FIELD_MAX_LENGTH}"
|
111
|
-
)
|
112
|
-
return value
|
113
|
-
|
114
|
-
|
115
|
-
class RunMetadataResponseMetadata(WorkspaceScopedResponseMetadata):
|
116
|
-
"""Response metadata for run metadata."""
|
117
|
-
|
118
|
-
resource_id: UUID = Field(
|
119
|
-
title="The ID of the resource that this metadata belongs to.",
|
120
|
-
)
|
121
|
-
resource_type: MetadataResourceTypes = Field(
|
122
|
-
title="The type of the resource that this metadata belongs to.",
|
123
|
-
)
|
124
|
-
stack_component_id: Optional[UUID] = Field(
|
125
|
-
title="The ID of the stack component that this metadata belongs to."
|
126
|
-
)
|
127
|
-
|
128
|
-
|
129
|
-
class RunMetadataResponseResources(WorkspaceScopedResponseResources):
|
130
|
-
"""Class for all resource models associated with the run metadata entity."""
|
131
|
-
|
132
|
-
|
133
|
-
class RunMetadataResponse(
|
134
|
-
WorkspaceScopedResponse[
|
135
|
-
RunMetadataResponseBody,
|
136
|
-
RunMetadataResponseMetadata,
|
137
|
-
RunMetadataResponseResources,
|
138
|
-
]
|
139
|
-
):
|
140
|
-
"""Response model for run metadata."""
|
141
|
-
|
142
|
-
def get_hydrated_version(self) -> "RunMetadataResponse":
|
143
|
-
"""Get the hydrated version of this run metadata.
|
144
|
-
|
145
|
-
Returns:
|
146
|
-
an instance of the same entity with the metadata field attached.
|
147
|
-
"""
|
148
|
-
from zenml.client import Client
|
149
|
-
|
150
|
-
return Client().zen_store.get_run_metadata(self.id)
|
151
|
-
|
152
|
-
# Body and metadata properties
|
153
|
-
@property
|
154
|
-
def key(self) -> str:
|
155
|
-
"""The `key` property.
|
156
|
-
|
157
|
-
Returns:
|
158
|
-
the value of the property.
|
159
|
-
"""
|
160
|
-
return self.get_body().key
|
161
|
-
|
162
|
-
@property
|
163
|
-
def value(self) -> MetadataType:
|
164
|
-
"""The `value` property.
|
165
|
-
|
166
|
-
Returns:
|
167
|
-
the value of the property.
|
168
|
-
"""
|
169
|
-
return self.get_body().value
|
170
|
-
|
171
|
-
@property
|
172
|
-
def type(self) -> MetadataTypeEnum:
|
173
|
-
"""The `type` property.
|
174
|
-
|
175
|
-
Returns:
|
176
|
-
the value of the property.
|
177
|
-
"""
|
178
|
-
return self.get_body().type
|
179
|
-
|
180
|
-
@property
|
181
|
-
def resource_id(self) -> UUID:
|
182
|
-
"""The `resource_id` property.
|
183
|
-
|
184
|
-
Returns:
|
185
|
-
the value of the property.
|
186
|
-
"""
|
187
|
-
return self.get_metadata().resource_id
|
188
|
-
|
189
|
-
@property
|
190
|
-
def resource_type(self) -> MetadataResourceTypes:
|
191
|
-
"""The `resource_type` property.
|
192
|
-
|
193
|
-
Returns:
|
194
|
-
the value of the property.
|
195
|
-
"""
|
196
|
-
return MetadataResourceTypes(self.get_metadata().resource_type)
|
197
|
-
|
198
|
-
@property
|
199
|
-
def stack_component_id(self) -> Optional[UUID]:
|
200
|
-
"""The `stack_component_id` property.
|
201
|
-
|
202
|
-
Returns:
|
203
|
-
the value of the property.
|
204
|
-
"""
|
205
|
-
return self.get_metadata().stack_component_id
|
206
|
-
|
207
|
-
|
208
|
-
# ------------------ Filter Model ------------------
|
209
|
-
|
210
|
-
|
211
|
-
class RunMetadataFilter(WorkspaceScopedFilter):
|
212
|
-
"""Model to enable advanced filtering of run metadata."""
|
213
|
-
|
214
|
-
resource_id: Optional[Union[str, UUID]] = Field(
|
215
|
-
default=None, union_mode="left_to_right"
|
216
|
-
)
|
217
|
-
resource_type: Optional[MetadataResourceTypes] = None
|
218
|
-
stack_component_id: Optional[Union[str, UUID]] = Field(
|
219
|
-
default=None, union_mode="left_to_right"
|
220
|
-
)
|
221
|
-
key: Optional[str] = None
|
222
|
-
type: Optional[Union[str, MetadataTypeEnum]] = Field(
|
223
|
-
default=None, union_mode="left_to_right"
|
224
|
-
)
|
225
|
-
|
226
|
-
|
227
|
-
# -------------------- Lazy Loader --------------------
|
228
|
-
|
229
|
-
|
230
|
-
class LazyRunMetadataResponse(RunMetadataResponse):
|
231
|
-
"""Lazy run metadata response.
|
232
|
-
|
233
|
-
Used if the run metadata is accessed from the model in
|
234
|
-
a pipeline context available only during pipeline compilation.
|
235
|
-
"""
|
236
|
-
|
237
|
-
id: Optional[UUID] = None # type: ignore[assignment]
|
238
|
-
lazy_load_artifact_name: Optional[str] = None
|
239
|
-
lazy_load_artifact_version: Optional[str] = None
|
240
|
-
lazy_load_metadata_name: Optional[str] = None
|
241
|
-
lazy_load_model_name: str
|
242
|
-
lazy_load_model_version: Optional[str] = None
|
243
|
-
|
244
|
-
def get_body(self) -> None: # type: ignore[override]
|
245
|
-
"""Protects from misuse of the lazy loader.
|
246
|
-
|
247
|
-
Raises:
|
248
|
-
RuntimeError: always
|
249
|
-
"""
|
250
|
-
raise RuntimeError(
|
251
|
-
"Cannot access run metadata body before pipeline runs."
|
252
|
-
)
|
253
|
-
|
254
|
-
def get_metadata(self) -> None: # type: ignore[override]
|
255
|
-
"""Protects from misuse of the lazy loader.
|
256
|
-
|
257
|
-
Raises:
|
258
|
-
RuntimeError: always
|
259
|
-
"""
|
260
|
-
raise RuntimeError(
|
261
|
-
"Cannot access run metadata metadata before pipeline runs."
|
262
|
-
)
|
zenml/models/v2/core/step_run.py
CHANGED
@@ -21,7 +21,8 @@ from pydantic import BaseModel, ConfigDict, Field
|
|
21
21
|
|
22
22
|
from zenml.config.step_configurations import StepConfiguration, StepSpec
|
23
23
|
from zenml.constants import STR_FIELD_MAX_LENGTH, TEXT_FIELD_MAX_LENGTH
|
24
|
-
from zenml.enums import ExecutionStatus
|
24
|
+
from zenml.enums import ExecutionStatus, StepRunInputArtifactType
|
25
|
+
from zenml.metadata.metadata_types import MetadataType
|
25
26
|
from zenml.models.v2.base.scoped import (
|
26
27
|
WorkspaceScopedFilter,
|
27
28
|
WorkspaceScopedRequest,
|
@@ -30,19 +31,35 @@ from zenml.models.v2.base.scoped import (
|
|
30
31
|
WorkspaceScopedResponseMetadata,
|
31
32
|
WorkspaceScopedResponseResources,
|
32
33
|
)
|
34
|
+
from zenml.models.v2.core.artifact_version import ArtifactVersionResponse
|
33
35
|
from zenml.models.v2.core.model_version import ModelVersionResponse
|
34
36
|
|
35
37
|
if TYPE_CHECKING:
|
36
38
|
from sqlalchemy.sql.elements import ColumnElement
|
37
39
|
|
38
|
-
from zenml.models.v2.core.artifact_version import ArtifactVersionResponse
|
39
40
|
from zenml.models.v2.core.logs import (
|
40
41
|
LogsRequest,
|
41
42
|
LogsResponse,
|
42
43
|
)
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
|
45
|
+
|
46
|
+
class StepRunInputResponse(ArtifactVersionResponse):
|
47
|
+
"""Response model for step run inputs."""
|
48
|
+
|
49
|
+
input_type: StepRunInputArtifactType
|
50
|
+
|
51
|
+
def get_hydrated_version(self) -> "StepRunInputResponse":
|
52
|
+
"""Get the hydrated version of this step run input.
|
53
|
+
|
54
|
+
Returns:
|
55
|
+
an instance of the same entity with the metadata field attached.
|
56
|
+
"""
|
57
|
+
from zenml.client import Client
|
58
|
+
|
59
|
+
return StepRunInputResponse(
|
60
|
+
input_type=self.input_type,
|
61
|
+
**Client().zen_store.get_artifact_version(self.id).model_dump(),
|
62
|
+
)
|
46
63
|
|
47
64
|
|
48
65
|
# ------------------ Request Model ------------------
|
@@ -97,11 +114,11 @@ class StepRunRequest(WorkspaceScopedRequest):
|
|
97
114
|
)
|
98
115
|
inputs: Dict[str, UUID] = Field(
|
99
116
|
title="The IDs of the input artifact versions of the step run.",
|
100
|
-
|
117
|
+
default_factory=dict,
|
101
118
|
)
|
102
|
-
outputs: Dict[str, UUID] = Field(
|
119
|
+
outputs: Dict[str, List[UUID]] = Field(
|
103
120
|
title="The IDs of the output artifact versions of the step run.",
|
104
|
-
|
121
|
+
default_factory=dict,
|
105
122
|
)
|
106
123
|
logs: Optional["LogsRequest"] = Field(
|
107
124
|
title="Logs associated with this step run.",
|
@@ -129,10 +146,6 @@ class StepRunUpdate(BaseModel):
|
|
129
146
|
title="The IDs of the output artifact versions of the step run.",
|
130
147
|
default={},
|
131
148
|
)
|
132
|
-
saved_artifact_versions: Dict[str, UUID] = Field(
|
133
|
-
title="The IDs of artifact versions that were saved by this step run.",
|
134
|
-
default={},
|
135
|
-
)
|
136
149
|
loaded_artifact_versions: Dict[str, UUID] = Field(
|
137
150
|
title="The IDs of artifact versions that were loaded by this step run.",
|
138
151
|
default={},
|
@@ -166,13 +179,13 @@ class StepRunResponseBody(WorkspaceScopedResponseBody):
|
|
166
179
|
title="The end time of the step run.",
|
167
180
|
default=None,
|
168
181
|
)
|
169
|
-
inputs: Dict[str,
|
182
|
+
inputs: Dict[str, StepRunInputResponse] = Field(
|
170
183
|
title="The input artifact versions of the step run.",
|
171
|
-
|
184
|
+
default_factory=dict,
|
172
185
|
)
|
173
|
-
outputs: Dict[str,
|
186
|
+
outputs: Dict[str, List[ArtifactVersionResponse]] = Field(
|
174
187
|
title="The output artifact versions of the step run.",
|
175
|
-
|
188
|
+
default_factory=dict,
|
176
189
|
)
|
177
190
|
model_version_id: Optional[UUID] = Field(
|
178
191
|
title="The ID of the model version that was "
|
@@ -230,7 +243,7 @@ class StepRunResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
230
243
|
title="The IDs of the parent steps of this step run.",
|
231
244
|
default_factory=list,
|
232
245
|
)
|
233
|
-
run_metadata: Dict[str,
|
246
|
+
run_metadata: Dict[str, MetadataType] = Field(
|
234
247
|
title="Metadata associated with this step run.",
|
235
248
|
default={},
|
236
249
|
)
|
@@ -274,7 +287,7 @@ class StepRunResponse(
|
|
274
287
|
|
275
288
|
# Helper properties
|
276
289
|
@property
|
277
|
-
def input(self) ->
|
290
|
+
def input(self) -> ArtifactVersionResponse:
|
278
291
|
"""Returns the input artifact that was used to run this step.
|
279
292
|
|
280
293
|
Returns:
|
@@ -293,7 +306,7 @@ class StepRunResponse(
|
|
293
306
|
return next(iter(self.inputs.values()))
|
294
307
|
|
295
308
|
@property
|
296
|
-
def output(self) ->
|
309
|
+
def output(self) -> ArtifactVersionResponse:
|
297
310
|
"""Returns the output artifact that was written by this step.
|
298
311
|
|
299
312
|
Returns:
|
@@ -304,12 +317,15 @@ class StepRunResponse(
|
|
304
317
|
"""
|
305
318
|
if not self.outputs:
|
306
319
|
raise ValueError(f"Step {self.name} has no outputs.")
|
307
|
-
if len(self.outputs) > 1
|
320
|
+
if len(self.outputs) > 1 or (
|
321
|
+
len(self.outputs) == 1
|
322
|
+
and len(next(iter(self.outputs.values()))) > 1
|
323
|
+
):
|
308
324
|
raise ValueError(
|
309
325
|
f"Step {self.name} has multiple outputs, so `Step.output` is "
|
310
326
|
"ambiguous. Please use `Step.outputs` instead."
|
311
327
|
)
|
312
|
-
return next(iter(self.outputs.values()))
|
328
|
+
return next(iter(self.outputs.values()))[0]
|
313
329
|
|
314
330
|
# Body and metadata properties
|
315
331
|
@property
|
@@ -322,7 +338,7 @@ class StepRunResponse(
|
|
322
338
|
return self.get_body().status
|
323
339
|
|
324
340
|
@property
|
325
|
-
def inputs(self) -> Dict[str,
|
341
|
+
def inputs(self) -> Dict[str, StepRunInputResponse]:
|
326
342
|
"""The `inputs` property.
|
327
343
|
|
328
344
|
Returns:
|
@@ -331,7 +347,7 @@ class StepRunResponse(
|
|
331
347
|
return self.get_body().inputs
|
332
348
|
|
333
349
|
@property
|
334
|
-
def outputs(self) -> Dict[str,
|
350
|
+
def outputs(self) -> Dict[str, List[ArtifactVersionResponse]]:
|
335
351
|
"""The `outputs` property.
|
336
352
|
|
337
353
|
Returns:
|
@@ -466,7 +482,7 @@ class StepRunResponse(
|
|
466
482
|
return self.get_metadata().parent_step_ids
|
467
483
|
|
468
484
|
@property
|
469
|
-
def run_metadata(self) -> Dict[str,
|
485
|
+
def run_metadata(self) -> Dict[str, MetadataType]:
|
470
486
|
"""The `run_metadata` property.
|
471
487
|
|
472
488
|
Returns:
|
@@ -493,6 +509,7 @@ class StepRunFilter(WorkspaceScopedFilter):
|
|
493
509
|
FILTER_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
494
510
|
*WorkspaceScopedFilter.FILTER_EXCLUDE_FIELDS,
|
495
511
|
"model",
|
512
|
+
"run_metadata",
|
496
513
|
]
|
497
514
|
|
498
515
|
name: Optional[str] = Field(
|
@@ -555,6 +572,10 @@ class StepRunFilter(WorkspaceScopedFilter):
|
|
555
572
|
default=None,
|
556
573
|
description="Name/ID of the model associated with the step run.",
|
557
574
|
)
|
575
|
+
run_metadata: Optional[Dict[str, str]] = Field(
|
576
|
+
default=None,
|
577
|
+
description="The run_metadata to filter the step runs by.",
|
578
|
+
)
|
558
579
|
|
559
580
|
model_config = ConfigDict(protected_namespaces=())
|
560
581
|
|
@@ -573,6 +594,7 @@ class StepRunFilter(WorkspaceScopedFilter):
|
|
573
594
|
from zenml.zen_stores.schemas import (
|
574
595
|
ModelSchema,
|
575
596
|
ModelVersionSchema,
|
597
|
+
RunMetadataSchema,
|
576
598
|
StepRunSchema,
|
577
599
|
)
|
578
600
|
|
@@ -585,5 +607,21 @@ class StepRunFilter(WorkspaceScopedFilter):
|
|
585
607
|
),
|
586
608
|
)
|
587
609
|
custom_filters.append(model_filter)
|
610
|
+
if self.run_metadata is not None:
|
611
|
+
from zenml.enums import MetadataResourceTypes
|
612
|
+
|
613
|
+
for key, value in self.run_metadata.items():
|
614
|
+
additional_filter = and_(
|
615
|
+
RunMetadataSchema.resource_id == StepRunSchema.id,
|
616
|
+
RunMetadataSchema.resource_type
|
617
|
+
== MetadataResourceTypes.STEP_RUN,
|
618
|
+
RunMetadataSchema.key == key,
|
619
|
+
self.generate_custom_query_conditions_for_column(
|
620
|
+
value=value,
|
621
|
+
table=RunMetadataSchema,
|
622
|
+
column="value",
|
623
|
+
),
|
624
|
+
)
|
625
|
+
custom_filters.append(additional_filter)
|
588
626
|
|
589
627
|
return custom_filters
|
@@ -15,6 +15,7 @@
|
|
15
15
|
|
16
16
|
from abc import ABC, abstractmethod
|
17
17
|
from typing import TYPE_CHECKING, Any, Dict, Iterator, Optional, Type, cast
|
18
|
+
from uuid import UUID
|
18
19
|
|
19
20
|
from pydantic import model_validator
|
20
21
|
|
@@ -186,7 +187,17 @@ class BaseOrchestrator(StackComponent, ABC):
|
|
186
187
|
"""
|
187
188
|
self._prepare_run(deployment=deployment)
|
188
189
|
|
189
|
-
|
190
|
+
pipeline_run_id: Optional[UUID] = None
|
191
|
+
schedule_id: Optional[UUID] = None
|
192
|
+
if deployment.schedule:
|
193
|
+
schedule_id = deployment.schedule.id
|
194
|
+
if placeholder_run:
|
195
|
+
pipeline_run_id = placeholder_run.id
|
196
|
+
|
197
|
+
environment = get_config_environment_vars(
|
198
|
+
schedule_id=schedule_id,
|
199
|
+
pipeline_run_id=pipeline_run_id,
|
200
|
+
)
|
190
201
|
|
191
202
|
prevent_client_side_caching = handle_bool_env_var(
|
192
203
|
ENV_ZENML_PREVENT_CLIENT_SIDE_CACHING, default=False
|