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.
- README.md +1 -1
- RELEASE_NOTES.md +77 -0
- zenml/VERSION +1 -1
- zenml/__init__.py +2 -0
- zenml/artifacts/external_artifact.py +2 -1
- zenml/artifacts/{load_directory_materializer.py → preexisting_data_materializer.py} +8 -9
- zenml/artifacts/utils.py +139 -80
- zenml/cli/base.py +4 -4
- zenml/cli/model.py +1 -6
- zenml/cli/stack.py +1 -0
- zenml/client.py +29 -74
- zenml/config/server_config.py +17 -1
- zenml/constants.py +2 -7
- zenml/data_validators/base_data_validator.py +2 -2
- zenml/enums.py +20 -4
- zenml/exceptions.py +4 -0
- zenml/integrations/__init__.py +3 -1
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +20 -18
- zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
- zenml/integrations/bentoml/materializers/bentoml_bento_materializer.py +19 -31
- zenml/integrations/constants.py +1 -0
- zenml/integrations/deepchecks/data_validators/deepchecks_data_validator.py +1 -1
- zenml/integrations/evidently/__init__.py +1 -1
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +1 -1
- zenml/integrations/huggingface/materializers/huggingface_datasets_materializer.py +8 -12
- zenml/integrations/huggingface/materializers/huggingface_pt_model_materializer.py +17 -18
- zenml/integrations/huggingface/materializers/huggingface_t5_materializer.py +2 -5
- zenml/integrations/huggingface/materializers/huggingface_tf_model_materializer.py +17 -18
- zenml/integrations/huggingface/materializers/huggingface_tokenizer_materializer.py +2 -3
- zenml/integrations/langchain/__init__.py +2 -1
- zenml/integrations/langchain/materializers/openai_embedding_materializer.py +28 -2
- zenml/integrations/lightgbm/materializers/lightgbm_booster_materializer.py +8 -15
- zenml/integrations/lightgbm/materializers/lightgbm_dataset_materializer.py +11 -16
- zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +29 -9
- zenml/integrations/openai/__init__.py +1 -1
- zenml/integrations/openai/hooks/open_ai_failure_hook.py +39 -14
- zenml/integrations/pillow/materializers/pillow_image_materializer.py +17 -20
- zenml/integrations/polars/materializers/dataframe_materializer.py +26 -39
- zenml/integrations/pycaret/materializers/model_materializer.py +7 -22
- zenml/integrations/tensorboard/visualizers/tensorboard_visualizer.py +60 -54
- zenml/integrations/tensorflow/materializers/keras_materializer.py +11 -22
- zenml/integrations/tensorflow/materializers/tf_dataset_materializer.py +8 -15
- zenml/integrations/vllm/__init__.py +50 -0
- zenml/integrations/vllm/flavors/__init__.py +21 -0
- zenml/integrations/vllm/flavors/vllm_model_deployer_flavor.py +91 -0
- zenml/integrations/vllm/model_deployers/__init__.py +19 -0
- zenml/integrations/vllm/model_deployers/vllm_model_deployer.py +263 -0
- zenml/integrations/vllm/services/__init__.py +19 -0
- zenml/integrations/vllm/services/vllm_deployment.py +206 -0
- zenml/integrations/whylogs/materializers/whylogs_materializer.py +11 -18
- zenml/integrations/xgboost/materializers/xgboost_booster_materializer.py +11 -22
- zenml/integrations/xgboost/materializers/xgboost_dmatrix_materializer.py +10 -19
- zenml/materializers/base_materializer.py +68 -1
- zenml/metadata/lazy_load.py +20 -7
- zenml/model/model.py +17 -64
- zenml/model/utils.py +5 -0
- zenml/models/__init__.py +0 -12
- zenml/models/v2/base/filter.py +121 -8
- zenml/models/v2/core/artifact_version.py +42 -7
- zenml/models/v2/core/model_version.py +26 -5
- zenml/models/v2/core/pipeline_run.py +25 -6
- zenml/models/v2/core/run_metadata.py +2 -217
- zenml/models/v2/core/step_run.py +62 -24
- zenml/orchestrators/base_orchestrator.py +12 -1
- zenml/orchestrators/input_utils.py +44 -19
- zenml/orchestrators/step_launcher.py +4 -3
- zenml/orchestrators/step_run_utils.py +19 -15
- zenml/orchestrators/step_runner.py +25 -14
- zenml/orchestrators/utils.py +45 -26
- zenml/stack/flavor.py +9 -5
- zenml/stack_deployments/aws_stack_deployment.py +23 -6
- zenml/stack_deployments/azure_stack_deployment.py +28 -5
- zenml/stack_deployments/gcp_stack_deployment.py +25 -8
- zenml/stack_deployments/stack_deployment.py +3 -5
- zenml/steps/base_step.py +1 -1
- zenml/steps/entrypoint_function_utils.py +3 -5
- zenml/steps/step_context.py +5 -2
- zenml/steps/utils.py +13 -2
- zenml/utils/callback_registry.py +71 -0
- zenml/utils/metadata_utils.py +335 -0
- zenml/zen_server/auth.py +221 -3
- zenml/zen_server/cache.py +208 -0
- zenml/zen_server/dashboard/assets/{404-DT4QRUqN.js → 404-NVXKFp-x.js} +1 -1
- zenml/zen_server/dashboard/assets/{@radix-DP6vWzyx.js → @radix-DeK6qiuw.js} +1 -1
- zenml/zen_server/dashboard/assets/{@react-router-BMhZulnd.js → @react-router-B3Z5rLr2.js} +1 -1
- zenml/zen_server/dashboard/assets/{@reactflow-8U9qNlMR.js → @reactflow-CK0KJUen.js} +2 -2
- zenml/zen_server/dashboard/assets/{@tanstack-BUCbhJyH.js → @tanstack-DT5WLu9C.js} +1 -1
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-DezXKmDf.js +1 -0
- zenml/zen_server/dashboard/assets/{CodeSnippet-CqybNv0k.js → CodeSnippet-JzR8CEtw.js} +2 -2
- zenml/zen_server/dashboard/assets/{CollapsibleCard-0r_8G2Lj.js → CollapsibleCard-DQW_ktMO.js} +1 -1
- zenml/zen_server/dashboard/assets/{Commands-BDjgBQKi.js → Commands-DL2kwkRd.js} +1 -1
- zenml/zen_server/dashboard/assets/ComponentBadge-D_g62Wv8.js +1 -0
- zenml/zen_server/dashboard/assets/{CopyButton-C745BrKi.js → CopyButton-LNcWaa14.js} +1 -1
- zenml/zen_server/dashboard/assets/{CsvVizualization-PpAq0CeZ.js → CsvVizualization-DknpE5ej.js} +5 -5
- zenml/zen_server/dashboard/assets/{DialogItem-DcVCZEew.js → DialogItem-Bxf8FuAT.js} +1 -1
- zenml/zen_server/dashboard/assets/{DisplayDate-BeXgUG_C.js → DisplayDate-CDMUcQHS.js} +1 -1
- zenml/zen_server/dashboard/assets/{EmptyState-DeK7H4pr.js → EmptyState-BzdlCwp3.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-BMlzibXj.js → Error-DYflYyps.js} +1 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-C7zyIQKZ.js +1 -0
- zenml/zen_server/dashboard/assets/{Helpbox-BLf40fLV.js → Helpbox-oYSGpLqd.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-BwisKifi.js → Infobox-Cx4xGoXR.js} +1 -1
- zenml/zen_server/dashboard/assets/{InlineAvatar-jEgodSgX.js → InlineAvatar-DiGOWNKF.js} +1 -1
- zenml/zen_server/dashboard/assets/{Lock-3lLt1ih0.js → Lock-CYYy18Mm.js} +1 -1
- zenml/zen_server/dashboard/assets/{MarkdownVisualization-8O9kTr-2.js → MarkdownVisualization-ylXaAxev.js} +1 -1
- zenml/zen_server/dashboard/assets/NestedCollapsible-DYbgyKxK.js +1 -0
- zenml/zen_server/dashboard/assets/{NumberBox-T9eELfLZ.js → NumberBox-Dtp3J6g5.js} +1 -1
- zenml/zen_server/dashboard/assets/Partials-03iZf8-N.js +1 -0
- zenml/zen_server/dashboard/assets/{PasswordChecker-CW0kqY0W.js → PasswordChecker-B0nadgh6.js} +1 -1
- zenml/zen_server/dashboard/assets/ProBadge-D_EB8HNo.js +1 -0
- zenml/zen_server/dashboard/assets/ProCta-DqNS4v3x.js +1 -0
- zenml/zen_server/dashboard/assets/ProviderIcon-Bki2aw8w.js +1 -0
- zenml/zen_server/dashboard/assets/{ProviderRadio-BROY1700.js → ProviderRadio-8f43sPD4.js} +1 -1
- zenml/zen_server/dashboard/assets/RunSelector-DkPiIiNr.js +1 -0
- zenml/zen_server/dashboard/assets/RunsBody-07YEO7qI.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-lp1KgU4e.js +1 -0
- zenml/zen_server/dashboard/assets/{SecretTooltip-C_qByGWB.js → SecretTooltip-CgnbyeOx.js} +1 -1
- zenml/zen_server/dashboard/assets/{SetPassword-7pRB00El.js → SetPassword-CpP418A2.js} +1 -1
- zenml/zen_server/dashboard/assets/StackList-WvuKQusZ.js +1 -0
- zenml/zen_server/dashboard/assets/Tabs-BktHkCJJ.js +1 -0
- zenml/zen_server/dashboard/assets/Tick-BlMoIlJT.js +1 -0
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DckMEkFf.js → UpdatePasswordSchemas-Sc0A0pP-.js} +1 -1
- zenml/zen_server/dashboard/assets/{UsageReason-DVceN14P.js → UsageReason-YYduL4fj.js} +1 -1
- zenml/zen_server/dashboard/assets/{WizardFooter-CW0Cvd70.js → WizardFooter-dgmizSJC.js} +1 -1
- zenml/zen_server/dashboard/assets/all-pipeline-runs-query-D-c2G6lV.js +1 -0
- zenml/zen_server/dashboard/assets/check-DloQpStc.js +1 -0
- zenml/zen_server/dashboard/assets/{check-circle-Dwxliy1Z.js → check-circle-jNbX5-sR.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-down-8wLBS5pQ.js → chevron-down-6JyMkfjR.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-DoD8iXWM.js → chevron-right-double-D7ojK9Co.js} +1 -1
- zenml/zen_server/dashboard/assets/{code-browser-CZUQs3Wa.js → code-browser-CUFUIHfp.js} +1 -1
- zenml/zen_server/dashboard/assets/{copy-CaSMXwiU.js → copy-C8XQA2Ug.js} +1 -1
- zenml/zen_server/dashboard/assets/create-stack-DM_JPgef.js +1 -0
- zenml/zen_server/dashboard/assets/delete-run-CJdh1P_h.js +1 -0
- zenml/zen_server/dashboard/assets/{docker-BFNgg-z3.js → docker-BdA9vrnW.js} +1 -1
- zenml/zen_server/dashboard/assets/{dots-horizontal-DK5Duzx4.js → dots-horizontal-otGBOSDJ.js} +1 -1
- zenml/zen_server/dashboard/assets/{form-schemas-1AyOCx90.js → form-schemas-K6FYKjwa.js} +1 -1
- zenml/zen_server/dashboard/assets/{gcp-7M2Yf3ZK.js → gcp-CFtm4BA7.js} +1 -1
- zenml/zen_server/dashboard/assets/{help-Dam461dC.js → help-Cc9bBIJH.js} +1 -1
- zenml/zen_server/dashboard/assets/index-B1mVPYxf.js +1 -0
- zenml/zen_server/dashboard/assets/index-BAkC7FXi.js +1 -0
- zenml/zen_server/dashboard/assets/{index-QQb7wQEC.js → index-CCOPpudF.js} +8 -8
- zenml/zen_server/dashboard/assets/index-CEV4Cvaf.js +1 -0
- zenml/zen_server/dashboard/assets/index-DlGvJQPn.css +1 -0
- zenml/zen_server/dashboard/assets/{index-BVJ8n2-j.js → index-Uu49AX48.js} +1 -1
- zenml/zen_server/dashboard/assets/{index.esm-cuVep_NJ.js → index.esm-Dy6Z9Ung.js} +1 -1
- zenml/zen_server/dashboard/assets/{kubernetes--g7r02Zu.js → kubernetes-B2wmAJ1d.js} +1 -1
- zenml/zen_server/dashboard/assets/{layout-DCSYN7-C.js → layout-BtHBmE4w.js} +1 -1
- zenml/zen_server/dashboard/assets/{link-external-CBEk6kEG.js → link-external-b9AXw_sW.js} +1 -1
- zenml/zen_server/dashboard/assets/{login-mutation-DTcAFP1l.js → login-mutation-hf-lK87O.js} +1 -1
- zenml/zen_server/dashboard/assets/{logs-D5bdJGur.js → logs-WMSM52RF.js} +1 -1
- zenml/zen_server/dashboard/assets/{not-found-Cc-JkRH2.js → not-found-BGirLjU-.js} +1 -1
- zenml/zen_server/dashboard/assets/{package-Cs35Szwh.js → package-C6uypY4h.js} +1 -1
- zenml/zen_server/dashboard/assets/page-0JE_-Ec1.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DH_Z7iW1.js → page-6m6yHHlE.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BDigxVpo.js +1 -0
- zenml/zen_server/dashboard/assets/page-BR68V0V1.js +1 -0
- zenml/zen_server/dashboard/assets/page-BRLpxOt0.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BQQKaabe.js → page-BU7huvKw.js} +3 -3
- zenml/zen_server/dashboard/assets/page-BvqLv2Ky.js +1 -0
- zenml/zen_server/dashboard/assets/page-C00YAkaB.js +1 -0
- zenml/zen_server/dashboard/assets/{page-N4qoPHKb.js → page-CD-DcWoy.js} +1 -1
- zenml/zen_server/dashboard/assets/page-COXXJj1k.js +1 -0
- zenml/zen_server/dashboard/assets/page-CbpvrsDL.js +1 -0
- zenml/zen_server/dashboard/assets/page-CdMWnQak.js +1 -0
- zenml/zen_server/dashboard/assets/{page-ClUVkl-O.js → page-CjGdWY13.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CwxrFarU.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DLixvR-7.js → page-D01JhjQB.js} +1 -1
- zenml/zen_server/dashboard/assets/page-D6uU2ax4.js +1 -0
- zenml/zen_server/dashboard/assets/page-D7S3aCbF.js +1 -0
- zenml/zen_server/dashboard/assets/{page-9yplj5JT.js → page-DLC-bNBP.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DXSTpqRD.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DzpVUZ8f.js → page-DakHVWXF.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DIOXwhiD.js → page-Df-Fw0aq.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-B-y2XKIc.js → page-DfbXf_8s.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DjRJCGb3.js +1 -0
- zenml/zen_server/dashboard/assets/{page-C0N5q3l7.js → page-Djikxq_S.js} +1 -1
- zenml/zen_server/dashboard/assets/page-Dnovpa0i.js +3 -0
- zenml/zen_server/dashboard/assets/page-Dot3LPmL.js +1 -0
- zenml/zen_server/dashboard/assets/page-Vcxara9U.js +1 -0
- zenml/zen_server/dashboard/assets/page-Xynx4btY.js +14 -0
- zenml/zen_server/dashboard/assets/page-YpKAqVSa.js +1 -0
- zenml/zen_server/dashboard/assets/page-yYC9OI-E.js +1 -0
- zenml/zen_server/dashboard/assets/{persist-DNb5cdrU.js → persist-Coz7ZWvz.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-CP0JmYZ4.js → persist-GjC8PZoC.js} +1 -1
- zenml/zen_server/dashboard/assets/{plus-C9IxgN2M.js → plus-tf1V2hTJ.js} +1 -1
- zenml/zen_server/dashboard/assets/{refresh-BVu22P_C.js → refresh-BjOeWlEq.js} +1 -1
- zenml/zen_server/dashboard/assets/{rocket-CONEmRmB.js → rocket-DjT2cDvG.js} +1 -1
- zenml/zen_server/dashboard/assets/sharedSchema-CQb14VSr.js +14 -0
- zenml/zen_server/dashboard/assets/stack-detail-query-OPEW-cDJ.js +1 -0
- zenml/zen_server/dashboard/assets/{tick-circle-CM1ZScbQ.js → tick-circle-BEX_Tp4v.js} +1 -1
- zenml/zen_server/dashboard/assets/{trash-DkJHMOg7.js → trash-arLUMWMS.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-DsU8cNVl.js → update-server-settings-mutation-LwuQfHYn.js} +1 -1
- zenml/zen_server/dashboard/assets/upgrade-form-CwRHBuXB.webp +0 -0
- zenml/zen_server/dashboard/assets/url-CkvKAnwF.js +1 -0
- zenml/zen_server/dashboard/assets/{zod-D89GC_vc.js → zod-BwEbpOxH.js} +1 -1
- zenml/zen_server/dashboard/index.html +7 -7
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/exceptions.py +2 -0
- zenml/zen_server/jwt.py +30 -13
- zenml/zen_server/rbac/endpoint_utils.py +43 -1
- zenml/zen_server/rbac/utils.py +0 -2
- zenml/zen_server/routers/artifact_version_endpoints.py +27 -1
- zenml/zen_server/routers/auth_endpoints.py +134 -102
- zenml/zen_server/routers/logs_endpoints.py +66 -0
- zenml/zen_server/routers/workspaces_endpoints.py +3 -4
- zenml/zen_server/template_execution/utils.py +14 -16
- zenml/zen_server/utils.py +27 -0
- zenml/zen_server/zen_server_api.py +6 -3
- zenml/zen_stores/migrations/versions/0.70.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/1cb6477f72d6_move_artifact_save_type.py +99 -0
- zenml/zen_stores/migrations/versions/904464ea4041_add_pipeline_model_run_unique_constraints.py +192 -0
- zenml/zen_stores/migrations/versions/b557b2871693_update_step_run_input_types.py +33 -0
- zenml/zen_stores/rest_zen_store.py +68 -64
- zenml/zen_stores/schemas/artifact_schemas.py +8 -1
- zenml/zen_stores/schemas/model_schemas.py +27 -3
- zenml/zen_stores/schemas/pipeline_run_schemas.py +6 -1
- zenml/zen_stores/schemas/pipeline_schemas.py +8 -2
- zenml/zen_stores/schemas/run_metadata_schemas.py +1 -48
- zenml/zen_stores/schemas/step_run_schemas.py +18 -10
- zenml/zen_stores/sql_zen_store.py +283 -219
- zenml/zen_stores/zen_store_interface.py +15 -42
- {zenml_nightly-0.68.1.dev20241103.dist-info → zenml_nightly-0.70.0.dev20241115.dist-info}/METADATA +2 -2
- {zenml_nightly-0.68.1.dev20241103.dist-info → zenml_nightly-0.70.0.dev20241115.dist-info}/RECORD +226 -203
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-C6N2rGrB.js +0 -1
- zenml/zen_server/dashboard/assets/ComponentBadge-DUiEYJHu.js +0 -1
- zenml/zen_server/dashboard/assets/ComponentFallbackDialog-BFoH5K4V.js +0 -1
- zenml/zen_server/dashboard/assets/ComponentIcon-CAIoUis2.js +0 -1
- zenml/zen_server/dashboard/assets/Partials-YPBB3V4q.js +0 -1
- zenml/zen_server/dashboard/assets/ProviderIcon-Bb3Xha5A.js +0 -1
- zenml/zen_server/dashboard/assets/RunSelector-DCiL3M1c.js +0 -1
- zenml/zen_server/dashboard/assets/SearchField-DfUiGFVd.js +0 -1
- zenml/zen_server/dashboard/assets/Tick-CykQFPj2.js +0 -1
- zenml/zen_server/dashboard/assets/cloud-only-B-s_HMDm.js +0 -1
- zenml/zen_server/dashboard/assets/codespaces-BitYDX9d.gif +0 -0
- zenml/zen_server/dashboard/assets/create-stack-CEmaPZ4c.js +0 -1
- zenml/zen_server/dashboard/assets/delete-run-D-LKbGyz.js +0 -1
- zenml/zen_server/dashboard/assets/index-Bpmj40BI.js +0 -1
- zenml/zen_server/dashboard/assets/index-CbU4Ln_E.css +0 -1
- zenml/zen_server/dashboard/assets/index-DKPhqP2B.js +0 -1
- zenml/zen_server/dashboard/assets/page-BBpOxVcY.js +0 -1
- zenml/zen_server/dashboard/assets/page-BRInM1Lg.js +0 -1
- zenml/zen_server/dashboard/assets/page-BjjlMk7s.js +0 -1
- zenml/zen_server/dashboard/assets/page-Bvd7YH2A.js +0 -1
- zenml/zen_server/dashboard/assets/page-CT3Nep8W.js +0 -1
- zenml/zen_server/dashboard/assets/page-C_f47pBf.js +0 -1
- zenml/zen_server/dashboard/assets/page-Cmv8C_yM.js +0 -3
- zenml/zen_server/dashboard/assets/page-CyN2bdWG.js +0 -1
- zenml/zen_server/dashboard/assets/page-CzzXH4fs.js +0 -1
- zenml/zen_server/dashboard/assets/page-DTlGjgnG.js +0 -1
- zenml/zen_server/dashboard/assets/page-Dbpl86h0.js +0 -1
- zenml/zen_server/dashboard/assets/page-Ddgy6kDS.js +0 -1
- zenml/zen_server/dashboard/assets/page-DtCAfBLy.js +0 -9
- zenml/zen_server/dashboard/assets/page-Dx16z7nA.js +0 -1
- zenml/zen_server/dashboard/assets/page-McUyYbo1.js +0 -1
- zenml/zen_server/dashboard/assets/page-T1P3RyAR.js +0 -1
- zenml/zen_server/dashboard/assets/page-bKaULTGG.js +0 -1
- zenml/zen_server/dashboard/assets/page-sbXUJy9t.js +0 -1
- zenml/zen_server/dashboard/assets/sharedSchema-TMLu-nYQ.js +0 -14
- zenml/zen_server/dashboard/assets/stack-detail-query-xmYxSsUY.js +0 -1
- zenml/zen_server/dashboard/assets/url-D5le3J4q.js +0 -1
- zenml/zen_server/routers/run_metadata_endpoints.py +0 -96
- {zenml_nightly-0.68.1.dev20241103.dist-info → zenml_nightly-0.70.0.dev20241115.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.68.1.dev20241103.dist-info → zenml_nightly-0.70.0.dev20241115.dist-info}/WHEEL +0 -0
- {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
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
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
|
-
|
157
|
-
|
158
|
-
|
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
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
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
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
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
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
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
|
-
|
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
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
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
|
-
|
169
|
-
|
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
|
-
|
180
|
-
|
181
|
-
|
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
|
-
|
53
|
-
|
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
|
-
|
56
|
-
|
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
|
-
|
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
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
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
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
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
|
-
|
63
|
-
|
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
|
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"]
|