zenml-nightly 0.68.1.dev20241106__py3-none-any.whl → 0.70.0.dev20241116__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/utils.py +138 -79
- 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/aws/orchestrators/sagemaker_orchestrator.py +20 -18
- zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
- 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/lightning/orchestrators/lightning_orchestrator.py +29 -9
- zenml/integrations/tensorboard/visualizers/tensorboard_visualizer.py +60 -54
- zenml/integrations/vllm/services/vllm_deployment.py +16 -7
- 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 +21 -13
- zenml/orchestrators/utils.py +45 -26
- 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 +3 -2
- zenml/steps/utils.py +13 -2
- 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.dev20241106.dist-info → zenml_nightly-0.70.0.dev20241116.dist-info}/METADATA +2 -2
- {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.70.0.dev20241116.dist-info}/RECORD +194 -179
- 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.dev20241106.dist-info → zenml_nightly-0.70.0.dev20241116.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.70.0.dev20241116.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.70.0.dev20241116.dist-info}/entry_points.txt +0 -0
@@ -34,7 +34,7 @@ from pydantic import (
|
|
34
34
|
|
35
35
|
from zenml.config.source import Source, SourceWithValidator
|
36
36
|
from zenml.constants import STR_FIELD_MAX_LENGTH, TEXT_FIELD_MAX_LENGTH
|
37
|
-
from zenml.enums import ArtifactType, GenericFilterOps
|
37
|
+
from zenml.enums import ArtifactSaveType, ArtifactType, GenericFilterOps
|
38
38
|
from zenml.logger import get_logger
|
39
39
|
from zenml.metadata.metadata_types import MetadataType
|
40
40
|
from zenml.models.v2.base.filter import StrFilter
|
@@ -57,9 +57,6 @@ if TYPE_CHECKING:
|
|
57
57
|
ArtifactVisualizationResponse,
|
58
58
|
)
|
59
59
|
from zenml.models.v2.core.pipeline_run import PipelineRunResponse
|
60
|
-
from zenml.models.v2.core.run_metadata import (
|
61
|
-
RunMetadataResponse,
|
62
|
-
)
|
63
60
|
from zenml.models.v2.core.step_run import StepRunResponse
|
64
61
|
|
65
62
|
logger = get_logger(__name__)
|
@@ -107,6 +104,9 @@ class ArtifactVersionRequest(WorkspaceScopedRequest):
|
|
107
104
|
visualizations: Optional[List["ArtifactVisualizationRequest"]] = Field(
|
108
105
|
default=None, title="Visualizations of the artifact."
|
109
106
|
)
|
107
|
+
save_type: ArtifactSaveType = Field(
|
108
|
+
title="The save type of the artifact version.",
|
109
|
+
)
|
110
110
|
metadata: Optional[Dict[str, MetadataType]] = Field(
|
111
111
|
default=None, title="Metadata of the artifact version."
|
112
112
|
)
|
@@ -193,6 +193,9 @@ class ArtifactVersionResponseBody(WorkspaceScopedResponseBody):
|
|
193
193
|
title="The ID of the pipeline run that generated this artifact version.",
|
194
194
|
default=None,
|
195
195
|
)
|
196
|
+
save_type: ArtifactSaveType = Field(
|
197
|
+
title="The save type of the artifact version.",
|
198
|
+
)
|
196
199
|
artifact_store_id: Optional[UUID] = Field(
|
197
200
|
title="ID of the artifact store in which this artifact is stored.",
|
198
201
|
default=None,
|
@@ -230,7 +233,7 @@ class ArtifactVersionResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
230
233
|
visualizations: Optional[List["ArtifactVisualizationResponse"]] = Field(
|
231
234
|
default=None, title="Visualizations of the artifact."
|
232
235
|
)
|
233
|
-
run_metadata: Dict[str,
|
236
|
+
run_metadata: Dict[str, MetadataType] = Field(
|
234
237
|
default={}, title="Metadata of the artifact."
|
235
238
|
)
|
236
239
|
|
@@ -313,6 +316,15 @@ class ArtifactVersionResponse(
|
|
313
316
|
"""
|
314
317
|
return self.get_body().producer_pipeline_run_id
|
315
318
|
|
319
|
+
@property
|
320
|
+
def save_type(self) -> ArtifactSaveType:
|
321
|
+
"""The `save_type` property.
|
322
|
+
|
323
|
+
Returns:
|
324
|
+
the value of the property.
|
325
|
+
"""
|
326
|
+
return self.get_body().save_type
|
327
|
+
|
316
328
|
@property
|
317
329
|
def artifact_store_id(self) -> Optional[UUID]:
|
318
330
|
"""The `artifact_store_id` property.
|
@@ -343,7 +355,7 @@ class ArtifactVersionResponse(
|
|
343
355
|
return self.get_metadata().visualizations
|
344
356
|
|
345
357
|
@property
|
346
|
-
def run_metadata(self) -> Dict[str,
|
358
|
+
def run_metadata(self) -> Dict[str, MetadataType]:
|
347
359
|
"""The `metadata` property.
|
348
360
|
|
349
361
|
Returns:
|
@@ -462,6 +474,7 @@ class ArtifactVersionFilter(WorkspaceScopedTaggableFilter):
|
|
462
474
|
"user",
|
463
475
|
"model",
|
464
476
|
"pipeline_run",
|
477
|
+
"run_metadata",
|
465
478
|
]
|
466
479
|
artifact_id: Optional[Union[UUID, str]] = Field(
|
467
480
|
default=None,
|
@@ -533,6 +546,10 @@ class ArtifactVersionFilter(WorkspaceScopedTaggableFilter):
|
|
533
546
|
description="Name/ID of a pipeline run that is associated with this "
|
534
547
|
"artifact version.",
|
535
548
|
)
|
549
|
+
run_metadata: Optional[Dict[str, str]] = Field(
|
550
|
+
default=None,
|
551
|
+
description="The run_metadata to filter the artifact versions by.",
|
552
|
+
)
|
536
553
|
|
537
554
|
model_config = ConfigDict(protected_namespaces=())
|
538
555
|
|
@@ -552,6 +569,7 @@ class ArtifactVersionFilter(WorkspaceScopedTaggableFilter):
|
|
552
569
|
ModelSchema,
|
553
570
|
ModelVersionArtifactSchema,
|
554
571
|
PipelineRunSchema,
|
572
|
+
RunMetadataSchema,
|
555
573
|
StepRunInputArtifactSchema,
|
556
574
|
StepRunOutputArtifactSchema,
|
557
575
|
StepRunSchema,
|
@@ -633,6 +651,23 @@ class ArtifactVersionFilter(WorkspaceScopedTaggableFilter):
|
|
633
651
|
)
|
634
652
|
custom_filters.append(pipeline_run_filter)
|
635
653
|
|
654
|
+
if self.run_metadata is not None:
|
655
|
+
from zenml.enums import MetadataResourceTypes
|
656
|
+
|
657
|
+
for key, value in self.run_metadata.items():
|
658
|
+
additional_filter = and_(
|
659
|
+
RunMetadataSchema.resource_id == ArtifactVersionSchema.id,
|
660
|
+
RunMetadataSchema.resource_type
|
661
|
+
== MetadataResourceTypes.ARTIFACT_VERSION,
|
662
|
+
RunMetadataSchema.key == key,
|
663
|
+
self.generate_custom_query_conditions_for_column(
|
664
|
+
value=value,
|
665
|
+
table=RunMetadataSchema,
|
666
|
+
column="value",
|
667
|
+
),
|
668
|
+
)
|
669
|
+
custom_filters.append(additional_filter)
|
670
|
+
|
636
671
|
return custom_filters
|
637
672
|
|
638
673
|
|
@@ -671,7 +706,7 @@ class LazyArtifactVersionResponse(ArtifactVersionResponse):
|
|
671
706
|
)
|
672
707
|
|
673
708
|
@property
|
674
|
-
def run_metadata(self) -> Dict[str,
|
709
|
+
def run_metadata(self) -> Dict[str, MetadataType]:
|
675
710
|
"""The `metadata` property in lazy loading mode.
|
676
711
|
|
677
712
|
Returns:
|
@@ -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
|
-
)
|