zenml-nightly 0.82.1.dev20250527__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 (306) hide show
  1. zenml/VERSION +1 -1
  2. zenml/cli/base.py +6 -1
  3. zenml/cli/model.py +16 -36
  4. zenml/cli/server.py +8 -3
  5. zenml/client.py +20 -4
  6. zenml/client_lazy_loader.py +2 -0
  7. zenml/config/docker_settings.py +15 -2
  8. zenml/enums.py +3 -0
  9. zenml/event_hub/event_hub.py +1 -1
  10. zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +1 -1
  11. zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py +1 -1
  12. zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +3 -0
  13. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +37 -26
  14. zenml/login/web_login.py +1 -1
  15. zenml/model/model.py +13 -23
  16. zenml/models/__init__.py +39 -2
  17. zenml/models/v2/base/scoped.py +34 -15
  18. zenml/models/v2/core/artifact.py +10 -9
  19. zenml/models/v2/core/artifact_version.py +16 -16
  20. zenml/models/v2/core/logs.py +8 -50
  21. zenml/models/v2/core/model.py +10 -10
  22. zenml/models/v2/core/model_version.py +155 -88
  23. zenml/models/v2/core/pipeline.py +10 -11
  24. zenml/models/v2/core/pipeline_deployment.py +1 -9
  25. zenml/models/v2/core/pipeline_run.py +10 -17
  26. zenml/models/v2/core/run_template.py +10 -10
  27. zenml/models/v2/core/step_run.py +100 -16
  28. zenml/models/v2/core/tag.py +5 -4
  29. zenml/models/v2/misc/pipeline_run_dag.py +46 -0
  30. zenml/orchestrators/base_orchestrator.py +8 -19
  31. zenml/orchestrators/cache_utils.py +48 -1
  32. zenml/orchestrators/input_utils.py +35 -39
  33. zenml/orchestrators/step_launcher.py +1 -1
  34. zenml/orchestrators/step_run_utils.py +26 -10
  35. zenml/pipelines/pipeline_definition.py +3 -3
  36. zenml/pipelines/run_utils.py +2 -3
  37. zenml/service_connectors/service_connector.py +5 -1
  38. zenml/stack/stack_component.py +1 -4
  39. zenml/steps/step_context.py +1 -1
  40. zenml/utils/dashboard_utils.py +3 -3
  41. zenml/zen_server/auth.py +6 -3
  42. zenml/zen_server/dashboard/assets/{404-_AtuLtaX.js → 404-DmJUgorp.js} +1 -1
  43. zenml/zen_server/dashboard/assets/{@radix-C7hRs6Kx.js → @radix-Cdvw4jJ8.js} +1 -1
  44. zenml/zen_server/dashboard/assets/{@react-router-CNP6g_RL.js → @react-router-DeDfXbUF.js} +5 -5
  45. zenml/zen_server/dashboard/assets/{@reactflow-CQi1Z1Wq.js → @reactflow-8OCk19Fi.js} +1 -1
  46. zenml/zen_server/dashboard/assets/{@tanstack-CSxjHCME.js → @tanstack-5gTMR7G2.js} +4 -4
  47. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-CZW4QyWn.js +1 -0
  48. zenml/zen_server/dashboard/assets/ButtonGroup-DFWWFGUE.js +1 -0
  49. zenml/zen_server/dashboard/assets/{CodeSnippet-CvI6D0wx.js → CodeSnippet-D2HkkAGr.js} +1 -1
  50. zenml/zen_server/dashboard/assets/CollapsibleCard-CnS09ljw.js +1 -0
  51. zenml/zen_server/dashboard/assets/{ComponentBadge-DKw7Gndh.js → ComponentBadge-CDgdd0Ks.js} +1 -1
  52. zenml/zen_server/dashboard/assets/ComponentIcon-CbbOc7lb.js +1 -0
  53. zenml/zen_server/dashboard/assets/{DeleteAlertDialog-DVvXt-S6.js → DeleteAlertDialog-VIOMDLmx.js} +1 -1
  54. zenml/zen_server/dashboard/assets/DialogItem-ClFCqxEp.js +1 -0
  55. zenml/zen_server/dashboard/assets/{DisplayDate-CYVBBSgr.js → DisplayDate-8RESqe5H.js} +1 -1
  56. zenml/zen_server/dashboard/assets/{EmptyState-M1jafpg6.js → EmptyState-CjrgDtVk.js} +1 -1
  57. zenml/zen_server/dashboard/assets/{Error-BWaXP0VK.js → Error-CQzjbDcN.js} +1 -1
  58. zenml/zen_server/dashboard/assets/ExecutionStatus-CWreILP0.js +1 -0
  59. zenml/zen_server/dashboard/assets/{Helpbox-iE1xLmiZ.js → Helpbox-CiKxG5_X.js} +1 -1
  60. zenml/zen_server/dashboard/assets/Infobox-CGxFvqzi.js +1 -0
  61. zenml/zen_server/dashboard/assets/LeftSideMenu-DCsKdIjC.js +1 -0
  62. zenml/zen_server/dashboard/assets/{Lock-DW-0_M0o.js → Lock-CrIAdQo6.js} +1 -1
  63. zenml/zen_server/dashboard/assets/NestedCollapsible-3M4llYtH.js +1 -0
  64. zenml/zen_server/dashboard/assets/NumberBox-C0mQktmV.js +1 -0
  65. zenml/zen_server/dashboard/assets/Partials-DSjkttlz.js +1 -0
  66. zenml/zen_server/dashboard/assets/{PasswordChecker-lYTOtNom.js → PasswordChecker-B88WjuCe.js} +1 -1
  67. zenml/zen_server/dashboard/assets/ProCta-Dm5cWKpS.js +1 -0
  68. zenml/zen_server/dashboard/assets/{ProviderIcon-DLo7t1lo.js → ProviderIcon-DPwMR6nF.js} +1 -1
  69. zenml/zen_server/dashboard/assets/ProviderRadio-DEDNRgAb.js +1 -0
  70. zenml/zen_server/dashboard/assets/RunsBody-BRBn1e2O.js +1 -0
  71. zenml/zen_server/dashboard/assets/SearchField-DY6-UbRT.js +1 -0
  72. zenml/zen_server/dashboard/assets/SecretTooltip-CZTRnaCV.js +1 -0
  73. zenml/zen_server/dashboard/assets/{SetPassword-DR-EiLI5.js → SetPassword-BjNGDC5e.js} +1 -1
  74. zenml/zen_server/dashboard/assets/SheetHeader-CASpN2Lz.js +1 -0
  75. zenml/zen_server/dashboard/assets/StackComponentList-Be1pQt9m.js +1 -0
  76. zenml/zen_server/dashboard/assets/StackList-BdiR5DvR.js +1 -0
  77. zenml/zen_server/dashboard/assets/StackName-ojLC6xdl.js +1 -0
  78. zenml/zen_server/dashboard/assets/Tabs-DNSKblCM.js +1 -0
  79. zenml/zen_server/dashboard/assets/Tick-BPrWnNlN.js +1 -0
  80. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DbFEaezI.js → UpdatePasswordSchemas-CNfKDo2Q.js} +1 -1
  81. zenml/zen_server/dashboard/assets/UsageReason-Cb-mpV8M.js +1 -0
  82. zenml/zen_server/dashboard/assets/{Wizard-CMI6Ksgz.js → Wizard-Dg8Pmn5A.js} +1 -1
  83. zenml/zen_server/dashboard/assets/WizardFooter-BcNDIvlQ.js +1 -0
  84. zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-BGASHYtF.js → all-pipeline-runs-query-DCdax7I5.js} +1 -1
  85. zenml/zen_server/dashboard/assets/{arrow-left-CwgF2MEM.js → arrow-left-MRXv5pAH.js} +1 -1
  86. zenml/zen_server/dashboard/assets/bulk-delete-C_kpIB9A.js +3 -0
  87. zenml/zen_server/dashboard/assets/{check-DK77doTf.js → check-B9QMTa3f.js} +1 -1
  88. zenml/zen_server/dashboard/assets/{check-circle-mvyzYvIW.js → check-circle-C4tYvbtw.js} +1 -1
  89. zenml/zen_server/dashboard/assets/{chevron-down-A-rmltmI.js → chevron-down-jbbQh82s.js} +1 -1
  90. zenml/zen_server/dashboard/assets/{chevron-right-double-uNWbJT-C.js → chevron-right-double-Dgp_gEsp.js} +1 -1
  91. zenml/zen_server/dashboard/assets/{clock-CPA5cYxq.js → clock-B_mTG8PH.js} +1 -1
  92. zenml/zen_server/dashboard/assets/{code-browser-j2EpcxIA.js → code-browser-CiD8qkBx.js} +1 -1
  93. zenml/zen_server/dashboard/assets/configuration-form-B2hmKGnF.js +1 -0
  94. zenml/zen_server/dashboard/assets/connectivity-4UKGMYnr.webp +0 -0
  95. zenml/zen_server/dashboard/assets/constants-1EZZxtay.js +1 -0
  96. zenml/zen_server/dashboard/assets/create-stack-TKmMtrkQ.js +1 -0
  97. zenml/zen_server/dashboard/assets/dates-Buh6SMo7.js +1 -0
  98. zenml/zen_server/dashboard/assets/delete-run-CCR9md_s.js +1 -0
  99. zenml/zen_server/dashboard/assets/eye-CbVlAYty.js +1 -0
  100. zenml/zen_server/dashboard/assets/{file-text-BdxZdjP_.js → file-text-Cd8wVfq5.js} +1 -1
  101. zenml/zen_server/dashboard/assets/form-DFJkaFDX.js +1 -0
  102. zenml/zen_server/dashboard/assets/form-schemas-CrznJVzA.js +1 -0
  103. zenml/zen_server/dashboard/assets/{gcp-CHNvgEss.js → gcp-B1I3Qvcx.js} +1 -1
  104. zenml/zen_server/dashboard/assets/{help-DyMolRxD.js → help-Co6aedki.js} +1 -1
  105. zenml/zen_server/dashboard/assets/index-BFqbGSck.js +308 -0
  106. zenml/zen_server/dashboard/assets/{index-CrhdX_qG.js → index-BjUu1mP4.js} +1 -1
  107. zenml/zen_server/dashboard/assets/{index-DR30v9MZ.js → index-DWpiv-Ft.js} +1 -1
  108. zenml/zen_server/dashboard/assets/index-DuhuqTCI.css +1 -0
  109. zenml/zen_server/dashboard/assets/index-U992soPJ.js +1 -0
  110. zenml/zen_server/dashboard/assets/index.es-C1gfATPn.js +14 -0
  111. zenml/zen_server/dashboard/assets/{index.esm-D7jFlf5N.js → index.esm-DhJo3mA6.js} +1 -1
  112. zenml/zen_server/dashboard/assets/info-QkbQz4QU.js +1 -0
  113. zenml/zen_server/dashboard/assets/{key-icon-DO4DPJHZ.js → key-icon-C07HKw8z.js} +1 -1
  114. zenml/zen_server/dashboard/assets/{layout-h3cbx8WZ.js → layout-DBbfEFBe.js} +1 -1
  115. zenml/zen_server/dashboard/assets/layout-Do9YI4QX.js +1 -0
  116. zenml/zen_server/dashboard/assets/login-mutation-D3tFP6Wm.js +1 -0
  117. zenml/zen_server/dashboard/assets/{logs-B5n0U7tB.js → logs-CQKlJjo0.js} +1 -1
  118. zenml/zen_server/dashboard/assets/{package-D1Mhqeh8.js → package-miExReQl.js} +1 -1
  119. zenml/zen_server/dashboard/assets/page-9RjCitFH.js +1 -0
  120. zenml/zen_server/dashboard/assets/page-B0PsXWiT.js +1 -0
  121. zenml/zen_server/dashboard/assets/page-BCrKmYIZ.js +1 -0
  122. zenml/zen_server/dashboard/assets/page-BcRI3-aR.js +29 -0
  123. zenml/zen_server/dashboard/assets/page-Be3R2uYn.js +1 -0
  124. zenml/zen_server/dashboard/assets/page-BgknnddT.js +1 -0
  125. zenml/zen_server/dashboard/assets/page-BrT0_zSJ.js +40 -0
  126. zenml/zen_server/dashboard/assets/page-Bs3W2FDi.js +1 -0
  127. zenml/zen_server/dashboard/assets/page-C210HcBA.js +1 -0
  128. zenml/zen_server/dashboard/assets/page-C6KaiZ_W.js +1 -0
  129. zenml/zen_server/dashboard/assets/page-CAJ8B0vb.js +1 -0
  130. zenml/zen_server/dashboard/assets/page-CAUYrfui.js +1 -0
  131. zenml/zen_server/dashboard/assets/page-CHxVhF3x.js +1 -0
  132. zenml/zen_server/dashboard/assets/{page-CSwZxZMQ.js → page-CN7lkvXr.js} +1 -1
  133. zenml/zen_server/dashboard/assets/page-CUaMMoPG.js +1 -0
  134. zenml/zen_server/dashboard/assets/page-Cal6XQ4U.js +1 -0
  135. zenml/zen_server/dashboard/assets/page-CdZCmszX.js +1 -0
  136. zenml/zen_server/dashboard/assets/page-ChGcZI_6.js +1 -0
  137. zenml/zen_server/dashboard/assets/page-CktmtZ8Z.js +1 -0
  138. zenml/zen_server/dashboard/assets/page-ClvmVesa.js +1 -0
  139. zenml/zen_server/dashboard/assets/page-CnbIYE80.js +1 -0
  140. zenml/zen_server/dashboard/assets/page-CoXzjeEY.js +1 -0
  141. zenml/zen_server/dashboard/assets/page-CtiuMP_r.js +1 -0
  142. zenml/zen_server/dashboard/assets/page-D9Hfx6GV.js +1 -0
  143. zenml/zen_server/dashboard/assets/page-D9iuB88h.js +1 -0
  144. zenml/zen_server/dashboard/assets/page-DCcuPZ8P.js +1 -0
  145. zenml/zen_server/dashboard/assets/page-DEohTSz6.js +1 -0
  146. zenml/zen_server/dashboard/assets/page-DJIGaUQ9.js +1 -0
  147. zenml/zen_server/dashboard/assets/page-DKK6ulgy.js +1 -0
  148. zenml/zen_server/dashboard/assets/page-DNjKHjnH.js +1 -0
  149. zenml/zen_server/dashboard/assets/page-DUK0Nd_1.js +1 -0
  150. zenml/zen_server/dashboard/assets/page-DUKbOhaD.js +1 -0
  151. zenml/zen_server/dashboard/assets/page-DYOucPtA.js +1 -0
  152. zenml/zen_server/dashboard/assets/page-DpqRelAy.js +1 -0
  153. zenml/zen_server/dashboard/assets/{page-ZfTtFicG.js → page-DwVPpCFg.js} +2 -2
  154. zenml/zen_server/dashboard/assets/page-XURWnYZP.js +1 -0
  155. zenml/zen_server/dashboard/assets/page-abw-2oeW.js +1 -0
  156. zenml/zen_server/dashboard/assets/page-akLcPcKw.js +1 -0
  157. zenml/zen_server/dashboard/assets/page-n9ejQ2V3.js +2 -0
  158. zenml/zen_server/dashboard/assets/page-sJjNT9xA.js +6 -0
  159. zenml/zen_server/dashboard/assets/{persist-UUym702q.js → persist-DWMWVP-y.js} +1 -1
  160. zenml/zen_server/dashboard/assets/{persist-D87V82eO.js → persist-Dec_w7aB.js} +1 -1
  161. zenml/zen_server/dashboard/assets/pipeline-CSUlkd50.js +1 -0
  162. zenml/zen_server/dashboard/assets/{plus-COjQg3AG.js → plus-Cl0_rCVF.js} +1 -1
  163. zenml/zen_server/dashboard/assets/{react-error-boundary.esm-fyoUBS25.js → react-error-boundary.esm-7_MuhCay.js} +1 -1
  164. zenml/zen_server/dashboard/assets/{refresh-CM5T3QeU.js → refresh-BcTM09NW.js} +1 -1
  165. zenml/zen_server/dashboard/assets/resource-tyes-list-o2LXiMay.js +1 -0
  166. zenml/zen_server/dashboard/assets/resource-type-tooltip-DwHrJstL.js +1 -0
  167. zenml/zen_server/dashboard/assets/service-connectors-DSEMwJ5A.js +1 -0
  168. zenml/zen_server/dashboard/assets/{service-BQ9KIhls.js → service-jxtvgks0.js} +2 -2
  169. zenml/zen_server/dashboard/assets/sharedSchema-BXzg0EZz.js +1 -0
  170. zenml/zen_server/dashboard/assets/stack-detail-query-Cm0fsgo-.js +1 -0
  171. zenml/zen_server/dashboard/assets/{terminal-square-DMtel8mb.js → terminal-XFL_4QN-.js} +1 -1
  172. zenml/zen_server/dashboard/assets/terminal-square-XFL_4QN-.js +1 -0
  173. zenml/zen_server/dashboard/assets/transform-CeZdrxDZ.js +1 -0
  174. zenml/zen_server/dashboard/assets/{trash-BWSZ7NRK.js → trash-DP6Tpp_E.js} +1 -1
  175. zenml/zen_server/dashboard/assets/type-guards-CNgPYg8l.js +1 -0
  176. zenml/zen_server/dashboard/assets/update-current-user-mutation-D5MjcQ6F.js +1 -0
  177. zenml/zen_server/dashboard/assets/update-server-settings-mutation-CmnxdxiK.js +1 -0
  178. zenml/zen_server/dashboard/assets/{zod-C0xYeTvL.js → zod-XdS2h1ws.js} +1 -1
  179. zenml/zen_server/dashboard/index.html +7 -7
  180. zenml/zen_server/rbac/utils.py +2 -2
  181. zenml/zen_server/routers/auth_endpoints.py +2 -2
  182. zenml/zen_server/routers/devices_endpoints.py +8 -5
  183. zenml/zen_server/routers/pipeline_deployments_endpoints.py +1 -1
  184. zenml/zen_server/routers/pipelines_endpoints.py +1 -1
  185. zenml/zen_server/routers/run_templates_endpoints.py +3 -3
  186. zenml/zen_server/routers/runs_endpoints.py +35 -0
  187. zenml/zen_server/template_execution/utils.py +6 -6
  188. zenml/zen_stores/dag_generator.py +171 -0
  189. zenml/zen_stores/rest_zen_store.py +17 -3
  190. zenml/zen_stores/schemas/action_schemas.py +40 -4
  191. zenml/zen_stores/schemas/api_key_schemas.py +29 -1
  192. zenml/zen_stores/schemas/artifact_schemas.py +168 -48
  193. zenml/zen_stores/schemas/base_schemas.py +26 -1
  194. zenml/zen_stores/schemas/code_repository_schemas.py +46 -5
  195. zenml/zen_stores/schemas/component_schemas.py +44 -3
  196. zenml/zen_stores/schemas/device_schemas.py +43 -2
  197. zenml/zen_stores/schemas/event_source_schemas.py +41 -5
  198. zenml/zen_stores/schemas/flavor_schemas.py +42 -2
  199. zenml/zen_stores/schemas/model_schemas.py +113 -77
  200. zenml/zen_stores/schemas/pipeline_build_schemas.py +53 -4
  201. zenml/zen_stores/schemas/pipeline_deployment_schemas.py +53 -4
  202. zenml/zen_stores/schemas/pipeline_run_schemas.py +111 -47
  203. zenml/zen_stores/schemas/pipeline_schemas.py +41 -9
  204. zenml/zen_stores/schemas/run_template_schemas.py +75 -11
  205. zenml/zen_stores/schemas/schedule_schema.py +50 -5
  206. zenml/zen_stores/schemas/secret_schemas.py +39 -2
  207. zenml/zen_stores/schemas/service_connector_schemas.py +39 -2
  208. zenml/zen_stores/schemas/service_schemas.py +39 -4
  209. zenml/zen_stores/schemas/stack_schemas.py +47 -2
  210. zenml/zen_stores/schemas/step_run_schemas.py +89 -26
  211. zenml/zen_stores/schemas/tag_schemas.py +69 -5
  212. zenml/zen_stores/schemas/trigger_schemas.py +44 -5
  213. zenml/zen_stores/schemas/utils.py +25 -4
  214. zenml/zen_stores/sql_zen_store.py +471 -28
  215. zenml/zen_stores/zen_store_interface.py +9 -1
  216. {zenml_nightly-0.82.1.dev20250527.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/METADATA +1 -1
  217. {zenml_nightly-0.82.1.dev20250527.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/RECORD +220 -214
  218. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-BG7-Ki1L.js +0 -1
  219. zenml/zen_server/dashboard/assets/CollapsibleCard-D20FtrzC.js +0 -1
  220. zenml/zen_server/dashboard/assets/Commands-DGbAvMDk.js +0 -1
  221. zenml/zen_server/dashboard/assets/ComponentIcon-ils7uNAk.js +0 -1
  222. zenml/zen_server/dashboard/assets/CsvVizualization-DVN541XF.js +0 -15
  223. zenml/zen_server/dashboard/assets/DialogItem-BHWf3sIB.js +0 -1
  224. zenml/zen_server/dashboard/assets/ExecutionStatus-XrvT2r65.js +0 -1
  225. zenml/zen_server/dashboard/assets/Infobox-D9k5TFH4.js +0 -1
  226. zenml/zen_server/dashboard/assets/InlineAvatar-Cfz4WSLK.js +0 -1
  227. zenml/zen_server/dashboard/assets/MarkdownVisualization-URCyUPcZ.js +0 -14
  228. zenml/zen_server/dashboard/assets/NestedCollapsible-Dor-bi98.js +0 -1
  229. zenml/zen_server/dashboard/assets/NumberBox-D2A7ENHb.js +0 -1
  230. zenml/zen_server/dashboard/assets/Partials-DQJFw1yW.js +0 -1
  231. zenml/zen_server/dashboard/assets/ProBadge-Cp4hb1YT.js +0 -1
  232. zenml/zen_server/dashboard/assets/ProCta-EYoV9CvK.js +0 -1
  233. zenml/zen_server/dashboard/assets/ProviderRadio-BVDA-fAr.js +0 -1
  234. zenml/zen_server/dashboard/assets/RunSelector-BLuBYNJt.js +0 -1
  235. zenml/zen_server/dashboard/assets/RunsBody-W4WHf-sq.js +0 -1
  236. zenml/zen_server/dashboard/assets/SearchField-D-h6jXyg.js +0 -1
  237. zenml/zen_server/dashboard/assets/SecretTooltip-CePCL8kd.js +0 -1
  238. zenml/zen_server/dashboard/assets/StackList-CgmN5H-i.js +0 -1
  239. zenml/zen_server/dashboard/assets/Tabs-DxQ8PDOD.js +0 -1
  240. zenml/zen_server/dashboard/assets/Tick-CEsT3HPR.js +0 -1
  241. zenml/zen_server/dashboard/assets/UsageReason-DjI5qMje.js +0 -1
  242. zenml/zen_server/dashboard/assets/WizardFooter-CFBHFZas.js +0 -1
  243. zenml/zen_server/dashboard/assets/cloud-squares-DeRLMopf.svg +0 -43
  244. zenml/zen_server/dashboard/assets/configuration-form-BtI2Y4eX.js +0 -1
  245. zenml/zen_server/dashboard/assets/connectors-video-C9qY4syJ.svg +0 -21
  246. zenml/zen_server/dashboard/assets/constants-DP3ZEnXH.js +0 -1
  247. zenml/zen_server/dashboard/assets/create-stack-BJ6x5rzj.js +0 -1
  248. zenml/zen_server/dashboard/assets/dates-3pMLCNrD.js +0 -1
  249. zenml/zen_server/dashboard/assets/delete-run-DlSLEl5T.js +0 -1
  250. zenml/zen_server/dashboard/assets/docker-BuDBFEDL.js +0 -1
  251. zenml/zen_server/dashboard/assets/dots-horizontal-BGRJCPCs.js +0 -1
  252. zenml/zen_server/dashboard/assets/flavor-select-BnPxvQDN.js +0 -1
  253. zenml/zen_server/dashboard/assets/form-schemas-CbvoEUHr.js +0 -1
  254. zenml/zen_server/dashboard/assets/index-CFESYpe4.js +0 -1
  255. zenml/zen_server/dashboard/assets/index-CmLcvK2z.js +0 -1
  256. zenml/zen_server/dashboard/assets/index-CzX3ZYlI.css +0 -1
  257. zenml/zen_server/dashboard/assets/index-D2iSHVZq.js +0 -64
  258. zenml/zen_server/dashboard/assets/kubernetes-D6OUjwSK.js +0 -1
  259. zenml/zen_server/dashboard/assets/link-external-DUhCSKNm.js +0 -1
  260. zenml/zen_server/dashboard/assets/login-command-CkqxPtV3.js +0 -1
  261. zenml/zen_server/dashboard/assets/login-mutation-CXc-Klim.js +0 -1
  262. zenml/zen_server/dashboard/assets/not-found-olRU3fnu.js +0 -1
  263. zenml/zen_server/dashboard/assets/page-7keIM1V3.js +0 -1
  264. zenml/zen_server/dashboard/assets/page-B31neFwG.js +0 -1
  265. zenml/zen_server/dashboard/assets/page-B3zo4KYS.js +0 -1
  266. zenml/zen_server/dashboard/assets/page-BN3MHq1a.js +0 -1
  267. zenml/zen_server/dashboard/assets/page-BNgVExjN.js +0 -1
  268. zenml/zen_server/dashboard/assets/page-BPtvu74G.js +0 -1
  269. zenml/zen_server/dashboard/assets/page-BTIuG0ki.js +0 -2
  270. zenml/zen_server/dashboard/assets/page-BcQzleH6.js +0 -1
  271. zenml/zen_server/dashboard/assets/page-C05Jw4M2.js +0 -1
  272. zenml/zen_server/dashboard/assets/page-C28a7K8h.js +0 -1
  273. zenml/zen_server/dashboard/assets/page-C9WLk0X-.js +0 -1
  274. zenml/zen_server/dashboard/assets/page-CINMx64X.js +0 -1
  275. zenml/zen_server/dashboard/assets/page-CYrJbk7P.js +0 -1
  276. zenml/zen_server/dashboard/assets/page-Ce0cqLo3.js +0 -1
  277. zenml/zen_server/dashboard/assets/page-CgNsEkw-.js +0 -1
  278. zenml/zen_server/dashboard/assets/page-Ct2FUYuR.js +0 -1
  279. zenml/zen_server/dashboard/assets/page-D8G2B3Bu.js +0 -1
  280. zenml/zen_server/dashboard/assets/page-DL8a4_lg.js +0 -3
  281. zenml/zen_server/dashboard/assets/page-DMhYn1cF.js +0 -1
  282. zenml/zen_server/dashboard/assets/page-Dd_Yq-Uf.js +0 -6
  283. zenml/zen_server/dashboard/assets/page-DfSvqT8g.js +0 -1
  284. zenml/zen_server/dashboard/assets/page-Dt6ANUTx.js +0 -1
  285. zenml/zen_server/dashboard/assets/page-DtvTleaT.js +0 -1
  286. zenml/zen_server/dashboard/assets/page-DwfGTiVs.js +0 -1
  287. zenml/zen_server/dashboard/assets/page-JgomSTDc.js +0 -1
  288. zenml/zen_server/dashboard/assets/page-L84ig6HB.js +0 -1
  289. zenml/zen_server/dashboard/assets/page-Mabsn4QJ.js +0 -1
  290. zenml/zen_server/dashboard/assets/page-P04L5cm9.js +0 -1
  291. zenml/zen_server/dashboard/assets/page-PfhAnvq4.js +0 -1
  292. zenml/zen_server/dashboard/assets/page-WdRrlNt_.js +0 -1
  293. zenml/zen_server/dashboard/assets/page-cqJDDDeK.js +0 -1
  294. zenml/zen_server/dashboard/assets/page-k-Wxh9L_.js +0 -1
  295. zenml/zen_server/dashboard/assets/page-y-zV4n0c.js +0 -1
  296. zenml/zen_server/dashboard/assets/rocket-Cf-B-XOR.js +0 -1
  297. zenml/zen_server/dashboard/assets/settings_preview-0JLrRgHP.webp +0 -0
  298. zenml/zen_server/dashboard/assets/sharedSchema-Bse2agAf.js +0 -14
  299. zenml/zen_server/dashboard/assets/stack-detail-query-BAcZJrN3.js +0 -1
  300. zenml/zen_server/dashboard/assets/tick-circle-m94Aa6Zt.js +0 -1
  301. zenml/zen_server/dashboard/assets/tour-cover-BYfeen6M.webp +0 -0
  302. zenml/zen_server/dashboard/assets/type-guards-CaeD8wHO.js +0 -1
  303. zenml/zen_server/dashboard/assets/update-server-settings-mutation-DwMM1LJz.js +0 -1
  304. {zenml_nightly-0.82.1.dev20250527.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/LICENSE +0 -0
  305. {zenml_nightly-0.82.1.dev20250527.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/WHEEL +0 -0
  306. {zenml_nightly-0.82.1.dev20250527.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/entry_points.txt +0 -0
@@ -15,10 +15,12 @@
15
15
 
16
16
  import base64
17
17
  import json
18
- from typing import TYPE_CHECKING, Any, List, Optional
18
+ from typing import TYPE_CHECKING, Any, List, Optional, Sequence
19
19
  from uuid import UUID
20
20
 
21
21
  from sqlalchemy import UniqueConstraint
22
+ from sqlalchemy.orm import joinedload
23
+ from sqlalchemy.sql.base import ExecutableOption
22
24
  from sqlmodel import Relationship
23
25
 
24
26
  from zenml.enums import StackComponentType
@@ -38,6 +40,7 @@ from zenml.zen_stores.schemas.service_connector_schemas import (
38
40
  )
39
41
  from zenml.zen_stores.schemas.stack_schemas import StackCompositionSchema
40
42
  from zenml.zen_stores.schemas.user_schemas import UserSchema
43
+ from zenml.zen_stores.schemas.utils import jl_arg
41
44
 
42
45
  if TYPE_CHECKING:
43
46
  from zenml.zen_stores.schemas.flavor_schemas import FlavorSchema
@@ -111,6 +114,43 @@ class StackComponentSchema(NamedSchema, table=True):
111
114
 
112
115
  connector_resource_id: Optional[str]
113
116
 
117
+ @classmethod
118
+ def get_query_options(
119
+ cls,
120
+ include_metadata: bool = False,
121
+ include_resources: bool = False,
122
+ **kwargs: Any,
123
+ ) -> Sequence[ExecutableOption]:
124
+ """Get the query options for the schema.
125
+
126
+ Args:
127
+ include_metadata: Whether metadata will be included when converting
128
+ the schema to a model.
129
+ include_resources: Whether resources will be included when
130
+ converting the schema to a model.
131
+ **kwargs: Keyword arguments to allow schema specific logic
132
+
133
+ Returns:
134
+ A list of query options.
135
+ """
136
+ options = [
137
+ joinedload(jl_arg(StackComponentSchema.flavor_schema)),
138
+ ]
139
+
140
+ if include_metadata:
141
+ options.extend(
142
+ [joinedload(jl_arg(StackComponentSchema.connector))]
143
+ )
144
+
145
+ if include_resources:
146
+ options.extend(
147
+ [
148
+ joinedload(jl_arg(StackComponentSchema.user)),
149
+ ]
150
+ )
151
+
152
+ return options
153
+
114
154
  @classmethod
115
155
  def from_request(
116
156
  cls,
@@ -190,9 +230,9 @@ class StackComponentSchema(NamedSchema, table=True):
190
230
  A `ComponentModel`
191
231
  """
192
232
  body = ComponentResponseBody(
233
+ user_id=self.user_id,
193
234
  type=StackComponentType(self.type),
194
235
  flavor_name=self.flavor,
195
- user=self.user.to_model() if self.user else None,
196
236
  created=self.created,
197
237
  updated=self.updated,
198
238
  logo_url=self.flavor_schema.logo_url
@@ -224,7 +264,8 @@ class StackComponentSchema(NamedSchema, table=True):
224
264
  )
225
265
 
226
266
  resources = ComponentResponseResources(
227
- flavor=self.flavor_schema.to_model()
267
+ user=self.user.to_model() if self.user else None,
268
+ flavor=self.flavor_schema.to_model(),
228
269
  )
229
270
  return ComponentResponse(
230
271
  id=self.id,
@@ -15,10 +15,12 @@
15
15
 
16
16
  from datetime import datetime, timedelta
17
17
  from secrets import token_hex
18
- from typing import Any, Optional, Tuple
18
+ from typing import Any, Optional, Sequence, Tuple
19
19
  from uuid import UUID
20
20
 
21
21
  from passlib.context import CryptContext
22
+ from sqlalchemy.orm import joinedload
23
+ from sqlalchemy.sql.base import ExecutableOption
22
24
  from sqlmodel import Relationship
23
25
 
24
26
  from zenml.enums import OAuthDeviceStatus
@@ -29,12 +31,14 @@ from zenml.models import (
29
31
  OAuthDeviceResponse,
30
32
  OAuthDeviceResponseBody,
31
33
  OAuthDeviceResponseMetadata,
34
+ OAuthDeviceResponseResources,
32
35
  OAuthDeviceUpdate,
33
36
  )
34
37
  from zenml.utils.time_utils import utc_now
35
38
  from zenml.zen_stores.schemas.base_schemas import BaseSchema
36
39
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
37
40
  from zenml.zen_stores.schemas.user_schemas import UserSchema
41
+ from zenml.zen_stores.schemas.utils import jl_arg
38
42
 
39
43
 
40
44
  class OAuthDeviceSchema(BaseSchema, table=True):
@@ -69,6 +73,36 @@ class OAuthDeviceSchema(BaseSchema, table=True):
69
73
  )
70
74
  user: Optional["UserSchema"] = Relationship(back_populates="auth_devices")
71
75
 
76
+ @classmethod
77
+ def get_query_options(
78
+ cls,
79
+ include_metadata: bool = False,
80
+ include_resources: bool = False,
81
+ **kwargs: Any,
82
+ ) -> Sequence[ExecutableOption]:
83
+ """Get the query options for the schema.
84
+
85
+ Args:
86
+ include_metadata: Whether metadata will be included when converting
87
+ the schema to a model.
88
+ include_resources: Whether resources will be included when
89
+ converting the schema to a model.
90
+ **kwargs: Keyword arguments to allow schema specific logic
91
+
92
+ Returns:
93
+ A list of query options.
94
+ """
95
+ options = []
96
+
97
+ if include_resources:
98
+ options.extend(
99
+ [
100
+ joinedload(jl_arg(OAuthDeviceSchema.user)),
101
+ ]
102
+ )
103
+
104
+ return options
105
+
72
106
  @classmethod
73
107
  def _generate_user_code(cls) -> str:
74
108
  """Generate a user code for an OAuth2 device.
@@ -230,7 +264,7 @@ class OAuthDeviceSchema(BaseSchema, table=True):
230
264
  )
231
265
 
232
266
  body = OAuthDeviceResponseBody(
233
- user=self.user.to_model() if self.user else None,
267
+ user_id=self.user_id,
234
268
  created=self.created,
235
269
  updated=self.updated,
236
270
  client_id=self.client_id,
@@ -241,10 +275,16 @@ class OAuthDeviceSchema(BaseSchema, table=True):
241
275
  ip_address=self.ip_address,
242
276
  hostname=self.hostname,
243
277
  )
278
+ resources = None
279
+ if include_resources:
280
+ resources = OAuthDeviceResponseResources(
281
+ user=self.user.to_model() if self.user else None,
282
+ )
244
283
  return OAuthDeviceResponse(
245
284
  id=self.id,
246
285
  body=body,
247
286
  metadata=metadata,
287
+ resources=resources,
248
288
  )
249
289
 
250
290
  def to_internal_model(
@@ -269,6 +309,7 @@ class OAuthDeviceSchema(BaseSchema, table=True):
269
309
  id=device_model.id,
270
310
  body=device_model.body,
271
311
  metadata=device_model.metadata,
312
+ resources=device_model.resources,
272
313
  user_code=self.user_code,
273
314
  device_code=self.device_code,
274
315
  )
@@ -15,10 +15,12 @@
15
15
 
16
16
  import base64
17
17
  import json
18
- from typing import TYPE_CHECKING, Any, List, Optional, cast
18
+ from typing import TYPE_CHECKING, Any, List, Optional, Sequence, cast
19
19
  from uuid import UUID
20
20
 
21
21
  from sqlalchemy import TEXT, Column, UniqueConstraint
22
+ from sqlalchemy.orm import joinedload
23
+ from sqlalchemy.sql.base import ExecutableOption
22
24
  from sqlmodel import Field, Relationship
23
25
 
24
26
  from zenml import EventSourceResponseMetadata
@@ -36,7 +38,10 @@ from zenml.zen_stores.schemas.base_schemas import NamedSchema
36
38
  from zenml.zen_stores.schemas.project_schemas import ProjectSchema
37
39
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
38
40
  from zenml.zen_stores.schemas.user_schemas import UserSchema
39
- from zenml.zen_stores.schemas.utils import get_page_from_list
41
+ from zenml.zen_stores.schemas.utils import (
42
+ get_page_from_list,
43
+ jl_arg,
44
+ )
40
45
 
41
46
  if TYPE_CHECKING:
42
47
  from zenml.zen_stores.schemas import TriggerSchema
@@ -85,6 +90,37 @@ class EventSourceSchema(NamedSchema, table=True):
85
90
  configuration: bytes
86
91
  is_active: bool = Field(nullable=False)
87
92
 
93
+ @classmethod
94
+ def get_query_options(
95
+ cls,
96
+ include_metadata: bool = False,
97
+ include_resources: bool = False,
98
+ **kwargs: Any,
99
+ ) -> Sequence[ExecutableOption]:
100
+ """Get the query options for the schema.
101
+
102
+ Args:
103
+ include_metadata: Whether metadata will be included when converting
104
+ the schema to a model.
105
+ include_resources: Whether resources will be included when
106
+ converting the schema to a model.
107
+ **kwargs: Keyword arguments to allow schema specific logic
108
+
109
+ Returns:
110
+ A list of query options.
111
+ """
112
+ options = []
113
+
114
+ if include_resources:
115
+ options.extend(
116
+ [
117
+ joinedload(jl_arg(EventSourceSchema.user)),
118
+ # joinedload(jl_arg(EventSourceSchema.triggers)),
119
+ ]
120
+ )
121
+
122
+ return options
123
+
88
124
  @classmethod
89
125
  def from_request(cls, request: EventSourceRequest) -> "EventSourceSchema":
90
126
  """Convert an `EventSourceRequest` to an `EventSourceSchema`.
@@ -133,9 +169,10 @@ class EventSourceSchema(NamedSchema, table=True):
133
169
  from zenml.models import TriggerResponse
134
170
 
135
171
  body = EventSourceResponseBody(
172
+ user_id=self.user_id,
173
+ project_id=self.project_id,
136
174
  created=self.created,
137
175
  updated=self.updated,
138
- user=self.user.to_model() if self.user else None,
139
176
  flavor=self.flavor,
140
177
  plugin_subtype=self.plugin_subtype,
141
178
  is_active=self.is_active,
@@ -152,12 +189,12 @@ class EventSourceSchema(NamedSchema, table=True):
152
189
  ),
153
190
  )
154
191
  resources = EventSourceResponseResources(
192
+ user=self.user.to_model() if self.user else None,
155
193
  triggers=triggers,
156
194
  )
157
195
  metadata = None
158
196
  if include_metadata:
159
197
  metadata = EventSourceResponseMetadata(
160
- project=self.project.to_model(),
161
198
  description=self.description,
162
199
  configuration=json.loads(
163
200
  base64.b64decode(self.configuration).decode()
@@ -165,7 +202,6 @@ class EventSourceSchema(NamedSchema, table=True):
165
202
  )
166
203
  return EventSourceResponse(
167
204
  id=self.id,
168
- project_id=self.project_id,
169
205
  name=self.name,
170
206
  body=body,
171
207
  metadata=metadata,
@@ -14,10 +14,12 @@
14
14
  """SQL Model Implementations for Flavors."""
15
15
 
16
16
  import json
17
- from typing import Any, Optional
17
+ from typing import Any, Optional, Sequence
18
18
  from uuid import UUID
19
19
 
20
20
  from sqlalchemy import TEXT, Column, UniqueConstraint
21
+ from sqlalchemy.orm import joinedload
22
+ from sqlalchemy.sql.base import ExecutableOption
21
23
  from sqlmodel import Field, Relationship
22
24
 
23
25
  from zenml.enums import StackComponentType
@@ -25,12 +27,14 @@ from zenml.models import (
25
27
  FlavorResponse,
26
28
  FlavorResponseBody,
27
29
  FlavorResponseMetadata,
30
+ FlavorResponseResources,
28
31
  FlavorUpdate,
29
32
  )
30
33
  from zenml.utils.time_utils import utc_now
31
34
  from zenml.zen_stores.schemas.base_schemas import NamedSchema
32
35
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
33
36
  from zenml.zen_stores.schemas.user_schemas import UserSchema
37
+ from zenml.zen_stores.schemas.utils import jl_arg
34
38
 
35
39
 
36
40
  class FlavorSchema(NamedSchema, table=True):
@@ -78,6 +82,36 @@ class FlavorSchema(NamedSchema, table=True):
78
82
 
79
83
  is_custom: bool = Field(default=True)
80
84
 
85
+ @classmethod
86
+ def get_query_options(
87
+ cls,
88
+ include_metadata: bool = False,
89
+ include_resources: bool = False,
90
+ **kwargs: Any,
91
+ ) -> Sequence[ExecutableOption]:
92
+ """Get the query options for the schema.
93
+
94
+ Args:
95
+ include_metadata: Whether metadata will be included when converting
96
+ the schema to a model.
97
+ include_resources: Whether resources will be included when
98
+ converting the schema to a model.
99
+ **kwargs: Keyword arguments to allow schema specific logic
100
+
101
+ Returns:
102
+ A list of query options.
103
+ """
104
+ options = []
105
+
106
+ if include_resources:
107
+ options.extend(
108
+ [
109
+ joinedload(jl_arg(FlavorSchema.user)),
110
+ ]
111
+ )
112
+
113
+ return options
114
+
81
115
  def update(
82
116
  self,
83
117
  flavor_update: "FlavorUpdate",
@@ -121,7 +155,7 @@ class FlavorSchema(NamedSchema, table=True):
121
155
  The flavor model.
122
156
  """
123
157
  body = FlavorResponseBody(
124
- user=self.user.to_model() if self.user else None,
158
+ user_id=self.user_id,
125
159
  type=StackComponentType(self.type),
126
160
  integration=self.integration,
127
161
  source=self.source,
@@ -140,9 +174,15 @@ class FlavorSchema(NamedSchema, table=True):
140
174
  docs_url=self.docs_url,
141
175
  sdk_docs_url=self.sdk_docs_url,
142
176
  )
177
+ resources = None
178
+ if include_resources:
179
+ resources = FlavorResponseResources(
180
+ user=self.user.to_model() if self.user else None,
181
+ )
143
182
  return FlavorResponse(
144
183
  id=self.id,
145
184
  name=self.name,
146
185
  body=body,
147
186
  metadata=metadata,
187
+ resources=resources,
148
188
  )
@@ -13,7 +13,7 @@
13
13
  # permissions and limitations under the License.
14
14
  """SQLModel implementation of model tables."""
15
15
 
16
- from typing import TYPE_CHECKING, Any, Dict, List, Optional, cast
16
+ from typing import TYPE_CHECKING, Any, List, Optional, Sequence, cast
17
17
  from uuid import UUID, uuid4
18
18
 
19
19
  from pydantic import ConfigDict
@@ -24,11 +24,11 @@ from sqlalchemy import (
24
24
  Column,
25
25
  UniqueConstraint,
26
26
  )
27
- from sqlalchemy.orm import object_session
27
+ from sqlalchemy.orm import joinedload, object_session
28
+ from sqlalchemy.sql.base import ExecutableOption
28
29
  from sqlmodel import Field, Relationship, desc, select
29
30
 
30
31
  from zenml.enums import (
31
- ArtifactType,
32
32
  MetadataResourceTypes,
33
33
  TaggableResourceTypes,
34
34
  )
@@ -38,6 +38,7 @@ from zenml.models import (
38
38
  ModelResponse,
39
39
  ModelResponseBody,
40
40
  ModelResponseMetadata,
41
+ ModelResponseResources,
41
42
  ModelUpdate,
42
43
  ModelVersionArtifactRequest,
43
44
  ModelVersionArtifactResponse,
@@ -65,6 +66,7 @@ from zenml.zen_stores.schemas.user_schemas import UserSchema
65
66
  from zenml.zen_stores.schemas.utils import (
66
67
  RunMetadataInterface,
67
68
  get_page_from_list,
69
+ jl_arg,
68
70
  )
69
71
 
70
72
  if TYPE_CHECKING:
@@ -127,6 +129,37 @@ class ModelSchema(NamedSchema, table=True):
127
129
  sa_relationship_kwargs={"cascade": "delete"},
128
130
  )
129
131
 
132
+ @classmethod
133
+ def get_query_options(
134
+ cls,
135
+ include_metadata: bool = False,
136
+ include_resources: bool = False,
137
+ **kwargs: Any,
138
+ ) -> Sequence[ExecutableOption]:
139
+ """Get the query options for the schema.
140
+
141
+ Args:
142
+ include_metadata: Whether metadata will be included when converting
143
+ the schema to a model.
144
+ include_resources: Whether resources will be included when
145
+ converting the schema to a model.
146
+ **kwargs: Keyword arguments to allow schema specific logic
147
+
148
+ Returns:
149
+ A list of query options.
150
+ """
151
+ options = []
152
+
153
+ if include_resources:
154
+ options.extend(
155
+ [
156
+ joinedload(jl_arg(ModelSchema.user)),
157
+ # joinedload(jl_arg(ModelSchema.tags)),
158
+ ]
159
+ )
160
+
161
+ return options
162
+
130
163
  @property
131
164
  def latest_version(self) -> Optional["ModelVersionSchema"]:
132
165
  """Fetch the latest version for this model.
@@ -194,19 +227,9 @@ class ModelSchema(NamedSchema, table=True):
194
227
  Returns:
195
228
  The created `ModelResponse`.
196
229
  """
197
- tags = [tag.to_model() for tag in self.tags]
198
-
199
- if latest_version := self.latest_version:
200
- latest_version_name = latest_version.name
201
- latest_version_id = latest_version.id
202
- else:
203
- latest_version_name = None
204
- latest_version_id = None
205
-
206
230
  metadata = None
207
231
  if include_metadata:
208
232
  metadata = ModelResponseMetadata(
209
- project=self.project.to_model(),
210
233
  license=self.license,
211
234
  description=self.description,
212
235
  audience=self.audience,
@@ -217,21 +240,35 @@ class ModelSchema(NamedSchema, table=True):
217
240
  save_models_to_registry=self.save_models_to_registry,
218
241
  )
219
242
 
243
+ resources = None
244
+ if include_resources:
245
+ if latest_version := self.latest_version:
246
+ latest_version_name = latest_version.name
247
+ latest_version_id = latest_version.id
248
+ else:
249
+ latest_version_name = None
250
+ latest_version_id = None
251
+
252
+ resources = ModelResponseResources(
253
+ user=self.user.to_model() if self.user else None,
254
+ tags=[tag.to_model() for tag in self.tags],
255
+ latest_version_name=latest_version_name,
256
+ latest_version_id=latest_version_id,
257
+ )
258
+
220
259
  body = ModelResponseBody(
221
- user=self.user.to_model() if self.user else None,
260
+ user_id=self.user_id,
261
+ project_id=self.project_id,
222
262
  created=self.created,
223
263
  updated=self.updated,
224
- tags=tags,
225
- latest_version_name=latest_version_name,
226
- latest_version_id=latest_version_id,
227
264
  )
228
265
 
229
266
  return ModelResponse(
230
267
  id=self.id,
231
- project_id=self.project_id,
232
268
  name=self.name,
233
269
  body=body,
234
270
  metadata=metadata,
271
+ resources=resources,
235
272
  )
236
273
 
237
274
  def update(
@@ -317,14 +354,6 @@ class ModelVersionSchema(NamedSchema, RunMetadataInterface, table=True):
317
354
  nullable=False,
318
355
  )
319
356
  model: "ModelSchema" = Relationship(back_populates="model_versions")
320
- artifact_links: List["ModelVersionArtifactSchema"] = Relationship(
321
- back_populates="model_version",
322
- sa_relationship_kwargs={"cascade": "delete"},
323
- )
324
- pipeline_run_links: List["ModelVersionPipelineRunSchema"] = Relationship(
325
- back_populates="model_version",
326
- sa_relationship_kwargs={"cascade": "delete"},
327
- )
328
357
  tags: List["TagSchema"] = Relationship(
329
358
  sa_relationship_kwargs=dict(
330
359
  primaryjoin=f"and_(foreign(TagResourceSchema.resource_type)=='{TaggableResourceTypes.MODEL_VERSION.value}', foreign(TagResourceSchema.resource_id)==ModelVersionSchema.id)",
@@ -369,6 +398,16 @@ class ModelVersionSchema(NamedSchema, RunMetadataInterface, table=True):
369
398
  # numeric.
370
399
  producer_run_id_if_numeric: UUID
371
400
 
401
+ # Needed for cascade deletion behavior
402
+ artifact_links: List["ModelVersionArtifactSchema"] = Relationship(
403
+ back_populates="model_version",
404
+ sa_relationship_kwargs={"cascade": "delete"},
405
+ )
406
+ pipeline_run_links: List["ModelVersionPipelineRunSchema"] = Relationship(
407
+ back_populates="model_version",
408
+ sa_relationship_kwargs={"cascade": "delete"},
409
+ )
410
+
372
411
  # TODO: In Pydantic v2, the `model_` is a protected namespaces for all
373
412
  # fields defined under base models. If not handled, this raises a warning.
374
413
  # It is possible to suppress this warning message with the following
@@ -377,6 +416,47 @@ class ModelVersionSchema(NamedSchema, RunMetadataInterface, table=True):
377
416
  # careful we might overwrite some fields protected by pydantic.
378
417
  model_config = ConfigDict(protected_namespaces=()) # type: ignore[assignment]
379
418
 
419
+ @classmethod
420
+ def get_query_options(
421
+ cls,
422
+ include_metadata: bool = False,
423
+ include_resources: bool = False,
424
+ **kwargs: Any,
425
+ ) -> Sequence[ExecutableOption]:
426
+ """Get the query options for the schema.
427
+
428
+ Args:
429
+ include_metadata: Whether metadata will be included when converting
430
+ the schema to a model.
431
+ include_resources: Whether resources will be included when
432
+ converting the schema to a model.
433
+ **kwargs: Keyword arguments to allow schema specific logic
434
+
435
+ Returns:
436
+ A list of query options.
437
+ """
438
+ options = [
439
+ joinedload(jl_arg(ModelVersionSchema.model), innerjoin=True),
440
+ ]
441
+
442
+ # if include_metadata:
443
+ # options.extend(
444
+ # [
445
+ # joinedload(jl_arg(ModelVersionSchema.run_metadata)),
446
+ # ]
447
+ # )
448
+
449
+ if include_resources:
450
+ options.extend(
451
+ [
452
+ joinedload(jl_arg(ModelVersionSchema.user)),
453
+ # joinedload(jl_arg(ModelVersionSchema.services)),
454
+ # joinedload(jl_arg(ModelVersionSchema.tags)),
455
+ ]
456
+ )
457
+
458
+ return options
459
+
380
460
  @classmethod
381
461
  def from_request(
382
462
  cls,
@@ -430,44 +510,9 @@ class ModelVersionSchema(NamedSchema, RunMetadataInterface, table=True):
430
510
  """
431
511
  from zenml.models import ServiceResponse
432
512
 
433
- # Construct {name: {version: id}} dicts for all linked artifacts
434
- model_artifact_ids: Dict[str, Dict[str, UUID]] = {}
435
- deployment_artifact_ids: Dict[str, Dict[str, UUID]] = {}
436
- data_artifact_ids: Dict[str, Dict[str, UUID]] = {}
437
- for artifact_link in self.artifact_links:
438
- if not artifact_link.artifact_version:
439
- continue
440
- artifact_name = artifact_link.artifact_version.artifact.name
441
- artifact_version = str(artifact_link.artifact_version.version)
442
- artifact_version_id = artifact_link.artifact_version.id
443
- if artifact_link.artifact_version.type == ArtifactType.MODEL.value:
444
- model_artifact_ids.setdefault(artifact_name, {}).update(
445
- {str(artifact_version): artifact_version_id}
446
- )
447
- elif (
448
- artifact_link.artifact_version.type
449
- == ArtifactType.SERVICE.value
450
- ):
451
- deployment_artifact_ids.setdefault(artifact_name, {}).update(
452
- {str(artifact_version): artifact_version_id}
453
- )
454
- else:
455
- data_artifact_ids.setdefault(artifact_name, {}).update(
456
- {str(artifact_version): artifact_version_id}
457
- )
458
-
459
- # Construct {name: id} dict for all linked pipeline runs
460
- pipeline_run_ids: Dict[str, UUID] = {}
461
- for pipeline_run_link in self.pipeline_run_links:
462
- if not pipeline_run_link.pipeline_run:
463
- continue
464
- pipeline_run = pipeline_run_link.pipeline_run
465
- pipeline_run_ids[pipeline_run.name] = pipeline_run.id
466
-
467
513
  metadata = None
468
514
  if include_metadata:
469
515
  metadata = ModelVersionResponseMetadata(
470
- project=self.project.to_model(),
471
516
  description=self.description,
472
517
  run_metadata=self.fetch_metadata(),
473
518
  )
@@ -484,26 +529,23 @@ class ModelVersionSchema(NamedSchema, RunMetadataInterface, table=True):
484
529
  ),
485
530
  )
486
531
  resources = ModelVersionResponseResources(
532
+ user=self.user.to_model() if self.user else None,
487
533
  services=services,
534
+ tags=[tag.to_model() for tag in self.tags],
488
535
  )
489
536
 
490
537
  body = ModelVersionResponseBody(
491
- user=self.user.to_model() if self.user else None,
538
+ user_id=self.user_id,
539
+ project_id=self.project_id,
492
540
  created=self.created,
493
541
  updated=self.updated,
494
542
  stage=self.stage,
495
543
  number=self.number,
496
544
  model=self.model.to_model(),
497
- model_artifact_ids=model_artifact_ids,
498
- data_artifact_ids=data_artifact_ids,
499
- deployment_artifact_ids=deployment_artifact_ids,
500
- pipeline_run_ids=pipeline_run_ids,
501
- tags=[tag.to_model() for tag in self.tags],
502
545
  )
503
546
 
504
547
  return ModelVersionResponse(
505
548
  id=self.id,
506
- project_id=self.project_id,
507
549
  name=self.name,
508
550
  body=body,
509
551
  metadata=metadata,
@@ -549,9 +591,7 @@ class ModelVersionArtifactSchema(BaseSchema, table=True):
549
591
  ondelete="CASCADE",
550
592
  nullable=False,
551
593
  )
552
- model_version: "ModelVersionSchema" = Relationship(
553
- back_populates="artifact_links"
554
- )
594
+ model_version: "ModelVersionSchema" = Relationship()
555
595
  artifact_version_id: UUID = build_foreign_key_field(
556
596
  source=__tablename__,
557
597
  target=ArtifactVersionSchema.__tablename__,
@@ -632,9 +672,7 @@ class ModelVersionPipelineRunSchema(BaseSchema, table=True):
632
672
  ondelete="CASCADE",
633
673
  nullable=False,
634
674
  )
635
- model_version: "ModelVersionSchema" = Relationship(
636
- back_populates="pipeline_run_links"
637
- )
675
+ model_version: "ModelVersionSchema" = Relationship()
638
676
  pipeline_run_id: UUID = build_foreign_key_field(
639
677
  source=__tablename__,
640
678
  target=PipelineRunSchema.__tablename__,
@@ -643,9 +681,7 @@ class ModelVersionPipelineRunSchema(BaseSchema, table=True):
643
681
  ondelete="CASCADE",
644
682
  nullable=False,
645
683
  )
646
- pipeline_run: "PipelineRunSchema" = Relationship(
647
- back_populates="model_versions_pipeline_runs_links"
648
- )
684
+ pipeline_run: "PipelineRunSchema" = Relationship()
649
685
 
650
686
  # TODO: In Pydantic v2, the `model_` is a protected namespaces for all
651
687
  # fields defined under base models. If not handled, this raises a warning.