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.
Files changed (1240) hide show
  1. zenml/VERSION +1 -1
  2. zenml/__init__.py +9 -12
  3. zenml/actions/__init__.py +14 -0
  4. zenml/actions/base_action.py +682 -0
  5. zenml/actions/pipeline_run/__init__.py +0 -0
  6. zenml/actions/pipeline_run/pipeline_run_action.py +223 -0
  7. zenml/analytics/context.py +70 -15
  8. zenml/analytics/enums.py +21 -17
  9. zenml/analytics/models.py +1 -0
  10. zenml/analytics/utils.py +19 -7
  11. zenml/annotators/base_annotator.py +4 -3
  12. zenml/artifact_stores/base_artifact_store.py +155 -72
  13. zenml/artifact_stores/local_artifact_store.py +3 -2
  14. zenml/artifacts/artifact_config.py +67 -58
  15. zenml/artifacts/external_artifact.py +24 -39
  16. zenml/artifacts/external_artifact_config.py +27 -37
  17. zenml/artifacts/preexisting_data_materializer.py +90 -0
  18. zenml/artifacts/unmaterialized_artifact.py +2 -12
  19. zenml/artifacts/utils.py +521 -220
  20. zenml/cli/__init__.py +1511 -456
  21. zenml/cli/annotator.py +48 -14
  22. zenml/cli/artifact.py +22 -4
  23. zenml/cli/authorized_device.py +1 -0
  24. zenml/cli/base.py +185 -22
  25. zenml/cli/code_repository.py +1 -0
  26. zenml/cli/formatter.py +1 -1
  27. zenml/cli/integration.py +119 -24
  28. zenml/cli/login.py +1053 -0
  29. zenml/cli/model.py +42 -15
  30. zenml/cli/model_registry.py +1 -2
  31. zenml/cli/pipeline.py +168 -82
  32. zenml/cli/secret.py +1 -2
  33. zenml/cli/served_model.py +56 -26
  34. zenml/cli/server.py +486 -619
  35. zenml/cli/service_accounts.py +55 -14
  36. zenml/cli/service_connectors.py +97 -6
  37. zenml/cli/stack.py +821 -531
  38. zenml/cli/stack_components.py +15 -598
  39. zenml/cli/tag.py +1 -0
  40. zenml/cli/text_utils.py +36 -2
  41. zenml/cli/user_management.py +204 -6
  42. zenml/cli/utils.py +411 -290
  43. zenml/client.py +1742 -298
  44. zenml/client_lazy_loader.py +224 -0
  45. zenml/code_repositories/base_code_repository.py +5 -4
  46. zenml/code_repositories/git/local_git_repository_context.py +1 -0
  47. zenml/code_repositories/local_repository_context.py +1 -0
  48. zenml/config/__init__.py +2 -0
  49. zenml/config/base_settings.py +6 -6
  50. zenml/config/build_configuration.py +43 -17
  51. zenml/config/compiler.py +82 -49
  52. zenml/config/docker_settings.py +139 -83
  53. zenml/config/global_config.py +260 -234
  54. zenml/config/pipeline_configurations.py +32 -11
  55. zenml/config/pipeline_run_configuration.py +15 -3
  56. zenml/config/pipeline_spec.py +6 -6
  57. zenml/config/resource_settings.py +8 -9
  58. zenml/config/retry_config.py +27 -0
  59. zenml/config/schedule.py +27 -18
  60. zenml/config/secret_reference_mixin.py +8 -4
  61. zenml/config/secrets_store_config.py +16 -24
  62. zenml/config/server_config.py +434 -51
  63. zenml/config/settings_resolver.py +2 -1
  64. zenml/config/source.py +97 -31
  65. zenml/config/step_configurations.py +83 -39
  66. zenml/config/step_run_info.py +3 -0
  67. zenml/config/store_config.py +20 -54
  68. zenml/config/strict_base_model.py +2 -6
  69. zenml/console.py +0 -1
  70. zenml/constants.py +232 -74
  71. zenml/container_registries/azure_container_registry.py +1 -0
  72. zenml/container_registries/base_container_registry.py +7 -3
  73. zenml/container_registries/default_container_registry.py +4 -3
  74. zenml/container_registries/dockerhub_container_registry.py +1 -0
  75. zenml/container_registries/gcp_container_registry.py +1 -0
  76. zenml/container_registries/github_container_registry.py +2 -10
  77. zenml/data_validators/base_data_validator.py +2 -2
  78. zenml/entrypoints/base_entrypoint_configuration.py +76 -17
  79. zenml/entrypoints/pipeline_entrypoint_configuration.py +1 -0
  80. zenml/entrypoints/step_entrypoint_configuration.py +21 -2
  81. zenml/enums.py +91 -9
  82. zenml/environment.py +52 -319
  83. zenml/{steps/base_parameters.py → event_hub/__init__.py} +5 -7
  84. zenml/event_hub/base_event_hub.py +196 -0
  85. zenml/event_hub/event_hub.py +181 -0
  86. zenml/event_sources/__init__.py +14 -0
  87. zenml/{lineage_graph/edge.py → event_sources/base_event.py} +5 -7
  88. zenml/event_sources/base_event_source.py +695 -0
  89. zenml/event_sources/webhooks/__init__.py +14 -0
  90. zenml/event_sources/webhooks/base_webhook_event_source.py +231 -0
  91. zenml/exceptions.py +40 -41
  92. zenml/feature_stores/base_feature_store.py +4 -6
  93. zenml/hooks/hook_validators.py +3 -11
  94. zenml/image_builders/base_image_builder.py +5 -2
  95. zenml/image_builders/build_context.py +24 -80
  96. zenml/image_builders/local_image_builder.py +14 -6
  97. zenml/integrations/__init__.py +16 -4
  98. zenml/integrations/airflow/__init__.py +3 -5
  99. zenml/integrations/airflow/flavors/airflow_orchestrator_flavor.py +15 -7
  100. zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +15 -252
  101. zenml/integrations/airflow/orchestrators/dag_generator.py +5 -3
  102. zenml/integrations/argilla/__init__.py +46 -0
  103. zenml/integrations/argilla/annotators/__init__.py +20 -0
  104. zenml/integrations/argilla/annotators/argilla_annotator.py +443 -0
  105. zenml/{post_execution → integrations/argilla/flavors}/__init__.py +9 -13
  106. zenml/integrations/argilla/flavors/argilla_annotator_flavor.py +150 -0
  107. zenml/integrations/aws/__init__.py +7 -3
  108. zenml/integrations/aws/container_registries/aws_container_registry.py +44 -8
  109. zenml/integrations/aws/flavors/__init__.py +6 -0
  110. zenml/integrations/aws/flavors/aws_container_registry_flavor.py +3 -2
  111. zenml/integrations/aws/flavors/aws_image_builder_flavor.py +146 -0
  112. zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py +104 -16
  113. zenml/integrations/aws/flavors/sagemaker_step_operator_flavor.py +6 -2
  114. zenml/integrations/aws/image_builders/__init__.py +20 -0
  115. zenml/integrations/aws/image_builders/aws_image_builder.py +307 -0
  116. zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +421 -133
  117. zenml/integrations/aws/service_connectors/aws_service_connector.py +175 -48
  118. zenml/integrations/aws/step_operators/sagemaker_step_operator.py +1 -1
  119. zenml/integrations/azure/__init__.py +14 -5
  120. zenml/integrations/azure/azureml_utils.py +201 -0
  121. zenml/integrations/azure/flavors/__init__.py +11 -0
  122. zenml/integrations/azure/flavors/azureml.py +139 -0
  123. zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +166 -0
  124. zenml/integrations/azure/flavors/azureml_step_operator_flavor.py +71 -18
  125. zenml/integrations/azure/orchestrators/__init__.py +19 -0
  126. zenml/integrations/azure/orchestrators/azureml_orchestrator.py +583 -0
  127. zenml/integrations/azure/orchestrators/azureml_orchestrator_entrypoint_config.py +82 -0
  128. zenml/integrations/azure/service_connectors/azure_service_connector.py +15 -6
  129. zenml/integrations/azure/step_operators/azureml_step_operator.py +78 -173
  130. zenml/integrations/bentoml/__init__.py +1 -1
  131. zenml/integrations/bentoml/constants.py +1 -1
  132. zenml/integrations/bentoml/materializers/bentoml_bento_materializer.py +19 -31
  133. zenml/integrations/bentoml/model_deployers/bentoml_model_deployer.py +128 -239
  134. zenml/integrations/bentoml/services/__init__.py +15 -4
  135. zenml/integrations/bentoml/services/bentoml_container_deployment.py +399 -0
  136. zenml/integrations/bentoml/services/{bentoml_deployment.py → bentoml_local_deployment.py} +85 -43
  137. zenml/integrations/bentoml/services/deployment_type.py +23 -0
  138. zenml/integrations/bentoml/steps/bento_builder.py +2 -0
  139. zenml/integrations/bentoml/steps/bentoml_deployer.py +97 -47
  140. zenml/integrations/bitbucket/__init__.py +42 -0
  141. zenml/integrations/bitbucket/plugins/__init__.py +20 -0
  142. zenml/integrations/bitbucket/plugins/bitbucket_webhook_event_source_flavor.py +43 -0
  143. zenml/integrations/bitbucket/plugins/event_sources/__init__.py +0 -0
  144. zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +486 -0
  145. zenml/integrations/comet/__init__.py +49 -0
  146. zenml/integrations/{kserve/services → comet/experiment_trackers}/__init__.py +5 -6
  147. zenml/integrations/comet/experiment_trackers/comet_experiment_tracker.py +175 -0
  148. zenml/integrations/comet/flavors/__init__.py +24 -0
  149. zenml/integrations/comet/flavors/comet_experiment_tracker_flavor.py +129 -0
  150. zenml/integrations/constants.py +14 -2
  151. zenml/integrations/databricks/__init__.py +70 -0
  152. zenml/{lineage_graph → integrations/databricks/flavors}/__init__.py +14 -18
  153. zenml/integrations/databricks/flavors/databricks_model_deployer_flavor.py +118 -0
  154. zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +174 -0
  155. zenml/integrations/{kserve → databricks}/model_deployers/__init__.py +5 -5
  156. zenml/integrations/databricks/model_deployers/databricks_model_deployer.py +249 -0
  157. zenml/integrations/databricks/orchestrators/__init__.py +20 -0
  158. zenml/integrations/databricks/orchestrators/databricks_orchestrator.py +501 -0
  159. zenml/integrations/databricks/orchestrators/databricks_orchestrator_entrypoint_config.py +97 -0
  160. zenml/integrations/databricks/services/__init__.py +19 -0
  161. zenml/integrations/databricks/services/databricks_deployment.py +407 -0
  162. zenml/integrations/{gcp/orchestrators/vertex_scheduler → databricks/utils}/__init__.py +2 -2
  163. zenml/integrations/databricks/utils/databricks_utils.py +87 -0
  164. zenml/integrations/deepchecks/__init__.py +30 -10
  165. zenml/integrations/deepchecks/data_validators/deepchecks_data_validator.py +59 -18
  166. zenml/integrations/deepchecks/materializers/deepchecks_dataset_materializer.py +3 -1
  167. zenml/integrations/deepchecks/materializers/deepchecks_results_materializer.py +3 -3
  168. zenml/integrations/deepchecks/validation_checks.py +62 -35
  169. zenml/integrations/discord/__init__.py +1 -0
  170. zenml/integrations/discord/steps/discord_alerter_ask_step.py +1 -0
  171. zenml/integrations/discord/steps/discord_alerter_post_step.py +1 -0
  172. zenml/integrations/evidently/__init__.py +22 -4
  173. zenml/integrations/evidently/column_mapping.py +11 -3
  174. zenml/integrations/evidently/data_validators/evidently_data_validator.py +24 -6
  175. zenml/integrations/evidently/metrics.py +7 -8
  176. zenml/integrations/evidently/tests.py +7 -8
  177. zenml/integrations/facets/__init__.py +22 -5
  178. zenml/integrations/facets/models.py +2 -7
  179. zenml/integrations/feast/__init__.py +19 -3
  180. zenml/integrations/feast/feature_stores/feast_feature_store.py +13 -32
  181. zenml/integrations/gcp/__init__.py +6 -6
  182. zenml/integrations/gcp/artifact_stores/gcp_artifact_store.py +6 -0
  183. zenml/integrations/gcp/flavors/gcp_artifact_store_flavor.py +1 -0
  184. zenml/integrations/gcp/flavors/vertex_orchestrator_flavor.py +24 -2
  185. zenml/integrations/gcp/flavors/vertex_step_operator_flavor.py +14 -1
  186. zenml/integrations/gcp/google_credentials_mixin.py +1 -1
  187. zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +519 -296
  188. zenml/integrations/gcp/service_connectors/gcp_service_connector.py +788 -113
  189. zenml/integrations/gcp/step_operators/vertex_step_operator.py +9 -1
  190. zenml/integrations/github/__init__.py +15 -0
  191. zenml/integrations/github/code_repositories/github_code_repository.py +3 -2
  192. zenml/integrations/github/plugins/__init__.py +19 -0
  193. zenml/integrations/github/plugins/event_sources/__init__.py +0 -0
  194. zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py +510 -0
  195. zenml/integrations/github/plugins/github_webhook_event_source_flavor.py +43 -0
  196. zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py +7 -1
  197. zenml/integrations/great_expectations/__init__.py +22 -10
  198. zenml/integrations/great_expectations/data_validators/ge_data_validator.py +61 -57
  199. zenml/integrations/great_expectations/flavors/great_expectations_data_validator_flavor.py +35 -2
  200. zenml/integrations/great_expectations/ge_store_backend.py +24 -11
  201. zenml/integrations/great_expectations/materializers/ge_materializer.py +9 -9
  202. zenml/integrations/great_expectations/utils.py +5 -5
  203. zenml/integrations/huggingface/__init__.py +52 -1
  204. zenml/integrations/huggingface/flavors/__init__.py +26 -0
  205. zenml/integrations/huggingface/flavors/huggingface_model_deployer_flavor.py +130 -0
  206. zenml/integrations/huggingface/materializers/__init__.py +3 -0
  207. zenml/integrations/huggingface/materializers/huggingface_datasets_materializer.py +102 -19
  208. zenml/integrations/huggingface/materializers/huggingface_pt_model_materializer.py +18 -19
  209. zenml/integrations/huggingface/materializers/huggingface_t5_materializer.py +104 -0
  210. zenml/integrations/huggingface/materializers/huggingface_tf_model_materializer.py +18 -19
  211. zenml/integrations/huggingface/materializers/huggingface_tokenizer_materializer.py +13 -15
  212. zenml/integrations/huggingface/model_deployers/__init__.py +20 -0
  213. zenml/integrations/huggingface/model_deployers/huggingface_model_deployer.py +247 -0
  214. zenml/integrations/huggingface/services/__init__.py +19 -0
  215. zenml/integrations/huggingface/services/huggingface_deployment.py +292 -0
  216. zenml/integrations/huggingface/steps/__init__.py +21 -0
  217. zenml/integrations/huggingface/steps/accelerate_runner.py +166 -0
  218. zenml/integrations/huggingface/steps/huggingface_deployer.py +110 -0
  219. zenml/integrations/hyperai/__init__.py +53 -0
  220. zenml/integrations/hyperai/flavors/__init__.py +20 -0
  221. zenml/integrations/hyperai/flavors/hyperai_orchestrator_flavor.py +170 -0
  222. zenml/integrations/hyperai/orchestrators/__init__.py +21 -0
  223. zenml/integrations/hyperai/orchestrators/hyperai_orchestrator.py +510 -0
  224. zenml/integrations/hyperai/service_connectors/__init__.py +20 -0
  225. zenml/integrations/hyperai/service_connectors/hyperai_service_connector.py +375 -0
  226. zenml/integrations/integration.py +101 -47
  227. zenml/integrations/kaniko/flavors/kaniko_image_builder_flavor.py +6 -44
  228. zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +9 -6
  229. zenml/integrations/kubeflow/__init__.py +4 -1
  230. zenml/integrations/kubeflow/flavors/kubeflow_orchestrator_flavor.py +67 -82
  231. zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py +306 -248
  232. zenml/integrations/kubernetes/__init__.py +6 -3
  233. zenml/integrations/kubernetes/flavors/__init__.py +8 -0
  234. zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +43 -2
  235. zenml/integrations/kubernetes/flavors/kubernetes_step_operator_flavor.py +166 -0
  236. zenml/integrations/kubernetes/orchestrators/kube_utils.py +67 -12
  237. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +89 -21
  238. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +39 -7
  239. zenml/integrations/kubernetes/orchestrators/manifest_utils.py +42 -19
  240. zenml/integrations/kubernetes/pod_settings.py +21 -31
  241. zenml/integrations/kubernetes/serialization_utils.py +3 -3
  242. zenml/integrations/kubernetes/service_connectors/kubernetes_service_connector.py +14 -11
  243. zenml/integrations/kubernetes/step_operators/__init__.py +22 -0
  244. zenml/integrations/kubernetes/step_operators/kubernetes_step_operator.py +236 -0
  245. zenml/integrations/label_studio/__init__.py +1 -3
  246. zenml/integrations/label_studio/annotators/label_studio_annotator.py +46 -14
  247. zenml/integrations/label_studio/flavors/__init__.py +2 -0
  248. zenml/integrations/label_studio/flavors/label_studio_annotator_flavor.py +20 -5
  249. zenml/integrations/langchain/__init__.py +7 -1
  250. zenml/integrations/langchain/materializers/document_materializer.py +44 -8
  251. zenml/integrations/langchain/materializers/openai_embedding_materializer.py +28 -2
  252. zenml/integrations/lightgbm/__init__.py +1 -0
  253. zenml/integrations/lightgbm/materializers/lightgbm_booster_materializer.py +8 -15
  254. zenml/integrations/lightgbm/materializers/lightgbm_dataset_materializer.py +11 -16
  255. zenml/integrations/lightning/__init__.py +48 -0
  256. zenml/integrations/lightning/flavors/__init__.py +23 -0
  257. zenml/integrations/lightning/flavors/lightning_orchestrator_flavor.py +168 -0
  258. zenml/integrations/lightning/orchestrators/__init__.py +23 -0
  259. zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +617 -0
  260. zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +303 -0
  261. zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint_configuration.py +77 -0
  262. zenml/integrations/lightning/orchestrators/utils.py +67 -0
  263. zenml/integrations/mlflow/__init__.py +55 -8
  264. zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +31 -13
  265. zenml/integrations/mlflow/flavors/mlflow_experiment_tracker_flavor.py +32 -37
  266. zenml/integrations/mlflow/model_deployers/mlflow_model_deployer.py +42 -233
  267. zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +42 -49
  268. zenml/integrations/mlflow/services/mlflow_deployment.py +30 -5
  269. zenml/integrations/mlflow/steps/mlflow_deployer.py +25 -27
  270. zenml/integrations/mlflow/steps/mlflow_registry.py +3 -1
  271. zenml/integrations/modal/__init__.py +46 -0
  272. zenml/integrations/modal/flavors/__init__.py +26 -0
  273. zenml/integrations/modal/flavors/modal_step_operator_flavor.py +125 -0
  274. zenml/integrations/modal/step_operators/__init__.py +22 -0
  275. zenml/integrations/modal/step_operators/modal_step_operator.py +242 -0
  276. zenml/integrations/neptune/experiment_trackers/neptune_experiment_tracker.py +7 -5
  277. zenml/integrations/neptune/experiment_trackers/run_state.py +71 -55
  278. zenml/integrations/neptune/flavors/neptune_experiment_tracker_flavor.py +1 -1
  279. zenml/integrations/neural_prophet/__init__.py +6 -1
  280. zenml/integrations/numpy/__init__.py +32 -0
  281. zenml/integrations/{kserve/constants.py → numpy/materializers/__init__.py} +5 -4
  282. zenml/integrations/numpy/materializers/numpy_materializer.py +246 -0
  283. zenml/integrations/openai/__init__.py +1 -1
  284. zenml/integrations/openai/hooks/open_ai_failure_hook.py +39 -14
  285. zenml/{steps/external_artifact.py → integrations/pandas/__init__.py} +17 -11
  286. zenml/integrations/{kserve/custom_deployer → pandas/materializers}/__init__.py +5 -5
  287. zenml/integrations/pandas/materializers/pandas_materializer.py +192 -0
  288. zenml/integrations/pigeon/__init__.py +44 -0
  289. zenml/integrations/pigeon/annotators/__init__.py +20 -0
  290. zenml/integrations/pigeon/annotators/pigeon_annotator.py +330 -0
  291. zenml/integrations/{kserve → pigeon}/flavors/__init__.py +7 -7
  292. zenml/integrations/pigeon/flavors/pigeon_annotator_flavor.py +104 -0
  293. zenml/integrations/pillow/materializers/pillow_image_materializer.py +17 -20
  294. zenml/integrations/polars/__init__.py +1 -0
  295. zenml/integrations/polars/materializers/dataframe_materializer.py +26 -39
  296. zenml/integrations/prodigy/__init__.py +48 -0
  297. zenml/integrations/prodigy/annotators/__init__.py +20 -0
  298. zenml/integrations/prodigy/annotators/prodigy_annotator.py +275 -0
  299. zenml/integrations/prodigy/flavors/__init__.py +24 -0
  300. zenml/integrations/prodigy/flavors/prodigy_annotator_flavor.py +101 -0
  301. zenml/integrations/pycaret/__init__.py +6 -0
  302. zenml/integrations/pycaret/materializers/model_materializer.py +7 -22
  303. zenml/integrations/pytorch/materializers/base_pytorch_materializer.py +8 -2
  304. zenml/integrations/pytorch/materializers/pytorch_module_materializer.py +4 -1
  305. zenml/integrations/registry.py +38 -1
  306. zenml/integrations/s3/__init__.py +2 -3
  307. zenml/integrations/s3/artifact_stores/s3_artifact_store.py +191 -9
  308. zenml/integrations/s3/flavors/s3_artifact_store_flavor.py +22 -45
  309. zenml/integrations/s3/utils.py +39 -0
  310. zenml/integrations/seldon/__init__.py +18 -2
  311. zenml/integrations/seldon/model_deployers/seldon_model_deployer.py +19 -141
  312. zenml/integrations/seldon/secret_schemas/secret_schemas.py +2 -2
  313. zenml/integrations/seldon/seldon_client.py +55 -70
  314. zenml/integrations/seldon/services/seldon_deployment.py +4 -5
  315. zenml/integrations/seldon/steps/seldon_deployer.py +21 -20
  316. zenml/integrations/sklearn/__init__.py +1 -1
  317. zenml/integrations/skypilot/flavors/skypilot_orchestrator_base_vm_config.py +29 -7
  318. zenml/integrations/skypilot/orchestrators/skypilot_base_vm_orchestrator.py +47 -28
  319. zenml/integrations/skypilot/orchestrators/skypilot_orchestrator_entrypoint.py +2 -2
  320. zenml/integrations/skypilot_aws/__init__.py +3 -2
  321. zenml/integrations/skypilot_aws/flavors/skypilot_orchestrator_aws_vm_flavor.py +1 -1
  322. zenml/integrations/skypilot_azure/__init__.py +2 -4
  323. zenml/integrations/skypilot_azure/flavors/skypilot_orchestrator_azure_vm_flavor.py +1 -1
  324. zenml/integrations/skypilot_gcp/__init__.py +3 -2
  325. zenml/integrations/skypilot_gcp/flavors/skypilot_orchestrator_gcp_vm_flavor.py +1 -1
  326. zenml/integrations/skypilot_kubernetes/__init__.py +52 -0
  327. zenml/integrations/skypilot_kubernetes/flavors/__init__.py +26 -0
  328. zenml/integrations/skypilot_kubernetes/flavors/skypilot_orchestrator_kubernetes_vm_flavor.py +125 -0
  329. zenml/integrations/skypilot_kubernetes/orchestrators/__init__.py +25 -0
  330. zenml/integrations/skypilot_kubernetes/orchestrators/skypilot_kubernetes_vm_orchestrator.py +74 -0
  331. zenml/integrations/skypilot_lambda/__init__.py +50 -0
  332. zenml/integrations/{kserve/secret_schemas → skypilot_lambda/flavors}/__init__.py +9 -12
  333. zenml/integrations/skypilot_lambda/flavors/skypilot_orchestrator_lambda_vm_flavor.py +130 -0
  334. zenml/{lineage_graph/node → integrations/skypilot_lambda/orchestrators}/__init__.py +8 -15
  335. zenml/integrations/skypilot_lambda/orchestrators/skypilot_lambda_vm_orchestrator.py +92 -0
  336. zenml/integrations/slack/__init__.py +1 -0
  337. zenml/integrations/slack/alerters/slack_alerter.py +22 -2
  338. zenml/integrations/slack/flavors/__init__.py +2 -0
  339. zenml/integrations/slack/flavors/slack_alerter_flavor.py +13 -4
  340. zenml/integrations/slack/steps/slack_alerter_ask_step.py +1 -0
  341. zenml/integrations/slack/steps/slack_alerter_post_step.py +1 -0
  342. zenml/integrations/spark/flavors/spark_step_operator_flavor.py +2 -39
  343. zenml/integrations/spark/step_operators/kubernetes_step_operator.py +1 -0
  344. zenml/integrations/spark/step_operators/spark_entrypoint_configuration.py +1 -0
  345. zenml/integrations/spark/step_operators/spark_step_operator.py +2 -0
  346. zenml/integrations/tekton/__init__.py +2 -1
  347. zenml/integrations/tekton/flavors/tekton_orchestrator_flavor.py +66 -23
  348. zenml/integrations/tekton/orchestrators/tekton_orchestrator.py +549 -235
  349. zenml/integrations/tensorboard/__init__.py +1 -13
  350. zenml/integrations/tensorboard/services/tensorboard_service.py +3 -4
  351. zenml/integrations/tensorboard/visualizers/tensorboard_visualizer.py +66 -59
  352. zenml/integrations/tensorflow/__init__.py +10 -15
  353. zenml/integrations/tensorflow/materializers/keras_materializer.py +24 -27
  354. zenml/integrations/tensorflow/materializers/tf_dataset_materializer.py +9 -16
  355. zenml/integrations/vllm/__init__.py +50 -0
  356. zenml/integrations/vllm/flavors/__init__.py +21 -0
  357. zenml/integrations/vllm/flavors/vllm_model_deployer_flavor.py +91 -0
  358. zenml/integrations/vllm/model_deployers/__init__.py +19 -0
  359. zenml/integrations/vllm/model_deployers/vllm_model_deployer.py +263 -0
  360. zenml/integrations/vllm/services/__init__.py +19 -0
  361. zenml/integrations/vllm/services/vllm_deployment.py +206 -0
  362. zenml/integrations/wandb/__init__.py +1 -0
  363. zenml/integrations/wandb/flavors/wandb_experiment_tracker_flavor.py +21 -18
  364. zenml/integrations/whylogs/__init__.py +18 -2
  365. zenml/integrations/whylogs/data_validators/whylogs_data_validator.py +3 -3
  366. zenml/integrations/whylogs/flavors/whylogs_data_validator_flavor.py +1 -1
  367. zenml/integrations/whylogs/materializers/whylogs_materializer.py +14 -21
  368. zenml/integrations/xgboost/materializers/xgboost_booster_materializer.py +11 -22
  369. zenml/integrations/xgboost/materializers/xgboost_dmatrix_materializer.py +10 -19
  370. zenml/io/fileio.py +1 -0
  371. zenml/io/filesystem.py +2 -2
  372. zenml/io/local_filesystem.py +3 -3
  373. zenml/logger.py +41 -17
  374. zenml/logging/__init__.py +5 -0
  375. zenml/logging/step_logging.py +280 -32
  376. zenml/{new/steps → login}/__init__.py +4 -1
  377. zenml/login/credentials.py +370 -0
  378. zenml/login/credentials_store.py +638 -0
  379. zenml/{new/pipelines → login/pro}/__init__.py +4 -1
  380. zenml/login/pro/client.py +492 -0
  381. zenml/login/pro/constants.py +28 -0
  382. zenml/{zen_stores/schemas/identity_schemas.py → login/pro/models.py} +9 -11
  383. zenml/login/pro/organization/__init__.py +14 -0
  384. zenml/login/pro/organization/client.py +79 -0
  385. zenml/{lineage_graph/node/base_node.py → login/pro/organization/models.py} +13 -12
  386. zenml/{_hub → login/pro/tenant}/__init__.py +2 -2
  387. zenml/login/pro/tenant/client.py +92 -0
  388. zenml/login/pro/tenant/models.py +176 -0
  389. zenml/login/pro/utils.py +107 -0
  390. zenml/login/server_info.py +52 -0
  391. zenml/{cli → login}/web_login.py +71 -21
  392. zenml/materializers/__init__.py +2 -4
  393. zenml/materializers/base_materializer.py +180 -51
  394. zenml/materializers/built_in_materializer.py +50 -23
  395. zenml/materializers/cloudpickle_materializer.py +4 -5
  396. zenml/materializers/numpy_materializer.py +23 -233
  397. zenml/materializers/pandas_materializer.py +22 -174
  398. zenml/materializers/pydantic_materializer.py +2 -2
  399. zenml/materializers/service_materializer.py +12 -10
  400. zenml/materializers/structured_string_materializer.py +12 -6
  401. zenml/materializers/uuid_materializer.py +79 -0
  402. zenml/metadata/lazy_load.py +33 -17
  403. zenml/metadata/metadata_types.py +112 -3
  404. zenml/model/lazy_load.py +85 -4
  405. zenml/model/model.py +236 -226
  406. zenml/model/utils.py +99 -141
  407. zenml/model_deployers/base_model_deployer.py +319 -47
  408. zenml/model_registries/base_model_registry.py +17 -15
  409. zenml/models/__init__.py +254 -175
  410. zenml/models/v2/base/base.py +254 -112
  411. zenml/models/v2/base/base_plugin_flavor.py +76 -0
  412. zenml/models/v2/base/filter.py +530 -199
  413. zenml/models/v2/base/page.py +2 -12
  414. zenml/models/v2/base/scoped.py +292 -22
  415. zenml/models/v2/core/action.py +276 -0
  416. zenml/models/v2/core/action_flavor.py +57 -0
  417. zenml/models/v2/core/api_key.py +35 -12
  418. zenml/models/v2/core/artifact.py +126 -6
  419. zenml/models/v2/core/artifact_version.py +289 -65
  420. zenml/models/v2/core/artifact_visualization.py +10 -4
  421. zenml/models/v2/core/code_reference.py +13 -4
  422. zenml/models/v2/core/code_repository.py +39 -16
  423. zenml/models/v2/core/component.py +113 -61
  424. zenml/models/v2/core/device.py +25 -5
  425. zenml/models/v2/core/event_source.py +244 -0
  426. zenml/models/v2/core/event_source_flavor.py +67 -0
  427. zenml/models/v2/core/flavor.py +90 -27
  428. zenml/models/v2/core/logs.py +81 -12
  429. zenml/models/v2/core/model.py +91 -42
  430. zenml/models/v2/core/model_version.py +100 -55
  431. zenml/models/v2/core/model_version_artifact.py +96 -89
  432. zenml/models/v2/core/model_version_pipeline_run.py +86 -53
  433. zenml/models/v2/core/pipeline.py +205 -80
  434. zenml/models/v2/core/pipeline_build.py +110 -21
  435. zenml/models/v2/core/pipeline_deployment.py +101 -36
  436. zenml/models/v2/core/pipeline_run.py +545 -33
  437. zenml/models/v2/core/run_metadata.py +23 -181
  438. zenml/models/v2/core/run_template.py +439 -0
  439. zenml/models/v2/core/schedule.py +66 -29
  440. zenml/models/v2/core/secret.py +33 -21
  441. zenml/models/v2/core/server_settings.py +224 -0
  442. zenml/models/v2/core/service.py +500 -0
  443. zenml/models/v2/core/service_account.py +40 -15
  444. zenml/models/v2/core/service_connector.py +247 -49
  445. zenml/models/v2/core/stack.py +163 -70
  446. zenml/models/v2/core/step_run.py +210 -48
  447. zenml/models/v2/core/tag.py +21 -8
  448. zenml/models/v2/core/tag_resource.py +13 -4
  449. zenml/models/v2/core/trigger.py +422 -0
  450. zenml/models/v2/core/trigger_execution.py +119 -0
  451. zenml/models/v2/core/user.py +136 -69
  452. zenml/models/v2/core/workspace.py +26 -7
  453. zenml/models/v2/misc/auth_models.py +11 -2
  454. zenml/models/v2/misc/build_item.py +3 -3
  455. zenml/models/v2/misc/external_user.py +3 -6
  456. zenml/models/v2/misc/info_models.py +78 -0
  457. zenml/models/v2/misc/loaded_visualization.py +2 -2
  458. zenml/models/v2/misc/run_metadata.py +38 -0
  459. zenml/models/v2/misc/server_models.py +100 -0
  460. zenml/models/v2/misc/service_connector_type.py +9 -17
  461. zenml/models/v2/misc/stack_deployment.py +96 -0
  462. zenml/models/v2/misc/user_auth.py +7 -9
  463. zenml/orchestrators/__init__.py +4 -0
  464. zenml/orchestrators/base_orchestrator.py +136 -25
  465. zenml/orchestrators/containerized_orchestrator.py +1 -0
  466. zenml/orchestrators/dag_runner.py +18 -3
  467. zenml/orchestrators/input_utils.py +109 -48
  468. zenml/orchestrators/local/local_orchestrator.py +10 -0
  469. zenml/orchestrators/local_docker/local_docker_orchestrator.py +14 -42
  470. zenml/orchestrators/output_utils.py +16 -6
  471. zenml/orchestrators/publish_utils.py +12 -5
  472. zenml/orchestrators/step_launcher.py +142 -194
  473. zenml/orchestrators/step_run_utils.py +386 -0
  474. zenml/orchestrators/step_runner.py +181 -270
  475. zenml/orchestrators/utils.py +219 -84
  476. zenml/orchestrators/wheeled_orchestrator.py +147 -0
  477. zenml/pipelines/__init__.py +3 -16
  478. zenml/{new/pipelines → pipelines}/build_utils.py +287 -47
  479. zenml/{new/pipelines → pipelines}/pipeline_context.py +6 -2
  480. zenml/pipelines/pipeline_decorator.py +40 -64
  481. zenml/{new/pipelines/pipeline.py → pipelines/pipeline_definition.py} +376 -440
  482. zenml/pipelines/run_utils.py +358 -0
  483. zenml/plugins/__init__.py +0 -0
  484. zenml/plugins/base_plugin_flavor.py +88 -0
  485. zenml/plugins/plugin_flavor_registry.py +342 -0
  486. zenml/secret/base_secret.py +7 -8
  487. zenml/secret/schemas/basic_auth_secret_schema.py +0 -1
  488. zenml/service_connectors/docker_service_connector.py +19 -4
  489. zenml/service_connectors/service_connector.py +12 -14
  490. zenml/service_connectors/service_connector_registry.py +71 -55
  491. zenml/service_connectors/service_connector_utils.py +418 -0
  492. zenml/services/__init__.py +0 -2
  493. zenml/services/container/container_service.py +9 -6
  494. zenml/services/container/container_service_endpoint.py +1 -1
  495. zenml/services/container/entrypoint.py +3 -2
  496. zenml/services/local/local_daemon_entrypoint.py +9 -6
  497. zenml/services/local/local_service.py +1 -1
  498. zenml/services/local/local_service_endpoint.py +1 -1
  499. zenml/services/service.py +222 -130
  500. zenml/services/service_status.py +2 -1
  501. zenml/services/service_type.py +6 -5
  502. zenml/stack/flavor.py +25 -18
  503. zenml/stack/flavor_registry.py +4 -4
  504. zenml/stack/stack.py +20 -131
  505. zenml/stack/stack_component.py +136 -110
  506. zenml/stack/utils.py +36 -15
  507. zenml/stack_deployments/__init__.py +14 -0
  508. zenml/stack_deployments/aws_stack_deployment.py +320 -0
  509. zenml/stack_deployments/azure_stack_deployment.py +315 -0
  510. zenml/stack_deployments/gcp_stack_deployment.py +315 -0
  511. zenml/stack_deployments/stack_deployment.py +232 -0
  512. zenml/stack_deployments/utils.py +48 -0
  513. zenml/step_operators/step_operator_entrypoint_configuration.py +2 -1
  514. zenml/steps/__init__.py +3 -9
  515. zenml/steps/base_step.py +172 -315
  516. zenml/{new/steps → steps}/decorated_step.py +1 -0
  517. zenml/steps/entrypoint_function_utils.py +33 -93
  518. zenml/{new/steps → steps}/step_context.py +70 -50
  519. zenml/steps/step_decorator.py +47 -93
  520. zenml/steps/step_invocation.py +22 -60
  521. zenml/steps/utils.py +161 -48
  522. zenml/types.py +14 -1
  523. zenml/utils/archivable.py +178 -0
  524. zenml/utils/callback_registry.py +71 -0
  525. zenml/utils/code_repository_utils.py +1 -0
  526. zenml/utils/code_utils.py +346 -0
  527. zenml/utils/cuda_utils.py +50 -0
  528. zenml/utils/dashboard_utils.py +67 -21
  529. zenml/utils/deprecation_utils.py +22 -24
  530. zenml/utils/dict_utils.py +22 -0
  531. zenml/utils/docker_utils.py +34 -5
  532. zenml/utils/downloaded_repository_context.py +1 -0
  533. zenml/utils/env_utils.py +55 -1
  534. zenml/utils/filesync_model.py +65 -28
  535. zenml/utils/function_utils.py +260 -0
  536. zenml/utils/integration_utils.py +1 -0
  537. zenml/utils/json_utils.py +131 -0
  538. zenml/utils/materializer_utils.py +1 -1
  539. zenml/utils/metadata_utils.py +368 -0
  540. zenml/utils/notebook_utils.py +136 -0
  541. zenml/utils/package_utils.py +89 -0
  542. zenml/utils/pagination_utils.py +9 -7
  543. zenml/utils/pipeline_docker_image_builder.py +152 -149
  544. zenml/utils/pydantic_utils.py +276 -66
  545. zenml/utils/requirements_utils.py +71 -0
  546. zenml/utils/secret_utils.py +66 -12
  547. zenml/utils/settings_utils.py +2 -1
  548. zenml/utils/singleton.py +15 -3
  549. zenml/utils/source_code_utils.py +1 -0
  550. zenml/utils/source_utils.py +236 -14
  551. zenml/utils/string_utils.py +140 -0
  552. zenml/utils/typed_model.py +5 -3
  553. zenml/utils/typing_utils.py +223 -0
  554. zenml/utils/visualization_utils.py +5 -3
  555. zenml/utils/yaml_utils.py +1 -1
  556. zenml/zen_server/auth.py +387 -55
  557. zenml/zen_server/cache.py +208 -0
  558. zenml/zen_server/cloud_utils.py +253 -0
  559. zenml/zen_server/csrf.py +91 -0
  560. zenml/zen_server/dashboard/assets/404-Dfq64Boz.js +1 -0
  561. zenml/zen_server/dashboard/assets/@radix-DeK6qiuw.js +85 -0
  562. zenml/zen_server/dashboard/assets/@react-router-B3Z5rLr2.js +29 -0
  563. zenml/zen_server/dashboard/assets/@reactflow-BUNIMFeC.js +17 -0
  564. zenml/zen_server/dashboard/assets/@reactflow-C26Olbza.css +1 -0
  565. zenml/zen_server/dashboard/assets/@tanstack-DT5WLu9C.js +22 -0
  566. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-B73Vs10T.js +1 -0
  567. zenml/zen_server/dashboard/assets/CodeSnippet-Bbx6fIb6.css +1 -0
  568. zenml/zen_server/dashboard/assets/CodeSnippet-DIJRT2NT.js +9 -0
  569. zenml/zen_server/dashboard/assets/CollapsibleCard-BzUHGZOU.js +1 -0
  570. zenml/zen_server/dashboard/assets/Commands-BEGyld4c.js +1 -0
  571. zenml/zen_server/dashboard/assets/ComponentBadge-xyKiek1s.js +1 -0
  572. zenml/zen_server/dashboard/assets/CopyButton-DhW-mapu.js +2 -0
  573. zenml/zen_server/dashboard/assets/CsvVizualization-D8oazBiE.js +15 -0
  574. zenml/zen_server/dashboard/assets/DeleteAlertDialog-WkSIIgfy.js +1 -0
  575. zenml/zen_server/dashboard/assets/DialogItem-Bgroeg29.js +1 -0
  576. zenml/zen_server/dashboard/assets/DisplayDate-CDMUcQHS.js +1 -0
  577. zenml/zen_server/dashboard/assets/EmptyState-BzdlCwp3.js +1 -0
  578. zenml/zen_server/dashboard/assets/Error-CY5tlu17.js +1 -0
  579. zenml/zen_server/dashboard/assets/ExecutionStatus-G8mjIaeA.js +1 -0
  580. zenml/zen_server/dashboard/assets/Helpbox-Bb1ed--O.js +1 -0
  581. zenml/zen_server/dashboard/assets/Infobox-Da6-76M2.js +1 -0
  582. zenml/zen_server/dashboard/assets/InlineAvatar-DqnZaBNq.js +1 -0
  583. zenml/zen_server/dashboard/assets/Lock-CYYy18Mm.js +1 -0
  584. zenml/zen_server/dashboard/assets/MarkdownVisualization-ylXaAxev.js +14 -0
  585. zenml/zen_server/dashboard/assets/NestedCollapsible-aK5ojKoF.js +1 -0
  586. zenml/zen_server/dashboard/assets/NumberBox-Dtp3J6g5.js +1 -0
  587. zenml/zen_server/dashboard/assets/Partials-CqZp5NMX.js +1 -0
  588. zenml/zen_server/dashboard/assets/PasswordChecker-B0nadgh6.js +1 -0
  589. zenml/zen_server/dashboard/assets/ProBadge-B4tRUYve.js +1 -0
  590. zenml/zen_server/dashboard/assets/ProCta-CZuP29Qz.js +1 -0
  591. zenml/zen_server/dashboard/assets/ProviderIcon-Bd7GUQ1_.js +1 -0
  592. zenml/zen_server/dashboard/assets/ProviderRadio-mstdqzsS.js +1 -0
  593. zenml/zen_server/dashboard/assets/RunSelector-CsruSB4i.js +1 -0
  594. zenml/zen_server/dashboard/assets/RunsBody-DxxtWVYz.js +1 -0
  595. zenml/zen_server/dashboard/assets/SearchField-D6tPxyqw.js +1 -0
  596. zenml/zen_server/dashboard/assets/SecretTooltip-CLzJIYW_.js +1 -0
  597. zenml/zen_server/dashboard/assets/SetPassword-Yn50ooBC.js +1 -0
  598. zenml/zen_server/dashboard/assets/StackList-U537qoYd.js +1 -0
  599. zenml/zen_server/dashboard/assets/Tabs-CNv-eTYM.js +1 -0
  600. zenml/zen_server/dashboard/assets/Tick-jEIevzVf.js +1 -0
  601. zenml/zen_server/dashboard/assets/UpdatePasswordSchemas-C16GW-kX.js +1 -0
  602. zenml/zen_server/dashboard/assets/UsageReason-Bf2tzhv1.js +1 -0
  603. zenml/zen_server/dashboard/assets/WizardFooter-D6i-AP1K.js +1 -0
  604. zenml/zen_server/dashboard/assets/acp-DOsXjFc7.webp +0 -0
  605. zenml/zen_server/dashboard/assets/adam-e-y0WnB_.webp +0 -0
  606. zenml/zen_server/dashboard/assets/alex-DcCuDHPg.webp +0 -0
  607. zenml/zen_server/dashboard/assets/all-pipeline-runs-query-DUti43aF.js +1 -0
  608. zenml/zen_server/dashboard/assets/baris-C0ZrZ10g.webp +0 -0
  609. zenml/zen_server/dashboard/assets/check-DloQpStc.js +1 -0
  610. zenml/zen_server/dashboard/assets/check-circle-jNbX5-sR.js +1 -0
  611. zenml/zen_server/dashboard/assets/chevron-down-6JyMkfjR.js +1 -0
  612. zenml/zen_server/dashboard/assets/chevron-right-double-D7ojK9Co.js +1 -0
  613. zenml/zen_server/dashboard/assets/cloud-squares-DeRLMopf.svg +43 -0
  614. zenml/zen_server/dashboard/assets/code-browser-CUFUIHfp.js +1 -0
  615. zenml/zen_server/dashboard/assets/code-snippets-CqONne41.js +13 -0
  616. zenml/zen_server/dashboard/assets/components-Br2ezRib.js +1 -0
  617. zenml/zen_server/dashboard/assets/connectors-video-C9qY4syJ.svg +21 -0
  618. zenml/zen_server/dashboard/assets/copy-C8XQA2Ug.js +1 -0
  619. zenml/zen_server/dashboard/assets/create-stack-Ch2WPs9U.js +1 -0
  620. zenml/zen_server/dashboard/assets/dates-3pMLCNrD.js +1 -0
  621. zenml/zen_server/dashboard/assets/delete-run-Byf9hTjA.js +1 -0
  622. zenml/zen_server/dashboard/assets/docker-BdA9vrnW.js +1 -0
  623. zenml/zen_server/dashboard/assets/dots-horizontal-otGBOSDJ.js +1 -0
  624. zenml/zen_server/dashboard/assets/flyte-Cj-xy_8I.svg +10 -0
  625. zenml/zen_server/dashboard/assets/form-schemas-BZqKBPBF.js +1 -0
  626. zenml/zen_server/dashboard/assets/gcp-CFtm4BA7.js +1 -0
  627. zenml/zen_server/dashboard/assets/hamza-NKKOZz1I.webp +0 -0
  628. zenml/zen_server/dashboard/assets/help-Cc9bBIJH.js +1 -0
  629. zenml/zen_server/dashboard/assets/index-CE0aQlv8.js +55 -0
  630. zenml/zen_server/dashboard/assets/index-CtdYkjUi.js +1 -0
  631. zenml/zen_server/dashboard/assets/index-CyBKZcpO.js +1 -0
  632. zenml/zen_server/dashboard/assets/index-DXvT1_Um.css +1 -0
  633. zenml/zen_server/dashboard/assets/index-Uu49AX48.js +1 -0
  634. zenml/zen_server/dashboard/assets/index-v6gQjDEo.js +1 -0
  635. zenml/zen_server/dashboard/assets/index.esm-Dy6Z9Ung.js +1 -0
  636. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-BLGc9T1a.woff2 +0 -0
  637. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-ZzOtrSSW.woff +0 -0
  638. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-D4Vwzodn.woff2 +0 -0
  639. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DH2hs3aW.woff +0 -0
  640. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BGBWG807.woff2 +0 -0
  641. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BuzJQFbW.woff +0 -0
  642. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-BPnxn4xp.woff +0 -0
  643. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-Dc4VJyIJ.woff2 +0 -0
  644. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-BShVwWPj.woff2 +0 -0
  645. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-CUiC4oBV.woff +0 -0
  646. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-Bt9VVOA-.woff +0 -0
  647. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-CaqZN2hq.woff2 +0 -0
  648. zenml/zen_server/dashboard/assets/inter-greek-400-normal-BZzXV7-1.woff +0 -0
  649. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DxZsaF_h.woff2 +0 -0
  650. zenml/zen_server/dashboard/assets/inter-greek-500-normal-CeQXL5ds.woff2 +0 -0
  651. zenml/zen_server/dashboard/assets/inter-greek-500-normal-d_eO-yCQ.woff +0 -0
  652. zenml/zen_server/dashboard/assets/inter-greek-600-normal-CwicyhtI.woff +0 -0
  653. zenml/zen_server/dashboard/assets/inter-greek-600-normal-Dhlb-90d.woff2 +0 -0
  654. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-Bput3-QP.woff2 +0 -0
  655. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-DCpCPQOf.woff +0 -0
  656. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-B6guLgqG.woff2 +0 -0
  657. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-M2hEX8vc.woff +0 -0
  658. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-C9WLioJ8.woff +0 -0
  659. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-Cnui8OiR.woff2 +0 -0
  660. zenml/zen_server/dashboard/assets/inter-latin-400-normal-BOOGhInR.woff2 +0 -0
  661. zenml/zen_server/dashboard/assets/inter-latin-400-normal-gitzw0hO.woff +0 -0
  662. zenml/zen_server/dashboard/assets/inter-latin-500-normal-D2bGa7uu.woff2 +0 -0
  663. zenml/zen_server/dashboard/assets/inter-latin-500-normal-deR1Tlfd.woff +0 -0
  664. zenml/zen_server/dashboard/assets/inter-latin-600-normal-B5cFAncS.woff +0 -0
  665. zenml/zen_server/dashboard/assets/inter-latin-600-normal-D273HNI0.woff2 +0 -0
  666. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-C1t-h-pH.woff +0 -0
  667. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-hnt3BR84.woff2 +0 -0
  668. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2 +0 -0
  669. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-UMdmhHu2.woff +0 -0
  670. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-BnYJhD27.woff2 +0 -0
  671. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-CAF0vJDd.woff +0 -0
  672. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-BUNmGMP1.woff +0 -0
  673. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
  674. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
  675. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DQPw2Hwd.woff +0 -0
  676. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
  677. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cm6aH8_k.woff +0 -0
  678. zenml/zen_server/dashboard/assets/key-icon-aH-QIa5R.js +1 -0
  679. zenml/zen_server/dashboard/assets/kubernetes-B2wmAJ1d.js +1 -0
  680. zenml/zen_server/dashboard/assets/layout-BtHBmE4w.js +1 -0
  681. zenml/zen_server/dashboard/assets/link-external-b9AXw_sW.js +1 -0
  682. zenml/zen_server/dashboard/assets/login-command-CkqxPtV3.js +1 -0
  683. zenml/zen_server/dashboard/assets/login-mutation-DNDVp_2H.js +1 -0
  684. zenml/zen_server/dashboard/assets/logs-WMSM52RF.js +1 -0
  685. zenml/zen_server/dashboard/assets/mcp-Cb1aMeoq.webp +0 -0
  686. zenml/zen_server/dashboard/assets/metaflow-weOkWNyT.svg +10 -0
  687. zenml/zen_server/dashboard/assets/not-found-Bmup4ctE.js +1 -0
  688. zenml/zen_server/dashboard/assets/package-C6uypY4h.js +1 -0
  689. zenml/zen_server/dashboard/assets/page--XLMzHrn.js +1 -0
  690. zenml/zen_server/dashboard/assets/page-ANYGfEUL.js +1 -0
  691. zenml/zen_server/dashboard/assets/page-B5Sr8pib.js +1 -0
  692. zenml/zen_server/dashboard/assets/page-BC27C_OI.js +2 -0
  693. zenml/zen_server/dashboard/assets/page-BNxYrN0q.js +1 -0
  694. zenml/zen_server/dashboard/assets/page-BYJfqgLN.js +1 -0
  695. zenml/zen_server/dashboard/assets/page-B_0XkV48.js +1 -0
  696. zenml/zen_server/dashboard/assets/page-BrmJp1Wt.js +1 -0
  697. zenml/zen_server/dashboard/assets/page-C2nU3Gxn.js +1 -0
  698. zenml/zen_server/dashboard/assets/page-C70wZtV2.js +1 -0
  699. zenml/zen_server/dashboard/assets/page-CHRn1fQm.js +1 -0
  700. zenml/zen_server/dashboard/assets/page-CWr96ZKN.js +1 -0
  701. zenml/zen_server/dashboard/assets/page-CXAbSyp9.js +1 -0
  702. zenml/zen_server/dashboard/assets/page-CaeI9ptC.js +1 -0
  703. zenml/zen_server/dashboard/assets/page-Cc8ZEuj4.js +1 -0
  704. zenml/zen_server/dashboard/assets/page-CltCNL0T.js +1 -0
  705. zenml/zen_server/dashboard/assets/page-CmlYj7Nl.js +1 -0
  706. zenml/zen_server/dashboard/assets/page-D6Ev5P8V.js +1 -0
  707. zenml/zen_server/dashboard/assets/page-D9Oh05fl.js +1 -0
  708. zenml/zen_server/dashboard/assets/page-DGlm1RVc.js +1 -0
  709. zenml/zen_server/dashboard/assets/page-DN4BVIOL.js +1 -0
  710. zenml/zen_server/dashboard/assets/page-Dif8CWyZ.js +1 -0
  711. zenml/zen_server/dashboard/assets/page-DlIi5ThM.js +1 -0
  712. zenml/zen_server/dashboard/assets/page-DoW7YxTu.js +1 -0
  713. zenml/zen_server/dashboard/assets/page-Dth9X1Ih.js +1 -0
  714. zenml/zen_server/dashboard/assets/page-DweqqCkF.js +1 -0
  715. zenml/zen_server/dashboard/assets/page-DyOJ_pq3.js +1 -0
  716. zenml/zen_server/dashboard/assets/page-Hn8q9iJZ.js +1 -0
  717. zenml/zen_server/dashboard/assets/page-IhckKFnD.js +6 -0
  718. zenml/zen_server/dashboard/assets/page-LyZ_l8vR.js +1 -0
  719. zenml/zen_server/dashboard/assets/page-PamGpk0j.js +1 -0
  720. zenml/zen_server/dashboard/assets/page-PxOWfKgF.js +2 -0
  721. zenml/zen_server/dashboard/assets/persist-DeXRG61d.js +1 -0
  722. zenml/zen_server/dashboard/assets/persist-vP0-Xl4f.js +1 -0
  723. zenml/zen_server/dashboard/assets/plus-tf1V2hTJ.js +1 -0
  724. zenml/zen_server/dashboard/assets/refresh-BjOeWlEq.js +1 -0
  725. zenml/zen_server/dashboard/assets/repos-video-D8kpu60k.svg +9 -0
  726. zenml/zen_server/dashboard/assets/rocket-DjT2cDvG.js +1 -0
  727. zenml/zen_server/dashboard/assets/service-DH_oUqQj.js +2 -0
  728. zenml/zen_server/dashboard/assets/settings_preview-0JLrRgHP.webp +0 -0
  729. zenml/zen_server/dashboard/assets/sharedSchema-Bw1_Wa7l.js +14 -0
  730. zenml/zen_server/dashboard/assets/stack-detail-query-B_0R_fd6.js +1 -0
  731. zenml/zen_server/dashboard/assets/stefan-B08Ftbba.webp +0 -0
  732. zenml/zen_server/dashboard/assets/templates-1S_8WeSK.webp +0 -0
  733. zenml/zen_server/dashboard/assets/tick-circle-BEX_Tp4v.js +1 -0
  734. zenml/zen_server/dashboard/assets/tour-cover-BYfeen6M.webp +0 -0
  735. zenml/zen_server/dashboard/assets/trash-arLUMWMS.js +1 -0
  736. zenml/zen_server/dashboard/assets/update-server-settings-mutation-D9qYhfaN.js +1 -0
  737. zenml/zen_server/dashboard/assets/upgrade-form-CwRHBuXB.webp +0 -0
  738. zenml/zen_server/dashboard/assets/url-Dh93fvh0.js +1 -0
  739. zenml/zen_server/dashboard/assets/zod-BwEbpOxH.js +1 -0
  740. zenml/zen_server/dashboard/index.html +19 -1
  741. zenml/zen_server/deploy/__init__.py +7 -16
  742. zenml/zen_server/deploy/base_provider.py +49 -78
  743. zenml/zen_server/deploy/{local → daemon}/__init__.py +3 -3
  744. zenml/zen_server/deploy/{local/local_provider.py → daemon/daemon_provider.py} +48 -66
  745. zenml/zen_server/deploy/{local/local_zen_server.py → daemon/daemon_zen_server.py} +78 -62
  746. zenml/zen_server/deploy/deployer.py +94 -175
  747. zenml/zen_server/deploy/deployment.py +23 -17
  748. zenml/zen_server/deploy/docker/docker_provider.py +15 -31
  749. zenml/zen_server/deploy/docker/docker_zen_server.py +30 -35
  750. zenml/zen_server/deploy/helm/Chart.yaml +1 -1
  751. zenml/zen_server/deploy/helm/README.md +3 -13
  752. zenml/zen_server/deploy/helm/templates/NOTES.txt +23 -7
  753. zenml/zen_server/deploy/helm/templates/_environment.tpl +175 -23
  754. zenml/zen_server/deploy/helm/templates/server-db-job.yaml +45 -18
  755. zenml/zen_server/deploy/helm/templates/server-db-pvc.yaml +25 -0
  756. zenml/zen_server/deploy/helm/templates/server-deployment.yaml +22 -6
  757. zenml/zen_server/deploy/helm/templates/server-secret.yaml +11 -10
  758. zenml/zen_server/deploy/helm/values.yaml +210 -28
  759. zenml/zen_server/exceptions.py +20 -1
  760. zenml/zen_server/feature_gate/__init__.py +13 -0
  761. zenml/zen_server/feature_gate/endpoint_utils.py +61 -0
  762. zenml/zen_server/feature_gate/feature_gate_interface.py +49 -0
  763. zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +125 -0
  764. zenml/zen_server/jwt.py +64 -32
  765. zenml/zen_server/rate_limit.py +200 -0
  766. zenml/zen_server/rbac/endpoint_utils.py +92 -9
  767. zenml/zen_server/rbac/models.py +21 -17
  768. zenml/zen_server/rbac/rbac_sql_zen_store.py +175 -0
  769. zenml/zen_server/rbac/utils.py +71 -30
  770. zenml/zen_server/rbac/zenml_cloud_rbac.py +13 -188
  771. zenml/zen_server/routers/actions_endpoints.py +324 -0
  772. zenml/zen_server/routers/artifact_version_endpoints.py +28 -2
  773. zenml/zen_server/routers/auth_endpoints.py +249 -131
  774. zenml/zen_server/routers/code_repositories_endpoints.py +1 -0
  775. zenml/zen_server/routers/devices_endpoints.py +56 -49
  776. zenml/zen_server/routers/event_source_endpoints.py +327 -0
  777. zenml/zen_server/routers/logs_endpoints.py +66 -0
  778. zenml/zen_server/routers/model_versions_endpoints.py +59 -0
  779. zenml/zen_server/routers/models_endpoints.py +7 -1
  780. zenml/zen_server/routers/pipeline_builds_endpoints.py +6 -1
  781. zenml/zen_server/routers/pipeline_deployments_endpoints.py +35 -0
  782. zenml/zen_server/routers/pipelines_endpoints.py +19 -32
  783. zenml/zen_server/routers/plugin_endpoints.py +107 -0
  784. zenml/zen_server/routers/run_templates_endpoints.py +212 -0
  785. zenml/zen_server/routers/runs_endpoints.py +91 -32
  786. zenml/zen_server/routers/schedule_endpoints.py +1 -0
  787. zenml/zen_server/routers/secrets_endpoints.py +4 -2
  788. zenml/zen_server/routers/server_endpoints.py +186 -4
  789. zenml/zen_server/routers/service_connectors_endpoints.py +56 -0
  790. zenml/zen_server/routers/service_endpoints.py +180 -0
  791. zenml/zen_server/routers/stack_components_endpoints.py +2 -1
  792. zenml/zen_server/routers/stack_deployment_endpoints.py +164 -0
  793. zenml/zen_server/routers/steps_endpoints.py +21 -12
  794. zenml/zen_server/routers/triggers_endpoints.py +336 -0
  795. zenml/zen_server/routers/users_endpoints.py +280 -45
  796. zenml/zen_server/routers/webhook_endpoints.py +127 -0
  797. zenml/zen_server/routers/workspaces_endpoints.py +220 -185
  798. zenml/zen_server/secure_headers.py +120 -0
  799. zenml/{new → zen_server/template_execution}/__init__.py +1 -1
  800. zenml/zen_server/template_execution/runner_entrypoint_configuration.py +42 -0
  801. zenml/zen_server/template_execution/utils.py +474 -0
  802. zenml/zen_server/template_execution/workload_manager_interface.py +92 -0
  803. zenml/zen_server/utils.py +374 -74
  804. zenml/zen_server/zen_server_api.py +299 -52
  805. zenml/zen_stores/base_zen_store.py +90 -58
  806. zenml/zen_stores/migrations/alembic.py +22 -9
  807. zenml/zen_stores/migrations/env.py +2 -2
  808. zenml/zen_stores/migrations/utils.py +731 -0
  809. zenml/zen_stores/migrations/versions/0.21.0_release.py +0 -1
  810. zenml/zen_stores/migrations/versions/0.21.1_release.py +0 -1
  811. zenml/zen_stores/migrations/versions/0.22.0_release.py +0 -1
  812. zenml/zen_stores/migrations/versions/0.23.0_release.py +0 -1
  813. zenml/zen_stores/migrations/versions/0.30.0_release.py +0 -1
  814. zenml/zen_stores/migrations/versions/0.31.0_release.py +0 -1
  815. zenml/zen_stores/migrations/versions/0.31.1_release.py +0 -1
  816. zenml/zen_stores/migrations/versions/0.32.0_release.py +0 -1
  817. zenml/zen_stores/migrations/versions/0.32.1_release.py +0 -1
  818. zenml/zen_stores/migrations/versions/0.33.0_release.py +0 -1
  819. zenml/zen_stores/migrations/versions/0.34.0_release.py +0 -1
  820. zenml/zen_stores/migrations/versions/0.35.0_release.py +0 -1
  821. zenml/zen_stores/migrations/versions/0.35.1_release.py +0 -1
  822. zenml/zen_stores/migrations/versions/0.36.0_release.py +0 -1
  823. zenml/zen_stores/migrations/versions/0.36.1_release.py +0 -1
  824. zenml/zen_stores/migrations/versions/0.37.0_release.py +0 -1
  825. zenml/zen_stores/migrations/versions/0.38.0_release.py +0 -1
  826. zenml/zen_stores/migrations/versions/0.39.0_release.py +0 -1
  827. zenml/zen_stores/migrations/versions/0.39.1_release.py +0 -1
  828. zenml/zen_stores/migrations/versions/0.40.0_release.py +0 -1
  829. zenml/zen_stores/migrations/versions/0.40.1_release.py +0 -1
  830. zenml/zen_stores/migrations/versions/0.40.2_release.py +0 -1
  831. zenml/zen_stores/migrations/versions/0.40.3_release.py +0 -1
  832. zenml/zen_stores/migrations/versions/0.41.0_release.py +0 -1
  833. zenml/zen_stores/migrations/versions/0.42.0_release.py +0 -1
  834. zenml/zen_stores/migrations/versions/0.42.1_release.py +0 -1
  835. zenml/zen_stores/migrations/versions/0.43.0_release.py +0 -1
  836. zenml/zen_stores/migrations/versions/0.44.0_release.py +0 -1
  837. zenml/zen_stores/migrations/versions/0.44.1_release.py +0 -1
  838. zenml/zen_stores/migrations/versions/0.44.2_release.py +0 -1
  839. zenml/zen_stores/migrations/versions/0.44.3_release.py +0 -1
  840. zenml/zen_stores/migrations/versions/0.45.0_release.py +0 -1
  841. zenml/zen_stores/migrations/versions/0.45.1_release_0_45_1.py +0 -1
  842. zenml/zen_stores/migrations/versions/0.45.2_release.py +0 -1
  843. zenml/zen_stores/migrations/versions/0.45.3_release.py +0 -1
  844. zenml/zen_stores/migrations/versions/0.45.4_release.py +0 -1
  845. zenml/zen_stores/migrations/versions/0.45.5_release.py +0 -1
  846. zenml/zen_stores/migrations/versions/0.45.6_release.py +0 -1
  847. zenml/zen_stores/migrations/versions/0.46.0_release.py +0 -1
  848. zenml/zen_stores/migrations/versions/0.46.1_release.py +0 -1
  849. zenml/zen_stores/migrations/versions/0.47.0_release.py +0 -1
  850. zenml/zen_stores/migrations/versions/0.50.0_release.py +0 -1
  851. zenml/zen_stores/migrations/versions/0.51.0_release.py +0 -1
  852. zenml/zen_stores/migrations/versions/0.52.0_release.py +0 -1
  853. zenml/zen_stores/migrations/versions/0.53.0_release.py +0 -1
  854. zenml/zen_stores/migrations/versions/0.53.1_release.py +0 -1
  855. zenml/zen_stores/migrations/versions/0.54.0_release.py +0 -1
  856. zenml/zen_stores/migrations/versions/0.54.1_release.py +0 -1
  857. zenml/zen_stores/migrations/versions/0.55.0_release.py +0 -1
  858. zenml/zen_stores/migrations/versions/0.55.1_release.py +23 -0
  859. zenml/zen_stores/migrations/versions/0.55.2_release.py +23 -0
  860. zenml/zen_stores/migrations/versions/0.55.3_release.py +23 -0
  861. zenml/zen_stores/migrations/versions/0.55.4_release.py +23 -0
  862. zenml/zen_stores/migrations/versions/0.55.5_release.py +23 -0
  863. zenml/zen_stores/migrations/versions/0.56.0_release.py +23 -0
  864. zenml/zen_stores/migrations/versions/0.56.1_release.py +23 -0
  865. zenml/zen_stores/migrations/versions/0.56.2_release.py +23 -0
  866. zenml/zen_stores/migrations/versions/0.56.3_release.py +23 -0
  867. zenml/zen_stores/migrations/versions/0.56.4_release.py +23 -0
  868. zenml/zen_stores/migrations/versions/0.57.0.rc1_release.py +23 -0
  869. zenml/zen_stores/migrations/versions/0.57.0.rc2_release.py +23 -0
  870. zenml/zen_stores/migrations/versions/0.57.0_release.py +23 -0
  871. zenml/zen_stores/migrations/versions/0.57.1_release.py +23 -0
  872. zenml/zen_stores/migrations/versions/0.58.0_release.py +23 -0
  873. zenml/zen_stores/migrations/versions/0.58.1_release.py +23 -0
  874. zenml/zen_stores/migrations/versions/0.58.2_release.py +23 -0
  875. zenml/zen_stores/migrations/versions/0.60.0_release.py +23 -0
  876. zenml/zen_stores/migrations/versions/0.61.0_release.py +23 -0
  877. zenml/zen_stores/migrations/versions/0.62.0_release.py +23 -0
  878. zenml/zen_stores/migrations/versions/0.63.0_release.py +23 -0
  879. zenml/zen_stores/migrations/versions/0.64.0_release.py +23 -0
  880. zenml/zen_stores/migrations/versions/0.65.0_release.py +23 -0
  881. zenml/zen_stores/migrations/versions/0.66.0_release.py +23 -0
  882. zenml/zen_stores/migrations/versions/0.67.0_release.py +23 -0
  883. zenml/zen_stores/migrations/versions/0.68.0_release.py +23 -0
  884. zenml/zen_stores/migrations/versions/0.68.1_release.py +23 -0
  885. zenml/zen_stores/migrations/versions/0.70.0_release.py +23 -0
  886. zenml/zen_stores/migrations/versions/0.71.0_release.py +23 -0
  887. zenml/zen_stores/migrations/versions/0.72.0_release.py +23 -0
  888. zenml/zen_stores/migrations/versions/026d4577b6a0_add_code_path.py +39 -0
  889. zenml/zen_stores/migrations/versions/03742aa7fdd7_add_secrets.py +1 -0
  890. zenml/zen_stores/migrations/versions/0701da9951a0_added_service_table.py +94 -0
  891. zenml/zen_stores/migrations/versions/0b06faa59c93_add_service_connectors.py +1 -0
  892. zenml/zen_stores/migrations/versions/0d707865f404_adding_labels_to_stacks.py +30 -0
  893. zenml/zen_stores/migrations/versions/0e4735b23577_increase_pipeline_spec_field_length.py +1 -0
  894. zenml/zen_stores/migrations/versions/1041bc644e0d_remove_secrets_manager.py +6 -3
  895. zenml/zen_stores/migrations/versions/10a907dad202_delete_mlmd_tables.py +2 -1
  896. zenml/zen_stores/migrations/versions/14d687c8fa1c_rename_model_config_to_model_version.py +1 -0
  897. zenml/zen_stores/migrations/versions/19f27d5b234e_add_build_and_deployment_tables.py +1 -0
  898. zenml/zen_stores/migrations/versions/1a9a9d2a836d_admin_users.py +56 -0
  899. zenml/zen_stores/migrations/versions/1ac1b9c04da1_make_secrets_values_optional.py +1 -0
  900. zenml/zen_stores/migrations/versions/1cb6477f72d6_move_artifact_save_type.py +99 -0
  901. zenml/zen_stores/migrations/versions/1d74e596abb8_add_run_once_start_time_to_schedule.py +36 -0
  902. zenml/zen_stores/migrations/versions/1d8f30c54477_migrate_to_new_.py +124 -0
  903. zenml/zen_stores/migrations/versions/248dfd320b68_update_size_of_flavor_config_schema.py +1 -0
  904. zenml/zen_stores/migrations/versions/25155145c545_separate_actions_and_triggers.py +228 -0
  905. zenml/zen_stores/migrations/versions/26351d482b9e_add_step_run_unique_constraint.py +37 -0
  906. zenml/zen_stores/migrations/versions/26b776ad583e_redesign_artifacts.py +9 -10
  907. zenml/zen_stores/migrations/versions/2d201872e23c_remove_db_dependency_loop.py +29 -0
  908. zenml/zen_stores/migrations/versions/37835ce041d2_optimizing_database.py +4 -3
  909. zenml/zen_stores/migrations/versions/389046140cad_data_versioning.py +1 -0
  910. zenml/zen_stores/migrations/versions/3944116bbd56_rename_project_to_workspace.py +1 -0
  911. zenml/zen_stores/migrations/versions/3b68abe58f44_add_model_watchtower_entities.py +1 -0
  912. zenml/zen_stores/migrations/versions/3c5a367730c2_add_environment_info_to_runs.py +1 -0
  913. zenml/zen_stores/migrations/versions/3dcc5d20e82f_add_last_user_activity.py +51 -0
  914. zenml/zen_stores/migrations/versions/43a86093b60e_add_labels_for_stack_components.py +1 -0
  915. zenml/zen_stores/migrations/versions/46506f72f0ed_add_server_settings.py +123 -0
  916. zenml/zen_stores/migrations/versions/479103df60b6_add_triggers.py +162 -0
  917. zenml/zen_stores/migrations/versions/4a3087070f4e_add_step_source_code.py +1 -0
  918. zenml/zen_stores/migrations/versions/4c41c0ca42db_add_code_repository_table.py +1 -0
  919. zenml/zen_stores/migrations/versions/4d688d8f7aff_rename_model_version_to_model.py +1 -0
  920. zenml/zen_stores/migrations/versions/4e1972485075_endpoint_artifact_deployment_artifact.py +1 -0
  921. zenml/zen_stores/migrations/versions/4f66af55fbb9_rename_model_config_model_to_model_.py +1 -0
  922. zenml/zen_stores/migrations/versions/5330ba58bf20_rename_tables_and_foreign_keys.py +8 -9
  923. zenml/zen_stores/migrations/versions/5994f9ad0489_introduce_role_permissions.py +4 -2
  924. zenml/zen_stores/migrations/versions/5cc3f41cf048_add_save_models_to_registry.py +1 -0
  925. zenml/zen_stores/migrations/versions/6119cd9b93c2_tags_table.py +1 -0
  926. zenml/zen_stores/migrations/versions/623a234c11f5_add_sdk_docs_url_to_flavors.py +1 -0
  927. zenml/zen_stores/migrations/versions/6917bce75069_add_pipeline_run_unique_constraint.py +5 -4
  928. zenml/zen_stores/migrations/versions/6a28c4fd0ef2_add_caching_info.py +1 -0
  929. zenml/zen_stores/migrations/versions/6f707b385dc1_fix_model_artifacts.py +1 -0
  930. zenml/zen_stores/migrations/versions/722392c91006_make_is_service_account_mandatory.py +1 -0
  931. zenml/zen_stores/migrations/versions/72675226b2de_unique_users.py +31 -0
  932. zenml/zen_stores/migrations/versions/72722dee4686_track_server_version.py +1 -0
  933. zenml/zen_stores/migrations/versions/7280c14811d6_use_text_type.py +1 -0
  934. zenml/zen_stores/migrations/versions/728c6369cfaa_add_name_column_to_input_artifact_pk.py +4 -2
  935. zenml/zen_stores/migrations/versions/729263e47b55_fix_external_input_artifacts.py +1 -0
  936. zenml/zen_stores/migrations/versions/743ec82b1b3c_update_size_of_build_images.py +3 -2
  937. zenml/zen_stores/migrations/versions/7500f434b71c_remove_shared_columns.py +4 -2
  938. zenml/zen_stores/migrations/versions/76a7b9451ccd_add_build_template_deployment_id.py +52 -0
  939. zenml/zen_stores/migrations/versions/7834208cc3f6_artifact_project_scoping.py +9 -7
  940. zenml/zen_stores/migrations/versions/7b651bf6822e_track_secrets_in_db.py +7 -7
  941. zenml/zen_stores/migrations/versions/7d1919bb1ef0_add_run_templates.py +100 -0
  942. zenml/zen_stores/migrations/versions/7e4a481d17f7_add_identity_table.py +3 -2
  943. zenml/zen_stores/migrations/versions/7f603e583dd7_fixed_migration.py +2 -1
  944. zenml/zen_stores/migrations/versions/86fa52918b54_remove_teams_and_roles.py +1 -0
  945. zenml/zen_stores/migrations/versions/8a64fbfecda0_add_num_outputs_to_run_step.py +1 -0
  946. zenml/zen_stores/migrations/versions/8ed03137cacc_polymorthic_run_metadata.py +1 -0
  947. zenml/zen_stores/migrations/versions/904464ea4041_add_pipeline_model_run_unique_constraints.py +192 -0
  948. zenml/zen_stores/migrations/versions/909550c7c4da_remove_user_hub_token.py +36 -0
  949. zenml/zen_stores/migrations/versions/93cbda80a732_add_service_accounts.py +1 -0
  950. zenml/zen_stores/migrations/versions/979eff8fc4b1_add_code_repo_description_and_logo_url.py +1 -0
  951. zenml/zen_stores/migrations/versions/9971237fa937_artifact_visualizations.py +1 -0
  952. zenml/zen_stores/migrations/versions/9d8020441014_increase_step_configuration_length.py +1 -0
  953. zenml/zen_stores/migrations/versions/a1237ba94fd8_add_model_version_producer_run_unique_.py +68 -0
  954. zenml/zen_stores/migrations/versions/a39c4184c8ce_remove_secrets_manager_flavors.py +3 -2
  955. zenml/zen_stores/migrations/versions/a91762e6be36_artifact_version_table.py +5 -4
  956. zenml/zen_stores/migrations/versions/ade72effebaf_added_logs_table.py +1 -0
  957. zenml/zen_stores/migrations/versions/alembic_start.py +2 -1
  958. zenml/zen_stores/migrations/versions/b4eccf34dfa3_add_hub_token_to_user_model.py +1 -0
  959. zenml/zen_stores/migrations/versions/b4fca5241eea_migrate_onboarding_state.py +167 -0
  960. zenml/zen_stores/migrations/versions/b557b2871693_update_step_run_input_types.py +33 -0
  961. zenml/zen_stores/migrations/versions/b59aa68fdb1f_simplify_pipelines.py +139 -0
  962. zenml/zen_stores/migrations/versions/b73bc71f1106_remove_component_spec_path.py +36 -0
  963. zenml/zen_stores/migrations/versions/bf2120261b5a_add_configured_model_version_id.py +74 -0
  964. zenml/zen_stores/migrations/versions/c1b18cec3a48_increase_length_on_flavor_config_schema.py +1 -0
  965. zenml/zen_stores/migrations/versions/c22561cbb3a9_add_artifact_unique_constraints.py +86 -0
  966. zenml/zen_stores/migrations/versions/cc269488e5a9_separate_run_metadata.py +135 -0
  967. zenml/zen_stores/migrations/versions/cc9894cb58aa_add_user_metadata.py +41 -0
  968. zenml/zen_stores/migrations/versions/ccd68b7825ae_add_status_to_pipeline_and_step_run.py +1 -0
  969. zenml/zen_stores/migrations/versions/d02b3d3464cf_add_orchestrator_run_id_column.py +1 -0
  970. zenml/zen_stores/migrations/versions/d26471b6fe8f_update_build_filtering.py +1 -0
  971. zenml/zen_stores/migrations/versions/d7b3acf9aa46_create_schedule_table.py +1 -0
  972. zenml/zen_stores/migrations/versions/e1d66d91a099_add_stack_and_component_spec_paths_to_.py +1 -0
  973. zenml/zen_stores/migrations/versions/e5225281b4d3_add_connector_skew_tolerance.py +1 -0
  974. zenml/zen_stores/migrations/versions/e65aa6708ff7_pipeline_versioning.py +1 -0
  975. zenml/zen_stores/migrations/versions/ec0d785ca296_create_run_metadata_table.py +1 -0
  976. zenml/zen_stores/migrations/versions/ec6307720f92_simplify_model_version_links.py +119 -0
  977. zenml/zen_stores/migrations/versions/f3b3964e3a0f_add_oauth_devices.py +1 -0
  978. zenml/zen_stores/migrations/versions/f49904a80aa7_increase_length_of_artifact_table_sources.py +1 -0
  979. zenml/zen_stores/migrations/versions/fbd7f18ced1e_increase_step_run_field_lengths.py +5 -4
  980. zenml/zen_stores/rest_zen_store.py +1326 -305
  981. zenml/zen_stores/schemas/__init__.py +22 -3
  982. zenml/zen_stores/schemas/action_schemas.py +192 -0
  983. zenml/zen_stores/schemas/api_key_schemas.py +23 -10
  984. zenml/zen_stores/schemas/artifact_schemas.py +112 -49
  985. zenml/zen_stores/schemas/artifact_visualization_schemas.py +17 -8
  986. zenml/zen_stores/schemas/base_schemas.py +27 -0
  987. zenml/zen_stores/schemas/code_repository_schemas.py +25 -10
  988. zenml/zen_stores/schemas/component_schemas.py +74 -11
  989. zenml/zen_stores/schemas/constants.py +16 -0
  990. zenml/zen_stores/schemas/device_schemas.py +29 -15
  991. zenml/zen_stores/schemas/event_source_schemas.py +188 -0
  992. zenml/zen_stores/schemas/flavor_schemas.py +19 -9
  993. zenml/zen_stores/schemas/logs_schemas.py +12 -6
  994. zenml/zen_stores/schemas/model_schemas.py +192 -139
  995. zenml/zen_stores/schemas/pipeline_build_schemas.py +16 -16
  996. zenml/zen_stores/schemas/pipeline_deployment_schemas.py +58 -17
  997. zenml/zen_stores/schemas/pipeline_run_schemas.py +170 -35
  998. zenml/zen_stores/schemas/pipeline_schemas.py +51 -33
  999. zenml/zen_stores/schemas/run_metadata_schemas.py +28 -78
  1000. zenml/zen_stores/schemas/run_template_schemas.py +267 -0
  1001. zenml/zen_stores/schemas/schedule_schema.py +15 -5
  1002. zenml/zen_stores/schemas/secret_schemas.py +18 -10
  1003. zenml/zen_stores/schemas/server_settings_schemas.py +129 -0
  1004. zenml/zen_stores/schemas/service_connector_schemas.py +13 -6
  1005. zenml/zen_stores/schemas/service_schemas.py +258 -0
  1006. zenml/zen_stores/schemas/stack_schemas.py +23 -6
  1007. zenml/zen_stores/schemas/step_run_schemas.py +132 -41
  1008. zenml/zen_stores/schemas/tag_schemas.py +31 -50
  1009. zenml/zen_stores/schemas/trigger_schemas.py +316 -0
  1010. zenml/zen_stores/schemas/user_schemas.py +66 -23
  1011. zenml/zen_stores/schemas/utils.py +112 -0
  1012. zenml/zen_stores/schemas/workspace_schemas.py +36 -19
  1013. zenml/zen_stores/secrets_stores/aws_secrets_store.py +41 -32
  1014. zenml/zen_stores/secrets_stores/azure_secrets_store.py +20 -23
  1015. zenml/zen_stores/secrets_stores/base_secrets_store.py +80 -12
  1016. zenml/zen_stores/secrets_stores/gcp_secrets_store.py +42 -33
  1017. zenml/zen_stores/secrets_stores/hashicorp_secrets_store.py +7 -11
  1018. zenml/zen_stores/secrets_stores/secrets_store_interface.py +1 -0
  1019. zenml/zen_stores/secrets_stores/service_connector_secrets_store.py +15 -8
  1020. zenml/zen_stores/secrets_stores/sql_secrets_store.py +8 -9
  1021. zenml/zen_stores/sql_zen_store.py +4062 -799
  1022. zenml/zen_stores/template_utils.py +263 -0
  1023. zenml/zen_stores/zen_store_interface.py +614 -44
  1024. zenml_nightly-0.72.0.dev20250116.dist-info/METADATA +486 -0
  1025. zenml_nightly-0.72.0.dev20250116.dist-info/RECORD +1294 -0
  1026. {zenml_nightly-0.55.0.dev20240124.dist-info → zenml_nightly-0.72.0.dev20250116.dist-info}/WHEEL +1 -1
  1027. CLA.md +0 -110
  1028. CODE-OF-CONDUCT.md +0 -132
  1029. CONTRIBUTING.md +0 -260
  1030. README.md +0 -304
  1031. RELEASE_NOTES.md +0 -3919
  1032. ROADMAP.md +0 -5
  1033. SECURITY.md +0 -15
  1034. zenml/_hub/client.py +0 -285
  1035. zenml/_hub/constants.py +0 -21
  1036. zenml/_hub/utils.py +0 -80
  1037. zenml/api.py +0 -61
  1038. zenml/cli/hub.py +0 -1115
  1039. zenml/cli/stack_recipes.py +0 -469
  1040. zenml/integrations/gcp/google_cloud_function.py +0 -187
  1041. zenml/integrations/gcp/google_cloud_scheduler.py +0 -83
  1042. zenml/integrations/gcp/orchestrators/vertex_scheduler/main.py +0 -91
  1043. zenml/integrations/gcp/orchestrators/vertex_scheduler/requirements.txt +0 -2
  1044. zenml/integrations/kserve/__init__.py +0 -57
  1045. zenml/integrations/kserve/custom_deployer/zenml_custom_model.py +0 -175
  1046. zenml/integrations/kserve/flavors/kserve_model_deployer_flavor.py +0 -137
  1047. zenml/integrations/kserve/model_deployers/kserve_model_deployer.py +0 -1003
  1048. zenml/integrations/kserve/secret_schemas/secret_schemas.py +0 -65
  1049. zenml/integrations/kserve/services/kserve_deployment.py +0 -596
  1050. zenml/integrations/kserve/steps/__init__.py +0 -22
  1051. zenml/integrations/kserve/steps/kserve_deployer.py +0 -472
  1052. zenml/integrations/kserve/steps/kserve_step_utils.py +0 -293
  1053. zenml/integrations/kubeflow/utils.py +0 -96
  1054. zenml/lineage_graph/lineage_graph.py +0 -244
  1055. zenml/lineage_graph/node/artifact_node.py +0 -52
  1056. zenml/lineage_graph/node/step_node.py +0 -41
  1057. zenml/models/v2/base/internal.py +0 -37
  1058. zenml/models/v2/base/update.py +0 -40
  1059. zenml/models/v2/misc/hub_plugin_models.py +0 -79
  1060. zenml/new/pipelines/deserialization_utils.py +0 -291
  1061. zenml/new/pipelines/model_utils.py +0 -72
  1062. zenml/new/pipelines/pipeline_decorator.py +0 -109
  1063. zenml/new/steps/step_decorator.py +0 -160
  1064. zenml/pipelines/base_pipeline.py +0 -274
  1065. zenml/post_execution/pipeline.py +0 -58
  1066. zenml/post_execution/pipeline_run.py +0 -55
  1067. zenml/services/service_registry.py +0 -214
  1068. zenml/services/terraform/__init__.py +0 -14
  1069. zenml/services/terraform/terraform_service.py +0 -441
  1070. zenml/steps/step_environment.py +0 -108
  1071. zenml/steps/step_output.py +0 -36
  1072. zenml/utils/mlstacks_utils.py +0 -635
  1073. zenml/utils/terraform_utils.py +0 -42
  1074. zenml/zen_server/dashboard/_redirects +0 -1
  1075. zenml/zen_server/dashboard/asset-manifest.json +0 -131
  1076. zenml/zen_server/dashboard/manifest.json +0 -25
  1077. zenml/zen_server/dashboard/precache-manifest.c139638dcc4d9d3425353266447a2fad.js +0 -462
  1078. zenml/zen_server/dashboard/robots.txt +0 -2
  1079. zenml/zen_server/dashboard/service-worker.js +0 -39
  1080. zenml/zen_server/dashboard/static/css/2.5b37d44a.chunk.css +0 -16
  1081. zenml/zen_server/dashboard/static/css/2.5b37d44a.chunk.css.map +0 -1
  1082. zenml/zen_server/dashboard/static/css/main.77e46c35.chunk.css +0 -2
  1083. zenml/zen_server/dashboard/static/css/main.77e46c35.chunk.css.map +0 -1
  1084. zenml/zen_server/dashboard/static/js/2.bb4cef22.chunk.js +0 -3
  1085. zenml/zen_server/dashboard/static/js/2.bb4cef22.chunk.js.LICENSE.txt +0 -95
  1086. zenml/zen_server/dashboard/static/js/2.bb4cef22.chunk.js.map +0 -1
  1087. zenml/zen_server/dashboard/static/js/main.270838b4.chunk.js +0 -2
  1088. zenml/zen_server/dashboard/static/js/main.270838b4.chunk.js.map +0 -1
  1089. zenml/zen_server/dashboard/static/js/runtime-main.bfca2edd.js +0 -2
  1090. zenml/zen_server/dashboard/static/js/runtime-main.bfca2edd.js.map +0 -1
  1091. zenml/zen_server/dashboard/static/media/AlertTriangle.28aee535.svg +0 -5
  1092. zenml/zen_server/dashboard/static/media/ArrowSquareOut.abfb9bc7.svg +0 -5
  1093. zenml/zen_server/dashboard/static/media/Back.86c23a22.svg +0 -4
  1094. zenml/zen_server/dashboard/static/media/BookOpen.5cb101ff.svg +0 -4
  1095. zenml/zen_server/dashboard/static/media/BoundingBox.1eb98717.svg +0 -10
  1096. zenml/zen_server/dashboard/static/media/Burger.9b1c67d7.svg +0 -3
  1097. zenml/zen_server/dashboard/static/media/Cached.2381fb8d.svg +0 -1
  1098. zenml/zen_server/dashboard/static/media/Calendar.356e11c7.svg +0 -3
  1099. zenml/zen_server/dashboard/static/media/ChartBarHorizontal.0247447b.svg +0 -6
  1100. zenml/zen_server/dashboard/static/media/ChartLine.0d79e18d.svg +0 -4
  1101. zenml/zen_server/dashboard/static/media/ChatDots.2e1c9211.svg +0 -6
  1102. zenml/zen_server/dashboard/static/media/Check.dad6beb2.svg +0 -3
  1103. zenml/zen_server/dashboard/static/media/CheckCircleFilled.c19566d0.svg +0 -3
  1104. zenml/zen_server/dashboard/static/media/Checkbox.af50e31e.svg +0 -3
  1105. zenml/zen_server/dashboard/static/media/ChevronDown.f860ce32.svg +0 -3
  1106. zenml/zen_server/dashboard/static/media/ChevronDownLight.6642d756.svg +0 -3
  1107. zenml/zen_server/dashboard/static/media/ChevronLeft.f6edfcdb.svg +0 -3
  1108. zenml/zen_server/dashboard/static/media/CircleCheck.f98fd6ca.svg +0 -1
  1109. zenml/zen_server/dashboard/static/media/Clock.ffc9de95.svg +0 -3
  1110. zenml/zen_server/dashboard/static/media/Close.74e9efbc.svg +0 -5
  1111. zenml/zen_server/dashboard/static/media/CloseWithBorder.6960930a.svg +0 -3
  1112. zenml/zen_server/dashboard/static/media/CloseWithoutBorder.cd6f71df.svg +0 -3
  1113. zenml/zen_server/dashboard/static/media/CloudArrowUp.0aecb235.svg +0 -6
  1114. zenml/zen_server/dashboard/static/media/Code.ef0f33b5.svg +0 -3
  1115. zenml/zen_server/dashboard/static/media/Config.0be63f8a.svg +0 -1
  1116. zenml/zen_server/dashboard/static/media/Connector.9fd46ef1.svg +0 -10
  1117. zenml/zen_server/dashboard/static/media/Copy.36e2112a.svg +0 -1
  1118. zenml/zen_server/dashboard/static/media/Dashboard.d05787e0.svg +0 -3
  1119. zenml/zen_server/dashboard/static/media/Data.b1c3b5f8.svg +0 -3
  1120. zenml/zen_server/dashboard/static/media/Delete.3c361b28.svg +0 -8
  1121. zenml/zen_server/dashboard/static/media/Docs.7541d478.svg +0 -7
  1122. zenml/zen_server/dashboard/static/media/Download.fba04d87.svg +0 -5
  1123. zenml/zen_server/dashboard/static/media/Edit.490eb294.svg +0 -6
  1124. zenml/zen_server/dashboard/static/media/EmptyRightArrow.23749d01.svg +0 -3
  1125. zenml/zen_server/dashboard/static/media/Example.6396cd37.svg +0 -5
  1126. zenml/zen_server/dashboard/static/media/Extension.1394cd4a.svg +0 -3
  1127. zenml/zen_server/dashboard/static/media/Eye.d9e4ee62.svg +0 -4
  1128. zenml/zen_server/dashboard/static/media/Failed.0213c1a0.svg +0 -1
  1129. zenml/zen_server/dashboard/static/media/FileText.1f15bacd.svg +0 -7
  1130. zenml/zen_server/dashboard/static/media/Filter.ab6b9c0d.svg +0 -3
  1131. zenml/zen_server/dashboard/static/media/Folders.12b29887.svg +0 -5
  1132. zenml/zen_server/dashboard/static/media/FunnelFill.6df4c143.svg +0 -3
  1133. zenml/zen_server/dashboard/static/media/GitCommit.7dd9c2aa.svg +0 -5
  1134. zenml/zen_server/dashboard/static/media/GitHub_Logo.cefc2023.png +0 -0
  1135. zenml/zen_server/dashboard/static/media/Graph.2c63a892.svg +0 -11
  1136. zenml/zen_server/dashboard/static/media/History.08329240.svg +0 -3
  1137. zenml/zen_server/dashboard/static/media/Home.0843b0d5.svg +0 -3
  1138. zenml/zen_server/dashboard/static/media/ImageBuilder.ea762d9c.svg +0 -6
  1139. zenml/zen_server/dashboard/static/media/InProgress.304a0edc.svg +0 -1
  1140. zenml/zen_server/dashboard/static/media/Info.9fe10c5c.svg +0 -3
  1141. zenml/zen_server/dashboard/static/media/KeyboardReturn.491afbe3.svg +0 -3
  1142. zenml/zen_server/dashboard/static/media/Link.72bbb55d.svg +0 -4
  1143. zenml/zen_server/dashboard/static/media/Lock.30f5e1fe.svg +0 -5
  1144. zenml/zen_server/dashboard/static/media/Lock2.a769ea52.svg +0 -3
  1145. zenml/zen_server/dashboard/static/media/LockKey.92f21621.svg +0 -6
  1146. zenml/zen_server/dashboard/static/media/Logs.8bf4d005.svg +0 -5
  1147. zenml/zen_server/dashboard/static/media/MinusCircle.4188f418.svg +0 -4
  1148. zenml/zen_server/dashboard/static/media/ModelRegistry.f0de050a.svg +0 -6
  1149. zenml/zen_server/dashboard/static/media/MultiUser.a2ba7c67.svg +0 -10
  1150. zenml/zen_server/dashboard/static/media/PaginationFirst.92628634.svg +0 -4
  1151. zenml/zen_server/dashboard/static/media/PaginationLast.00d3c732.svg +0 -4
  1152. zenml/zen_server/dashboard/static/media/PaginationNext.86158845.svg +0 -3
  1153. zenml/zen_server/dashboard/static/media/PaginationPrev.60c18a88.svg +0 -3
  1154. zenml/zen_server/dashboard/static/media/Pen.f2d831d4.svg +0 -6
  1155. zenml/zen_server/dashboard/static/media/PhotoCamera.179d6d4c.svg +0 -3
  1156. zenml/zen_server/dashboard/static/media/Pipeline.30d298b0.svg +0 -7
  1157. zenml/zen_server/dashboard/static/media/Plus.5aa1c16b.svg +0 -3
  1158. zenml/zen_server/dashboard/static/media/PlusCircle.92d860dd.svg +0 -5
  1159. zenml/zen_server/dashboard/static/media/Repositories.71a36b8c.svg +0 -3
  1160. zenml/zen_server/dashboard/static/media/RightArrow.f30d3871.svg +0 -29
  1161. zenml/zen_server/dashboard/static/media/Rocket.63bf7b9d.svg +0 -3
  1162. zenml/zen_server/dashboard/static/media/RocketLaunch.1bff2b59.svg +0 -6
  1163. zenml/zen_server/dashboard/static/media/Rubik-Medium.c87313aa.ttf +0 -0
  1164. zenml/zen_server/dashboard/static/media/Rubik-Regular.b3d0902b.ttf +0 -0
  1165. zenml/zen_server/dashboard/static/media/Run.daec4fb2.svg +0 -6
  1166. zenml/zen_server/dashboard/static/media/Search.d1afcce5.svg +0 -4
  1167. zenml/zen_server/dashboard/static/media/Settings.59ca73ae.svg +0 -4
  1168. zenml/zen_server/dashboard/static/media/Share2.46c3ff66.svg +0 -3
  1169. zenml/zen_server/dashboard/static/media/SignOut.6aa718c5.svg +0 -3
  1170. zenml/zen_server/dashboard/static/media/SimplePlus.5cf7ec20.svg +0 -3
  1171. zenml/zen_server/dashboard/static/media/SingleUser.bef3a095.svg +0 -4
  1172. zenml/zen_server/dashboard/static/media/SourceCodePro-Regular.b484b32f.ttf +0 -0
  1173. zenml/zen_server/dashboard/static/media/Stack.19b604ac.svg +0 -5
  1174. zenml/zen_server/dashboard/static/media/StackComponent.b1ba90b5.svg +0 -4
  1175. zenml/zen_server/dashboard/static/media/Star.f0c25022.svg +0 -9
  1176. zenml/zen_server/dashboard/static/media/StarOutline.94ca8cd9.svg +0 -3
  1177. zenml/zen_server/dashboard/static/media/Storefront.4b4796fe.svg +0 -3
  1178. zenml/zen_server/dashboard/static/media/Stream.543e3039.svg +0 -3
  1179. zenml/zen_server/dashboard/static/media/SupportAgent.510ddf1f.svg +0 -8
  1180. zenml/zen_server/dashboard/static/media/Table.77033750.svg +0 -6
  1181. zenml/zen_server/dashboard/static/media/Tool.d5785486.svg +0 -3
  1182. zenml/zen_server/dashboard/static/media/UserPlus.741a99d7.svg +0 -6
  1183. zenml/zen_server/dashboard/static/media/Verified.0625b2a0.svg +0 -3
  1184. zenml/zen_server/dashboard/static/media/addNew.4fb6c939.svg +0 -8
  1185. zenml/zen_server/dashboard/static/media/arrowClose.cbd53f3f.svg +0 -3
  1186. zenml/zen_server/dashboard/static/media/arrowOpen.6ceef0af.svg +0 -3
  1187. zenml/zen_server/dashboard/static/media/check_small.30bc0138.svg +0 -3
  1188. zenml/zen_server/dashboard/static/media/circleArrowSideClose.98d6013e.svg +0 -18
  1189. zenml/zen_server/dashboard/static/media/circleArrowSideOpen.63653df6.svg +0 -18
  1190. zenml/zen_server/dashboard/static/media/image.104fd14b.png +0 -0
  1191. zenml/zen_server/dashboard/static/media/imageAddIcon.e83004a9.svg +0 -7
  1192. zenml/zen_server/dashboard/static/media/logo.93333e5c.svg +0 -1
  1193. zenml/zen_server/dashboard/static/media/logo_small.4204397d.svg +0 -3
  1194. zenml/zen_server/dashboard/static/media/logo_white.d4b4414e.svg +0 -20
  1195. zenml/zen_server/dashboard/static/media/notConnected.5e2c8ea7.svg +0 -8
  1196. zenml/zen_server/dashboard/static/media/plugin-fallback.72c294e6.svg +0 -6
  1197. zenml/zen_server/dashboard/static/media/share.bcd998b0.svg +0 -5
  1198. zenml/zen_server/dashboard/static/media/stars.08a9b19a.svg +0 -8
  1199. zenml/zen_server/deploy/terraform/__init__.py +0 -41
  1200. zenml/zen_server/deploy/terraform/providers/__init__.py +0 -14
  1201. zenml/zen_server/deploy/terraform/providers/aws_provider.py +0 -61
  1202. zenml/zen_server/deploy/terraform/providers/azure_provider.py +0 -59
  1203. zenml/zen_server/deploy/terraform/providers/gcp_provider.py +0 -59
  1204. zenml/zen_server/deploy/terraform/providers/terraform_provider.py +0 -332
  1205. zenml/zen_server/deploy/terraform/recipes/aws/.gitignore +0 -8
  1206. zenml/zen_server/deploy/terraform/recipes/aws/helm.tf +0 -20
  1207. zenml/zen_server/deploy/terraform/recipes/aws/ingress.tf +0 -30
  1208. zenml/zen_server/deploy/terraform/recipes/aws/outputs.tf +0 -14
  1209. zenml/zen_server/deploy/terraform/recipes/aws/printf.cmd +0 -2
  1210. zenml/zen_server/deploy/terraform/recipes/aws/sql.tf +0 -62
  1211. zenml/zen_server/deploy/terraform/recipes/aws/terraform.tf +0 -44
  1212. zenml/zen_server/deploy/terraform/recipes/aws/variables.tf +0 -179
  1213. zenml/zen_server/deploy/terraform/recipes/aws/vpc.tf +0 -47
  1214. zenml/zen_server/deploy/terraform/recipes/aws/zen_server.tf +0 -111
  1215. zenml/zen_server/deploy/terraform/recipes/azure/.gitignore +0 -8
  1216. zenml/zen_server/deploy/terraform/recipes/azure/helm.tf +0 -20
  1217. zenml/zen_server/deploy/terraform/recipes/azure/ingress.tf +0 -30
  1218. zenml/zen_server/deploy/terraform/recipes/azure/key_vault.tf +0 -73
  1219. zenml/zen_server/deploy/terraform/recipes/azure/outputs.tf +0 -14
  1220. zenml/zen_server/deploy/terraform/recipes/azure/printf.cmd +0 -2
  1221. zenml/zen_server/deploy/terraform/recipes/azure/rg.tf +0 -36
  1222. zenml/zen_server/deploy/terraform/recipes/azure/sql.tf +0 -65
  1223. zenml/zen_server/deploy/terraform/recipes/azure/terraform.tf +0 -52
  1224. zenml/zen_server/deploy/terraform/recipes/azure/variables.tf +0 -188
  1225. zenml/zen_server/deploy/terraform/recipes/azure/zen_server.tf +0 -111
  1226. zenml/zen_server/deploy/terraform/recipes/gcp/.gitignore +0 -8
  1227. zenml/zen_server/deploy/terraform/recipes/gcp/helm.tf +0 -20
  1228. zenml/zen_server/deploy/terraform/recipes/gcp/ingress.tf +0 -30
  1229. zenml/zen_server/deploy/terraform/recipes/gcp/outputs.tf +0 -14
  1230. zenml/zen_server/deploy/terraform/recipes/gcp/printf.cmd +0 -2
  1231. zenml/zen_server/deploy/terraform/recipes/gcp/sql.tf +0 -64
  1232. zenml/zen_server/deploy/terraform/recipes/gcp/terraform.tf +0 -44
  1233. zenml/zen_server/deploy/terraform/recipes/gcp/variables.tf +0 -183
  1234. zenml/zen_server/deploy/terraform/recipes/gcp/zen_server.tf +0 -122
  1235. zenml/zen_server/deploy/terraform/terraform_zen_server.py +0 -255
  1236. zenml/zen_server/routers/run_metadata_endpoints.py +0 -97
  1237. zenml_nightly-0.55.0.dev20240124.dist-info/METADATA +0 -438
  1238. zenml_nightly-0.55.0.dev20240124.dist-info/RECORD +0 -1072
  1239. {zenml_nightly-0.55.0.dev20240124.dist-info → zenml_nightly-0.72.0.dev20250116.dist-info}/LICENSE +0 -0
  1240. {zenml_nightly-0.55.0.dev20240124.dist-info → zenml_nightly-0.72.0.dev20250116.dist-info}/entry_points.txt +0 -0
