zenml-nightly 0.58.2.dev20240626__py3-none-any.whl → 0.62.0.dev20240726__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 +31 -10
- RELEASE_NOTES.md +280 -0
- zenml/VERSION +1 -1
- zenml/__init__.py +2 -0
- zenml/analytics/enums.py +3 -0
- zenml/cli/__init__.py +28 -0
- zenml/cli/artifact.py +1 -2
- zenml/cli/integration.py +9 -8
- zenml/cli/server.py +6 -0
- zenml/cli/stack.py +812 -39
- zenml/cli/stack_components.py +9 -0
- zenml/cli/text_utils.py +35 -1
- zenml/cli/utils.py +127 -10
- zenml/client.py +23 -14
- zenml/config/docker_settings.py +8 -5
- zenml/constants.py +13 -1
- zenml/container_registries/base_container_registry.py +1 -0
- zenml/enums.py +23 -0
- zenml/event_hub/event_hub.py +5 -8
- zenml/integrations/__init__.py +1 -0
- zenml/integrations/aws/__init__.py +1 -0
- zenml/integrations/azure/__init__.py +3 -2
- zenml/integrations/constants.py +1 -0
- zenml/integrations/databricks/__init__.py +52 -0
- zenml/integrations/databricks/flavors/__init__.py +30 -0
- zenml/integrations/databricks/flavors/databricks_model_deployer_flavor.py +118 -0
- zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +147 -0
- zenml/integrations/databricks/model_deployers/__init__.py +20 -0
- zenml/integrations/databricks/model_deployers/databricks_model_deployer.py +249 -0
- zenml/integrations/databricks/orchestrators/__init__.py +20 -0
- zenml/integrations/databricks/orchestrators/databricks_orchestrator.py +497 -0
- zenml/integrations/databricks/orchestrators/databricks_orchestrator_entrypoint_config.py +97 -0
- zenml/integrations/databricks/services/__init__.py +19 -0
- zenml/integrations/databricks/services/databricks_deployment.py +407 -0
- zenml/integrations/databricks/utils/__init__.py +14 -0
- zenml/integrations/databricks/utils/databricks_utils.py +87 -0
- zenml/integrations/deepchecks/__init__.py +1 -0
- zenml/integrations/discord/__init__.py +1 -0
- zenml/integrations/evidently/__init__.py +1 -0
- zenml/integrations/facets/__init__.py +1 -0
- zenml/integrations/feast/__init__.py +1 -0
- zenml/integrations/gcp/__init__.py +3 -1
- zenml/integrations/gcp/google_credentials_mixin.py +1 -1
- zenml/integrations/gcp/service_connectors/gcp_service_connector.py +320 -64
- zenml/integrations/great_expectations/data_validators/ge_data_validator.py +12 -8
- zenml/integrations/huggingface/__init__.py +1 -0
- zenml/integrations/huggingface/materializers/huggingface_datasets_materializer.py +88 -3
- zenml/integrations/huggingface/steps/accelerate_runner.py +1 -7
- zenml/integrations/integration.py +24 -0
- zenml/integrations/kubeflow/__init__.py +3 -0
- zenml/integrations/kubeflow/flavors/kubeflow_orchestrator_flavor.py +1 -1
- zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py +0 -1
- zenml/integrations/kubernetes/__init__.py +3 -1
- zenml/integrations/kubernetes/orchestrators/kube_utils.py +4 -1
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +1 -13
- zenml/integrations/kubernetes/orchestrators/manifest_utils.py +22 -4
- zenml/integrations/kubernetes/pod_settings.py +4 -0
- zenml/integrations/label_studio/annotators/label_studio_annotator.py +1 -0
- zenml/integrations/langchain/__init__.py +1 -0
- zenml/integrations/lightgbm/__init__.py +1 -0
- zenml/integrations/mlflow/__init__.py +4 -2
- zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +6 -2
- zenml/integrations/mlflow/services/mlflow_deployment.py +1 -1
- zenml/integrations/neural_prophet/__init__.py +1 -0
- zenml/integrations/polars/__init__.py +1 -0
- zenml/integrations/prodigy/__init__.py +1 -0
- zenml/integrations/pycaret/__init__.py +6 -0
- zenml/integrations/registry.py +37 -0
- zenml/integrations/s3/artifact_stores/s3_artifact_store.py +17 -6
- zenml/integrations/seldon/__init__.py +1 -0
- zenml/integrations/seldon/model_deployers/seldon_model_deployer.py +1 -0
- zenml/integrations/skypilot/flavors/skypilot_orchestrator_base_vm_config.py +2 -2
- zenml/integrations/skypilot/orchestrators/skypilot_base_vm_orchestrator.py +1 -1
- zenml/integrations/skypilot/orchestrators/skypilot_orchestrator_entrypoint.py +2 -2
- zenml/integrations/skypilot_aws/__init__.py +2 -1
- zenml/integrations/skypilot_azure/__init__.py +1 -3
- zenml/integrations/skypilot_gcp/__init__.py +1 -1
- zenml/integrations/skypilot_lambda/__init__.py +1 -1
- zenml/integrations/skypilot_lambda/flavors/skypilot_orchestrator_lambda_vm_flavor.py +1 -1
- zenml/integrations/slack/__init__.py +1 -0
- zenml/integrations/tekton/__init__.py +1 -0
- zenml/integrations/tensorboard/__init__.py +0 -1
- zenml/integrations/tensorflow/__init__.py +18 -6
- zenml/integrations/wandb/__init__.py +1 -0
- zenml/logging/step_logging.py +34 -35
- zenml/materializers/built_in_materializer.py +1 -1
- zenml/materializers/cloudpickle_materializer.py +1 -1
- zenml/model/model.py +1 -1
- zenml/models/__init__.py +11 -0
- zenml/models/v2/core/component.py +47 -0
- zenml/models/v2/core/model.py +1 -2
- zenml/models/v2/core/server_settings.py +0 -20
- zenml/models/v2/core/service_connector.py +17 -0
- zenml/models/v2/core/stack.py +31 -0
- zenml/models/v2/misc/full_stack.py +129 -0
- zenml/models/v2/misc/stack_deployment.py +91 -0
- zenml/new/pipelines/pipeline.py +1 -1
- zenml/new/pipelines/run_utils.py +1 -1
- zenml/orchestrators/__init__.py +4 -0
- zenml/orchestrators/input_utils.py +3 -6
- zenml/orchestrators/step_launcher.py +1 -0
- zenml/orchestrators/wheeled_orchestrator.py +147 -0
- zenml/service_connectors/service_connector_utils.py +408 -0
- zenml/stack/stack.py +3 -6
- zenml/stack_deployments/__init__.py +14 -0
- zenml/stack_deployments/aws_stack_deployment.py +254 -0
- zenml/stack_deployments/azure_stack_deployment.py +179 -0
- zenml/stack_deployments/gcp_stack_deployment.py +269 -0
- zenml/stack_deployments/stack_deployment.py +218 -0
- zenml/stack_deployments/utils.py +48 -0
- zenml/steps/base_step.py +7 -5
- zenml/utils/function_utils.py +2 -2
- zenml/utils/pagination_utils.py +7 -5
- zenml/utils/pipeline_docker_image_builder.py +105 -68
- zenml/utils/pydantic_utils.py +6 -5
- zenml/utils/source_utils.py +4 -1
- zenml/zen_server/cloud_utils.py +18 -3
- zenml/zen_server/dashboard/assets/{404-CDPQCl4D.js → 404-B_YdvmwS.js} +1 -1
- zenml/zen_server/dashboard/assets/@radix-CFOkMR_E.js +85 -0
- zenml/zen_server/dashboard/assets/{@react-router-DYovave8.js → @react-router-CO-OsFwI.js} +2 -2
- zenml/zen_server/dashboard/assets/{@reactflow-CHBapDaj.js → @reactflow-l_1hUr1S.js} +2 -2
- zenml/zen_server/dashboard/assets/@tanstack-DYiOyJUL.js +22 -0
- zenml/zen_server/dashboard/assets/AwarenessChannel-CFg5iX4Z.js +1 -0
- zenml/zen_server/dashboard/assets/{CodeSnippet-BidtnWOi.js → CodeSnippet-Dvkx_82E.js} +2 -2
- zenml/zen_server/dashboard/assets/CollapsibleCard-opiuBHHc.js +1 -0
- zenml/zen_server/dashboard/assets/Commands-DoN1xrEq.js +1 -0
- zenml/zen_server/dashboard/assets/CopyButton-Cr7xYEPb.js +2 -0
- zenml/zen_server/dashboard/assets/{CsvVizualization-BOuez-fG.js → CsvVizualization-Ck-nZ43m.js} +7 -7
- zenml/zen_server/dashboard/assets/DisplayDate-DYgIjlDF.js +1 -0
- zenml/zen_server/dashboard/assets/EmptyState-BMLnFVlB.js +1 -0
- zenml/zen_server/dashboard/assets/Error-kLtljEOM.js +1 -0
- zenml/zen_server/dashboard/assets/ExecutionStatus-DguLLgTK.js +1 -0
- zenml/zen_server/dashboard/assets/Helpbox-BXUMP21n.js +1 -0
- zenml/zen_server/dashboard/assets/Infobox-DSt0O-dm.js +1 -0
- zenml/zen_server/dashboard/assets/InlineAvatar-xsrsIGE-.js +1 -0
- zenml/zen_server/dashboard/assets/{MarkdownVisualization-DsB2QZiK.js → MarkdownVisualization-xp3hhULl.js} +2 -2
- zenml/zen_server/dashboard/assets/Pagination-C6X-mifw.js +1 -0
- zenml/zen_server/dashboard/assets/PasswordChecker-DUveqlva.js +1 -0
- zenml/zen_server/dashboard/assets/SetPassword-BXGTWiwj.js +1 -0
- zenml/zen_server/dashboard/assets/SuccessStep-DZC60t0x.js +1 -0
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DnM-c11H.js → UpdatePasswordSchemas-DGvwFWO1.js} +1 -1
- zenml/zen_server/dashboard/assets/{aws-t0gKCj_R.js → aws-BgKTfTfx.js} +1 -1
- zenml/zen_server/dashboard/assets/{check-circle-BVvhm5dy.js → check-circle-i56092KI.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-CJ50E9Gr.js → chevron-right-double-CZBOf6JM.js} +1 -1
- zenml/zen_server/dashboard/assets/cloud-only-C_yFCAkP.js +1 -0
- zenml/zen_server/dashboard/assets/{copy-BRhQz3j-.js → copy-BXNk6BjL.js} +1 -1
- zenml/zen_server/dashboard/assets/{database-CRRnyFWh.js → database-1xWSgZfO.js} +1 -1
- zenml/zen_server/dashboard/assets/{docker-BAonhm6G.js → docker-CQMVm_4d.js} +1 -1
- zenml/zen_server/dashboard/assets/{file-text-CbVERUON.js → file-text-CqD_iu6l.js} +1 -1
- zenml/zen_server/dashboard/assets/{help-B8rqCvqn.js → help-bu_DgLKI.js} +1 -1
- zenml/zen_server/dashboard/assets/index-BczVOqUf.js +55 -0
- zenml/zen_server/dashboard/assets/index-EpMIKgrI.css +1 -0
- zenml/zen_server/dashboard/assets/index-rK_Wuy2W.js +1 -0
- zenml/zen_server/dashboard/assets/index.esm-Corw4lXQ.js +1 -0
- zenml/zen_server/dashboard/assets/{login-mutation-wzzl23C6.js → login-mutation-CrHrndTI.js} +1 -1
- zenml/zen_server/dashboard/assets/logs-D8k8BVFf.js +1 -0
- zenml/zen_server/dashboard/assets/not-found-DYa4pC-C.js +1 -0
- zenml/zen_server/dashboard/assets/package-B3fWP-Dh.js +1 -0
- zenml/zen_server/dashboard/assets/page-1h_sD1jz.js +1 -0
- zenml/zen_server/dashboard/assets/{page-yN4rZ-ZS.js → page-1iL8aMqs.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Bi5AI0S7.js → page-2grKx_MY.js} +1 -1
- zenml/zen_server/dashboard/assets/page-5NCOHOsy.js +1 -0
- zenml/zen_server/dashboard/assets/page-8a4UMKXZ.js +1 -0
- zenml/zen_server/dashboard/assets/{page-AQKopn_4.js → page-B6h3iaHJ.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BDns21Iz.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BmkSiYeQ.js → page-BhgCDInH.js} +2 -2
- zenml/zen_server/dashboard/assets/{page-BzVZGExK.js → page-Bi-wtWiO.js} +2 -2
- zenml/zen_server/dashboard/assets/page-BkeAAYwp.js +1 -0
- zenml/zen_server/dashboard/assets/page-BkuQDIf-.js +1 -0
- zenml/zen_server/dashboard/assets/page-BnaevhnB.js +1 -0
- zenml/zen_server/dashboard/assets/page-Bq0YxkLV.js +1 -0
- zenml/zen_server/dashboard/assets/page-Bs2F4eoD.js +2 -0
- zenml/zen_server/dashboard/assets/page-C6-UGEbH.js +1 -0
- zenml/zen_server/dashboard/assets/page-CCNRIt_f.js +1 -0
- zenml/zen_server/dashboard/assets/page-CHNxpz3n.js +1 -0
- zenml/zen_server/dashboard/assets/page-DgorQFqi.js +1 -0
- zenml/zen_server/dashboard/assets/page-K8ebxVIs.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CuT1SUik.js → page-MFQyIJd3.js} +1 -1
- zenml/zen_server/dashboard/assets/page-TgCF0P_U.js +1 -0
- zenml/zen_server/dashboard/assets/page-ZnCEe-eK.js +9 -0
- zenml/zen_server/dashboard/assets/{page-BW6Ket3a.js → page-uA5prJGY.js} +1 -1
- zenml/zen_server/dashboard/assets/persist-D7HJNBWx.js +1 -0
- zenml/zen_server/dashboard/assets/{play-circle-DK5QMJyp.js → play-circle-CNtZKDnW.js} +1 -1
- zenml/zen_server/dashboard/assets/plus-C8WOyCzt.js +1 -0
- zenml/zen_server/dashboard/assets/stack-detail-query-Cficsl6d.js +1 -0
- zenml/zen_server/dashboard/assets/{terminal-B2ovgWuz.js → terminal-By9cErXc.js} +1 -1
- zenml/zen_server/dashboard/assets/update-server-settings-mutation-7d8xi1tS.js +1 -0
- zenml/zen_server/dashboard/assets/{url-6_xv0WJS.js → url-D7mAQGUM.js} +1 -1
- zenml/zen_server/dashboard/assets/{zod-DrZvVLjd.js → zod-BhoGpZ63.js} +1 -1
- zenml/zen_server/dashboard/index.html +7 -7
- zenml/zen_server/dashboard_legacy/asset-manifest.json +4 -4
- zenml/zen_server/dashboard_legacy/index.html +1 -1
- zenml/zen_server/dashboard_legacy/{precache-manifest.f4abc5b7cfa7d90c1caf5521918e29a8.js → precache-manifest.12246c7548e71e2c4438e496360de80c.js} +4 -4
- zenml/zen_server/dashboard_legacy/service-worker.js +1 -1
- zenml/zen_server/dashboard_legacy/static/js/main.3b27024b.chunk.js +2 -0
- zenml/zen_server/dashboard_legacy/static/js/{main.ac2f17d0.chunk.js.map → main.3b27024b.chunk.js.map} +1 -1
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +11 -5
- zenml/zen_server/pipeline_deployment/utils.py +57 -44
- zenml/zen_server/rbac/utils.py +10 -2
- zenml/zen_server/rbac/zenml_cloud_rbac.py +11 -5
- zenml/zen_server/routers/devices_endpoints.py +4 -1
- zenml/zen_server/routers/server_endpoints.py +29 -2
- zenml/zen_server/routers/service_connectors_endpoints.py +57 -0
- zenml/zen_server/routers/stack_deployment_endpoints.py +158 -0
- zenml/zen_server/routers/steps_endpoints.py +2 -1
- zenml/zen_server/routers/workspaces_endpoints.py +64 -0
- zenml/zen_server/zen_server_api.py +2 -0
- zenml/zen_stores/migrations/utils.py +1 -1
- zenml/zen_stores/migrations/versions/0.60.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.61.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.62.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0d707865f404_adding_labels_to_stacks.py +30 -0
- zenml/zen_stores/migrations/versions/b4fca5241eea_migrate_onboarding_state.py +167 -0
- zenml/zen_stores/rest_zen_store.py +149 -4
- zenml/zen_stores/schemas/component_schemas.py +14 -0
- zenml/zen_stores/schemas/server_settings_schemas.py +23 -11
- zenml/zen_stores/schemas/stack_schemas.py +10 -0
- zenml/zen_stores/schemas/step_run_schemas.py +27 -11
- zenml/zen_stores/sql_zen_store.py +450 -6
- zenml/zen_stores/zen_store_interface.py +80 -0
- {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/METADATA +35 -13
- {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/RECORD +227 -191
- zenml/zen_server/dashboard/assets/@radix-C9DBgJhe.js +0 -77
- zenml/zen_server/dashboard/assets/@tanstack-CEbkxrhX.js +0 -30
- zenml/zen_server/dashboard/assets/AwarenessChannel-nXGpmj_f.js +0 -1
- zenml/zen_server/dashboard/assets/Cards-nwsvQLVS.js +0 -1
- zenml/zen_server/dashboard/assets/Commands-DuIWKg_Q.js +0 -1
- zenml/zen_server/dashboard/assets/CopyButton-B_YSm-Ds.js +0 -2
- zenml/zen_server/dashboard/assets/DisplayDate-BdguISQF.js +0 -1
- zenml/zen_server/dashboard/assets/EmptyState-BkooiGtL.js +0 -1
- zenml/zen_server/dashboard/assets/Error-B6M0dPph.js +0 -1
- zenml/zen_server/dashboard/assets/Helpbox-BQoqCm04.js +0 -1
- zenml/zen_server/dashboard/assets/Infobox-Ce9mefqU.js +0 -1
- zenml/zen_server/dashboard/assets/InlineAvatar-DGf3dVhV.js +0 -1
- zenml/zen_server/dashboard/assets/PageHeader-DGaemzjc.js +0 -1
- zenml/zen_server/dashboard/assets/Pagination-DVYfBCCc.js +0 -1
- zenml/zen_server/dashboard/assets/PasswordChecker-DSLBp7Vl.js +0 -1
- zenml/zen_server/dashboard/assets/SetPassword-B5s7DJug.js +0 -1
- zenml/zen_server/dashboard/assets/SuccessStep-ZzczaM7g.js +0 -1
- zenml/zen_server/dashboard/assets/chevron-down-zcvCWmyP.js +0 -1
- zenml/zen_server/dashboard/assets/cloud-only-Ba_ShBR5.js +0 -1
- zenml/zen_server/dashboard/assets/index-CWJ3xbIf.css +0 -1
- zenml/zen_server/dashboard/assets/index-QORVVTMN.js +0 -55
- zenml/zen_server/dashboard/assets/index.esm-F7nqy9zY.js +0 -1
- zenml/zen_server/dashboard/assets/not-found-Dh2la7kh.js +0 -1
- zenml/zen_server/dashboard/assets/page-B-5jAKoO.js +0 -1
- zenml/zen_server/dashboard/assets/page-B-vWk8a6.js +0 -1
- zenml/zen_server/dashboard/assets/page-B0BrqfS8.js +0 -1
- zenml/zen_server/dashboard/assets/page-BQxVFlUl.js +0 -1
- zenml/zen_server/dashboard/assets/page-ByrHy6Ss.js +0 -1
- zenml/zen_server/dashboard/assets/page-CPtY4Kv_.js +0 -1
- zenml/zen_server/dashboard/assets/page-CmmukLsl.js +0 -1
- zenml/zen_server/dashboard/assets/page-D2D-7qyr.js +0 -9
- zenml/zen_server/dashboard/assets/page-DAQQyLxT.js +0 -1
- zenml/zen_server/dashboard/assets/page-DHkUMl_E.js +0 -1
- zenml/zen_server/dashboard/assets/page-DZCbwOEs.js +0 -2
- zenml/zen_server/dashboard/assets/page-DdaIt20-.js +0 -1
- zenml/zen_server/dashboard/assets/page-LqLs24Ot.js +0 -1
- zenml/zen_server/dashboard/assets/page-lebv0c7C.js +0 -1
- zenml/zen_server/dashboard/assets/update-server-settings-mutation-0Wgz8pUE.js +0 -1
- zenml/zen_server/dashboard_legacy/static/js/main.ac2f17d0.chunk.js +0 -2
- {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/entry_points.txt +0 -0
@@ -66,6 +66,7 @@ DEFAULT_DOCKER_PARENT_IMAGE = (
|
|
66
66
|
f"zenmldocker/zenml:{zenml.__version__}-"
|
67
67
|
f"py{sys.version_info.major}.{sys.version_info.minor}"
|
68
68
|
)
|
69
|
+
DEFAULT_ZENML_DOCKER_REPOSITORY = "zenml"
|
69
70
|
|
70
71
|
PIP_DEFAULT_ARGS = {
|
71
72
|
"no-cache-dir": None,
|
@@ -198,10 +199,15 @@ class PipelineDockerImageBuilder:
|
|
198
199
|
# We will build an additional image on top of this one later
|
199
200
|
# to include user files and/or install requirements. The image
|
200
201
|
# we build now will be used as the parent for the next build.
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
202
|
+
repository = docker_settings.target_repository
|
203
|
+
if not repository:
|
204
|
+
if container_registry:
|
205
|
+
repository = (
|
206
|
+
container_registry.config.default_repository
|
207
|
+
)
|
208
|
+
|
209
|
+
repository = repository or DEFAULT_ZENML_DOCKER_REPOSITORY
|
210
|
+
user_image_name = f"{repository}:" f"{tag}-intermediate-build"
|
205
211
|
if push and container_registry:
|
206
212
|
user_image_name = (
|
207
213
|
f"{container_registry.config.uri}/{user_image_name}"
|
@@ -291,6 +297,14 @@ class PipelineDockerImageBuilder:
|
|
291
297
|
if docker_settings.install_stack_requirements:
|
292
298
|
apt_packages += stack.apt_packages
|
293
299
|
|
300
|
+
# include apt packages from all required integrations
|
301
|
+
for integration in docker_settings.required_integrations:
|
302
|
+
# get the integration
|
303
|
+
integration_cls = integration_registry.integrations[
|
304
|
+
integration
|
305
|
+
]
|
306
|
+
apt_packages += integration_cls.APT_PACKAGES
|
307
|
+
|
294
308
|
if apt_packages:
|
295
309
|
logger.info(
|
296
310
|
"Including apt packages: %s",
|
@@ -366,7 +380,14 @@ class PipelineDockerImageBuilder:
|
|
366
380
|
Returns:
|
367
381
|
The docker image name.
|
368
382
|
"""
|
369
|
-
|
383
|
+
repository = docker_settings.target_repository
|
384
|
+
if not repository:
|
385
|
+
if container_registry:
|
386
|
+
repository = container_registry.config.default_repository
|
387
|
+
|
388
|
+
repository = repository or DEFAULT_ZENML_DOCKER_REPOSITORY
|
389
|
+
|
390
|
+
target_image_name = f"{repository}:{tag}"
|
370
391
|
if container_registry:
|
371
392
|
target_image_name = (
|
372
393
|
f"{container_registry.config.uri}/{target_image_name}"
|
@@ -460,69 +481,6 @@ class PipelineDockerImageBuilder:
|
|
460
481
|
"- Including python packages from local environment"
|
461
482
|
)
|
462
483
|
|
463
|
-
# Generate/Read requirements file for user-defined requirements
|
464
|
-
if isinstance(docker_settings.requirements, str):
|
465
|
-
path = os.path.abspath(docker_settings.requirements)
|
466
|
-
try:
|
467
|
-
user_requirements = io_utils.read_file_contents_as_string(path)
|
468
|
-
except FileNotFoundError as e:
|
469
|
-
raise FileNotFoundError(
|
470
|
-
f"Requirements file {path} does not exist."
|
471
|
-
) from e
|
472
|
-
if log:
|
473
|
-
logger.info(
|
474
|
-
"- Including user-defined requirements from file `%s`",
|
475
|
-
path,
|
476
|
-
)
|
477
|
-
elif isinstance(docker_settings.requirements, List):
|
478
|
-
user_requirements = "\n".join(docker_settings.requirements)
|
479
|
-
if log:
|
480
|
-
logger.info(
|
481
|
-
"- Including user-defined requirements: %s",
|
482
|
-
", ".join(f"`{r}`" for r in docker_settings.requirements),
|
483
|
-
)
|
484
|
-
else:
|
485
|
-
user_requirements = None
|
486
|
-
|
487
|
-
if user_requirements:
|
488
|
-
requirements_files.append(
|
489
|
-
(".zenml_user_requirements", user_requirements, [])
|
490
|
-
)
|
491
|
-
|
492
|
-
# Generate requirements file for all required integrations
|
493
|
-
integration_requirements = set(
|
494
|
-
itertools.chain.from_iterable(
|
495
|
-
integration_registry.select_integration_requirements(
|
496
|
-
integration_name=integration,
|
497
|
-
target_os=OperatingSystemType.LINUX,
|
498
|
-
)
|
499
|
-
for integration in docker_settings.required_integrations
|
500
|
-
)
|
501
|
-
)
|
502
|
-
|
503
|
-
if docker_settings.install_stack_requirements:
|
504
|
-
integration_requirements.update(stack.requirements())
|
505
|
-
if code_repository:
|
506
|
-
integration_requirements.update(code_repository.requirements)
|
507
|
-
|
508
|
-
if integration_requirements:
|
509
|
-
integration_requirements_list = sorted(integration_requirements)
|
510
|
-
integration_requirements_file = "\n".join(
|
511
|
-
integration_requirements_list
|
512
|
-
)
|
513
|
-
requirements_files.append(
|
514
|
-
(
|
515
|
-
".zenml_integration_requirements",
|
516
|
-
integration_requirements_file,
|
517
|
-
[],
|
518
|
-
)
|
519
|
-
)
|
520
|
-
if log:
|
521
|
-
logger.info(
|
522
|
-
"- Including integration requirements: %s",
|
523
|
-
", ".join(f"`{r}`" for r in integration_requirements_list),
|
524
|
-
)
|
525
|
-
|
526
484
|
# Generate requirements files for all ZenML Hub plugins
|
527
485
|
if docker_settings.required_hub_plugins:
|
528
486
|
(
|
@@ -560,6 +518,85 @@ class PipelineDockerImageBuilder:
|
|
560
518
|
", ".join(f"`{r}`" for r in hub_pypi_requirements),
|
561
519
|
)
|
562
520
|
|
521
|
+
if docker_settings.install_stack_requirements:
|
522
|
+
stack_requirements = stack.requirements()
|
523
|
+
if code_repository:
|
524
|
+
stack_requirements.update(code_repository.requirements)
|
525
|
+
|
526
|
+
if stack_requirements:
|
527
|
+
stack_requirements_list = sorted(stack_requirements)
|
528
|
+
stack_requirements_file = "\n".join(stack_requirements_list)
|
529
|
+
requirements_files.append(
|
530
|
+
(
|
531
|
+
".zenml_stack_integration_requirements",
|
532
|
+
stack_requirements_file,
|
533
|
+
[],
|
534
|
+
)
|
535
|
+
)
|
536
|
+
if log:
|
537
|
+
logger.info(
|
538
|
+
"- Including stack requirements: %s",
|
539
|
+
", ".join(f"`{r}`" for r in stack_requirements_list),
|
540
|
+
)
|
541
|
+
|
542
|
+
# Generate requirements file for all required integrations
|
543
|
+
integration_requirements = set(
|
544
|
+
itertools.chain.from_iterable(
|
545
|
+
integration_registry.select_integration_requirements(
|
546
|
+
integration_name=integration,
|
547
|
+
target_os=OperatingSystemType.LINUX,
|
548
|
+
)
|
549
|
+
for integration in docker_settings.required_integrations
|
550
|
+
)
|
551
|
+
)
|
552
|
+
|
553
|
+
if integration_requirements:
|
554
|
+
integration_requirements_list = sorted(integration_requirements)
|
555
|
+
integration_requirements_file = "\n".join(
|
556
|
+
integration_requirements_list
|
557
|
+
)
|
558
|
+
requirements_files.append(
|
559
|
+
(
|
560
|
+
".zenml_integration_requirements",
|
561
|
+
integration_requirements_file,
|
562
|
+
[],
|
563
|
+
)
|
564
|
+
)
|
565
|
+
if log:
|
566
|
+
logger.info(
|
567
|
+
"- Including integration requirements: %s",
|
568
|
+
", ".join(f"`{r}`" for r in integration_requirements_list),
|
569
|
+
)
|
570
|
+
|
571
|
+
# Generate/Read requirements file for user-defined requirements
|
572
|
+
if isinstance(docker_settings.requirements, str):
|
573
|
+
path = os.path.abspath(docker_settings.requirements)
|
574
|
+
try:
|
575
|
+
user_requirements = io_utils.read_file_contents_as_string(path)
|
576
|
+
except FileNotFoundError as e:
|
577
|
+
raise FileNotFoundError(
|
578
|
+
f"Requirements file {path} does not exist."
|
579
|
+
) from e
|
580
|
+
if log:
|
581
|
+
logger.info(
|
582
|
+
"- Including user-defined requirements from file `%s`",
|
583
|
+
path,
|
584
|
+
)
|
585
|
+
elif isinstance(docker_settings.requirements, List):
|
586
|
+
user_requirements = "\n".join(docker_settings.requirements)
|
587
|
+
if log:
|
588
|
+
logger.info(
|
589
|
+
"- Including user-defined requirements: %s",
|
590
|
+
", ".join(f"`{r}`" for r in docker_settings.requirements),
|
591
|
+
)
|
592
|
+
else:
|
593
|
+
user_requirements = None
|
594
|
+
|
595
|
+
if user_requirements:
|
596
|
+
requirements_files.append(
|
597
|
+
(".zenml_user_requirements", user_requirements, [])
|
598
|
+
)
|
599
|
+
|
563
600
|
return requirements_files
|
564
601
|
|
565
602
|
@staticmethod
|
zenml/utils/pydantic_utils.py
CHANGED
@@ -45,7 +45,7 @@ def update_model(
|
|
45
45
|
original: M,
|
46
46
|
update: Union["BaseModel", Dict[str, Any]],
|
47
47
|
recursive: bool = True,
|
48
|
-
exclude_none: bool =
|
48
|
+
exclude_none: bool = False,
|
49
49
|
) -> M:
|
50
50
|
"""Updates a pydantic model.
|
51
51
|
|
@@ -53,8 +53,7 @@ def update_model(
|
|
53
53
|
original: The model to update.
|
54
54
|
update: The update values.
|
55
55
|
recursive: If `True`, dictionary values will be updated recursively.
|
56
|
-
exclude_none: If `True`, `None` values in the update
|
57
|
-
will be removed.
|
56
|
+
exclude_none: If `True`, `None` values in the update will be removed.
|
58
57
|
|
59
58
|
Returns:
|
60
59
|
The updated model.
|
@@ -67,7 +66,9 @@ def update_model(
|
|
67
66
|
else:
|
68
67
|
update_dict = update
|
69
68
|
else:
|
70
|
-
update_dict = update.model_dump(
|
69
|
+
update_dict = update.model_dump(
|
70
|
+
exclude_unset=True, exclude_none=exclude_none
|
71
|
+
)
|
71
72
|
|
72
73
|
original_dict = original.model_dump(exclude_unset=True)
|
73
74
|
if recursive:
|
@@ -75,7 +76,7 @@ def update_model(
|
|
75
76
|
else:
|
76
77
|
values = {**original_dict, **update_dict}
|
77
78
|
|
78
|
-
return original.__class__(
|
79
|
+
return original.__class__.model_validate(values)
|
79
80
|
|
80
81
|
|
81
82
|
class TemplateGenerator:
|
zenml/utils/source_utils.py
CHANGED
@@ -38,6 +38,7 @@ from zenml.config.source import (
|
|
38
38
|
Source,
|
39
39
|
SourceType,
|
40
40
|
)
|
41
|
+
from zenml.constants import ENV_ZENML_CUSTOM_SOURCE_ROOT
|
41
42
|
from zenml.environment import Environment
|
42
43
|
from zenml.logger import get_logger
|
43
44
|
|
@@ -57,7 +58,9 @@ BuiltinFunctionTypeSource = Source(
|
|
57
58
|
type=SourceType.BUILTIN,
|
58
59
|
)
|
59
60
|
|
60
|
-
_CUSTOM_SOURCE_ROOT: Optional[str] =
|
61
|
+
_CUSTOM_SOURCE_ROOT: Optional[str] = os.getenv(
|
62
|
+
ENV_ZENML_CUSTOM_SOURCE_ROOT, None
|
63
|
+
)
|
61
64
|
|
62
65
|
|
63
66
|
def load(source: Union[Source, str]) -> Any:
|
zenml/zen_server/cloud_utils.py
CHANGED
@@ -12,6 +12,8 @@ from zenml.zen_server.utils import server_config
|
|
12
12
|
|
13
13
|
ZENML_CLOUD_RBAC_ENV_PREFIX = "ZENML_CLOUD_"
|
14
14
|
|
15
|
+
_cloud_connection: Optional["ZenMLCloudConnection"] = None
|
16
|
+
|
15
17
|
|
16
18
|
class ZenMLCloudConfiguration(BaseModel):
|
17
19
|
"""ZenML Pro RBAC configuration."""
|
@@ -59,7 +61,7 @@ class ZenMLCloudConfiguration(BaseModel):
|
|
59
61
|
)
|
60
62
|
|
61
63
|
|
62
|
-
class
|
64
|
+
class ZenMLCloudConnection:
|
63
65
|
"""Class to use for communication between server and control plane."""
|
64
66
|
|
65
67
|
def __init__(self) -> None:
|
@@ -67,7 +69,7 @@ class ZenMLCloudSession:
|
|
67
69
|
self._config = ZenMLCloudConfiguration.from_environment()
|
68
70
|
self._session: Optional[requests.Session] = None
|
69
71
|
|
70
|
-
def
|
72
|
+
def get(
|
71
73
|
self, endpoint: str, params: Optional[Dict[str, Any]]
|
72
74
|
) -> requests.Response:
|
73
75
|
"""Send a GET request using the active session.
|
@@ -105,7 +107,7 @@ class ZenMLCloudSession:
|
|
105
107
|
|
106
108
|
return response
|
107
109
|
|
108
|
-
def
|
110
|
+
def post(
|
109
111
|
self,
|
110
112
|
endpoint: str,
|
111
113
|
params: Optional[Dict[str, Any]] = None,
|
@@ -217,3 +219,16 @@ class ZenMLCloudSession:
|
|
217
219
|
raise RuntimeError("Could not fetch auth token from auth0.")
|
218
220
|
|
219
221
|
return str(access_token)
|
222
|
+
|
223
|
+
|
224
|
+
def cloud_connection() -> ZenMLCloudConnection:
|
225
|
+
"""Return the initialized cloud connection.
|
226
|
+
|
227
|
+
Returns:
|
228
|
+
The cloud connection.
|
229
|
+
"""
|
230
|
+
global _cloud_connection
|
231
|
+
if _cloud_connection is None:
|
232
|
+
_cloud_connection = ZenMLCloudConnection()
|
233
|
+
|
234
|
+
return _cloud_connection
|
@@ -1 +1 @@
|
|
1
|
-
import{j as e}from"./@
|
1
|
+
import{j as e}from"./@radix-CFOkMR_E.js";import{h as s,r as t}from"./index-BczVOqUf.js";import{E as r}from"./EmptyState-BMLnFVlB.js";import{H as a}from"./help-bu_DgLKI.js";import{L as o}from"./@react-router-CO-OsFwI.js";import"./@tanstack-DYiOyJUL.js";import"./@reactflow-l_1hUr1S.js";function d(){return e.jsx("div",{className:"flex min-h-screen w-full flex-col",children:e.jsx(r,{icon:e.jsx(a,{className:"h-[120px] w-[120px] fill-neutral-300"}),children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"mb-2 text-display-xs font-semibold",children:"We can't find the page you are looking for"}),e.jsx("p",{className:"text-lg text-theme-text-secondary",children:"You can try typing a different URL or we can bring you back to your Homepage."}),e.jsx("div",{className:"mt-5 flex justify-center",children:e.jsx(s,{size:"md",asChild:!0,children:e.jsx(o,{className:"w-min self-center whitespace-nowrap",to:t.home,children:e.jsx("span",{className:"px-0.5",children:"Go to Home"})})})})]})})})}export{d as default};
|