zenml-nightly 0.82.1.dev20250526__py3-none-any.whl → 0.82.1.dev20250528__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 (311) hide show
  1. zenml/VERSION +1 -1
  2. zenml/artifacts/utils.py +8 -0
  3. zenml/cli/base.py +6 -1
  4. zenml/cli/model.py +16 -36
  5. zenml/cli/server.py +8 -3
  6. zenml/client.py +20 -4
  7. zenml/client_lazy_loader.py +2 -0
  8. zenml/config/docker_settings.py +15 -2
  9. zenml/enums.py +3 -0
  10. zenml/event_hub/event_hub.py +1 -1
  11. zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +1 -1
  12. zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py +1 -1
  13. zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +3 -0
  14. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +37 -26
  15. zenml/logging/step_logging.py +17 -4
  16. zenml/login/web_login.py +1 -1
  17. zenml/model/model.py +13 -23
  18. zenml/models/__init__.py +39 -2
  19. zenml/models/v2/base/scoped.py +34 -15
  20. zenml/models/v2/core/artifact.py +10 -9
  21. zenml/models/v2/core/artifact_version.py +16 -16
  22. zenml/models/v2/core/logs.py +8 -50
  23. zenml/models/v2/core/model.py +10 -10
  24. zenml/models/v2/core/model_version.py +155 -88
  25. zenml/models/v2/core/pipeline.py +10 -11
  26. zenml/models/v2/core/pipeline_deployment.py +1 -9
  27. zenml/models/v2/core/pipeline_run.py +10 -17
  28. zenml/models/v2/core/run_template.py +10 -10
  29. zenml/models/v2/core/step_run.py +100 -16
  30. zenml/models/v2/core/tag.py +5 -4
  31. zenml/models/v2/misc/pipeline_run_dag.py +46 -0
  32. zenml/orchestrators/base_orchestrator.py +8 -19
  33. zenml/orchestrators/cache_utils.py +48 -1
  34. zenml/orchestrators/input_utils.py +35 -39
  35. zenml/orchestrators/step_launcher.py +1 -1
  36. zenml/orchestrators/step_run_utils.py +26 -10
  37. zenml/pipelines/pipeline_definition.py +3 -3
  38. zenml/pipelines/run_utils.py +2 -3
  39. zenml/service_connectors/service_connector.py +5 -1
  40. zenml/stack/stack_component.py +1 -4
  41. zenml/steps/step_context.py +1 -1
  42. zenml/utils/dashboard_utils.py +3 -3
  43. zenml/zen_server/auth.py +6 -3
  44. zenml/zen_server/cloud_utils.py +2 -2
  45. zenml/zen_server/dashboard/assets/{404-_AtuLtaX.js → 404-DmJUgorp.js} +1 -1
  46. zenml/zen_server/dashboard/assets/{@radix-C7hRs6Kx.js → @radix-Cdvw4jJ8.js} +1 -1
  47. zenml/zen_server/dashboard/assets/{@react-router-CNP6g_RL.js → @react-router-DeDfXbUF.js} +5 -5
  48. zenml/zen_server/dashboard/assets/{@reactflow-CQi1Z1Wq.js → @reactflow-8OCk19Fi.js} +1 -1
  49. zenml/zen_server/dashboard/assets/{@tanstack-CSxjHCME.js → @tanstack-5gTMR7G2.js} +4 -4
  50. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-CZW4QyWn.js +1 -0
  51. zenml/zen_server/dashboard/assets/ButtonGroup-DFWWFGUE.js +1 -0
  52. zenml/zen_server/dashboard/assets/{CodeSnippet-CvI6D0wx.js → CodeSnippet-D2HkkAGr.js} +1 -1
  53. zenml/zen_server/dashboard/assets/CollapsibleCard-CnS09ljw.js +1 -0
  54. zenml/zen_server/dashboard/assets/{ComponentBadge-DKw7Gndh.js → ComponentBadge-CDgdd0Ks.js} +1 -1
  55. zenml/zen_server/dashboard/assets/ComponentIcon-CbbOc7lb.js +1 -0
  56. zenml/zen_server/dashboard/assets/{DeleteAlertDialog-DVvXt-S6.js → DeleteAlertDialog-VIOMDLmx.js} +1 -1
  57. zenml/zen_server/dashboard/assets/DialogItem-ClFCqxEp.js +1 -0
  58. zenml/zen_server/dashboard/assets/{DisplayDate-CYVBBSgr.js → DisplayDate-8RESqe5H.js} +1 -1
  59. zenml/zen_server/dashboard/assets/{EmptyState-M1jafpg6.js → EmptyState-CjrgDtVk.js} +1 -1
  60. zenml/zen_server/dashboard/assets/{Error-BWaXP0VK.js → Error-CQzjbDcN.js} +1 -1
  61. zenml/zen_server/dashboard/assets/ExecutionStatus-CWreILP0.js +1 -0
  62. zenml/zen_server/dashboard/assets/{Helpbox-iE1xLmiZ.js → Helpbox-CiKxG5_X.js} +1 -1
  63. zenml/zen_server/dashboard/assets/Infobox-CGxFvqzi.js +1 -0
  64. zenml/zen_server/dashboard/assets/LeftSideMenu-DCsKdIjC.js +1 -0
  65. zenml/zen_server/dashboard/assets/{Lock-DW-0_M0o.js → Lock-CrIAdQo6.js} +1 -1
  66. zenml/zen_server/dashboard/assets/NestedCollapsible-3M4llYtH.js +1 -0
  67. zenml/zen_server/dashboard/assets/NumberBox-C0mQktmV.js +1 -0
  68. zenml/zen_server/dashboard/assets/Partials-DSjkttlz.js +1 -0
  69. zenml/zen_server/dashboard/assets/{PasswordChecker-lYTOtNom.js → PasswordChecker-B88WjuCe.js} +1 -1
  70. zenml/zen_server/dashboard/assets/ProCta-Dm5cWKpS.js +1 -0
  71. zenml/zen_server/dashboard/assets/{ProviderIcon-DLo7t1lo.js → ProviderIcon-DPwMR6nF.js} +1 -1
  72. zenml/zen_server/dashboard/assets/ProviderRadio-DEDNRgAb.js +1 -0
  73. zenml/zen_server/dashboard/assets/RunsBody-BRBn1e2O.js +1 -0
  74. zenml/zen_server/dashboard/assets/SearchField-DY6-UbRT.js +1 -0
  75. zenml/zen_server/dashboard/assets/SecretTooltip-CZTRnaCV.js +1 -0
  76. zenml/zen_server/dashboard/assets/{SetPassword-DR-EiLI5.js → SetPassword-BjNGDC5e.js} +1 -1
  77. zenml/zen_server/dashboard/assets/SheetHeader-CASpN2Lz.js +1 -0
  78. zenml/zen_server/dashboard/assets/StackComponentList-Be1pQt9m.js +1 -0
  79. zenml/zen_server/dashboard/assets/StackList-BdiR5DvR.js +1 -0
  80. zenml/zen_server/dashboard/assets/StackName-ojLC6xdl.js +1 -0
  81. zenml/zen_server/dashboard/assets/Tabs-DNSKblCM.js +1 -0
  82. zenml/zen_server/dashboard/assets/Tick-BPrWnNlN.js +1 -0
  83. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DbFEaezI.js → UpdatePasswordSchemas-CNfKDo2Q.js} +1 -1
  84. zenml/zen_server/dashboard/assets/UsageReason-Cb-mpV8M.js +1 -0
  85. zenml/zen_server/dashboard/assets/{Wizard-CMI6Ksgz.js → Wizard-Dg8Pmn5A.js} +1 -1
  86. zenml/zen_server/dashboard/assets/WizardFooter-BcNDIvlQ.js +1 -0
  87. zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-BGASHYtF.js → all-pipeline-runs-query-DCdax7I5.js} +1 -1
  88. zenml/zen_server/dashboard/assets/{arrow-left-CwgF2MEM.js → arrow-left-MRXv5pAH.js} +1 -1
  89. zenml/zen_server/dashboard/assets/bulk-delete-C_kpIB9A.js +3 -0
  90. zenml/zen_server/dashboard/assets/{check-DK77doTf.js → check-B9QMTa3f.js} +1 -1
  91. zenml/zen_server/dashboard/assets/{check-circle-mvyzYvIW.js → check-circle-C4tYvbtw.js} +1 -1
  92. zenml/zen_server/dashboard/assets/{chevron-down-A-rmltmI.js → chevron-down-jbbQh82s.js} +1 -1
  93. zenml/zen_server/dashboard/assets/{chevron-right-double-uNWbJT-C.js → chevron-right-double-Dgp_gEsp.js} +1 -1
  94. zenml/zen_server/dashboard/assets/{clock-CPA5cYxq.js → clock-B_mTG8PH.js} +1 -1
  95. zenml/zen_server/dashboard/assets/{code-browser-j2EpcxIA.js → code-browser-CiD8qkBx.js} +1 -1
  96. zenml/zen_server/dashboard/assets/configuration-form-B2hmKGnF.js +1 -0
  97. zenml/zen_server/dashboard/assets/connectivity-4UKGMYnr.webp +0 -0
  98. zenml/zen_server/dashboard/assets/constants-1EZZxtay.js +1 -0
  99. zenml/zen_server/dashboard/assets/create-stack-TKmMtrkQ.js +1 -0
  100. zenml/zen_server/dashboard/assets/dates-Buh6SMo7.js +1 -0
  101. zenml/zen_server/dashboard/assets/delete-run-CCR9md_s.js +1 -0
  102. zenml/zen_server/dashboard/assets/eye-CbVlAYty.js +1 -0
  103. zenml/zen_server/dashboard/assets/{file-text-BdxZdjP_.js → file-text-Cd8wVfq5.js} +1 -1
  104. zenml/zen_server/dashboard/assets/form-DFJkaFDX.js +1 -0
  105. zenml/zen_server/dashboard/assets/form-schemas-CrznJVzA.js +1 -0
  106. zenml/zen_server/dashboard/assets/{gcp-CHNvgEss.js → gcp-B1I3Qvcx.js} +1 -1
  107. zenml/zen_server/dashboard/assets/{help-DyMolRxD.js → help-Co6aedki.js} +1 -1
  108. zenml/zen_server/dashboard/assets/index-BFqbGSck.js +308 -0
  109. zenml/zen_server/dashboard/assets/{index-CrhdX_qG.js → index-BjUu1mP4.js} +1 -1
  110. zenml/zen_server/dashboard/assets/{index-DR30v9MZ.js → index-DWpiv-Ft.js} +1 -1
  111. zenml/zen_server/dashboard/assets/index-DuhuqTCI.css +1 -0
  112. zenml/zen_server/dashboard/assets/index-U992soPJ.js +1 -0
  113. zenml/zen_server/dashboard/assets/index.es-C1gfATPn.js +14 -0
  114. zenml/zen_server/dashboard/assets/{index.esm-D7jFlf5N.js → index.esm-DhJo3mA6.js} +1 -1
  115. zenml/zen_server/dashboard/assets/info-QkbQz4QU.js +1 -0
  116. zenml/zen_server/dashboard/assets/{key-icon-DO4DPJHZ.js → key-icon-C07HKw8z.js} +1 -1
  117. zenml/zen_server/dashboard/assets/{layout-h3cbx8WZ.js → layout-DBbfEFBe.js} +1 -1
  118. zenml/zen_server/dashboard/assets/layout-Do9YI4QX.js +1 -0
  119. zenml/zen_server/dashboard/assets/login-mutation-D3tFP6Wm.js +1 -0
  120. zenml/zen_server/dashboard/assets/{logs-B5n0U7tB.js → logs-CQKlJjo0.js} +1 -1
  121. zenml/zen_server/dashboard/assets/{package-D1Mhqeh8.js → package-miExReQl.js} +1 -1
  122. zenml/zen_server/dashboard/assets/page-9RjCitFH.js +1 -0
  123. zenml/zen_server/dashboard/assets/page-B0PsXWiT.js +1 -0
  124. zenml/zen_server/dashboard/assets/page-BCrKmYIZ.js +1 -0
  125. zenml/zen_server/dashboard/assets/page-BcRI3-aR.js +29 -0
  126. zenml/zen_server/dashboard/assets/page-Be3R2uYn.js +1 -0
  127. zenml/zen_server/dashboard/assets/page-BgknnddT.js +1 -0
  128. zenml/zen_server/dashboard/assets/page-BrT0_zSJ.js +40 -0
  129. zenml/zen_server/dashboard/assets/page-Bs3W2FDi.js +1 -0
  130. zenml/zen_server/dashboard/assets/page-C210HcBA.js +1 -0
  131. zenml/zen_server/dashboard/assets/page-C6KaiZ_W.js +1 -0
  132. zenml/zen_server/dashboard/assets/page-CAJ8B0vb.js +1 -0
  133. zenml/zen_server/dashboard/assets/page-CAUYrfui.js +1 -0
  134. zenml/zen_server/dashboard/assets/page-CHxVhF3x.js +1 -0
  135. zenml/zen_server/dashboard/assets/{page-CSwZxZMQ.js → page-CN7lkvXr.js} +1 -1
  136. zenml/zen_server/dashboard/assets/page-CUaMMoPG.js +1 -0
  137. zenml/zen_server/dashboard/assets/page-Cal6XQ4U.js +1 -0
  138. zenml/zen_server/dashboard/assets/page-CdZCmszX.js +1 -0
  139. zenml/zen_server/dashboard/assets/page-ChGcZI_6.js +1 -0
  140. zenml/zen_server/dashboard/assets/page-CktmtZ8Z.js +1 -0
  141. zenml/zen_server/dashboard/assets/page-ClvmVesa.js +1 -0
  142. zenml/zen_server/dashboard/assets/page-CnbIYE80.js +1 -0
  143. zenml/zen_server/dashboard/assets/page-CoXzjeEY.js +1 -0
  144. zenml/zen_server/dashboard/assets/page-CtiuMP_r.js +1 -0
  145. zenml/zen_server/dashboard/assets/page-D9Hfx6GV.js +1 -0
  146. zenml/zen_server/dashboard/assets/page-D9iuB88h.js +1 -0
  147. zenml/zen_server/dashboard/assets/page-DCcuPZ8P.js +1 -0
  148. zenml/zen_server/dashboard/assets/page-DEohTSz6.js +1 -0
  149. zenml/zen_server/dashboard/assets/page-DJIGaUQ9.js +1 -0
  150. zenml/zen_server/dashboard/assets/page-DKK6ulgy.js +1 -0
  151. zenml/zen_server/dashboard/assets/page-DNjKHjnH.js +1 -0
  152. zenml/zen_server/dashboard/assets/page-DUK0Nd_1.js +1 -0
  153. zenml/zen_server/dashboard/assets/page-DUKbOhaD.js +1 -0
  154. zenml/zen_server/dashboard/assets/page-DYOucPtA.js +1 -0
  155. zenml/zen_server/dashboard/assets/page-DpqRelAy.js +1 -0
  156. zenml/zen_server/dashboard/assets/{page-ZfTtFicG.js → page-DwVPpCFg.js} +2 -2
  157. zenml/zen_server/dashboard/assets/page-XURWnYZP.js +1 -0
  158. zenml/zen_server/dashboard/assets/page-abw-2oeW.js +1 -0
  159. zenml/zen_server/dashboard/assets/page-akLcPcKw.js +1 -0
  160. zenml/zen_server/dashboard/assets/page-n9ejQ2V3.js +2 -0
  161. zenml/zen_server/dashboard/assets/page-sJjNT9xA.js +6 -0
  162. zenml/zen_server/dashboard/assets/{persist-UUym702q.js → persist-DWMWVP-y.js} +1 -1
  163. zenml/zen_server/dashboard/assets/{persist-D87V82eO.js → persist-Dec_w7aB.js} +1 -1
  164. zenml/zen_server/dashboard/assets/pipeline-CSUlkd50.js +1 -0
  165. zenml/zen_server/dashboard/assets/{plus-COjQg3AG.js → plus-Cl0_rCVF.js} +1 -1
  166. zenml/zen_server/dashboard/assets/{react-error-boundary.esm-fyoUBS25.js → react-error-boundary.esm-7_MuhCay.js} +1 -1
  167. zenml/zen_server/dashboard/assets/{refresh-CM5T3QeU.js → refresh-BcTM09NW.js} +1 -1
  168. zenml/zen_server/dashboard/assets/resource-tyes-list-o2LXiMay.js +1 -0
  169. zenml/zen_server/dashboard/assets/resource-type-tooltip-DwHrJstL.js +1 -0
  170. zenml/zen_server/dashboard/assets/service-connectors-DSEMwJ5A.js +1 -0
  171. zenml/zen_server/dashboard/assets/{service-BQ9KIhls.js → service-jxtvgks0.js} +2 -2
  172. zenml/zen_server/dashboard/assets/sharedSchema-BXzg0EZz.js +1 -0
  173. zenml/zen_server/dashboard/assets/stack-detail-query-Cm0fsgo-.js +1 -0
  174. zenml/zen_server/dashboard/assets/{terminal-square-DMtel8mb.js → terminal-XFL_4QN-.js} +1 -1
  175. zenml/zen_server/dashboard/assets/terminal-square-XFL_4QN-.js +1 -0
  176. zenml/zen_server/dashboard/assets/transform-CeZdrxDZ.js +1 -0
  177. zenml/zen_server/dashboard/assets/{trash-BWSZ7NRK.js → trash-DP6Tpp_E.js} +1 -1
  178. zenml/zen_server/dashboard/assets/type-guards-CNgPYg8l.js +1 -0
  179. zenml/zen_server/dashboard/assets/update-current-user-mutation-D5MjcQ6F.js +1 -0
  180. zenml/zen_server/dashboard/assets/update-server-settings-mutation-CmnxdxiK.js +1 -0
  181. zenml/zen_server/dashboard/assets/{zod-C0xYeTvL.js → zod-XdS2h1ws.js} +1 -1
  182. zenml/zen_server/dashboard/index.html +7 -7
  183. zenml/zen_server/rbac/utils.py +2 -2
  184. zenml/zen_server/rbac/zenml_cloud_rbac.py +4 -3
  185. zenml/zen_server/routers/auth_endpoints.py +2 -2
  186. zenml/zen_server/routers/devices_endpoints.py +8 -5
  187. zenml/zen_server/routers/pipeline_deployments_endpoints.py +1 -1
  188. zenml/zen_server/routers/pipelines_endpoints.py +1 -1
  189. zenml/zen_server/routers/run_templates_endpoints.py +3 -3
  190. zenml/zen_server/routers/runs_endpoints.py +35 -0
  191. zenml/zen_server/routers/steps_endpoints.py +3 -0
  192. zenml/zen_server/template_execution/utils.py +6 -6
  193. zenml/zen_stores/dag_generator.py +171 -0
  194. zenml/zen_stores/rest_zen_store.py +17 -3
  195. zenml/zen_stores/schemas/action_schemas.py +40 -4
  196. zenml/zen_stores/schemas/api_key_schemas.py +29 -1
  197. zenml/zen_stores/schemas/artifact_schemas.py +168 -48
  198. zenml/zen_stores/schemas/base_schemas.py +26 -1
  199. zenml/zen_stores/schemas/code_repository_schemas.py +46 -5
  200. zenml/zen_stores/schemas/component_schemas.py +44 -3
  201. zenml/zen_stores/schemas/device_schemas.py +43 -2
  202. zenml/zen_stores/schemas/event_source_schemas.py +41 -5
  203. zenml/zen_stores/schemas/flavor_schemas.py +42 -2
  204. zenml/zen_stores/schemas/model_schemas.py +113 -77
  205. zenml/zen_stores/schemas/pipeline_build_schemas.py +53 -4
  206. zenml/zen_stores/schemas/pipeline_deployment_schemas.py +53 -4
  207. zenml/zen_stores/schemas/pipeline_run_schemas.py +111 -47
  208. zenml/zen_stores/schemas/pipeline_schemas.py +41 -9
  209. zenml/zen_stores/schemas/run_template_schemas.py +75 -11
  210. zenml/zen_stores/schemas/schedule_schema.py +50 -5
  211. zenml/zen_stores/schemas/secret_schemas.py +39 -2
  212. zenml/zen_stores/schemas/service_connector_schemas.py +39 -2
  213. zenml/zen_stores/schemas/service_schemas.py +39 -4
  214. zenml/zen_stores/schemas/stack_schemas.py +47 -2
  215. zenml/zen_stores/schemas/step_run_schemas.py +89 -26
  216. zenml/zen_stores/schemas/tag_schemas.py +69 -5
  217. zenml/zen_stores/schemas/trigger_schemas.py +44 -5
  218. zenml/zen_stores/schemas/utils.py +25 -4
  219. zenml/zen_stores/sql_zen_store.py +471 -28
  220. zenml/zen_stores/zen_store_interface.py +9 -1
  221. {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/METADATA +1 -1
  222. {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/RECORD +225 -219
  223. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-BG7-Ki1L.js +0 -1
  224. zenml/zen_server/dashboard/assets/CollapsibleCard-D20FtrzC.js +0 -1
  225. zenml/zen_server/dashboard/assets/Commands-DGbAvMDk.js +0 -1
  226. zenml/zen_server/dashboard/assets/ComponentIcon-ils7uNAk.js +0 -1
  227. zenml/zen_server/dashboard/assets/CsvVizualization-DVN541XF.js +0 -15
  228. zenml/zen_server/dashboard/assets/DialogItem-BHWf3sIB.js +0 -1
  229. zenml/zen_server/dashboard/assets/ExecutionStatus-XrvT2r65.js +0 -1
  230. zenml/zen_server/dashboard/assets/Infobox-D9k5TFH4.js +0 -1
  231. zenml/zen_server/dashboard/assets/InlineAvatar-Cfz4WSLK.js +0 -1
  232. zenml/zen_server/dashboard/assets/MarkdownVisualization-URCyUPcZ.js +0 -14
  233. zenml/zen_server/dashboard/assets/NestedCollapsible-Dor-bi98.js +0 -1
  234. zenml/zen_server/dashboard/assets/NumberBox-D2A7ENHb.js +0 -1
  235. zenml/zen_server/dashboard/assets/Partials-DQJFw1yW.js +0 -1
  236. zenml/zen_server/dashboard/assets/ProBadge-Cp4hb1YT.js +0 -1
  237. zenml/zen_server/dashboard/assets/ProCta-EYoV9CvK.js +0 -1
  238. zenml/zen_server/dashboard/assets/ProviderRadio-BVDA-fAr.js +0 -1
  239. zenml/zen_server/dashboard/assets/RunSelector-BLuBYNJt.js +0 -1
  240. zenml/zen_server/dashboard/assets/RunsBody-W4WHf-sq.js +0 -1
  241. zenml/zen_server/dashboard/assets/SearchField-D-h6jXyg.js +0 -1
  242. zenml/zen_server/dashboard/assets/SecretTooltip-CePCL8kd.js +0 -1
  243. zenml/zen_server/dashboard/assets/StackList-CgmN5H-i.js +0 -1
  244. zenml/zen_server/dashboard/assets/Tabs-DxQ8PDOD.js +0 -1
  245. zenml/zen_server/dashboard/assets/Tick-CEsT3HPR.js +0 -1
  246. zenml/zen_server/dashboard/assets/UsageReason-DjI5qMje.js +0 -1
  247. zenml/zen_server/dashboard/assets/WizardFooter-CFBHFZas.js +0 -1
  248. zenml/zen_server/dashboard/assets/cloud-squares-DeRLMopf.svg +0 -43
  249. zenml/zen_server/dashboard/assets/configuration-form-BtI2Y4eX.js +0 -1
  250. zenml/zen_server/dashboard/assets/connectors-video-C9qY4syJ.svg +0 -21
  251. zenml/zen_server/dashboard/assets/constants-DP3ZEnXH.js +0 -1
  252. zenml/zen_server/dashboard/assets/create-stack-BJ6x5rzj.js +0 -1
  253. zenml/zen_server/dashboard/assets/dates-3pMLCNrD.js +0 -1
  254. zenml/zen_server/dashboard/assets/delete-run-DlSLEl5T.js +0 -1
  255. zenml/zen_server/dashboard/assets/docker-BuDBFEDL.js +0 -1
  256. zenml/zen_server/dashboard/assets/dots-horizontal-BGRJCPCs.js +0 -1
  257. zenml/zen_server/dashboard/assets/flavor-select-BnPxvQDN.js +0 -1
  258. zenml/zen_server/dashboard/assets/form-schemas-CbvoEUHr.js +0 -1
  259. zenml/zen_server/dashboard/assets/index-CFESYpe4.js +0 -1
  260. zenml/zen_server/dashboard/assets/index-CmLcvK2z.js +0 -1
  261. zenml/zen_server/dashboard/assets/index-CzX3ZYlI.css +0 -1
  262. zenml/zen_server/dashboard/assets/index-D2iSHVZq.js +0 -64
  263. zenml/zen_server/dashboard/assets/kubernetes-D6OUjwSK.js +0 -1
  264. zenml/zen_server/dashboard/assets/link-external-DUhCSKNm.js +0 -1
  265. zenml/zen_server/dashboard/assets/login-command-CkqxPtV3.js +0 -1
  266. zenml/zen_server/dashboard/assets/login-mutation-CXc-Klim.js +0 -1
  267. zenml/zen_server/dashboard/assets/not-found-olRU3fnu.js +0 -1
  268. zenml/zen_server/dashboard/assets/page-7keIM1V3.js +0 -1
  269. zenml/zen_server/dashboard/assets/page-B31neFwG.js +0 -1
  270. zenml/zen_server/dashboard/assets/page-B3zo4KYS.js +0 -1
  271. zenml/zen_server/dashboard/assets/page-BN3MHq1a.js +0 -1
  272. zenml/zen_server/dashboard/assets/page-BNgVExjN.js +0 -1
  273. zenml/zen_server/dashboard/assets/page-BPtvu74G.js +0 -1
  274. zenml/zen_server/dashboard/assets/page-BTIuG0ki.js +0 -2
  275. zenml/zen_server/dashboard/assets/page-BcQzleH6.js +0 -1
  276. zenml/zen_server/dashboard/assets/page-C05Jw4M2.js +0 -1
  277. zenml/zen_server/dashboard/assets/page-C28a7K8h.js +0 -1
  278. zenml/zen_server/dashboard/assets/page-C9WLk0X-.js +0 -1
  279. zenml/zen_server/dashboard/assets/page-CINMx64X.js +0 -1
  280. zenml/zen_server/dashboard/assets/page-CYrJbk7P.js +0 -1
  281. zenml/zen_server/dashboard/assets/page-Ce0cqLo3.js +0 -1
  282. zenml/zen_server/dashboard/assets/page-CgNsEkw-.js +0 -1
  283. zenml/zen_server/dashboard/assets/page-Ct2FUYuR.js +0 -1
  284. zenml/zen_server/dashboard/assets/page-D8G2B3Bu.js +0 -1
  285. zenml/zen_server/dashboard/assets/page-DL8a4_lg.js +0 -3
  286. zenml/zen_server/dashboard/assets/page-DMhYn1cF.js +0 -1
  287. zenml/zen_server/dashboard/assets/page-Dd_Yq-Uf.js +0 -6
  288. zenml/zen_server/dashboard/assets/page-DfSvqT8g.js +0 -1
  289. zenml/zen_server/dashboard/assets/page-Dt6ANUTx.js +0 -1
  290. zenml/zen_server/dashboard/assets/page-DtvTleaT.js +0 -1
  291. zenml/zen_server/dashboard/assets/page-DwfGTiVs.js +0 -1
  292. zenml/zen_server/dashboard/assets/page-JgomSTDc.js +0 -1
  293. zenml/zen_server/dashboard/assets/page-L84ig6HB.js +0 -1
  294. zenml/zen_server/dashboard/assets/page-Mabsn4QJ.js +0 -1
  295. zenml/zen_server/dashboard/assets/page-P04L5cm9.js +0 -1
  296. zenml/zen_server/dashboard/assets/page-PfhAnvq4.js +0 -1
  297. zenml/zen_server/dashboard/assets/page-WdRrlNt_.js +0 -1
  298. zenml/zen_server/dashboard/assets/page-cqJDDDeK.js +0 -1
  299. zenml/zen_server/dashboard/assets/page-k-Wxh9L_.js +0 -1
  300. zenml/zen_server/dashboard/assets/page-y-zV4n0c.js +0 -1
  301. zenml/zen_server/dashboard/assets/rocket-Cf-B-XOR.js +0 -1
  302. zenml/zen_server/dashboard/assets/settings_preview-0JLrRgHP.webp +0 -0
  303. zenml/zen_server/dashboard/assets/sharedSchema-Bse2agAf.js +0 -14
  304. zenml/zen_server/dashboard/assets/stack-detail-query-BAcZJrN3.js +0 -1
  305. zenml/zen_server/dashboard/assets/tick-circle-m94Aa6Zt.js +0 -1
  306. zenml/zen_server/dashboard/assets/tour-cover-BYfeen6M.webp +0 -0
  307. zenml/zen_server/dashboard/assets/type-guards-CaeD8wHO.js +0 -1
  308. zenml/zen_server/dashboard/assets/update-server-settings-mutation-DwMM1LJz.js +0 -1
  309. {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/LICENSE +0 -0
  310. {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/WHEEL +0 -0
  311. {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/entry_points.txt +0 -0
@@ -5,14 +5,14 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/favicon.ico" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>ZenML Dashboard</title>
8
- <script type="module" crossorigin src="/assets/index-D2iSHVZq.js"></script>
9
- <link rel="modulepreload" crossorigin href="/assets/@radix-C7hRs6Kx.js">
10
- <link rel="modulepreload" crossorigin href="/assets/@tanstack-CSxjHCME.js">
11
- <link rel="modulepreload" crossorigin href="/assets/@react-router-CNP6g_RL.js">
12
- <link rel="modulepreload" crossorigin href="/assets/@reactflow-CQi1Z1Wq.js">
8
+ <script type="module" crossorigin src="/assets/index-BFqbGSck.js"></script>
9
+ <link rel="modulepreload" crossorigin href="/assets/@radix-Cdvw4jJ8.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/@tanstack-5gTMR7G2.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/@react-router-DeDfXbUF.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/@reactflow-8OCk19Fi.js">
13
13
  <link rel="stylesheet" crossorigin href="/assets/@reactflow-Fd0xVSp_.css">
14
- <link rel="stylesheet" crossorigin href="/assets/index-CzX3ZYlI.css">
15
- <link rel="prefetch" href="/assets/cloud-squares-DeRLMopf.svg"><link rel="prefetch" href="/assets/inter-cyrillic-ext-400-normal-Dc4VJyIJ.woff2"><link rel="prefetch" href="/assets/inter-cyrillic-400-normal-BLGc9T1a.woff2"><link rel="prefetch" href="/assets/inter-greek-ext-400-normal-Bput3-QP.woff2"><link rel="prefetch" href="/assets/inter-greek-400-normal-DxZsaF_h.woff2"><link rel="prefetch" href="/assets/inter-vietnamese-400-normal-DMkecbls.woff2"><link rel="prefetch" href="/assets/inter-latin-ext-400-normal-hnt3BR84.woff2"><link rel="prefetch" href="/assets/inter-latin-400-normal-BOOGhInR.woff2"><link rel="prefetch" href="/assets/inter-cyrillic-ext-500-normal-BShVwWPj.woff2"><link rel="prefetch" href="/assets/inter-cyrillic-500-normal-D4Vwzodn.woff2"><link rel="prefetch" href="/assets/inter-greek-ext-500-normal-B6guLgqG.woff2"><link rel="prefetch" href="/assets/inter-greek-500-normal-CeQXL5ds.woff2"><link rel="prefetch" href="/assets/inter-vietnamese-500-normal-DOriooB6.woff2"><link rel="prefetch" href="/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2"><link rel="prefetch" href="/assets/inter-latin-500-normal-D2bGa7uu.woff2"><link rel="prefetch" href="/assets/inter-cyrillic-ext-600-normal-CaqZN2hq.woff2"><link rel="prefetch" href="/assets/inter-cyrillic-600-normal-BGBWG807.woff2"><link rel="prefetch" href="/assets/inter-greek-ext-600-normal-Cnui8OiR.woff2"><link rel="prefetch" href="/assets/inter-greek-600-normal-Dhlb-90d.woff2"><link rel="prefetch" href="/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2"><link rel="prefetch" href="/assets/inter-latin-ext-600-normal-BnYJhD27.woff2"><link rel="prefetch" href="/assets/inter-latin-600-normal-D273HNI0.woff2"><link rel="prefetch" href="/assets/inter-cyrillic-ext-400-normal-BPnxn4xp.woff"><link rel="prefetch" href="/assets/inter-cyrillic-400-normal-ZzOtrSSW.woff"><link rel="prefetch" href="/assets/inter-greek-ext-400-normal-DCpCPQOf.woff"><link rel="prefetch" href="/assets/inter-greek-400-normal-BZzXV7-1.woff"><link rel="prefetch" href="/assets/inter-vietnamese-400-normal-BUNmGMP1.woff"><link rel="prefetch" href="/assets/inter-latin-ext-400-normal-C1t-h-pH.woff"><link rel="prefetch" href="/assets/inter-latin-400-normal-gitzw0hO.woff"><link rel="prefetch" href="/assets/inter-cyrillic-ext-500-normal-CUiC4oBV.woff"><link rel="prefetch" href="/assets/inter-cyrillic-500-normal-DH2hs3aW.woff"><link rel="prefetch" href="/assets/inter-greek-ext-500-normal-M2hEX8vc.woff"><link rel="prefetch" href="/assets/inter-greek-500-normal-d_eO-yCQ.woff"><link rel="prefetch" href="/assets/inter-vietnamese-500-normal-DQPw2Hwd.woff"><link rel="prefetch" href="/assets/inter-latin-ext-500-normal-UMdmhHu2.woff"><link rel="prefetch" href="/assets/inter-latin-500-normal-deR1Tlfd.woff"><link rel="prefetch" href="/assets/inter-cyrillic-600-normal-BuzJQFbW.woff"><link rel="prefetch" href="/assets/inter-cyrillic-ext-600-normal-Bt9VVOA-.woff"><link rel="prefetch" href="/assets/inter-greek-ext-600-normal-C9WLioJ8.woff"><link rel="prefetch" href="/assets/inter-greek-600-normal-CwicyhtI.woff"><link rel="prefetch" href="/assets/inter-vietnamese-600-normal-Cm6aH8_k.woff"><link rel="prefetch" href="/assets/inter-latin-ext-600-normal-CAF0vJDd.woff"><link rel="prefetch" href="/assets/inter-latin-600-normal-B5cFAncS.woff"><link rel="prefetch" href="/assets/mcp-Cb1aMeoq.webp"><link rel="prefetch" href="/assets/acp-DOsXjFc7.webp"><link rel="prefetch" href="/assets/settings_preview-0JLrRgHP.webp"><link rel="prefetch" href="/assets/upgrade-form-CwRHBuXB.webp"><link rel="prefetch" href="/assets/connectors-video-C9qY4syJ.svg"><link rel="prefetch" href="/assets/repos-video-D8kpu60k.svg"><link rel="prefetch" href="/assets/tour-cover-BYfeen6M.webp"><link rel="prefetch" href="/assets/adam-e-y0WnB_.webp"><link rel="prefetch" href="/assets/alex-DcCuDHPg.webp"><link rel="prefetch" href="/assets/baris-C0ZrZ10g.webp"><link rel="prefetch" href="/assets/hamza-NKKOZz1I.webp"><link rel="prefetch" href="/assets/stefan-B08Ftbba.webp"><link rel="prefetch" href="/assets/templates-1S_8WeSK.webp"><link rel="prefetch" href="/assets/flyte-Cj-xy_8I.svg"><link rel="prefetch" href="/assets/metaflow-weOkWNyT.svg"><link rel="prefetch" href="/assets/CodeSnippet-CK5CxKct.css"><link rel="prefetch" href="/assets/page-Mabsn4QJ.js"><link rel="prefetch" href="/assets/page-CSwZxZMQ.js"><link rel="prefetch" href="/assets/page-k-Wxh9L_.js"><link rel="prefetch" href="/assets/page-DwfGTiVs.js"><link rel="prefetch" href="/assets/page-ZfTtFicG.js"><link rel="prefetch" href="/assets/SetPassword-DR-EiLI5.js"><link rel="prefetch" href="/assets/login-mutation-CXc-Klim.js"><link rel="prefetch" href="/assets/page-WdRrlNt_.js"><link rel="prefetch" href="/assets/page-C05Jw4M2.js"><link rel="prefetch" href="/assets/page-DL8a4_lg.js"><link rel="prefetch" href="/assets/not-found-olRU3fnu.js"><link rel="prefetch" href="/assets/page-BPtvu74G.js"><link rel="prefetch" href="/assets/page-L84ig6HB.js"><link rel="prefetch" href="/assets/PasswordChecker-lYTOtNom.js"><link rel="prefetch" href="/assets/tick-circle-m94Aa6Zt.js"><link rel="prefetch" href="/assets/page-Ct2FUYuR.js"><link rel="prefetch" href="/assets/page-CYrJbk7P.js"><link rel="prefetch" href="/assets/page-C9WLk0X-.js"><link rel="prefetch" href="/assets/docker-BuDBFEDL.js"><link rel="prefetch" href="/assets/page-7keIM1V3.js"><link rel="prefetch" href="/assets/Commands-DGbAvMDk.js"><link rel="prefetch" href="/assets/page-BTIuG0ki.js"><link rel="prefetch" href="/assets/react-error-boundary.esm-fyoUBS25.js"><link rel="prefetch" href="/assets/page-B31neFwG.js"><link rel="prefetch" href="/assets/code-snippets-CqONne41.js"><link rel="prefetch" href="/assets/page-Dd_Yq-Uf.js"><link rel="prefetch" href="/assets/SecretTooltip-CePCL8kd.js"><link rel="prefetch" href="/assets/page-DMhYn1cF.js"><link rel="prefetch" href="/assets/update-server-settings-mutation-DwMM1LJz.js"><link rel="prefetch" href="/assets/page-Ce0cqLo3.js"><link rel="prefetch" href="/assets/page-BNgVExjN.js"><link rel="prefetch" href="/assets/dates-3pMLCNrD.js"><link rel="prefetch" href="/assets/key-icon-DO4DPJHZ.js"><link rel="prefetch" href="/assets/service-BQ9KIhls.js"><link rel="prefetch" href="/assets/page-PfhAnvq4.js"><link rel="prefetch" href="/assets/page-y-zV4n0c.js"><link rel="prefetch" href="/assets/RunsBody-W4WHf-sq.js"><link rel="prefetch" href="/assets/RunSelector-BLuBYNJt.js"><link rel="prefetch" href="/assets/delete-run-DlSLEl5T.js"><link rel="prefetch" href="/assets/DeleteAlertDialog-DVvXt-S6.js"><link rel="prefetch" href="/assets/Tabs-DxQ8PDOD.js"><link rel="prefetch" href="/assets/all-pipeline-runs-query-BGASHYtF.js"><link rel="prefetch" href="/assets/NestedCollapsible-Dor-bi98.js"><link rel="prefetch" href="/assets/ExecutionStatus-XrvT2r65.js"><link rel="prefetch" href="/assets/page-C28a7K8h.js"><link rel="prefetch" href="/assets/page-CgNsEkw-.js"><link rel="prefetch" href="/assets/page-D8G2B3Bu.js"><link rel="prefetch" href="/assets/StackList-CgmN5H-i.js"><link rel="prefetch" href="/assets/DialogItem-BHWf3sIB.js"><link rel="prefetch" href="/assets/AlertDialogDropdownItem-BG7-Ki1L.js"><link rel="prefetch" href="/assets/CollapsibleCard-D20FtrzC.js"><link rel="prefetch" href="/assets/refresh-CM5T3QeU.js"><link rel="prefetch" href="/assets/SearchField-D-h6jXyg.js"><link rel="prefetch" href="/assets/page-B3zo4KYS.js"><link rel="prefetch" href="/assets/code-browser-j2EpcxIA.js"><link rel="prefetch" href="/assets/clock-CPA5cYxq.js"><link rel="prefetch" href="/assets/page-BcQzleH6.js"><link rel="prefetch" href="/assets/page-BN3MHq1a.js"><link rel="prefetch" href="/assets/flavor-select-BnPxvQDN.js"><link rel="prefetch" href="/assets/constants-DP3ZEnXH.js"><link rel="prefetch" href="/assets/arrow-left-CwgF2MEM.js"><link rel="prefetch" href="/assets/configuration-form-BtI2Y4eX.js"><link rel="prefetch" href="/assets/terminal-square-DMtel8mb.js"><link rel="prefetch" href="/assets/index-CFESYpe4.js"><link rel="prefetch" href="/assets/InlineAvatar-Cfz4WSLK.js"><link rel="prefetch" href="/assets/DisplayDate-CYVBBSgr.js"><link rel="prefetch" href="/assets/index-DR30v9MZ.js"><link rel="prefetch" href="/assets/page-cqJDDDeK.js"><link rel="prefetch" href="/assets/Lock-DW-0_M0o.js"><link rel="prefetch" href="/assets/components-Br2ezRib.js"><link rel="prefetch" href="/assets/dots-horizontal-BGRJCPCs.js"><link rel="prefetch" href="/assets/create-stack-BJ6x5rzj.js"><link rel="prefetch" href="/assets/index-CmLcvK2z.js"><link rel="prefetch" href="/assets/type-guards-CaeD8wHO.js"><link rel="prefetch" href="/assets/trash-BWSZ7NRK.js"><link rel="prefetch" href="/assets/page-DfSvqT8g.js"><link rel="prefetch" href="/assets/persist-UUym702q.js"><link rel="prefetch" href="/assets/Partials-DQJFw1yW.js"><link rel="prefetch" href="/assets/logs-B5n0U7tB.js"><link rel="prefetch" href="/assets/link-external-DUhCSKNm.js"><link rel="prefetch" href="/assets/NumberBox-D2A7ENHb.js"><link rel="prefetch" href="/assets/Infobox-D9k5TFH4.js"><link rel="prefetch" href="/assets/WizardFooter-CFBHFZas.js"><link rel="prefetch" href="/assets/Wizard-CMI6Ksgz.js"><link rel="prefetch" href="/assets/ProviderRadio-BVDA-fAr.js"><link rel="prefetch" href="/assets/persist-D87V82eO.js"><link rel="prefetch" href="/assets/ComponentBadge-DKw7Gndh.js"><link rel="prefetch" href="/assets/ProviderIcon-DLo7t1lo.js"><link rel="prefetch" href="/assets/sharedSchema-Bse2agAf.js"><link rel="prefetch" href="/assets/index-CrhdX_qG.js"><link rel="prefetch" href="/assets/stack-detail-query-BAcZJrN3.js"><link rel="prefetch" href="/assets/ComponentIcon-ils7uNAk.js"><link rel="prefetch" href="/assets/layout-h3cbx8WZ.js"><link rel="prefetch" href="/assets/login-command-CkqxPtV3.js"><link rel="prefetch" href="/assets/CodeSnippet-CvI6D0wx.js"><link rel="prefetch" href="/assets/zod-C0xYeTvL.js"><link rel="prefetch" href="/assets/index.esm-D7jFlf5N.js"><link rel="prefetch" href="/assets/ProCta-EYoV9CvK.js"><link rel="prefetch" href="/assets/check-DK77doTf.js"><link rel="prefetch" href="/assets/check-circle-mvyzYvIW.js"><link rel="prefetch" href="/assets/form-schemas-CbvoEUHr.js"><link rel="prefetch" href="/assets/EmptyState-M1jafpg6.js"><link rel="prefetch" href="/assets/UsageReason-DjI5qMje.js"><link rel="prefetch" href="/assets/gcp-CHNvgEss.js"><link rel="prefetch" href="/assets/kubernetes-D6OUjwSK.js"><link rel="prefetch" href="/assets/rocket-Cf-B-XOR.js"><link rel="prefetch" href="/assets/UpdatePasswordSchemas-DbFEaezI.js"><link rel="prefetch" href="/assets/chevron-right-double-uNWbJT-C.js"><link rel="prefetch" href="/assets/plus-COjQg3AG.js"><link rel="prefetch" href="/assets/chevron-down-A-rmltmI.js"><link rel="prefetch" href="/assets/Error-BWaXP0VK.js"><link rel="prefetch" href="/assets/Helpbox-iE1xLmiZ.js"><link rel="prefetch" href="/assets/help-DyMolRxD.js"><link rel="prefetch" href="/assets/Tick-CEsT3HPR.js"><link rel="prefetch" href="/assets/file-text-BdxZdjP_.js"><link rel="prefetch" href="/assets/package-D1Mhqeh8.js"><link rel="prefetch" href="/assets/page-DtvTleaT.js"><link rel="prefetch" href="/assets/page-Dt6ANUTx.js"><link rel="prefetch" href="/assets/ProBadge-Cp4hb1YT.js"><link rel="prefetch" href="/assets/page-P04L5cm9.js"><link rel="prefetch" href="/assets/page-CINMx64X.js"><link rel="prefetch" href="/assets/page-JgomSTDc.js"><link rel="prefetch" href="/assets/404-_AtuLtaX.js"><link rel="prefetch" href="/assets/CsvVizualization-DVN541XF.js"><link rel="prefetch" href="/assets/MarkdownVisualization-URCyUPcZ.js"></head>
14
+ <link rel="stylesheet" crossorigin href="/assets/index-DuhuqTCI.css">
15
+ <link rel="prefetch" href="/assets/inter-cyrillic-ext-400-normal-Dc4VJyIJ.woff2"><link rel="prefetch" href="/assets/inter-cyrillic-400-normal-BLGc9T1a.woff2"><link rel="prefetch" href="/assets/inter-greek-ext-400-normal-Bput3-QP.woff2"><link rel="prefetch" href="/assets/inter-greek-400-normal-DxZsaF_h.woff2"><link rel="prefetch" href="/assets/inter-vietnamese-400-normal-DMkecbls.woff2"><link rel="prefetch" href="/assets/inter-latin-ext-400-normal-hnt3BR84.woff2"><link rel="prefetch" href="/assets/inter-latin-400-normal-BOOGhInR.woff2"><link rel="prefetch" href="/assets/inter-cyrillic-ext-500-normal-BShVwWPj.woff2"><link rel="prefetch" href="/assets/inter-cyrillic-500-normal-D4Vwzodn.woff2"><link rel="prefetch" href="/assets/inter-greek-ext-500-normal-B6guLgqG.woff2"><link rel="prefetch" href="/assets/inter-greek-500-normal-CeQXL5ds.woff2"><link rel="prefetch" href="/assets/inter-vietnamese-500-normal-DOriooB6.woff2"><link rel="prefetch" href="/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2"><link rel="prefetch" href="/assets/inter-latin-500-normal-D2bGa7uu.woff2"><link rel="prefetch" href="/assets/inter-cyrillic-ext-600-normal-CaqZN2hq.woff2"><link rel="prefetch" href="/assets/inter-cyrillic-600-normal-BGBWG807.woff2"><link rel="prefetch" href="/assets/inter-greek-ext-600-normal-Cnui8OiR.woff2"><link rel="prefetch" href="/assets/inter-greek-600-normal-Dhlb-90d.woff2"><link rel="prefetch" href="/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2"><link rel="prefetch" href="/assets/inter-latin-ext-600-normal-BnYJhD27.woff2"><link rel="prefetch" href="/assets/inter-latin-600-normal-D273HNI0.woff2"><link rel="prefetch" href="/assets/inter-cyrillic-ext-400-normal-BPnxn4xp.woff"><link rel="prefetch" href="/assets/inter-cyrillic-400-normal-ZzOtrSSW.woff"><link rel="prefetch" href="/assets/inter-greek-ext-400-normal-DCpCPQOf.woff"><link rel="prefetch" href="/assets/inter-greek-400-normal-BZzXV7-1.woff"><link rel="prefetch" href="/assets/inter-vietnamese-400-normal-BUNmGMP1.woff"><link rel="prefetch" href="/assets/inter-latin-ext-400-normal-C1t-h-pH.woff"><link rel="prefetch" href="/assets/inter-latin-400-normal-gitzw0hO.woff"><link rel="prefetch" href="/assets/inter-cyrillic-ext-500-normal-CUiC4oBV.woff"><link rel="prefetch" href="/assets/inter-cyrillic-500-normal-DH2hs3aW.woff"><link rel="prefetch" href="/assets/inter-greek-ext-500-normal-M2hEX8vc.woff"><link rel="prefetch" href="/assets/inter-greek-500-normal-d_eO-yCQ.woff"><link rel="prefetch" href="/assets/inter-latin-ext-500-normal-UMdmhHu2.woff"><link rel="prefetch" href="/assets/inter-vietnamese-500-normal-DQPw2Hwd.woff"><link rel="prefetch" href="/assets/inter-latin-500-normal-deR1Tlfd.woff"><link rel="prefetch" href="/assets/inter-cyrillic-ext-600-normal-Bt9VVOA-.woff"><link rel="prefetch" href="/assets/inter-cyrillic-600-normal-BuzJQFbW.woff"><link rel="prefetch" href="/assets/inter-greek-ext-600-normal-C9WLioJ8.woff"><link rel="prefetch" href="/assets/inter-greek-600-normal-CwicyhtI.woff"><link rel="prefetch" href="/assets/inter-vietnamese-600-normal-Cm6aH8_k.woff"><link rel="prefetch" href="/assets/inter-latin-ext-600-normal-CAF0vJDd.woff"><link rel="prefetch" href="/assets/inter-latin-600-normal-B5cFAncS.woff"><link rel="prefetch" href="/assets/mcp-Cb1aMeoq.webp"><link rel="prefetch" href="/assets/acp-DOsXjFc7.webp"><link rel="prefetch" href="/assets/upgrade-form-CwRHBuXB.webp"><link rel="prefetch" href="/assets/repos-video-D8kpu60k.svg"><link rel="prefetch" href="/assets/templates-1S_8WeSK.webp"><link rel="prefetch" href="/assets/adam-e-y0WnB_.webp"><link rel="prefetch" href="/assets/alex-DcCuDHPg.webp"><link rel="prefetch" href="/assets/baris-C0ZrZ10g.webp"><link rel="prefetch" href="/assets/hamza-NKKOZz1I.webp"><link rel="prefetch" href="/assets/stefan-B08Ftbba.webp"><link rel="prefetch" href="/assets/flyte-Cj-xy_8I.svg"><link rel="prefetch" href="/assets/metaflow-weOkWNyT.svg"><link rel="prefetch" href="/assets/connectivity-4UKGMYnr.webp"><link rel="prefetch" href="/assets/CodeSnippet-CK5CxKct.css"><link rel="prefetch" href="/assets/page-CN7lkvXr.js"><link rel="prefetch" href="/assets/page-DJIGaUQ9.js"><link rel="prefetch" href="/assets/page-CnbIYE80.js"><link rel="prefetch" href="/assets/page-DwVPpCFg.js"><link rel="prefetch" href="/assets/SetPassword-BjNGDC5e.js"><link rel="prefetch" href="/assets/login-mutation-D3tFP6Wm.js"><link rel="prefetch" href="/assets/page-DYOucPtA.js"><link rel="prefetch" href="/assets/page-CHxVhF3x.js"><link rel="prefetch" href="/assets/page-BcRI3-aR.js"><link rel="prefetch" href="/assets/page-CoXzjeEY.js"><link rel="prefetch" href="/assets/page-DUKbOhaD.js"><link rel="prefetch" href="/assets/PasswordChecker-B88WjuCe.js"><link rel="prefetch" href="/assets/layout-Do9YI4QX.js"><link rel="prefetch" href="/assets/page-CAUYrfui.js"><link rel="prefetch" href="/assets/page-abw-2oeW.js"><link rel="prefetch" href="/assets/page-DUK0Nd_1.js"><link rel="prefetch" href="/assets/page-BgknnddT.js"><link rel="prefetch" href="/assets/page-ChGcZI_6.js"><link rel="prefetch" href="/assets/page-BCrKmYIZ.js"><link rel="prefetch" href="/assets/resource-type-tooltip-DwHrJstL.js"><link rel="prefetch" href="/assets/resource-tyes-list-o2LXiMay.js"><link rel="prefetch" href="/assets/service-connectors-DSEMwJ5A.js"><link rel="prefetch" href="/assets/page-DCcuPZ8P.js"><link rel="prefetch" href="/assets/page-n9ejQ2V3.js"><link rel="prefetch" href="/assets/react-error-boundary.esm-7_MuhCay.js"><link rel="prefetch" href="/assets/page-DpqRelAy.js"><link rel="prefetch" href="/assets/code-snippets-CqONne41.js"><link rel="prefetch" href="/assets/page-sJjNT9xA.js"><link rel="prefetch" href="/assets/SecretTooltip-CZTRnaCV.js"><link rel="prefetch" href="/assets/page-ClvmVesa.js"><link rel="prefetch" href="/assets/update-server-settings-mutation-CmnxdxiK.js"><link rel="prefetch" href="/assets/page-Bs3W2FDi.js"><link rel="prefetch" href="/assets/page-D9iuB88h.js"><link rel="prefetch" href="/assets/dates-Buh6SMo7.js"><link rel="prefetch" href="/assets/key-icon-C07HKw8z.js"><link rel="prefetch" href="/assets/service-jxtvgks0.js"><link rel="prefetch" href="/assets/page-9RjCitFH.js"><link rel="prefetch" href="/assets/pipeline-CSUlkd50.js"><link rel="prefetch" href="/assets/page-B0PsXWiT.js"><link rel="prefetch" href="/assets/page-DEohTSz6.js"><link rel="prefetch" href="/assets/page-CktmtZ8Z.js"><link rel="prefetch" href="/assets/StackComponentList-Be1pQt9m.js"><link rel="prefetch" href="/assets/page-C6KaiZ_W.js"><link rel="prefetch" href="/assets/RunsBody-BRBn1e2O.js"><link rel="prefetch" href="/assets/ButtonGroup-DFWWFGUE.js"><link rel="prefetch" href="/assets/delete-run-CCR9md_s.js"><link rel="prefetch" href="/assets/Tabs-DNSKblCM.js"><link rel="prefetch" href="/assets/NestedCollapsible-3M4llYtH.js"><link rel="prefetch" href="/assets/eye-CbVlAYty.js"><link rel="prefetch" href="/assets/all-pipeline-runs-query-DCdax7I5.js"><link rel="prefetch" href="/assets/ExecutionStatus-CWreILP0.js"><link rel="prefetch" href="/assets/bulk-delete-C_kpIB9A.js"><link rel="prefetch" href="/assets/DeleteAlertDialog-VIOMDLmx.js"><link rel="prefetch" href="/assets/page-Cal6XQ4U.js"><link rel="prefetch" href="/assets/page-C210HcBA.js"><link rel="prefetch" href="/assets/page-XURWnYZP.js"><link rel="prefetch" href="/assets/StackList-BdiR5DvR.js"><link rel="prefetch" href="/assets/DialogItem-ClFCqxEp.js"><link rel="prefetch" href="/assets/AlertDialogDropdownItem-CZW4QyWn.js"><link rel="prefetch" href="/assets/SheetHeader-CASpN2Lz.js"><link rel="prefetch" href="/assets/CollapsibleCard-CnS09ljw.js"><link rel="prefetch" href="/assets/refresh-BcTM09NW.js"><link rel="prefetch" href="/assets/SearchField-DY6-UbRT.js"><link rel="prefetch" href="/assets/zod-XdS2h1ws.js"><link rel="prefetch" href="/assets/index.esm-DhJo3mA6.js"><link rel="prefetch" href="/assets/ProCta-Dm5cWKpS.js"><link rel="prefetch" href="/assets/check-B9QMTa3f.js"><link rel="prefetch" href="/assets/check-circle-C4tYvbtw.js"><link rel="prefetch" href="/assets/form-schemas-CrznJVzA.js"><link rel="prefetch" href="/assets/EmptyState-CjrgDtVk.js"><link rel="prefetch" href="/assets/UsageReason-Cb-mpV8M.js"><link rel="prefetch" href="/assets/gcp-B1I3Qvcx.js"><link rel="prefetch" href="/assets/UpdatePasswordSchemas-CNfKDo2Q.js"><link rel="prefetch" href="/assets/chevron-right-double-Dgp_gEsp.js"><link rel="prefetch" href="/assets/index-DWpiv-Ft.js"><link rel="prefetch" href="/assets/terminal-XFL_4QN-.js"><link rel="prefetch" href="/assets/trash-DP6Tpp_E.js"><link rel="prefetch" href="/assets/help-Co6aedki.js"><link rel="prefetch" href="/assets/DisplayDate-8RESqe5H.js"><link rel="prefetch" href="/assets/info-QkbQz4QU.js"><link rel="prefetch" href="/assets/plus-Cl0_rCVF.js"><link rel="prefetch" href="/assets/stack-detail-query-Cm0fsgo-.js"><link rel="prefetch" href="/assets/ComponentIcon-CbbOc7lb.js"><link rel="prefetch" href="/assets/chevron-down-jbbQh82s.js"><link rel="prefetch" href="/assets/type-guards-CNgPYg8l.js"><link rel="prefetch" href="/assets/CodeSnippet-D2HkkAGr.js"><link rel="prefetch" href="/assets/Infobox-CGxFvqzi.js"><link rel="prefetch" href="/assets/code-browser-CiD8qkBx.js"><link rel="prefetch" href="/assets/logs-CQKlJjo0.js"><link rel="prefetch" href="/assets/ComponentBadge-CDgdd0Ks.js"><link rel="prefetch" href="/assets/Error-CQzjbDcN.js"><link rel="prefetch" href="/assets/terminal-square-XFL_4QN-.js"><link rel="prefetch" href="/assets/layout-DBbfEFBe.js"><link rel="prefetch" href="/assets/transform-CeZdrxDZ.js"><link rel="prefetch" href="/assets/update-current-user-mutation-D5MjcQ6F.js"><link rel="prefetch" href="/assets/index-BjUu1mP4.js"><link rel="prefetch" href="/assets/LeftSideMenu-DCsKdIjC.js"><link rel="prefetch" href="/assets/Tick-BPrWnNlN.js"><link rel="prefetch" href="/assets/Wizard-Dg8Pmn5A.js"><link rel="prefetch" href="/assets/arrow-left-MRXv5pAH.js"><link rel="prefetch" href="/assets/form-DFJkaFDX.js"><link rel="prefetch" href="/assets/Lock-CrIAdQo6.js"><link rel="prefetch" href="/assets/package-miExReQl.js"><link rel="prefetch" href="/assets/index.es-C1gfATPn.js"><link rel="prefetch" href="/assets/Helpbox-CiKxG5_X.js"><link rel="prefetch" href="/assets/clock-B_mTG8PH.js"><link rel="prefetch" href="/assets/components-Br2ezRib.js"><link rel="prefetch" href="/assets/NumberBox-C0mQktmV.js"><link rel="prefetch" href="/assets/configuration-form-B2hmKGnF.js"><link rel="prefetch" href="/assets/constants-1EZZxtay.js"><link rel="prefetch" href="/assets/index-U992soPJ.js"><link rel="prefetch" href="/assets/file-text-Cd8wVfq5.js"><link rel="prefetch" href="/assets/persist-Dec_w7aB.js"><link rel="prefetch" href="/assets/persist-DWMWVP-y.js"><link rel="prefetch" href="/assets/sharedSchema-BXzg0EZz.js"><link rel="prefetch" href="/assets/page-CAJ8B0vb.js"><link rel="prefetch" href="/assets/ProviderIcon-DPwMR6nF.js"><link rel="prefetch" href="/assets/page-DNjKHjnH.js"><link rel="prefetch" href="/assets/Partials-DSjkttlz.js"><link rel="prefetch" href="/assets/StackName-ojLC6xdl.js"><link rel="prefetch" href="/assets/ProviderRadio-DEDNRgAb.js"><link rel="prefetch" href="/assets/page-DKK6ulgy.js"><link rel="prefetch" href="/assets/create-stack-TKmMtrkQ.js"><link rel="prefetch" href="/assets/page-D9Hfx6GV.js"><link rel="prefetch" href="/assets/WizardFooter-BcNDIvlQ.js"><link rel="prefetch" href="/assets/page-CdZCmszX.js"><link rel="prefetch" href="/assets/page-akLcPcKw.js"><link rel="prefetch" href="/assets/page-CUaMMoPG.js"><link rel="prefetch" href="/assets/page-CtiuMP_r.js"><link rel="prefetch" href="/assets/page-Be3R2uYn.js"><link rel="prefetch" href="/assets/page-BrT0_zSJ.js"><link rel="prefetch" href="/assets/404-DmJUgorp.js"></head>
16
16
  <body>
17
17
  <div id="root"></div>
18
18
  </body>
@@ -546,8 +546,8 @@ def is_owned_by_authenticated_user(model: AnyModel) -> bool:
546
546
  assert auth_context
547
547
 
548
548
  if isinstance(model, UserScopedResponse):
549
- if model.user:
550
- return model.user.id == auth_context.user.id
549
+ if model.user_id:
550
+ return model.user_id == auth_context.user.id
551
551
  else:
552
552
  # The model is server-owned and for RBAC purposes we consider
553
553
  # every user to be the owner of it
@@ -64,11 +64,12 @@ class ZenMLCloudRBAC(RBACInterface):
64
64
 
65
65
  params = {
66
66
  "user_id": str(user.external_user_id),
67
- "resources": resources,
68
67
  "action": str(action),
69
68
  }
70
- response = self._connection.get(
71
- endpoint=PERMISSIONS_ENDPOINT, params=params
69
+ response = self._connection.post(
70
+ endpoint=PERMISSIONS_ENDPOINT,
71
+ params=params,
72
+ data=[str(resource) for resource in resources],
72
73
  )
73
74
  value = response.json()
74
75
 
@@ -583,7 +583,7 @@ def api_token(
583
583
  f"Schedule {schedule_id} does not exist and API tokens cannot "
584
584
  "be generated for non-existent schedules for security reasons."
585
585
  )
586
- project_id = schedule.project.id
586
+ project_id = schedule.project_id
587
587
 
588
588
  if not schedule.active:
589
589
  raise ValueError(
@@ -604,7 +604,7 @@ def api_token(
604
604
 
605
605
  verify_permission_for_model(model=pipeline_run, action=Action.READ)
606
606
 
607
- project_id = pipeline_run.project.id
607
+ project_id = pipeline_run.project_id
608
608
 
609
609
  if pipeline_run.status.is_finished:
610
610
  raise ValueError(
@@ -114,7 +114,7 @@ def get_authorization_device(
114
114
  device = zen_store().get_authorized_device(
115
115
  device_id=device_id, hydrate=hydrate
116
116
  )
117
- if not device.user:
117
+ if not device.user_id:
118
118
  # A device that hasn't been verified and associated with a user yet
119
119
  # can only be retrieved if the user code is specified and valid.
120
120
  if user_code:
@@ -123,7 +123,7 @@ def get_authorization_device(
123
123
  )
124
124
  if internal_device.verify_user_code(user_code=user_code):
125
125
  return device
126
- elif device.user.id == auth_context.user.id:
126
+ elif device.user_id == auth_context.user.id:
127
127
  return device
128
128
 
129
129
  raise KeyError(
@@ -157,7 +157,7 @@ def update_authorized_device(
157
157
  belong to the current user.
158
158
  """
159
159
  device = zen_store().get_authorized_device(device_id=device_id)
160
- if not device.user or device.user.id != auth_context.user.id:
160
+ if not device.user_id or device.user_id != auth_context.user.id:
161
161
  raise KeyError(
162
162
  f"Unable to get device with ID {device_id}: No device with "
163
163
  "this ID found."
@@ -222,7 +222,10 @@ def verify_authorized_device(
222
222
 
223
223
  # Check if the device already has a user associated with it. If so, the
224
224
  # current user and the user associated with the device must be the same.
225
- if device_model.user and device_model.user.id != auth_context.user.id:
225
+ if (
226
+ device_model.user_id
227
+ and device_model.user_id != auth_context.user.id
228
+ ):
226
229
  raise ValueError(
227
230
  "Invalid request: this device is associated with another user.",
228
231
  )
@@ -292,7 +295,7 @@ def delete_authorized_device(
292
295
  belong to the current user.
293
296
  """
294
297
  device = zen_store().get_authorized_device(device_id=device_id)
295
- if not device.user or device.user.id != auth_context.user.id:
298
+ if not device.user_id or device.user_id != auth_context.user.id:
296
299
  raise KeyError(
297
300
  f"Unable to get device with ID {device_id}: No device with "
298
301
  "this ID found."
@@ -294,7 +294,7 @@ def deployment_logs(
294
294
  # Get the last pipeline run for this deployment
295
295
  pipeline_runs = store.list_runs(
296
296
  runs_filter_model=PipelineRunFilter(
297
- project=deployment.project.id,
297
+ project=deployment.project_id,
298
298
  sort_by="asc:created",
299
299
  size=1,
300
300
  deployment_id=deployment.id,
@@ -226,7 +226,7 @@ def delete_pipeline(
226
226
  should_decrement = (
227
227
  ResourceType.PIPELINE in server_config().reportable_resources
228
228
  and zen_store().count_pipelines(
229
- PipelineFilter(name=pipeline.name, project=pipeline.project.id)
229
+ PipelineFilter(name=pipeline.name, project=pipeline.project_id)
230
230
  )
231
231
  == 0
232
232
  )
@@ -264,18 +264,18 @@ if server_config().workload_manager_enabled:
264
264
  hydrate=True,
265
265
  )
266
266
  analytics_handler.metadata = {
267
- "project_id": template.project.id,
267
+ "project_id": template.project_id,
268
268
  }
269
269
 
270
270
  verify_permission(
271
271
  resource_type=ResourceType.PIPELINE_DEPLOYMENT,
272
272
  action=Action.CREATE,
273
- project_id=template.project.id,
273
+ project_id=template.project_id,
274
274
  )
275
275
  verify_permission(
276
276
  resource_type=ResourceType.PIPELINE_RUN,
277
277
  action=Action.CREATE,
278
- project_id=template.project.id,
278
+ project_id=template.project_id,
279
279
  )
280
280
  check_entitlement(feature=RUN_TEMPLATE_TRIGGERS_FEATURE_NAME)
281
281
 
@@ -32,6 +32,7 @@ from zenml.logger import get_logger
32
32
  from zenml.logging.step_logging import fetch_logs
33
33
  from zenml.models import (
34
34
  Page,
35
+ PipelineRunDAG,
35
36
  PipelineRunFilter,
36
37
  PipelineRunRequest,
37
38
  PipelineRunResponse,
@@ -128,6 +129,7 @@ def list_runs(
128
129
  ),
129
130
  project_name_or_id: Optional[Union[str, UUID]] = None,
130
131
  hydrate: bool = False,
132
+ include_full_metadata: bool = False,
131
133
  _: AuthContext = Security(authorize),
132
134
  ) -> Page[PipelineRunResponse]:
133
135
  """Get pipeline runs according to query filters.
@@ -137,6 +139,8 @@ def list_runs(
137
139
  project_name_or_id: Optional name or ID of the project.
138
140
  hydrate: Flag deciding whether to hydrate the output model(s)
139
141
  by including metadata fields in the response.
142
+ include_full_metadata: Flag deciding whether to include the
143
+ full metadata in the response.
140
144
 
141
145
  Returns:
142
146
  The pipeline runs according to query filters.
@@ -149,6 +153,7 @@ def list_runs(
149
153
  resource_type=ResourceType.PIPELINE_RUN,
150
154
  list_method=zen_store().list_runs,
151
155
  hydrate=hydrate,
156
+ include_full_metadata=include_full_metadata,
152
157
  )
153
158
 
154
159
 
@@ -162,6 +167,7 @@ def get_run(
162
167
  hydrate: bool = True,
163
168
  refresh_status: bool = False,
164
169
  include_python_packages: bool = False,
170
+ include_full_metadata: bool = False,
165
171
  _: AuthContext = Security(authorize),
166
172
  ) -> PipelineRunResponse:
167
173
  """Get a specific pipeline run using its ID.
@@ -174,6 +180,8 @@ def get_run(
174
180
  the status of the pipeline run using its orchestrator.
175
181
  include_python_packages: Flag deciding whether to include the
176
182
  Python packages in the response.
183
+ include_full_metadata: Flag deciding whether to include the
184
+ full metadata in the response.
177
185
 
178
186
  Returns:
179
187
  The pipeline run.
@@ -186,6 +194,7 @@ def get_run(
186
194
  get_method=zen_store().get_run,
187
195
  hydrate=hydrate,
188
196
  include_python_packages=include_python_packages,
197
+ include_full_metadata=include_full_metadata,
189
198
  )
190
199
  if refresh_status:
191
200
  try:
@@ -341,6 +350,32 @@ def get_run_status(
341
350
  return run.status
342
351
 
343
352
 
353
+ @router.get(
354
+ "/{run_id}/dag",
355
+ responses={401: error_response, 404: error_response, 422: error_response},
356
+ )
357
+ @async_fastapi_endpoint_wrapper
358
+ def get_run_dag(
359
+ run_id: UUID,
360
+ _: AuthContext = Security(authorize),
361
+ ) -> PipelineRunDAG:
362
+ """Get the DAG of a specific pipeline run.
363
+
364
+ Args:
365
+ run_id: ID of the pipeline run for which to get the DAG.
366
+
367
+ Returns:
368
+ The DAG of the pipeline run.
369
+ """
370
+ # TODO: Maybe avoid calling get_run twice?
371
+ verify_permissions_and_get_entity(
372
+ id=run_id,
373
+ get_method=zen_store().get_run,
374
+ hydrate=False,
375
+ )
376
+ return zen_store().get_pipeline_run_dag(run_id)
377
+
378
+
344
379
  @router.get(
345
380
  "/{run_id}" + REFRESH,
346
381
  responses={401: error_response, 404: error_response, 422: error_response},
@@ -251,6 +251,7 @@ def get_step_logs(
251
251
  step_id: UUID,
252
252
  offset: int = 0,
253
253
  length: int = 1024 * 1024 * 16, # Default to 16MiB of data
254
+ strip_timestamp: bool = False,
254
255
  _: AuthContext = Security(authorize),
255
256
  ) -> str:
256
257
  """Get the logs of a specific step.
@@ -259,6 +260,7 @@ def get_step_logs(
259
260
  step_id: ID of the step for which to get the logs.
260
261
  offset: The offset from which to start reading.
261
262
  length: The amount of bytes that should be read.
263
+ strip_timestamp: Whether to strip the timestamp in logs or not.
262
264
 
263
265
  Returns:
264
266
  The logs of the step.
@@ -282,4 +284,5 @@ def get_step_logs(
282
284
  logs_uri=logs.uri,
283
285
  offset=offset,
284
286
  length=length,
287
+ strip_timestamp=strip_timestamp,
285
288
  )
@@ -212,7 +212,7 @@ def run_template(
212
212
  ).access_token
213
213
 
214
214
  environment = {
215
- ENV_ZENML_ACTIVE_PROJECT_ID: str(new_deployment.project.id),
215
+ ENV_ZENML_ACTIVE_PROJECT_ID: str(new_deployment.project_id),
216
216
  ENV_ZENML_ACTIVE_STACK_ID: str(stack.id),
217
217
  "ZENML_VERSION": zenml_version,
218
218
  "ZENML_STORE_URL": server_url,
@@ -514,7 +514,7 @@ def deployment_request_from_template(
514
514
  assert deployment.stack
515
515
  assert deployment.build
516
516
  deployment_request = PipelineDeploymentRequest(
517
- project=deployment.project.id,
517
+ project=deployment.project_id,
518
518
  run_name_template=config.run_name
519
519
  or get_default_run_name(pipeline_name=pipeline_configuration.name),
520
520
  pipeline_configuration=pipeline_configuration,
@@ -560,9 +560,9 @@ def get_pipeline_run_analytics_metadata(
560
560
  if not source.is_internal:
561
561
  custom_materializer = True
562
562
 
563
- assert deployment.user
564
- stack_creator = stack.user
565
- own_stack = stack_creator and stack_creator.id == deployment.user.id
563
+ assert deployment.user_id
564
+ stack_creator = stack.user_id
565
+ own_stack = stack_creator and stack_creator == deployment.user_id
566
566
 
567
567
  stack_metadata = {
568
568
  component_type.value: component_list[0].flavor_name
@@ -570,7 +570,7 @@ def get_pipeline_run_analytics_metadata(
570
570
  }
571
571
 
572
572
  return {
573
- "project_id": deployment.project.id,
573
+ "project_id": deployment.project_id,
574
574
  "store_type": "rest", # This method is called from within a REST endpoint
575
575
  **stack_metadata,
576
576
  "total_steps": len(deployment.step_configurations),
@@ -0,0 +1,171 @@
1
+ # Copyright (c) ZenML GmbH 2025. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at:
6
+ #
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12
+ # or implied. See the License for the specific language governing
13
+ # permissions and limitations under the License.
14
+ """DAG generator helper."""
15
+
16
+ from typing import Any, Dict, List, Optional
17
+ from uuid import UUID
18
+
19
+ from zenml.enums import ExecutionStatus
20
+ from zenml.models import PipelineRunDAG
21
+
22
+
23
+ class DAGGeneratorHelper:
24
+ """Helper class for generating pipeline run DAGs."""
25
+
26
+ def __init__(self) -> None:
27
+ """Initialize the DAG generator helper."""
28
+ self.step_nodes: Dict[str, PipelineRunDAG.Node] = {}
29
+ self.artifact_nodes: Dict[str, PipelineRunDAG.Node] = {}
30
+ self.edges: List[PipelineRunDAG.Edge] = []
31
+
32
+ def get_step_node_id(self, name: str) -> str:
33
+ """Get the ID of a step node.
34
+
35
+ Args:
36
+ name: The name of the step.
37
+
38
+ Returns:
39
+ The ID of the step node.
40
+ """
41
+ # Make sure there is no slashes as we use them as delimiters
42
+ name = name.replace("/", "-")
43
+ return f"step/{name}"
44
+
45
+ def get_artifact_node_id(
46
+ self, name: str, step_name: str, io_type: str, is_input: bool
47
+ ) -> str:
48
+ """Get the ID of an artifact node.
49
+
50
+ Args:
51
+ name: The name of the input or output artifact.
52
+ step_name: The name of the step.
53
+ io_type: The type of the input or output artifact.
54
+ is_input: Whether the artifact is an input or output artifact.
55
+
56
+ Returns:
57
+ The ID of the artifact node.
58
+ """
59
+ # Make sure there is no slashes as we use them as delimiters
60
+ name = name.replace("/", "-")
61
+ step_name = step_name.replace("/", "-")
62
+ io_str = "inputs" if is_input else "outputs"
63
+
64
+ return f"{step_name}/{io_str}/{io_type}/{name}"
65
+
66
+ def add_step_node(
67
+ self,
68
+ node_id: str,
69
+ name: str,
70
+ id: Optional[UUID] = None,
71
+ **metadata: Any,
72
+ ) -> PipelineRunDAG.Node:
73
+ """Add a step node to the DAG.
74
+
75
+ Args:
76
+ node_id: The ID of the node.
77
+ name: The name of the step.
78
+ id: The ID of the step.
79
+ **metadata: Additional node metadata.
80
+
81
+ Returns:
82
+ The added step node.
83
+ """
84
+ step_node = PipelineRunDAG.Node(
85
+ type="step",
86
+ id=id,
87
+ node_id=node_id,
88
+ name=name,
89
+ metadata=metadata,
90
+ )
91
+ self.step_nodes[step_node.node_id] = step_node
92
+ return step_node
93
+
94
+ def add_artifact_node(
95
+ self,
96
+ node_id: str,
97
+ name: str,
98
+ id: Optional[UUID] = None,
99
+ **metadata: Any,
100
+ ) -> PipelineRunDAG.Node:
101
+ """Add an artifact node to the DAG.
102
+
103
+ Args:
104
+ node_id: The ID of the node.
105
+ name: The name of the artifact.
106
+ id: The ID of the artifact.
107
+ **metadata: Additional node metadata.
108
+
109
+ Returns:
110
+ The added artifact node.
111
+ """
112
+ artifact_node = PipelineRunDAG.Node(
113
+ type="artifact",
114
+ node_id=node_id,
115
+ id=id,
116
+ name=name,
117
+ metadata=metadata,
118
+ )
119
+ self.artifact_nodes[artifact_node.node_id] = artifact_node
120
+ return artifact_node
121
+
122
+ def add_edge(self, source: str, target: str, **metadata: Any) -> None:
123
+ """Add an edge to the DAG.
124
+
125
+ Args:
126
+ source: The source node ID.
127
+ target: The target node ID.
128
+ metadata: Additional edge metadata.
129
+ """
130
+ self.edges.append(
131
+ PipelineRunDAG.Edge(
132
+ source=source, target=target, metadata=metadata
133
+ )
134
+ )
135
+
136
+ def get_step_node_by_name(self, name: str) -> PipelineRunDAG.Node:
137
+ """Get a step node by name.
138
+
139
+ Args:
140
+ name: The name of the step.
141
+
142
+ Raises:
143
+ KeyError: If the step node with the given name is not found.
144
+
145
+ Returns:
146
+ The step node.
147
+ """
148
+ for node in self.step_nodes.values():
149
+ if node.name == name:
150
+ return node
151
+ raise KeyError(f"Step node with name {name} not found")
152
+
153
+ def finalize_dag(
154
+ self, pipeline_run_id: UUID, status: ExecutionStatus
155
+ ) -> PipelineRunDAG:
156
+ """Finalize the DAG.
157
+
158
+ Args:
159
+ pipeline_run_id: The ID of the pipeline run.
160
+ status: The status of the pipeline run.
161
+
162
+ Returns:
163
+ The finalized DAG.
164
+ """
165
+ return PipelineRunDAG(
166
+ id=pipeline_run_id,
167
+ status=status,
168
+ nodes=list(self.step_nodes.values())
169
+ + list(self.artifact_nodes.values()),
170
+ edges=self.edges,
171
+ )
@@ -1930,7 +1930,10 @@ class RestZenStore(BaseZenStore):
1930
1930
  )
1931
1931
 
1932
1932
  def get_run(
1933
- self, run_id: UUID, hydrate: bool = True
1933
+ self,
1934
+ run_id: UUID,
1935
+ hydrate: bool = True,
1936
+ include_full_metadata: bool = False,
1934
1937
  ) -> PipelineRunResponse:
1935
1938
  """Gets a pipeline run.
1936
1939
 
@@ -1938,6 +1941,8 @@ class RestZenStore(BaseZenStore):
1938
1941
  run_id: The ID of the pipeline run to get.
1939
1942
  hydrate: Flag deciding whether to hydrate the output model(s)
1940
1943
  by including metadata fields in the response.
1944
+ include_full_metadata: If True, include metadata of all steps in
1945
+ the response.
1941
1946
 
1942
1947
  Returns:
1943
1948
  The pipeline run.
@@ -1946,13 +1951,17 @@ class RestZenStore(BaseZenStore):
1946
1951
  resource_id=run_id,
1947
1952
  route=RUNS,
1948
1953
  response_model=PipelineRunResponse,
1949
- params={"hydrate": hydrate},
1954
+ params={
1955
+ "hydrate": hydrate,
1956
+ "include_full_metadata": include_full_metadata,
1957
+ },
1950
1958
  )
1951
1959
 
1952
1960
  def list_runs(
1953
1961
  self,
1954
1962
  runs_filter_model: PipelineRunFilter,
1955
1963
  hydrate: bool = False,
1964
+ include_full_metadata: bool = False,
1956
1965
  ) -> Page[PipelineRunResponse]:
1957
1966
  """List all pipeline runs matching the given filter criteria.
1958
1967
 
@@ -1961,6 +1970,8 @@ class RestZenStore(BaseZenStore):
1961
1970
  params.
1962
1971
  hydrate: Flag deciding whether to hydrate the output model(s)
1963
1972
  by including metadata fields in the response.
1973
+ include_full_metadata: If True, include metadata of all steps in
1974
+ the response.
1964
1975
 
1965
1976
  Returns:
1966
1977
  A list of all pipeline runs matching the filter criteria.
@@ -1969,7 +1980,10 @@ class RestZenStore(BaseZenStore):
1969
1980
  route=RUNS,
1970
1981
  response_model=PipelineRunResponse,
1971
1982
  filter_model=runs_filter_model,
1972
- params={"hydrate": hydrate},
1983
+ params={
1984
+ "hydrate": hydrate,
1985
+ "include_full_metadata": include_full_metadata,
1986
+ },
1973
1987
  )
1974
1988
 
1975
1989
  def update_run(