zenml/cli/server.py CHANGED
@@ -14,35 +14,36 @@
14
14
  """CLI for managing ZenML server deployments."""
15
15
 
16
16
  import ipaddress
17
- import os
18
- import sys
19
- from typing import Any, Dict, Optional, Union
17
+ import re
18
+ from typing import List, Optional, Union
20
19
 
21
20
  import click
22
- import yaml
23
21
  from rich.errors import MarkupError
24
22
 
25
23
  import zenml
26
- from zenml.analytics.enums import AnalyticsEvent
27
- from zenml.analytics.utils import track_handler
28
24
  from zenml.cli import utils as cli_utils
29
- from zenml.cli.cli import cli
30
- from zenml.cli.web_login import web_login
25
+ from zenml.cli.cli import TagGroup, cli
26
+ from zenml.cli.login import login, logout
31
27
  from zenml.client import Client
32
28
  from zenml.config.global_config import GlobalConfiguration
33
29
  from zenml.console import console
34
- from zenml.enums import ServerProviderType, StoreType
35
- from zenml.exceptions import IllegalOperationError
30
+ from zenml.enums import CliCategories, StoreType
31
+ from zenml.exceptions import AuthorizationException
36
32
  from zenml.logger import get_logger
37
- from zenml.utils import terraform_utils, yaml_utils
38
- from zenml.zen_server.utils import get_active_deployment
33
+ from zenml.login.credentials import ServerCredentials, ServerType
34
+ from zenml.services.service_status import ServiceState
35
+ from zenml.zen_server.utils import connected_to_local_server, get_local_server
39
36
 
