zenml-nightly 0.68.1.dev20241103__py3-none-any.whl → 0.70.0.dev20241115__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 (264) hide show
  1. README.md +1 -1
  2. RELEASE_NOTES.md +77 -0
  3. zenml/VERSION +1 -1
  4. zenml/__init__.py +2 -0
  5. zenml/artifacts/external_artifact.py +2 -1
  6. zenml/artifacts/{load_directory_materializer.py → preexisting_data_materializer.py} +8 -9
  7. zenml/artifacts/utils.py +139 -80
  8. zenml/cli/base.py +4 -4
  9. zenml/cli/model.py +1 -6
  10. zenml/cli/stack.py +1 -0
  11. zenml/client.py +29 -74
  12. zenml/config/server_config.py +17 -1
  13. zenml/constants.py +2 -7
  14. zenml/data_validators/base_data_validator.py +2 -2
  15. zenml/enums.py +20 -4
  16. zenml/exceptions.py +4 -0
  17. zenml/integrations/__init__.py +3 -1
  18. zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +20 -18
  19. zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
  20. zenml/integrations/bentoml/materializers/bentoml_bento_materializer.py +19 -31
  21. zenml/integrations/constants.py +1 -0
  22. zenml/integrations/deepchecks/data_validators/deepchecks_data_validator.py +1 -1
  23. zenml/integrations/evidently/__init__.py +1 -1
  24. zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +1 -1
  25. zenml/integrations/huggingface/materializers/huggingface_datasets_materializer.py +8 -12
  26. zenml/integrations/huggingface/materializers/huggingface_pt_model_materializer.py +17 -18
  27. zenml/integrations/huggingface/materializers/huggingface_t5_materializer.py +2 -5
  28. zenml/integrations/huggingface/materializers/huggingface_tf_model_materializer.py +17 -18
  29. zenml/integrations/huggingface/materializers/huggingface_tokenizer_materializer.py +2 -3
  30. zenml/integrations/langchain/__init__.py +2 -1
  31. zenml/integrations/langchain/materializers/openai_embedding_materializer.py +28 -2
  32. zenml/integrations/lightgbm/materializers/lightgbm_booster_materializer.py +8 -15
  33. zenml/integrations/lightgbm/materializers/lightgbm_dataset_materializer.py +11 -16
  34. zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +29 -9
  35. zenml/integrations/openai/__init__.py +1 -1
  36. zenml/integrations/openai/hooks/open_ai_failure_hook.py +39 -14
  37. zenml/integrations/pillow/materializers/pillow_image_materializer.py +17 -20
  38. zenml/integrations/polars/materializers/dataframe_materializer.py +26 -39
  39. zenml/integrations/pycaret/materializers/model_materializer.py +7 -22
  40. zenml/integrations/tensorboard/visualizers/tensorboard_visualizer.py +60 -54
  41. zenml/integrations/tensorflow/materializers/keras_materializer.py +11 -22
  42. zenml/integrations/tensorflow/materializers/tf_dataset_materializer.py +8 -15
  43. zenml/integrations/vllm/__init__.py +50 -0
  44. zenml/integrations/vllm/flavors/__init__.py +21 -0
  45. zenml/integrations/vllm/flavors/vllm_model_deployer_flavor.py +91 -0
  46. zenml/integrations/vllm/model_deployers/__init__.py +19 -0
  47. zenml/integrations/vllm/model_deployers/vllm_model_deployer.py +263 -0
  48. zenml/integrations/vllm/services/__init__.py +19 -0
  49. zenml/integrations/vllm/services/vllm_deployment.py +206 -0
  50. zenml/integrations/whylogs/materializers/whylogs_materializer.py +11 -18
  51. zenml/integrations/xgboost/materializers/xgboost_booster_materializer.py +11 -22
  52. zenml/integrations/xgboost/materializers/xgboost_dmatrix_materializer.py +10 -19
  53. zenml/materializers/base_materializer.py +68 -1
  54. zenml/metadata/lazy_load.py +20 -7
  55. zenml/model/model.py +17 -64
  56. zenml/model/utils.py +5 -0
  57. zenml/models/__init__.py +0 -12
  58. zenml/models/v2/base/filter.py +121 -8
  59. zenml/models/v2/core/artifact_version.py +42 -7
  60. zenml/models/v2/core/model_version.py +26 -5
  61. zenml/models/v2/core/pipeline_run.py +25 -6
  62. zenml/models/v2/core/run_metadata.py +2 -217
  63. zenml/models/v2/core/step_run.py +62 -24
  64. zenml/orchestrators/base_orchestrator.py +12 -1
  65. zenml/orchestrators/input_utils.py +44 -19
  66. zenml/orchestrators/step_launcher.py +4 -3
  67. zenml/orchestrators/step_run_utils.py +19 -15
  68. zenml/orchestrators/step_runner.py +25 -14
  69. zenml/orchestrators/utils.py +45 -26
  70. zenml/stack/flavor.py +9 -5
  71. zenml/stack_deployments/aws_stack_deployment.py +23 -6
  72. zenml/stack_deployments/azure_stack_deployment.py +28 -5
  73. zenml/stack_deployments/gcp_stack_deployment.py +25 -8
  74. zenml/stack_deployments/stack_deployment.py +3 -5
  75. zenml/steps/base_step.py +1 -1
  76. zenml/steps/entrypoint_function_utils.py +3 -5
  77. zenml/steps/step_context.py +5 -2
  78. zenml/steps/utils.py +13 -2
  79. zenml/utils/callback_registry.py +71 -0
  80. zenml/utils/metadata_utils.py +335 -0
  81. zenml/zen_server/auth.py +221 -3
  82. zenml/zen_server/cache.py +208 -0
  83. zenml/zen_server/dashboard/assets/{404-DT4QRUqN.js → 404-NVXKFp-x.js} +1 -1
  84. zenml/zen_server/dashboard/assets/{@radix-DP6vWzyx.js → @radix-DeK6qiuw.js} +1 -1
  85. zenml/zen_server/dashboard/assets/{@react-router-BMhZulnd.js → @react-router-B3Z5rLr2.js} +1 -1
  86. zenml/zen_server/dashboard/assets/{@reactflow-8U9qNlMR.js → @reactflow-CK0KJUen.js} +2 -2
  87. zenml/zen_server/dashboard/assets/{@tanstack-BUCbhJyH.js → @tanstack-DT5WLu9C.js} +1 -1
  88. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-DezXKmDf.js +1 -0
  89. zenml/zen_server/dashboard/assets/{CodeSnippet-CqybNv0k.js → CodeSnippet-JzR8CEtw.js} +2 -2
  90. zenml/zen_server/dashboard/assets/{CollapsibleCard-0r_8G2Lj.js → CollapsibleCard-DQW_ktMO.js} +1 -1
  91. zenml/zen_server/dashboard/assets/{Commands-BDjgBQKi.js → Commands-DL2kwkRd.js} +1 -1
  92. zenml/zen_server/dashboard/assets/ComponentBadge-D_g62Wv8.js +1 -0
  93. zenml/zen_server/dashboard/assets/{CopyButton-C745BrKi.js → CopyButton-LNcWaa14.js} +1 -1
  94. zenml/zen_server/dashboard/assets/{CsvVizualization-PpAq0CeZ.js → CsvVizualization-DknpE5ej.js} +5 -5
  95. zenml/zen_server/dashboard/assets/{DialogItem-DcVCZEew.js → DialogItem-Bxf8FuAT.js} +1 -1
  96. zenml/zen_server/dashboard/assets/{DisplayDate-BeXgUG_C.js → DisplayDate-CDMUcQHS.js} +1 -1
  97. zenml/zen_server/dashboard/assets/{EmptyState-DeK7H4pr.js → EmptyState-BzdlCwp3.js} +1 -1
  98. zenml/zen_server/dashboard/assets/{Error-BMlzibXj.js → Error-DYflYyps.js} +1 -1
  99. zenml/zen_server/dashboard/assets/ExecutionStatus-C7zyIQKZ.js +1 -0
  100. zenml/zen_server/dashboard/assets/{Helpbox-BLf40fLV.js → Helpbox-oYSGpLqd.js} +1 -1
  101. zenml/zen_server/dashboard/assets/{Infobox-BwisKifi.js → Infobox-Cx4xGoXR.js} +1 -1
  102. zenml/zen_server/dashboard/assets/{InlineAvatar-jEgodSgX.js → InlineAvatar-DiGOWNKF.js} +1 -1
  103. zenml/zen_server/dashboard/assets/{Lock-3lLt1ih0.js → Lock-CYYy18Mm.js} +1 -1
  104. zenml/zen_server/dashboard/assets/{MarkdownVisualization-8O9kTr-2.js → MarkdownVisualization-ylXaAxev.js} +1 -1
  105. zenml/zen_server/dashboard/assets/NestedCollapsible-DYbgyKxK.js +1 -0
  106. zenml/zen_server/dashboard/assets/{NumberBox-T9eELfLZ.js → NumberBox-Dtp3J6g5.js} +1 -1
  107. zenml/zen_server/dashboard/assets/Partials-03iZf8-N.js +1 -0
  108. zenml/zen_server/dashboard/assets/{PasswordChecker-CW0kqY0W.js → PasswordChecker-B0nadgh6.js} +1 -1
  109. zenml/zen_server/dashboard/assets/ProBadge-D_EB8HNo.js +1 -0
  110. zenml/zen_server/dashboard/assets/ProCta-DqNS4v3x.js +1 -0
  111. zenml/zen_server/dashboard/assets/ProviderIcon-Bki2aw8w.js +1 -0
  112. zenml/zen_server/dashboard/assets/{ProviderRadio-BROY1700.js → ProviderRadio-8f43sPD4.js} +1 -1
  113. zenml/zen_server/dashboard/assets/RunSelector-DkPiIiNr.js +1 -0
  114. zenml/zen_server/dashboard/assets/RunsBody-07YEO7qI.js +1 -0
  115. zenml/zen_server/dashboard/assets/SearchField-lp1KgU4e.js +1 -0
  116. zenml/zen_server/dashboard/assets/{SecretTooltip-C_qByGWB.js → SecretTooltip-CgnbyeOx.js} +1 -1
  117. zenml/zen_server/dashboard/assets/{SetPassword-7pRB00El.js → SetPassword-CpP418A2.js} +1 -1
  118. zenml/zen_server/dashboard/assets/StackList-WvuKQusZ.js +1 -0
  119. zenml/zen_server/dashboard/assets/Tabs-BktHkCJJ.js +1 -0
  120. zenml/zen_server/dashboard/assets/Tick-BlMoIlJT.js +1 -0
  121. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DckMEkFf.js → UpdatePasswordSchemas-Sc0A0pP-.js} +1 -1
  122. zenml/zen_server/dashboard/assets/{UsageReason-DVceN14P.js → UsageReason-YYduL4fj.js} +1 -1
  123. zenml/zen_server/dashboard/assets/{WizardFooter-CW0Cvd70.js → WizardFooter-dgmizSJC.js} +1 -1
  124. zenml/zen_server/dashboard/assets/all-pipeline-runs-query-D-c2G6lV.js +1 -0
  125. zenml/zen_server/dashboard/assets/check-DloQpStc.js +1 -0
  126. zenml/zen_server/dashboard/assets/{check-circle-Dwxliy1Z.js → check-circle-jNbX5-sR.js} +1 -1
  127. zenml/zen_server/dashboard/assets/{chevron-down-8wLBS5pQ.js → chevron-down-6JyMkfjR.js} +1 -1
  128. zenml/zen_server/dashboard/assets/{chevron-right-double-DoD8iXWM.js → chevron-right-double-D7ojK9Co.js} +1 -1
  129. zenml/zen_server/dashboard/assets/{code-browser-CZUQs3Wa.js → code-browser-CUFUIHfp.js} +1 -1
  130. zenml/zen_server/dashboard/assets/{copy-CaSMXwiU.js → copy-C8XQA2Ug.js} +1 -1
  131. zenml/zen_server/dashboard/assets/create-stack-DM_JPgef.js +1 -0
  132. zenml/zen_server/dashboard/assets/delete-run-CJdh1P_h.js +1 -0
  133. zenml/zen_server/dashboard/assets/{docker-BFNgg-z3.js → docker-BdA9vrnW.js} +1 -1
  134. zenml/zen_server/dashboard/assets/{dots-horizontal-DK5Duzx4.js → dots-horizontal-otGBOSDJ.js} +1 -1
  135. zenml/zen_server/dashboard/assets/{form-schemas-1AyOCx90.js → form-schemas-K6FYKjwa.js} +1 -1
  136. zenml/zen_server/dashboard/assets/{gcp-7M2Yf3ZK.js → gcp-CFtm4BA7.js} +1 -1
  137. zenml/zen_server/dashboard/assets/{help-Dam461dC.js → help-Cc9bBIJH.js} +1 -1
  138. zenml/zen_server/dashboard/assets/index-B1mVPYxf.js +1 -0
  139. zenml/zen_server/dashboard/assets/index-BAkC7FXi.js +1 -0
  140. zenml/zen_server/dashboard/assets/{index-QQb7wQEC.js → index-CCOPpudF.js} +8 -8
  141. zenml/zen_server/dashboard/assets/index-CEV4Cvaf.js +1 -0
  142. zenml/zen_server/dashboard/assets/index-DlGvJQPn.css +1 -0
  143. zenml/zen_server/dashboard/assets/{index-BVJ8n2-j.js → index-Uu49AX48.js} +1 -1
  144. zenml/zen_server/dashboard/assets/{index.esm-cuVep_NJ.js → index.esm-Dy6Z9Ung.js} +1 -1
  145. zenml/zen_server/dashboard/assets/{kubernetes--g7r02Zu.js → kubernetes-B2wmAJ1d.js} +1 -1
  146. zenml/zen_server/dashboard/assets/{layout-DCSYN7-C.js → layout-BtHBmE4w.js} +1 -1
  147. zenml/zen_server/dashboard/assets/{link-external-CBEk6kEG.js → link-external-b9AXw_sW.js} +1 -1
  148. zenml/zen_server/dashboard/assets/{login-mutation-DTcAFP1l.js → login-mutation-hf-lK87O.js} +1 -1
  149. zenml/zen_server/dashboard/assets/{logs-D5bdJGur.js → logs-WMSM52RF.js} +1 -1
  150. zenml/zen_server/dashboard/assets/{not-found-Cc-JkRH2.js → not-found-BGirLjU-.js} +1 -1
  151. zenml/zen_server/dashboard/assets/{package-Cs35Szwh.js → package-C6uypY4h.js} +1 -1
  152. zenml/zen_server/dashboard/assets/page-0JE_-Ec1.js +1 -0
  153. zenml/zen_server/dashboard/assets/{page-DH_Z7iW1.js → page-6m6yHHlE.js} +1 -1
  154. zenml/zen_server/dashboard/assets/page-BDigxVpo.js +1 -0
  155. zenml/zen_server/dashboard/assets/page-BR68V0V1.js +1 -0
  156. zenml/zen_server/dashboard/assets/page-BRLpxOt0.js +1 -0
  157. zenml/zen_server/dashboard/assets/{page-BQQKaabe.js → page-BU7huvKw.js} +3 -3
  158. zenml/zen_server/dashboard/assets/page-BvqLv2Ky.js +1 -0
  159. zenml/zen_server/dashboard/assets/page-C00YAkaB.js +1 -0
  160. zenml/zen_server/dashboard/assets/{page-N4qoPHKb.js → page-CD-DcWoy.js} +1 -1
  161. zenml/zen_server/dashboard/assets/page-COXXJj1k.js +1 -0
  162. zenml/zen_server/dashboard/assets/page-CbpvrsDL.js +1 -0
  163. zenml/zen_server/dashboard/assets/page-CdMWnQak.js +1 -0
  164. zenml/zen_server/dashboard/assets/{page-ClUVkl-O.js → page-CjGdWY13.js} +1 -1
  165. zenml/zen_server/dashboard/assets/page-CwxrFarU.js +1 -0
  166. zenml/zen_server/dashboard/assets/{page-DLixvR-7.js → page-D01JhjQB.js} +1 -1
  167. zenml/zen_server/dashboard/assets/page-D6uU2ax4.js +1 -0
  168. zenml/zen_server/dashboard/assets/page-D7S3aCbF.js +1 -0
  169. zenml/zen_server/dashboard/assets/{page-9yplj5JT.js → page-DLC-bNBP.js} +1 -1
  170. zenml/zen_server/dashboard/assets/page-DXSTpqRD.js +1 -0
  171. zenml/zen_server/dashboard/assets/{page-DzpVUZ8f.js → page-DakHVWXF.js} +1 -1
  172. zenml/zen_server/dashboard/assets/{page-DIOXwhiD.js → page-Df-Fw0aq.js} +1 -1
  173. zenml/zen_server/dashboard/assets/{page-B-y2XKIc.js → page-DfbXf_8s.js} +1 -1
  174. zenml/zen_server/dashboard/assets/page-DjRJCGb3.js +1 -0
  175. zenml/zen_server/dashboard/assets/{page-C0N5q3l7.js → page-Djikxq_S.js} +1 -1
  176. zenml/zen_server/dashboard/assets/page-Dnovpa0i.js +3 -0
  177. zenml/zen_server/dashboard/assets/page-Dot3LPmL.js +1 -0
  178. zenml/zen_server/dashboard/assets/page-Vcxara9U.js +1 -0
  179. zenml/zen_server/dashboard/assets/page-Xynx4btY.js +14 -0
  180. zenml/zen_server/dashboard/assets/page-YpKAqVSa.js +1 -0
  181. zenml/zen_server/dashboard/assets/page-yYC9OI-E.js +1 -0
  182. zenml/zen_server/dashboard/assets/{persist-DNb5cdrU.js → persist-Coz7ZWvz.js} +1 -1
  183. zenml/zen_server/dashboard/assets/{persist-CP0JmYZ4.js → persist-GjC8PZoC.js} +1 -1
  184. zenml/zen_server/dashboard/assets/{plus-C9IxgN2M.js → plus-tf1V2hTJ.js} +1 -1
  185. zenml/zen_server/dashboard/assets/{refresh-BVu22P_C.js → refresh-BjOeWlEq.js} +1 -1
  186. zenml/zen_server/dashboard/assets/{rocket-CONEmRmB.js → rocket-DjT2cDvG.js} +1 -1
  187. zenml/zen_server/dashboard/assets/sharedSchema-CQb14VSr.js +14 -0
  188. zenml/zen_server/dashboard/assets/stack-detail-query-OPEW-cDJ.js +1 -0
  189. zenml/zen_server/dashboard/assets/{tick-circle-CM1ZScbQ.js → tick-circle-BEX_Tp4v.js} +1 -1
  190. zenml/zen_server/dashboard/assets/{trash-DkJHMOg7.js → trash-arLUMWMS.js} +1 -1
  191. zenml/zen_server/dashboard/assets/{update-server-settings-mutation-DsU8cNVl.js → update-server-settings-mutation-LwuQfHYn.js} +1 -1
  192. zenml/zen_server/dashboard/assets/upgrade-form-CwRHBuXB.webp +0 -0
  193. zenml/zen_server/dashboard/assets/url-CkvKAnwF.js +1 -0
  194. zenml/zen_server/dashboard/assets/{zod-D89GC_vc.js → zod-BwEbpOxH.js} +1 -1
  195. zenml/zen_server/dashboard/index.html +7 -7
  196. zenml/zen_server/deploy/helm/Chart.yaml +1 -1
  197. zenml/zen_server/deploy/helm/README.md +2 -2
  198. zenml/zen_server/exceptions.py +2 -0
  199. zenml/zen_server/jwt.py +30 -13
  200. zenml/zen_server/rbac/endpoint_utils.py +43 -1
  201. zenml/zen_server/rbac/utils.py +0 -2
  202. zenml/zen_server/routers/artifact_version_endpoints.py +27 -1
  203. zenml/zen_server/routers/auth_endpoints.py +134 -102
  204. zenml/zen_server/routers/logs_endpoints.py +66 -0
  205. zenml/zen_server/routers/workspaces_endpoints.py +3 -4
  206. zenml/zen_server/template_execution/utils.py +14 -16
  207. zenml/zen_server/utils.py +27 -0
  208. zenml/zen_server/zen_server_api.py +6 -3
  209. zenml/zen_stores/migrations/versions/0.70.0_release.py +23 -0
  210. zenml/zen_stores/migrations/versions/1cb6477f72d6_move_artifact_save_type.py +99 -0
  211. zenml/zen_stores/migrations/versions/904464ea4041_add_pipeline_model_run_unique_constraints.py +192 -0
  212. zenml/zen_stores/migrations/versions/b557b2871693_update_step_run_input_types.py +33 -0
  213. zenml/zen_stores/rest_zen_store.py +68 -64
  214. zenml/zen_stores/schemas/artifact_schemas.py +8 -1
  215. zenml/zen_stores/schemas/model_schemas.py +27 -3
  216. zenml/zen_stores/schemas/pipeline_run_schemas.py +6 -1
  217. zenml/zen_stores/schemas/pipeline_schemas.py +8 -2
  218. zenml/zen_stores/schemas/run_metadata_schemas.py +1 -48
  219. zenml/zen_stores/schemas/step_run_schemas.py +18 -10
  220. zenml/zen_stores/sql_zen_store.py +283 -219
  221. zenml/zen_stores/zen_store_interface.py +15 -42
  222. {zenml_nightly-0.68.1.dev20241103.dist-info → zenml_nightly-0.70.0.dev20241115.dist-info}/METADATA +2 -2
  223. {zenml_nightly-0.68.1.dev20241103.dist-info → zenml_nightly-0.70.0.dev20241115.dist-info}/RECORD +226 -203
  224. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-C6N2rGrB.js +0 -1
  225. zenml/zen_server/dashboard/assets/ComponentBadge-DUiEYJHu.js +0 -1
  226. zenml/zen_server/dashboard/assets/ComponentFallbackDialog-BFoH5K4V.js +0 -1
  227. zenml/zen_server/dashboard/assets/ComponentIcon-CAIoUis2.js +0 -1
  228. zenml/zen_server/dashboard/assets/Partials-YPBB3V4q.js +0 -1
  229. zenml/zen_server/dashboard/assets/ProviderIcon-Bb3Xha5A.js +0 -1
  230. zenml/zen_server/dashboard/assets/RunSelector-DCiL3M1c.js +0 -1
  231. zenml/zen_server/dashboard/assets/SearchField-DfUiGFVd.js +0 -1
  232. zenml/zen_server/dashboard/assets/Tick-CykQFPj2.js +0 -1
  233. zenml/zen_server/dashboard/assets/cloud-only-B-s_HMDm.js +0 -1
  234. zenml/zen_server/dashboard/assets/codespaces-BitYDX9d.gif +0 -0
  235. zenml/zen_server/dashboard/assets/create-stack-CEmaPZ4c.js +0 -1
  236. zenml/zen_server/dashboard/assets/delete-run-D-LKbGyz.js +0 -1
  237. zenml/zen_server/dashboard/assets/index-Bpmj40BI.js +0 -1
  238. zenml/zen_server/dashboard/assets/index-CbU4Ln_E.css +0 -1
  239. zenml/zen_server/dashboard/assets/index-DKPhqP2B.js +0 -1
  240. zenml/zen_server/dashboard/assets/page-BBpOxVcY.js +0 -1
  241. zenml/zen_server/dashboard/assets/page-BRInM1Lg.js +0 -1
  242. zenml/zen_server/dashboard/assets/page-BjjlMk7s.js +0 -1
  243. zenml/zen_server/dashboard/assets/page-Bvd7YH2A.js +0 -1
  244. zenml/zen_server/dashboard/assets/page-CT3Nep8W.js +0 -1
  245. zenml/zen_server/dashboard/assets/page-C_f47pBf.js +0 -1
  246. zenml/zen_server/dashboard/assets/page-Cmv8C_yM.js +0 -3
  247. zenml/zen_server/dashboard/assets/page-CyN2bdWG.js +0 -1
  248. zenml/zen_server/dashboard/assets/page-CzzXH4fs.js +0 -1
  249. zenml/zen_server/dashboard/assets/page-DTlGjgnG.js +0 -1
  250. zenml/zen_server/dashboard/assets/page-Dbpl86h0.js +0 -1
  251. zenml/zen_server/dashboard/assets/page-Ddgy6kDS.js +0 -1
  252. zenml/zen_server/dashboard/assets/page-DtCAfBLy.js +0 -9
  253. zenml/zen_server/dashboard/assets/page-Dx16z7nA.js +0 -1
  254. zenml/zen_server/dashboard/assets/page-McUyYbo1.js +0 -1
  255. zenml/zen_server/dashboard/assets/page-T1P3RyAR.js +0 -1
  256. zenml/zen_server/dashboard/assets/page-bKaULTGG.js +0 -1
  257. zenml/zen_server/dashboard/assets/page-sbXUJy9t.js +0 -1
  258. zenml/zen_server/dashboard/assets/sharedSchema-TMLu-nYQ.js +0 -14
  259. zenml/zen_server/dashboard/assets/stack-detail-query-xmYxSsUY.js +0 -1
  260. zenml/zen_server/dashboard/assets/url-D5le3J4q.js +0 -1
  261. zenml/zen_server/routers/run_metadata_endpoints.py +0 -96
  262. {zenml_nightly-0.68.1.dev20241103.dist-info → zenml_nightly-0.70.0.dev20241115.dist-info}/LICENSE +0 -0
  263. {zenml_nightly-0.68.1.dev20241103.dist-info → zenml_nightly-0.70.0.dev20241115.dist-info}/WHEEL +0 -0
  264. {zenml_nightly-0.68.1.dev20241103.dist-info → zenml_nightly-0.70.0.dev20241115.dist-info}/entry_points.txt +0 -0
