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.
Files changed (232) hide show
  1. README.md +1 -1
  2. RELEASE_NOTES.md +77 -0
  3. zenml/VERSION +1 -1
  4. zenml/__init__.py +2 -0
  5. zenml/artifacts/external_artifact.py +2 -1
  6. zenml/artifacts/utils.py +138 -79
  7. zenml/cli/base.py +4 -4
  8. zenml/cli/model.py +1 -6
  9. zenml/cli/stack.py +1 -0
  10. zenml/client.py +29 -74
  11. zenml/config/server_config.py +17 -1
  12. zenml/constants.py +2 -7
  13. zenml/data_validators/base_data_validator.py +2 -2
  14. zenml/enums.py +20 -4
  15. zenml/exceptions.py +4 -0
  16. zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +20 -18
  17. zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
  18. zenml/integrations/deepchecks/data_validators/deepchecks_data_validator.py +1 -1
  19. zenml/integrations/evidently/__init__.py +1 -1
  20. zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +1 -1
  21. zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +29 -9
  22. zenml/integrations/tensorboard/visualizers/tensorboard_visualizer.py +60 -54
  23. zenml/integrations/vllm/services/vllm_deployment.py +16 -7
  24. zenml/metadata/lazy_load.py +20 -7
  25. zenml/model/model.py +17 -64
  26. zenml/model/utils.py +5 -0
  27. zenml/models/__init__.py +0 -12
  28. zenml/models/v2/base/filter.py +121 -8
  29. zenml/models/v2/core/artifact_version.py +42 -7
  30. zenml/models/v2/core/model_version.py +26 -5
  31. zenml/models/v2/core/pipeline_run.py +25 -6
  32. zenml/models/v2/core/run_metadata.py +2 -217
  33. zenml/models/v2/core/step_run.py +62 -24
  34. zenml/orchestrators/base_orchestrator.py +12 -1
  35. zenml/orchestrators/input_utils.py +44 -19
  36. zenml/orchestrators/step_launcher.py +4 -3
  37. zenml/orchestrators/step_run_utils.py +19 -15
  38. zenml/orchestrators/step_runner.py +21 -13
  39. zenml/orchestrators/utils.py +45 -26
  40. zenml/stack_deployments/aws_stack_deployment.py +23 -6
  41. zenml/stack_deployments/azure_stack_deployment.py +28 -5
  42. zenml/stack_deployments/gcp_stack_deployment.py +25 -8
  43. zenml/stack_deployments/stack_deployment.py +3 -5
  44. zenml/steps/base_step.py +1 -1
  45. zenml/steps/entrypoint_function_utils.py +3 -5
  46. zenml/steps/step_context.py +3 -2
  47. zenml/steps/utils.py +13 -2
  48. zenml/utils/metadata_utils.py +335 -0
  49. zenml/zen_server/auth.py +221 -3
  50. zenml/zen_server/cache.py +208 -0
  51. zenml/zen_server/dashboard/assets/{404-DT4QRUqN.js → 404-NVXKFp-x.js} +1 -1
  52. zenml/zen_server/dashboard/assets/{@radix-DP6vWzyx.js → @radix-DeK6qiuw.js} +1 -1
  53. zenml/zen_server/dashboard/assets/{@react-router-BMhZulnd.js → @react-router-B3Z5rLr2.js} +1 -1
  54. zenml/zen_server/dashboard/assets/{@reactflow-8U9qNlMR.js → @reactflow-CK0KJUen.js} +2 -2
  55. zenml/zen_server/dashboard/assets/{@tanstack-BUCbhJyH.js → @tanstack-DT5WLu9C.js} +1 -1
  56. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-DezXKmDf.js +1 -0
  57. zenml/zen_server/dashboard/assets/{CodeSnippet-CqybNv0k.js → CodeSnippet-JzR8CEtw.js} +2 -2
  58. zenml/zen_server/dashboard/assets/{CollapsibleCard-0r_8G2Lj.js → CollapsibleCard-DQW_ktMO.js} +1 -1
  59. zenml/zen_server/dashboard/assets/{Commands-BDjgBQKi.js → Commands-DL2kwkRd.js} +1 -1
  60. zenml/zen_server/dashboard/assets/ComponentBadge-D_g62Wv8.js +1 -0
  61. zenml/zen_server/dashboard/assets/{CopyButton-C745BrKi.js → CopyButton-LNcWaa14.js} +1 -1
  62. zenml/zen_server/dashboard/assets/{CsvVizualization-PpAq0CeZ.js → CsvVizualization-DknpE5ej.js} +5 -5
  63. zenml/zen_server/dashboard/assets/{DialogItem-DcVCZEew.js → DialogItem-Bxf8FuAT.js} +1 -1
  64. zenml/zen_server/dashboard/assets/{DisplayDate-BeXgUG_C.js → DisplayDate-CDMUcQHS.js} +1 -1
  65. zenml/zen_server/dashboard/assets/{EmptyState-DeK7H4pr.js → EmptyState-BzdlCwp3.js} +1 -1
  66. zenml/zen_server/dashboard/assets/{Error-BMlzibXj.js → Error-DYflYyps.js} +1 -1
  67. zenml/zen_server/dashboard/assets/ExecutionStatus-C7zyIQKZ.js +1 -0
  68. zenml/zen_server/dashboard/assets/{Helpbox-BLf40fLV.js → Helpbox-oYSGpLqd.js} +1 -1
  69. zenml/zen_server/dashboard/assets/{Infobox-BwisKifi.js → Infobox-Cx4xGoXR.js} +1 -1
  70. zenml/zen_server/dashboard/assets/{InlineAvatar-jEgodSgX.js → InlineAvatar-DiGOWNKF.js} +1 -1
  71. zenml/zen_server/dashboard/assets/{Lock-3lLt1ih0.js → Lock-CYYy18Mm.js} +1 -1
  72. zenml/zen_server/dashboard/assets/{MarkdownVisualization-8O9kTr-2.js → MarkdownVisualization-ylXaAxev.js} +1 -1
  73. zenml/zen_server/dashboard/assets/NestedCollapsible-DYbgyKxK.js +1 -0
  74. zenml/zen_server/dashboard/assets/{NumberBox-T9eELfLZ.js → NumberBox-Dtp3J6g5.js} +1 -1
  75. zenml/zen_server/dashboard/assets/Partials-03iZf8-N.js +1 -0
  76. zenml/zen_server/dashboard/assets/{PasswordChecker-CW0kqY0W.js → PasswordChecker-B0nadgh6.js} +1 -1
  77. zenml/zen_server/dashboard/assets/ProBadge-D_EB8HNo.js +1 -0
  78. zenml/zen_server/dashboard/assets/ProCta-DqNS4v3x.js +1 -0
  79. zenml/zen_server/dashboard/assets/ProviderIcon-Bki2aw8w.js +1 -0
  80. zenml/zen_server/dashboard/assets/{ProviderRadio-BROY1700.js → ProviderRadio-8f43sPD4.js} +1 -1
  81. zenml/zen_server/dashboard/assets/RunSelector-DkPiIiNr.js +1 -0
  82. zenml/zen_server/dashboard/assets/RunsBody-07YEO7qI.js +1 -0
  83. zenml/zen_server/dashboard/assets/SearchField-lp1KgU4e.js +1 -0
  84. zenml/zen_server/dashboard/assets/{SecretTooltip-C_qByGWB.js → SecretTooltip-CgnbyeOx.js} +1 -1
  85. zenml/zen_server/dashboard/assets/{SetPassword-7pRB00El.js → SetPassword-CpP418A2.js} +1 -1
  86. zenml/zen_server/dashboard/assets/StackList-WvuKQusZ.js +1 -0
  87. zenml/zen_server/dashboard/assets/Tabs-BktHkCJJ.js +1 -0
  88. zenml/zen_server/dashboard/assets/Tick-BlMoIlJT.js +1 -0
  89. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DckMEkFf.js → UpdatePasswordSchemas-Sc0A0pP-.js} +1 -1
  90. zenml/zen_server/dashboard/assets/{UsageReason-DVceN14P.js → UsageReason-YYduL4fj.js} +1 -1
  91. zenml/zen_server/dashboard/assets/{WizardFooter-CW0Cvd70.js → WizardFooter-dgmizSJC.js} +1 -1
  92. zenml/zen_server/dashboard/assets/all-pipeline-runs-query-D-c2G6lV.js +1 -0
  93. zenml/zen_server/dashboard/assets/check-DloQpStc.js +1 -0
  94. zenml/zen_server/dashboard/assets/{check-circle-Dwxliy1Z.js → check-circle-jNbX5-sR.js} +1 -1
  95. zenml/zen_server/dashboard/assets/{chevron-down-8wLBS5pQ.js → chevron-down-6JyMkfjR.js} +1 -1
  96. zenml/zen_server/dashboard/assets/{chevron-right-double-DoD8iXWM.js → chevron-right-double-D7ojK9Co.js} +1 -1
  97. zenml/zen_server/dashboard/assets/{code-browser-CZUQs3Wa.js → code-browser-CUFUIHfp.js} +1 -1
  98. zenml/zen_server/dashboard/assets/{copy-CaSMXwiU.js → copy-C8XQA2Ug.js} +1 -1
  99. zenml/zen_server/dashboard/assets/create-stack-DM_JPgef.js +1 -0
  100. zenml/zen_server/dashboard/assets/delete-run-CJdh1P_h.js +1 -0
  101. zenml/zen_server/dashboard/assets/{docker-BFNgg-z3.js → docker-BdA9vrnW.js} +1 -1
  102. zenml/zen_server/dashboard/assets/{dots-horizontal-DK5Duzx4.js → dots-horizontal-otGBOSDJ.js} +1 -1
  103. zenml/zen_server/dashboard/assets/{form-schemas-1AyOCx90.js → form-schemas-K6FYKjwa.js} +1 -1
  104. zenml/zen_server/dashboard/assets/{gcp-7M2Yf3ZK.js → gcp-CFtm4BA7.js} +1 -1
  105. zenml/zen_server/dashboard/assets/{help-Dam461dC.js → help-Cc9bBIJH.js} +1 -1
  106. zenml/zen_server/dashboard/assets/index-B1mVPYxf.js +1 -0
  107. zenml/zen_server/dashboard/assets/index-BAkC7FXi.js +1 -0
  108. zenml/zen_server/dashboard/assets/{index-QQb7wQEC.js → index-CCOPpudF.js} +8 -8
  109. zenml/zen_server/dashboard/assets/index-CEV4Cvaf.js +1 -0
  110. zenml/zen_server/dashboard/assets/index-DlGvJQPn.css +1 -0
  111. zenml/zen_server/dashboard/assets/{index-BVJ8n2-j.js → index-Uu49AX48.js} +1 -1
  112. zenml/zen_server/dashboard/assets/{index.esm-cuVep_NJ.js → index.esm-Dy6Z9Ung.js} +1 -1
  113. zenml/zen_server/dashboard/assets/{kubernetes--g7r02Zu.js → kubernetes-B2wmAJ1d.js} +1 -1
  114. zenml/zen_server/dashboard/assets/{layout-DCSYN7-C.js → layout-BtHBmE4w.js} +1 -1
  115. zenml/zen_server/dashboard/assets/{link-external-CBEk6kEG.js → link-external-b9AXw_sW.js} +1 -1
  116. zenml/zen_server/dashboard/assets/{login-mutation-DTcAFP1l.js → login-mutation-hf-lK87O.js} +1 -1
  117. zenml/zen_server/dashboard/assets/{logs-D5bdJGur.js → logs-WMSM52RF.js} +1 -1
  118. zenml/zen_server/dashboard/assets/{not-found-Cc-JkRH2.js → not-found-BGirLjU-.js} +1 -1
  119. zenml/zen_server/dashboard/assets/{package-Cs35Szwh.js → package-C6uypY4h.js} +1 -1
  120. zenml/zen_server/dashboard/assets/page-0JE_-Ec1.js +1 -0
  121. zenml/zen_server/dashboard/assets/{page-DH_Z7iW1.js → page-6m6yHHlE.js} +1 -1
  122. zenml/zen_server/dashboard/assets/page-BDigxVpo.js +1 -0
  123. zenml/zen_server/dashboard/assets/page-BR68V0V1.js +1 -0
  124. zenml/zen_server/dashboard/assets/page-BRLpxOt0.js +1 -0
  125. zenml/zen_server/dashboard/assets/{page-BQQKaabe.js → page-BU7huvKw.js} +3 -3
  126. zenml/zen_server/dashboard/assets/page-BvqLv2Ky.js +1 -0
  127. zenml/zen_server/dashboard/assets/page-C00YAkaB.js +1 -0
  128. zenml/zen_server/dashboard/assets/{page-N4qoPHKb.js → page-CD-DcWoy.js} +1 -1
  129. zenml/zen_server/dashboard/assets/page-COXXJj1k.js +1 -0
  130. zenml/zen_server/dashboard/assets/page-CbpvrsDL.js +1 -0
  131. zenml/zen_server/dashboard/assets/page-CdMWnQak.js +1 -0
  132. zenml/zen_server/dashboard/assets/{page-ClUVkl-O.js → page-CjGdWY13.js} +1 -1
  133. zenml/zen_server/dashboard/assets/page-CwxrFarU.js +1 -0
  134. zenml/zen_server/dashboard/assets/{page-DLixvR-7.js → page-D01JhjQB.js} +1 -1
  135. zenml/zen_server/dashboard/assets/page-D6uU2ax4.js +1 -0
  136. zenml/zen_server/dashboard/assets/page-D7S3aCbF.js +1 -0
  137. zenml/zen_server/dashboard/assets/{page-9yplj5JT.js → page-DLC-bNBP.js} +1 -1
  138. zenml/zen_server/dashboard/assets/page-DXSTpqRD.js +1 -0
  139. zenml/zen_server/dashboard/assets/{page-DzpVUZ8f.js → page-DakHVWXF.js} +1 -1
  140. zenml/zen_server/dashboard/assets/{page-DIOXwhiD.js → page-Df-Fw0aq.js} +1 -1
  141. zenml/zen_server/dashboard/assets/{page-B-y2XKIc.js → page-DfbXf_8s.js} +1 -1
  142. zenml/zen_server/dashboard/assets/page-DjRJCGb3.js +1 -0
  143. zenml/zen_server/dashboard/assets/{page-C0N5q3l7.js → page-Djikxq_S.js} +1 -1
  144. zenml/zen_server/dashboard/assets/page-Dnovpa0i.js +3 -0
  145. zenml/zen_server/dashboard/assets/page-Dot3LPmL.js +1 -0
  146. zenml/zen_server/dashboard/assets/page-Vcxara9U.js +1 -0
  147. zenml/zen_server/dashboard/assets/page-Xynx4btY.js +14 -0
  148. zenml/zen_server/dashboard/assets/page-YpKAqVSa.js +1 -0
  149. zenml/zen_server/dashboard/assets/page-yYC9OI-E.js +1 -0
  150. zenml/zen_server/dashboard/assets/{persist-DNb5cdrU.js → persist-Coz7ZWvz.js} +1 -1
  151. zenml/zen_server/dashboard/assets/{persist-CP0JmYZ4.js → persist-GjC8PZoC.js} +1 -1
  152. zenml/zen_server/dashboard/assets/{plus-C9IxgN2M.js → plus-tf1V2hTJ.js} +1 -1
  153. zenml/zen_server/dashboard/assets/{refresh-BVu22P_C.js → refresh-BjOeWlEq.js} +1 -1
  154. zenml/zen_server/dashboard/assets/{rocket-CONEmRmB.js → rocket-DjT2cDvG.js} +1 -1
  155. zenml/zen_server/dashboard/assets/sharedSchema-CQb14VSr.js +14 -0
  156. zenml/zen_server/dashboard/assets/stack-detail-query-OPEW-cDJ.js +1 -0
  157. zenml/zen_server/dashboard/assets/{tick-circle-CM1ZScbQ.js → tick-circle-BEX_Tp4v.js} +1 -1
  158. zenml/zen_server/dashboard/assets/{trash-DkJHMOg7.js → trash-arLUMWMS.js} +1 -1
  159. zenml/zen_server/dashboard/assets/{update-server-settings-mutation-DsU8cNVl.js → update-server-settings-mutation-LwuQfHYn.js} +1 -1
  160. zenml/zen_server/dashboard/assets/upgrade-form-CwRHBuXB.webp +0 -0
  161. zenml/zen_server/dashboard/assets/url-CkvKAnwF.js +1 -0
  162. zenml/zen_server/dashboard/assets/{zod-D89GC_vc.js → zod-BwEbpOxH.js} +1 -1
  163. zenml/zen_server/dashboard/index.html +7 -7
  164. zenml/zen_server/deploy/helm/Chart.yaml +1 -1
  165. zenml/zen_server/deploy/helm/README.md +2 -2
  166. zenml/zen_server/exceptions.py +2 -0
  167. zenml/zen_server/jwt.py +30 -13
  168. zenml/zen_server/rbac/endpoint_utils.py +43 -1
  169. zenml/zen_server/rbac/utils.py +0 -2
  170. zenml/zen_server/routers/artifact_version_endpoints.py +27 -1
  171. zenml/zen_server/routers/auth_endpoints.py +134 -102
  172. zenml/zen_server/routers/logs_endpoints.py +66 -0
  173. zenml/zen_server/routers/workspaces_endpoints.py +3 -4
  174. zenml/zen_server/template_execution/utils.py +14 -16
  175. zenml/zen_server/utils.py +27 -0
  176. zenml/zen_server/zen_server_api.py +6 -3
  177. zenml/zen_stores/migrations/versions/0.70.0_release.py +23 -0
  178. zenml/zen_stores/migrations/versions/1cb6477f72d6_move_artifact_save_type.py +99 -0
  179. zenml/zen_stores/migrations/versions/904464ea4041_add_pipeline_model_run_unique_constraints.py +192 -0
  180. zenml/zen_stores/migrations/versions/b557b2871693_update_step_run_input_types.py +33 -0
  181. zenml/zen_stores/rest_zen_store.py +68 -64
  182. zenml/zen_stores/schemas/artifact_schemas.py +8 -1
  183. zenml/zen_stores/schemas/model_schemas.py +27 -3
  184. zenml/zen_stores/schemas/pipeline_run_schemas.py +6 -1
  185. zenml/zen_stores/schemas/pipeline_schemas.py +8 -2
  186. zenml/zen_stores/schemas/run_metadata_schemas.py +1 -48
  187. zenml/zen_stores/schemas/step_run_schemas.py +18 -10
  188. zenml/zen_stores/sql_zen_store.py +283 -219
  189. zenml/zen_stores/zen_store_interface.py +15 -42
  190. {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.70.0.dev20241116.dist-info}/METADATA +2 -2
  191. {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.70.0.dev20241116.dist-info}/RECORD +194 -179
  192. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-C6N2rGrB.js +0 -1
  193. zenml/zen_server/dashboard/assets/ComponentBadge-DUiEYJHu.js +0 -1
  194. zenml/zen_server/dashboard/assets/ComponentFallbackDialog-BFoH5K4V.js +0 -1
  195. zenml/zen_server/dashboard/assets/ComponentIcon-CAIoUis2.js +0 -1
  196. zenml/zen_server/dashboard/assets/Partials-YPBB3V4q.js +0 -1
  197. zenml/zen_server/dashboard/assets/ProviderIcon-Bb3Xha5A.js +0 -1
  198. zenml/zen_server/dashboard/assets/RunSelector-DCiL3M1c.js +0 -1
  199. zenml/zen_server/dashboard/assets/SearchField-DfUiGFVd.js +0 -1
  200. zenml/zen_server/dashboard/assets/Tick-CykQFPj2.js +0 -1
  201. zenml/zen_server/dashboard/assets/cloud-only-B-s_HMDm.js +0 -1
  202. zenml/zen_server/dashboard/assets/codespaces-BitYDX9d.gif +0 -0
  203. zenml/zen_server/dashboard/assets/create-stack-CEmaPZ4c.js +0 -1
  204. zenml/zen_server/dashboard/assets/delete-run-D-LKbGyz.js +0 -1
  205. zenml/zen_server/dashboard/assets/index-Bpmj40BI.js +0 -1
  206. zenml/zen_server/dashboard/assets/index-CbU4Ln_E.css +0 -1
  207. zenml/zen_server/dashboard/assets/index-DKPhqP2B.js +0 -1
  208. zenml/zen_server/dashboard/assets/page-BBpOxVcY.js +0 -1
  209. zenml/zen_server/dashboard/assets/page-BRInM1Lg.js +0 -1
  210. zenml/zen_server/dashboard/assets/page-BjjlMk7s.js +0 -1
  211. zenml/zen_server/dashboard/assets/page-Bvd7YH2A.js +0 -1
  212. zenml/zen_server/dashboard/assets/page-CT3Nep8W.js +0 -1
  213. zenml/zen_server/dashboard/assets/page-C_f47pBf.js +0 -1
  214. zenml/zen_server/dashboard/assets/page-Cmv8C_yM.js +0 -3
  215. zenml/zen_server/dashboard/assets/page-CyN2bdWG.js +0 -1
  216. zenml/zen_server/dashboard/assets/page-CzzXH4fs.js +0 -1
  217. zenml/zen_server/dashboard/assets/page-DTlGjgnG.js +0 -1
  218. zenml/zen_server/dashboard/assets/page-Dbpl86h0.js +0 -1
  219. zenml/zen_server/dashboard/assets/page-Ddgy6kDS.js +0 -1
  220. zenml/zen_server/dashboard/assets/page-DtCAfBLy.js +0 -9
  221. zenml/zen_server/dashboard/assets/page-Dx16z7nA.js +0 -1
  222. zenml/zen_server/dashboard/assets/page-McUyYbo1.js +0 -1
  223. zenml/zen_server/dashboard/assets/page-T1P3RyAR.js +0 -1
  224. zenml/zen_server/dashboard/assets/page-bKaULTGG.js +0 -1
  225. zenml/zen_server/dashboard/assets/page-sbXUJy9t.js +0 -1
  226. zenml/zen_server/dashboard/assets/sharedSchema-TMLu-nYQ.js +0 -14
  227. zenml/zen_server/dashboard/assets/stack-detail-query-xmYxSsUY.js +0 -1
  228. zenml/zen_server/dashboard/assets/url-D5le3J4q.js +0 -1
  229. zenml/zen_server/routers/run_metadata_endpoints.py +0 -96
  230. {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.70.0.dev20241116.dist-info}/LICENSE +0 -0
  231. {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.70.0.dev20241116.dist-info}/WHEEL +0 -0
  232. {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, "RunMetadataResponse"] = Field(
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, "RunMetadataResponse"]:
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, "RunMetadataResponse"]:
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, "RunMetadataResponse"] = Field(
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) -> Optional[Dict[str, "RunMetadataResponse"]]:
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, "RunMetadataResponse"] = Field(
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, "RunMetadataResponse"]:
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 Any, Dict, Optional, Union
16
+ from typing import Dict, Optional
17
17
  from uuid import UUID
18
18
 
19
- from pydantic import Field, field_validator
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
- )