zenml-nightly 0.75.0.dev20250318__py3-none-any.whl → 0.80.0.dev20250322__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- zenml/VERSION +1 -1
- zenml/__init__.py +3 -1
- zenml/artifacts/artifact_config.py +2 -2
- zenml/artifacts/utils.py +4 -8
- zenml/cli/__init__.py +6 -6
- zenml/cli/base.py +2 -2
- zenml/cli/login.py +2 -2
- zenml/cli/project.py +1 -1
- zenml/cli/server.py +6 -4
- zenml/cli/service_accounts.py +2 -2
- zenml/cli/service_connectors.py +1 -1
- zenml/cli/stack.py +1 -1
- zenml/cli/stack_components.py +1 -1
- zenml/cli/user_management.py +1 -1
- zenml/cli/utils.py +3 -3
- zenml/client.py +9 -9
- zenml/config/compiler.py +1 -1
- zenml/config/server_config.py +1 -1
- zenml/constants.py +2 -1
- zenml/enums.py +12 -0
- zenml/integrations/__init__.py +0 -64
- zenml/integrations/airflow/__init__.py +0 -2
- zenml/integrations/argilla/__init__.py +0 -1
- zenml/integrations/aws/__init__.py +0 -3
- zenml/integrations/azure/__init__.py +0 -2
- zenml/integrations/azure/service_connectors/azure_service_connector.py +1 -1
- zenml/integrations/bentoml/__init__.py +0 -2
- zenml/integrations/bentoml/services/bentoml_container_deployment.py +2 -2
- zenml/integrations/bentoml/services/bentoml_local_deployment.py +1 -1
- zenml/integrations/bentoml/steps/bentoml_deployer.py +1 -1
- zenml/integrations/bitbucket/__init__.py +0 -2
- zenml/integrations/comet/__init__.py +0 -2
- zenml/integrations/databricks/__init__.py +0 -2
- zenml/integrations/databricks/services/databricks_deployment.py +3 -1
- zenml/integrations/deepchecks/__init__.py +0 -2
- zenml/integrations/discord/__init__.py +0 -2
- zenml/integrations/evidently/__init__.py +0 -2
- zenml/integrations/facets/__init__.py +0 -2
- zenml/integrations/feast/__init__.py +0 -2
- zenml/integrations/gcp/__init__.py +0 -3
- zenml/integrations/github/__init__.py +0 -2
- zenml/integrations/github/code_repositories/github_code_repository.py +7 -2
- zenml/integrations/gitlab/__init__.py +0 -1
- zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py +5 -2
- zenml/integrations/great_expectations/__init__.py +0 -3
- zenml/integrations/huggingface/__init__.py +0 -1
- zenml/integrations/huggingface/services/huggingface_deployment.py +3 -1
- zenml/integrations/hyperai/__init__.py +0 -2
- zenml/integrations/kaniko/__init__.py +0 -2
- zenml/integrations/kubeflow/__init__.py +0 -1
- zenml/integrations/kubernetes/__init__.py +0 -2
- zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +4 -0
- zenml/integrations/kubernetes/orchestrators/kube_utils.py +89 -1
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +124 -83
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +44 -10
- zenml/integrations/kubernetes/orchestrators/manifest_utils.py +33 -1
- zenml/integrations/label_studio/__init__.py +0 -2
- zenml/integrations/langchain/__init__.py +0 -2
- zenml/integrations/lightgbm/__init__.py +0 -1
- zenml/integrations/lightning/__init__.py +0 -2
- zenml/integrations/mlflow/__init__.py +1 -3
- zenml/integrations/mlflow/services/mlflow_deployment.py +1 -1
- zenml/integrations/modal/__init__.py +0 -1
- zenml/integrations/neptune/__init__.py +0 -2
- zenml/integrations/neural_prophet/__init__.py +0 -2
- zenml/integrations/numpy/__init__.py +0 -2
- zenml/integrations/openai/__init__.py +0 -1
- zenml/integrations/pandas/__init__.py +0 -2
- zenml/integrations/pigeon/__init__.py +0 -1
- zenml/integrations/pillow/__init__.py +0 -3
- zenml/integrations/polars/__init__.py +0 -2
- zenml/integrations/prodigy/__init__.py +0 -1
- zenml/integrations/pycaret/__init__.py +0 -2
- zenml/integrations/pytorch/__init__.py +0 -1
- zenml/integrations/pytorch_lightning/__init__.py +0 -2
- zenml/integrations/registry.py +34 -0
- zenml/integrations/s3/__init__.py +0 -2
- zenml/integrations/scipy/__init__.py +0 -2
- zenml/integrations/seldon/__init__.py +0 -2
- zenml/integrations/seldon/services/seldon_deployment.py +3 -2
- zenml/integrations/sklearn/__init__.py +1 -1
- zenml/integrations/skypilot/orchestrators/skypilot_base_vm_orchestrator.py +43 -18
- zenml/integrations/skypilot_aws/__init__.py +1 -3
- zenml/integrations/skypilot_azure/__init__.py +1 -2
- zenml/integrations/skypilot_gcp/__init__.py +1 -3
- zenml/integrations/skypilot_kubernetes/__init__.py +1 -3
- zenml/integrations/skypilot_lambda/__init__.py +1 -3
- zenml/integrations/slack/__init__.py +0 -1
- zenml/integrations/spark/__init__.py +0 -1
- zenml/integrations/tekton/__init__.py +0 -1
- zenml/integrations/tensorboard/__init__.py +0 -2
- zenml/integrations/tensorboard/services/tensorboard_service.py +1 -1
- zenml/integrations/tensorflow/__init__.py +0 -2
- zenml/integrations/vllm/__init__.py +0 -1
- zenml/integrations/vllm/services/vllm_deployment.py +1 -1
- zenml/integrations/wandb/__init__.py +0 -1
- zenml/integrations/whylogs/__init__.py +0 -1
- zenml/integrations/xgboost/__init__.py +0 -2
- zenml/login/credentials.py +1 -1
- zenml/materializers/__init__.py +1 -0
- zenml/model_deployers/base_model_deployer.py +1 -1
- zenml/models/__init__.py +4 -0
- zenml/models/v2/base/filter.py +162 -54
- zenml/models/v2/base/scoped.py +132 -0
- zenml/models/v2/core/artifact_version.py +12 -33
- zenml/models/v2/core/model_version.py +12 -50
- zenml/models/v2/core/pipeline_run.py +12 -32
- zenml/models/v2/core/service.py +2 -2
- zenml/models/v2/core/step_run.py +15 -32
- zenml/{services/service_type.py → models/v2/misc/service.py} +1 -1
- zenml/orchestrators/step_run_utils.py +1 -1
- zenml/orchestrators/utils.py +1 -1
- zenml/services/__init__.py +3 -5
- zenml/services/container/container_service.py +2 -1
- zenml/services/local/local_service.py +2 -1
- zenml/services/service.py +3 -2
- zenml/services/service_endpoint.py +2 -1
- zenml/services/service_monitor.py +1 -1
- zenml/services/service_status.py +1 -12
- zenml/stack_deployments/aws_stack_deployment.py +10 -5
- zenml/stack_deployments/azure_stack_deployment.py +47 -41
- zenml/stack_deployments/constants.py +30 -0
- zenml/stack_deployments/gcp_stack_deployment.py +6 -0
- zenml/steps/entrypoint_function_utils.py +1 -1
- zenml/utils/dashboard_utils.py +73 -8
- zenml/utils/server_utils.py +52 -0
- zenml/zen_server/dashboard/assets/{404-BbAvjc7Z.js → 404-2I8egBQu.js} +1 -1
- zenml/zen_server/dashboard/assets/@reactflow-BHoFKFSZ.js +17 -0
- zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-XL2NfFgP.js → AlertDialogDropdownItem-D7KZcPFw.js} +1 -1
- zenml/zen_server/dashboard/assets/CodeSnippet-DUkCnBpQ.js +9 -0
- zenml/zen_server/dashboard/assets/{CollapsibleCard-Djtd_ocf.js → CollapsibleCard-B5-5Plnd.js} +1 -1
- zenml/zen_server/dashboard/assets/{Commands-V-hH_IKQ.js → Commands-CbOMmarC.js} +1 -1
- zenml/zen_server/dashboard/assets/{ComponentBadge-CVN2FsiW.js → ComponentBadge-FrujKBC6.js} +1 -1
- zenml/zen_server/dashboard/assets/ComponentIcon-Dx5fBrDX.js +1 -0
- zenml/zen_server/dashboard/assets/{CsvVizualization-CWaQcWIN.js → CsvVizualization-B8E3p9we.js} +1 -1
- zenml/zen_server/dashboard/assets/{DeleteAlertDialog-CTLRrcFM.js → DeleteAlertDialog-BgTZbbAt.js} +1 -1
- zenml/zen_server/dashboard/assets/{DialogItem-ST291Hsl.js → DialogItem-CNWLiJcc.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-CIBjAdSc.js → Error-BkUP4Luv.js} +1 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-CD8Vj7sp.js +1 -0
- zenml/zen_server/dashboard/assets/{Helpbox-cwQNH06F.js → Helpbox-DIx6mDOH.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-DYKoAVhW.js → Infobox-BHEdNmME.js} +1 -1
- zenml/zen_server/dashboard/assets/{InlineAvatar-Bk4QLPTU.js → InlineAvatar-Bin9UPKJ.js} +1 -1
- zenml/zen_server/dashboard/assets/{NestedCollapsible-CE4OF670.js → NestedCollapsible-Da-k0Mff.js} +1 -1
- zenml/zen_server/dashboard/assets/{Partials-cL1-u_sT.js → Partials-TNaYjHsV.js} +1 -1
- zenml/zen_server/dashboard/assets/ProBadge-BfPp-B97.js +1 -0
- zenml/zen_server/dashboard/assets/{ProCta-DtUutIul.js → ProCta-7_FtpX3I.js} +1 -1
- zenml/zen_server/dashboard/assets/ProviderIcon-CxeziA5a.js +1 -0
- zenml/zen_server/dashboard/assets/{ProviderRadio-C4bltH6-.js → ProviderRadio-DPmZHff_.js} +1 -1
- zenml/zen_server/dashboard/assets/RunSelector-BVKB4Z8F.js +1 -0
- zenml/zen_server/dashboard/assets/{RunsBody-D2VoO-cR.js → RunsBody-Cj4sIqQB.js} +1 -1
- zenml/zen_server/dashboard/assets/{SearchField-DfNxVtjV.js → SearchField-DjAOZic5.js} +1 -1
- zenml/zen_server/dashboard/assets/SecretTooltip-mMAAP4dM.js +1 -0
- zenml/zen_server/dashboard/assets/{SetPassword-CWl2mwz8.js → SetPassword-B0o5kSJU.js} +1 -1
- zenml/zen_server/dashboard/assets/{StackList-C8KNd00o.js → StackList-5UB8LoEq.js} +1 -1
- zenml/zen_server/dashboard/assets/{Tabs-BEWDPvPV.js → Tabs-AuhCyzle.js} +1 -1
- zenml/zen_server/dashboard/assets/Tick-CHW0jc8Y.js +1 -0
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DCuCj7NK.js → UpdatePasswordSchemas-Bauivjf-.js} +1 -1
- zenml/zen_server/dashboard/assets/{UsageReason-CwUrEwEz.js → UsageReason-Dr5ca5M4.js} +1 -1
- zenml/zen_server/dashboard/assets/{Wizard-CynnoHg4.js → Wizard-XEp9rGmf.js} +1 -1
- zenml/zen_server/dashboard/assets/{WizardFooter-B2bYs89C.js → WizardFooter-BtL1Gi1k.js} +1 -1
- zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-B509kMlL.js → all-pipeline-runs-query-COvsm3bC.js} +1 -1
- zenml/zen_server/dashboard/assets/configuration-form-BJUCr0wl.js +1 -0
- zenml/zen_server/dashboard/assets/{create-stack-BjWXz5nx.js → create-stack-B2c98UlP.js} +1 -1
- zenml/zen_server/dashboard/assets/{delete-run-CzPWbsBy.js → delete-run-Do3XyF4W.js} +1 -1
- zenml/zen_server/dashboard/assets/flavor-select-D8CranSY.js +1 -0
- zenml/zen_server/dashboard/assets/{form-schemas-B6u3P_a4.js → form-schemas-Bm-dTV3L.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-BCKg1Y5r.css → index-6mLFgFwe.css} +1 -1
- zenml/zen_server/dashboard/assets/{index-Bjeu4_0O.js → index-CzhJC6pc.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-CaRx22lH.js → index-D-n6tspq.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-DWoLoYDY.js → index-DPjvk73v.js} +8 -8
- zenml/zen_server/dashboard/assets/{index-Dba8yULY.js → index-eIIP-0dQ.js} +1 -1
- zenml/zen_server/dashboard/assets/login-mutation-D6uiKsKk.js +1 -0
- zenml/zen_server/dashboard/assets/{not-found-DGQ8rm7B.js → not-found-DFrksY0r.js} +1 -1
- zenml/zen_server/dashboard/assets/page-B-uHUFcm.js +1 -0
- zenml/zen_server/dashboard/assets/page-B0Llmzo_.js +1 -0
- zenml/zen_server/dashboard/assets/page-B150LbzG.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CfeQbejg.js → page-B1Un9vAU.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CxrLV30P.js → page-B80TE04v.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BIseZTJt.js +2 -0
- zenml/zen_server/dashboard/assets/{page-C5xq6rqE.js → page-BJ15SGwt.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-B6msmF1h.js → page-BJrZsPSh.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BMZaECzB.js +1 -0
- zenml/zen_server/dashboard/assets/{page-D1upvSPi.js → page-BTvnIFGR.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DLw1Apss.js → page-BXh1mF-D.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BZUxCBoD.js +1 -0
- zenml/zen_server/dashboard/assets/page-BeFiRx31.js +1 -0
- zenml/zen_server/dashboard/assets/{page-C89bN6VV.js → page-BnUwQBeg.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-k-UXKVnV.js → page-BqQ6y8Hb.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BwAFqFCf.js +1 -0
- zenml/zen_server/dashboard/assets/page-BzlVs5tC.js +1 -0
- zenml/zen_server/dashboard/assets/{page-C3BbJ-5n.js → page-C11vPVkH.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-AnG2ilmi.js → page-CAKBSE9f.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CPe9nQSo.js +1 -0
- zenml/zen_server/dashboard/assets/page-D0Zt2-7X.js +1 -0
- zenml/zen_server/dashboard/assets/page-D2F0Rvak.js +1 -0
- zenml/zen_server/dashboard/assets/{page-2EzZ5aWS.js → page-D5GZlpKq.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CxoG4zme.js → page-DBNBYSwq.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DDvwWgKP.js +6 -0
- zenml/zen_server/dashboard/assets/page-DF9q7ySu.js +1 -0
- zenml/zen_server/dashboard/assets/page-DOzFoJuo.js +1 -0
- zenml/zen_server/dashboard/assets/page-DaHH2ZEF.js +1 -0
- zenml/zen_server/dashboard/assets/{page-B9ELcPAy.js → page-Dd-0y3SU.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Dy6HYsJr.js → page-DhNnHHmX.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CZ_3LB0U.js → page-DkJfgcDi.js} +1 -1
- zenml/zen_server/dashboard/assets/page-EhqRFAZc.js +1 -0
- zenml/zen_server/dashboard/assets/{page-nHAZvd76.js → page-NIWnUdVg.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DazwBcbq.js → page-kYlFrH53.js} +1 -1
- zenml/zen_server/dashboard/assets/page-ygCPGHAV.js +1 -0
- zenml/zen_server/dashboard/assets/{persist-BglceT_t.js → persist-C5RlwSq6.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-CMkLV2Cs.js → persist-DHGuHP2H.js} +1 -1
- zenml/zen_server/dashboard/assets/{service-DNKY_ZYd.js → service-Do7yitqe.js} +1 -1
- zenml/zen_server/dashboard/assets/{sharedSchema-BOmQa793.js → sharedSchema-i_9Y4WcA.js} +1 -1
- zenml/zen_server/dashboard/assets/stack-detail-query-omCumL7U.js +1 -0
- zenml/zen_server/dashboard/assets/update-server-settings-mutation-B4eE33z-.js +1 -0
- zenml/zen_server/dashboard/index.html +4 -4
- zenml/zen_server/deploy/daemon/daemon_zen_server.py +1 -1
- zenml/zen_server/deploy/deployment.py +1 -2
- zenml/zen_server/deploy/docker/docker_zen_server.py +1 -1
- zenml/zen_server/rbac/endpoint_utils.py +1 -2
- zenml/zen_server/routers/projects_endpoints.py +14 -3
- zenml/zen_server/routers/stack_deployment_endpoints.py +12 -4
- zenml/zen_server/utils.py +2 -86
- zenml/zen_stores/migrations/versions/0.80.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/288f4fb6e112_make_tags_user_scoped.py +2 -2
- zenml/zen_stores/migrations/versions/41b28cae31ce_make_artifacts_workspace_scoped.py +2 -2
- zenml/zen_stores/migrations/versions/f1d723fd723b_add_secret_private_attr.py +2 -2
- zenml/zen_stores/schemas/artifact_visualization_schemas.py +1 -1
- zenml/zen_stores/schemas/model_schemas.py +1 -1
- zenml/zen_stores/schemas/service_schemas.py +1 -1
- zenml/zen_stores/schemas/step_run_schemas.py +1 -1
- zenml/zen_stores/schemas/trigger_schemas.py +1 -1
- zenml/zen_stores/sql_zen_store.py +5 -0
- {zenml_nightly-0.75.0.dev20250318.dist-info → zenml_nightly-0.80.0.dev20250322.dist-info}/METADATA +3 -3
- {zenml_nightly-0.75.0.dev20250318.dist-info → zenml_nightly-0.80.0.dev20250322.dist-info}/RECORD +237 -235
- zenml/zen_server/dashboard/assets/@reactflow-DMaYqp8l.js +0 -17
- zenml/zen_server/dashboard/assets/CodeSnippet-D8ptwPjg.js +0 -9
- zenml/zen_server/dashboard/assets/ComponentIcon-gpMJ2Y2e.js +0 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-DHiK3Am-.js +0 -1
- zenml/zen_server/dashboard/assets/ProBadge-ypma7R8i.js +0 -1
- zenml/zen_server/dashboard/assets/ProviderIcon-DKN3Gdcg.js +0 -1
- zenml/zen_server/dashboard/assets/RunSelector-CYmRHGdm.js +0 -1
- zenml/zen_server/dashboard/assets/SecretTooltip-CHPWF0bu.js +0 -1
- zenml/zen_server/dashboard/assets/Tick-DgU4udUn.js +0 -1
- zenml/zen_server/dashboard/assets/configuration-form-BEwWCxqY.js +0 -1
- zenml/zen_server/dashboard/assets/flavor-select-C1pyy8gq.js +0 -1
- zenml/zen_server/dashboard/assets/login-mutation-7WFxPe10.js +0 -1
- zenml/zen_server/dashboard/assets/page-BKN4SYXY.js +0 -1
- zenml/zen_server/dashboard/assets/page-BNrOW_3T.js +0 -2
- zenml/zen_server/dashboard/assets/page-BX6ZrAVH.js +0 -1
- zenml/zen_server/dashboard/assets/page-BnOdORy3.js +0 -1
- zenml/zen_server/dashboard/assets/page-BtkfcEI7.js +0 -1
- zenml/zen_server/dashboard/assets/page-Bz_grLBY.js +0 -1
- zenml/zen_server/dashboard/assets/page-CCEwuGU4.js +0 -1
- zenml/zen_server/dashboard/assets/page-COAGXWJu.js +0 -1
- zenml/zen_server/dashboard/assets/page-CaibMa0l.js +0 -1
- zenml/zen_server/dashboard/assets/page-CskoTYOC.js +0 -1
- zenml/zen_server/dashboard/assets/page-Cyoe7AtN.js +0 -1
- zenml/zen_server/dashboard/assets/page-D03wm5f1.js +0 -1
- zenml/zen_server/dashboard/assets/page-D8UimvyP.js +0 -1
- zenml/zen_server/dashboard/assets/page-DEnmFyzi.js +0 -1
- zenml/zen_server/dashboard/assets/page-TiOZeeo0.js +0 -1
- zenml/zen_server/dashboard/assets/page-cveasWUr.js +0 -6
- zenml/zen_server/dashboard/assets/page-iTvxfhgZ.js +0 -1
- zenml/zen_server/dashboard/assets/page-niRD8Hqz.js +0 -1
- zenml/zen_server/dashboard/assets/stack-detail-query-CI_YMUx6.js +0 -1
- zenml/zen_server/dashboard/assets/transform-DKsRLKTv.js +0 -1
- zenml/zen_server/dashboard/assets/update-server-settings-mutation-CNYCc-FU.js +0 -1
- {zenml_nightly-0.75.0.dev20250318.dist-info → zenml_nightly-0.80.0.dev20250322.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.75.0.dev20250318.dist-info → zenml_nightly-0.80.0.dev20250322.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.75.0.dev20250318.dist-info → zenml_nightly-0.80.0.dev20250322.dist-info}/entry_points.txt +0 -0
@@ -13,9 +13,10 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""Utility functions for building manifests for k8s pods."""
|
15
15
|
|
16
|
+
import base64
|
16
17
|
import os
|
17
18
|
import sys
|
18
|
-
from typing import Any, Dict, List, Optional
|
19
|
+
from typing import Any, Dict, List, Mapping, Optional
|
19
20
|
|
20
21
|
from kubernetes import client as k8s_client
|
21
22
|
|
@@ -390,3 +391,34 @@ def build_namespace_manifest(namespace: str) -> Dict[str, Any]:
|
|
390
391
|
"name": namespace,
|
391
392
|
},
|
392
393
|
}
|
394
|
+
|
395
|
+
|
396
|
+
def build_secret_manifest(
|
397
|
+
name: str,
|
398
|
+
data: Mapping[str, Optional[str]],
|
399
|
+
secret_type: str = "Opaque",
|
400
|
+
) -> Dict[str, Any]:
|
401
|
+
"""Builds a Kubernetes secret manifest.
|
402
|
+
|
403
|
+
Args:
|
404
|
+
name: Name of the secret.
|
405
|
+
data: The secret data.
|
406
|
+
secret_type: The secret type.
|
407
|
+
|
408
|
+
Returns:
|
409
|
+
The secret manifest.
|
410
|
+
"""
|
411
|
+
encoded_data = {
|
412
|
+
key: base64.b64encode(value.encode()).decode() if value else None
|
413
|
+
for key, value in data.items()
|
414
|
+
}
|
415
|
+
|
416
|
+
return {
|
417
|
+
"apiVersion": "v1",
|
418
|
+
"kind": "Secret",
|
419
|
+
"metadata": {
|
420
|
+
"name": name,
|
421
|
+
},
|
422
|
+
"type": secret_type,
|
423
|
+
"data": encoded_data,
|
424
|
+
}
|
@@ -58,7 +58,7 @@ class MlflowIntegration(Integration):
|
|
58
58
|
from zenml.integrations.pandas import PandasIntegration
|
59
59
|
|
60
60
|
reqs = [
|
61
|
-
"mlflow>=2.1.1,<
|
61
|
+
"mlflow>=2.1.1,<2.21.0",
|
62
62
|
# TODO: remove this requirement once rapidjson is fixed
|
63
63
|
"python-rapidjson<1.15",
|
64
64
|
# When you do:
|
@@ -111,5 +111,3 @@ class MlflowIntegration(Integration):
|
|
111
111
|
MLFlowModelRegistryFlavor,
|
112
112
|
]
|
113
113
|
|
114
|
-
|
115
|
-
MlflowIntegration.check_installation()
|
@@ -30,6 +30,7 @@ from zenml.integrations.mlflow.experiment_trackers.mlflow_experiment_tracker imp
|
|
30
30
|
MLFlowExperimentTracker,
|
31
31
|
)
|
32
32
|
from zenml.logger import get_logger
|
33
|
+
from zenml.models.v2.misc.service import ServiceType
|
33
34
|
from zenml.services import (
|
34
35
|
HTTPEndpointHealthMonitor,
|
35
36
|
HTTPEndpointHealthMonitorConfig,
|
@@ -38,7 +39,6 @@ from zenml.services import (
|
|
38
39
|
LocalDaemonServiceEndpoint,
|
39
40
|
LocalDaemonServiceEndpointConfig,
|
40
41
|
ServiceEndpointProtocol,
|
41
|
-
ServiceType,
|
42
42
|
)
|
43
43
|
from zenml.services.service import BaseDeploymentService
|
44
44
|
|
zenml/integrations/registry.py
CHANGED
@@ -13,6 +13,8 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""Implementation of a registry to track ZenML integrations."""
|
15
15
|
|
16
|
+
import importlib
|
17
|
+
import os
|
16
18
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Type
|
17
19
|
|
18
20
|
from zenml.exceptions import IntegrationError
|
@@ -30,6 +32,7 @@ class IntegrationRegistry(object):
|
|
30
32
|
def __init__(self) -> None:
|
31
33
|
"""Initializing the integration registry."""
|
32
34
|
self._integrations: Dict[str, Type["Integration"]] = {}
|
35
|
+
self._initialized = False
|
33
36
|
|
34
37
|
@property
|
35
38
|
def integrations(self) -> Dict[str, Type["Integration"]]:
|
@@ -38,6 +41,7 @@ class IntegrationRegistry(object):
|
|
38
41
|
Returns:
|
39
42
|
A dict of integration key to type of `Integration`.
|
40
43
|
"""
|
44
|
+
self._initialize()
|
41
45
|
return self._integrations
|
42
46
|
|
43
47
|
@integrations.setter
|
@@ -68,8 +72,33 @@ class IntegrationRegistry(object):
|
|
68
72
|
"""
|
69
73
|
self._integrations[key] = type_
|
70
74
|
|
75
|
+
def _initialize(self) -> None:
|
76
|
+
"""Method to register all integrations."""
|
77
|
+
if self._initialized:
|
78
|
+
return
|
79
|
+
self._initialized = True
|
80
|
+
|
81
|
+
# Load all submodules in the integrations module
|
82
|
+
integrations_dir = os.path.dirname(__file__)
|
83
|
+
for file in os.listdir(integrations_dir):
|
84
|
+
full_path = os.path.join(integrations_dir, file)
|
85
|
+
# Skip anything that isn't a directory
|
86
|
+
if not os.path.isdir(full_path):
|
87
|
+
continue
|
88
|
+
# Skip anything that doesn't have a __init__.py file
|
89
|
+
if not os.path.exists(os.path.join(full_path, "__init__.py")):
|
90
|
+
continue
|
91
|
+
# Import the module
|
92
|
+
module_path = f"zenml.integrations.{file}"
|
93
|
+
try:
|
94
|
+
importlib.import_module(module_path)
|
95
|
+
except ImportError:
|
96
|
+
logger.exception(f"Failed to import module `{module_path}`.")
|
97
|
+
continue
|
98
|
+
|
71
99
|
def activate_integrations(self) -> None:
|
72
100
|
"""Method to activate the integrations with are registered in the registry."""
|
101
|
+
self._initialize()
|
73
102
|
for name, integration in self._integrations.items():
|
74
103
|
if integration.check_installation():
|
75
104
|
logger.debug(f"Activating integration `{name}`...")
|
@@ -85,6 +114,7 @@ class IntegrationRegistry(object):
|
|
85
114
|
Returns:
|
86
115
|
A list of all possible integrations.
|
87
116
|
"""
|
117
|
+
self._initialize()
|
88
118
|
return [name for name in self._integrations]
|
89
119
|
|
90
120
|
def select_integration_requirements(
|
@@ -104,6 +134,7 @@ class IntegrationRegistry(object):
|
|
104
134
|
Raises:
|
105
135
|
KeyError: If the integration is not found.
|
106
136
|
"""
|
137
|
+
self._initialize()
|
107
138
|
if integration_name:
|
108
139
|
if integration_name in self.list_integration_names:
|
109
140
|
return self._integrations[integration_name].get_requirements(
|
@@ -141,6 +172,7 @@ class IntegrationRegistry(object):
|
|
141
172
|
Raises:
|
142
173
|
KeyError: If the integration is not found.
|
143
174
|
"""
|
175
|
+
self._initialize()
|
144
176
|
if integration_name:
|
145
177
|
if integration_name in self.list_integration_names:
|
146
178
|
return self._integrations[
|
@@ -173,6 +205,7 @@ class IntegrationRegistry(object):
|
|
173
205
|
Raises:
|
174
206
|
KeyError: If the integration is not found.
|
175
207
|
"""
|
208
|
+
self._initialize()
|
176
209
|
if integration_name in self.list_integration_names:
|
177
210
|
return self._integrations[integration_name].check_installation()
|
178
211
|
elif not integration_name:
|
@@ -194,6 +227,7 @@ class IntegrationRegistry(object):
|
|
194
227
|
Returns:
|
195
228
|
List of installed integrations.
|
196
229
|
"""
|
230
|
+
self._initialize()
|
197
231
|
return [
|
198
232
|
name
|
199
233
|
for name, integration in integration_registry.integrations.items()
|
@@ -22,6 +22,7 @@ import requests
|
|
22
22
|
from pydantic import Field, ValidationError
|
23
23
|
|
24
24
|
from zenml import __version__
|
25
|
+
from zenml.enums import ServiceState
|
25
26
|
from zenml.integrations.seldon.seldon_client import (
|
26
27
|
SeldonClient,
|
27
28
|
SeldonDeployment,
|
@@ -30,9 +31,9 @@ from zenml.integrations.seldon.seldon_client import (
|
|
30
31
|
SeldonResourceRequirements,
|
31
32
|
)
|
32
33
|
from zenml.logger import get_logger
|
34
|
+
from zenml.models.v2.misc.service import ServiceType
|
33
35
|
from zenml.services.service import BaseDeploymentService, ServiceConfig
|
34
|
-
from zenml.services.service_status import
|
35
|
-
from zenml.services.service_type import ServiceType
|
36
|
+
from zenml.services.service_status import ServiceStatus
|
36
37
|
|
37
38
|
logger = get_logger(__name__)
|
38
39
|
|
@@ -318,30 +318,36 @@ class SkypilotBaseOrchestrator(ContainerizedOrchestrator):
|
|
318
318
|
disk_tier=settings.disk_tier,
|
319
319
|
)
|
320
320
|
)
|
321
|
-
#
|
321
|
+
# Do not detach run if logs are being streamed
|
322
|
+
# Otherwise, the logs will not be streamed after the task is submitted
|
323
|
+
# Could also be a parameter in the settings to control this behavior
|
324
|
+
detach_run = not settings.stream_logs
|
325
|
+
|
326
|
+
launch_new_cluster = True
|
322
327
|
if settings.cluster_name:
|
323
|
-
sky.
|
324
|
-
|
325
|
-
settings.cluster_name,
|
326
|
-
down=down,
|
327
|
-
stream_logs=settings.stream_logs,
|
328
|
-
backend=None,
|
329
|
-
detach_run=True,
|
328
|
+
cluster_info = sky.status(
|
329
|
+
refresh=True, cluster_names=settings.cluster_name
|
330
330
|
)
|
331
|
+
if cluster_info:
|
332
|
+
logger.info(
|
333
|
+
f"Found existing cluster {settings.cluster_name}. Reusing..."
|
334
|
+
)
|
335
|
+
launch_new_cluster = False
|
336
|
+
|
337
|
+
else:
|
338
|
+
logger.info(
|
339
|
+
f"Cluster {settings.cluster_name} not found. Launching a new one..."
|
340
|
+
)
|
341
|
+
cluster_name = settings.cluster_name
|
331
342
|
else:
|
332
|
-
# Find existing cluster
|
333
|
-
for i in sky.status(refresh=True):
|
334
|
-
if isinstance(
|
335
|
-
i["handle"].launched_resources.cloud, type(self.cloud)
|
336
|
-
):
|
337
|
-
cluster_name = i["handle"].cluster_name
|
338
|
-
logger.info(
|
339
|
-
f"Found existing cluster {cluster_name}. Reusing..."
|
340
|
-
)
|
341
343
|
cluster_name = self.sanitize_cluster_name(
|
342
344
|
f"{orchestrator_run_name}"
|
343
345
|
)
|
344
|
-
|
346
|
+
logger.info(
|
347
|
+
f"No cluster name provided. Launching a new cluster with name {cluster_name}..."
|
348
|
+
)
|
349
|
+
|
350
|
+
if launch_new_cluster:
|
345
351
|
sky.launch(
|
346
352
|
task,
|
347
353
|
cluster_name,
|
@@ -349,7 +355,26 @@ class SkypilotBaseOrchestrator(ContainerizedOrchestrator):
|
|
349
355
|
idle_minutes_to_autostop=idle_minutes_to_autostop,
|
350
356
|
down=down,
|
351
357
|
stream_logs=settings.stream_logs,
|
358
|
+
backend=None,
|
352
359
|
detach_setup=True,
|
360
|
+
detach_run=detach_run,
|
361
|
+
)
|
362
|
+
else:
|
363
|
+
# Make sure the cluster is up -
|
364
|
+
# If the cluster is already up, this will not do anything
|
365
|
+
sky.start(
|
366
|
+
settings.cluster_name,
|
367
|
+
down=down,
|
368
|
+
idle_minutes_to_autostop=idle_minutes_to_autostop,
|
369
|
+
retry_until_up=settings.retry_until_up,
|
370
|
+
)
|
371
|
+
sky.exec(
|
372
|
+
task,
|
373
|
+
settings.cluster_name,
|
374
|
+
down=down,
|
375
|
+
stream_logs=settings.stream_logs,
|
376
|
+
backend=None,
|
377
|
+
detach_run=detach_run,
|
353
378
|
)
|
354
379
|
|
355
380
|
except Exception as e:
|
@@ -32,7 +32,7 @@ class SkypilotAWSIntegration(Integration):
|
|
32
32
|
|
33
33
|
NAME = SKYPILOT_AWS
|
34
34
|
# all 0.6.x versions of skypilot[aws] are compatible
|
35
|
-
REQUIREMENTS = ["skypilot[aws]~=0.
|
35
|
+
REQUIREMENTS = ["skypilot[aws]~=0.8.0"]
|
36
36
|
APT_PACKAGES = ["openssh-client", "rsync"]
|
37
37
|
|
38
38
|
@classmethod
|
@@ -48,5 +48,3 @@ class SkypilotAWSIntegration(Integration):
|
|
48
48
|
|
49
49
|
return [SkypilotAWSOrchestratorFlavor]
|
50
50
|
|
51
|
-
|
52
|
-
SkypilotAWSIntegration.check_installation()
|
@@ -31,7 +31,7 @@ class SkypilotAzureIntegration(Integration):
|
|
31
31
|
"""Definition of Skypilot (Azure) Integration for ZenML."""
|
32
32
|
|
33
33
|
NAME = SKYPILOT_AZURE
|
34
|
-
REQUIREMENTS = ["skypilot[azure]
|
34
|
+
REQUIREMENTS = ["skypilot[azure]~=0.8.0"]
|
35
35
|
APT_PACKAGES = ["openssh-client", "rsync"]
|
36
36
|
|
37
37
|
@classmethod
|
@@ -47,4 +47,3 @@ class SkypilotAzureIntegration(Integration):
|
|
47
47
|
|
48
48
|
return [SkypilotAzureOrchestratorFlavor]
|
49
49
|
|
50
|
-
SkypilotAzureIntegration.check_installation()
|
@@ -31,7 +31,7 @@ class SkypilotGCPIntegration(Integration):
|
|
31
31
|
"""Definition of Skypilot (GCP) Integration for ZenML."""
|
32
32
|
|
33
33
|
NAME = SKYPILOT_GCP
|
34
|
-
REQUIREMENTS = ["skypilot[gcp]~=0.
|
34
|
+
REQUIREMENTS = ["skypilot[gcp]~=0.8.0"]
|
35
35
|
APT_PACKAGES = ["openssh-client", "rsync"]
|
36
36
|
|
37
37
|
@classmethod
|
@@ -46,5 +46,3 @@ class SkypilotGCPIntegration(Integration):
|
|
46
46
|
)
|
47
47
|
|
48
48
|
return [SkypilotGCPOrchestratorFlavor]
|
49
|
-
|
50
|
-
SkypilotGCPIntegration.check_installation()
|
@@ -32,7 +32,7 @@ class SkypilotKubernetesIntegration(Integration):
|
|
32
32
|
|
33
33
|
NAME = SKYPILOT_KUBERNETES
|
34
34
|
# all 0.6.x versions of skypilot[kubernetes] are compatible
|
35
|
-
REQUIREMENTS = ["skypilot[kubernetes]~=0.
|
35
|
+
REQUIREMENTS = ["skypilot[kubernetes]~=0.8.0"]
|
36
36
|
APT_PACKAGES = ["openssh-client", "rsync"]
|
37
37
|
|
38
38
|
@classmethod
|
@@ -48,5 +48,3 @@ class SkypilotKubernetesIntegration(Integration):
|
|
48
48
|
|
49
49
|
return [SkypilotKubernetesOrchestratorFlavor]
|
50
50
|
|
51
|
-
|
52
|
-
SkypilotKubernetesIntegration.check_installation()
|
@@ -31,7 +31,7 @@ class SkypilotLambdaIntegration(Integration):
|
|
31
31
|
"""Definition of Skypilot Lambda Integration for ZenML."""
|
32
32
|
|
33
33
|
NAME = SKYPILOT_LAMBDA
|
34
|
-
REQUIREMENTS = ["skypilot[lambda]~=0.
|
34
|
+
REQUIREMENTS = ["skypilot[lambda]~=0.8.0"]
|
35
35
|
|
36
36
|
@classmethod
|
37
37
|
def flavors(cls) -> List[Type[Flavor]]:
|
@@ -46,5 +46,3 @@ class SkypilotLambdaIntegration(Integration):
|
|
46
46
|
|
47
47
|
return [SkypilotLambdaOrchestratorFlavor]
|
48
48
|
|
49
|
-
|
50
|
-
SkypilotLambdaIntegration.check_installation()
|
@@ -19,6 +19,7 @@ from typing import Any, Dict, Union
|
|
19
19
|
from tensorboard import default, program # type: ignore [import-untyped]
|
20
20
|
|
21
21
|
from zenml.logger import get_logger
|
22
|
+
from zenml.models.v2.misc.service import ServiceType
|
22
23
|
from zenml.services import (
|
23
24
|
HTTPEndpointHealthMonitor,
|
24
25
|
HTTPEndpointHealthMonitorConfig,
|
@@ -27,7 +28,6 @@ from zenml.services import (
|
|
27
28
|
LocalDaemonServiceEndpoint,
|
28
29
|
LocalDaemonServiceEndpointConfig,
|
29
30
|
ServiceEndpointProtocol,
|
30
|
-
ServiceType,
|
31
31
|
)
|
32
32
|
|
33
33
|
logger = get_logger(__name__)
|
@@ -19,6 +19,7 @@ from typing import Any, List, Optional, Union
|
|
19
19
|
|
20
20
|
from zenml.constants import DEFAULT_LOCAL_SERVICE_IP_ADDRESS
|
21
21
|
from zenml.logger import get_logger
|
22
|
+
from zenml.models.v2.misc.service import ServiceType
|
22
23
|
from zenml.services import (
|
23
24
|
HTTPEndpointHealthMonitor,
|
24
25
|
HTTPEndpointHealthMonitorConfig,
|
@@ -27,7 +28,6 @@ from zenml.services import (
|
|
27
28
|
LocalDaemonServiceEndpoint,
|
28
29
|
LocalDaemonServiceEndpointConfig,
|
29
30
|
ServiceEndpointProtocol,
|
30
|
-
ServiceType,
|
31
31
|
)
|
32
32
|
from zenml.services.service import BaseDeploymentService
|
33
33
|
|
zenml/login/credentials.py
CHANGED
@@ -20,11 +20,11 @@ from uuid import UUID
|
|
20
20
|
|
21
21
|
from pydantic import BaseModel, ConfigDict
|
22
22
|
|
23
|
+
from zenml.enums import ServiceState
|
23
24
|
from zenml.login.pro.constants import ZENML_PRO_API_URL, ZENML_PRO_URL
|
24
25
|
from zenml.login.pro.workspace.models import WorkspaceRead, WorkspaceStatus
|
25
26
|
from zenml.models import ServerModel
|
26
27
|
from zenml.models.v2.misc.server_models import ServerDeploymentType
|
27
|
-
from zenml.services.service_status import ServiceState
|
28
28
|
from zenml.utils.enum_utils import StrEnum
|
29
29
|
from zenml.utils.string_utils import get_human_readable_time
|
30
30
|
from zenml.utils.time_utils import to_local_tz, utc_now
|
zenml/materializers/__init__.py
CHANGED
@@ -33,6 +33,7 @@ from zenml.materializers.pydantic_materializer import PydanticMaterializer
|
|
33
33
|
from zenml.materializers.service_materializer import ServiceMaterializer
|
34
34
|
from zenml.materializers.uuid_materializer import UUIDMaterializer
|
35
35
|
|
36
|
+
|
36
37
|
__all__ = [
|
37
38
|
"BuiltInContainerMaterializer",
|
38
39
|
"BuiltInMaterializer",
|
@@ -30,9 +30,9 @@ from uuid import UUID
|
|
30
30
|
from zenml.client import Client
|
31
31
|
from zenml.enums import StackComponentType
|
32
32
|
from zenml.logger import get_logger
|
33
|
+
from zenml.models.v2.misc.service import ServiceType
|
33
34
|
from zenml.services import BaseService, ServiceConfig
|
34
35
|
from zenml.services.service import BaseDeploymentService
|
35
|
-
from zenml.services.service_type import ServiceType
|
36
36
|
from zenml.stack import StackComponent
|
37
37
|
from zenml.stack.flavor import Flavor
|
38
38
|
from zenml.stack.stack_component import StackComponentConfig
|