@@ -13,7 +13,6 @@
13
13
  # permissions and limitations under the License.
14
14
  """PyCaret materializer."""
15
15
 
16
- import tempfile
17
16
  from typing import (
18
17
  Any,
19
18
  Type,
@@ -65,7 +64,6 @@ from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
65
64
  from xgboost import XGBClassifier, XGBRegressor
66
65
 
67
66
  from zenml.enums import ArtifactType
68
- from zenml.io import fileio
69
67
  from zenml.materializers.base_materializer import BaseMaterializer
70
68
  from zenml.utils import io_utils
71
69
 
@@ -133,19 +131,10 @@ class PyCaretMaterializer(BaseMaterializer):
133
131
  Returns:
134
132
  A PyCaret model.
135
133
  """
136
- # Create a temporary directory to store the model
137
- temp_dir = tempfile.TemporaryDirectory()
138
-
139
- # Copy from artifact store to temporary directory
140
- io_utils.copy_dir(self.uri, temp_dir.name)
141
-
142
- # Load the model from the temporary directory
143
- model = load_model(temp_dir.name)
144
-
145
- # Cleanup and return
146
- fileio.rmtree(temp_dir.name)
147
-
148
- return model
134
+ with self.get_temporary_directory(delete_at_exit=True) as temp_dir:
135
+ io_utils.copy_dir(self.uri, temp_dir)
136
+ model = load_model(temp_dir)
137
+ return model
149
138
 
150
139
  def save(self, model: Any) -> None:
151
140
  """Writes a PyCaret model to the artifact store.
@@ -153,10 +142,6 @@ class PyCaretMaterializer(BaseMaterializer):
153
142
  Args:
154
143
  model: Any of the supported models.
155
144
  """
156
- # Create a temporary directory to store the model
157
- temp_dir = tempfile.TemporaryDirectory()
158
- save_model(model, temp_dir.name)
159
- io_utils.copy_dir(temp_dir.name, self.uri)
160
-
161
- # Remove the temporary directory
162
- fileio.rmtree(temp_dir.name)
145
+ with self.get_temporary_directory(delete_at_exit=True) as temp_dir:
146
+ save_model(model, temp_dir)
147
+ io_utils.copy_dir(temp_dir, self.uri)
@@ -87,41 +87,44 @@ class TensorboardVisualizer:
87
87
  *args: Additional arguments.
88
88
  **kwargs: Additional keyword arguments.
89
89
  """
90
- for _, artifact_view in object.outputs.items():
91
- # filter out anything but model artifacts
92
- if artifact_view.type == ArtifactType.MODEL:
93
- logdir = os.path.dirname(artifact_view.uri)
94
-
95
- # first check if a TensorBoard server is already running for
96
- # the same logdir location and use that one
97
- running_server = self.find_running_tensorboard_server(logdir)
98
- if running_server:
99
- self.visualize_tensorboard(running_server.port, height)
100
- return
101
-
102
- if sys.platform == "win32":
103
- # Daemon service functionality is currently not supported
104
- # on Windows
105
- print(
106
- "You can run:\n"
107
- f"[italic green] tensorboard --logdir {logdir}"
108
- "[/italic green]\n"
109
- "...to visualize the TensorBoard logs for your trained model."
90
+ for output in object.outputs.values():
91
+ for artifact_view in output:
92
+ # filter out anything but model artifacts
93
+ if artifact_view.type == ArtifactType.MODEL:
94
+ logdir = os.path.dirname(artifact_view.uri)
95
+
96
+ # first check if a TensorBoard server is already running for
97
+ # the same logdir location and use that one
98
+ running_server = self.find_running_tensorboard_server(
99
+ logdir
110
100
  )
111
- else:
112
- # start a new TensorBoard server
113
- service = TensorboardService(
114
- TensorboardServiceConfig(
115
- logdir=logdir,
116
- name=f"zenml-tensorboard-{logdir}",
101
+ if running_server:
102
+ self.visualize_tensorboard(running_server.port, height)
103
+ return
104
+
105
+ if sys.platform == "win32":
106
+ # Daemon service functionality is currently not supported
107
+ # on Windows
108
+ print(
109
+ "You can run:\n"
110
+ f"[italic green] tensorboard --logdir {logdir}"
111
+ "[/italic green]\n"
112
+ "...to visualize the TensorBoard logs for your trained model."
117
113
  )
118
- )
119
- service.start(timeout=60)
120
- if service.endpoint.status.port:
121
- self.visualize_tensorboard(
122
- service.endpoint.status.port, height
114
+ else:
115
+ # start a new TensorBoard server
116
+ service = TensorboardService(
117
+ TensorboardServiceConfig(
118
+ logdir=logdir,
119
+ name=f"zenml-tensorboard-{logdir}",
120
+ )
123
121
  )
124
- return
122
+ service.start(timeout=60)
123
+ if service.endpoint.status.port:
124
+ self.visualize_tensorboard(
125
+ service.endpoint.status.port, height
126
+ )
127
+ return
125
128
 
126
129
  def visualize_tensorboard(
127
130
  self,
@@ -154,31 +157,34 @@ class TensorboardVisualizer:
154
157
  Args:
155
158
  object: StepRunResponseModel fetched from get_step().
156
159
  """
157
- for _, artifact_view in object.outputs.items():
158
- # filter out anything but model artifacts
159
- if artifact_view.type == ArtifactType.MODEL:
160
- logdir = os.path.dirname(artifact_view.uri)
161
-
162
- # first check if a TensorBoard server is already running for
163
- # the same logdir location and use that one
164
- running_server = self.find_running_tensorboard_server(logdir)
165
- if not running_server:
166
- return
160
+ for output in object.outputs.values():
161
+ for artifact_view in output:
162
+ # filter out anything but model artifacts
163
+ if artifact_view.type == ArtifactType.MODEL:
164
+ logdir = os.path.dirname(artifact_view.uri)
165
+
166
+ # first check if a TensorBoard server is already running for
167
+ # the same logdir location and use that one
168
+ running_server = self.find_running_tensorboard_server(
169
+ logdir
170
+ )
171
+ if not running_server:
172
+ return
167
173
 
168
- logger.debug(
169
- "Stopping tensorboard server with PID '%d' ...",
170
- running_server.pid,
171
- )
172
- try:
173
- p = psutil.Process(running_server.pid)
174
- except psutil.Error:
175
- logger.error(
176
- "Could not find process for PID '%d' ...",
174
+ logger.debug(
175
+ "Stopping tensorboard server with PID '%d' ...",
177
176
  running_server.pid,
178
177
  )
179
- continue
180
- p.kill()
181
- return
178
+ try:
179
+ p = psutil.Process(running_server.pid)
180
+ except psutil.Error:
181
+ logger.error(
182
+ "Could not find process for PID '%d' ...",
183
+ running_server.pid,
184
+ )
185
+ continue
186
+ p.kill()
187
+ return
182
188
 
183
189
 
184
190
  def get_step(pipeline_name: str, step_name: str) -> "StepRunResponse":
@@ -14,7 +14,6 @@
14
14
  """Implementation of the TensorFlow Keras materializer."""
15
15
 
16
16
  import os
17
- import tempfile
18
17
  from typing import TYPE_CHECKING, Any, ClassVar, Dict, Tuple, Type
19
18
 
20
19
  import tensorflow as tf
@@ -22,7 +21,6 @@ from tensorflow.python import keras as tf_keras
22
21
  from tensorflow.python.keras.utils.layer_utils import count_params
23
22
 
24
23
  from zenml.enums import ArtifactType
25
- from zenml.io import fileio
26
24
  from zenml.materializers.base_materializer import BaseMaterializer
27
25
  from zenml.utils import io_utils
28
26
 
@@ -49,20 +47,15 @@ class KerasMaterializer(BaseMaterializer):
49
47
  Returns:
50
48
  A keras.Model model.
51
49
  """
52
- # Create a temporary directory to store the model
53
- temp_dir = tempfile.TemporaryDirectory()
50
+ with self.get_temporary_directory(delete_at_exit=True) as temp_dir:
51
+ # Copy from artifact store to temporary directory
52
+ temp_model_file = os.path.join(temp_dir, self.MODEL_FILE_NAME)
53
+ io_utils.copy_dir(self.uri, temp_dir)
54
54
 
55
- # Copy from artifact store to temporary directory
56
- temp_model_file = os.path.join(temp_dir.name, self.MODEL_FILE_NAME)
57
- io_utils.copy_dir(self.uri, temp_dir.name)
55
+ # Load the model from the temporary directory
56
+ model = tf.keras.models.load_model(temp_model_file)
58
57
 
59
- # Load the model from the temporary directory
60
- model = tf.keras.models.load_model(temp_model_file)
61
-
62
- # Cleanup and return
63
- fileio.rmtree(temp_dir.name)
64
-
65
- return model
58
+ return model
66
59
 
67
60
  def save(self, model: tf_keras.Model) -> None:
68
61
  """Writes a keras model to the artifact store.
@@ -70,14 +63,10 @@ class KerasMaterializer(BaseMaterializer):
70
63
  Args:
71
64
  model: A keras.Model model.
72
65
  """
73
- # Create a temporary directory to store the model
74
- temp_dir = tempfile.TemporaryDirectory()
75
- temp_model_file = os.path.join(temp_dir.name, self.MODEL_FILE_NAME)
76
- model.save(temp_model_file)
77
- io_utils.copy_dir(temp_dir.name, self.uri)
78
-
79
- # Remove the temporary directory
80
- fileio.rmtree(temp_dir.name)
66
+ with self.get_temporary_directory(delete_at_exit=True) as temp_dir:
67
+ temp_model_file = os.path.join(temp_dir, self.MODEL_FILE_NAME)
68
+ model.save(temp_model_file)
69
+ io_utils.copy_dir(temp_dir, self.uri)
81
70
 
82
71
  def extract_metadata(
83
72
  self, model: tf_keras.Model
@@ -14,13 +14,11 @@
14
14
  """Implementation of the TensorFlow dataset materializer."""
15
15
 
16
16
  import os
17
- import tempfile
18
17
  from typing import TYPE_CHECKING, Any, ClassVar, Dict, Tuple, Type
19
18
 
20
19
  import tensorflow as tf
21
20
 
22
21
  from zenml.enums import ArtifactType
23
- from zenml.io import fileio
24
22
  from zenml.materializers.base_materializer import BaseMaterializer
25
23
  from zenml.utils import io_utils
26
24
 
@@ -45,13 +43,11 @@ class TensorflowDatasetMaterializer(BaseMaterializer):
45
43
  Returns:
46
44
  A tf.data.Dataset object.
47
45
  """
48
- temp_dir = tempfile.mkdtemp()
49
- io_utils.copy_dir(self.uri, temp_dir)
50
- path = os.path.join(temp_dir, DEFAULT_FILENAME)
51
- dataset = tf.data.Dataset.load(path)
52
- # Don't delete the temporary directory here as the dataset is lazily
53
- # loaded and needs to read it when the object gets used
54
- return dataset
46
+ with self.get_temporary_directory(delete_at_exit=False) as temp_dir:
47
+ io_utils.copy_dir(self.uri, temp_dir)
48
+ path = os.path.join(temp_dir, DEFAULT_FILENAME)
49
+ dataset = tf.data.Dataset.load(path)
50
+ return dataset
55
51
 
56
52
  def save(self, dataset: tf.data.Dataset) -> None:
57
53
  """Persists a tf.data.Dataset object.
@@ -59,15 +55,12 @@ class TensorflowDatasetMaterializer(BaseMaterializer):
59
55
  Args:
60
56
  dataset: The dataset to persist.
61
57
  """
62
- temp_dir = tempfile.TemporaryDirectory()
63
- path = os.path.join(temp_dir.name, DEFAULT_FILENAME)
64
- try:
58
+ with self.get_temporary_directory(delete_at_exit=True) as temp_dir:
59
+ path = os.path.join(temp_dir, DEFAULT_FILENAME)
65
60
  tf.data.Dataset.save(
66
61
  dataset, path, compression=None, shard_func=None
67
62
  )
68
- io_utils.copy_dir(temp_dir.name, self.uri)
69
- finally:
70
- fileio.rmtree(temp_dir.name)
63
+ io_utils.copy_dir(temp_dir, self.uri)
71
64
 
72
65
  def extract_metadata(
73
66
  self, dataset: tf.data.Dataset
@@ -0,0 +1,50 @@
1
+ # Copyright (c) ZenML GmbH 2024. 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
+ """Initialization for the ZenML vLLM integration."""
15
+ from typing import List, Type
16
+ from zenml.integrations.integration import Integration
17
+ from zenml.stack import Flavor
18
+ from zenml.logger import get_logger
19
+ from zenml.integrations.constants import VLLM
20
+
21
+ VLLM_MODEL_DEPLOYER = "vllm"
22
+
23
+ logger = get_logger(__name__)
24
+
25
+
26
+ class VLLMIntegration(Integration):
27
+ """Definition of vLLM integration for ZenML."""
28
+
29
+ NAME = VLLM
30
+
31
+ REQUIREMENTS = ["vllm>=0.6.0,<0.7.0", "openai>=1.0.0"]
32
+
33
+ @classmethod
34
+ def activate(cls) -> None:
35
+ """Activates the integration."""
36
+ from zenml.integrations.vllm import services
37
+
38
+ @classmethod
39
+ def flavors(cls) -> List[Type[Flavor]]:
40
+ """Declare the stack component flavors for the vLLM integration.
41
+
42
+ Returns:
43
+ List of stack component flavors for this integration.
44
+ """
45
+ from zenml.integrations.vllm.flavors import VLLMModelDeployerFlavor
46
+
47
+ return [VLLMModelDeployerFlavor]
48
+
49
+
50
+ VLLMIntegration.check_installation()
@@ -0,0 +1,21 @@
1
+ # Copyright (c) ZenML GmbH 2024. 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
+ """vLLM integration flavors."""
15
+
16
+ from zenml.integrations.vllm.flavors.vllm_model_deployer_flavor import ( # noqa
17
+ VLLMModelDeployerConfig,
18
+ VLLMModelDeployerFlavor,
19
+ )
20
+
21
+ __all__ = ["VLLMModelDeployerConfig", "VLLMModelDeployerFlavor"]
@@ -0,0 +1,91 @@
1
+ # Copyright (c) ZenML GmbH 2024. 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
+ """vLLM model deployer flavor."""
15
+
16
+ from typing import TYPE_CHECKING, Optional, Type
17
+
18
+ from zenml.integrations.vllm import VLLM_MODEL_DEPLOYER
19
+ from zenml.model_deployers.base_model_deployer import (
20
+ BaseModelDeployerConfig,
21
+ BaseModelDeployerFlavor,
22
+ )
23
+
24
+ if TYPE_CHECKING:
25
+ from zenml.integrations.vllm.model_deployers import VLLMModelDeployer
26
+
27
+
28
+ class VLLMModelDeployerConfig(BaseModelDeployerConfig):
29
+ """Configuration for vLLM Inference model deployer."""
30
+
31
+ service_path: str = ""
32
+
33
+
34
+ class VLLMModelDeployerFlavor(BaseModelDeployerFlavor):
35
+ """vLLM model deployer flavor."""
36
+
37
+ @property
38
+ def name(self) -> str:
39
+ """Name of the flavor.
40
+
41
+ Returns:
42
+ The name of the flavor.
43
+ """
44
+ return VLLM_MODEL_DEPLOYER
45
+
46
+ @property
47
+ def docs_url(self) -> Optional[str]:
48
+ """A url to point at docs explaining this flavor.
49
+
50
+ Returns:
51
+ A flavor docs url.
52
+ """
53
+ return self.generate_default_docs_url()
54
+
55
+ @property
56
+ def sdk_docs_url(self) -> Optional[str]:
57
+ """A url to point at SDK docs explaining this flavor.
58
+
59
+ Returns:
60
+ A flavor SDK docs url.
61
+ """
62
+ return self.generate_default_sdk_docs_url()
63
+
64
+ @property
65
+ def logo_url(self) -> str:
66
+ """A url to represent the flavor in the dashboard.
67
+
68
+ Returns:
69
+ The flavor logo.
70
+ """
71
+ return "https://public-flavor-logos.s3.eu-central-1.amazonaws.com/model_deployer/vllm.png"
72
+
73
+ @property
74
+ def config_class(self) -> Type[VLLMModelDeployerConfig]:
75
+ """Returns `VLLMModelDeployerConfig` config class.
76
+
77
+ Returns:
78
+ The config class.
79
+ """
80
+ return VLLMModelDeployerConfig
81
+
82
+ @property
83
+ def implementation_class(self) -> Type["VLLMModelDeployer"]:
84
+ """Implementation class for this flavor.
85
+
86
+ Returns:
87
+ The implementation class.
88
+ """
89
+ from zenml.integrations.vllm.model_deployers import VLLMModelDeployer
90
+
91
+ return VLLMModelDeployer
@@ -0,0 +1,19 @@
1
+ # Copyright (c) ZenML GmbH 2024. 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
+ """Initialization of the vLLM model deployers."""
15
+ from zenml.integrations.vllm.model_deployers.vllm_model_deployer import ( # noqa
16
+ VLLMModelDeployer,
17
+ )
18
+
19
+ __all__ = ["VLLMModelDeployer"]