40
37
  logger = get_logger(__name__)
41
38
 
42
- LOCAL_ZENML_SERVER_NAME = "local"
43
39
 
40
+ @cli.command(
41
+ "up",
42
+ help="""Start the ZenML dashboard locally.
44
43
 
45
- @cli.command("up", help="Start the ZenML dashboard locally.")
44
+ DEPRECATED: Please use `zenml login --local` instead.
45
+ """,
46
+ )
46
47
  @click.option(
47
48
  "--docker",
48
49
  is_flag=True,
@@ -72,14 +73,6 @@ LOCAL_ZENML_SERVER_NAME = "local"
72
73
  default=False,
73
74
  type=click.BOOL,
74
75
  )
75
- @click.option(
76
- "--connect",
77
- is_flag=True,
78
- help="Connect the client to the local server even when already connected "
79
- "to a remote ZenML server.",
80
- default=False,
81
- type=click.BOOL,
82
- )
83
76
  @click.option(
84
77
  "--image",
85
78
  type=str,
@@ -100,7 +93,6 @@ def up(
100
93
  ] = None,
101
94
  port: Optional[int] = None,
102
95
  blocking: bool = False,
103
- connect: bool = False,
104
96
  image: Optional[str] = None,
105
97
  ngrok_token: Optional[str] = None,
106
98
  ) -> None:
