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.
- zenml/VERSION +1 -1
- zenml/artifacts/utils.py +8 -0
- zenml/cli/base.py +6 -1
- zenml/cli/model.py +16 -36
- zenml/cli/server.py +8 -3
- zenml/client.py +20 -4
- zenml/client_lazy_loader.py +2 -0
- zenml/config/docker_settings.py +15 -2
- zenml/enums.py +3 -0
- zenml/event_hub/event_hub.py +1 -1
- zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +1 -1
- zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py +1 -1
- zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +3 -0
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +37 -26
- zenml/logging/step_logging.py +17 -4
- zenml/login/web_login.py +1 -1
- zenml/model/model.py +13 -23
- zenml/models/__init__.py +39 -2
- zenml/models/v2/base/scoped.py +34 -15
- zenml/models/v2/core/artifact.py +10 -9
- zenml/models/v2/core/artifact_version.py +16 -16
- zenml/models/v2/core/logs.py +8 -50
- zenml/models/v2/core/model.py +10 -10
- zenml/models/v2/core/model_version.py +155 -88
- zenml/models/v2/core/pipeline.py +10 -11
- zenml/models/v2/core/pipeline_deployment.py +1 -9
- zenml/models/v2/core/pipeline_run.py +10 -17
- zenml/models/v2/core/run_template.py +10 -10
- zenml/models/v2/core/step_run.py +100 -16
- zenml/models/v2/core/tag.py +5 -4
- zenml/models/v2/misc/pipeline_run_dag.py +46 -0
- zenml/orchestrators/base_orchestrator.py +8 -19
- zenml/orchestrators/cache_utils.py +48 -1
- zenml/orchestrators/input_utils.py +35 -39
- zenml/orchestrators/step_launcher.py +1 -1
- zenml/orchestrators/step_run_utils.py +26 -10
- zenml/pipelines/pipeline_definition.py +3 -3
- zenml/pipelines/run_utils.py +2 -3
- zenml/service_connectors/service_connector.py +5 -1
- zenml/stack/stack_component.py +1 -4
- zenml/steps/step_context.py +1 -1
- zenml/utils/dashboard_utils.py +3 -3
- zenml/zen_server/auth.py +6 -3
- zenml/zen_server/cloud_utils.py +2 -2
- zenml/zen_server/dashboard/assets/{404-_AtuLtaX.js → 404-DmJUgorp.js} +1 -1
- zenml/zen_server/dashboard/assets/{@radix-C7hRs6Kx.js → @radix-Cdvw4jJ8.js} +1 -1
- zenml/zen_server/dashboard/assets/{@react-router-CNP6g_RL.js → @react-router-DeDfXbUF.js} +5 -5
- zenml/zen_server/dashboard/assets/{@reactflow-CQi1Z1Wq.js → @reactflow-8OCk19Fi.js} +1 -1
- zenml/zen_server/dashboard/assets/{@tanstack-CSxjHCME.js → @tanstack-5gTMR7G2.js} +4 -4
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-CZW4QyWn.js +1 -0
- zenml/zen_server/dashboard/assets/ButtonGroup-DFWWFGUE.js +1 -0
- zenml/zen_server/dashboard/assets/{CodeSnippet-CvI6D0wx.js → CodeSnippet-D2HkkAGr.js} +1 -1
- zenml/zen_server/dashboard/assets/CollapsibleCard-CnS09ljw.js +1 -0
- zenml/zen_server/dashboard/assets/{ComponentBadge-DKw7Gndh.js → ComponentBadge-CDgdd0Ks.js} +1 -1
- zenml/zen_server/dashboard/assets/ComponentIcon-CbbOc7lb.js +1 -0
- zenml/zen_server/dashboard/assets/{DeleteAlertDialog-DVvXt-S6.js → DeleteAlertDialog-VIOMDLmx.js} +1 -1
- zenml/zen_server/dashboard/assets/DialogItem-ClFCqxEp.js +1 -0
- zenml/zen_server/dashboard/assets/{DisplayDate-CYVBBSgr.js → DisplayDate-8RESqe5H.js} +1 -1
- zenml/zen_server/dashboard/assets/{EmptyState-M1jafpg6.js → EmptyState-CjrgDtVk.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-BWaXP0VK.js → Error-CQzjbDcN.js} +1 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-CWreILP0.js +1 -0
- zenml/zen_server/dashboard/assets/{Helpbox-iE1xLmiZ.js → Helpbox-CiKxG5_X.js} +1 -1
- zenml/zen_server/dashboard/assets/Infobox-CGxFvqzi.js +1 -0
- zenml/zen_server/dashboard/assets/LeftSideMenu-DCsKdIjC.js +1 -0
- zenml/zen_server/dashboard/assets/{Lock-DW-0_M0o.js → Lock-CrIAdQo6.js} +1 -1
- zenml/zen_server/dashboard/assets/NestedCollapsible-3M4llYtH.js +1 -0
- zenml/zen_server/dashboard/assets/NumberBox-C0mQktmV.js +1 -0
- zenml/zen_server/dashboard/assets/Partials-DSjkttlz.js +1 -0
- zenml/zen_server/dashboard/assets/{PasswordChecker-lYTOtNom.js → PasswordChecker-B88WjuCe.js} +1 -1
- zenml/zen_server/dashboard/assets/ProCta-Dm5cWKpS.js +1 -0
- zenml/zen_server/dashboard/assets/{ProviderIcon-DLo7t1lo.js → ProviderIcon-DPwMR6nF.js} +1 -1
- zenml/zen_server/dashboard/assets/ProviderRadio-DEDNRgAb.js +1 -0
- zenml/zen_server/dashboard/assets/RunsBody-BRBn1e2O.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-DY6-UbRT.js +1 -0
- zenml/zen_server/dashboard/assets/SecretTooltip-CZTRnaCV.js +1 -0
- zenml/zen_server/dashboard/assets/{SetPassword-DR-EiLI5.js → SetPassword-BjNGDC5e.js} +1 -1
- zenml/zen_server/dashboard/assets/SheetHeader-CASpN2Lz.js +1 -0
- zenml/zen_server/dashboard/assets/StackComponentList-Be1pQt9m.js +1 -0
- zenml/zen_server/dashboard/assets/StackList-BdiR5DvR.js +1 -0
- zenml/zen_server/dashboard/assets/StackName-ojLC6xdl.js +1 -0
- zenml/zen_server/dashboard/assets/Tabs-DNSKblCM.js +1 -0
- zenml/zen_server/dashboard/assets/Tick-BPrWnNlN.js +1 -0
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DbFEaezI.js → UpdatePasswordSchemas-CNfKDo2Q.js} +1 -1
- zenml/zen_server/dashboard/assets/UsageReason-Cb-mpV8M.js +1 -0
- zenml/zen_server/dashboard/assets/{Wizard-CMI6Ksgz.js → Wizard-Dg8Pmn5A.js} +1 -1
- zenml/zen_server/dashboard/assets/WizardFooter-BcNDIvlQ.js +1 -0
- zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-BGASHYtF.js → all-pipeline-runs-query-DCdax7I5.js} +1 -1
- zenml/zen_server/dashboard/assets/{arrow-left-CwgF2MEM.js → arrow-left-MRXv5pAH.js} +1 -1
- zenml/zen_server/dashboard/assets/bulk-delete-C_kpIB9A.js +3 -0
- zenml/zen_server/dashboard/assets/{check-DK77doTf.js → check-B9QMTa3f.js} +1 -1
- zenml/zen_server/dashboard/assets/{check-circle-mvyzYvIW.js → check-circle-C4tYvbtw.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-down-A-rmltmI.js → chevron-down-jbbQh82s.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-uNWbJT-C.js → chevron-right-double-Dgp_gEsp.js} +1 -1
- zenml/zen_server/dashboard/assets/{clock-CPA5cYxq.js → clock-B_mTG8PH.js} +1 -1
- zenml/zen_server/dashboard/assets/{code-browser-j2EpcxIA.js → code-browser-CiD8qkBx.js} +1 -1
- zenml/zen_server/dashboard/assets/configuration-form-B2hmKGnF.js +1 -0
- zenml/zen_server/dashboard/assets/connectivity-4UKGMYnr.webp +0 -0
- zenml/zen_server/dashboard/assets/constants-1EZZxtay.js +1 -0
- zenml/zen_server/dashboard/assets/create-stack-TKmMtrkQ.js +1 -0
- zenml/zen_server/dashboard/assets/dates-Buh6SMo7.js +1 -0
- zenml/zen_server/dashboard/assets/delete-run-CCR9md_s.js +1 -0
- zenml/zen_server/dashboard/assets/eye-CbVlAYty.js +1 -0
- zenml/zen_server/dashboard/assets/{file-text-BdxZdjP_.js → file-text-Cd8wVfq5.js} +1 -1
- zenml/zen_server/dashboard/assets/form-DFJkaFDX.js +1 -0
- zenml/zen_server/dashboard/assets/form-schemas-CrznJVzA.js +1 -0
- zenml/zen_server/dashboard/assets/{gcp-CHNvgEss.js → gcp-B1I3Qvcx.js} +1 -1
- zenml/zen_server/dashboard/assets/{help-DyMolRxD.js → help-Co6aedki.js} +1 -1
- zenml/zen_server/dashboard/assets/index-BFqbGSck.js +308 -0
- zenml/zen_server/dashboard/assets/{index-CrhdX_qG.js → index-BjUu1mP4.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-DR30v9MZ.js → index-DWpiv-Ft.js} +1 -1
- zenml/zen_server/dashboard/assets/index-DuhuqTCI.css +1 -0
- zenml/zen_server/dashboard/assets/index-U992soPJ.js +1 -0
- zenml/zen_server/dashboard/assets/index.es-C1gfATPn.js +14 -0
- zenml/zen_server/dashboard/assets/{index.esm-D7jFlf5N.js → index.esm-DhJo3mA6.js} +1 -1
- zenml/zen_server/dashboard/assets/info-QkbQz4QU.js +1 -0
- zenml/zen_server/dashboard/assets/{key-icon-DO4DPJHZ.js → key-icon-C07HKw8z.js} +1 -1
- zenml/zen_server/dashboard/assets/{layout-h3cbx8WZ.js → layout-DBbfEFBe.js} +1 -1
- zenml/zen_server/dashboard/assets/layout-Do9YI4QX.js +1 -0
- zenml/zen_server/dashboard/assets/login-mutation-D3tFP6Wm.js +1 -0
- zenml/zen_server/dashboard/assets/{logs-B5n0U7tB.js → logs-CQKlJjo0.js} +1 -1
- zenml/zen_server/dashboard/assets/{package-D1Mhqeh8.js → package-miExReQl.js} +1 -1
- zenml/zen_server/dashboard/assets/page-9RjCitFH.js +1 -0
- zenml/zen_server/dashboard/assets/page-B0PsXWiT.js +1 -0
- zenml/zen_server/dashboard/assets/page-BCrKmYIZ.js +1 -0
- zenml/zen_server/dashboard/assets/page-BcRI3-aR.js +29 -0
- zenml/zen_server/dashboard/assets/page-Be3R2uYn.js +1 -0
- zenml/zen_server/dashboard/assets/page-BgknnddT.js +1 -0
- zenml/zen_server/dashboard/assets/page-BrT0_zSJ.js +40 -0
- zenml/zen_server/dashboard/assets/page-Bs3W2FDi.js +1 -0
- zenml/zen_server/dashboard/assets/page-C210HcBA.js +1 -0
- zenml/zen_server/dashboard/assets/page-C6KaiZ_W.js +1 -0
- zenml/zen_server/dashboard/assets/page-CAJ8B0vb.js +1 -0
- zenml/zen_server/dashboard/assets/page-CAUYrfui.js +1 -0
- zenml/zen_server/dashboard/assets/page-CHxVhF3x.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CSwZxZMQ.js → page-CN7lkvXr.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CUaMMoPG.js +1 -0
- zenml/zen_server/dashboard/assets/page-Cal6XQ4U.js +1 -0
- zenml/zen_server/dashboard/assets/page-CdZCmszX.js +1 -0
- zenml/zen_server/dashboard/assets/page-ChGcZI_6.js +1 -0
- zenml/zen_server/dashboard/assets/page-CktmtZ8Z.js +1 -0
- zenml/zen_server/dashboard/assets/page-ClvmVesa.js +1 -0
- zenml/zen_server/dashboard/assets/page-CnbIYE80.js +1 -0
- zenml/zen_server/dashboard/assets/page-CoXzjeEY.js +1 -0
- zenml/zen_server/dashboard/assets/page-CtiuMP_r.js +1 -0
- zenml/zen_server/dashboard/assets/page-D9Hfx6GV.js +1 -0
- zenml/zen_server/dashboard/assets/page-D9iuB88h.js +1 -0
- zenml/zen_server/dashboard/assets/page-DCcuPZ8P.js +1 -0
- zenml/zen_server/dashboard/assets/page-DEohTSz6.js +1 -0
- zenml/zen_server/dashboard/assets/page-DJIGaUQ9.js +1 -0
- zenml/zen_server/dashboard/assets/page-DKK6ulgy.js +1 -0
- zenml/zen_server/dashboard/assets/page-DNjKHjnH.js +1 -0
- zenml/zen_server/dashboard/assets/page-DUK0Nd_1.js +1 -0
- zenml/zen_server/dashboard/assets/page-DUKbOhaD.js +1 -0
- zenml/zen_server/dashboard/assets/page-DYOucPtA.js +1 -0
- zenml/zen_server/dashboard/assets/page-DpqRelAy.js +1 -0
- zenml/zen_server/dashboard/assets/{page-ZfTtFicG.js → page-DwVPpCFg.js} +2 -2
- zenml/zen_server/dashboard/assets/page-XURWnYZP.js +1 -0
- zenml/zen_server/dashboard/assets/page-abw-2oeW.js +1 -0
- zenml/zen_server/dashboard/assets/page-akLcPcKw.js +1 -0
- zenml/zen_server/dashboard/assets/page-n9ejQ2V3.js +2 -0
- zenml/zen_server/dashboard/assets/page-sJjNT9xA.js +6 -0
- zenml/zen_server/dashboard/assets/{persist-UUym702q.js → persist-DWMWVP-y.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-D87V82eO.js → persist-Dec_w7aB.js} +1 -1
- zenml/zen_server/dashboard/assets/pipeline-CSUlkd50.js +1 -0
- zenml/zen_server/dashboard/assets/{plus-COjQg3AG.js → plus-Cl0_rCVF.js} +1 -1
- zenml/zen_server/dashboard/assets/{react-error-boundary.esm-fyoUBS25.js → react-error-boundary.esm-7_MuhCay.js} +1 -1
- zenml/zen_server/dashboard/assets/{refresh-CM5T3QeU.js → refresh-BcTM09NW.js} +1 -1
- zenml/zen_server/dashboard/assets/resource-tyes-list-o2LXiMay.js +1 -0
- zenml/zen_server/dashboard/assets/resource-type-tooltip-DwHrJstL.js +1 -0
- zenml/zen_server/dashboard/assets/service-connectors-DSEMwJ5A.js +1 -0
- zenml/zen_server/dashboard/assets/{service-BQ9KIhls.js → service-jxtvgks0.js} +2 -2
- zenml/zen_server/dashboard/assets/sharedSchema-BXzg0EZz.js +1 -0
- zenml/zen_server/dashboard/assets/stack-detail-query-Cm0fsgo-.js +1 -0
- zenml/zen_server/dashboard/assets/{terminal-square-DMtel8mb.js → terminal-XFL_4QN-.js} +1 -1
- zenml/zen_server/dashboard/assets/terminal-square-XFL_4QN-.js +1 -0
- zenml/zen_server/dashboard/assets/transform-CeZdrxDZ.js +1 -0
- zenml/zen_server/dashboard/assets/{trash-BWSZ7NRK.js → trash-DP6Tpp_E.js} +1 -1
- zenml/zen_server/dashboard/assets/type-guards-CNgPYg8l.js +1 -0
- zenml/zen_server/dashboard/assets/update-current-user-mutation-D5MjcQ6F.js +1 -0
- zenml/zen_server/dashboard/assets/update-server-settings-mutation-CmnxdxiK.js +1 -0
- zenml/zen_server/dashboard/assets/{zod-C0xYeTvL.js → zod-XdS2h1ws.js} +1 -1
- zenml/zen_server/dashboard/index.html +7 -7
- zenml/zen_server/rbac/utils.py +2 -2
- zenml/zen_server/rbac/zenml_cloud_rbac.py +4 -3
- zenml/zen_server/routers/auth_endpoints.py +2 -2
- zenml/zen_server/routers/devices_endpoints.py +8 -5
- zenml/zen_server/routers/pipeline_deployments_endpoints.py +1 -1
- zenml/zen_server/routers/pipelines_endpoints.py +1 -1
- zenml/zen_server/routers/run_templates_endpoints.py +3 -3
- zenml/zen_server/routers/runs_endpoints.py +35 -0
- zenml/zen_server/routers/steps_endpoints.py +3 -0
- zenml/zen_server/template_execution/utils.py +6 -6
- zenml/zen_stores/dag_generator.py +171 -0
- zenml/zen_stores/rest_zen_store.py +17 -3
- zenml/zen_stores/schemas/action_schemas.py +40 -4
- zenml/zen_stores/schemas/api_key_schemas.py +29 -1
- zenml/zen_stores/schemas/artifact_schemas.py +168 -48
- zenml/zen_stores/schemas/base_schemas.py +26 -1
- zenml/zen_stores/schemas/code_repository_schemas.py +46 -5
- zenml/zen_stores/schemas/component_schemas.py +44 -3
- zenml/zen_stores/schemas/device_schemas.py +43 -2
- zenml/zen_stores/schemas/event_source_schemas.py +41 -5
- zenml/zen_stores/schemas/flavor_schemas.py +42 -2
- zenml/zen_stores/schemas/model_schemas.py +113 -77
- zenml/zen_stores/schemas/pipeline_build_schemas.py +53 -4
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +53 -4
- zenml/zen_stores/schemas/pipeline_run_schemas.py +111 -47
- zenml/zen_stores/schemas/pipeline_schemas.py +41 -9
- zenml/zen_stores/schemas/run_template_schemas.py +75 -11
- zenml/zen_stores/schemas/schedule_schema.py +50 -5
- zenml/zen_stores/schemas/secret_schemas.py +39 -2
- zenml/zen_stores/schemas/service_connector_schemas.py +39 -2
- zenml/zen_stores/schemas/service_schemas.py +39 -4
- zenml/zen_stores/schemas/stack_schemas.py +47 -2
- zenml/zen_stores/schemas/step_run_schemas.py +89 -26
- zenml/zen_stores/schemas/tag_schemas.py +69 -5
- zenml/zen_stores/schemas/trigger_schemas.py +44 -5
- zenml/zen_stores/schemas/utils.py +25 -4
- zenml/zen_stores/sql_zen_store.py +471 -28
- zenml/zen_stores/zen_store_interface.py +9 -1
- {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/METADATA +1 -1
- {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/RECORD +225 -219
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-BG7-Ki1L.js +0 -1
- zenml/zen_server/dashboard/assets/CollapsibleCard-D20FtrzC.js +0 -1
- zenml/zen_server/dashboard/assets/Commands-DGbAvMDk.js +0 -1
- zenml/zen_server/dashboard/assets/ComponentIcon-ils7uNAk.js +0 -1
- zenml/zen_server/dashboard/assets/CsvVizualization-DVN541XF.js +0 -15
- zenml/zen_server/dashboard/assets/DialogItem-BHWf3sIB.js +0 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-XrvT2r65.js +0 -1
- zenml/zen_server/dashboard/assets/Infobox-D9k5TFH4.js +0 -1
- zenml/zen_server/dashboard/assets/InlineAvatar-Cfz4WSLK.js +0 -1
- zenml/zen_server/dashboard/assets/MarkdownVisualization-URCyUPcZ.js +0 -14
- zenml/zen_server/dashboard/assets/NestedCollapsible-Dor-bi98.js +0 -1
- zenml/zen_server/dashboard/assets/NumberBox-D2A7ENHb.js +0 -1
- zenml/zen_server/dashboard/assets/Partials-DQJFw1yW.js +0 -1
- zenml/zen_server/dashboard/assets/ProBadge-Cp4hb1YT.js +0 -1
- zenml/zen_server/dashboard/assets/ProCta-EYoV9CvK.js +0 -1
- zenml/zen_server/dashboard/assets/ProviderRadio-BVDA-fAr.js +0 -1
- zenml/zen_server/dashboard/assets/RunSelector-BLuBYNJt.js +0 -1
- zenml/zen_server/dashboard/assets/RunsBody-W4WHf-sq.js +0 -1
- zenml/zen_server/dashboard/assets/SearchField-D-h6jXyg.js +0 -1
- zenml/zen_server/dashboard/assets/SecretTooltip-CePCL8kd.js +0 -1
- zenml/zen_server/dashboard/assets/StackList-CgmN5H-i.js +0 -1
- zenml/zen_server/dashboard/assets/Tabs-DxQ8PDOD.js +0 -1
- zenml/zen_server/dashboard/assets/Tick-CEsT3HPR.js +0 -1
- zenml/zen_server/dashboard/assets/UsageReason-DjI5qMje.js +0 -1
- zenml/zen_server/dashboard/assets/WizardFooter-CFBHFZas.js +0 -1
- zenml/zen_server/dashboard/assets/cloud-squares-DeRLMopf.svg +0 -43
- zenml/zen_server/dashboard/assets/configuration-form-BtI2Y4eX.js +0 -1
- zenml/zen_server/dashboard/assets/connectors-video-C9qY4syJ.svg +0 -21
- zenml/zen_server/dashboard/assets/constants-DP3ZEnXH.js +0 -1
- zenml/zen_server/dashboard/assets/create-stack-BJ6x5rzj.js +0 -1
- zenml/zen_server/dashboard/assets/dates-3pMLCNrD.js +0 -1
- zenml/zen_server/dashboard/assets/delete-run-DlSLEl5T.js +0 -1
- zenml/zen_server/dashboard/assets/docker-BuDBFEDL.js +0 -1
- zenml/zen_server/dashboard/assets/dots-horizontal-BGRJCPCs.js +0 -1
- zenml/zen_server/dashboard/assets/flavor-select-BnPxvQDN.js +0 -1
- zenml/zen_server/dashboard/assets/form-schemas-CbvoEUHr.js +0 -1
- zenml/zen_server/dashboard/assets/index-CFESYpe4.js +0 -1
- zenml/zen_server/dashboard/assets/index-CmLcvK2z.js +0 -1
- zenml/zen_server/dashboard/assets/index-CzX3ZYlI.css +0 -1
- zenml/zen_server/dashboard/assets/index-D2iSHVZq.js +0 -64
- zenml/zen_server/dashboard/assets/kubernetes-D6OUjwSK.js +0 -1
- zenml/zen_server/dashboard/assets/link-external-DUhCSKNm.js +0 -1
- zenml/zen_server/dashboard/assets/login-command-CkqxPtV3.js +0 -1
- zenml/zen_server/dashboard/assets/login-mutation-CXc-Klim.js +0 -1
- zenml/zen_server/dashboard/assets/not-found-olRU3fnu.js +0 -1
- zenml/zen_server/dashboard/assets/page-7keIM1V3.js +0 -1
- zenml/zen_server/dashboard/assets/page-B31neFwG.js +0 -1
- zenml/zen_server/dashboard/assets/page-B3zo4KYS.js +0 -1
- zenml/zen_server/dashboard/assets/page-BN3MHq1a.js +0 -1
- zenml/zen_server/dashboard/assets/page-BNgVExjN.js +0 -1
- zenml/zen_server/dashboard/assets/page-BPtvu74G.js +0 -1
- zenml/zen_server/dashboard/assets/page-BTIuG0ki.js +0 -2
- zenml/zen_server/dashboard/assets/page-BcQzleH6.js +0 -1
- zenml/zen_server/dashboard/assets/page-C05Jw4M2.js +0 -1
- zenml/zen_server/dashboard/assets/page-C28a7K8h.js +0 -1
- zenml/zen_server/dashboard/assets/page-C9WLk0X-.js +0 -1
- zenml/zen_server/dashboard/assets/page-CINMx64X.js +0 -1
- zenml/zen_server/dashboard/assets/page-CYrJbk7P.js +0 -1
- zenml/zen_server/dashboard/assets/page-Ce0cqLo3.js +0 -1
- zenml/zen_server/dashboard/assets/page-CgNsEkw-.js +0 -1
- zenml/zen_server/dashboard/assets/page-Ct2FUYuR.js +0 -1
- zenml/zen_server/dashboard/assets/page-D8G2B3Bu.js +0 -1
- zenml/zen_server/dashboard/assets/page-DL8a4_lg.js +0 -3
- zenml/zen_server/dashboard/assets/page-DMhYn1cF.js +0 -1
- zenml/zen_server/dashboard/assets/page-Dd_Yq-Uf.js +0 -6
- zenml/zen_server/dashboard/assets/page-DfSvqT8g.js +0 -1
- zenml/zen_server/dashboard/assets/page-Dt6ANUTx.js +0 -1
- zenml/zen_server/dashboard/assets/page-DtvTleaT.js +0 -1
- zenml/zen_server/dashboard/assets/page-DwfGTiVs.js +0 -1
- zenml/zen_server/dashboard/assets/page-JgomSTDc.js +0 -1
- zenml/zen_server/dashboard/assets/page-L84ig6HB.js +0 -1
- zenml/zen_server/dashboard/assets/page-Mabsn4QJ.js +0 -1
- zenml/zen_server/dashboard/assets/page-P04L5cm9.js +0 -1
- zenml/zen_server/dashboard/assets/page-PfhAnvq4.js +0 -1
- zenml/zen_server/dashboard/assets/page-WdRrlNt_.js +0 -1
- zenml/zen_server/dashboard/assets/page-cqJDDDeK.js +0 -1
- zenml/zen_server/dashboard/assets/page-k-Wxh9L_.js +0 -1
- zenml/zen_server/dashboard/assets/page-y-zV4n0c.js +0 -1
- zenml/zen_server/dashboard/assets/rocket-Cf-B-XOR.js +0 -1
- zenml/zen_server/dashboard/assets/settings_preview-0JLrRgHP.webp +0 -0
- zenml/zen_server/dashboard/assets/sharedSchema-Bse2agAf.js +0 -14
- zenml/zen_server/dashboard/assets/stack-detail-query-BAcZJrN3.js +0 -1
- zenml/zen_server/dashboard/assets/tick-circle-m94Aa6Zt.js +0 -1
- zenml/zen_server/dashboard/assets/tour-cover-BYfeen6M.webp +0 -0
- zenml/zen_server/dashboard/assets/type-guards-CaeD8wHO.js +0 -1
- zenml/zen_server/dashboard/assets/update-server-settings-mutation-DwMM1LJz.js +0 -1
- {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/WHEEL +0 -0
- {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-
|
9
|
-
<link rel="modulepreload" crossorigin href="/assets/@radix-
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/@tanstack-
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/@react-router-
|
12
|
-
<link rel="modulepreload" crossorigin href="/assets/@reactflow-
|
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-
|
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>
|
zenml/zen_server/rbac/utils.py
CHANGED
@@ -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.
|
550
|
-
return model.
|
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.
|
71
|
-
endpoint=PERMISSIONS_ENDPOINT,
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
564
|
-
stack_creator = stack.
|
565
|
-
own_stack = stack_creator and stack_creator
|
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.
|
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,
|
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={
|
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={
|
1983
|
+
params={
|
1984
|
+
"hydrate": hydrate,
|
1985
|
+
"include_full_metadata": include_full_metadata,
|
1986
|
+
},
|
1973
1987
|
)
|
1974
1988
|
|
1975
1989
|
def update_run(
|