zenml-nightly 0.70.0.dev20241125__py3-none-any.whl → 0.71.0.dev20241220__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 +4 -4
- RELEASE_NOTES.md +112 -0
- zenml/VERSION +1 -1
- zenml/artifact_stores/base_artifact_store.py +2 -2
- zenml/artifacts/artifact_config.py +15 -6
- zenml/artifacts/utils.py +59 -32
- zenml/cli/__init__.py +22 -4
- zenml/cli/base.py +5 -5
- zenml/cli/login.py +26 -0
- zenml/cli/pipeline.py +111 -62
- zenml/cli/server.py +20 -20
- zenml/cli/service_connectors.py +3 -3
- zenml/cli/stack.py +0 -3
- zenml/cli/stack_components.py +0 -1
- zenml/cli/utils.py +0 -5
- zenml/client.py +62 -20
- zenml/config/compiler.py +12 -3
- zenml/config/pipeline_configurations.py +20 -0
- zenml/config/pipeline_run_configuration.py +1 -0
- zenml/config/secret_reference_mixin.py +1 -1
- zenml/config/server_config.py +4 -0
- zenml/config/step_configurations.py +21 -0
- zenml/constants.py +10 -0
- zenml/enums.py +1 -0
- zenml/image_builders/base_image_builder.py +5 -2
- zenml/image_builders/build_context.py +7 -16
- zenml/image_builders/local_image_builder.py +13 -3
- zenml/integrations/__init__.py +1 -0
- zenml/integrations/aws/__init__.py +3 -0
- zenml/integrations/aws/flavors/__init__.py +6 -0
- zenml/integrations/aws/flavors/aws_image_builder_flavor.py +146 -0
- zenml/integrations/aws/image_builders/__init__.py +20 -0
- zenml/integrations/aws/image_builders/aws_image_builder.py +307 -0
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +14 -6
- zenml/integrations/constants.py +1 -0
- zenml/integrations/feast/__init__.py +1 -1
- zenml/integrations/feast/feature_stores/feast_feature_store.py +13 -9
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +1 -1
- zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +2 -1
- zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +11 -0
- zenml/integrations/kubernetes/orchestrators/kube_utils.py +46 -2
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +13 -2
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +3 -1
- zenml/integrations/kubernetes/orchestrators/manifest_utils.py +3 -2
- zenml/integrations/kubernetes/step_operators/kubernetes_step_operator.py +3 -2
- zenml/integrations/lightning/flavors/lightning_orchestrator_flavor.py +11 -0
- zenml/integrations/modal/__init__.py +46 -0
- zenml/integrations/modal/flavors/__init__.py +26 -0
- zenml/integrations/modal/flavors/modal_step_operator_flavor.py +125 -0
- zenml/integrations/modal/step_operators/__init__.py +22 -0
- zenml/integrations/modal/step_operators/modal_step_operator.py +242 -0
- zenml/integrations/neptune/experiment_trackers/neptune_experiment_tracker.py +7 -5
- zenml/integrations/neptune/experiment_trackers/run_state.py +69 -53
- zenml/integrations/registry.py +2 -2
- zenml/integrations/skypilot/flavors/skypilot_orchestrator_base_vm_config.py +12 -0
- zenml/integrations/wandb/flavors/wandb_experiment_tracker_flavor.py +13 -5
- zenml/io/filesystem.py +2 -2
- zenml/io/local_filesystem.py +3 -3
- zenml/materializers/built_in_materializer.py +18 -1
- zenml/materializers/structured_string_materializer.py +8 -3
- zenml/model/model.py +23 -101
- zenml/model/utils.py +21 -17
- zenml/models/__init__.py +6 -0
- zenml/models/v2/base/filter.py +26 -30
- zenml/models/v2/base/scoped.py +258 -5
- zenml/models/v2/core/artifact_version.py +21 -29
- zenml/models/v2/core/code_repository.py +1 -12
- zenml/models/v2/core/component.py +5 -68
- zenml/models/v2/core/flavor.py +1 -11
- zenml/models/v2/core/model.py +1 -57
- zenml/models/v2/core/model_version.py +11 -36
- zenml/models/v2/core/model_version_artifact.py +11 -3
- zenml/models/v2/core/model_version_pipeline_run.py +14 -3
- zenml/models/v2/core/pipeline.py +47 -55
- zenml/models/v2/core/pipeline_build.py +67 -12
- zenml/models/v2/core/pipeline_deployment.py +0 -10
- zenml/models/v2/core/pipeline_run.py +110 -32
- zenml/models/v2/core/run_metadata.py +30 -9
- zenml/models/v2/core/run_template.py +21 -29
- zenml/models/v2/core/schedule.py +0 -10
- zenml/models/v2/core/secret.py +0 -14
- zenml/models/v2/core/service.py +9 -16
- zenml/models/v2/core/service_connector.py +0 -11
- zenml/models/v2/core/stack.py +21 -30
- zenml/models/v2/core/step_run.py +24 -18
- zenml/models/v2/core/trigger.py +19 -3
- zenml/models/v2/misc/run_metadata.py +38 -0
- zenml/orchestrators/base_orchestrator.py +13 -1
- zenml/orchestrators/input_utils.py +19 -6
- zenml/orchestrators/output_utils.py +5 -1
- zenml/orchestrators/publish_utils.py +12 -5
- zenml/orchestrators/step_launcher.py +16 -16
- zenml/orchestrators/step_run_utils.py +18 -197
- zenml/orchestrators/step_runner.py +40 -3
- zenml/orchestrators/utils.py +79 -50
- zenml/pipelines/build_utils.py +12 -0
- zenml/pipelines/pipeline_decorator.py +4 -0
- zenml/pipelines/pipeline_definition.py +26 -8
- zenml/pipelines/run_utils.py +9 -5
- zenml/service_connectors/service_connector_utils.py +3 -9
- zenml/stack/stack_component.py +1 -1
- zenml/stack_deployments/aws_stack_deployment.py +22 -0
- zenml/steps/base_step.py +11 -1
- zenml/steps/entrypoint_function_utils.py +7 -3
- zenml/steps/step_decorator.py +4 -0
- zenml/steps/utils.py +23 -7
- zenml/types.py +4 -0
- zenml/utils/archivable.py +65 -36
- zenml/utils/code_utils.py +8 -4
- zenml/utils/docker_utils.py +9 -0
- zenml/utils/metadata_utils.py +186 -153
- zenml/utils/string_utils.py +41 -16
- zenml/utils/visualization_utils.py +4 -1
- zenml/zen_server/auth.py +9 -10
- zenml/zen_server/cloud_utils.py +3 -1
- zenml/zen_server/dashboard/assets/{404-NVXKFp-x.js → 404-Cqu3EDCm.js} +1 -1
- zenml/zen_server/dashboard/assets/{@reactflow-CK0KJUen.js → @reactflow-D2Y7BWwz.js} +1 -1
- zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-DezXKmDf.js → AlertDialogDropdownItem-BHd71pVS.js} +1 -1
- zenml/zen_server/dashboard/assets/{CodeSnippet-JzR8CEtw.js → CodeSnippet-DIonwetW.js} +1 -1
- zenml/zen_server/dashboard/assets/{CollapsibleCard-DQW_ktMO.js → CollapsibleCard-CDnC97pB.js} +1 -1
- zenml/zen_server/dashboard/assets/{Commands-DL2kwkRd.js → Commands-BVEXKAOj.js} +1 -1
- zenml/zen_server/dashboard/assets/{ComponentBadge-D_g62Wv8.js → ComponentBadge-CrRvovox.js} +1 -1
- zenml/zen_server/dashboard/assets/{CopyButton-LNcWaa14.js → CopyButton-B6wGAhQv.js} +1 -1
- zenml/zen_server/dashboard/assets/{CsvVizualization-DknpE5ej.js → CsvVizualization-CjcT7LMm.js} +5 -5
- zenml/zen_server/dashboard/assets/DeleteAlertDialog-D2ELtM2W.js +1 -0
- zenml/zen_server/dashboard/assets/{DialogItem-Bxf8FuAT.js → DialogItem-DXIMhBgU.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-DYflYyps.js → Error-B8uUfTpL.js} +1 -1
- zenml/zen_server/dashboard/assets/{ExecutionStatus-C7zyIQKZ.js → ExecutionStatus-ibAdY-dG.js} +1 -1
- zenml/zen_server/dashboard/assets/{Helpbox-oYSGpLqd.js → Helpbox-BfAfhKHw.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-Cx4xGoXR.js → Infobox-M_SMOu96.js} +1 -1
- zenml/zen_server/dashboard/assets/{InlineAvatar-DiGOWNKF.js → InlineAvatar-DBA0a0-a.js} +1 -1
- zenml/zen_server/dashboard/assets/{NestedCollapsible-DYbgyKxK.js → NestedCollapsible-DpgmEFKw.js} +1 -1
- zenml/zen_server/dashboard/assets/{Partials-03iZf8-N.js → Partials-D_ldD9if.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProBadge-D_EB8HNo.js → ProBadge-DQbfFotM.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProCta-DqNS4v3x.js → ProCta-Bcpb4rcY.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderIcon-Bki2aw8w.js → ProviderIcon-BZpgPigN.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderRadio-8f43sPD4.js → ProviderRadio-DWPnMuQ1.js} +1 -1
- zenml/zen_server/dashboard/assets/RunSelector-DgRGaAc6.js +1 -0
- zenml/zen_server/dashboard/assets/{RunsBody-07YEO7qI.js → RunsBody-KecfSkjY.js} +1 -1
- zenml/zen_server/dashboard/assets/{SearchField-lp1KgU4e.js → SearchField-n-ILHnaP.js} +1 -1
- zenml/zen_server/dashboard/assets/{SecretTooltip-CgnbyeOx.js → SecretTooltip-B8MrX5yu.js} +1 -1
- zenml/zen_server/dashboard/assets/{SetPassword-CpP418A2.js → SetPassword-B_IVq_wg.js} +1 -1
- zenml/zen_server/dashboard/assets/StackList-TWPBYnkF.js +1 -0
- zenml/zen_server/dashboard/assets/{Tabs-BktHkCJJ.js → Tabs-Rg857zmd.js} +1 -1
- zenml/zen_server/dashboard/assets/{Tick-BlMoIlJT.js → Tick-COg4A-xo.js} +1 -1
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-Sc0A0pP-.js → UpdatePasswordSchemas-C6Aj3hm6.js} +1 -1
- zenml/zen_server/dashboard/assets/{UsageReason-YYduL4fj.js → UsageReason-BTLbx7w4.js} +1 -1
- zenml/zen_server/dashboard/assets/{WizardFooter-dgmizSJC.js → WizardFooter-BCAj69Vj.js} +1 -1
- zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-D-c2G6lV.js → all-pipeline-runs-query-DMXkDrV2.js} +1 -1
- zenml/zen_server/dashboard/assets/code-snippets-CqONne41.js +13 -0
- zenml/zen_server/dashboard/assets/{create-stack-DM_JPgef.js → create-stack-HfdbhLs4.js} +1 -1
- zenml/zen_server/dashboard/assets/dates-3pMLCNrD.js +1 -0
- zenml/zen_server/dashboard/assets/delete-run-DZ4hIXff.js +1 -0
- zenml/zen_server/dashboard/assets/{form-schemas-K6FYKjwa.js → form-schemas-B0AVEd9b.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-BAkC7FXi.js → index-DPqSWjug.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-CEV4Cvaf.js → index-DScjfBRb.js} +1 -1
- zenml/zen_server/dashboard/assets/index-DXvT1_Um.css +1 -0
- zenml/zen_server/dashboard/assets/{index-CCOPpudF.js → index-FO-p0GU7.js} +5 -5
- zenml/zen_server/dashboard/assets/{index-B1mVPYxf.js → index-I3bKUGUj.js} +1 -1
- zenml/zen_server/dashboard/assets/key-icon-aH-QIa5R.js +1 -0
- zenml/zen_server/dashboard/assets/login-command-CkqxPtV3.js +1 -0
- zenml/zen_server/dashboard/assets/{login-mutation-hf-lK87O.js → login-mutation-BQeo4wTY.js} +1 -1
- zenml/zen_server/dashboard/assets/{not-found-BGirLjU-.js → not-found-gAJ5aDdR.js} +1 -1
- zenml/zen_server/dashboard/assets/page-9Y9-gig0.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DjRJCGb3.js → page-AUwiQ14W.js} +1 -1
- zenml/zen_server/dashboard/assets/page-B6XU7yYT.js +2 -0
- zenml/zen_server/dashboard/assets/{page-C00YAkaB.js → page-BKZYc2Zv.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CdMWnQak.js → page-BU9FG4sR.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-D7S3aCbF.js → page-B_Apk3xg.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Djikxq_S.js → page-BdowiCbr.js} +1 -1
- zenml/zen_server/dashboard/assets/page-Bg8OjTRe.js +1 -0
- zenml/zen_server/dashboard/assets/page-BxL4qD4_.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DakHVWXF.js → page-CWxT5K5J.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CXuQufSe.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DLC-bNBP.js → page-CcQr8CPP.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CD-DcWoy.js → page-Ce4Hrjnr.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CiYxgZP_.js +1 -0
- zenml/zen_server/dashboard/assets/page-Cldq1mpe.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BDigxVpo.js → page-D4wdonLm.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-D6uU2ax4.js → page-D8ObrbH8.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DXSTpqRD.js → page-DFuAUGt4.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CbpvrsDL.js → page-DGazBpuP.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-COXXJj1k.js → page-DO1UcqPX.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DRYXdL5o.js +1 -0
- zenml/zen_server/dashboard/assets/{page-Df-Fw0aq.js → page-DYEquBC2.js} +1 -1
- zenml/zen_server/dashboard/assets/page-Dk32IeZm.js +1 -0
- zenml/zen_server/dashboard/assets/{page-yYC9OI-E.js → page-I3nKFGie.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-6m6yHHlE.js → page-M0w-n6vn.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Vcxara9U.js → page-R5dx3xGF.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BR68V0V1.js → page-bT5pOvcB.js} +1 -1
- zenml/zen_server/dashboard/assets/page-hUqK889I.js +6 -0
- zenml/zen_server/dashboard/assets/{page-CjGdWY13.js → page-h_Stveon.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-D01JhjQB.js → page-r8XK5vR7.js} +1 -1
- zenml/zen_server/dashboard/assets/page-u_-ZXBKb.js +1 -0
- zenml/zen_server/dashboard/assets/page-zaMqB_ao.js +1 -0
- zenml/zen_server/dashboard/assets/{persist-GjC8PZoC.js → persist-AppN1B0J.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-Coz7ZWvz.js → persist-DAUi_3za.js} +1 -1
- zenml/zen_server/dashboard/assets/service-BqqeXLEe.js +2 -0
- zenml/zen_server/dashboard/assets/{sharedSchema-CQb14VSr.js → sharedSchema-uXN9FLLk.js} +1 -1
- zenml/zen_server/dashboard/assets/{stack-detail-query-OPEW-cDJ.js → stack-detail-query-XfZBiBP2.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-LwuQfHYn.js → update-server-settings-mutation-BWmgVJwA.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-CkvKAnwF.js → url-BLwMbzES.js} +1 -1
- zenml/zen_server/dashboard/index.html +4 -4
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/rbac/endpoint_utils.py +6 -4
- zenml/zen_server/rbac/models.py +3 -2
- zenml/zen_server/rbac/rbac_sql_zen_store.py +173 -0
- zenml/zen_server/rbac/utils.py +4 -7
- zenml/zen_server/routers/auth_endpoints.py +22 -11
- zenml/zen_server/routers/steps_endpoints.py +7 -1
- zenml/zen_server/routers/users_endpoints.py +35 -37
- zenml/zen_server/routers/workspaces_endpoints.py +44 -55
- zenml/zen_server/template_execution/utils.py +4 -1
- zenml/zen_server/utils.py +4 -3
- zenml/zen_stores/base_zen_store.py +10 -2
- zenml/zen_stores/migrations/versions/0.71.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/26351d482b9e_add_step_run_unique_constraint.py +37 -0
- zenml/zen_stores/migrations/versions/a1237ba94fd8_add_model_version_producer_run_unique_.py +68 -0
- zenml/zen_stores/migrations/versions/b73bc71f1106_remove_component_spec_path.py +36 -0
- zenml/zen_stores/migrations/versions/cc269488e5a9_separate_run_metadata.py +135 -0
- zenml/zen_stores/migrations/versions/ec6307720f92_simplify_model_version_links.py +7 -6
- zenml/zen_stores/rest_zen_store.py +76 -43
- zenml/zen_stores/schemas/__init__.py +5 -1
- zenml/zen_stores/schemas/artifact_schemas.py +12 -11
- zenml/zen_stores/schemas/component_schemas.py +0 -3
- zenml/zen_stores/schemas/model_schemas.py +55 -17
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +7 -7
- zenml/zen_stores/schemas/pipeline_run_schemas.py +52 -18
- zenml/zen_stores/schemas/pipeline_schemas.py +5 -0
- zenml/zen_stores/schemas/run_metadata_schemas.py +66 -31
- zenml/zen_stores/schemas/step_run_schemas.py +40 -13
- zenml/zen_stores/schemas/utils.py +47 -3
- zenml/zen_stores/sql_zen_store.py +462 -134
- {zenml_nightly-0.70.0.dev20241125.dist-info → zenml_nightly-0.71.0.dev20241220.dist-info}/METADATA +5 -5
- {zenml_nightly-0.70.0.dev20241125.dist-info → zenml_nightly-0.71.0.dev20241220.dist-info}/RECORD +239 -217
- zenml/utils/cloud_utils.py +0 -40
- zenml/zen_server/dashboard/assets/RunSelector-DkPiIiNr.js +0 -1
- zenml/zen_server/dashboard/assets/StackList-WvuKQusZ.js +0 -1
- zenml/zen_server/dashboard/assets/delete-run-CJdh1P_h.js +0 -1
- zenml/zen_server/dashboard/assets/index-DlGvJQPn.css +0 -1
- zenml/zen_server/dashboard/assets/page-0JE_-Ec1.js +0 -1
- zenml/zen_server/dashboard/assets/page-BRLpxOt0.js +0 -1
- zenml/zen_server/dashboard/assets/page-BU7huvKw.js +0 -6
- zenml/zen_server/dashboard/assets/page-BvqLv2Ky.js +0 -1
- zenml/zen_server/dashboard/assets/page-CwxrFarU.js +0 -1
- zenml/zen_server/dashboard/assets/page-DfbXf_8s.js +0 -1
- zenml/zen_server/dashboard/assets/page-Dnovpa0i.js +0 -3
- zenml/zen_server/dashboard/assets/page-Dot3LPmL.js +0 -1
- zenml/zen_server/dashboard/assets/page-Xynx4btY.js +0 -14
- zenml/zen_server/dashboard/assets/page-YpKAqVSa.js +0 -1
- {zenml_nightly-0.70.0.dev20241125.dist-info → zenml_nightly-0.71.0.dev20241220.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.70.0.dev20241125.dist-info → zenml_nightly-0.71.0.dev20241220.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.70.0.dev20241125.dist-info → zenml_nightly-0.71.0.dev20241220.dist-info}/entry_points.txt +0 -0
README.md
CHANGED
@@ -147,7 +147,7 @@ Or, through our CLI command:
|
|
147
147
|
zenml stack deploy --provider aws
|
148
148
|
```
|
149
149
|
|
150
|
-
Alternatively, if the necessary pieces of infrastructure
|
150
|
+
Alternatively, if the necessary pieces of infrastructure are already deployed, you can register a cloud stack seamlessly through the stack wizard:
|
151
151
|
|
152
152
|
```bash
|
153
153
|
zenml stack register <STACK_NAME> --provider aws
|
@@ -195,9 +195,9 @@ def trainer(training_df: pd.DataFrame) -> Annotated["model", torch.nn.Module]:
|
|
195
195
|
|
196
196
|