@@ -111,127 +103,44 @@ def up(
111
103
  ip_address: The IP address to bind the server to.
112
104
  port: The port to bind the server to.
113
105
  blocking: Block the CLI while the server is running.
114
- connect: Connect the client to the local server even when already
115
- connected to a remote ZenML server.
116
106
  image: A custom Docker image to use for the server, when the
117
107
  `--docker` flag is set.
118
108
  ngrok_token: An ngrok auth token to use for exposing the ZenML dashboard
119
109
  on a public domain. Primarily used for accessing the dashboard in
120
110
  Colab.
121
111
  """
122
- from zenml.zen_server.deploy.deployer import ServerDeployer
123
-
124
- if connect:
125
- logger.warning(
126
- "The `--connect` flag is deprecated, has no effect, and will be "
127
- "removed in a future release."
128
- )
129
-
130
- gc = GlobalConfiguration()
131
-
132
- # Raise an error if the client is already connected to a remote server.
133
- if gc.store is not None and gc.store.type == StoreType.REST:
134
- if not gc.zen_store.is_local_store():
135
- cli_utils.error(
136
- "Your ZenML client is already connected to a remote server. If "
137
- "you want to spin up a local ZenML server, please disconnect "
138
- "from the remote server first by running `zenml disconnect`."
139
- )
140
-
141
- if docker:
142
- from zenml.utils.docker_utils import check_docker
143
-
144
- if not check_docker():
145
- cli_utils.error(
146
- "Docker does not seem to be installed on your system. Please "
147
- "install Docker to use the Docker ZenML server local "
148
- "deployment or use one of the other deployment options."
149
- )
150
- provider = ServerProviderType.DOCKER
151
- else:
152
- if sys.platform == "win32" and not blocking:
153
- cli_utils.error(
154
- "Running the ZenML server locally as a background process is "
155
- "not supported on Windows. Please use the `--blocking` flag "
156
- "to run the server in blocking mode, or run the server in "
157
- "a Docker container by setting `--docker` instead."
158
- )
159
- else:
160
- pass
161
- provider = ServerProviderType.LOCAL
162
-
163
- deployer = ServerDeployer()
164
-
165
- server = get_active_deployment(local=True)
166
- if server and server.config.provider != provider:
167
- deployer.remove_server(LOCAL_ZENML_SERVER_NAME)
168
-
169
- config_attrs: Dict[str, Any] = dict(
170
- name=LOCAL_ZENML_SERVER_NAME,
171
- provider=provider,
112
+ cli_utils.warning(
113
+ "The `zenml up` command is deprecated and will be removed in a "
114
+ "future release. Please use the `zenml login --local` command instead."
172
115
  )
173
- if not docker:
174
- config_attrs["blocking"] = blocking
175
- elif image:
176
- config_attrs["image"] = image
177
- if port is not None:
178
- config_attrs["port"] = port
179
- if ip_address is not None and provider in [
180
- ServerProviderType.LOCAL,
181
- ServerProviderType.DOCKER,
182
- ]:
183
- config_attrs["ip_address"] = ip_address
184
-
185
- from zenml.zen_server.deploy.deployment import ServerDeploymentConfig
186
-
187
- server_config = ServerDeploymentConfig(**config_attrs)
188
- if blocking:
189
- from zenml.constants import (
190
- DEFAULT_USERNAME,
191
- )
192
-
193
- cli_utils.declare(
194
- "The local ZenML dashboard is about to deploy in a "
195
- "blocking process. You can connect to it using the "
196
- f"'{DEFAULT_USERNAME}' username and an empty password."
197
- )
198
- server = deployer.deploy_server(server_config)
199
-
200
- assert gc.store is not None
201
116
 
202
- if not blocking:
203
- from zenml.constants import (
204
- DEFAULT_PASSWORD,
205
- DEFAULT_USERNAME,
206
- )
207
-
208
- deployer.connect_to_server(
209
- LOCAL_ZENML_SERVER_NAME,
210
- DEFAULT_USERNAME,
211
- DEFAULT_PASSWORD,
212
- )
117
+ # Calling the `zenml login` command
118
+ cli_utils.declare("Calling `zenml login --local`...")
119
+ login.callback( # type: ignore[misc]
120
+ local=True,
121
+ docker=docker,
122
+ ip_address=ip_address,
123
+ port=port,
124
+ blocking=blocking,
125
+ image=image,
126
+ ngrok_token=ngrok_token,
127
+ )
213
128
 
214
- if server.status and server.status.url:
215
- cli_utils.declare(
216
- f"The local ZenML dashboard is available at "
217
- f"'{server.status.url}'. You can connect to it using the "
218
- f"'{DEFAULT_USERNAME}' username and an empty password. "
219
- )
220
- zenml.show(
221
- ngrok_token=ngrok_token,
222
- username=DEFAULT_USERNAME,
223
- password=DEFAULT_PASSWORD,
224
- )
225
129
 
130
+ @cli.command(
131
+ "show",
132
+ help="""Show the ZenML dashboard.
226
133
 
134
+ DEPRECATED: Please use `zenml server show` instead.
135
+ """,
136
+ )
227
137
  @click.option(
228
138
  "--ngrok-token",
229
139
  type=str,
230
140
  default=None,
231
141
  help="Specify an ngrok auth token to use for exposing the ZenML server.",
232
142
  )
233
- @cli.command("show", help="Show the ZenML dashboard.")
234
- def show(ngrok_token: Optional[str] = None) -> None:
143
+ def legacy_show(ngrok_token: Optional[str] = None) -> None:
235
144
  """Show the ZenML dashboard.
236
145
 
237
146
  Args:
@@ -239,286 +148,126 @@ def show(ngrok_token: Optional[str] = None) -> None:
239
148
  on a public domain. Primarily used for accessing the dashboard in
240
149
  Colab.
241
150
  """
242
- try:
243
- zenml.show(ngrok_token=ngrok_token)
244
- except RuntimeError as e:
245
- cli_utils.error(str(e))
246
-
151
+ cli_utils.warning(
152
+ "The `zenml show` command is deprecated and will be removed in a "
153
+ "future release. Please use the `zenml server show` command "
154
+ "instead."
155
+ )
247
156
 
248
- @cli.command("down", help="Shut down the local ZenML dashboard.")
249
- def down() -> None:
250
- """Shut down the local ZenML dashboard."""
251
- server = get_active_deployment(local=True)
157
+ # Calling the `zenml server show` command
158
+ cli_utils.declare("Calling `zenml server show`...")
159
+ show(local=False, ngrok_token=ngrok_token)
252
160
 
253
- if not server:
254
- cli_utils.declare("The local ZenML dashboard is not running.")
255
161
 
256
- else:
257
- from zenml.zen_server.deploy.deployer import ServerDeployer
162
+ @cli.command(
163
+ "down",
164
+ help="""Shut down the local ZenML dashboard.
258
165
 
259
- deployer = ServerDeployer()
260
- deployer.remove_server(server.config.name)
261
- cli_utils.declare("The local ZenML dashboard has been shut down.")
166
+ DEPRECATED: Please use `zenml logout local` instead.
167
+ """,
168
+ )
169
+ def down() -> None:
170
+ """Shut down the local ZenML dashboard."""
171
+ cli_utils.warning(
172
+ "The `zenml down` command is deprecated and will be removed in a "
173
+ "future release. Please use the `zenml logout --local` command instead."
174
+ )
262
175
 
263
- gc = GlobalConfiguration()
264
- gc.set_default_store()
176
+ # Calling the `zenml logout` command
177
+ cli_utils.declare("Calling `zenml logout --local`...")
178
+ logout.callback( # type: ignore[misc]
179
+ local=True
180
+ )
265
181
 
266
182
 
267
- @cli.command("deploy", help="Deploy ZenML in the cloud.")
268
- @click.option(
269
- "--provider",
270
- "-p",
271
- type=click.Choice(
272
- [
273
- ServerProviderType.AWS.value,
274
- ServerProviderType.GCP.value,
275
- ServerProviderType.AZURE.value,
276
- ],
277
- case_sensitive=True,
278
- ),
279
- default=None,
280
- help="Server deployment provider.",
281
- )
282
- @click.option(
283
- "--name",
284
- type=str,
285
- help="A name for the ZenML server deployment. This is used as a prefix for "
286
- "the names of deployed resources, such as database services and Kubernetes "
287
- "resources.",
288
- )
289
- @click.option(
290
- "--username",
291
- type=str,
292
- default=None,
293
- help="The username to use for the provisioned admin account.",
294
- )
295
- @click.option(
296
- "--password",
297
- type=str,
298
- default=None,
299
- help="The initial password to use for the provisioned admin account.",
300
- )
301
- @click.option(
302
- "--timeout",
303
- "-t",
304
- type=click.INT,
305
- default=None,
306
- help="Time in seconds to wait for the server to be deployed.",
307
- )
308
- @click.option(
309
- "--config",
310
- help="Use a YAML or JSON configuration or configuration file.",
311
- required=False,
312
- type=str,
313
- )
314
- @click.option(
315
- "--connect",
316
- is_flag=True,
317
- help="Connect your client to the ZenML server after it is successfully "
318
- "deployed.",
319
- default=False,
320
- type=click.BOOL,
321
- )
322
- @click.option(
323
- "--gcp-project-id",
324
- help="The project in GCP to deploy the server to. ",
325
- required=False,
326
- type=str,
183
+ @cli.command(
184
+ "status", help="Show information about the current configuration."
327
185
  )
328
- def deploy(
329
- provider: Optional[str] = None,
330
- connect: bool = False,
331
- username: Optional[str] = None,
332
- password: Optional[str] = None,
333
- name: Optional[str] = None,
334
- timeout: Optional[int] = None,
335
- config: Optional[str] = None,
336
- gcp_project_id: Optional[str] = None,
337
- ) -> None:
338
- """Deploy the ZenML server in a cloud provider.
186
+ def status() -> None:
187
+ """Show details about the current configuration."""
188
+ from zenml.login.credentials_store import get_credentials_store
189
+ from zenml.login.pro.client import ZenMLProClient
190
+ from zenml.login.pro.constants import ZENML_PRO_API_URL
339
191
 
340
- Args:
341
- name: Name for the ZenML server deployment.
342
- provider: ZenML server provider name.
343
- connect: Connecting the client to the ZenML server.
344
- username: The username for the provisioned admin account.
345
- password: The initial password to use for the provisioned admin account.
346
- timeout: Time in seconds to wait for the server to start.
347
- config: A YAML or JSON configuration or configuration file to use.
348
- gcp_project_id: The project in GCP to deploy the server to.
349
- """
350
- with track_handler(
351
- event=AnalyticsEvent.ZENML_SERVER_DEPLOYED
352
- ) as analytics_handler:
353
- try:
354
- terraform_utils.verify_terraform_installation()
355
- except RuntimeError as e:
356
- cli_utils.error(str(e))
192
+ gc = GlobalConfiguration()
193
+ client = Client()
357
194
 
358
- config_dict: Dict[str, Any] = {}
195
+ store_cfg = gc.store_configuration
359
196
 
360
- if config:
361
- if os.path.isfile(config):
362
- config_dict = yaml_utils.read_yaml(config)
363
- else:
364
- config_dict = yaml.safe_load(config)
365
- if not isinstance(config_dict, dict):
366
- cli_utils.error(
367
- "The configuration argument must be JSON/YAML content or "
368
- "point to a valid configuration file."
197
+ # Write about the current ZenML client
198
+ cli_utils.declare("-----ZenML Client Status-----")
199
+ if gc.uses_default_store():
200
+ cli_utils.declare(
201
+ f"Connected to the local ZenML database: '{store_cfg.url}'"
202
+ )
203
+ elif connected_to_local_server():
204
+ cli_utils.declare(
205
+ f"Connected to the local ZenML server: {store_cfg.url}"
206
+ )
207
+ elif re.match(r"^mysql://", store_cfg.url):
208
+ cli_utils.declare(
209
+ f"Connected directly to a SQL database: '{store_cfg.url}'"
210
+ )
211
+ else:
212
+ credentials_store = get_credentials_store()
213
+ server = credentials_store.get_credentials(store_cfg.url)
214
+ if server:
215
+ if server.type == ServerType.PRO:
216
+ # If connected to a ZenML Pro server, refresh the server info
217
+ pro_credentials = credentials_store.get_pro_credentials(
218
+ pro_api_url=server.pro_api_url or ZENML_PRO_API_URL,
219
+ allow_expired=False,
369
220
  )
370
-
371
- name = config_dict.get("name", name)
372
- provider = config_dict.get("provider", provider)
373
- username = config_dict.get("username", username)
374
- password = config_dict.get("password", password)
375
-
376
- if not name:
377
- name = click.prompt(
378
- "ZenML server name (used as a prefix for the names of deployed "
379
- "resources)",
380
- default="zenml",
381
- )
382
- config_dict["name"] = name
383
-
384
- if not provider:
385
- provider = click.prompt(
386
- "ZenML server provider",
387
- type=click.Choice(
388
- [
389
- ServerProviderType.AWS.value,
390
- ServerProviderType.GCP.value,
391
- ServerProviderType.AZURE.value,
392
- ],
393
- case_sensitive=True,
394
- ),
395
- default=ServerProviderType.AWS.value,
396
- )
397
- config_dict["provider"] = provider
398
-
399
- if provider == ServerProviderType.GCP.value:
400
- if "project_id" not in config_dict:
401
- if not gcp_project_id:
402
- gcp_project_id = click.prompt(
403
- "GCP project ID",
221
+ if pro_credentials:
222
+ pro_client = ZenMLProClient(pro_credentials.url)
223
+ pro_servers = pro_client.tenant.list(
224
+ url=store_cfg.url, member_only=True
404
225
  )
405
- config_dict["project_id"] = gcp_project_id
406
-
407
- if not username:
408
- username = click.prompt(
409
- "ZenML admin account username", default="default"
410
- )
411
- config_dict["username"] = username
412
-
413
- password = password or config_dict.get("password", None)
414
- if not password:
415
- password = click.prompt(
416
- "ZenML admin account password", hide_input=True
417
- )
418
- config_dict["password"] = password
419
-
420
- from zenml.zen_server.deploy.deployment import ServerDeploymentConfig
421
-
422
- server_config = ServerDeploymentConfig.parse_obj(config_dict)
423
-
424
- from zenml.zen_server.deploy.deployer import ServerDeployer
425
-
426
- deployer = ServerDeployer()
427
-
428
- server = get_active_deployment(local=False)
429
- if server:
430
- if server.config.provider != provider:
431
- cli_utils.error(
432
- "ZenML is already deployed using a different provider "
433
- f"({server.config.provider}). Please tear down the "
434
- "existing deployment by running `zenml destroy` before "
435
- "deploying a new one."
226
+ if pro_servers:
227
+ credentials_store.update_server_info(
228
+ server_url=store_cfg.url,
229
+ server_info=pro_servers[0],
230
+ )
231
+
232
+ cli_utils.declare(
233
+ f"Connected to a ZenML Pro server: `{server.server_name_hyperlink}`"
234
+ f" [{server.server_id_hyperlink}]"
436
235
  )
437
236
 
438
- if server.config.name != name:
439
- cli_utils.error(
440
- f"An existing deployment with a different name "
441
- f"'{server.config.name}' already exists. Please tear down "
442
- f"the existing deployment by running `zenml destroy` "
443
- f"before deploying a new one."
237
+ cli_utils.declare(
238
+ f" ZenML Pro Organization: {server.organization_hyperlink}"
444
239
  )
445
-
446
- server = deployer.deploy_server(server_config, timeout=timeout)
447
-
448
- metadata = {
449
- "server_deployment": str(server.config.provider),
450
- }
451
-
452
- analytics_handler.metadata = metadata
453
-
454
- if server.status and server.status.url:
455
- cli_utils.declare(
456
- f"ZenML server '{name}' running at '{server.status.url}'."
457
- )
458
-
459
- if connect and username:
460
- deployer.connect_to_server(
461
- server_config.name,
462
- username,
463
- password or "",
464
- verify_ssl=server.status.ca_crt
465
- if server.status.ca_crt is not None
466
- else False,
240
+ if pro_credentials:
241
+ cli_utils.declare(
242
+ f" ZenML Pro authentication: {pro_credentials.auth_status}"
243
+ )
244
+ else:
245
+ cli_utils.declare(
246
+ f"Connected to a remote ZenML server: `{server.dashboard_hyperlink}`"
467
247
  )
468
248
 
249
+ cli_utils.declare(f" Dashboard: {server.dashboard_hyperlink}")
250
+ cli_utils.declare(f" API: {server.api_hyperlink}")
251
+ cli_utils.declare(f" Server status: '{server.status}'")
252
+ cli_utils.declare(f" Server authentication: {server.auth_status}")
469
253
 
470
- @cli.command(
471
- "destroy", help="Tear down and clean up the cloud ZenML deployment."
472
- )
473
- def destroy() -> None:
474
- """Tear down and clean up a cloud ZenML deployment."""
475
- server = get_active_deployment(local=False)
476
- if not server:
477
- cli_utils.declare("No cloud ZenML server has been deployed.")
478
- return
479
-
480
- from zenml.zen_server.deploy.deployer import ServerDeployer
481
-
482
- deployer = ServerDeployer()
483
- deployer.remove_server(server.config.name)
484
-
485
- cli_utils.declare(
486
- "The ZenML server has been torn down and all resources removed."
487
- )
488
-
489
-
490
- @cli.command(
491
- "status", help="Show information about the current configuration."
492
- )
493
- def status() -> None:
494
- """Show details about the current configuration."""
495
- gc = GlobalConfiguration()
496
- client = Client()
497
-
498
- store_cfg = gc.store
499
-
500
- # Write about the current ZenML server
501
- cli_utils.declare("-----ZenML Server Status-----")
502
- if store_cfg is not None:
503
- if gc.uses_default_store():
504
- cli_utils.declare(
505
- f"Connected to a local ZenML database: ('{store_cfg.url}')"
506
- )
507
254
  else:
508
255
  cli_utils.declare(
509
- f"Connected to a ZenML server: '{store_cfg.url}'"
256
+ f"Connected to a remote ZenML server: [link={store_cfg.url}]"
257
+ f"{store_cfg.url}[/link]"
510
258
  )
511
259
 
512
- # Write about the active entities
513
- scope = "repository" if client.uses_local_configuration else "global"
514
- cli_utils.declare(f" The active user is: '{client.active_user.name}'")
515
- cli_utils.declare(
516
- f" The active workspace is: '{client.active_workspace.name}' "
517
- f"({scope})"
518
- )
519
- cli_utils.declare(
520
- f" The active stack is: '{client.active_stack_model.name}' ({scope})"
521
- )
260
+ try:
261
+ client.zen_store.get_store_info()
262
+ except Exception as e:
263
+ cli_utils.warning(f"Error while initializing client: {e}")
264
+ else:
265
+ # Write about the active entities
266
+ scope = "repository" if client.uses_local_configuration else "global"
267
+ cli_utils.declare(f" The active user is: '{client.active_user.name}'")
268
+ cli_utils.declare(
269
+ f" The active stack is: '{client.active_stack_model.name}' ({scope})"
270
+ )
522
271
 
523
272
  if client.root:
524
273
  cli_utils.declare(f"Active repository root: {client.root}")
@@ -529,17 +278,34 @@ def status() -> None:
529
278
  f"Local store files are located at: '{gc.local_stores_path}'"
530
279
  )
531
280
 
532
- server = get_active_deployment(local=True)
533
- if server:
534
- cli_utils.declare("The status of the local dashboard:")
535
- cli_utils.print_server_deployment(server)
536
-
537
- server = get_active_deployment(local=False)
538
- if server:
539
- cli_utils.declare(
540
- "The status of the cloud ZenML server deployed from this host:"
541
- )
542
- cli_utils.print_server_deployment(server)
281
+ cli_utils.declare("\n-----Local ZenML Server Status-----")
282
+ local_server = get_local_server()
283
+ if local_server:
284
+ if local_server.status:
285
+ if local_server.status.status == ServiceState.ACTIVE:
286
+ cli_utils.declare(
287
+ f"The local {local_server.config.provider} server is "
288
+ f"running at: {local_server.status.url}"
289
+ )
290
+ else:
291
+ cli_utils.declare(
292
+ f"The local {local_server.config.provider} server is not "
293
+ "available."
294
+ )
295
+ cli_utils.declare(
296
+ f" Server state: {local_server.status.status}"
297
+ )
298
+ if local_server.status.status_message:
299
+ cli_utils.declare(
300
+ f" Status message: {local_server.status.status_message}"
301
+ )
302
+ else:
303
+ cli_utils.declare(
304
+ f"The local {local_server.config.provider} server is not "
305
+ "running."
306
+ )
307
+ else:
308
+ cli_utils.declare("The local server has not been started.")
543
309
 
544
310
 
545
311
  @cli.command(
@@ -547,57 +313,17 @@ def status() -> None:
547
313
  help=(
548
314
  """Connect to a remote ZenML server.
549
315
 
550
- Examples:
551
-
552
- * to connect to a ZenML deployment using web login:
553
-
554
- zenml connect --url=http://zenml.example.com:8080
555
-
556
- * to connect to a ZenML deployment using command line arguments:
316
+ DEPRECATED: Please use `zenml login` instead.
557
317
 
558
- zenml connect --url=http://zenml.example.com:8080 --username=admin
559
-
560
- * to use a configuration file:
561
-
562
- zenml connect --config=/path/to/zenml_config.yaml
563
-
564
- * when no arguments are supplied, ZenML will attempt to connect to the
565
- last ZenML server deployed from the local host using the 'zenml deploy'
566
- command.
567
-
568
- The configuration file must be a YAML or JSON file with the following
569
- attributes:
570
-
571
- url: The URL of the ZenML server.
572
-
573
- username: The username to use for authentication.
574
-
575
- password: The password to use for authentication.
576
-
577
- verify_ssl: Either a boolean, in which case it controls whether the
578
- server's TLS certificate is verified, or a string, in which case it
579
- must be a path to a CA certificate bundle to use or the CA bundle
580
- value itself.
318
+ Examples:
581
319
 
582
- http_timeout: The number of seconds to wait for HTTP requests to the
583
- ZenML server to be successful before issuing a timeout error
584
- (default: 5).
320
+ * to re-login to the current ZenML server or connect to a ZenML Pro server:
585
321
 
586
- Example configuration:
322
+ zenml connect
587
323
 
588
- url: https://ac8ef63af203226194a7725ee71d85a-7635928635.us-east-1.elb.amazonaws.com/zenml\n
589
- username: admin\n
590
- password: Pa$$word123\n
591
- verify_ssl: |\n
592
- -----BEGIN CERTIFICATE-----
593
- MIIDETCCAfmgAwIBAgIQYUmQg2LR/pHAMZb/vQwwXjANBgkqhkiG9w0BAQsFADAT
594
- MREwDwYDVQQDEwh6ZW5tbC1jYTAeFw0yMjA5MjYxMzI3NDhaFw0yMzA5MjYxMzI3\n
595
- ...\n
596
- ULnzA0JkRWRnFqH6uXeJo1KAVqtxn1xf8PYxx3NlNDr9wi8KKwARf2lwm6sH4mvq
597
- 1aZ/0iYnGKCu7rLJzxeguliMf69E\n
598
- -----END CERTIFICATE-----
599
- http_timeout: 10
324
+ * to log in to a particular ZenML server:
600
325
 
326
+ zenml connect --url=http://zenml.example.com:8080
601
327
  """
602
328
  ),
603
329
  )
@@ -610,15 +336,15 @@ def status() -> None:
610
336
  )
611
337
  @click.option(
612
338
  "--username",
613
- help="The username that is used to authenticate with a ZenML server. If "
614
- "omitted, the web login will be used.",
339
+ help="(Deprecated) The username that is used to authenticate with a ZenML "
340
+ "server. If omitted, the web login will be used.",
615
341
  required=False,
616
342
  type=str,
617
343
  )
618
344
  @click.option(
619
345
  "--password",
620
- help="The password that is used to authenticate with a ZenML server. If "
621
- "omitted, a prompt will be shown to enter the password.",
346
+ help="(Deprecated) The password that is used to authenticate with a ZenML "
347
+ "server. If omitted, a prompt will be shown to enter the password.",
622
348
  required=False,
623
349
  type=str,
624
350
  )
@@ -629,12 +355,6 @@ def status() -> None:
629
355
  required=False,
630
356
  type=str,
631
357
  )
632
- @click.option(
633
- "--workspace",
634
- help="The workspace to use when connecting to the ZenML server.",
635
- required=False,
636
- type=str,
637
- )
638
358
  @click.option(
639
359
  "--no-verify-ssl",
640
360
  is_flag=True,
@@ -648,29 +368,13 @@ def status() -> None:
648
368
  required=False,
649
369
  type=str,
650
370
  )
651
- @click.option(
652
- "--config",
653
- help="Use a YAML or JSON configuration or configuration file.",
654
- required=False,
655
- type=str,
656
- )
657
- @click.option(
658
- "--raw-config",
659
- is_flag=True,
660
- help="Whether to use the configuration without prompting for missing "
661
- "fields.",
662
- default=False,
663
- )
664
371
  def connect(
665
372
  url: Optional[str] = None,
666
373
  username: Optional[str] = None,
667
374
  password: Optional[str] = None,
668
375
  api_key: Optional[str] = None,
669
- workspace: Optional[str] = None,
670
376
  no_verify_ssl: bool = False,
671
377
  ssl_ca_cert: Optional[str] = None,
672
- config: Optional[str] = None,
673
- raw_config: bool = False,
674
378
  ) -> None:
675
379
  """Connect to a remote ZenML server.
676
380
 
@@ -682,159 +386,56 @@ def connect(
682
386
  server.
683
387
  api_key: The API key that is used to authenticate with the ZenML
684
388
  server.
685
- workspace: The active workspace that is used to connect to the ZenML
686
- server.
687
389
  no_verify_ssl: Whether to verify the server's TLS certificate.
688
390
  ssl_ca_cert: A path to a CA bundle to use to verify the server's TLS
689
391
  certificate or the CA bundle value itself.
690
- config: A YAML or JSON configuration or configuration file to use.
691
- raw_config: Whether to use the configuration without prompting for
692
- missing fields.
693
392
  """
694
- from zenml.config.store_config import StoreConfiguration
695
- from zenml.zen_stores.base_zen_store import BaseZenStore
696
-
697
- # Raise an error if a local server is running when trying to connect to
698
- # another server
699
- active_deployment = get_active_deployment(local=True)
700
- if (
701
- active_deployment
702
- and active_deployment.status
703
- and active_deployment.status.url != url
704
- ):
705
- cli_utils.error(
706
- "You're trying to connect to a remote ZenML server but already "
707
- "have a local server running. This can lead to unexpected "
708
- "behavior. Please shut down the local server by running "
709
- "`zenml down` before connecting to a remote server."
710
- )
711
-
712
- store_dict: Dict[str, Any] = {}
713
- verify_ssl: Union[str, bool] = (
714
- ssl_ca_cert if ssl_ca_cert is not None else not no_verify_ssl
393
+ cli_utils.warning(
394
+ "The `zenml connect` command is deprecated and will be removed in a "
395
+ "future release. Please use the `zenml login` command instead. "
715
396
  )
716
397
 
717
- if config:
718
- if os.path.isfile(config):
719
- store_dict = yaml_utils.read_yaml(config)
720
- else:
721
- store_dict = yaml.safe_load(config)
722
- if not isinstance(store_dict, dict):
723
- cli_utils.error(
724
- "The configuration argument must be JSON/YAML content or "
725
- "point to a valid configuration file."
726
- )
727
-
728
- if raw_config:
729
- store_config = StoreConfiguration.parse_obj(store_dict)
730
- GlobalConfiguration().set_store(store_config)
731
- return
732
-
733
- url = store_dict.get("url", url)
734
- username = username or store_dict.get("username")
735
- password = password or store_dict.get("password")
736
- api_key = api_key or store_dict.get("api_key")
737
- verify_ssl = store_dict.get("verify_ssl", verify_ssl)
738
-
739
- elif url is None:
740
- server = get_active_deployment(local=False)
741
-
742
- if server is None or not server.status or not server.status.url:
743
- cli_utils.warning(
744
- "Running `zenml connect` without arguments can only be used to "
745
- "connect to a ZenML server previously deployed from this host "
746
- "with `zenml deploy`, but no such active deployment was found. "
747
- "Please use the `--url` or `--config` command line arguments "
748
- "to configure how to connect to a remote third party ZenML "
749
- "server. Alternatively, call `zenml up` to start the ZenML "
750
- "dashboard locally."
751
- )
752
- return
753
- url = server.status.url
754
- if server.status.ca_crt:
755
- verify_ssl = server.status.ca_crt
756
-
757
- if not url:
758
- url = click.prompt("ZenML server URL", type=str)
759
- else:
760
- cli_utils.declare(f"Connecting to: '{url}'...")
761
- assert url is not None
762
-
763
- store_dict["url"] = url
764
- store_type = BaseZenStore.get_store_type(url)
765
- if store_type == StoreType.REST:
766
- store_dict["verify_ssl"] = verify_ssl
767
-
768
- if not username and not api_key:
769
- if store_type == StoreType.REST:
770
- store_dict["api_token"] = web_login(url=url, verify_ssl=verify_ssl)
771
- else:
772
- username = click.prompt("Username", type=str)
773
-
774
- if username:
775
- store_dict["username"] = username
776
-
777
- if password is None:
778
- password = click.prompt(
779
- f"Password for user {username} (press ENTER for empty password)",
780
- default="",
781
- hide_input=True,
782
- )
783
- store_dict["password"] = password
784
- elif api_key:
785
- store_dict["api_key"] = api_key
786
-
787
- store_config_class = BaseZenStore.get_store_config_class(store_type)
788
- assert store_config_class is not None
789
-
790
- store_config = store_config_class.parse_obj(store_dict)
791
- try:
792
- GlobalConfiguration().set_store(store_config)
793
- except IllegalOperationError:
398
+ if password is not None or username is not None:
794
399
  cli_utils.warning(
795
- f"User '{username}' does not have sufficient permissions to "
796
- f"access the server at '{url}'."
400
+ "Connecting to a ZenML server using a username and password is "
401
+ "insecure because the password is locally stored on your "
402
+ "filesystem and is no longer supported. The web login workflow will "
403
+ "be used instead. An alternative for non-interactive environments "
404
+ "is to create and use a service account API key (see "
405
+ "https://docs.zenml.io/how-to/connecting-to-zenml/connect-with-a-service-account "
406
+ "for more information)."
797
407
  )
798
408
 
799
- if workspace:
800
- try:
801
- Client().set_active_workspace(workspace_name_or_id=workspace)
802
- except KeyError:
803
- cli_utils.warning(
804
- f"The workspace {workspace} does not exist or is not accessible. "
805
- f"Please set another workspace by running `zenml "
806
- f"workspace set`."
807
- )
409
+ # Calling the `zenml login` command
410
+ cli_utils.declare("Calling `zenml login`...")
411
+ login.callback( # type: ignore[misc]
412
+ server=url,
413
+ api_key=api_key,
414
+ no_verify_ssl=no_verify_ssl,
415
+ ssl_ca_cert=ssl_ca_cert,
416
+ )
808
417
 
809
418
 
810
- @cli.command("disconnect", help="Disconnect from a ZenML server.")
419
+ @cli.command(
420
+ "disconnect",
421
+ help="""Disconnect from a ZenML server.
422
+
423
+ DEPRECATED: Please use `zenml logout` instead.
424
+ """,
425
+ )
811
426
  def disconnect_server() -> None:
812
427
  """Disconnect from a ZenML server."""
813
- from zenml.zen_server.deploy.deployer import ServerDeployer
814
- from zenml.zen_stores.base_zen_store import BaseZenStore
815
-
816
- gc = GlobalConfiguration()
817
-
818
- if gc.store is None:
819
- cli_utils.warning("No ZenML server is currently connected.")
820
- return
428
+ cli_utils.warning(
429
+ "The `zenml disconnect` command is deprecated and will be removed in a "
430
+ "future release. Please use the `zenml logout` command instead."
431
+ )
821
432
 
822
- url = gc.store.url
823
- store_type = BaseZenStore.get_store_type(url)
824
- if store_type == StoreType.REST:
825
- deployer = ServerDeployer()
826
- deployer.disconnect_from_server()
827
- else:
828
- gc.set_default_store()
829
- cli_utils.declare("Restored default store configuration.")
433
+ # Calling the `zenml logout` command
434
+ cli_utils.declare("Calling `zenml logout`...")
435
+ logout.callback() # type: ignore[misc]
830
436
 
831
437
 
832
- @cli.command("logs", help="Show the logs for the local or cloud ZenML server.")
833
- @click.option(
834
- "--local",
835
- is_flag=True,
836
- help="Show the logs for the local ZenML server.",
837
- )
438
+ @cli.command("logs", help="Show the logs for the local ZenML server.")
838
439
  @click.option(
839
440
  "--follow",
840
441
  "-f",
@@ -855,7 +456,6 @@ def disconnect_server() -> None:
855
456
  help="Show raw log contents (don't pretty-print logs).",
856
457
  )
857
458
  def logs(
858
- local: bool = False,
859
459
  follow: bool = False,
860
460
  raw: bool = False,
861
461
  tail: Optional[int] = None,
@@ -863,37 +463,31 @@ def logs(
863
463
  """Display the logs for a ZenML server.
864
464
 
865
465
  Args:
866
- local: Whether to show the logs for the local ZenML server.
867
466
  follow: Continue to output new log data as it becomes available.
868
467
  tail: Only show the last NUM lines of log output.
869
468
  raw: Show raw log contents (don't pretty-print logs).
870
469
  """
871
- server = get_active_deployment(local=True)
872
- if not local:
873
- remote_server = get_active_deployment(local=False)
874
- if remote_server is not None:
875
- server = remote_server
876
-
470
+ server = get_local_server()
877
471
  if server is None:
878
472
  cli_utils.error(
879
473
  "The local ZenML dashboard is not running. Please call `zenml "
880
- "up` first to start the ZenML dashboard locally."
474
+ "login --local` first to start the ZenML dashboard locally."
881
475
  )
882
476
 
883
- server_name = server.config.name
884
-
885
- from zenml.zen_server.deploy.deployer import ServerDeployer
477
+ from zenml.zen_server.deploy.deployer import LocalServerDeployer
886
478
 
887
- deployer = ServerDeployer()
479
+ deployer = LocalServerDeployer()
888
480
 
889
- cli_utils.declare(f"Showing logs for server: {server_name}")
481
+ cli_utils.declare(
482
+ f"Showing logs for the local {server.config.provider} server"
483
+ )
890
484
 
891
485
  from zenml.zen_server.deploy.exceptions import (
892
486
  ServerDeploymentNotFoundError,
893
487
  )
894
488
 
895
489
  try:
896
- logs = deployer.get_server_logs(server_name, follow=follow, tail=tail)
490
+ logs = deployer.get_server_logs(follow=follow, tail=tail)
897
491
  except ServerDeploymentNotFoundError as e:
898
492
  cli_utils.error(f"Server not found: {e}")
899
493
 
@@ -906,3 +500,276 @@ def logs(
906
500
  console.print(line)
907
501
  except MarkupError:
908
502
  console.print(line, markup=False)
503
+
504
+
505
+ @cli.group(cls=TagGroup, tag=CliCategories.MANAGEMENT_TOOLS)
506
+ def server() -> None:
507
+ """Commands for managing ZenML servers."""
508
+
509
+
510
+ @server.command(
511
+ "list",
512
+ help="""List all ZenML servers that this client is authenticated to.
513
+
514
+ The CLI can be authenticated to multiple ZenML servers at the same time,
515
+ even though it can only be connected to one server at a time. You can list
516
+ all the ZenML servers that the client is currently authenticated to by
517
+ using this command.
518
+
519
+ When logged in to ZenML Pro, this list will also include all ZenML Pro
520
+ servers that the authenticated user can access or could potentially access,
521
+ including details such as their current state and the organization they
522
+ belong to.
523
+
524
+ The complete list of servers displayed by this command includes the
525
+ following:
526
+
527
+ * ZenML Pro servers that the authenticated ZenML Pro user can or could
528
+ access. The client needs to be logged to ZenML Pro via
529
+ `zenml login --pro` to access these servers.
530
+
531
+ * ZenML servers that the client has logged in to via
532
+ `zenml login --url` in the past.
533
+
534
+ * the local ZenML server started with `zenml login --local`, if one is
535
+ running.
536
+
537
+ By default, this command does not display ZenML servers that are not
538
+ accessible: servers that are not running, are no longer accessible due to
539
+ an expired authentication and ZenML Pro servers where the user is not a
540
+ member. To include these servers in the list, use the `--all` flag.
541
+ """,
542
+ )
543
+ @click.option(
544
+ "--verbose",
545
+ "-v",
546
+ is_flag=True,
547
+ help="Show verbose output.",
548
+ )
549
+ @click.option(
550
+ "--all",
551
+ "-a",
552
+ is_flag=True,
553
+ help="Show all ZenML servers, including those that are not running "
554
+ "and those with an expired authentication.",
555
+ )
556
+ @click.option(
557
+ "--pro-api-url",
558
+ type=str,
559
+ default=None,
560
+ help="Custom URL for the ZenML Pro API. Useful when disconnecting "
561
+ "from a self-hosted ZenML Pro deployment.",
562
+ )
563
+ def server_list(
564
+ verbose: bool = False,
565
+ all: bool = False,
566
+ pro_api_url: Optional[str] = None,
567
+ ) -> None:
568
+ """List all ZenML servers that this client is authorized to access.
569
+
570
+ Args:
571
+ verbose: Whether to show verbose output.
572
+ all: Whether to show all ZenML servers.
573
+ pro_api_url: Custom URL for the ZenML Pro API.
574
+ """
575
+ from zenml.login.credentials_store import get_credentials_store
576
+ from zenml.login.pro.client import ZenMLProClient
577
+ from zenml.login.pro.constants import ZENML_PRO_API_URL
578
+ from zenml.login.pro.tenant.models import TenantRead, TenantStatus
579
+
580
+ pro_api_url = pro_api_url or ZENML_PRO_API_URL
581
+
582
+ credentials_store = get_credentials_store()
583
+ pro_token = credentials_store.get_pro_token(
584
+ allow_expired=True, pro_api_url=pro_api_url
585
+ )
586
+ current_store_config = GlobalConfiguration().store_configuration
587
+
588
+ # The list of ZenML Pro servers kept in the credentials store
589
+ pro_servers = credentials_store.list_credentials(type=ServerType.PRO)
590
+ # The list of regular remote ZenML servers kept in the credentials store
591
+ servers = list(credentials_store.list_credentials(type=ServerType.REMOTE))
592
+ # The list of local ZenML servers kept in the credentials store
593
+ local_servers = list(
594
+ credentials_store.list_credentials(type=ServerType.LOCAL)
595
+ )
596
+
597
+ if pro_token and not pro_token.expired:
598
+ # If the ZenML Pro authentication is still valid, we include all ZenML
599
+ # Pro servers that the current ZenML Pro user can access, even those
600
+ # that the user has never connected to (and are therefore not stored in
601
+ # the credentials store).
602
+
603
+ accessible_pro_servers: List[TenantRead] = []
604
+ try:
605
+ client = ZenMLProClient(pro_api_url)
606
+ accessible_pro_servers = client.tenant.list(member_only=not all)
607
+ except AuthorizationException as e:
608
+ cli_utils.warning(f"ZenML Pro authorization error: {e}")
609
+
610
+ # We update the list of stored ZenML Pro servers with the ones that the
611
+ # client is a member of
612
+ for accessible_server in accessible_pro_servers:
613
+ for idx, stored_server in enumerate(pro_servers):
614
+ if stored_server.server_id == accessible_server.id:
615
+ # All ZenML Pro servers accessible by the current ZenML Pro
616
+ # user have an authentication that is valid at least until
617
+ # the current ZenML Pro authentication token expires.
618
+ stored_server.update_server_info(
619
+ accessible_server,
620
+ )
621
+ updated_server = stored_server.model_copy()
622
+ # Replace the current server API token with the current
623
+ # ZenML Pro API token to reflect the current authentication
624
+ # status.
625
+ updated_server.api_token = pro_token
626
+ pro_servers[idx] = updated_server
627
+ break
628
+ else:
629
+ stored_server = ServerCredentials(
630
+ url=accessible_server.url or "",
631
+ api_token=pro_token,
632
+ )
633
+ stored_server.update_server_info(accessible_server)
634
+ pro_servers.append(stored_server)
635
+
636
+ if not all:
637
+ accessible_pro_servers = [
638
+ s
639
+ for s in accessible_pro_servers
640
+ if s.status == TenantStatus.AVAILABLE
641
+ ]
642
+
643
+ if not accessible_pro_servers:
644
+ cli_utils.declare(
645
+ "No ZenML Pro servers that are accessible to the current "
646
+ "user could be found."
647
+ )
648
+ if not all:
649
+ cli_utils.declare(
650
+ "Hint: use the `--all` flag to show all ZenML servers, "
651
+ "including those that the client is not currently "
652
+ "authorized to access or are not running."
653
+ )
654
+
655
+ elif pro_servers:
656
+ cli_utils.warning(
657
+ "The ZenML Pro authentication has expired. Please re-login "
658
+ "to ZenML Pro using `zenml login` to include all ZenML Pro servers "
659
+ "that you are a member of in the list."
660
+ )
661
+
662
+ # We add the local server to the list of servers, if it is running
663
+ local_server = get_local_server()
664
+ if local_server:
665
+ url = (
666
+ local_server.status.url if local_server.status else None
667
+ ) or local_server.config.url
668
+ status = local_server.status.status if local_server.status else ""
669
+ local_servers.append(
670
+ ServerCredentials(
671
+ url=url or "",
672
+ status=status,
673
+ version=zenml.__version__,
674
+ server_id=GlobalConfiguration().user_id,
675
+ server_name=f"local {local_server.config.provider} server",
676
+ )
677
+ )
678
+
679
+ all_servers = pro_servers + local_servers + servers
680
+
681
+ if not all:
682
+ # Filter out servers that are expired or not running
683
+ all_servers = [s for s in all_servers if s.is_available]
684
+
685
+ if verbose:
686
+ columns = [
687
+ "type",
688
+ "server_id_hyperlink",
689
+ "server_name_hyperlink",
690
+ "organization_hyperlink" if pro_servers else "",
691
+ "version",
692
+ "status",
693
+ "dashboard_url",
694
+ "api_hyperlink",
695
+ "auth_status",
696
+ ]
697
+ elif all:
698
+ columns = [
699
+ "type",
700
+ "server_id_hyperlink",
701
+ "server_name_hyperlink",
702
+ "organization_hyperlink" if pro_servers else "",
703
+ "version",
704
+ "status",
705
+ "api_hyperlink",
706
+ ]
707
+ else:
708
+ columns = [
709
+ "type",
710
+ "server_id_hyperlink" if pro_servers else "",
711
+ "server_name_hyperlink",
712
+ "organization_hyperlink" if pro_servers else "",
713
+ "version",
714
+ "api_hyperlink" if servers else "",
715
+ ]
716
+
717
+ # Remove empty columns
718
+ columns = [c for c in columns if c]
719
+
720
+ # Figure out if the client is already connected to one of the
721
+ # servers in the list
722
+ current_server: List[ServerCredentials] = []
723
+ if current_store_config.type == StoreType.REST:
724
+ current_server = [
725
+ s for s in all_servers if s.url == current_store_config.url
726
+ ]
727
+
728
+ cli_utils.print_pydantic_models( # type: ignore[type-var]
729
+ all_servers,
730
+ columns=columns,
731
+ rename_columns={
732
+ "server_name_hyperlink": "name",
733
+ "server_id_hyperlink": "ID",
734
+ "organization_hyperlink": "organization",
735
+ "dashboard_url": "dashboard URL",
736
+ "api_hyperlink": "API URL",
737
+ "auth_status": "auth status",
738
+ },
739
+ active_models=current_server,
740
+ show_active=True,
741
+ )
742
+
743
+
744
+ @server.command(
745
+ "show",
746
+ help="Show the ZenML dashboard for the server that the client is connected to.",
747
+ )
748
+ @click.option(
749
+ "--local",
750
+ is_flag=True,
751
+ help="Show the ZenML dashboard for the local server.",
752
+ default=False,
753
+ type=click.BOOL,
754
+ )
755
+ @click.option(
756
+ "--ngrok-token",
757
+ type=str,
758
+ default=None,
759
+ help="Specify an ngrok auth token to use for exposing the local ZenML "
760
+ "server. Only used when `--local` is set. Primarily used for accessing the "
761
+ "local dashboard in Colab.",
762
+ )
763
+ def show(local: bool = False, ngrok_token: Optional[str] = None) -> None:
764
+ """Show the ZenML dashboard.
765
+
766
+ Args:
767
+ local: Whether to show the ZenML dashboard for the local server.
768
+ ngrok_token: An ngrok auth token to use for exposing the ZenML dashboard
769
+ on a public domain. Primarily used for accessing the local dashboard
770
+ in Colab.
771
+ """
772
+ try:
773
+ zenml.show(ngrok_token=ngrok_token)
774
+ except RuntimeError as e:
775
+ cli_utils.error(str(e))