zenml-nightly 0.55.0.dev20240124__py3-none-any.whl → 0.72.0.dev20250116__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 +9 -12
- zenml/actions/__init__.py +14 -0
- zenml/actions/base_action.py +682 -0
- zenml/actions/pipeline_run/__init__.py +0 -0
- zenml/actions/pipeline_run/pipeline_run_action.py +223 -0
- zenml/analytics/context.py +70 -15
- zenml/analytics/enums.py +21 -17
- zenml/analytics/models.py +1 -0
- zenml/analytics/utils.py +19 -7
- zenml/annotators/base_annotator.py +4 -3
- zenml/artifact_stores/base_artifact_store.py +155 -72
- zenml/artifact_stores/local_artifact_store.py +3 -2
- zenml/artifacts/artifact_config.py +67 -58
- zenml/artifacts/external_artifact.py +24 -39
- zenml/artifacts/external_artifact_config.py +27 -37
- zenml/artifacts/preexisting_data_materializer.py +90 -0
- zenml/artifacts/unmaterialized_artifact.py +2 -12
- zenml/artifacts/utils.py +521 -220
- zenml/cli/__init__.py +1511 -456
- zenml/cli/annotator.py +48 -14
- zenml/cli/artifact.py +22 -4
- zenml/cli/authorized_device.py +1 -0
- zenml/cli/base.py +185 -22
- zenml/cli/code_repository.py +1 -0
- zenml/cli/formatter.py +1 -1
- zenml/cli/integration.py +119 -24
- zenml/cli/login.py +1053 -0
- zenml/cli/model.py +42 -15
- zenml/cli/model_registry.py +1 -2
- zenml/cli/pipeline.py +168 -82
- zenml/cli/secret.py +1 -2
- zenml/cli/served_model.py +56 -26
- zenml/cli/server.py +486 -619
- zenml/cli/service_accounts.py +55 -14
- zenml/cli/service_connectors.py +97 -6
- zenml/cli/stack.py +821 -531
- zenml/cli/stack_components.py +15 -598
- zenml/cli/tag.py +1 -0
- zenml/cli/text_utils.py +36 -2
- zenml/cli/user_management.py +204 -6
- zenml/cli/utils.py +411 -290
- zenml/client.py +1742 -298
- zenml/client_lazy_loader.py +224 -0
- zenml/code_repositories/base_code_repository.py +5 -4
- zenml/code_repositories/git/local_git_repository_context.py +1 -0
- zenml/code_repositories/local_repository_context.py +1 -0
- zenml/config/__init__.py +2 -0
- zenml/config/base_settings.py +6 -6
- zenml/config/build_configuration.py +43 -17
- zenml/config/compiler.py +82 -49
- zenml/config/docker_settings.py +139 -83
- zenml/config/global_config.py +260 -234
- zenml/config/pipeline_configurations.py +32 -11
- zenml/config/pipeline_run_configuration.py +15 -3
- zenml/config/pipeline_spec.py +6 -6
- zenml/config/resource_settings.py +8 -9
- zenml/config/retry_config.py +27 -0
- zenml/config/schedule.py +27 -18
- zenml/config/secret_reference_mixin.py +8 -4
- zenml/config/secrets_store_config.py +16 -24
- zenml/config/server_config.py +434 -51
- zenml/config/settings_resolver.py +2 -1
- zenml/config/source.py +97 -31
- zenml/config/step_configurations.py +83 -39
- zenml/config/step_run_info.py +3 -0
- zenml/config/store_config.py +20 -54
- zenml/config/strict_base_model.py +2 -6
- zenml/console.py +0 -1
- zenml/constants.py +232 -74
- zenml/container_registries/azure_container_registry.py +1 -0
- zenml/container_registries/base_container_registry.py +7 -3
- zenml/container_registries/default_container_registry.py +4 -3
- zenml/container_registries/dockerhub_container_registry.py +1 -0
- zenml/container_registries/gcp_container_registry.py +1 -0
- zenml/container_registries/github_container_registry.py +2 -10
- zenml/data_validators/base_data_validator.py +2 -2
- zenml/entrypoints/base_entrypoint_configuration.py +76 -17
- zenml/entrypoints/pipeline_entrypoint_configuration.py +1 -0
- zenml/entrypoints/step_entrypoint_configuration.py +21 -2
- zenml/enums.py +91 -9
- zenml/environment.py +52 -319
- zenml/{steps/base_parameters.py → event_hub/__init__.py} +5 -7
- zenml/event_hub/base_event_hub.py +196 -0
- zenml/event_hub/event_hub.py +181 -0
- zenml/event_sources/__init__.py +14 -0
- zenml/{lineage_graph/edge.py → event_sources/base_event.py} +5 -7
- zenml/event_sources/base_event_source.py +695 -0
- zenml/event_sources/webhooks/__init__.py +14 -0
- zenml/event_sources/webhooks/base_webhook_event_source.py +231 -0
- zenml/exceptions.py +40 -41
- zenml/feature_stores/base_feature_store.py +4 -6
- zenml/hooks/hook_validators.py +3 -11
- zenml/image_builders/base_image_builder.py +5 -2
- zenml/image_builders/build_context.py +24 -80
- zenml/image_builders/local_image_builder.py +14 -6
- zenml/integrations/__init__.py +16 -4
- zenml/integrations/airflow/__init__.py +3 -5
- zenml/integrations/airflow/flavors/airflow_orchestrator_flavor.py +15 -7
- zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +15 -252
- zenml/integrations/airflow/orchestrators/dag_generator.py +5 -3
- zenml/integrations/argilla/__init__.py +46 -0
- zenml/integrations/argilla/annotators/__init__.py +20 -0
- zenml/integrations/argilla/annotators/argilla_annotator.py +443 -0
- zenml/{post_execution → integrations/argilla/flavors}/__init__.py +9 -13
- zenml/integrations/argilla/flavors/argilla_annotator_flavor.py +150 -0
- zenml/integrations/aws/__init__.py +7 -3
- zenml/integrations/aws/container_registries/aws_container_registry.py +44 -8
- zenml/integrations/aws/flavors/__init__.py +6 -0
- zenml/integrations/aws/flavors/aws_container_registry_flavor.py +3 -2
- zenml/integrations/aws/flavors/aws_image_builder_flavor.py +146 -0
- zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py +104 -16
- zenml/integrations/aws/flavors/sagemaker_step_operator_flavor.py +6 -2
- 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 +421 -133
- zenml/integrations/aws/service_connectors/aws_service_connector.py +175 -48
- zenml/integrations/aws/step_operators/sagemaker_step_operator.py +1 -1
- zenml/integrations/azure/__init__.py +14 -5
- zenml/integrations/azure/azureml_utils.py +201 -0
- zenml/integrations/azure/flavors/__init__.py +11 -0
- zenml/integrations/azure/flavors/azureml.py +139 -0
- zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +166 -0
- zenml/integrations/azure/flavors/azureml_step_operator_flavor.py +71 -18
- zenml/integrations/azure/orchestrators/__init__.py +19 -0
- zenml/integrations/azure/orchestrators/azureml_orchestrator.py +583 -0
- zenml/integrations/azure/orchestrators/azureml_orchestrator_entrypoint_config.py +82 -0
- zenml/integrations/azure/service_connectors/azure_service_connector.py +15 -6
- zenml/integrations/azure/step_operators/azureml_step_operator.py +78 -173
- zenml/integrations/bentoml/__init__.py +1 -1
- zenml/integrations/bentoml/constants.py +1 -1
- zenml/integrations/bentoml/materializers/bentoml_bento_materializer.py +19 -31
- zenml/integrations/bentoml/model_deployers/bentoml_model_deployer.py +128 -239
- zenml/integrations/bentoml/services/__init__.py +15 -4
- zenml/integrations/bentoml/services/bentoml_container_deployment.py +399 -0
- zenml/integrations/bentoml/services/{bentoml_deployment.py → bentoml_local_deployment.py} +85 -43
- zenml/integrations/bentoml/services/deployment_type.py +23 -0
- zenml/integrations/bentoml/steps/bento_builder.py +2 -0
- zenml/integrations/bentoml/steps/bentoml_deployer.py +97 -47
- zenml/integrations/bitbucket/__init__.py +42 -0
- zenml/integrations/bitbucket/plugins/__init__.py +20 -0
- zenml/integrations/bitbucket/plugins/bitbucket_webhook_event_source_flavor.py +43 -0
- zenml/integrations/bitbucket/plugins/event_sources/__init__.py +0 -0
- zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +486 -0
- zenml/integrations/comet/__init__.py +49 -0
- zenml/integrations/{kserve/services → comet/experiment_trackers}/__init__.py +5 -6
- zenml/integrations/comet/experiment_trackers/comet_experiment_tracker.py +175 -0
- zenml/integrations/comet/flavors/__init__.py +24 -0
- zenml/integrations/comet/flavors/comet_experiment_tracker_flavor.py +129 -0
- zenml/integrations/constants.py +14 -2
- zenml/integrations/databricks/__init__.py +70 -0
- zenml/{lineage_graph → integrations/databricks/flavors}/__init__.py +14 -18
- zenml/integrations/databricks/flavors/databricks_model_deployer_flavor.py +118 -0
- zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +174 -0
- zenml/integrations/{kserve → databricks}/model_deployers/__init__.py +5 -5
- 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 +501 -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/{gcp/orchestrators/vertex_scheduler → databricks/utils}/__init__.py +2 -2
- zenml/integrations/databricks/utils/databricks_utils.py +87 -0
- zenml/integrations/deepchecks/__init__.py +30 -10
- zenml/integrations/deepchecks/data_validators/deepchecks_data_validator.py +59 -18
- zenml/integrations/deepchecks/materializers/deepchecks_dataset_materializer.py +3 -1
- zenml/integrations/deepchecks/materializers/deepchecks_results_materializer.py +3 -3
- zenml/integrations/deepchecks/validation_checks.py +62 -35
- zenml/integrations/discord/__init__.py +1 -0
- zenml/integrations/discord/steps/discord_alerter_ask_step.py +1 -0
- zenml/integrations/discord/steps/discord_alerter_post_step.py +1 -0
- zenml/integrations/evidently/__init__.py +22 -4
- zenml/integrations/evidently/column_mapping.py +11 -3
- zenml/integrations/evidently/data_validators/evidently_data_validator.py +24 -6
- zenml/integrations/evidently/metrics.py +7 -8
- zenml/integrations/evidently/tests.py +7 -8
- zenml/integrations/facets/__init__.py +22 -5
- zenml/integrations/facets/models.py +2 -7
- zenml/integrations/feast/__init__.py +19 -3
- zenml/integrations/feast/feature_stores/feast_feature_store.py +13 -32
- zenml/integrations/gcp/__init__.py +6 -6
- zenml/integrations/gcp/artifact_stores/gcp_artifact_store.py +6 -0
- zenml/integrations/gcp/flavors/gcp_artifact_store_flavor.py +1 -0
- zenml/integrations/gcp/flavors/vertex_orchestrator_flavor.py +24 -2
- zenml/integrations/gcp/flavors/vertex_step_operator_flavor.py +14 -1
- zenml/integrations/gcp/google_credentials_mixin.py +1 -1
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +519 -296
- zenml/integrations/gcp/service_connectors/gcp_service_connector.py +788 -113
- zenml/integrations/gcp/step_operators/vertex_step_operator.py +9 -1
- zenml/integrations/github/__init__.py +15 -0
- zenml/integrations/github/code_repositories/github_code_repository.py +3 -2
- zenml/integrations/github/plugins/__init__.py +19 -0
- zenml/integrations/github/plugins/event_sources/__init__.py +0 -0
- zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py +510 -0
- zenml/integrations/github/plugins/github_webhook_event_source_flavor.py +43 -0
- zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py +7 -1
- zenml/integrations/great_expectations/__init__.py +22 -10
- zenml/integrations/great_expectations/data_validators/ge_data_validator.py +61 -57
- zenml/integrations/great_expectations/flavors/great_expectations_data_validator_flavor.py +35 -2
- zenml/integrations/great_expectations/ge_store_backend.py +24 -11
- zenml/integrations/great_expectations/materializers/ge_materializer.py +9 -9
- zenml/integrations/great_expectations/utils.py +5 -5
- zenml/integrations/huggingface/__init__.py +52 -1
- zenml/integrations/huggingface/flavors/__init__.py +26 -0
- zenml/integrations/huggingface/flavors/huggingface_model_deployer_flavor.py +130 -0
- zenml/integrations/huggingface/materializers/__init__.py +3 -0
- zenml/integrations/huggingface/materializers/huggingface_datasets_materializer.py +102 -19
- zenml/integrations/huggingface/materializers/huggingface_pt_model_materializer.py +18 -19
- zenml/integrations/huggingface/materializers/huggingface_t5_materializer.py +104 -0
- zenml/integrations/huggingface/materializers/huggingface_tf_model_materializer.py +18 -19
- zenml/integrations/huggingface/materializers/huggingface_tokenizer_materializer.py +13 -15
- zenml/integrations/huggingface/model_deployers/__init__.py +20 -0
- zenml/integrations/huggingface/model_deployers/huggingface_model_deployer.py +247 -0
- zenml/integrations/huggingface/services/__init__.py +19 -0
- zenml/integrations/huggingface/services/huggingface_deployment.py +292 -0
- zenml/integrations/huggingface/steps/__init__.py +21 -0
- zenml/integrations/huggingface/steps/accelerate_runner.py +166 -0
- zenml/integrations/huggingface/steps/huggingface_deployer.py +110 -0
- zenml/integrations/hyperai/__init__.py +53 -0
- zenml/integrations/hyperai/flavors/__init__.py +20 -0
- zenml/integrations/hyperai/flavors/hyperai_orchestrator_flavor.py +170 -0
- zenml/integrations/hyperai/orchestrators/__init__.py +21 -0
- zenml/integrations/hyperai/orchestrators/hyperai_orchestrator.py +510 -0
- zenml/integrations/hyperai/service_connectors/__init__.py +20 -0
- zenml/integrations/hyperai/service_connectors/hyperai_service_connector.py +375 -0
- zenml/integrations/integration.py +101 -47
- zenml/integrations/kaniko/flavors/kaniko_image_builder_flavor.py +6 -44
- zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +9 -6
- zenml/integrations/kubeflow/__init__.py +4 -1
- zenml/integrations/kubeflow/flavors/kubeflow_orchestrator_flavor.py +67 -82
- zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py +306 -248
- zenml/integrations/kubernetes/__init__.py +6 -3
- zenml/integrations/kubernetes/flavors/__init__.py +8 -0
- zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +43 -2
- zenml/integrations/kubernetes/flavors/kubernetes_step_operator_flavor.py +166 -0
- zenml/integrations/kubernetes/orchestrators/kube_utils.py +67 -12
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +89 -21
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +39 -7
- zenml/integrations/kubernetes/orchestrators/manifest_utils.py +42 -19
- zenml/integrations/kubernetes/pod_settings.py +21 -31
- zenml/integrations/kubernetes/serialization_utils.py +3 -3
- zenml/integrations/kubernetes/service_connectors/kubernetes_service_connector.py +14 -11
- zenml/integrations/kubernetes/step_operators/__init__.py +22 -0
- zenml/integrations/kubernetes/step_operators/kubernetes_step_operator.py +236 -0
- zenml/integrations/label_studio/__init__.py +1 -3
- zenml/integrations/label_studio/annotators/label_studio_annotator.py +46 -14
- zenml/integrations/label_studio/flavors/__init__.py +2 -0
- zenml/integrations/label_studio/flavors/label_studio_annotator_flavor.py +20 -5
- zenml/integrations/langchain/__init__.py +7 -1
- zenml/integrations/langchain/materializers/document_materializer.py +44 -8
- zenml/integrations/langchain/materializers/openai_embedding_materializer.py +28 -2
- zenml/integrations/lightgbm/__init__.py +1 -0
- zenml/integrations/lightgbm/materializers/lightgbm_booster_materializer.py +8 -15
- zenml/integrations/lightgbm/materializers/lightgbm_dataset_materializer.py +11 -16
- zenml/integrations/lightning/__init__.py +48 -0
- zenml/integrations/lightning/flavors/__init__.py +23 -0
- zenml/integrations/lightning/flavors/lightning_orchestrator_flavor.py +168 -0
- zenml/integrations/lightning/orchestrators/__init__.py +23 -0
- zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +617 -0
- zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +303 -0
- zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint_configuration.py +77 -0
- zenml/integrations/lightning/orchestrators/utils.py +67 -0
- zenml/integrations/mlflow/__init__.py +55 -8
- zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +31 -13
- zenml/integrations/mlflow/flavors/mlflow_experiment_tracker_flavor.py +32 -37
- zenml/integrations/mlflow/model_deployers/mlflow_model_deployer.py +42 -233
- zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +42 -49
- zenml/integrations/mlflow/services/mlflow_deployment.py +30 -5
- zenml/integrations/mlflow/steps/mlflow_deployer.py +25 -27
- zenml/integrations/mlflow/steps/mlflow_registry.py +3 -1
- 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 +71 -55
- zenml/integrations/neptune/flavors/neptune_experiment_tracker_flavor.py +1 -1
- zenml/integrations/neural_prophet/__init__.py +6 -1
- zenml/integrations/numpy/__init__.py +32 -0
- zenml/integrations/{kserve/constants.py → numpy/materializers/__init__.py} +5 -4
- zenml/integrations/numpy/materializers/numpy_materializer.py +246 -0
- zenml/integrations/openai/__init__.py +1 -1
- zenml/integrations/openai/hooks/open_ai_failure_hook.py +39 -14
- zenml/{steps/external_artifact.py → integrations/pandas/__init__.py} +17 -11
- zenml/integrations/{kserve/custom_deployer → pandas/materializers}/__init__.py +5 -5
- zenml/integrations/pandas/materializers/pandas_materializer.py +192 -0
- zenml/integrations/pigeon/__init__.py +44 -0
- zenml/integrations/pigeon/annotators/__init__.py +20 -0
- zenml/integrations/pigeon/annotators/pigeon_annotator.py +330 -0
- zenml/integrations/{kserve → pigeon}/flavors/__init__.py +7 -7
- zenml/integrations/pigeon/flavors/pigeon_annotator_flavor.py +104 -0
- zenml/integrations/pillow/materializers/pillow_image_materializer.py +17 -20
- zenml/integrations/polars/__init__.py +1 -0
- zenml/integrations/polars/materializers/dataframe_materializer.py +26 -39
- zenml/integrations/prodigy/__init__.py +48 -0
- zenml/integrations/prodigy/annotators/__init__.py +20 -0
- zenml/integrations/prodigy/annotators/prodigy_annotator.py +275 -0
- zenml/integrations/prodigy/flavors/__init__.py +24 -0
- zenml/integrations/prodigy/flavors/prodigy_annotator_flavor.py +101 -0
- zenml/integrations/pycaret/__init__.py +6 -0
- zenml/integrations/pycaret/materializers/model_materializer.py +7 -22
- zenml/integrations/pytorch/materializers/base_pytorch_materializer.py +8 -2
- zenml/integrations/pytorch/materializers/pytorch_module_materializer.py +4 -1
- zenml/integrations/registry.py +38 -1
- zenml/integrations/s3/__init__.py +2 -3
- zenml/integrations/s3/artifact_stores/s3_artifact_store.py +191 -9
- zenml/integrations/s3/flavors/s3_artifact_store_flavor.py +22 -45
- zenml/integrations/s3/utils.py +39 -0
- zenml/integrations/seldon/__init__.py +18 -2
- zenml/integrations/seldon/model_deployers/seldon_model_deployer.py +19 -141
- zenml/integrations/seldon/secret_schemas/secret_schemas.py +2 -2
- zenml/integrations/seldon/seldon_client.py +55 -70
- zenml/integrations/seldon/services/seldon_deployment.py +4 -5
- zenml/integrations/seldon/steps/seldon_deployer.py +21 -20
- zenml/integrations/sklearn/__init__.py +1 -1
- zenml/integrations/skypilot/flavors/skypilot_orchestrator_base_vm_config.py +29 -7
- zenml/integrations/skypilot/orchestrators/skypilot_base_vm_orchestrator.py +47 -28
- zenml/integrations/skypilot/orchestrators/skypilot_orchestrator_entrypoint.py +2 -2
- zenml/integrations/skypilot_aws/__init__.py +3 -2
- zenml/integrations/skypilot_aws/flavors/skypilot_orchestrator_aws_vm_flavor.py +1 -1
- zenml/integrations/skypilot_azure/__init__.py +2 -4
- zenml/integrations/skypilot_azure/flavors/skypilot_orchestrator_azure_vm_flavor.py +1 -1
- zenml/integrations/skypilot_gcp/__init__.py +3 -2
- zenml/integrations/skypilot_gcp/flavors/skypilot_orchestrator_gcp_vm_flavor.py +1 -1
- zenml/integrations/skypilot_kubernetes/__init__.py +52 -0
- zenml/integrations/skypilot_kubernetes/flavors/__init__.py +26 -0
- zenml/integrations/skypilot_kubernetes/flavors/skypilot_orchestrator_kubernetes_vm_flavor.py +125 -0
- zenml/integrations/skypilot_kubernetes/orchestrators/__init__.py +25 -0
- zenml/integrations/skypilot_kubernetes/orchestrators/skypilot_kubernetes_vm_orchestrator.py +74 -0
- zenml/integrations/skypilot_lambda/__init__.py +50 -0
- zenml/integrations/{kserve/secret_schemas → skypilot_lambda/flavors}/__init__.py +9 -12
- zenml/integrations/skypilot_lambda/flavors/skypilot_orchestrator_lambda_vm_flavor.py +130 -0
- zenml/{lineage_graph/node → integrations/skypilot_lambda/orchestrators}/__init__.py +8 -15
- zenml/integrations/skypilot_lambda/orchestrators/skypilot_lambda_vm_orchestrator.py +92 -0
- zenml/integrations/slack/__init__.py +1 -0
- zenml/integrations/slack/alerters/slack_alerter.py +22 -2
- zenml/integrations/slack/flavors/__init__.py +2 -0
- zenml/integrations/slack/flavors/slack_alerter_flavor.py +13 -4
- zenml/integrations/slack/steps/slack_alerter_ask_step.py +1 -0
- zenml/integrations/slack/steps/slack_alerter_post_step.py +1 -0
- zenml/integrations/spark/flavors/spark_step_operator_flavor.py +2 -39
- zenml/integrations/spark/step_operators/kubernetes_step_operator.py +1 -0
- zenml/integrations/spark/step_operators/spark_entrypoint_configuration.py +1 -0
- zenml/integrations/spark/step_operators/spark_step_operator.py +2 -0
- zenml/integrations/tekton/__init__.py +2 -1
- zenml/integrations/tekton/flavors/tekton_orchestrator_flavor.py +66 -23
- zenml/integrations/tekton/orchestrators/tekton_orchestrator.py +549 -235
- zenml/integrations/tensorboard/__init__.py +1 -13
- zenml/integrations/tensorboard/services/tensorboard_service.py +3 -4
- zenml/integrations/tensorboard/visualizers/tensorboard_visualizer.py +66 -59
- zenml/integrations/tensorflow/__init__.py +10 -15
- zenml/integrations/tensorflow/materializers/keras_materializer.py +24 -27
- zenml/integrations/tensorflow/materializers/tf_dataset_materializer.py +9 -16
- zenml/integrations/vllm/__init__.py +50 -0
- zenml/integrations/vllm/flavors/__init__.py +21 -0
- zenml/integrations/vllm/flavors/vllm_model_deployer_flavor.py +91 -0
- zenml/integrations/vllm/model_deployers/__init__.py +19 -0
- zenml/integrations/vllm/model_deployers/vllm_model_deployer.py +263 -0
- zenml/integrations/vllm/services/__init__.py +19 -0
- zenml/integrations/vllm/services/vllm_deployment.py +206 -0
- zenml/integrations/wandb/__init__.py +1 -0
- zenml/integrations/wandb/flavors/wandb_experiment_tracker_flavor.py +21 -18
- zenml/integrations/whylogs/__init__.py +18 -2
- zenml/integrations/whylogs/data_validators/whylogs_data_validator.py +3 -3
- zenml/integrations/whylogs/flavors/whylogs_data_validator_flavor.py +1 -1
- zenml/integrations/whylogs/materializers/whylogs_materializer.py +14 -21
- zenml/integrations/xgboost/materializers/xgboost_booster_materializer.py +11 -22
- zenml/integrations/xgboost/materializers/xgboost_dmatrix_materializer.py +10 -19
- zenml/io/fileio.py +1 -0
- zenml/io/filesystem.py +2 -2
- zenml/io/local_filesystem.py +3 -3
- zenml/logger.py +41 -17
- zenml/logging/__init__.py +5 -0
- zenml/logging/step_logging.py +280 -32
- zenml/{new/steps → login}/__init__.py +4 -1
- zenml/login/credentials.py +370 -0
- zenml/login/credentials_store.py +638 -0
- zenml/{new/pipelines → login/pro}/__init__.py +4 -1
- zenml/login/pro/client.py +492 -0
- zenml/login/pro/constants.py +28 -0
- zenml/{zen_stores/schemas/identity_schemas.py → login/pro/models.py} +9 -11
- zenml/login/pro/organization/__init__.py +14 -0
- zenml/login/pro/organization/client.py +79 -0
- zenml/{lineage_graph/node/base_node.py → login/pro/organization/models.py} +13 -12
- zenml/{_hub → login/pro/tenant}/__init__.py +2 -2
- zenml/login/pro/tenant/client.py +92 -0
- zenml/login/pro/tenant/models.py +176 -0
- zenml/login/pro/utils.py +107 -0
- zenml/login/server_info.py +52 -0
- zenml/{cli → login}/web_login.py +71 -21
- zenml/materializers/__init__.py +2 -4
- zenml/materializers/base_materializer.py +180 -51
- zenml/materializers/built_in_materializer.py +50 -23
- zenml/materializers/cloudpickle_materializer.py +4 -5
- zenml/materializers/numpy_materializer.py +23 -233
- zenml/materializers/pandas_materializer.py +22 -174
- zenml/materializers/pydantic_materializer.py +2 -2
- zenml/materializers/service_materializer.py +12 -10
- zenml/materializers/structured_string_materializer.py +12 -6
- zenml/materializers/uuid_materializer.py +79 -0
- zenml/metadata/lazy_load.py +33 -17
- zenml/metadata/metadata_types.py +112 -3
- zenml/model/lazy_load.py +85 -4
- zenml/model/model.py +236 -226
- zenml/model/utils.py +99 -141
- zenml/model_deployers/base_model_deployer.py +319 -47
- zenml/model_registries/base_model_registry.py +17 -15
- zenml/models/__init__.py +254 -175
- zenml/models/v2/base/base.py +254 -112
- zenml/models/v2/base/base_plugin_flavor.py +76 -0
- zenml/models/v2/base/filter.py +530 -199
- zenml/models/v2/base/page.py +2 -12
- zenml/models/v2/base/scoped.py +292 -22
- zenml/models/v2/core/action.py +276 -0
- zenml/models/v2/core/action_flavor.py +57 -0
- zenml/models/v2/core/api_key.py +35 -12
- zenml/models/v2/core/artifact.py +126 -6
- zenml/models/v2/core/artifact_version.py +289 -65
- zenml/models/v2/core/artifact_visualization.py +10 -4
- zenml/models/v2/core/code_reference.py +13 -4
- zenml/models/v2/core/code_repository.py +39 -16
- zenml/models/v2/core/component.py +113 -61
- zenml/models/v2/core/device.py +25 -5
- zenml/models/v2/core/event_source.py +244 -0
- zenml/models/v2/core/event_source_flavor.py +67 -0
- zenml/models/v2/core/flavor.py +90 -27
- zenml/models/v2/core/logs.py +81 -12
- zenml/models/v2/core/model.py +91 -42
- zenml/models/v2/core/model_version.py +100 -55
- zenml/models/v2/core/model_version_artifact.py +96 -89
- zenml/models/v2/core/model_version_pipeline_run.py +86 -53
- zenml/models/v2/core/pipeline.py +205 -80
- zenml/models/v2/core/pipeline_build.py +110 -21
- zenml/models/v2/core/pipeline_deployment.py +101 -36
- zenml/models/v2/core/pipeline_run.py +545 -33
- zenml/models/v2/core/run_metadata.py +23 -181
- zenml/models/v2/core/run_template.py +439 -0
- zenml/models/v2/core/schedule.py +66 -29
- zenml/models/v2/core/secret.py +33 -21
- zenml/models/v2/core/server_settings.py +224 -0
- zenml/models/v2/core/service.py +500 -0
- zenml/models/v2/core/service_account.py +40 -15
- zenml/models/v2/core/service_connector.py +247 -49
- zenml/models/v2/core/stack.py +163 -70
- zenml/models/v2/core/step_run.py +210 -48
- zenml/models/v2/core/tag.py +21 -8
- zenml/models/v2/core/tag_resource.py +13 -4
- zenml/models/v2/core/trigger.py +422 -0
- zenml/models/v2/core/trigger_execution.py +119 -0
- zenml/models/v2/core/user.py +136 -69
- zenml/models/v2/core/workspace.py +26 -7
- zenml/models/v2/misc/auth_models.py +11 -2
- zenml/models/v2/misc/build_item.py +3 -3
- zenml/models/v2/misc/external_user.py +3 -6
- zenml/models/v2/misc/info_models.py +78 -0
- zenml/models/v2/misc/loaded_visualization.py +2 -2
- zenml/models/v2/misc/run_metadata.py +38 -0
- zenml/models/v2/misc/server_models.py +100 -0
- zenml/models/v2/misc/service_connector_type.py +9 -17
- zenml/models/v2/misc/stack_deployment.py +96 -0
- zenml/models/v2/misc/user_auth.py +7 -9
- zenml/orchestrators/__init__.py +4 -0
- zenml/orchestrators/base_orchestrator.py +136 -25
- zenml/orchestrators/containerized_orchestrator.py +1 -0
- zenml/orchestrators/dag_runner.py +18 -3
- zenml/orchestrators/input_utils.py +109 -48
- zenml/orchestrators/local/local_orchestrator.py +10 -0
- zenml/orchestrators/local_docker/local_docker_orchestrator.py +14 -42
- zenml/orchestrators/output_utils.py +16 -6
- zenml/orchestrators/publish_utils.py +12 -5
- zenml/orchestrators/step_launcher.py +142 -194
- zenml/orchestrators/step_run_utils.py +386 -0
- zenml/orchestrators/step_runner.py +181 -270
- zenml/orchestrators/utils.py +219 -84
- zenml/orchestrators/wheeled_orchestrator.py +147 -0
- zenml/pipelines/__init__.py +3 -16
- zenml/{new/pipelines → pipelines}/build_utils.py +287 -47
- zenml/{new/pipelines → pipelines}/pipeline_context.py +6 -2
- zenml/pipelines/pipeline_decorator.py +40 -64
- zenml/{new/pipelines/pipeline.py → pipelines/pipeline_definition.py} +376 -440
- zenml/pipelines/run_utils.py +358 -0
- zenml/plugins/__init__.py +0 -0
- zenml/plugins/base_plugin_flavor.py +88 -0
- zenml/plugins/plugin_flavor_registry.py +342 -0
- zenml/secret/base_secret.py +7 -8
- zenml/secret/schemas/basic_auth_secret_schema.py +0 -1
- zenml/service_connectors/docker_service_connector.py +19 -4
- zenml/service_connectors/service_connector.py +12 -14
- zenml/service_connectors/service_connector_registry.py +71 -55
- zenml/service_connectors/service_connector_utils.py +418 -0
- zenml/services/__init__.py +0 -2
- zenml/services/container/container_service.py +9 -6
- zenml/services/container/container_service_endpoint.py +1 -1
- zenml/services/container/entrypoint.py +3 -2
- zenml/services/local/local_daemon_entrypoint.py +9 -6
- zenml/services/local/local_service.py +1 -1
- zenml/services/local/local_service_endpoint.py +1 -1
- zenml/services/service.py +222 -130
- zenml/services/service_status.py +2 -1
- zenml/services/service_type.py +6 -5
- zenml/stack/flavor.py +25 -18
- zenml/stack/flavor_registry.py +4 -4
- zenml/stack/stack.py +20 -131
- zenml/stack/stack_component.py +136 -110
- zenml/stack/utils.py +36 -15
- zenml/stack_deployments/__init__.py +14 -0
- zenml/stack_deployments/aws_stack_deployment.py +320 -0
- zenml/stack_deployments/azure_stack_deployment.py +315 -0
- zenml/stack_deployments/gcp_stack_deployment.py +315 -0
- zenml/stack_deployments/stack_deployment.py +232 -0
- zenml/stack_deployments/utils.py +48 -0
- zenml/step_operators/step_operator_entrypoint_configuration.py +2 -1
- zenml/steps/__init__.py +3 -9
- zenml/steps/base_step.py +172 -315
- zenml/{new/steps → steps}/decorated_step.py +1 -0
- zenml/steps/entrypoint_function_utils.py +33 -93
- zenml/{new/steps → steps}/step_context.py +70 -50
- zenml/steps/step_decorator.py +47 -93
- zenml/steps/step_invocation.py +22 -60
- zenml/steps/utils.py +161 -48
- zenml/types.py +14 -1
- zenml/utils/archivable.py +178 -0
- zenml/utils/callback_registry.py +71 -0
- zenml/utils/code_repository_utils.py +1 -0
- zenml/utils/code_utils.py +346 -0
- zenml/utils/cuda_utils.py +50 -0
- zenml/utils/dashboard_utils.py +67 -21
- zenml/utils/deprecation_utils.py +22 -24
- zenml/utils/dict_utils.py +22 -0
- zenml/utils/docker_utils.py +34 -5
- zenml/utils/downloaded_repository_context.py +1 -0
- zenml/utils/env_utils.py +55 -1
- zenml/utils/filesync_model.py +65 -28
- zenml/utils/function_utils.py +260 -0
- zenml/utils/integration_utils.py +1 -0
- zenml/utils/json_utils.py +131 -0
- zenml/utils/materializer_utils.py +1 -1
- zenml/utils/metadata_utils.py +368 -0
- zenml/utils/notebook_utils.py +136 -0
- zenml/utils/package_utils.py +89 -0
- zenml/utils/pagination_utils.py +9 -7
- zenml/utils/pipeline_docker_image_builder.py +152 -149
- zenml/utils/pydantic_utils.py +276 -66
- zenml/utils/requirements_utils.py +71 -0
- zenml/utils/secret_utils.py +66 -12
- zenml/utils/settings_utils.py +2 -1
- zenml/utils/singleton.py +15 -3
- zenml/utils/source_code_utils.py +1 -0
- zenml/utils/source_utils.py +236 -14
- zenml/utils/string_utils.py +140 -0
- zenml/utils/typed_model.py +5 -3
- zenml/utils/typing_utils.py +223 -0
- zenml/utils/visualization_utils.py +5 -3
- zenml/utils/yaml_utils.py +1 -1
- zenml/zen_server/auth.py +387 -55
- zenml/zen_server/cache.py +208 -0
- zenml/zen_server/cloud_utils.py +253 -0
- zenml/zen_server/csrf.py +91 -0
- zenml/zen_server/dashboard/assets/404-Dfq64Boz.js +1 -0
- zenml/zen_server/dashboard/assets/@radix-DeK6qiuw.js +85 -0
- zenml/zen_server/dashboard/assets/@react-router-B3Z5rLr2.js +29 -0
- zenml/zen_server/dashboard/assets/@reactflow-BUNIMFeC.js +17 -0
- zenml/zen_server/dashboard/assets/@reactflow-C26Olbza.css +1 -0
- zenml/zen_server/dashboard/assets/@tanstack-DT5WLu9C.js +22 -0
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-B73Vs10T.js +1 -0
- zenml/zen_server/dashboard/assets/CodeSnippet-Bbx6fIb6.css +1 -0
- zenml/zen_server/dashboard/assets/CodeSnippet-DIJRT2NT.js +9 -0
- zenml/zen_server/dashboard/assets/CollapsibleCard-BzUHGZOU.js +1 -0
- zenml/zen_server/dashboard/assets/Commands-BEGyld4c.js +1 -0
- zenml/zen_server/dashboard/assets/ComponentBadge-xyKiek1s.js +1 -0
- zenml/zen_server/dashboard/assets/CopyButton-DhW-mapu.js +2 -0
- zenml/zen_server/dashboard/assets/CsvVizualization-D8oazBiE.js +15 -0
- zenml/zen_server/dashboard/assets/DeleteAlertDialog-WkSIIgfy.js +1 -0
- zenml/zen_server/dashboard/assets/DialogItem-Bgroeg29.js +1 -0
- zenml/zen_server/dashboard/assets/DisplayDate-CDMUcQHS.js +1 -0
- zenml/zen_server/dashboard/assets/EmptyState-BzdlCwp3.js +1 -0
- zenml/zen_server/dashboard/assets/Error-CY5tlu17.js +1 -0
- zenml/zen_server/dashboard/assets/ExecutionStatus-G8mjIaeA.js +1 -0
- zenml/zen_server/dashboard/assets/Helpbox-Bb1ed--O.js +1 -0
- zenml/zen_server/dashboard/assets/Infobox-Da6-76M2.js +1 -0
- zenml/zen_server/dashboard/assets/InlineAvatar-DqnZaBNq.js +1 -0
- zenml/zen_server/dashboard/assets/Lock-CYYy18Mm.js +1 -0
- zenml/zen_server/dashboard/assets/MarkdownVisualization-ylXaAxev.js +14 -0
- zenml/zen_server/dashboard/assets/NestedCollapsible-aK5ojKoF.js +1 -0
- zenml/zen_server/dashboard/assets/NumberBox-Dtp3J6g5.js +1 -0
- zenml/zen_server/dashboard/assets/Partials-CqZp5NMX.js +1 -0
- zenml/zen_server/dashboard/assets/PasswordChecker-B0nadgh6.js +1 -0
- zenml/zen_server/dashboard/assets/ProBadge-B4tRUYve.js +1 -0
- zenml/zen_server/dashboard/assets/ProCta-CZuP29Qz.js +1 -0
- zenml/zen_server/dashboard/assets/ProviderIcon-Bd7GUQ1_.js +1 -0
- zenml/zen_server/dashboard/assets/ProviderRadio-mstdqzsS.js +1 -0
- zenml/zen_server/dashboard/assets/RunSelector-CsruSB4i.js +1 -0
- zenml/zen_server/dashboard/assets/RunsBody-DxxtWVYz.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-D6tPxyqw.js +1 -0
- zenml/zen_server/dashboard/assets/SecretTooltip-CLzJIYW_.js +1 -0
- zenml/zen_server/dashboard/assets/SetPassword-Yn50ooBC.js +1 -0
- zenml/zen_server/dashboard/assets/StackList-U537qoYd.js +1 -0
- zenml/zen_server/dashboard/assets/Tabs-CNv-eTYM.js +1 -0
- zenml/zen_server/dashboard/assets/Tick-jEIevzVf.js +1 -0
- zenml/zen_server/dashboard/assets/UpdatePasswordSchemas-C16GW-kX.js +1 -0
- zenml/zen_server/dashboard/assets/UsageReason-Bf2tzhv1.js +1 -0
- zenml/zen_server/dashboard/assets/WizardFooter-D6i-AP1K.js +1 -0
- zenml/zen_server/dashboard/assets/acp-DOsXjFc7.webp +0 -0
- zenml/zen_server/dashboard/assets/adam-e-y0WnB_.webp +0 -0
- zenml/zen_server/dashboard/assets/alex-DcCuDHPg.webp +0 -0
- zenml/zen_server/dashboard/assets/all-pipeline-runs-query-DUti43aF.js +1 -0
- zenml/zen_server/dashboard/assets/baris-C0ZrZ10g.webp +0 -0
- zenml/zen_server/dashboard/assets/check-DloQpStc.js +1 -0
- zenml/zen_server/dashboard/assets/check-circle-jNbX5-sR.js +1 -0
- zenml/zen_server/dashboard/assets/chevron-down-6JyMkfjR.js +1 -0
- zenml/zen_server/dashboard/assets/chevron-right-double-D7ojK9Co.js +1 -0
- zenml/zen_server/dashboard/assets/cloud-squares-DeRLMopf.svg +43 -0
- zenml/zen_server/dashboard/assets/code-browser-CUFUIHfp.js +1 -0
- zenml/zen_server/dashboard/assets/code-snippets-CqONne41.js +13 -0
- zenml/zen_server/dashboard/assets/components-Br2ezRib.js +1 -0
- zenml/zen_server/dashboard/assets/connectors-video-C9qY4syJ.svg +21 -0
- zenml/zen_server/dashboard/assets/copy-C8XQA2Ug.js +1 -0
- zenml/zen_server/dashboard/assets/create-stack-Ch2WPs9U.js +1 -0
- zenml/zen_server/dashboard/assets/dates-3pMLCNrD.js +1 -0
- zenml/zen_server/dashboard/assets/delete-run-Byf9hTjA.js +1 -0
- zenml/zen_server/dashboard/assets/docker-BdA9vrnW.js +1 -0
- zenml/zen_server/dashboard/assets/dots-horizontal-otGBOSDJ.js +1 -0
- zenml/zen_server/dashboard/assets/flyte-Cj-xy_8I.svg +10 -0
- zenml/zen_server/dashboard/assets/form-schemas-BZqKBPBF.js +1 -0
- zenml/zen_server/dashboard/assets/gcp-CFtm4BA7.js +1 -0
- zenml/zen_server/dashboard/assets/hamza-NKKOZz1I.webp +0 -0
- zenml/zen_server/dashboard/assets/help-Cc9bBIJH.js +1 -0
- zenml/zen_server/dashboard/assets/index-CE0aQlv8.js +55 -0
- zenml/zen_server/dashboard/assets/index-CtdYkjUi.js +1 -0
- zenml/zen_server/dashboard/assets/index-CyBKZcpO.js +1 -0
- zenml/zen_server/dashboard/assets/index-DXvT1_Um.css +1 -0
- zenml/zen_server/dashboard/assets/index-Uu49AX48.js +1 -0
- zenml/zen_server/dashboard/assets/index-v6gQjDEo.js +1 -0
- zenml/zen_server/dashboard/assets/index.esm-Dy6Z9Ung.js +1 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-BLGc9T1a.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-ZzOtrSSW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-D4Vwzodn.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DH2hs3aW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BGBWG807.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BuzJQFbW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-BPnxn4xp.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-Dc4VJyIJ.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-BShVwWPj.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-CUiC4oBV.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-Bt9VVOA-.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-CaqZN2hq.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-BZzXV7-1.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-DxZsaF_h.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-CeQXL5ds.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-d_eO-yCQ.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-CwicyhtI.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-Dhlb-90d.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-Bput3-QP.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-DCpCPQOf.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-B6guLgqG.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-M2hEX8vc.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-C9WLioJ8.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-Cnui8OiR.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-BOOGhInR.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-gitzw0hO.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-D2bGa7uu.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-deR1Tlfd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-B5cFAncS.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-D273HNI0.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-C1t-h-pH.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-hnt3BR84.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-UMdmhHu2.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-BnYJhD27.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-CAF0vJDd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-BUNmGMP1.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DQPw2Hwd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cm6aH8_k.woff +0 -0
- zenml/zen_server/dashboard/assets/key-icon-aH-QIa5R.js +1 -0
- zenml/zen_server/dashboard/assets/kubernetes-B2wmAJ1d.js +1 -0
- zenml/zen_server/dashboard/assets/layout-BtHBmE4w.js +1 -0
- zenml/zen_server/dashboard/assets/link-external-b9AXw_sW.js +1 -0
- zenml/zen_server/dashboard/assets/login-command-CkqxPtV3.js +1 -0
- zenml/zen_server/dashboard/assets/login-mutation-DNDVp_2H.js +1 -0
- zenml/zen_server/dashboard/assets/logs-WMSM52RF.js +1 -0
- zenml/zen_server/dashboard/assets/mcp-Cb1aMeoq.webp +0 -0
- zenml/zen_server/dashboard/assets/metaflow-weOkWNyT.svg +10 -0
- zenml/zen_server/dashboard/assets/not-found-Bmup4ctE.js +1 -0
- zenml/zen_server/dashboard/assets/package-C6uypY4h.js +1 -0
- zenml/zen_server/dashboard/assets/page--XLMzHrn.js +1 -0
- zenml/zen_server/dashboard/assets/page-ANYGfEUL.js +1 -0
- zenml/zen_server/dashboard/assets/page-B5Sr8pib.js +1 -0
- zenml/zen_server/dashboard/assets/page-BC27C_OI.js +2 -0
- zenml/zen_server/dashboard/assets/page-BNxYrN0q.js +1 -0
- zenml/zen_server/dashboard/assets/page-BYJfqgLN.js +1 -0
- zenml/zen_server/dashboard/assets/page-B_0XkV48.js +1 -0
- zenml/zen_server/dashboard/assets/page-BrmJp1Wt.js +1 -0
- zenml/zen_server/dashboard/assets/page-C2nU3Gxn.js +1 -0
- zenml/zen_server/dashboard/assets/page-C70wZtV2.js +1 -0
- zenml/zen_server/dashboard/assets/page-CHRn1fQm.js +1 -0
- zenml/zen_server/dashboard/assets/page-CWr96ZKN.js +1 -0
- zenml/zen_server/dashboard/assets/page-CXAbSyp9.js +1 -0
- zenml/zen_server/dashboard/assets/page-CaeI9ptC.js +1 -0
- zenml/zen_server/dashboard/assets/page-Cc8ZEuj4.js +1 -0
- zenml/zen_server/dashboard/assets/page-CltCNL0T.js +1 -0
- zenml/zen_server/dashboard/assets/page-CmlYj7Nl.js +1 -0
- zenml/zen_server/dashboard/assets/page-D6Ev5P8V.js +1 -0
- zenml/zen_server/dashboard/assets/page-D9Oh05fl.js +1 -0
- zenml/zen_server/dashboard/assets/page-DGlm1RVc.js +1 -0
- zenml/zen_server/dashboard/assets/page-DN4BVIOL.js +1 -0
- zenml/zen_server/dashboard/assets/page-Dif8CWyZ.js +1 -0
- zenml/zen_server/dashboard/assets/page-DlIi5ThM.js +1 -0
- zenml/zen_server/dashboard/assets/page-DoW7YxTu.js +1 -0
- zenml/zen_server/dashboard/assets/page-Dth9X1Ih.js +1 -0
- zenml/zen_server/dashboard/assets/page-DweqqCkF.js +1 -0
- zenml/zen_server/dashboard/assets/page-DyOJ_pq3.js +1 -0
- zenml/zen_server/dashboard/assets/page-Hn8q9iJZ.js +1 -0
- zenml/zen_server/dashboard/assets/page-IhckKFnD.js +6 -0
- zenml/zen_server/dashboard/assets/page-LyZ_l8vR.js +1 -0
- zenml/zen_server/dashboard/assets/page-PamGpk0j.js +1 -0
- zenml/zen_server/dashboard/assets/page-PxOWfKgF.js +2 -0
- zenml/zen_server/dashboard/assets/persist-DeXRG61d.js +1 -0
- zenml/zen_server/dashboard/assets/persist-vP0-Xl4f.js +1 -0
- zenml/zen_server/dashboard/assets/plus-tf1V2hTJ.js +1 -0
- zenml/zen_server/dashboard/assets/refresh-BjOeWlEq.js +1 -0
- zenml/zen_server/dashboard/assets/repos-video-D8kpu60k.svg +9 -0
- zenml/zen_server/dashboard/assets/rocket-DjT2cDvG.js +1 -0
- zenml/zen_server/dashboard/assets/service-DH_oUqQj.js +2 -0
- zenml/zen_server/dashboard/assets/settings_preview-0JLrRgHP.webp +0 -0
- zenml/zen_server/dashboard/assets/sharedSchema-Bw1_Wa7l.js +14 -0
- zenml/zen_server/dashboard/assets/stack-detail-query-B_0R_fd6.js +1 -0
- zenml/zen_server/dashboard/assets/stefan-B08Ftbba.webp +0 -0
- zenml/zen_server/dashboard/assets/templates-1S_8WeSK.webp +0 -0
- zenml/zen_server/dashboard/assets/tick-circle-BEX_Tp4v.js +1 -0
- zenml/zen_server/dashboard/assets/tour-cover-BYfeen6M.webp +0 -0
- zenml/zen_server/dashboard/assets/trash-arLUMWMS.js +1 -0
- zenml/zen_server/dashboard/assets/update-server-settings-mutation-D9qYhfaN.js +1 -0
- zenml/zen_server/dashboard/assets/upgrade-form-CwRHBuXB.webp +0 -0
- zenml/zen_server/dashboard/assets/url-Dh93fvh0.js +1 -0
- zenml/zen_server/dashboard/assets/zod-BwEbpOxH.js +1 -0
- zenml/zen_server/dashboard/index.html +19 -1
- zenml/zen_server/deploy/__init__.py +7 -16
- zenml/zen_server/deploy/base_provider.py +49 -78
- zenml/zen_server/deploy/{local → daemon}/__init__.py +3 -3
- zenml/zen_server/deploy/{local/local_provider.py → daemon/daemon_provider.py} +48 -66
- zenml/zen_server/deploy/{local/local_zen_server.py → daemon/daemon_zen_server.py} +78 -62
- zenml/zen_server/deploy/deployer.py +94 -175
- zenml/zen_server/deploy/deployment.py +23 -17
- zenml/zen_server/deploy/docker/docker_provider.py +15 -31
- zenml/zen_server/deploy/docker/docker_zen_server.py +30 -35
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +3 -13
- zenml/zen_server/deploy/helm/templates/NOTES.txt +23 -7
- zenml/zen_server/deploy/helm/templates/_environment.tpl +175 -23
- zenml/zen_server/deploy/helm/templates/server-db-job.yaml +45 -18
- zenml/zen_server/deploy/helm/templates/server-db-pvc.yaml +25 -0
- zenml/zen_server/deploy/helm/templates/server-deployment.yaml +22 -6
- zenml/zen_server/deploy/helm/templates/server-secret.yaml +11 -10
- zenml/zen_server/deploy/helm/values.yaml +210 -28
- zenml/zen_server/exceptions.py +20 -1
- zenml/zen_server/feature_gate/__init__.py +13 -0
- zenml/zen_server/feature_gate/endpoint_utils.py +61 -0
- zenml/zen_server/feature_gate/feature_gate_interface.py +49 -0
- zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +125 -0
- zenml/zen_server/jwt.py +64 -32
- zenml/zen_server/rate_limit.py +200 -0
- zenml/zen_server/rbac/endpoint_utils.py +92 -9
- zenml/zen_server/rbac/models.py +21 -17
- zenml/zen_server/rbac/rbac_sql_zen_store.py +175 -0
- zenml/zen_server/rbac/utils.py +71 -30
- zenml/zen_server/rbac/zenml_cloud_rbac.py +13 -188
- zenml/zen_server/routers/actions_endpoints.py +324 -0
- zenml/zen_server/routers/artifact_version_endpoints.py +28 -2
- zenml/zen_server/routers/auth_endpoints.py +249 -131
- zenml/zen_server/routers/code_repositories_endpoints.py +1 -0
- zenml/zen_server/routers/devices_endpoints.py +56 -49
- zenml/zen_server/routers/event_source_endpoints.py +327 -0
- zenml/zen_server/routers/logs_endpoints.py +66 -0
- zenml/zen_server/routers/model_versions_endpoints.py +59 -0
- zenml/zen_server/routers/models_endpoints.py +7 -1
- zenml/zen_server/routers/pipeline_builds_endpoints.py +6 -1
- zenml/zen_server/routers/pipeline_deployments_endpoints.py +35 -0
- zenml/zen_server/routers/pipelines_endpoints.py +19 -32
- zenml/zen_server/routers/plugin_endpoints.py +107 -0
- zenml/zen_server/routers/run_templates_endpoints.py +212 -0
- zenml/zen_server/routers/runs_endpoints.py +91 -32
- zenml/zen_server/routers/schedule_endpoints.py +1 -0
- zenml/zen_server/routers/secrets_endpoints.py +4 -2
- zenml/zen_server/routers/server_endpoints.py +186 -4
- zenml/zen_server/routers/service_connectors_endpoints.py +56 -0
- zenml/zen_server/routers/service_endpoints.py +180 -0
- zenml/zen_server/routers/stack_components_endpoints.py +2 -1
- zenml/zen_server/routers/stack_deployment_endpoints.py +164 -0
- zenml/zen_server/routers/steps_endpoints.py +21 -12
- zenml/zen_server/routers/triggers_endpoints.py +336 -0
- zenml/zen_server/routers/users_endpoints.py +280 -45
- zenml/zen_server/routers/webhook_endpoints.py +127 -0
- zenml/zen_server/routers/workspaces_endpoints.py +220 -185
- zenml/zen_server/secure_headers.py +120 -0
- zenml/{new → zen_server/template_execution}/__init__.py +1 -1
- zenml/zen_server/template_execution/runner_entrypoint_configuration.py +42 -0
- zenml/zen_server/template_execution/utils.py +474 -0
- zenml/zen_server/template_execution/workload_manager_interface.py +92 -0
- zenml/zen_server/utils.py +374 -74
- zenml/zen_server/zen_server_api.py +299 -52
- zenml/zen_stores/base_zen_store.py +90 -58
- zenml/zen_stores/migrations/alembic.py +22 -9
- zenml/zen_stores/migrations/env.py +2 -2
- zenml/zen_stores/migrations/utils.py +731 -0
- zenml/zen_stores/migrations/versions/0.21.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.21.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.22.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.23.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.30.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.31.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.31.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.32.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.32.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.33.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.34.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.35.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.35.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.36.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.36.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.37.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.38.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.39.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.39.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.40.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.40.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.40.2_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.40.3_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.41.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.42.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.42.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.43.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.44.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.44.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.44.2_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.44.3_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.45.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.45.1_release_0_45_1.py +0 -1
- zenml/zen_stores/migrations/versions/0.45.2_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.45.3_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.45.4_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.45.5_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.45.6_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.46.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.46.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.47.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.50.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.51.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.52.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.53.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.53.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.54.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.54.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.55.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.55.1_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.55.2_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.55.3_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.55.4_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.55.5_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.56.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.56.1_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.56.2_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.56.3_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.56.4_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.57.0.rc1_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.57.0.rc2_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.57.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.57.1_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.58.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.58.1_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.58.2_release.py +23 -0
- 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/0.63.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.64.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.65.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.66.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.67.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.68.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.68.1_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.70.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.71.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.72.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/026d4577b6a0_add_code_path.py +39 -0
- zenml/zen_stores/migrations/versions/03742aa7fdd7_add_secrets.py +1 -0
- zenml/zen_stores/migrations/versions/0701da9951a0_added_service_table.py +94 -0
- zenml/zen_stores/migrations/versions/0b06faa59c93_add_service_connectors.py +1 -0
- zenml/zen_stores/migrations/versions/0d707865f404_adding_labels_to_stacks.py +30 -0
- zenml/zen_stores/migrations/versions/0e4735b23577_increase_pipeline_spec_field_length.py +1 -0
- zenml/zen_stores/migrations/versions/1041bc644e0d_remove_secrets_manager.py +6 -3
- zenml/zen_stores/migrations/versions/10a907dad202_delete_mlmd_tables.py +2 -1
- zenml/zen_stores/migrations/versions/14d687c8fa1c_rename_model_config_to_model_version.py +1 -0
- zenml/zen_stores/migrations/versions/19f27d5b234e_add_build_and_deployment_tables.py +1 -0
- zenml/zen_stores/migrations/versions/1a9a9d2a836d_admin_users.py +56 -0
- zenml/zen_stores/migrations/versions/1ac1b9c04da1_make_secrets_values_optional.py +1 -0
- zenml/zen_stores/migrations/versions/1cb6477f72d6_move_artifact_save_type.py +99 -0
- zenml/zen_stores/migrations/versions/1d74e596abb8_add_run_once_start_time_to_schedule.py +36 -0
- zenml/zen_stores/migrations/versions/1d8f30c54477_migrate_to_new_.py +124 -0
- zenml/zen_stores/migrations/versions/248dfd320b68_update_size_of_flavor_config_schema.py +1 -0
- zenml/zen_stores/migrations/versions/25155145c545_separate_actions_and_triggers.py +228 -0
- zenml/zen_stores/migrations/versions/26351d482b9e_add_step_run_unique_constraint.py +37 -0
- zenml/zen_stores/migrations/versions/26b776ad583e_redesign_artifacts.py +9 -10
- zenml/zen_stores/migrations/versions/2d201872e23c_remove_db_dependency_loop.py +29 -0
- zenml/zen_stores/migrations/versions/37835ce041d2_optimizing_database.py +4 -3
- zenml/zen_stores/migrations/versions/389046140cad_data_versioning.py +1 -0
- zenml/zen_stores/migrations/versions/3944116bbd56_rename_project_to_workspace.py +1 -0
- zenml/zen_stores/migrations/versions/3b68abe58f44_add_model_watchtower_entities.py +1 -0
- zenml/zen_stores/migrations/versions/3c5a367730c2_add_environment_info_to_runs.py +1 -0
- zenml/zen_stores/migrations/versions/3dcc5d20e82f_add_last_user_activity.py +51 -0
- zenml/zen_stores/migrations/versions/43a86093b60e_add_labels_for_stack_components.py +1 -0
- zenml/zen_stores/migrations/versions/46506f72f0ed_add_server_settings.py +123 -0
- zenml/zen_stores/migrations/versions/479103df60b6_add_triggers.py +162 -0
- zenml/zen_stores/migrations/versions/4a3087070f4e_add_step_source_code.py +1 -0
- zenml/zen_stores/migrations/versions/4c41c0ca42db_add_code_repository_table.py +1 -0
- zenml/zen_stores/migrations/versions/4d688d8f7aff_rename_model_version_to_model.py +1 -0
- zenml/zen_stores/migrations/versions/4e1972485075_endpoint_artifact_deployment_artifact.py +1 -0
- zenml/zen_stores/migrations/versions/4f66af55fbb9_rename_model_config_model_to_model_.py +1 -0
- zenml/zen_stores/migrations/versions/5330ba58bf20_rename_tables_and_foreign_keys.py +8 -9
- zenml/zen_stores/migrations/versions/5994f9ad0489_introduce_role_permissions.py +4 -2
- zenml/zen_stores/migrations/versions/5cc3f41cf048_add_save_models_to_registry.py +1 -0
- zenml/zen_stores/migrations/versions/6119cd9b93c2_tags_table.py +1 -0
- zenml/zen_stores/migrations/versions/623a234c11f5_add_sdk_docs_url_to_flavors.py +1 -0
- zenml/zen_stores/migrations/versions/6917bce75069_add_pipeline_run_unique_constraint.py +5 -4
- zenml/zen_stores/migrations/versions/6a28c4fd0ef2_add_caching_info.py +1 -0
- zenml/zen_stores/migrations/versions/6f707b385dc1_fix_model_artifacts.py +1 -0
- zenml/zen_stores/migrations/versions/722392c91006_make_is_service_account_mandatory.py +1 -0
- zenml/zen_stores/migrations/versions/72675226b2de_unique_users.py +31 -0
- zenml/zen_stores/migrations/versions/72722dee4686_track_server_version.py +1 -0
- zenml/zen_stores/migrations/versions/7280c14811d6_use_text_type.py +1 -0
- zenml/zen_stores/migrations/versions/728c6369cfaa_add_name_column_to_input_artifact_pk.py +4 -2
- zenml/zen_stores/migrations/versions/729263e47b55_fix_external_input_artifacts.py +1 -0
- zenml/zen_stores/migrations/versions/743ec82b1b3c_update_size_of_build_images.py +3 -2
- zenml/zen_stores/migrations/versions/7500f434b71c_remove_shared_columns.py +4 -2
- zenml/zen_stores/migrations/versions/76a7b9451ccd_add_build_template_deployment_id.py +52 -0
- zenml/zen_stores/migrations/versions/7834208cc3f6_artifact_project_scoping.py +9 -7
- zenml/zen_stores/migrations/versions/7b651bf6822e_track_secrets_in_db.py +7 -7
- zenml/zen_stores/migrations/versions/7d1919bb1ef0_add_run_templates.py +100 -0
- zenml/zen_stores/migrations/versions/7e4a481d17f7_add_identity_table.py +3 -2
- zenml/zen_stores/migrations/versions/7f603e583dd7_fixed_migration.py +2 -1
- zenml/zen_stores/migrations/versions/86fa52918b54_remove_teams_and_roles.py +1 -0
- zenml/zen_stores/migrations/versions/8a64fbfecda0_add_num_outputs_to_run_step.py +1 -0
- zenml/zen_stores/migrations/versions/8ed03137cacc_polymorthic_run_metadata.py +1 -0
- zenml/zen_stores/migrations/versions/904464ea4041_add_pipeline_model_run_unique_constraints.py +192 -0
- zenml/zen_stores/migrations/versions/909550c7c4da_remove_user_hub_token.py +36 -0
- zenml/zen_stores/migrations/versions/93cbda80a732_add_service_accounts.py +1 -0
- zenml/zen_stores/migrations/versions/979eff8fc4b1_add_code_repo_description_and_logo_url.py +1 -0
- zenml/zen_stores/migrations/versions/9971237fa937_artifact_visualizations.py +1 -0
- zenml/zen_stores/migrations/versions/9d8020441014_increase_step_configuration_length.py +1 -0
- zenml/zen_stores/migrations/versions/a1237ba94fd8_add_model_version_producer_run_unique_.py +68 -0
- zenml/zen_stores/migrations/versions/a39c4184c8ce_remove_secrets_manager_flavors.py +3 -2
- zenml/zen_stores/migrations/versions/a91762e6be36_artifact_version_table.py +5 -4
- zenml/zen_stores/migrations/versions/ade72effebaf_added_logs_table.py +1 -0
- zenml/zen_stores/migrations/versions/alembic_start.py +2 -1
- zenml/zen_stores/migrations/versions/b4eccf34dfa3_add_hub_token_to_user_model.py +1 -0
- zenml/zen_stores/migrations/versions/b4fca5241eea_migrate_onboarding_state.py +167 -0
- zenml/zen_stores/migrations/versions/b557b2871693_update_step_run_input_types.py +33 -0
- zenml/zen_stores/migrations/versions/b59aa68fdb1f_simplify_pipelines.py +139 -0
- zenml/zen_stores/migrations/versions/b73bc71f1106_remove_component_spec_path.py +36 -0
- zenml/zen_stores/migrations/versions/bf2120261b5a_add_configured_model_version_id.py +74 -0
- zenml/zen_stores/migrations/versions/c1b18cec3a48_increase_length_on_flavor_config_schema.py +1 -0
- zenml/zen_stores/migrations/versions/c22561cbb3a9_add_artifact_unique_constraints.py +86 -0
- zenml/zen_stores/migrations/versions/cc269488e5a9_separate_run_metadata.py +135 -0
- zenml/zen_stores/migrations/versions/cc9894cb58aa_add_user_metadata.py +41 -0
- zenml/zen_stores/migrations/versions/ccd68b7825ae_add_status_to_pipeline_and_step_run.py +1 -0
- zenml/zen_stores/migrations/versions/d02b3d3464cf_add_orchestrator_run_id_column.py +1 -0
- zenml/zen_stores/migrations/versions/d26471b6fe8f_update_build_filtering.py +1 -0
- zenml/zen_stores/migrations/versions/d7b3acf9aa46_create_schedule_table.py +1 -0
- zenml/zen_stores/migrations/versions/e1d66d91a099_add_stack_and_component_spec_paths_to_.py +1 -0
- zenml/zen_stores/migrations/versions/e5225281b4d3_add_connector_skew_tolerance.py +1 -0
- zenml/zen_stores/migrations/versions/e65aa6708ff7_pipeline_versioning.py +1 -0
- zenml/zen_stores/migrations/versions/ec0d785ca296_create_run_metadata_table.py +1 -0
- zenml/zen_stores/migrations/versions/ec6307720f92_simplify_model_version_links.py +119 -0
- zenml/zen_stores/migrations/versions/f3b3964e3a0f_add_oauth_devices.py +1 -0
- zenml/zen_stores/migrations/versions/f49904a80aa7_increase_length_of_artifact_table_sources.py +1 -0
- zenml/zen_stores/migrations/versions/fbd7f18ced1e_increase_step_run_field_lengths.py +5 -4
- zenml/zen_stores/rest_zen_store.py +1326 -305
- zenml/zen_stores/schemas/__init__.py +22 -3
- zenml/zen_stores/schemas/action_schemas.py +192 -0
- zenml/zen_stores/schemas/api_key_schemas.py +23 -10
- zenml/zen_stores/schemas/artifact_schemas.py +112 -49
- zenml/zen_stores/schemas/artifact_visualization_schemas.py +17 -8
- zenml/zen_stores/schemas/base_schemas.py +27 -0
- zenml/zen_stores/schemas/code_repository_schemas.py +25 -10
- zenml/zen_stores/schemas/component_schemas.py +74 -11
- zenml/zen_stores/schemas/constants.py +16 -0
- zenml/zen_stores/schemas/device_schemas.py +29 -15
- zenml/zen_stores/schemas/event_source_schemas.py +188 -0
- zenml/zen_stores/schemas/flavor_schemas.py +19 -9
- zenml/zen_stores/schemas/logs_schemas.py +12 -6
- zenml/zen_stores/schemas/model_schemas.py +192 -139
- zenml/zen_stores/schemas/pipeline_build_schemas.py +16 -16
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +58 -17
- zenml/zen_stores/schemas/pipeline_run_schemas.py +170 -35
- zenml/zen_stores/schemas/pipeline_schemas.py +51 -33
- zenml/zen_stores/schemas/run_metadata_schemas.py +28 -78
- zenml/zen_stores/schemas/run_template_schemas.py +267 -0
- zenml/zen_stores/schemas/schedule_schema.py +15 -5
- zenml/zen_stores/schemas/secret_schemas.py +18 -10
- zenml/zen_stores/schemas/server_settings_schemas.py +129 -0
- zenml/zen_stores/schemas/service_connector_schemas.py +13 -6
- zenml/zen_stores/schemas/service_schemas.py +258 -0
- zenml/zen_stores/schemas/stack_schemas.py +23 -6
- zenml/zen_stores/schemas/step_run_schemas.py +132 -41
- zenml/zen_stores/schemas/tag_schemas.py +31 -50
- zenml/zen_stores/schemas/trigger_schemas.py +316 -0
- zenml/zen_stores/schemas/user_schemas.py +66 -23
- zenml/zen_stores/schemas/utils.py +112 -0
- zenml/zen_stores/schemas/workspace_schemas.py +36 -19
- zenml/zen_stores/secrets_stores/aws_secrets_store.py +41 -32
- zenml/zen_stores/secrets_stores/azure_secrets_store.py +20 -23
- zenml/zen_stores/secrets_stores/base_secrets_store.py +80 -12
- zenml/zen_stores/secrets_stores/gcp_secrets_store.py +42 -33
- zenml/zen_stores/secrets_stores/hashicorp_secrets_store.py +7 -11
- zenml/zen_stores/secrets_stores/secrets_store_interface.py +1 -0
- zenml/zen_stores/secrets_stores/service_connector_secrets_store.py +15 -8
- zenml/zen_stores/secrets_stores/sql_secrets_store.py +8 -9
- zenml/zen_stores/sql_zen_store.py +4062 -799
- zenml/zen_stores/template_utils.py +263 -0
- zenml/zen_stores/zen_store_interface.py +614 -44
- zenml_nightly-0.72.0.dev20250116.dist-info/METADATA +486 -0
- zenml_nightly-0.72.0.dev20250116.dist-info/RECORD +1294 -0
- {zenml_nightly-0.55.0.dev20240124.dist-info → zenml_nightly-0.72.0.dev20250116.dist-info}/WHEEL +1 -1
- CLA.md +0 -110
- CODE-OF-CONDUCT.md +0 -132
- CONTRIBUTING.md +0 -260
- README.md +0 -304
- RELEASE_NOTES.md +0 -3919
- ROADMAP.md +0 -5
- SECURITY.md +0 -15
- zenml/_hub/client.py +0 -285
- zenml/_hub/constants.py +0 -21
- zenml/_hub/utils.py +0 -80
- zenml/api.py +0 -61
- zenml/cli/hub.py +0 -1115
- zenml/cli/stack_recipes.py +0 -469
- zenml/integrations/gcp/google_cloud_function.py +0 -187
- zenml/integrations/gcp/google_cloud_scheduler.py +0 -83
- zenml/integrations/gcp/orchestrators/vertex_scheduler/main.py +0 -91
- zenml/integrations/gcp/orchestrators/vertex_scheduler/requirements.txt +0 -2
- zenml/integrations/kserve/__init__.py +0 -57
- zenml/integrations/kserve/custom_deployer/zenml_custom_model.py +0 -175
- zenml/integrations/kserve/flavors/kserve_model_deployer_flavor.py +0 -137
- zenml/integrations/kserve/model_deployers/kserve_model_deployer.py +0 -1003
- zenml/integrations/kserve/secret_schemas/secret_schemas.py +0 -65
- zenml/integrations/kserve/services/kserve_deployment.py +0 -596
- zenml/integrations/kserve/steps/__init__.py +0 -22
- zenml/integrations/kserve/steps/kserve_deployer.py +0 -472
- zenml/integrations/kserve/steps/kserve_step_utils.py +0 -293
- zenml/integrations/kubeflow/utils.py +0 -96
- zenml/lineage_graph/lineage_graph.py +0 -244
- zenml/lineage_graph/node/artifact_node.py +0 -52
- zenml/lineage_graph/node/step_node.py +0 -41
- zenml/models/v2/base/internal.py +0 -37
- zenml/models/v2/base/update.py +0 -40
- zenml/models/v2/misc/hub_plugin_models.py +0 -79
- zenml/new/pipelines/deserialization_utils.py +0 -291
- zenml/new/pipelines/model_utils.py +0 -72
- zenml/new/pipelines/pipeline_decorator.py +0 -109
- zenml/new/steps/step_decorator.py +0 -160
- zenml/pipelines/base_pipeline.py +0 -274
- zenml/post_execution/pipeline.py +0 -58
- zenml/post_execution/pipeline_run.py +0 -55
- zenml/services/service_registry.py +0 -214
- zenml/services/terraform/__init__.py +0 -14
- zenml/services/terraform/terraform_service.py +0 -441
- zenml/steps/step_environment.py +0 -108
- zenml/steps/step_output.py +0 -36
- zenml/utils/mlstacks_utils.py +0 -635
- zenml/utils/terraform_utils.py +0 -42
- zenml/zen_server/dashboard/_redirects +0 -1
- zenml/zen_server/dashboard/asset-manifest.json +0 -131
- zenml/zen_server/dashboard/manifest.json +0 -25
- zenml/zen_server/dashboard/precache-manifest.c139638dcc4d9d3425353266447a2fad.js +0 -462
- zenml/zen_server/dashboard/robots.txt +0 -2
- zenml/zen_server/dashboard/service-worker.js +0 -39
- zenml/zen_server/dashboard/static/css/2.5b37d44a.chunk.css +0 -16
- zenml/zen_server/dashboard/static/css/2.5b37d44a.chunk.css.map +0 -1
- zenml/zen_server/dashboard/static/css/main.77e46c35.chunk.css +0 -2
- zenml/zen_server/dashboard/static/css/main.77e46c35.chunk.css.map +0 -1
- zenml/zen_server/dashboard/static/js/2.bb4cef22.chunk.js +0 -3
- zenml/zen_server/dashboard/static/js/2.bb4cef22.chunk.js.LICENSE.txt +0 -95
- zenml/zen_server/dashboard/static/js/2.bb4cef22.chunk.js.map +0 -1
- zenml/zen_server/dashboard/static/js/main.270838b4.chunk.js +0 -2
- zenml/zen_server/dashboard/static/js/main.270838b4.chunk.js.map +0 -1
- zenml/zen_server/dashboard/static/js/runtime-main.bfca2edd.js +0 -2
- zenml/zen_server/dashboard/static/js/runtime-main.bfca2edd.js.map +0 -1
- zenml/zen_server/dashboard/static/media/AlertTriangle.28aee535.svg +0 -5
- zenml/zen_server/dashboard/static/media/ArrowSquareOut.abfb9bc7.svg +0 -5
- zenml/zen_server/dashboard/static/media/Back.86c23a22.svg +0 -4
- zenml/zen_server/dashboard/static/media/BookOpen.5cb101ff.svg +0 -4
- zenml/zen_server/dashboard/static/media/BoundingBox.1eb98717.svg +0 -10
- zenml/zen_server/dashboard/static/media/Burger.9b1c67d7.svg +0 -3
- zenml/zen_server/dashboard/static/media/Cached.2381fb8d.svg +0 -1
- zenml/zen_server/dashboard/static/media/Calendar.356e11c7.svg +0 -3
- zenml/zen_server/dashboard/static/media/ChartBarHorizontal.0247447b.svg +0 -6
- zenml/zen_server/dashboard/static/media/ChartLine.0d79e18d.svg +0 -4
- zenml/zen_server/dashboard/static/media/ChatDots.2e1c9211.svg +0 -6
- zenml/zen_server/dashboard/static/media/Check.dad6beb2.svg +0 -3
- zenml/zen_server/dashboard/static/media/CheckCircleFilled.c19566d0.svg +0 -3
- zenml/zen_server/dashboard/static/media/Checkbox.af50e31e.svg +0 -3
- zenml/zen_server/dashboard/static/media/ChevronDown.f860ce32.svg +0 -3
- zenml/zen_server/dashboard/static/media/ChevronDownLight.6642d756.svg +0 -3
- zenml/zen_server/dashboard/static/media/ChevronLeft.f6edfcdb.svg +0 -3
- zenml/zen_server/dashboard/static/media/CircleCheck.f98fd6ca.svg +0 -1
- zenml/zen_server/dashboard/static/media/Clock.ffc9de95.svg +0 -3
- zenml/zen_server/dashboard/static/media/Close.74e9efbc.svg +0 -5
- zenml/zen_server/dashboard/static/media/CloseWithBorder.6960930a.svg +0 -3
- zenml/zen_server/dashboard/static/media/CloseWithoutBorder.cd6f71df.svg +0 -3
- zenml/zen_server/dashboard/static/media/CloudArrowUp.0aecb235.svg +0 -6
- zenml/zen_server/dashboard/static/media/Code.ef0f33b5.svg +0 -3
- zenml/zen_server/dashboard/static/media/Config.0be63f8a.svg +0 -1
- zenml/zen_server/dashboard/static/media/Connector.9fd46ef1.svg +0 -10
- zenml/zen_server/dashboard/static/media/Copy.36e2112a.svg +0 -1
- zenml/zen_server/dashboard/static/media/Dashboard.d05787e0.svg +0 -3
- zenml/zen_server/dashboard/static/media/Data.b1c3b5f8.svg +0 -3
- zenml/zen_server/dashboard/static/media/Delete.3c361b28.svg +0 -8
- zenml/zen_server/dashboard/static/media/Docs.7541d478.svg +0 -7
- zenml/zen_server/dashboard/static/media/Download.fba04d87.svg +0 -5
- zenml/zen_server/dashboard/static/media/Edit.490eb294.svg +0 -6
- zenml/zen_server/dashboard/static/media/EmptyRightArrow.23749d01.svg +0 -3
- zenml/zen_server/dashboard/static/media/Example.6396cd37.svg +0 -5
- zenml/zen_server/dashboard/static/media/Extension.1394cd4a.svg +0 -3
- zenml/zen_server/dashboard/static/media/Eye.d9e4ee62.svg +0 -4
- zenml/zen_server/dashboard/static/media/Failed.0213c1a0.svg +0 -1
- zenml/zen_server/dashboard/static/media/FileText.1f15bacd.svg +0 -7
- zenml/zen_server/dashboard/static/media/Filter.ab6b9c0d.svg +0 -3
- zenml/zen_server/dashboard/static/media/Folders.12b29887.svg +0 -5
- zenml/zen_server/dashboard/static/media/FunnelFill.6df4c143.svg +0 -3
- zenml/zen_server/dashboard/static/media/GitCommit.7dd9c2aa.svg +0 -5
- zenml/zen_server/dashboard/static/media/GitHub_Logo.cefc2023.png +0 -0
- zenml/zen_server/dashboard/static/media/Graph.2c63a892.svg +0 -11
- zenml/zen_server/dashboard/static/media/History.08329240.svg +0 -3
- zenml/zen_server/dashboard/static/media/Home.0843b0d5.svg +0 -3
- zenml/zen_server/dashboard/static/media/ImageBuilder.ea762d9c.svg +0 -6
- zenml/zen_server/dashboard/static/media/InProgress.304a0edc.svg +0 -1
- zenml/zen_server/dashboard/static/media/Info.9fe10c5c.svg +0 -3
- zenml/zen_server/dashboard/static/media/KeyboardReturn.491afbe3.svg +0 -3
- zenml/zen_server/dashboard/static/media/Link.72bbb55d.svg +0 -4
- zenml/zen_server/dashboard/static/media/Lock.30f5e1fe.svg +0 -5
- zenml/zen_server/dashboard/static/media/Lock2.a769ea52.svg +0 -3
- zenml/zen_server/dashboard/static/media/LockKey.92f21621.svg +0 -6
- zenml/zen_server/dashboard/static/media/Logs.8bf4d005.svg +0 -5
- zenml/zen_server/dashboard/static/media/MinusCircle.4188f418.svg +0 -4
- zenml/zen_server/dashboard/static/media/ModelRegistry.f0de050a.svg +0 -6
- zenml/zen_server/dashboard/static/media/MultiUser.a2ba7c67.svg +0 -10
- zenml/zen_server/dashboard/static/media/PaginationFirst.92628634.svg +0 -4
- zenml/zen_server/dashboard/static/media/PaginationLast.00d3c732.svg +0 -4
- zenml/zen_server/dashboard/static/media/PaginationNext.86158845.svg +0 -3
- zenml/zen_server/dashboard/static/media/PaginationPrev.60c18a88.svg +0 -3
- zenml/zen_server/dashboard/static/media/Pen.f2d831d4.svg +0 -6
- zenml/zen_server/dashboard/static/media/PhotoCamera.179d6d4c.svg +0 -3
- zenml/zen_server/dashboard/static/media/Pipeline.30d298b0.svg +0 -7
- zenml/zen_server/dashboard/static/media/Plus.5aa1c16b.svg +0 -3
- zenml/zen_server/dashboard/static/media/PlusCircle.92d860dd.svg +0 -5
- zenml/zen_server/dashboard/static/media/Repositories.71a36b8c.svg +0 -3
- zenml/zen_server/dashboard/static/media/RightArrow.f30d3871.svg +0 -29
- zenml/zen_server/dashboard/static/media/Rocket.63bf7b9d.svg +0 -3
- zenml/zen_server/dashboard/static/media/RocketLaunch.1bff2b59.svg +0 -6
- zenml/zen_server/dashboard/static/media/Rubik-Medium.c87313aa.ttf +0 -0
- zenml/zen_server/dashboard/static/media/Rubik-Regular.b3d0902b.ttf +0 -0
- zenml/zen_server/dashboard/static/media/Run.daec4fb2.svg +0 -6
- zenml/zen_server/dashboard/static/media/Search.d1afcce5.svg +0 -4
- zenml/zen_server/dashboard/static/media/Settings.59ca73ae.svg +0 -4
- zenml/zen_server/dashboard/static/media/Share2.46c3ff66.svg +0 -3
- zenml/zen_server/dashboard/static/media/SignOut.6aa718c5.svg +0 -3
- zenml/zen_server/dashboard/static/media/SimplePlus.5cf7ec20.svg +0 -3
- zenml/zen_server/dashboard/static/media/SingleUser.bef3a095.svg +0 -4
- zenml/zen_server/dashboard/static/media/SourceCodePro-Regular.b484b32f.ttf +0 -0
- zenml/zen_server/dashboard/static/media/Stack.19b604ac.svg +0 -5
- zenml/zen_server/dashboard/static/media/StackComponent.b1ba90b5.svg +0 -4
- zenml/zen_server/dashboard/static/media/Star.f0c25022.svg +0 -9
- zenml/zen_server/dashboard/static/media/StarOutline.94ca8cd9.svg +0 -3
- zenml/zen_server/dashboard/static/media/Storefront.4b4796fe.svg +0 -3
- zenml/zen_server/dashboard/static/media/Stream.543e3039.svg +0 -3
- zenml/zen_server/dashboard/static/media/SupportAgent.510ddf1f.svg +0 -8
- zenml/zen_server/dashboard/static/media/Table.77033750.svg +0 -6
- zenml/zen_server/dashboard/static/media/Tool.d5785486.svg +0 -3
- zenml/zen_server/dashboard/static/media/UserPlus.741a99d7.svg +0 -6
- zenml/zen_server/dashboard/static/media/Verified.0625b2a0.svg +0 -3
- zenml/zen_server/dashboard/static/media/addNew.4fb6c939.svg +0 -8
- zenml/zen_server/dashboard/static/media/arrowClose.cbd53f3f.svg +0 -3
- zenml/zen_server/dashboard/static/media/arrowOpen.6ceef0af.svg +0 -3
- zenml/zen_server/dashboard/static/media/check_small.30bc0138.svg +0 -3
- zenml/zen_server/dashboard/static/media/circleArrowSideClose.98d6013e.svg +0 -18
- zenml/zen_server/dashboard/static/media/circleArrowSideOpen.63653df6.svg +0 -18
- zenml/zen_server/dashboard/static/media/image.104fd14b.png +0 -0
- zenml/zen_server/dashboard/static/media/imageAddIcon.e83004a9.svg +0 -7
- zenml/zen_server/dashboard/static/media/logo.93333e5c.svg +0 -1
- zenml/zen_server/dashboard/static/media/logo_small.4204397d.svg +0 -3
- zenml/zen_server/dashboard/static/media/logo_white.d4b4414e.svg +0 -20
- zenml/zen_server/dashboard/static/media/notConnected.5e2c8ea7.svg +0 -8
- zenml/zen_server/dashboard/static/media/plugin-fallback.72c294e6.svg +0 -6
- zenml/zen_server/dashboard/static/media/share.bcd998b0.svg +0 -5
- zenml/zen_server/dashboard/static/media/stars.08a9b19a.svg +0 -8
- zenml/zen_server/deploy/terraform/__init__.py +0 -41
- zenml/zen_server/deploy/terraform/providers/__init__.py +0 -14
- zenml/zen_server/deploy/terraform/providers/aws_provider.py +0 -61
- zenml/zen_server/deploy/terraform/providers/azure_provider.py +0 -59
- zenml/zen_server/deploy/terraform/providers/gcp_provider.py +0 -59
- zenml/zen_server/deploy/terraform/providers/terraform_provider.py +0 -332
- zenml/zen_server/deploy/terraform/recipes/aws/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/aws/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/aws/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/aws/outputs.tf +0 -14
- zenml/zen_server/deploy/terraform/recipes/aws/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/aws/sql.tf +0 -62
- zenml/zen_server/deploy/terraform/recipes/aws/terraform.tf +0 -44
- zenml/zen_server/deploy/terraform/recipes/aws/variables.tf +0 -179
- zenml/zen_server/deploy/terraform/recipes/aws/vpc.tf +0 -47
- zenml/zen_server/deploy/terraform/recipes/aws/zen_server.tf +0 -111
- zenml/zen_server/deploy/terraform/recipes/azure/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/azure/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/azure/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/azure/key_vault.tf +0 -73
- zenml/zen_server/deploy/terraform/recipes/azure/outputs.tf +0 -14
- zenml/zen_server/deploy/terraform/recipes/azure/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/azure/rg.tf +0 -36
- zenml/zen_server/deploy/terraform/recipes/azure/sql.tf +0 -65
- zenml/zen_server/deploy/terraform/recipes/azure/terraform.tf +0 -52
- zenml/zen_server/deploy/terraform/recipes/azure/variables.tf +0 -188
- zenml/zen_server/deploy/terraform/recipes/azure/zen_server.tf +0 -111
- zenml/zen_server/deploy/terraform/recipes/gcp/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/gcp/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/gcp/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/gcp/outputs.tf +0 -14
- zenml/zen_server/deploy/terraform/recipes/gcp/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/gcp/sql.tf +0 -64
- zenml/zen_server/deploy/terraform/recipes/gcp/terraform.tf +0 -44
- zenml/zen_server/deploy/terraform/recipes/gcp/variables.tf +0 -183
- zenml/zen_server/deploy/terraform/recipes/gcp/zen_server.tf +0 -122
- zenml/zen_server/deploy/terraform/terraform_zen_server.py +0 -255
- zenml/zen_server/routers/run_metadata_endpoints.py +0 -97
- zenml_nightly-0.55.0.dev20240124.dist-info/METADATA +0 -438
- zenml_nightly-0.55.0.dev20240124.dist-info/RECORD +0 -1072
- {zenml_nightly-0.55.0.dev20240124.dist-info → zenml_nightly-0.72.0.dev20250116.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.55.0.dev20240124.dist-info → zenml_nightly-0.72.0.dev20250116.dist-info}/entry_points.txt +0 -0
zenml/cli/login.py
ADDED
@@ -0,0 +1,1053 @@
|
|
1
|
+
# Copyright (c) ZenML GmbH 2022. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at:
|
6
|
+
#
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
12
|
+
# or implied. See the License for the specific language governing
|
13
|
+
# permissions and limitations under the License.
|
14
|
+
"""CLI for managing ZenML server deployments."""
|
15
|
+
|
16
|
+
import ipaddress
|
17
|
+
import os
|
18
|
+
import re
|
19
|
+
import sys
|
20
|
+
import time
|
21
|
+
from typing import Any, Dict, Optional, Tuple, Union
|
22
|
+
from uuid import UUID
|
23
|
+
|
24
|
+
import click
|
25
|
+
|
26
|
+
from zenml.cli import utils as cli_utils
|
27
|
+
from zenml.cli.cli import cli
|
28
|
+
from zenml.config.global_config import GlobalConfiguration
|
29
|
+
from zenml.console import console
|
30
|
+
from zenml.enums import ServerProviderType, StoreType
|
31
|
+
from zenml.exceptions import (
|
32
|
+
AuthorizationException,
|
33
|
+
CredentialsNotValid,
|
34
|
+
IllegalOperationError,
|
35
|
+
)
|
36
|
+
from zenml.logger import get_logger
|
37
|
+
from zenml.login.credentials import ServerType
|
38
|
+
from zenml.login.pro.constants import ZENML_PRO_API_URL
|
39
|
+
from zenml.login.web_login import web_login
|
40
|
+
from zenml.zen_server.utils import (
|
41
|
+
connected_to_local_server,
|
42
|
+
get_local_server,
|
43
|
+
show_dashboard,
|
44
|
+
)
|
45
|
+
|
46
|
+
logger = get_logger(__name__)
|
47
|
+
|
48
|
+
|
49
|
+
def start_local_server(
|
50
|
+
docker: bool = False,
|
51
|
+
ip_address: Union[
|
52
|
+
ipaddress.IPv4Address, ipaddress.IPv6Address, None
|
53
|
+
] = None,
|
54
|
+
port: Optional[int] = None,
|
55
|
+
blocking: bool = False,
|
56
|
+
image: Optional[str] = None,
|
57
|
+
ngrok_token: Optional[str] = None,
|
58
|
+
restart: bool = False,
|
59
|
+
) -> None:
|
60
|
+
"""Start the ZenML dashboard locally and connect the client to it.
|
61
|
+
|
62
|
+
Args:
|
63
|
+
docker: Use a docker deployment instead of the local process.
|
64
|
+
ip_address: The IP address to bind the server to.
|
65
|
+
port: The port to bind the server to.
|
66
|
+
blocking: Block the CLI while the server is running.
|
67
|
+
image: A custom Docker image to use for the server, when the
|
68
|
+
`--docker` flag is set.
|
69
|
+
ngrok_token: An ngrok auth token to use for exposing the ZenML dashboard
|
70
|
+
on a public domain. Primarily used for accessing the dashboard in
|
71
|
+
Colab.
|
72
|
+
restart: Restart the local ZenML server if it is already running.
|
73
|
+
"""
|
74
|
+
from zenml.zen_server.deploy.deployer import LocalServerDeployer
|
75
|
+
|
76
|
+
if docker:
|
77
|
+
from zenml.utils.docker_utils import check_docker
|
78
|
+
|
79
|
+
if not check_docker():
|
80
|
+
cli_utils.error(
|
81
|
+
"Docker does not seem to be installed on your system. Please "
|
82
|
+
"install Docker to use the Docker ZenML server local "
|
83
|
+
"deployment or use one of the other deployment options."
|
84
|
+
)
|
85
|
+
provider = ServerProviderType.DOCKER
|
86
|
+
else:
|
87
|
+
if sys.platform == "win32" and not blocking:
|
88
|
+
cli_utils.error(
|
89
|
+
"Running the ZenML server locally as a background process is "
|
90
|
+
"not supported on Windows. Please use the `--blocking` flag "
|
91
|
+
"to run the server in blocking mode, or run the server in "
|
92
|
+
"a Docker container by setting `--docker` instead."
|
93
|
+
)
|
94
|
+
else:
|
95
|
+
pass
|
96
|
+
provider = ServerProviderType.DAEMON
|
97
|
+
if cli_utils.requires_mac_env_var_warning():
|
98
|
+
cli_utils.error(
|
99
|
+
"The `OBJC_DISABLE_INITIALIZE_FORK_SAFETY` environment variable "
|
100
|
+
"is recommended to run the ZenML server locally on a Mac. "
|
101
|
+
"Please set it to `YES` and try again."
|
102
|
+
)
|
103
|
+
|
104
|
+
deployer = LocalServerDeployer()
|
105
|
+
|
106
|
+
config_attrs: Dict[str, Any] = dict(
|
107
|
+
provider=provider,
|
108
|
+
)
|
109
|
+
if not docker:
|
110
|
+
config_attrs["blocking"] = blocking
|
111
|
+
elif image:
|
112
|
+
config_attrs["image"] = image
|
113
|
+
if port is not None:
|
114
|
+
config_attrs["port"] = port
|
115
|
+
if ip_address is not None:
|
116
|
+
config_attrs["ip_address"] = ip_address
|
117
|
+
|
118
|
+
from zenml.zen_server.deploy.deployment import LocalServerDeploymentConfig
|
119
|
+
|
120
|
+
server_config = LocalServerDeploymentConfig(**config_attrs)
|
121
|
+
if blocking:
|
122
|
+
deployer.remove_server()
|
123
|
+
cli_utils.declare(
|
124
|
+
"The local ZenML dashboard is about to deploy in a "
|
125
|
+
"blocking process."
|
126
|
+
)
|
127
|
+
|
128
|
+
server = deployer.deploy_server(server_config, restart=restart)
|
129
|
+
|
130
|
+
if not blocking:
|
131
|
+
deployer.connect_to_server()
|
132
|
+
|
133
|
+
if server.status and server.status.url:
|
134
|
+
cli_utils.declare(
|
135
|
+
f"The local ZenML dashboard is available at "
|
136
|
+
f"'{server.status.url}'."
|
137
|
+
)
|
138
|
+
show_dashboard(
|
139
|
+
local=True,
|
140
|
+
ngrok_token=ngrok_token,
|
141
|
+
)
|
142
|
+
|
143
|
+
|
144
|
+
def connect_to_server(
|
145
|
+
url: str,
|
146
|
+
api_key: Optional[str] = None,
|
147
|
+
verify_ssl: Union[str, bool] = True,
|
148
|
+
refresh: bool = False,
|
149
|
+
pro_server: bool = False,
|
150
|
+
) -> None:
|
151
|
+
"""Connect the client to a ZenML server or a SQL database.
|
152
|
+
|
153
|
+
Args:
|
154
|
+
url: The URL of the ZenML server or the SQL database to connect to.
|
155
|
+
api_key: The API key to use to authenticate with the ZenML server.
|
156
|
+
verify_ssl: Whether to verify the server's TLS certificate. If a string
|
157
|
+
is passed, it is interpreted as the path to a CA bundle file.
|
158
|
+
refresh: Whether to force a new login flow with the ZenML server.
|
159
|
+
pro_server: Whether the server is a ZenML Pro server.
|
160
|
+
"""
|
161
|
+
from zenml.login.credentials_store import get_credentials_store
|
162
|
+
from zenml.zen_stores.base_zen_store import BaseZenStore
|
163
|
+
|
164
|
+
url = url.rstrip("/")
|
165
|
+
|
166
|
+
store_type = BaseZenStore.get_store_type(url)
|
167
|
+
if store_type == StoreType.REST:
|
168
|
+
from zenml.zen_stores.rest_zen_store import RestZenStoreConfiguration
|
169
|
+
|
170
|
+
credentials_store = get_credentials_store()
|
171
|
+
if api_key:
|
172
|
+
cli_utils.declare(
|
173
|
+
f"Authenticating to ZenML server '{url}' using an API key..."
|
174
|
+
)
|
175
|
+
credentials_store.set_api_key(url, api_key)
|
176
|
+
elif pro_server:
|
177
|
+
# We don't have to do anything here assuming the user has already
|
178
|
+
# logged in to the ZenML Pro server using the ZenML Pro web login
|
179
|
+
# flow.
|
180
|
+
cli_utils.declare(f"Authenticating to ZenML server '{url}'...")
|
181
|
+
else:
|
182
|
+
if refresh or not credentials_store.has_valid_authentication(url):
|
183
|
+
cli_utils.declare(
|
184
|
+
f"Authenticating to ZenML server '{url}' using the web "
|
185
|
+
"login..."
|
186
|
+
)
|
187
|
+
web_login(url=url, verify_ssl=verify_ssl)
|
188
|
+
else:
|
189
|
+
cli_utils.declare(f"Connecting to ZenML server '{url}'...")
|
190
|
+
|
191
|
+
rest_store_config = RestZenStoreConfiguration(
|
192
|
+
url=url,
|
193
|
+
verify_ssl=verify_ssl,
|
194
|
+
)
|
195
|
+
try:
|
196
|
+
GlobalConfiguration().set_store(rest_store_config)
|
197
|
+
except IllegalOperationError:
|
198
|
+
cli_utils.error(
|
199
|
+
f"You do not have sufficient permissions to "
|
200
|
+
f"access the server at '{url}'."
|
201
|
+
)
|
202
|
+
except CredentialsNotValid as e:
|
203
|
+
cli_utils.error(f"Authorization error: {e}")
|
204
|
+
|
205
|
+
else:
|
206
|
+
from zenml.zen_stores.sql_zen_store import SqlZenStoreConfiguration
|
207
|
+
|
208
|
+
# Connect to a SQL database
|
209
|
+
sql_store_config = SqlZenStoreConfiguration(
|
210
|
+
url=url,
|
211
|
+
)
|
212
|
+
cli_utils.declare(f"Connecting to SQL database '{url}'...")
|
213
|
+
|
214
|
+
try:
|
215
|
+
GlobalConfiguration().set_store(sql_store_config)
|
216
|
+
except IllegalOperationError:
|
217
|
+
cli_utils.warning(
|
218
|
+
f"You do not have sufficient permissions to "
|
219
|
+
f"access the SQL database at '{url}'."
|
220
|
+
)
|
221
|
+
except CredentialsNotValid as e:
|
222
|
+
cli_utils.warning(f"Authorization error: {e}")
|
223
|
+
|
224
|
+
cli_utils.declare(f"Connected to SQL database '{url}'")
|
225
|
+
|
226
|
+
|
227
|
+
def connect_to_pro_server(
|
228
|
+
pro_server: Optional[str] = None,
|
229
|
+
api_key: Optional[str] = None,
|
230
|
+
refresh: bool = False,
|
231
|
+
pro_api_url: Optional[str] = None,
|
232
|
+
) -> None:
|
233
|
+
"""Connect the client to a ZenML Pro server.
|
234
|
+
|
235
|
+
Args:
|
236
|
+
pro_server: The UUID, name or URL of the ZenML Pro server to connect to.
|
237
|
+
If not provided, the web login flow will be initiated.
|
238
|
+
api_key: The API key to use to authenticate with the ZenML Pro server.
|
239
|
+
refresh: Whether to force a new login flow with the ZenML Pro server.
|
240
|
+
pro_api_url: The URL for the ZenML Pro API.
|
241
|
+
|
242
|
+
Raises:
|
243
|
+
ValueError: If incorrect parameters are provided.
|
244
|
+
AuthorizationException: If the user does not have access to the ZenML
|
245
|
+
Pro server.
|
246
|
+
"""
|
247
|
+
from zenml.login.credentials_store import get_credentials_store
|
248
|
+
from zenml.login.pro.client import ZenMLProClient
|
249
|
+
from zenml.login.pro.tenant.models import TenantStatus
|
250
|
+
|
251
|
+
pro_api_url = pro_api_url or ZENML_PRO_API_URL
|
252
|
+
|
253
|
+
server_id, server_url, server_name = None, None, None
|
254
|
+
login = False
|
255
|
+
if not pro_server:
|
256
|
+
login = True
|
257
|
+
if api_key:
|
258
|
+
raise ValueError(
|
259
|
+
"You must provide the URL of the ZenML Pro server when "
|
260
|
+
"connecting with an API key."
|
261
|
+
)
|
262
|
+
|
263
|
+
elif not re.match(r"^https?://", pro_server):
|
264
|
+
# The server argument is not a URL, so it must be a ZenML Pro server
|
265
|
+
# name or UUID.
|
266
|
+
try:
|
267
|
+
server_id = UUID(pro_server)
|
268
|
+
except ValueError:
|
269
|
+
# The server argument is not a UUID, so it must be a ZenML Pro
|
270
|
+
# server name.
|
271
|
+
server_name = pro_server
|
272
|
+
else:
|
273
|
+
server_url = pro_server
|
274
|
+
|
275
|
+
credentials_store = get_credentials_store()
|
276
|
+
if not credentials_store.has_valid_pro_authentication(pro_api_url):
|
277
|
+
# Without valid ZenML Pro credentials, we can only connect to a ZenML
|
278
|
+
# Pro server with an API key and we also need to know the URL of the
|
279
|
+
# server to connect to.
|
280
|
+
if api_key:
|
281
|
+
if server_url:
|
282
|
+
connect_to_server(server_url, api_key=api_key, pro_server=True)
|
283
|
+
return
|
284
|
+
else:
|
285
|
+
raise ValueError(
|
286
|
+
"You must provide the URL of the ZenML Pro server when "
|
287
|
+
"connecting with an API key."
|
288
|
+
)
|
289
|
+
else:
|
290
|
+
login = True
|
291
|
+
|
292
|
+
if login or refresh:
|
293
|
+
try:
|
294
|
+
token = web_login(
|
295
|
+
pro_api_url=pro_api_url,
|
296
|
+
)
|
297
|
+
except AuthorizationException as e:
|
298
|
+
cli_utils.error(f"Authorization error: {e}")
|
299
|
+
|
300
|
+
cli_utils.declare(
|
301
|
+
"You can now run 'zenml server list' to view the available ZenML "
|
302
|
+
"Pro servers and then 'zenml login <server-url-name-or-id>' to "
|
303
|
+
"connect to a specific server without having to log in again until "
|
304
|
+
"your session expires."
|
305
|
+
)
|
306
|
+
|
307
|
+
tenant_id: Optional[str] = None
|
308
|
+
if token.device_metadata:
|
309
|
+
tenant_id = token.device_metadata.get("tenant_id")
|
310
|
+
|
311
|
+
if tenant_id is None and pro_server is None:
|
312
|
+
# This is not really supposed to happen, because the implementation
|
313
|
+
# of the web login workflow should always return a tenant ID, but
|
314
|
+
# we're handling it just in case.
|
315
|
+
cli_utils.declare(
|
316
|
+
"A valid server was not selected during the login process. "
|
317
|
+
"Please run `zenml server list` to display a list of available "
|
318
|
+
"servers and then `zenml login <server-url-name-or-id>` to "
|
319
|
+
"connect to a server."
|
320
|
+
)
|
321
|
+
return
|
322
|
+
|
323
|
+
# The server selected during the web login process overrides any
|
324
|
+
# server argument passed to the command.
|
325
|
+
server_id = UUID(tenant_id)
|
326
|
+
|
327
|
+
client = ZenMLProClient(pro_api_url)
|
328
|
+
|
329
|
+
if server_id:
|
330
|
+
server = client.tenant.get(server_id)
|
331
|
+
elif server_url:
|
332
|
+
servers = client.tenant.list(url=server_url, member_only=True)
|
333
|
+
if not servers:
|
334
|
+
raise AuthorizationException(
|
335
|
+
f"The '{server_url}' URL belongs to a ZenML Pro server, "
|
336
|
+
"but it doesn't look like you have access to it. Please "
|
337
|
+
"check the server URL and your permissions and try again."
|
338
|
+
)
|
339
|
+
|
340
|
+
server = servers[0]
|
341
|
+
elif server_name:
|
342
|
+
servers = client.tenant.list(tenant_name=server_name, member_only=True)
|
343
|
+
if not servers:
|
344
|
+
raise AuthorizationException(
|
345
|
+
f"No ZenML Pro server with the name '{server_name}' exists "
|
346
|
+
"or you don't have access to it. Please check the server name "
|
347
|
+
"and your permissions and try again."
|
348
|
+
)
|
349
|
+
server = servers[0]
|
350
|
+
else:
|
351
|
+
raise ValueError(
|
352
|
+
"No server ID, URL, or name was provided. Please provide one of "
|
353
|
+
"these values to connect to a ZenML Pro server."
|
354
|
+
)
|
355
|
+
|
356
|
+
server_id = server.id
|
357
|
+
|
358
|
+
if server.status == TenantStatus.PENDING:
|
359
|
+
with console.status(
|
360
|
+
f"Waiting for your `{server.name}` ZenML Pro server to be set up..."
|
361
|
+
):
|
362
|
+
timeout = 180 # 3 minutes
|
363
|
+
while True:
|
364
|
+
time.sleep(5)
|
365
|
+
server = client.tenant.get(server_id)
|
366
|
+
if server.status != TenantStatus.PENDING:
|
367
|
+
break
|
368
|
+
timeout -= 5
|
369
|
+
if timeout <= 0:
|
370
|
+
cli_utils.error(
|
371
|
+
f"Your `{server.name}` ZenML Pro server is taking "
|
372
|
+
"longer than expected to set up. Please try again "
|
373
|
+
"later or manage the server state by visiting the "
|
374
|
+
f"ZenML Pro dashboard at {server.dashboard_url}."
|
375
|
+
)
|
376
|
+
|
377
|
+
if server.status == TenantStatus.FAILED:
|
378
|
+
cli_utils.error(
|
379
|
+
f"Your `{server.name}` ZenML Pro server is currently in a "
|
380
|
+
"failed state. Please manage the server state by visiting the "
|
381
|
+
f"ZenML Pro dashboard at {server.dashboard_url}, or contact "
|
382
|
+
"your server administrator."
|
383
|
+
)
|
384
|
+
|
385
|
+
elif server.status == TenantStatus.DEACTIVATED:
|
386
|
+
cli_utils.error(
|
387
|
+
f"Your `{server.name}` ZenML Pro server is currently "
|
388
|
+
"deactivated. Please manage the server state by visiting the "
|
389
|
+
f"ZenML Pro dashboard at {server.dashboard_url}, or contact "
|
390
|
+
"your server administrator."
|
391
|
+
)
|
392
|
+
|
393
|
+
elif server.status == TenantStatus.AVAILABLE:
|
394
|
+
if not server.url:
|
395
|
+
cli_utils.error(
|
396
|
+
f"The ZenML Pro server '{server.name}' is not currently "
|
397
|
+
f"running. Visit the ZenML Pro dashboard to manage the server "
|
398
|
+
f"status at: {server.dashboard_url}"
|
399
|
+
)
|
400
|
+
else:
|
401
|
+
cli_utils.error(
|
402
|
+
f"Your `{server.name}` ZenML Pro server is currently "
|
403
|
+
"being deleted. Please select a different server or set up a "
|
404
|
+
"new server by visiting the ZenML Pro dashboard at "
|
405
|
+
f"{server.dashboard_organization_url}."
|
406
|
+
)
|
407
|
+
|
408
|
+
cli_utils.declare(
|
409
|
+
f"Connecting to ZenML Pro server: {server.name} [{str(server.id)}] "
|
410
|
+
)
|
411
|
+
|
412
|
+
connect_to_server(server.url, api_key=api_key, pro_server=True)
|
413
|
+
|
414
|
+
# Update the stored server info with more accurate data taken from the
|
415
|
+
# ZenML Pro tenant object.
|
416
|
+
credentials_store.update_server_info(server.url, server)
|
417
|
+
|
418
|
+
cli_utils.declare(f"Connected to ZenML Pro server: {server.name}.")
|
419
|
+
|
420
|
+
|
421
|
+
def is_pro_server(
|
422
|
+
url: str,
|
423
|
+
) -> Tuple[Optional[bool], Optional[str]]:
|
424
|
+
"""Check if the server at the given URL is a ZenML Pro server.
|
425
|
+
|
426
|
+
Args:
|
427
|
+
url: The URL of the server to check.
|
428
|
+
|
429
|
+
Returns:
|
430
|
+
True if the server is a ZenML Pro server, False otherwise, and the
|
431
|
+
extracted pro API URL if the server is a ZenML Pro server, or None if
|
432
|
+
no information could be extracted.
|
433
|
+
"""
|
434
|
+
from zenml.login.credentials_store import get_credentials_store
|
435
|
+
from zenml.login.server_info import get_server_info
|
436
|
+
|
437
|
+
# First, check the credentials store
|
438
|
+
credentials_store = get_credentials_store()
|
439
|
+
credentials = credentials_store.get_credentials(url)
|
440
|
+
if credentials:
|
441
|
+
if credentials.type == ServerType.PRO:
|
442
|
+
return True, credentials.pro_api_url
|
443
|
+
else:
|
444
|
+
return False, None
|
445
|
+
|
446
|
+
# Next, make a request to the server itself
|
447
|
+
server_info = get_server_info(url)
|
448
|
+
if not server_info:
|
449
|
+
return None, None
|
450
|
+
|
451
|
+
if server_info.is_pro_server():
|
452
|
+
return True, server_info.pro_api_url
|
453
|
+
|
454
|
+
return False, None
|
455
|
+
|
456
|
+
|
457
|
+
def _fail_if_authentication_environment_variables_set() -> None:
|
458
|
+
"""Fail if any of the authentication environment variables are set."""
|
459
|
+
environment_variables = [
|
460
|
+
"ZENML_STORE_URL",
|
461
|
+
"ZENML_STORE_API_KEY",
|
462
|
+
"ZENML_STORE_USERNAME",
|
463
|
+
"ZENML_STORE_PASSWORD",
|
464
|
+
]
|
465
|
+
|
466
|
+
if any(env_var in os.environ for env_var in environment_variables):
|
467
|
+
cli_utils.error(
|
468
|
+
"You're running to login/logout while having one of the "
|
469
|
+
f"{environment_variables} environment variables set. "
|
470
|
+
"If you want to use those environment variables to authenticate "
|
471
|
+
"to your ZenML server, there is no need to login/logout, you can "
|
472
|
+
"start interacting with your server right away. If you want to use "
|
473
|
+
"the `zenml login` command for authentication, please unset these "
|
474
|
+
"environment variables first."
|
475
|
+
)
|
476
|
+
|
477
|
+
|
478
|
+
@cli.command(
|
479
|
+
"login",
|
480
|
+
help=(
|
481
|
+
"""Login to a ZenML server.
|
482
|
+
|
483
|
+
Call `zenml login` to connect and authenticate your client to a ZenML
|
484
|
+
server. This can be used with ZenML Pro servers or self-hosted ZenML
|
485
|
+
servers. The same command can also be used to start and connect to a
|
486
|
+
local ZenML server deployment running on your machine and managed by the
|
487
|
+
ZenML CLI.
|
488
|
+
|
489
|
+
Quick start:
|
490
|
+
|
491
|
+
* To connect to a ZenML Pro server, simply run: `zenml login`. This
|
492
|
+
also works if you have never signed up for ZenML Pro before and is a
|
493
|
+
great way to get started with the ZenML Pro trial in less than 2 minutes
|
494
|
+
hassle-free.
|
495
|
+
|
496
|
+
* To connect to any remote ZenML server, run: `zenml login <server-url>`
|
497
|
+
|
498
|
+
* To start a local ZenML server and connect to it, run:
|
499
|
+
`zenml login --local`
|
500
|
+
|
501
|
+
When used without any arguments, the command has a different behavior based
|
502
|
+
on the current client state:
|
503
|
+
|
504
|
+
* if the client is not connected to a non-local ZenML server, the command
|
505
|
+
will take the user to the ZenML Pro login / signup page to authenticate
|
506
|
+
and connect to a ZenML Pro server.
|
507
|
+
|
508
|
+
* if the client is already connected to a non-local ZenML server, the
|
509
|
+
command triggers a new web login flow with the same server. This allows
|
510
|
+
you to simply call `zenml login` again when your CLI session expires to
|
511
|
+
refresh the current session and continue using the same server. The
|
512
|
+
`--pro` flag can be used to launch a ZenML Pro server login regardless
|
513
|
+
of the current client state.
|
514
|
+
|
515
|
+
This command accepts an optional SERVER argument. This is meant to
|
516
|
+
be used to log in to a specific ZenML server and easily switch between
|
517
|
+
different ZenML servers that the client is already logged in to.
|
518
|
+
The SERVER argument can be one of the following:
|
519
|
+
|
520
|
+
* a URL to a ZenML server
|
521
|
+
|
522
|
+
* a ZenML Pro server name
|
523
|
+
|
524
|
+
* a ZenML Pro server UUID
|
525
|
+
|
526
|
+
* a SQL database URL in the format `mysql://<username>:<password>@<host>:<port>/<database>`
|
527
|
+
|
528
|
+
NOTE: Passing a SERVER argument will not trigger a web login flow if the
|
529
|
+
current session is still valid. To force a new login flow to be triggered
|
530
|
+
to re-authenticate with the target server regardless of the current CLI
|
531
|
+
session state, you can pass the `--refresh` flag.
|
532
|
+
|
533
|
+
The CLI can be authenticated to multiple ZenML servers at the same time,
|
534
|
+
even though it can only be connected to one server at a time. You can list
|
535
|
+
all the ZenML servers that the client is currently authenticated to by
|
536
|
+
running `zenml server list`. Any of these servers can be used as the SERVER
|
537
|
+
argument to connect to them.
|
538
|
+
|
539
|
+
When the `--local` flag is used, the command will start a local ZenML
|
540
|
+
server running as a daemon process or a Docker container on your machine.
|
541
|
+
The following options can be used to customize the local server deployment:
|
542
|
+
|
543
|
+
* `--blocking`: run the local ZenML server in blocking mode. Use this to
|
544
|
+
run the server as a foreground process instead of a daemon. The CLI will
|
545
|
+
not return until the server exits or is stopped with CTRL+C
|
546
|
+
|
547
|
+
* `--docker`: start the local ZenML server as a Docker container instead
|
548
|
+
of a local process
|
549
|
+
|
550
|
+
* `--port`: use a custom TCP port value for the local ZenML server
|
551
|
+
|
552
|
+
* `--ip-address`: have the local ZenML server listen on an IP address
|
553
|
+
different than the default localhost
|
554
|
+
|
555
|
+
* `--image`: use a custom Docker image for the local Docker server. Only
|
556
|
+
relevant when `--docker` is also set
|
557
|
+
|
558
|
+
* `--ngrok-token`: specify an ngrok auth token to use for exposing the
|
559
|
+
local ZenML dashboard on a public domain. Primarily used for accessing
|
560
|
+
the dashboard in Google Colab
|
561
|
+
|
562
|
+
* `--restart`: force a restart of the local ZenML server.
|
563
|
+
|
564
|
+
The `--api-key` flag can be used to authenticate with a ZenML server using
|
565
|
+
an API key instead of the web login flow.
|
566
|
+
|
567
|
+
Examples:
|
568
|
+
|
569
|
+
* connect to a ZenML Pro server using the web login flow:
|
570
|
+
|
571
|
+
zenml login
|
572
|
+
|
573
|
+
* connect to a remote ZenML server using the web login flow:
|
574
|
+
|
575
|
+
zenml login https://zenml.example.com
|
576
|
+
|
577
|
+
* start a local ZenML server running as a background daemon process and
|
578
|
+
connect to it:
|
579
|
+
|
580
|
+
zenml login --local
|
581
|
+
|
582
|
+
* start a local ZenML server running as a docker container and
|
583
|
+
connect to it:
|
584
|
+
|
585
|
+
zenml login --local --docker
|
586
|
+
|
587
|
+
* login and connect to a ZenML server with an API key:
|
588
|
+
|
589
|
+
zenml login https://zenml.example.com --api-key
|
590
|
+
"""
|
591
|
+
),
|
592
|
+
)
|
593
|
+
@click.argument("server", type=str, required=False)
|
594
|
+
@click.option(
|
595
|
+
"--pro",
|
596
|
+
is_flag=True,
|
597
|
+
help="Login to ZenML Pro.",
|
598
|
+
default=False,
|
599
|
+
type=click.BOOL,
|
600
|
+
)
|
601
|
+
@click.option(
|
602
|
+
"--refresh",
|
603
|
+
is_flag=True,
|
604
|
+
help="Force a new login flow with the ZenML server, even if the client "
|
605
|
+
"is already authenticated.",
|
606
|
+
default=False,
|
607
|
+
type=click.BOOL,
|
608
|
+
)
|
609
|
+
@click.option(
|
610
|
+
"--api-key",
|
611
|
+
help="Use an API key to authenticate with a ZenML server. If "
|
612
|
+
"omitted, the web login will be used. If set, you will be prompted "
|
613
|
+
"to enter the API key.",
|
614
|
+
is_flag=True,
|
615
|
+
default=False,
|
616
|
+
type=click.BOOL,
|
617
|
+
)
|
618
|
+
@click.option(
|
619
|
+
"--no-verify-ssl",
|
620
|
+
is_flag=True,
|
621
|
+
help="Whether to verify the server's TLS certificate",
|
622
|
+
default=False,
|
623
|
+
)
|
624
|
+
@click.option(
|
625
|
+
"--ssl-ca-cert",
|
626
|
+
help="A path to a CA bundle file to use to verify the server's TLS "
|
627
|
+
"certificate or the CA bundle value itself",
|
628
|
+
required=False,
|
629
|
+
type=str,
|
630
|
+
)
|
631
|
+
@click.option(
|
632
|
+
"--local",
|
633
|
+
is_flag=True,
|
634
|
+
help="Start a local ZenML server as a background process and connect the "
|
635
|
+
"client to it.",
|
636
|
+
default=False,
|
637
|
+
type=click.BOOL,
|
638
|
+
)
|
639
|
+
@click.option(
|
640
|
+
"--docker",
|
641
|
+
is_flag=True,
|
642
|
+
help="Start a local ZenML server as a Docker container instead of a local "
|
643
|
+
"background process. Only used when running `zenml login --local`.",
|
644
|
+
default=False,
|
645
|
+
type=click.BOOL,
|
646
|
+
)
|
647
|
+
@click.option(
|
648
|
+
"--restart",
|
649
|
+
is_flag=True,
|
650
|
+
help="Force a restart of the local ZenML server. Only used when running "
|
651
|
+
"`zenml login --local`.",
|
652
|
+
default=False,
|
653
|
+
type=click.BOOL,
|
654
|
+
)
|
655
|
+
@click.option(
|
656
|
+
"--port",
|
657
|
+
type=int,
|
658
|
+
default=None,
|
659
|
+
help="Use a custom TCP port value for the local ZenML server. Only used "
|
660
|
+
"when running `zenml login --local`.",
|
661
|
+
)
|
662
|
+
@click.option(
|
663
|
+
"--ip-address",
|
664
|
+
type=ipaddress.ip_address,
|
665
|
+
default=None,
|
666
|
+
help="Have the local ZenML server listen on an IP address different than "
|
667
|
+
"the default localhost. Only used when running `zenml login --local`.",
|
668
|
+
)
|
669
|
+
@click.option(
|
670
|
+
"--blocking",
|
671
|
+
is_flag=True,
|
672
|
+
help="Run the local ZenML server in blocking mode. The CLI will not return "
|
673
|
+
"until the server exits or is stopped with CTRL+C. Only used when running "
|
674
|
+
"`zenml login --local`.",
|
675
|
+
default=False,
|
676
|
+
type=click.BOOL,
|
677
|
+
)
|
678
|
+
@click.option(
|
679
|
+
"--image",
|
680
|
+
type=str,
|
681
|
+
default=None,
|
682
|
+
help="Use a custom Docker image for the local ZenML server. Only used when "
|
683
|
+
"running `zenml login --local --docker`.",
|
684
|
+
)
|
685
|
+
@click.option(
|
686
|
+
"--ngrok-token",
|
687
|
+
type=str,
|
688
|
+
default=None,
|
689
|
+
help="Specify an ngrok auth token to use for exposing the local ZenML "
|
690
|
+
"dashboard on a public domain. Primarily used for accessing the "
|
691
|
+
"dashboard in Colab. Only used when running `zenml login --local`.",
|
692
|
+
)
|
693
|
+
@click.option(
|
694
|
+
"--pro-api-url",
|
695
|
+
type=str,
|
696
|
+
default=None,
|
697
|
+
help="Custom URL for the ZenML Pro API. Useful when connecting "
|
698
|
+
"to a self-hosted ZenML Pro deployment.",
|
699
|
+
)
|
700
|
+
def login(
|
701
|
+
server: Optional[str] = None,
|
702
|
+
pro: bool = False,
|
703
|
+
refresh: bool = False,
|
704
|
+
api_key: bool = False,
|
705
|
+
no_verify_ssl: bool = False,
|
706
|
+
ssl_ca_cert: Optional[str] = None,
|
707
|
+
local: bool = False,
|
708
|
+
docker: bool = False,
|
709
|
+
restart: bool = False,
|
710
|
+
ip_address: Union[
|
711
|
+
ipaddress.IPv4Address, ipaddress.IPv6Address, None
|
712
|
+
] = None,
|
713
|
+
port: Optional[int] = None,
|
714
|
+
blocking: bool = False,
|
715
|
+
image: Optional[str] = None,
|
716
|
+
ngrok_token: Optional[str] = None,
|
717
|
+
pro_api_url: Optional[str] = None,
|
718
|
+
) -> None:
|
719
|
+
"""Connect to a remote ZenML server.
|
720
|
+
|
721
|
+
Args:
|
722
|
+
server: The URL where the ZenML server is reachable, or a ZenML Pro
|
723
|
+
server name or ID.
|
724
|
+
pro: Log in to a ZenML Pro server.
|
725
|
+
refresh: Force a new login flow with the ZenML server.
|
726
|
+
api_key: Whether to use an API key to authenticate with the ZenML
|
727
|
+
server.
|
728
|
+
no_verify_ssl: Whether to verify the server's TLS certificate.
|
729
|
+
ssl_ca_cert: A path to a CA bundle to use to verify the server's TLS
|
730
|
+
certificate or the CA bundle value itself.
|
731
|
+
local: Start a local ZenML server and connect the client to it.
|
732
|
+
docker: Use a local Docker server instead of a local process.
|
733
|
+
restart: Force a restart of the local ZenML server.
|
734
|
+
ip_address: The IP address to bind the local server to.
|
735
|
+
port: The port to bind the local server to.
|
736
|
+
blocking: Block the CLI while the local server is running.
|
737
|
+
image: A custom Docker image to use for the local Docker server, when
|
738
|
+
the `docker` flag is set.
|
739
|
+
ngrok_token: An ngrok auth token to use for exposing the local ZenML
|
740
|
+
dashboard on a public domain. Primarily used for accessing the
|
741
|
+
dashboard in Colab.
|
742
|
+
pro_api_url: Custom URL for the ZenML Pro API.
|
743
|
+
"""
|
744
|
+
_fail_if_authentication_environment_variables_set()
|
745
|
+
|
746
|
+
if local:
|
747
|
+
if api_key:
|
748
|
+
cli_utils.error(
|
749
|
+
"An API key cannot be used with the local ZenML server."
|
750
|
+
)
|
751
|
+
|
752
|
+
start_local_server(
|
753
|
+
docker=docker,
|
754
|
+
ip_address=ip_address,
|
755
|
+
port=port,
|
756
|
+
blocking=blocking,
|
757
|
+
image=image,
|
758
|
+
ngrok_token=ngrok_token,
|
759
|
+
restart=restart,
|
760
|
+
)
|
761
|
+
return
|
762
|
+
|
763
|
+
if pro:
|
764
|
+
connect_to_pro_server(
|
765
|
+
pro_server=server,
|
766
|
+
refresh=True,
|
767
|
+
pro_api_url=pro_api_url,
|
768
|
+
)
|
769
|
+
return
|
770
|
+
|
771
|
+
# Get the server that the client is currently connected to, if any
|
772
|
+
current_non_local_server: Optional[str] = None
|
773
|
+
gc = GlobalConfiguration()
|
774
|
+
store_cfg = gc.store_configuration
|
775
|
+
if store_cfg.type == StoreType.REST:
|
776
|
+
if not connected_to_local_server():
|
777
|
+
current_non_local_server = store_cfg.url
|
778
|
+
|
779
|
+
api_key_value: Optional[str] = None
|
780
|
+
if api_key:
|
781
|
+
# Read the API key from the user
|
782
|
+
api_key_value = click.prompt(
|
783
|
+
"Please enter the API key for the ZenML server",
|
784
|
+
type=str,
|
785
|
+
hide_input=True,
|
786
|
+
)
|
787
|
+
|
788
|
+
verify_ssl: Union[str, bool] = (
|
789
|
+
ssl_ca_cert if ssl_ca_cert is not None else not no_verify_ssl
|
790
|
+
)
|
791
|
+
|
792
|
+
if server is not None:
|
793
|
+
if not re.match(r"^(https?|mysql)://", server):
|
794
|
+
# The server argument is a ZenML Pro server name or UUID
|
795
|
+
connect_to_pro_server(
|
796
|
+
pro_server=server,
|
797
|
+
api_key=api_key_value,
|
798
|
+
refresh=refresh,
|
799
|
+
pro_api_url=pro_api_url,
|
800
|
+
)
|
801
|
+
else:
|
802
|
+
# The server argument is a server URL
|
803
|
+
|
804
|
+
# First, try to discover if the server is a ZenML Pro server or not
|
805
|
+
server_is_pro, server_pro_api_url = is_pro_server(server)
|
806
|
+
if server_is_pro:
|
807
|
+
connect_to_pro_server(
|
808
|
+
pro_server=server,
|
809
|
+
api_key=api_key_value,
|
810
|
+
refresh=refresh,
|
811
|
+
# Prefer the pro API URL extracted from the server info if
|
812
|
+
# available
|
813
|
+
pro_api_url=server_pro_api_url or pro_api_url,
|
814
|
+
)
|
815
|
+
else:
|
816
|
+
connect_to_server(
|
817
|
+
url=server,
|
818
|
+
api_key=api_key_value,
|
819
|
+
verify_ssl=verify_ssl,
|
820
|
+
refresh=refresh,
|
821
|
+
)
|
822
|
+
|
823
|
+
elif current_non_local_server:
|
824
|
+
# The server argument is not provided, so we default to
|
825
|
+
# re-authenticating to the current non-local server that the client is
|
826
|
+
# connected to.
|
827
|
+
server = current_non_local_server
|
828
|
+
# First, try to discover if the server is a ZenML Pro server or not
|
829
|
+
server_is_pro, server_pro_api_url = is_pro_server(server)
|
830
|
+
|
831
|
+
if server_is_pro:
|
832
|
+
cli_utils.declare(
|
833
|
+
"No server argument was provided. Re-authenticating to "
|
834
|
+
"ZenML Pro...\n"
|
835
|
+
"Hint: You can run 'zenml login <server-url-id-or-name>' to "
|
836
|
+
"connect to a specific ZenML Pro server."
|
837
|
+
)
|
838
|
+
connect_to_pro_server(
|
839
|
+
pro_server=server,
|
840
|
+
api_key=api_key_value,
|
841
|
+
refresh=True,
|
842
|
+
# Prefer the pro API URL extracted from the server info if
|
843
|
+
# available
|
844
|
+
pro_api_url=server_pro_api_url or pro_api_url,
|
845
|
+
)
|
846
|
+
else:
|
847
|
+
cli_utils.declare(
|
848
|
+
"No server argument was provided. Re-authenticating to "
|
849
|
+
f"the current ZenML server at '{server}'...\n"
|
850
|
+
"Hint: You can run zenml login <server-url>' to connect "
|
851
|
+
"to a specific ZenML server. If you wish to login to a ZenML Pro "
|
852
|
+
"server, you can run 'zenml login --pro'."
|
853
|
+
)
|
854
|
+
connect_to_server(
|
855
|
+
url=server,
|
856
|
+
api_key=api_key_value,
|
857
|
+
verify_ssl=verify_ssl,
|
858
|
+
refresh=True,
|
859
|
+
)
|
860
|
+
else:
|
861
|
+
# If no server argument is provided, and the client is not currently
|
862
|
+
# connected to any non-local server, we default to logging in to ZenML
|
863
|
+
# Pro.
|
864
|
+
cli_utils.declare(
|
865
|
+
"No server argument was provided. Logging to ZenML Pro...\n"
|
866
|
+
"Hint: You can run 'zenml login --local' to start a local ZenML "
|
867
|
+
"server and connect to it or 'zenml login <server-url>' to connect "
|
868
|
+
"to a specific ZenML server. If you wish to login to a ZenML Pro "
|
869
|
+
"server, you can run 'zenml login --pro'."
|
870
|
+
)
|
871
|
+
connect_to_pro_server(
|
872
|
+
api_key=api_key_value,
|
873
|
+
pro_api_url=pro_api_url,
|
874
|
+
)
|
875
|
+
|
876
|
+
|
877
|
+
@cli.command(
|
878
|
+
"logout",
|
879
|
+
help="""Log out from a ZenML server and optionally clear stored credentials.
|
880
|
+
|
881
|
+
When called without any arguments, the command will log out from the ZenML
|
882
|
+
server that the client is currently connected to. If the client is connected
|
883
|
+
to a local ZenML server, the command will also shut down the local server.
|
884
|
+
|
885
|
+
Examples:
|
886
|
+
|
887
|
+
* log out from the ZenML server the client is currently connected to:
|
888
|
+
|
889
|
+
zenml logout
|
890
|
+
|
891
|
+
* disconnect from the local ZenML server and shut it down, if running:
|
892
|
+
|
893
|
+
zenml logout --local
|
894
|
+
|
895
|
+
* clear all stored credentials (API keys and tokens) for a specific ZenML
|
896
|
+
server:
|
897
|
+
|
898
|
+
zenml logout https://zenml.example.com --clear
|
899
|
+
|
900
|
+
* log out from all ZenML Pro servers and clear all stored ZenML Pro
|
901
|
+
credentials with the exception of API keys:
|
902
|
+
|
903
|
+
zenml logout --pro --clear
|
904
|
+
|
905
|
+
""",
|
906
|
+
)
|
907
|
+
@click.argument("server", type=str, required=False)
|
908
|
+
@click.option(
|
909
|
+
"--clear",
|
910
|
+
is_flag=True,
|
911
|
+
help="Clear all stored credentials for the specified server(s).",
|
912
|
+
default=False,
|
913
|
+
type=click.BOOL,
|
914
|
+
)
|
915
|
+
@click.option(
|
916
|
+
"--local",
|
917
|
+
is_flag=True,
|
918
|
+
help="Disconnect from and shut down the local ZenML server.",
|
919
|
+
default=False,
|
920
|
+
type=click.BOOL,
|
921
|
+
)
|
922
|
+
@click.option(
|
923
|
+
"--pro",
|
924
|
+
is_flag=True,
|
925
|
+
help="Log out from ZenML Pro. Use this with the --clear flag to clear all "
|
926
|
+
"stored ZenML Pro credentials with the exception of API keys.",
|
927
|
+
default=False,
|
928
|
+
type=click.BOOL,
|
929
|
+
)
|
930
|
+
@click.option(
|
931
|
+
"--pro-api-url",
|
932
|
+
type=str,
|
933
|
+
default=None,
|
934
|
+
help="Custom URL for the ZenML Pro API. Useful when disconnecting "
|
935
|
+
"from a self-hosted ZenML Pro deployment.",
|
936
|
+
)
|
937
|
+
def logout(
|
938
|
+
server: Optional[str] = None,
|
939
|
+
local: bool = False,
|
940
|
+
clear: bool = False,
|
941
|
+
pro: bool = False,
|
942
|
+
pro_api_url: Optional[str] = None,
|
943
|
+
) -> None:
|
944
|
+
"""Disconnect from a ZenML server.
|
945
|
+
|
946
|
+
Args:
|
947
|
+
server: The URL of the ZenML server to disconnect from.
|
948
|
+
clear: Clear all stored credentials and tokens.
|
949
|
+
local: Disconnect from the local ZenML server.
|
950
|
+
pro: Log out from ZenML Pro.
|
951
|
+
pro_api_url: Custom URL for the ZenML Pro API.
|
952
|
+
"""
|
953
|
+
from zenml.login.credentials_store import get_credentials_store
|
954
|
+
|
955
|
+
_fail_if_authentication_environment_variables_set()
|
956
|
+
|
957
|
+
credentials_store = get_credentials_store()
|
958
|
+
gc = GlobalConfiguration()
|
959
|
+
store_cfg = gc.store_configuration
|
960
|
+
|
961
|
+
if pro:
|
962
|
+
if server:
|
963
|
+
cli_utils.error(
|
964
|
+
"The `--pro` flag cannot be used with a specific server URL."
|
965
|
+
)
|
966
|
+
|
967
|
+
pro_api_url = pro_api_url or ZENML_PRO_API_URL
|
968
|
+
if credentials_store.has_valid_pro_authentication(pro_api_url):
|
969
|
+
credentials_store.clear_pro_credentials(pro_api_url)
|
970
|
+
cli_utils.declare("Logged out from ZenML Pro.")
|
971
|
+
else:
|
972
|
+
cli_utils.declare(
|
973
|
+
"The client is not currently connected to ZenML Pro."
|
974
|
+
)
|
975
|
+
|
976
|
+
if clear:
|
977
|
+
# Try to determine if the client is currently connected to a ZenML
|
978
|
+
# Pro server with the given pro API URL
|
979
|
+
credentials = credentials_store.get_credentials(store_cfg.url)
|
980
|
+
if credentials and credentials.pro_api_url == pro_api_url:
|
981
|
+
gc.set_default_store()
|
982
|
+
|
983
|
+
credentials_store.clear_all_pro_tokens(pro_api_url)
|
984
|
+
cli_utils.declare("Logged out from all ZenML Pro servers.")
|
985
|
+
return
|
986
|
+
|
987
|
+
if server is None:
|
988
|
+
# Log out from the current server
|
989
|
+
|
990
|
+
if gc.uses_default_store():
|
991
|
+
cli_utils.declare(
|
992
|
+
"The client is not currently connected to a ZenML server.\n"
|
993
|
+
"Hint: You can run 'zenml server list' to view the available "
|
994
|
+
"ZenML servers and then 'zenml login <server-url-name-or-id>' "
|
995
|
+
"to connect to a specific server."
|
996
|
+
)
|
997
|
+
return
|
998
|
+
|
999
|
+
if connected_to_local_server():
|
1000
|
+
local = True
|
1001
|
+
else:
|
1002
|
+
server = store_cfg.url
|
1003
|
+
|
1004
|
+
if local:
|
1005
|
+
from zenml.zen_server.deploy.deployer import LocalServerDeployer
|
1006
|
+
|
1007
|
+
deployer = LocalServerDeployer()
|
1008
|
+
|
1009
|
+
if not get_local_server():
|
1010
|
+
cli_utils.declare("The local ZenML dashboard is not running.")
|
1011
|
+
else:
|
1012
|
+
cli_utils.declare("Logging out from the local ZenML server...")
|
1013
|
+
deployer.remove_server()
|
1014
|
+
cli_utils.declare(
|
1015
|
+
"The local ZenML dashboard has been shut down.\n"
|
1016
|
+
"Hint: You can run 'zenml login --local' to start it again."
|
1017
|
+
)
|
1018
|
+
return
|
1019
|
+
|
1020
|
+
assert server is not None
|
1021
|
+
|
1022
|
+
gc.set_default_store()
|
1023
|
+
credentials = credentials_store.get_credentials(server)
|
1024
|
+
|
1025
|
+
if credentials and (clear or store_cfg.url == server):
|
1026
|
+
if credentials.type == ServerType.PRO:
|
1027
|
+
cli_utils.declare(
|
1028
|
+
f"Logging out from ZenML Pro server '{credentials.server_name}'."
|
1029
|
+
)
|
1030
|
+
if clear:
|
1031
|
+
credentials_store.clear_credentials(server_url=server)
|
1032
|
+
cli_utils.declare(
|
1033
|
+
"Logged out from ZenML Pro.\n"
|
1034
|
+
f"Hint: You can run 'zenml login {credentials.server_name}' to "
|
1035
|
+
"login again to the same ZenML Pro server or 'zenml server "
|
1036
|
+
"list' to view other available servers that you can connect to "
|
1037
|
+
"with 'zenml login <server-id-name-or-url>'."
|
1038
|
+
)
|
1039
|
+
else:
|
1040
|
+
cli_utils.declare(f"Logging out from {server}.")
|
1041
|
+
if clear:
|
1042
|
+
credentials_store.clear_credentials(server_url=server)
|
1043
|
+
cli_utils.declare(
|
1044
|
+
f"Logged out from {server}."
|
1045
|
+
f"Hint: You can run 'zenml login {server}' to log in again "
|
1046
|
+
"to the same server or 'zenml server list' to view other available "
|
1047
|
+
"servers that you can connect to with 'zenml login <server-url>'."
|
1048
|
+
)
|
1049
|
+
else:
|
1050
|
+
cli_utils.declare(
|
1051
|
+
f"The client is not currently connected to the ZenML server at "
|
1052
|
+
f"'{server}'."
|
1053
|
+
)
|