|
197
197
|
|
198
|
-
### Purpose built for machine learning with
|
198
|
+
### Purpose built for machine learning with integrations to your favorite tools
|
199
199
|
|
200
|
-
While ZenML brings a lot of value of the box, it also integrates into your existing tooling and infrastructure without you having to be locked in.
|
200
|
+
While ZenML brings a lot of value out of the box, it also integrates into your existing tooling and infrastructure without you having to be locked in.
|
201
201
|
|
202
202
|
```python
|
203
203
|
from bentoml._internal.bento import bento
|
@@ -333,7 +333,7 @@ the Apache License Version 2.0.
|
|
333
333
|
<a href="https://github.com/zenml-io/zenml-projects">Projects Showcase</a>
|
334
334
|
<br />
|
335
335
|
<br />
|
336
|
-
🎉 Version 0.
|
336
|
+
🎉 Version 0.71.0 is out. Check out the release notes
|
337
337
|
<a href="https://github.com/zenml-io/zenml/releases">here</a>.
|
338
338
|
<br />
|
339
339
|
🖥️ Download our VS Code Extension <a href="https://marketplace.visualstudio.com/items?itemName=ZenML.zenml-vscode">here</a>.
|
RELEASE_NOTES.md
CHANGED
@@ -1,5 +1,117 @@
|
|
1
1
|
<!-- markdown-link-check-disable -->
|
2
2
|
|
3
|
+
# 0.71.0
|
4
|
+
|
5
|
+
ZenML version 0.71.0 delivers a new Modal step operator integration as its
|
6
|
+
core feature, enabling efficient cloud execution for ML pipelines with granular
|
7
|
+
hardware configuration options. The release strengthens enterprise capabilities
|
8
|
+
through improved token management and dashboard features, while expanding
|
9
|
+
artifact handling with dynamic naming and enhanced visualization support.
|
10
|
+
Additionally, it includes various infrastructure improvements and bug fixes
|
11
|
+
that enhance the platform's stability and usability, particularly around
|
12
|
+
Docker connectivity, Kubernetes management, and service connector operations.
|
13
|
+
|
14
|
+
## New Feature: Modal Step Operator Integration
|
15
|
+
|
16
|
+
ZenML now [integrates with Modal](https://modal.com/), bringing lightning-fast
|
17
|
+
cloud execution capabilities to your ML pipelines. This new step operator[
|
18
|
+
https://docs.zenml.io/stack-components/step-operators/modal] allows you to
|
19
|
+
execute individual pipeline steps on Modal's specialized compute instances,
|
20
|
+
offering notable speed particularly for Docker image building and hardware
|
21
|
+
provisioning. With simple configuration options, you can precisely specify
|
22
|
+
hardware requirements like GPU type, CPU count, and memory for each step,
|
23
|
+
making it ideal for resource-intensive ML workloads.
|
24
|
+
|
25
|
+
## Other Highlights
|
26
|
+
|
27
|
+
- **Workload API Token Management:** Refactored token management for improved
|
28
|
+
security with a generic API token dispenser.
|
29
|
+
- **Dashboard Enhancements:**
|
30
|
+
- Introduced service account management capabilities.
|
31
|
+
- Added API key creation and integration features.
|
32
|
+
- **Dynamic Artifact Naming:** Introduced capability to dynamically name
|
33
|
+
artifacts.
|
34
|
+
- **Visualization Enhancements:** Made dictionaries and lists visualizable,
|
35
|
+
added JSON visualization type.
|
36
|
+
|
37
|
+
## Additional Features and Improvements
|
38
|
+
|
39
|
+
- Improved error messages for Docker daemon connectivity
|
40
|
+
- Enhanced SageMaker URL handling
|
41
|
+
- Simplified model version artifact linkage
|
42
|
+
- Added testing for pipeline templates
|
43
|
+
- Improved Kubernetes pod and label length management
|
44
|
+
- Allowed skipping type annotations for step inputs
|
45
|
+
- Enabled using feature service instances instead of just names
|
46
|
+
|
47
|
+
## Bug Fixes
|
48
|
+
|
49
|
+
- Fixed issues with getting out of an inaccessible active stack
|
50
|
+
- Fixed race conditions in the service connector type registry
|
51
|
+
- Resolved migration test complications
|
52
|
+
- Corrected documentation links
|
53
|
+
- Fixed artifact store and artifact URI handling
|
54
|
+
- Addressed various scalability and compatibility issues
|
55
|
+
|
56
|
+
## Documentation Updates
|
57
|
+
|
58
|
+
- Added documentation redirects
|
59
|
+
- Updated PyTorch documentation links
|
60
|
+
- Improved service connector documentation
|
61
|
+
|
62
|
+
## What's Changed
|
63
|
+
* Refactored workload API token management for better security and implemented generic API token dispenser by @stefannica in https://github.com/zenml-io/zenml/pull/3154
|
64
|
+
* Add 0.70.0 to the migration tests by @avishniakov in https://github.com/zenml-io/zenml/pull/3190
|
65
|
+
* Adjustments to the PR template by @bcdurak in https://github.com/zenml-io/zenml/pull/3194
|
66
|
+
* [docs] Fix links in the how-to section of docs by @wjayesh in https://github.com/zenml-io/zenml/pull/3196
|
67
|
+
* Fixing sagemaker urls to take the settings into consideration by @bcdurak in https://github.com/zenml-io/zenml/pull/3195
|
68
|
+
* Add cached run into testing of migrations by @avishniakov in https://github.com/zenml-io/zenml/pull/3199
|
69
|
+
* Fix service connector type registry race conditions by @stefannica in https://github.com/zenml-io/zenml/pull/3202
|
70
|
+
* Refactor container resource configuration in Vertex Orchestrator test by @avishniakov in https://github.com/zenml-io/zenml/pull/3203
|
71
|
+
* [docs] Add missing redirects by @wjayesh in https://github.com/zenml-io/zenml/pull/3200
|
72
|
+
* Add links to `uv` new PyTorch documentation by @strickvl in https://github.com/zenml-io/zenml/pull/3204
|
73
|
+
* Fix broken docs link by @strickvl in https://github.com/zenml-io/zenml/pull/3208
|
74
|
+
* Bugfix for getting out of an inaccessible active stack with no permissions by @bcdurak in https://github.com/zenml-io/zenml/pull/3198
|
75
|
+
* Simplify model version artifact linkage by @schustmi in https://github.com/zenml-io/zenml/pull/3175
|
76
|
+
* Reenable macos testing by @avishniakov in https://github.com/zenml-io/zenml/pull/3205
|
77
|
+
* Various fixes and improvements by @stefannica in https://github.com/zenml-io/zenml/pull/3211
|
78
|
+
* Pass config path during zenml pipeline build by @schustmi in https://github.com/zenml-io/zenml/pull/3212
|
79
|
+
* Add test for running templates by @schustmi in https://github.com/zenml-io/zenml/pull/3192
|
80
|
+
* Fix service connector docstring by @schustmi in https://github.com/zenml-io/zenml/pull/3216
|
81
|
+
* Improve error message when docker daemon is not reachable by @schustmi in https://github.com/zenml-io/zenml/pull/3214
|
82
|
+
* Don't run migration for empty updates by @schustmi in https://github.com/zenml-io/zenml/pull/3210
|
83
|
+
* Remove `--check` from format script and fix naming by @safoinme in https://github.com/zenml-io/zenml/pull/3218
|
84
|
+
* More scalability improvements by @schustmi in https://github.com/zenml-io/zenml/pull/3206
|
85
|
+
* Use correct keyword for artifact store open by @schustmi in https://github.com/zenml-io/zenml/pull/3220
|
86
|
+
* Fix passing of some sagemaker settings by @schustmi in https://github.com/zenml-io/zenml/pull/3221
|
87
|
+
* Add hint when trying to connect with api key by @schustmi in https://github.com/zenml-io/zenml/pull/3222
|
88
|
+
* Allow passing None values as parameter for optional complex types by @schustmi in https://github.com/zenml-io/zenml/pull/3215
|
89
|
+
* Limit kubernetes pod and label length by @schustmi in https://github.com/zenml-io/zenml/pull/3217
|
90
|
+
* Updating the quickstart example to use the new `log_metadata` by @bcdurak in https://github.com/zenml-io/zenml/pull/3188
|
91
|
+
* Allow skipping type annotations for step inputs by @schustmi in https://github.com/zenml-io/zenml/pull/3223
|
92
|
+
* Modal Step Operator by @strickvl in https://github.com/zenml-io/zenml/pull/2948
|
93
|
+
* Add dynamic artifacts naming, documentation and tests by @avishniakov in https://github.com/zenml-io/zenml/pull/3201
|
94
|
+
* Run template CLI command and bugfix by @schustmi in https://github.com/zenml-io/zenml/pull/3225
|
95
|
+
* Make dicts/lists visualizable and add JSON as viz type by @wjayesh in https://github.com/zenml-io/zenml/pull/2882
|
96
|
+
* Instances of the `FeatureService`s are now used instead of only the names of the FeatureServices. by @aiakide in https://github.com/zenml-io/zenml/pull/3209
|
97
|
+
* Quickstart fixes by @schustmi in https://github.com/zenml-io/zenml/pull/3227
|
98
|
+
* Add missing docs by @schustmi in https://github.com/zenml-io/zenml/pull/3226
|
99
|
+
* Misc cleanup by @schustmi in https://github.com/zenml-io/zenml/pull/3229
|
100
|
+
* Fix input resolution for steps with dynamic artifact names by @schustmi in https://github.com/zenml-io/zenml/pull/3228
|
101
|
+
* Follow-up on the `run_metadata` changes by @bcdurak in https://github.com/zenml-io/zenml/pull/3193
|
102
|
+
* Fixed broken links by @htahir1 in https://github.com/zenml-io/zenml/pull/3232
|
103
|
+
* Fixed wandb login problem in Quickstart by @htahir1 in https://github.com/zenml-io/zenml/pull/3233
|
104
|
+
* Misc bugfixes by @schustmi in https://github.com/zenml-io/zenml/pull/3234
|
105
|
+
* Add additional way to fetch docker repo digest by @schustmi in https://github.com/zenml-io/zenml/pull/3231
|
106
|
+
* AWS Image Builder implementation by @stefannica in https://github.com/zenml-io/zenml/pull/2904
|
107
|
+
* Disable client-side caching for some orchestrators by @schustmi in https://github.com/zenml-io/zenml/pull/3235
|
108
|
+
* Fix artifact uris for artifacts with name placeholders by @schustmi in https://github.com/zenml-io/zenml/pull/3237
|
109
|
+
* Materializer test fix on Windows by @bcdurak in https://github.com/zenml-io/zenml/pull/3238
|
110
|
+
* Fix GET step run endpoint to return unhydrated response if requested by @schustmi in https://github.com/zenml-io/zenml/pull/3240
|
111
|
+
* Pipeline run API token fixes and improvements by @stefannica in https://github.com/zenml-io/zenml/pull/3242
|
112
|
+
|
113
|
+
**Full Changelog**: https://github.com/zenml-io/zenml/compare/0.70.0...0.71.0
|
114
|
+
|
3
115
|
# 0.70.0
|
4
116
|
|
5
117
|
The **ZenML 0.70.0** release includes a significant number of database schema changes and migrations, which means upgrading to this version will require extra caution. As always, please make sure to make a copy of your production database before upgrading.
|
zenml/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.71.0.dev20241220
|
@@ -267,11 +267,11 @@ class BaseArtifactStore(StackComponent):
|
|
267
267
|
|
268
268
|
# --- User interface ---
|
269
269
|
@abstractmethod
|
270
|
-
def open(self,
|
270
|
+
def open(self, path: PathType, mode: str = "r") -> Any:
|
271
271
|
"""Open a file at the given path.
|
272
272
|
|
273
273
|
Args:
|
274
|
-
|
274
|
+
path: The path of the file to open.
|
275
275
|
mode: The mode to open the file.
|
276
276
|
|
277
277
|
Returns:
|
@@ -45,7 +45,13 @@ class ArtifactConfig(BaseModel):
|
|
45
45
|
```
|
46
46
|
|
47
47
|
Attributes:
|
48
|
-
name: The name of the artifact
|
48
|
+
name: The name of the artifact:
|
49
|
+
- static string e.g. "name"
|
50
|
+
- dynamic string e.g. "name_{date}_{time}_{custom_placeholder}"
|
51
|
+
If you use any placeholders besides `date` and `time`,
|
52
|
+
you need to provide the values for them in the `substitutions`
|
53
|
+
argument of the step decorator or the `substitutions` argument
|
54
|
+
of `with_options` of the step.
|
49
55
|
version: The version of the artifact.
|
50
56
|
tags: The tags of the artifact.
|
51
57
|
run_metadata: Metadata to add to the artifact.
|
@@ -98,15 +104,18 @@ class ArtifactConfig(BaseModel):
|
|
98
104
|
)
|
99
105
|
elif is_model_artifact:
|
100
106
|
logger.warning(
|
101
|
-
"`ArtifactConfig
|
102
|
-
"removed soon. Use `ArtifactConfig
|
107
|
+
"`ArtifactConfig(..., is_model_artifact=True)` is deprecated "
|
108
|
+
"and will be removed soon. Use `ArtifactConfig(..., "
|
109
|
+
"artifact_type=ArtifactType.MODEL)` instead. For more info: "
|
110
|
+
"https://docs.zenml.io/user-guide/starter-guide/manage-artifacts"
|
103
111
|
)
|
104
112
|
data.setdefault("artifact_type", ArtifactType.MODEL)
|
105
113
|
elif is_deployment_artifact:
|
106
114
|
logger.warning(
|
107
|
-
"`ArtifactConfig
|
108
|
-
"will be removed soon. Use `ArtifactConfig
|
109
|
-
"instead."
|
115
|
+
"`ArtifactConfig(..., is_deployment_artifact=True)` is "
|
116
|
+
"deprecated and will be removed soon. Use `ArtifactConfig(..., "
|
117
|
+
"artifact_type=ArtifactType.SERVICE)` instead. For more info: "
|
118
|
+
"https://docs.zenml.io/user-guide/starter-guide/manage-artifacts"
|
110
119
|
)
|
111
120
|
data.setdefault("artifact_type", ArtifactType.SERVICE)
|
112
121
|
|
zenml/artifacts/utils.py
CHANGED
@@ -14,6 +14,7 @@
|
|
14
14
|
"""Utility functions for handling artifacts."""
|
15
15
|
|
16
16
|
import base64
|
17
|
+
import contextlib
|
17
18
|
import os
|
18
19
|
import tempfile
|
19
20
|
import zipfile
|
@@ -41,7 +42,6 @@ from zenml.enums import (
|
|
41
42
|
ArtifactSaveType,
|
42
43
|
ArtifactType,
|
43
44
|
ExecutionStatus,
|
44
|
-
MetadataResourceTypes,
|
45
45
|
StackComponentType,
|
46
46
|
VisualizationType,
|
47
47
|
)
|
@@ -404,50 +404,73 @@ def log_artifact_metadata(
|
|
404
404
|
artifact_version: The version of the artifact to log metadata for. If
|
405
405
|
not provided, when being called inside a step that produces an
|
406
406
|
artifact named `artifact_name`, the metadata will be associated to
|
407
|
-
the corresponding newly created artifact.
|
408
|
-
being called outside a step, or in a step that does not produce
|
409
|
-
any artifact named `artifact_name`, the metadata will be associated
|
410
|
-
to the latest version of that artifact.
|
407
|
+
the corresponding newly created artifact.
|
411
408
|
|
412
409
|
Raises:
|
413
410
|
ValueError: If no artifact name is provided and the function is not
|
414
411
|
called inside a step with a single output, or, if neither an
|
415
412
|
artifact nor an output with the given name exists.
|
413
|
+
|
416
414
|
"""
|
417
415
|
logger.warning(
|
418
416
|
"The `log_artifact_metadata` function is deprecated and will soon be "
|
419
|
-
"removed.
|
417
|
+
"removed. Instead, you can consider using: "
|
418
|
+
"`log_metadata(metadata={...}, infer_artifact=True, ...)` instead. For more "
|
419
|
+
"info: https://docs.zenml.io/how-to/model-management-metrics/track-metrics-metadata/attach-metadata-to-an-artifact"
|
420
420
|
)
|
421
|
-
|
421
|
+
|
422
|
+
from zenml import log_metadata
|
423
|
+
|
424
|
+
if artifact_name and artifact_version:
|
425
|
+
assert artifact_name is not None
|
426
|
+
|
427
|
+
log_metadata(
|
428
|
+
metadata=metadata,
|
429
|
+
artifact_name=artifact_name,
|
430
|
+
artifact_version=artifact_version,
|
431
|
+
)
|
432
|
+
|
433
|
+
step_context = None
|
434
|
+
with contextlib.suppress(RuntimeError):
|
422
435
|
step_context = get_step_context()
|
423
|
-
|
424
|
-
|
436
|
+
|
437
|
+
if step_context and artifact_name in step_context._outputs.keys():
|
438
|
+
log_metadata(
|
439
|
+
metadata=metadata,
|
440
|
+
artifact_name=artifact_name,
|
441
|
+
infer_artifact=True,
|
425
442
|
)
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
)
|
443
|
+
elif step_context and len(step_context._outputs) == 1:
|
444
|
+
single_output_name = list(step_context._outputs.keys())[0]
|
445
|
+
|
446
|
+
log_metadata(
|
447
|
+
metadata=metadata,
|
448
|
+
artifact_name=single_output_name,
|
449
|
+
infer_artifact=True,
|
450
|
+
)
|
451
|
+
elif artifact_name:
|
436
452
|
client = Client()
|
437
|
-
|
438
|
-
|
453
|
+
logger.warning(
|
454
|
+
"Deprecation warning! Currently, you are calling "
|
455
|
+
"`log_artifact_metadata` from a context, where we use the "
|
456
|
+
"`artifact_name` to fetch it and link the metadata to its "
|
457
|
+
"latest version. This behavior is deprecated and will be "
|
458
|
+
"removed in the future. To circumvent this, please check"
|
459
|
+
"the `log_metadata` function."
|
460
|
+
)
|
461
|
+
artifact_version_model = client.get_artifact_version(
|
462
|
+
name_id_or_prefix=artifact_name
|
463
|
+
)
|
464
|
+
log_metadata(
|
439
465
|
metadata=metadata,
|
440
|
-
|
441
|
-
resource_type=MetadataResourceTypes.ARTIFACT_VERSION,
|
466
|
+
artifact_version_id=artifact_version_model.id,
|
442
467
|
)
|
443
|
-
|
444
468
|
else:
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
)
|
449
|
-
|
450
|
-
raise ValueError(e)
|
469
|
+
raise ValueError(
|
470
|
+
"You need to call `log_artifact_metadata` either within a step "
|
471
|
+
"(potentially with an artifact name) or outside of a step with an "
|
472
|
+
"artifact name (and/or version)."
|
473
|
+
)
|
451
474
|
|
452
475
|
|
453
476
|
# -----------------
|
@@ -575,7 +598,7 @@ def download_artifact_files_from_response(
|
|
575
598
|
)
|
576
599
|
file_path = str(Path(artifact.uri) / file_str)
|
577
600
|
with artifact_store.open(
|
578
|
-
|
601
|
+
file_path, mode="rb"
|
579
602
|
) as store_file:
|
580
603
|
# Use a loop to read and write chunks of the file
|
581
604
|
# instead of reading the entire file into memory
|
@@ -689,7 +712,11 @@ def _link_artifact_version_to_the_step_and_model(
|
|
689
712
|
client.zen_store.update_run_step(
|
690
713
|
step_run_id=step_run.id,
|
691
714
|
step_run_update=StepRunUpdate(
|
692
|
-
outputs={
|
715
|
+
outputs={
|
716
|
+
artifact_version.artifact.name: [
|
717
|
+
artifact_version.id,
|
718
|
+
]
|
719
|
+
}
|
693
720
|
),
|
694
721
|
)
|
695
722
|
error_message = "model"
|
zenml/cli/__init__.py
CHANGED
@@ -1987,7 +1987,7 @@ Secrets management
|
|
1987
1987
|
------------------
|
1988
1988
|
|
1989
1989
|
ZenML offers a way to [securely store secrets associated with your other
|
1990
|
-
stack components and infrastructure](https://docs.zenml.io/getting-started/deploying-zenml/
|
1990
|
+
stack components and infrastructure](https://docs.zenml.io/getting-started/deploying-zenml/secret-management).
|
1991
1991
|
A ZenML Secret is a collection or grouping of key-value pairs stored by the
|
1992
1992
|
ZenML secrets store. ZenML Secrets are identified by a unique name which
|
1993
1993
|
allows you to fetch or reference them in your pipelines and stacks.
|
@@ -2083,7 +2083,7 @@ challenge in configuring uninterrupted, secure access to infrastructure
|
|
2083
2083
|
resources. In ZenML, Service Connectors streamline this process by abstracting
|
2084
2084
|
away the complexity of authentication and help you connect your stack to your
|
2085
2085
|
resources. You can find the full docs on the ZenML service connectors
|
2086
|
-
[here](https://docs.zenml.io/how-to/auth-management).
|
2086
|
+
[here](https://docs.zenml.io/how-to/infrastructure-deployment/auth-management).
|
2087
2087
|
|
2088
2088
|
The ZenML CLI features a variety of commands to help you manage your service
|
2089
2089
|
connectors. First of all, to explore all the types of service connectors
|
@@ -2113,7 +2113,7 @@ zenml service-connector register SERVICE_CONNECTOR_NAME \
|
|
2113
2113
|
```
|
2114
2114
|
|
2115
2115
|
For more details on how to create a service connector, please refer to our
|
2116
|
-
[docs](https://docs.zenml.io/how-to/auth-management).
|
2116
|
+
[docs](https://docs.zenml.io/how-to/infrastructure-deployment/auth-management).
|
2117
2117
|
|
2118
2118
|
To check if your service connector is registered properly, you can `verify` it.
|
2119
2119
|
By doing this, you can both check if it is configured correctly and also, you
|
@@ -2242,6 +2242,9 @@ export ZENML_STORE_URL=https://...
|
|
2242
2242
|
export ZENML_STORE_API_KEY=<API_KEY>
|
2243
2243
|
```
|
2244
2244
|
|
2245
|
+
You don't need to run `zenml login` after setting these two environment
|
2246
|
+
variables and can start interacting with your server right away.
|
2247
|
+
|
2245
2248
|
To see all the service accounts you've created and their API keys, use the
|
2246
2249
|
following commands:
|
2247
2250
|
|
@@ -2364,7 +2367,7 @@ defining the pipeline is not in your current directory, the module path consists
|
|
2364
2367
|
of the full path to the file, separated by dots, e.g.
|
2365
2368
|
`some_directory.some_file.my_pipeline`.
|
2366
2369
|
|
2367
|
-
To [build Docker images for your pipeline](https://docs.zenml.io/how-to/customize-docker-builds)
|
2370
|
+
To [build Docker images for your pipeline](https://docs.zenml.io/how-to/infrastructure-deployment/customize-docker-builds)
|
2368
2371
|
without actually running the pipeline, use:
|
2369
2372
|
|
2370
2373
|
```bash
|
@@ -2407,6 +2410,21 @@ stack, use the `--stack` option.
|
|
2407
2410
|
zenml pipeline run <PIPELINE_SOURCE_PATH> --stack=<STACK_ID_OR_NAME>
|
2408
2411
|
```
|
2409
2412
|
|
2413
|
+
If you want to create a run template based on your pipeline that can later be used to trigger a run either from the dashboard or through an HTTP request:
|
2414
|
+
|
2415
|
+
```bash
|
2416
|
+
zenml pipeline create-run-template <PIPELINE_SOURCE_PATH> \
|
2417
|
+
--name=<TEMPLATE_NAME>
|
2418
|
+
|
2419
|
+
To specify a config file, use the `--config/-c` option. If you would like to use a different stack than the active one, use the `--stack` option.
|
2420
|
+
|
2421
|
+
```bash
|
2422
|
+
zenml pipeline create-run-template <PIPELINE_SOURCE_PATH> \
|
2423
|
+
--name=<TEMPLATE_NAME> \
|
2424
|
+
--config=<PATH_TO_CONFIG_YAML> \
|
2425
|
+
--stack=<STACK_ID_OR_NAME>
|
2426
|
+
```
|
2427
|
+
|
2410
2428
|
Tagging your resources with ZenML
|
2411
2429
|
---------------------------------
|
2412
2430
|
|
zenml/cli/base.py
CHANGED
@@ -79,19 +79,19 @@ class ZenMLProjectTemplateLocation(BaseModel):
|
|
79
79
|
ZENML_PROJECT_TEMPLATES = dict(
|
80
80
|
e2e_batch=ZenMLProjectTemplateLocation(
|
81
81
|
github_url="zenml-io/template-e2e-batch",
|
82
|
-
github_tag="2024.11.
|
82
|
+
github_tag="2024.11.28", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
|
83
83
|
),
|
84
84
|
starter=ZenMLProjectTemplateLocation(
|
85
85
|
github_url="zenml-io/template-starter",
|
86
|
-
github_tag="2024.
|
86
|
+
github_tag="2024.11.28", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
|
87
87
|
),
|
88
88
|
nlp=ZenMLProjectTemplateLocation(
|
89
89
|
github_url="zenml-io/template-nlp",
|
90
|
-
github_tag="2024.
|
90
|
+
github_tag="2024.11.28", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
|
91
91
|
),
|
92
92
|
llm_finetuning=ZenMLProjectTemplateLocation(
|
93
93
|
github_url="zenml-io/template-llm-finetuning",
|
94
|
-
github_tag="2024.11.
|
94
|
+
github_tag="2024.11.28", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
|
95
95
|
),
|
96
96
|
)
|
97
97
|
|
@@ -264,7 +264,7 @@ def init(
|
|
264
264
|
f"will only take effect when you're running ZenML from the initialized "
|
265
265
|
f"repository root, or from a subdirectory. For more information on "
|
266
266
|
f"repositories and configurations, please visit "
|
267
|
-
f"https://docs.zenml.io/user-guide/
|
267
|
+
f"https://docs.zenml.io/user-guide/production-guide/understand-stacks."
|
268
268
|
)
|
269
269
|
|
270
270
|
|
zenml/cli/login.py
CHANGED
@@ -14,6 +14,7 @@
|
|
14
14
|
"""CLI for managing ZenML server deployments."""
|
15
15
|
|
16
16
|
import ipaddress
|
17
|
+
import os
|
17
18
|
import re
|
18
19
|
import sys
|
19
20
|
import time
|
@@ -413,6 +414,27 @@ def connect_to_pro_server(
|
|
413
414
|
cli_utils.declare(f"Connected to ZenML Pro server: {server.name}.")
|
414
415
|
|
415
416
|
|
417
|
+
def _fail_if_authentication_environment_variables_set() -> None:
|
418
|
+
"""Fail if any of the authentication environment variables are set."""
|
419
|
+
environment_variables = [
|
420
|
+
"ZENML_STORE_URL",
|
421
|
+
"ZENML_STORE_API_KEY",
|
422
|
+
"ZENML_STORE_USERNAME",
|
423
|
+
"ZENML_STORE_PASSWORD",
|
424
|
+
]
|
425
|
+
|
426
|
+
if any(env_var in os.environ for env_var in environment_variables):
|
427
|
+
cli_utils.error(
|
428
|
+
"You're running to login/logout while having one of the "
|
429
|
+
f"{environment_variables} environment variables set. "
|
430
|
+
"If you want to use those environment variables to authenticate "
|
431
|
+
"to your ZenML server, there is no need to login/logout, you can "
|
432
|
+
"start interacting with your server right away. If you want to use "
|
433
|
+
"the `zenml login` command for authentication, please unset these "
|
434
|
+
"environment variables first."
|
435
|
+
)
|
436
|
+
|
437
|
+
|
416
438
|
@cli.command(
|
417
439
|
"login",
|
418
440
|
help=(
|
@@ -670,6 +692,8 @@ def login(
|
|
670
692
|
dashboard on a public domain. Primarily used for accessing the
|
671
693
|
dashboard in Colab.
|
672
694
|
"""
|
695
|
+
_fail_if_authentication_environment_variables_set()
|
696
|
+
|
673
697
|
if local:
|
674
698
|
if api_key:
|
675
699
|
cli_utils.error(
|
@@ -849,6 +873,8 @@ def logout(
|
|
849
873
|
"""
|
850
874
|
from zenml.login.credentials_store import get_credentials_store
|
851
875
|
|
876
|
+
_fail_if_authentication_environment_variables_set()
|
877
|
+
|
852
878
|
credentials_store = get_credentials_store()
|
853
879
|
gc = GlobalConfiguration()
|
854
880
|
store_cfg = gc.store_configuration
|