zenml-nightly 0.58.2.dev20240614__py3-none-any.whl → 0.58.2.dev20240622__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 (314) hide show
  1. zenml/VERSION +1 -1
  2. zenml/_hub/client.py +8 -5
  3. zenml/actions/base_action.py +8 -10
  4. zenml/artifact_stores/base_artifact_store.py +20 -15
  5. zenml/artifact_stores/local_artifact_store.py +3 -2
  6. zenml/artifacts/artifact_config.py +34 -19
  7. zenml/artifacts/external_artifact.py +18 -8
  8. zenml/artifacts/external_artifact_config.py +14 -6
  9. zenml/artifacts/unmaterialized_artifact.py +2 -11
  10. zenml/cli/__init__.py +6 -0
  11. zenml/cli/artifact.py +20 -2
  12. zenml/cli/base.py +2 -2
  13. zenml/cli/served_model.py +0 -1
  14. zenml/cli/server.py +3 -3
  15. zenml/cli/utils.py +36 -40
  16. zenml/cli/web_login.py +2 -2
  17. zenml/client.py +198 -24
  18. zenml/client_lazy_loader.py +20 -14
  19. zenml/config/base_settings.py +5 -6
  20. zenml/config/build_configuration.py +1 -1
  21. zenml/config/compiler.py +3 -3
  22. zenml/config/docker_settings.py +27 -28
  23. zenml/config/global_config.py +33 -37
  24. zenml/config/pipeline_configurations.py +8 -11
  25. zenml/config/pipeline_run_configuration.py +6 -2
  26. zenml/config/pipeline_spec.py +3 -4
  27. zenml/config/resource_settings.py +8 -9
  28. zenml/config/schedule.py +16 -20
  29. zenml/config/secret_reference_mixin.py +6 -3
  30. zenml/config/secrets_store_config.py +16 -23
  31. zenml/config/server_config.py +50 -46
  32. zenml/config/settings_resolver.py +1 -1
  33. zenml/config/source.py +45 -35
  34. zenml/config/step_configurations.py +53 -31
  35. zenml/config/step_run_info.py +3 -0
  36. zenml/config/store_config.py +20 -19
  37. zenml/config/strict_base_model.py +2 -6
  38. zenml/constants.py +26 -2
  39. zenml/container_registries/base_container_registry.py +3 -2
  40. zenml/container_registries/default_container_registry.py +3 -3
  41. zenml/event_hub/base_event_hub.py +1 -1
  42. zenml/event_sources/base_event_source.py +11 -16
  43. zenml/exceptions.py +4 -0
  44. zenml/integrations/airflow/__init__.py +2 -6
  45. zenml/integrations/airflow/flavors/airflow_orchestrator_flavor.py +6 -7
  46. zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +13 -249
  47. zenml/integrations/airflow/orchestrators/dag_generator.py +5 -3
  48. zenml/integrations/argilla/flavors/argilla_annotator_flavor.py +5 -4
  49. zenml/integrations/aws/__init__.py +1 -1
  50. zenml/integrations/aws/flavors/aws_container_registry_flavor.py +3 -2
  51. zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py +11 -5
  52. zenml/integrations/aws/flavors/sagemaker_step_operator_flavor.py +6 -2
  53. zenml/integrations/aws/service_connectors/aws_service_connector.py +5 -4
  54. zenml/integrations/aws/step_operators/sagemaker_step_operator.py +1 -1
  55. zenml/integrations/azure/flavors/azureml_step_operator_flavor.py +4 -4
  56. zenml/integrations/azure/service_connectors/azure_service_connector.py +4 -3
  57. zenml/integrations/azure/step_operators/azureml_step_operator.py +2 -1
  58. zenml/integrations/bentoml/steps/bentoml_deployer.py +1 -1
  59. zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +8 -12
  60. zenml/integrations/comet/flavors/comet_experiment_tracker_flavor.py +1 -1
  61. zenml/integrations/constants.py +0 -1
  62. zenml/integrations/deepchecks/__init__.py +1 -0
  63. zenml/integrations/evidently/__init__.py +5 -3
  64. zenml/integrations/evidently/column_mapping.py +11 -3
  65. zenml/integrations/evidently/data_validators/evidently_data_validator.py +21 -3
  66. zenml/integrations/evidently/metrics.py +5 -6
  67. zenml/integrations/evidently/tests.py +5 -6
  68. zenml/integrations/facets/models.py +2 -6
  69. zenml/integrations/feast/__init__.py +3 -1
  70. zenml/integrations/feast/feature_stores/feast_feature_store.py +0 -23
  71. zenml/integrations/gcp/__init__.py +1 -1
  72. zenml/integrations/gcp/flavors/vertex_orchestrator_flavor.py +1 -1
  73. zenml/integrations/gcp/flavors/vertex_step_operator_flavor.py +1 -1
  74. zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +234 -103
  75. zenml/integrations/gcp/service_connectors/gcp_service_connector.py +57 -42
  76. zenml/integrations/gcp/step_operators/vertex_step_operator.py +1 -0
  77. zenml/integrations/github/code_repositories/github_code_repository.py +1 -1
  78. zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py +9 -13
  79. zenml/integrations/great_expectations/__init__.py +1 -1
  80. zenml/integrations/great_expectations/data_validators/ge_data_validator.py +44 -44
  81. zenml/integrations/great_expectations/flavors/great_expectations_data_validator_flavor.py +35 -2
  82. zenml/integrations/great_expectations/ge_store_backend.py +24 -11
  83. zenml/integrations/great_expectations/materializers/ge_materializer.py +3 -3
  84. zenml/integrations/great_expectations/utils.py +5 -5
  85. zenml/integrations/huggingface/__init__.py +3 -0
  86. zenml/integrations/huggingface/flavors/huggingface_model_deployer_flavor.py +1 -1
  87. zenml/integrations/huggingface/steps/__init__.py +3 -0
  88. zenml/integrations/huggingface/steps/accelerate_runner.py +149 -0
  89. zenml/integrations/huggingface/steps/huggingface_deployer.py +2 -2
  90. zenml/integrations/hyperai/flavors/hyperai_orchestrator_flavor.py +1 -1
  91. zenml/integrations/hyperai/service_connectors/hyperai_service_connector.py +4 -3
  92. zenml/integrations/kubeflow/__init__.py +1 -1
  93. zenml/integrations/kubeflow/flavors/kubeflow_orchestrator_flavor.py +48 -81
  94. zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py +295 -245
  95. zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +1 -1
  96. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +11 -2
  97. zenml/integrations/kubernetes/pod_settings.py +17 -31
  98. zenml/integrations/kubernetes/service_connectors/kubernetes_service_connector.py +8 -7
  99. zenml/integrations/label_studio/__init__.py +1 -3
  100. zenml/integrations/label_studio/annotators/label_studio_annotator.py +3 -4
  101. zenml/integrations/label_studio/flavors/label_studio_annotator_flavor.py +2 -2
  102. zenml/integrations/langchain/__init__.py +5 -1
  103. zenml/integrations/langchain/materializers/document_materializer.py +44 -8
  104. zenml/integrations/mlflow/__init__.py +9 -3
  105. zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +1 -1
  106. zenml/integrations/mlflow/flavors/mlflow_experiment_tracker_flavor.py +29 -37
  107. zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +4 -4
  108. zenml/integrations/mlflow/steps/mlflow_deployer.py +1 -1
  109. zenml/integrations/neptune/flavors/neptune_experiment_tracker_flavor.py +1 -1
  110. zenml/integrations/neural_prophet/__init__.py +5 -1
  111. zenml/integrations/pigeon/flavors/pigeon_annotator_flavor.py +1 -1
  112. zenml/integrations/s3/flavors/s3_artifact_store_flavor.py +9 -8
  113. zenml/integrations/seldon/seldon_client.py +52 -67
  114. zenml/integrations/seldon/services/seldon_deployment.py +3 -3
  115. zenml/integrations/seldon/steps/seldon_deployer.py +4 -4
  116. zenml/integrations/skypilot/flavors/skypilot_orchestrator_base_vm_config.py +15 -5
  117. zenml/integrations/skypilot_aws/__init__.py +1 -1
  118. zenml/integrations/skypilot_aws/flavors/skypilot_orchestrator_aws_vm_flavor.py +1 -1
  119. zenml/integrations/skypilot_azure/__init__.py +1 -1
  120. zenml/integrations/skypilot_azure/flavors/skypilot_orchestrator_azure_vm_flavor.py +1 -1
  121. zenml/integrations/skypilot_gcp/__init__.py +2 -1
  122. zenml/integrations/skypilot_gcp/flavors/skypilot_orchestrator_gcp_vm_flavor.py +1 -1
  123. zenml/integrations/skypilot_lambda/flavors/skypilot_orchestrator_lambda_vm_flavor.py +2 -2
  124. zenml/integrations/spark/flavors/spark_step_operator_flavor.py +1 -1
  125. zenml/integrations/spark/step_operators/spark_step_operator.py +2 -0
  126. zenml/integrations/tekton/__init__.py +1 -1
  127. zenml/integrations/tekton/flavors/tekton_orchestrator_flavor.py +66 -23
  128. zenml/integrations/tekton/orchestrators/tekton_orchestrator.py +547 -233
  129. zenml/integrations/tensorboard/__init__.py +1 -12
  130. zenml/integrations/tensorboard/services/tensorboard_service.py +3 -5
  131. zenml/integrations/tensorboard/visualizers/tensorboard_visualizer.py +6 -6
  132. zenml/integrations/tensorflow/__init__.py +2 -10
  133. zenml/integrations/tensorflow/materializers/keras_materializer.py +17 -9
  134. zenml/integrations/wandb/flavors/wandb_experiment_tracker_flavor.py +9 -14
  135. zenml/integrations/whylogs/flavors/whylogs_data_validator_flavor.py +1 -1
  136. zenml/lineage_graph/lineage_graph.py +1 -1
  137. zenml/logging/step_logging.py +15 -7
  138. zenml/materializers/built_in_materializer.py +3 -3
  139. zenml/materializers/pydantic_materializer.py +2 -2
  140. zenml/metadata/lazy_load.py +4 -4
  141. zenml/metadata/metadata_types.py +64 -4
  142. zenml/model/model.py +79 -54
  143. zenml/model_deployers/base_model_deployer.py +14 -12
  144. zenml/model_registries/base_model_registry.py +17 -15
  145. zenml/models/__init__.py +79 -206
  146. zenml/models/v2/base/base.py +54 -41
  147. zenml/models/v2/base/base_plugin_flavor.py +2 -6
  148. zenml/models/v2/base/filter.py +91 -76
  149. zenml/models/v2/base/page.py +2 -12
  150. zenml/models/v2/base/scoped.py +4 -7
  151. zenml/models/v2/core/api_key.py +22 -8
  152. zenml/models/v2/core/artifact.py +2 -2
  153. zenml/models/v2/core/artifact_version.py +74 -40
  154. zenml/models/v2/core/code_repository.py +37 -10
  155. zenml/models/v2/core/component.py +65 -16
  156. zenml/models/v2/core/device.py +14 -4
  157. zenml/models/v2/core/event_source.py +1 -2
  158. zenml/models/v2/core/flavor.py +74 -8
  159. zenml/models/v2/core/logs.py +68 -8
  160. zenml/models/v2/core/model.py +8 -4
  161. zenml/models/v2/core/model_version.py +25 -6
  162. zenml/models/v2/core/model_version_artifact.py +51 -21
  163. zenml/models/v2/core/model_version_pipeline_run.py +45 -13
  164. zenml/models/v2/core/pipeline.py +37 -72
  165. zenml/models/v2/core/pipeline_build.py +29 -17
  166. zenml/models/v2/core/pipeline_deployment.py +18 -6
  167. zenml/models/v2/core/pipeline_namespace.py +113 -0
  168. zenml/models/v2/core/pipeline_run.py +50 -22
  169. zenml/models/v2/core/run_metadata.py +59 -36
  170. zenml/models/v2/core/schedule.py +37 -24
  171. zenml/models/v2/core/secret.py +31 -12
  172. zenml/models/v2/core/service.py +64 -36
  173. zenml/models/v2/core/service_account.py +24 -11
  174. zenml/models/v2/core/service_connector.py +219 -44
  175. zenml/models/v2/core/stack.py +45 -17
  176. zenml/models/v2/core/step_run.py +28 -8
  177. zenml/models/v2/core/tag.py +8 -4
  178. zenml/models/v2/core/trigger.py +2 -2
  179. zenml/models/v2/core/trigger_execution.py +1 -0
  180. zenml/models/v2/core/user.py +18 -21
  181. zenml/models/v2/core/workspace.py +13 -3
  182. zenml/models/v2/misc/build_item.py +3 -3
  183. zenml/models/v2/misc/external_user.py +2 -6
  184. zenml/models/v2/misc/hub_plugin_models.py +9 -9
  185. zenml/models/v2/misc/loaded_visualization.py +2 -2
  186. zenml/models/v2/misc/service_connector_type.py +8 -17
  187. zenml/models/v2/misc/user_auth.py +7 -2
  188. zenml/new/pipelines/build_utils.py +3 -3
  189. zenml/new/pipelines/pipeline.py +17 -13
  190. zenml/new/pipelines/run_utils.py +103 -1
  191. zenml/orchestrators/base_orchestrator.py +10 -7
  192. zenml/orchestrators/local_docker/local_docker_orchestrator.py +1 -1
  193. zenml/orchestrators/step_launcher.py +28 -4
  194. zenml/orchestrators/step_runner.py +3 -6
  195. zenml/orchestrators/utils.py +1 -1
  196. zenml/plugins/base_plugin_flavor.py +6 -10
  197. zenml/plugins/plugin_flavor_registry.py +3 -7
  198. zenml/secret/base_secret.py +7 -8
  199. zenml/service_connectors/docker_service_connector.py +4 -3
  200. zenml/service_connectors/service_connector.py +5 -12
  201. zenml/service_connectors/service_connector_registry.py +2 -4
  202. zenml/services/container/container_service.py +1 -1
  203. zenml/services/container/container_service_endpoint.py +1 -1
  204. zenml/services/local/local_service.py +1 -1
  205. zenml/services/local/local_service_endpoint.py +1 -1
  206. zenml/services/service.py +16 -10
  207. zenml/services/service_type.py +4 -5
  208. zenml/services/terraform/terraform_service.py +1 -1
  209. zenml/stack/flavor.py +2 -6
  210. zenml/stack/flavor_registry.py +4 -4
  211. zenml/stack/stack.py +4 -1
  212. zenml/stack/stack_component.py +55 -31
  213. zenml/step_operators/step_operator_entrypoint_configuration.py +1 -0
  214. zenml/steps/base_step.py +34 -28
  215. zenml/steps/entrypoint_function_utils.py +3 -5
  216. zenml/steps/utils.py +12 -14
  217. zenml/utils/cuda_utils.py +50 -0
  218. zenml/utils/deprecation_utils.py +18 -20
  219. zenml/utils/dict_utils.py +1 -1
  220. zenml/utils/filesync_model.py +65 -28
  221. zenml/utils/function_utils.py +260 -0
  222. zenml/utils/json_utils.py +131 -0
  223. zenml/utils/mlstacks_utils.py +2 -2
  224. zenml/utils/package_utils.py +1 -1
  225. zenml/utils/pipeline_docker_image_builder.py +9 -0
  226. zenml/utils/pydantic_utils.py +270 -62
  227. zenml/utils/secret_utils.py +65 -12
  228. zenml/utils/source_utils.py +2 -2
  229. zenml/utils/typed_model.py +5 -3
  230. zenml/utils/typing_utils.py +243 -0
  231. zenml/utils/yaml_utils.py +1 -1
  232. zenml/zen_server/auth.py +2 -2
  233. zenml/zen_server/cloud_utils.py +6 -6
  234. zenml/zen_server/deploy/base_provider.py +1 -1
  235. zenml/zen_server/deploy/deployment.py +6 -8
  236. zenml/zen_server/deploy/docker/docker_zen_server.py +3 -4
  237. zenml/zen_server/deploy/local/local_provider.py +0 -1
  238. zenml/zen_server/deploy/local/local_zen_server.py +6 -6
  239. zenml/zen_server/deploy/terraform/terraform_zen_server.py +4 -6
  240. zenml/zen_server/exceptions.py +4 -1
  241. zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +1 -1
  242. zenml/zen_server/pipeline_deployment/utils.py +48 -68
  243. zenml/zen_server/rbac/models.py +2 -5
  244. zenml/zen_server/rbac/utils.py +11 -14
  245. zenml/zen_server/routers/auth_endpoints.py +2 -2
  246. zenml/zen_server/routers/pipeline_builds_endpoints.py +1 -1
  247. zenml/zen_server/routers/runs_endpoints.py +1 -1
  248. zenml/zen_server/routers/secrets_endpoints.py +3 -2
  249. zenml/zen_server/routers/server_endpoints.py +1 -1
  250. zenml/zen_server/routers/steps_endpoints.py +1 -1
  251. zenml/zen_server/routers/workspaces_endpoints.py +1 -1
  252. zenml/zen_stores/base_zen_store.py +46 -9
  253. zenml/zen_stores/migrations/utils.py +42 -46
  254. zenml/zen_stores/migrations/versions/0701da9951a0_added_service_table.py +1 -1
  255. zenml/zen_stores/migrations/versions/1041bc644e0d_remove_secrets_manager.py +5 -3
  256. zenml/zen_stores/migrations/versions/10a907dad202_delete_mlmd_tables.py +1 -1
  257. zenml/zen_stores/migrations/versions/26b776ad583e_redesign_artifacts.py +8 -10
  258. zenml/zen_stores/migrations/versions/37835ce041d2_optimizing_database.py +3 -3
  259. zenml/zen_stores/migrations/versions/46506f72f0ed_add_server_settings.py +10 -12
  260. zenml/zen_stores/migrations/versions/5994f9ad0489_introduce_role_permissions.py +3 -2
  261. zenml/zen_stores/migrations/versions/6917bce75069_add_pipeline_run_unique_constraint.py +4 -4
  262. zenml/zen_stores/migrations/versions/728c6369cfaa_add_name_column_to_input_artifact_pk.py +3 -2
  263. zenml/zen_stores/migrations/versions/743ec82b1b3c_update_size_of_build_images.py +2 -2
  264. zenml/zen_stores/migrations/versions/7500f434b71c_remove_shared_columns.py +3 -2
  265. zenml/zen_stores/migrations/versions/7834208cc3f6_artifact_project_scoping.py +8 -7
  266. zenml/zen_stores/migrations/versions/7b651bf6822e_track_secrets_in_db.py +6 -4
  267. zenml/zen_stores/migrations/versions/7e4a481d17f7_add_identity_table.py +2 -2
  268. zenml/zen_stores/migrations/versions/7f603e583dd7_fixed_migration.py +1 -1
  269. zenml/zen_stores/migrations/versions/a39c4184c8ce_remove_secrets_manager_flavors.py +2 -2
  270. zenml/zen_stores/migrations/versions/a91762e6be36_artifact_version_table.py +4 -4
  271. zenml/zen_stores/migrations/versions/alembic_start.py +1 -1
  272. zenml/zen_stores/migrations/versions/fbd7f18ced1e_increase_step_run_field_lengths.py +4 -4
  273. zenml/zen_stores/rest_zen_store.py +109 -49
  274. zenml/zen_stores/schemas/api_key_schemas.py +1 -1
  275. zenml/zen_stores/schemas/artifact_schemas.py +8 -8
  276. zenml/zen_stores/schemas/artifact_visualization_schemas.py +3 -3
  277. zenml/zen_stores/schemas/code_repository_schemas.py +1 -1
  278. zenml/zen_stores/schemas/component_schemas.py +8 -3
  279. zenml/zen_stores/schemas/device_schemas.py +8 -6
  280. zenml/zen_stores/schemas/event_source_schemas.py +3 -4
  281. zenml/zen_stores/schemas/flavor_schemas.py +5 -3
  282. zenml/zen_stores/schemas/model_schemas.py +26 -1
  283. zenml/zen_stores/schemas/pipeline_build_schemas.py +1 -1
  284. zenml/zen_stores/schemas/pipeline_deployment_schemas.py +4 -4
  285. zenml/zen_stores/schemas/pipeline_run_schemas.py +6 -6
  286. zenml/zen_stores/schemas/pipeline_schemas.py +5 -2
  287. zenml/zen_stores/schemas/run_metadata_schemas.py +2 -2
  288. zenml/zen_stores/schemas/secret_schemas.py +8 -5
  289. zenml/zen_stores/schemas/server_settings_schemas.py +3 -1
  290. zenml/zen_stores/schemas/service_connector_schemas.py +1 -1
  291. zenml/zen_stores/schemas/service_schemas.py +11 -2
  292. zenml/zen_stores/schemas/stack_schemas.py +1 -1
  293. zenml/zen_stores/schemas/step_run_schemas.py +11 -11
  294. zenml/zen_stores/schemas/tag_schemas.py +6 -2
  295. zenml/zen_stores/schemas/trigger_schemas.py +2 -2
  296. zenml/zen_stores/schemas/user_schemas.py +2 -2
  297. zenml/zen_stores/schemas/workspace_schemas.py +3 -1
  298. zenml/zen_stores/secrets_stores/aws_secrets_store.py +19 -20
  299. zenml/zen_stores/secrets_stores/azure_secrets_store.py +17 -20
  300. zenml/zen_stores/secrets_stores/base_secrets_store.py +79 -12
  301. zenml/zen_stores/secrets_stores/gcp_secrets_store.py +17 -20
  302. zenml/zen_stores/secrets_stores/hashicorp_secrets_store.py +4 -8
  303. zenml/zen_stores/secrets_stores/service_connector_secrets_store.py +10 -7
  304. zenml/zen_stores/secrets_stores/sql_secrets_store.py +5 -6
  305. zenml/zen_stores/sql_zen_store.py +196 -120
  306. zenml/zen_stores/zen_store_interface.py +33 -0
  307. {zenml_nightly-0.58.2.dev20240614.dist-info → zenml_nightly-0.58.2.dev20240622.dist-info}/METADATA +9 -7
  308. {zenml_nightly-0.58.2.dev20240614.dist-info → zenml_nightly-0.58.2.dev20240622.dist-info}/RECORD +311 -308
  309. zenml/integrations/kubeflow/utils.py +0 -95
  310. zenml/models/v2/base/internal.py +0 -37
  311. zenml/models/v2/base/update.py +0 -44
  312. {zenml_nightly-0.58.2.dev20240614.dist-info → zenml_nightly-0.58.2.dev20240622.dist-info}/LICENSE +0 -0
  313. {zenml_nightly-0.58.2.dev20240614.dist-info → zenml_nightly-0.58.2.dev20240622.dist-info}/WHEEL +0 -0
  314. {zenml_nightly-0.58.2.dev20240614.dist-info → zenml_nightly-0.58.2.dev20240622.dist-info}/entry_points.txt +0 -0
@@ -17,7 +17,8 @@ import os
17
17
  import time
18
18
  from contextlib import nullcontext
19
19
  from datetime import datetime
20
- from typing import TYPE_CHECKING, Dict, Optional, Tuple
20
+ from functools import partial
21
+ from typing import TYPE_CHECKING, Any, Callable, Dict, Optional, Tuple
21
22
 
22
23
  from zenml.client import Client
23
24
  from zenml.config.step_configurations import Step
@@ -247,10 +248,28 @@ class StepLauncher:
247
248
  while retries < max_retries:
248
249
  last_retry = retries == max_retries - 1
249
250
  try:
251
+ # here pass a forced save_to_file callable to be
252
+ # used as a dump function to use before starting
253
+ # the external jobs in step operators
254
+ if isinstance(
255
+ logs_context,
256
+ step_logging.StepLogsStorageContext,
257
+ ):
258
+ force_write_logs = partial(
259
+ logs_context.storage.save_to_file,
260
+ force=True,
261
+ )
262
+ else:
263
+
264
+ def _bypass() -> None:
265
+ return None
266
+
267
+ force_write_logs = _bypass
250
268
  self._run_step(
251
269
  pipeline_run=pipeline_run,
252
270
  step_run=step_run_response,
253
271
  last_retry=last_retry,
272
+ force_write_logs=force_write_logs,
254
273
  )
255
274
  logger.info(
256
275
  f"Step `{self._step_name}` completed successfully."
@@ -324,9 +343,11 @@ class StepLauncher:
324
343
  user=client.active_user.id,
325
344
  workspace=client.active_workspace.id,
326
345
  deployment=self._deployment.id,
327
- pipeline=self._deployment.pipeline.id
328
- if self._deployment.pipeline
329
- else None,
346
+ pipeline=(
347
+ self._deployment.pipeline.id
348
+ if self._deployment.pipeline
349
+ else None
350
+ ),
330
351
  status=ExecutionStatus.RUNNING,
331
352
  orchestrator_environment=get_run_environment_dict(),
332
353
  start_time=datetime.utcnow(),
@@ -415,6 +436,7 @@ class StepLauncher:
415
436
  self,
416
437
  pipeline_run: PipelineRunResponse,
417
438
  step_run: StepRunResponse,
439
+ force_write_logs: Callable[..., Any],
418
440
  last_retry: bool = True,
419
441
  ) -> None:
420
442
  """Runs the current step.
@@ -422,6 +444,7 @@ class StepLauncher:
422
444
  Args:
423
445
  pipeline_run: The model of the current pipeline run.
424
446
  step_run: The model of the current step run.
447
+ force_write_logs: The context for the step logs.
425
448
  last_retry: Whether this is the last retry of the step.
426
449
  """
427
450
  # Prepare step run information.
@@ -432,6 +455,7 @@ class StepLauncher:
432
455
  pipeline_step_name=self._step_name,
433
456
  run_id=pipeline_run.id,
434
457
  step_run_id=step_run.id,
458
+ force_write_logs=force_write_logs,
435
459
  )
436
460
 
437
461
  output_artifact_uris = output_utils.prepare_output_artifact_uris(
@@ -28,8 +28,6 @@ from typing import (
28
28
  )
29
29
  from uuid import UUID
30
30
 
31
- from pydantic.typing import get_origin, is_union
32
-
33
31
  from zenml.artifacts.unmaterialized_artifact import UnmaterializedArtifact
34
32
  from zenml.artifacts.utils import save_artifact
35
33
  from zenml.config.step_configurations import StepConfiguration
@@ -63,6 +61,7 @@ from zenml.steps.utils import (
63
61
  resolve_type_annotation,
64
62
  )
65
63
  from zenml.utils import materializer_utils, source_utils
64
+ from zenml.utils.typing_utils import get_origin, is_union
66
65
 
67
66
  if TYPE_CHECKING:
68
67
  from zenml.config.source import Source
@@ -396,7 +395,7 @@ class StepRunner:
396
395
 
397
396
  # Parse the parameters
398
397
  if issubclass(arg_type, BaseParameters):
399
- step_params = arg_type.parse_obj(
398
+ step_params = arg_type.model_validate(
400
399
  self.configuration.parameters[arg]
401
400
  )
402
401
  function_params[arg] = step_params
@@ -440,7 +439,7 @@ class StepRunner:
440
439
  # Skip materialization for `UnmaterializedArtifact`.
441
440
  if data_type == UnmaterializedArtifact:
442
441
  return UnmaterializedArtifact(
443
- **artifact.get_hydrated_version().dict()
442
+ **artifact.get_hydrated_version().model_dump()
444
443
  )
445
444
 
446
445
  if data_type is Any or is_union(get_origin(data_type)):
@@ -513,8 +512,6 @@ class StepRunner:
513
512
  f"(return values: {return_values})."
514
513
  )
515
514
 
516
- from pydantic.typing import get_origin, is_union
517
-
518
515
  from zenml.steps.utils import get_args
519
516
 
520
517
  validated_outputs: Dict[str, Any] = {}
@@ -225,7 +225,7 @@ def _link_cached_artifacts_to_model(
225
225
  if output_name_ in output_annotations:
226
226
  annotation = output_annotations.get(output_name_, None)
227
227
  if annotation and annotation.artifact_config is not None:
228
- artifact_config_ = annotation.artifact_config.copy()
228
+ artifact_config_ = annotation.artifact_config.model_copy()
229
229
  # no artifact config found or artifact was produced by `save_artifact`
230
230
  # inside the step body, so was never in annotations
231
231
  if artifact_config_ is None:
@@ -16,7 +16,7 @@
16
16
  from abc import ABC, abstractmethod
17
17
  from typing import TYPE_CHECKING, Any, ClassVar, Type
18
18
 
19
- from pydantic import BaseModel, Extra
19
+ from pydantic import BaseModel, ConfigDict
20
20
 
21
21
  from zenml.config.global_config import GlobalConfiguration
22
22
  from zenml.enums import PluginSubType, PluginType
@@ -29,16 +29,12 @@ if TYPE_CHECKING:
29
29
  class BasePluginConfig(BaseModel, ABC):
30
30
  """Allows configuring of Event Source and Filter configuration."""
31
31
 
32
- class Config:
33
- """Pydantic configuration class."""
34
-
35
- # public attributes are immutable
36
- allow_mutation = True
37
- # all attributes with leading underscore are private and therefore
38
- # are mutable and not included in serialization
39
- underscore_attrs_are_private = True
32
+ model_config = ConfigDict(
33
+ # public attributes are mutable
34
+ frozen=False,
40
35
  # ignore extra attributes during model initialization
41
- extra = Extra.ignore
36
+ extra="ignore",
37
+ )
42
38
 
43
39
 
44
40
  class BasePlugin(ABC):
@@ -16,7 +16,7 @@
16
16
  import math
17
17
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Type
18
18
 
19
- from pydantic import BaseModel
19
+ from pydantic import BaseModel, ConfigDict
20
20
 
21
21
  from zenml.enums import PluginSubType, PluginType
22
22
  from zenml.integrations.registry import integration_registry
@@ -35,12 +35,8 @@ class RegistryEntry(BaseModel):
35
35
  """Registry Entry Class for the Plugin Registry."""
36
36
 
37
37
  flavor_class: Type[BasePluginFlavor]
38
- plugin_instance: Optional[BasePlugin]
39
-
40
- class Config:
41
- """Pydantic configuration class."""
42
-
43
- arbitrary_types_allowed = True
38
+ plugin_instance: Optional[BasePlugin] = None
39
+ model_config = ConfigDict(arbitrary_types_allowed=True)
44
40
 
45
41
 
46
42
  class PluginFlavorRegistry:
@@ -15,7 +15,7 @@
15
15
 
16
16
  from typing import Any, Dict, List
17
17
 
18
- from pydantic import BaseModel
18
+ from pydantic import BaseModel, ConfigDict
19
19
 
20
20
 
21
21
  class BaseSecretSchema(BaseModel):
@@ -31,7 +31,7 @@ class BaseSecretSchema(BaseModel):
31
31
  Returns:
32
32
  A list of all attribute names that are part of the schema.
33
33
  """
34
- return list(cls.__fields__.keys())
34
+ return list(cls.model_fields.keys())
35
35
 
36
36
  def get_values(self) -> Dict[str, Any]:
37
37
  """Get all values of the secret schema.
@@ -39,12 +39,11 @@ class BaseSecretSchema(BaseModel):
39
39
  Returns:
40
40
  A dictionary of all attribute names and their corresponding values.
41
41
  """
42
- return self.dict(exclude_none=True)
43
-
44
- class Config:
45
- """Pydantic configuration class."""
42
+ return self.model_dump(exclude_none=True)
46
43
 
44
+ model_config = ConfigDict(
47
45
  # validate attribute assignments
48
- validate_assignment = True
46
+ validate_assignment=True,
49
47
  # report extra attributes as validation failures
50
- extra = "forbid"
48
+ extra="forbid",
49
+ )
@@ -23,7 +23,7 @@ from typing import Any, List, Optional
23
23
 
24
24
  from docker.client import DockerClient
25
25
  from docker.errors import DockerException
26
- from pydantic import Field, SecretStr
26
+ from pydantic import Field
27
27
 
28
28
  from zenml.constants import DOCKER_REGISTRY_RESOURCE_TYPE
29
29
  from zenml.exceptions import AuthorizationException
@@ -39,6 +39,7 @@ from zenml.service_connectors.service_connector import (
39
39
  )
40
40
  from zenml.utils import docker_utils
41
41
  from zenml.utils.enum_utils import StrEnum
42
+ from zenml.utils.secret_utils import PlainSerializedSecretStr
42
43
 
43
44
  logger = get_logger(__name__)
44
45
 
@@ -46,10 +47,10 @@ logger = get_logger(__name__)
46
47
  class DockerCredentials(AuthenticationConfig):
47
48
  """Docker client authentication credentials."""
48
49
 
49
- username: SecretStr = Field(
50
+ username: PlainSerializedSecretStr = Field(
50
51
  title="Username",
51
52
  )
52
- password: SecretStr = Field(
53
+ password: PlainSerializedSecretStr = Field(
53
54
  title="Password",
54
55
  )
55
56
 
@@ -34,7 +34,7 @@ from pydantic import (
34
34
  SecretStr,
35
35
  ValidationError,
36
36
  )
37
- from pydantic.main import ModelMetaclass
37
+ from pydantic._internal._model_construction import ModelMetaclass
38
38
 
39
39
  from zenml.client import Client
40
40
  from zenml.constants import (
@@ -71,7 +71,7 @@ class AuthenticationConfig(BaseModel):
71
71
  """
72
72
  return {
73
73
  k: v
74
- for k, v in self.dict(exclude_none=True).items()
74
+ for k, v in self.model_dump(exclude_none=True).items()
75
75
  if isinstance(v, SecretStr)
76
76
  }
77
77
 
@@ -84,7 +84,7 @@ class AuthenticationConfig(BaseModel):
84
84
  """
85
85
  return {
86
86
  k: v
87
- for k, v in self.dict(exclude_none=True).items()
87
+ for k, v in self.model_dump(exclude_none=True).items()
88
88
  if not isinstance(v, SecretStr)
89
89
  }
90
90
 
@@ -95,7 +95,7 @@ class AuthenticationConfig(BaseModel):
95
95
  Returns:
96
96
  A dictionary of all values in the configuration.
97
97
  """
98
- return self.dict(exclude_none=True)
98
+ return self.model_dump(exclude_none=True)
99
99
 
100
100
 
101
101
  class ServiceConnectorMeta(ModelMetaclass):
@@ -487,7 +487,7 @@ class ServiceConnector(BaseModel, metaclass=ServiceConnectorMeta):
487
487
  ):
488
488
  return self
489
489
 
490
- copy = self.copy()
490
+ copy = self.model_copy()
491
491
  copy.resource_type = resource_type
492
492
  copy.resource_id = resource_id
493
493
  return copy
@@ -1401,10 +1401,3 @@ class ServiceConnector(BaseModel, metaclass=ServiceConnectorMeta):
1401
1401
  )
1402
1402
 
1403
1403
  return connector_client
1404
-
1405
- class Config:
1406
- """Connector configuration."""
1407
-
1408
- # all attributes with leading underscore are private and therefore
1409
- # are mutable and not included in serialization
1410
- underscore_attrs_are_private = True
@@ -22,7 +22,6 @@ if TYPE_CHECKING:
22
22
  from zenml.models import (
23
23
  ServiceConnectorRequest,
24
24
  ServiceConnectorResponse,
25
- ServiceConnectorUpdate,
26
25
  )
27
26
  from zenml.service_connectors.service_connector import ServiceConnector
28
27
  logger = get_logger(__name__)
@@ -90,7 +89,7 @@ class ServiceConnectorRegistry:
90
89
  f"Please make sure the corresponding packages and/or ZenML "
91
90
  f"integration are installed and try again."
92
91
  )
93
- return self.service_connector_types[connector_type].copy()
92
+ return self.service_connector_types[connector_type].model_copy()
94
93
 
95
94
  def __getitem__(self, key: str) -> ServiceConnectorTypeModel:
96
95
  """Get a service connector type by its connector type identifier.
@@ -155,7 +154,7 @@ class ServiceConnectorRegistry:
155
154
  or auth_method in service_connector_type.auth_method_dict
156
155
  )
157
156
  ):
158
- matches.append(service_connector_type.copy())
157
+ matches.append(service_connector_type.model_copy())
159
158
 
160
159
  return matches
161
160
 
@@ -164,7 +163,6 @@ class ServiceConnectorRegistry:
164
163
  model: Union[
165
164
  "ServiceConnectorRequest",
166
165
  "ServiceConnectorResponse",
167
- "ServiceConnectorUpdate",
168
166
  ],
169
167
  ) -> "ServiceConnector":
170
168
  """Validate a service connector model and create an instance from it.
@@ -289,7 +289,7 @@ class ContainerService(BaseService):
289
289
  assert self.status.log_file is not None
290
290
 
291
291
  with open(self.status.config_file, "w") as f:
292
- f.write(self.json(indent=4))
292
+ f.write(self.model_dump_json(indent=4))
293
293
  pathlib.Path(self.status.log_file).touch()
294
294
 
295
295
  command = [
@@ -80,7 +80,7 @@ class ContainerServiceEndpoint(BaseServiceEndpoint):
80
80
  )
81
81
  monitor: Optional[
82
82
  Union[HTTPEndpointHealthMonitor, TCPEndpointHealthMonitor]
83
- ] = Field(..., discriminator="type")
83
+ ] = Field(..., discriminator="type", union_mode="left_to_right")
84
84
 
85
85
  def _lookup_free_port(self) -> int:
86
86
  """Search for a free TCP port for the service endpoint.
@@ -331,7 +331,7 @@ class LocalDaemonService(BaseService):
331
331
  assert self.status.pid_file is not None
332
332
 
333
333
  with open(self.status.config_file, "w") as f:
334
- f.write(self.json(indent=4))
334
+ f.write(self.model_dump_json(indent=4))
335
335
 
336
336
  # delete the previous PID file, in case a previous daemon process
337
337
  # crashed and left a stale PID file
@@ -83,7 +83,7 @@ class LocalDaemonServiceEndpoint(BaseServiceEndpoint):
83
83
  )
84
84
  monitor: Optional[
85
85
  Union[HTTPEndpointHealthMonitor, TCPEndpointHealthMonitor]
86
- ] = Field(..., discriminator="type")
86
+ ] = Field(..., discriminator="type", union_mode="left_to_right")
87
87
 
88
88
  def _lookup_free_port(self) -> int:
89
89
  """Search for a free TCP port for the service endpoint.
zenml/services/service.py CHANGED
@@ -31,6 +31,8 @@ from typing import (
31
31
  )
32
32
  from uuid import UUID
33
33
 
34
+ from pydantic import ConfigDict
35
+
34
36
  from zenml.console import console
35
37
  from zenml.logger import get_logger
36
38
  from zenml.services.service_endpoint import BaseServiceEndpoint
@@ -117,6 +119,14 @@ class ServiceConfig(BaseTypedModel):
117
119
  model_version: str = ""
118
120
  service_name: str = ""
119
121
 
122
+ # TODO: In Pydantic v2, the `model_` is a protected namespaces for all
123
+ # fields defined under base models. If not handled, this raises a warning.
124
+ # It is possible to suppress this warning message with the following
125
+ # configuration, however the ultimate solution is to rename these fields.
126
+ # Even though they do not cause any problems right now, if we are not
127
+ # careful we might overwrite some fields protected by pydantic.
128
+ model_config = ConfigDict(protected_namespaces=())
129
+
120
130
  def __init__(self, **data: Any):
121
131
  """Initialize the service configuration.
122
132
 
@@ -142,7 +152,7 @@ class ServiceConfig(BaseTypedModel):
142
152
  a dictionary of service labels.
143
153
  """
144
154
  labels = {}
145
- for k, v in self.dict().items():
155
+ for k, v in self.model_dump().items():
146
156
  label = f"zenml_{k}".upper()
147
157
  labels[label] = str(v)
148
158
  return labels
@@ -172,7 +182,7 @@ class BaseService(BaseTypedModel):
172
182
  config: ServiceConfig
173
183
  status: ServiceStatus
174
184
  # TODO [ENG-703]: allow multiple endpoints per service
175
- endpoint: Optional[BaseServiceEndpoint]
185
+ endpoint: Optional[BaseServiceEndpoint] = None
176
186
 
177
187
  def __init__(
178
188
  self,
@@ -209,7 +219,7 @@ class BaseService(BaseTypedModel):
209
219
  admin_state=model.admin_state,
210
220
  config=model.config,
211
221
  status=model.status,
212
- service_type=model.service_type.dict(),
222
+ service_type=model.service_type.model_dump(),
213
223
  endpoint=model.endpoint,
214
224
  )
215
225
 
@@ -512,14 +522,10 @@ class BaseService(BaseTypedModel):
512
522
  """
513
523
  return self.__repr__()
514
524
 
515
- class Config:
516
- """Pydantic configuration class."""
517
-
525
+ model_config = ConfigDict(
518
526
  # validate attribute assignments
519
- validate_assignment = True
520
- # all attributes with leading underscore are private and therefore
521
- # are mutable and not included in serialization
522
- underscore_attrs_are_private = True
527
+ validate_assignment=True,
528
+ )
523
529
 
524
530
 
525
531
  class BaseDeploymentService(BaseService):
@@ -13,7 +13,7 @@
13
13
  # permissions and limitations under the License.
14
14
  """Implementation of a ZenML ServiceType class."""
15
15
 
16
- from pydantic import BaseModel
16
+ from pydantic import BaseModel, ConfigDict
17
17
 
18
18
 
19
19
  class ServiceType(BaseModel):
@@ -33,8 +33,7 @@ class ServiceType(BaseModel):
33
33
  description: str = ""
34
34
  logo_url: str = ""
35
35
 
36
- class Config:
37
- """Pydantic configuration class."""
38
-
36
+ model_config = ConfigDict(
39
37
  # make the service type immutable and hashable
40
- frozen = True
38
+ frozen=True
39
+ )
@@ -176,7 +176,7 @@ class TerraformService(BaseService):
176
176
  assert self.status.config_file is not None
177
177
 
178
178
  with open(self.status.config_file, "w") as f:
179
- f.write(self.json(indent=4))
179
+ f.write(self.model_dump_json(indent=4))
180
180
 
181
181
  def _write_vars_to_file(self, vars: Dict[str, Any]) -> None:
182
182
  """Write variables to the variables file.
zenml/stack/flavor.py CHANGED
@@ -13,7 +13,6 @@
13
13
  # permissions and limitations under the License.
14
14
  """Base ZenML Flavor implementation."""
15
15
 
16
- import json
17
16
  from abc import abstractmethod
18
17
  from typing import Any, Dict, Optional, Type, cast
19
18
 
@@ -102,10 +101,7 @@ class Flavor:
102
101
  Returns:
103
102
  The config schema.
104
103
  """
105
- config_schema: Dict[str, Any] = json.loads(
106
- self.config_class.schema_json()
107
- )
108
- return config_schema
104
+ return self.config_class.model_json_schema()
109
105
 
110
106
  @property
111
107
  def service_connector_requirements(
@@ -209,7 +205,7 @@ class Flavor:
209
205
  is_latest = True
210
206
 
211
207
  if is_latest:
212
- base = "https://docs.zenml.io/"
208
+ base = "https://docs.zenml.io"
213
209
  else:
214
210
  base = f"https://zenml-io.gitbook.io/zenml-legacy-documentation/v/{__version__}"
215
211
  return f"{base}/stack-components/{component_type}/{name}"
@@ -122,8 +122,8 @@ class FlavorRegistry:
122
122
  if len(existing_flavor) == 0:
123
123
  store.create_flavor(flavor_request_model)
124
124
  else:
125
- flavor_update_model = FlavorUpdate.parse_obj(
126
- flavor_request_model
125
+ flavor_update_model = FlavorUpdate.model_validate(
126
+ dict(flavor_request_model)
127
127
  )
128
128
  store.update_flavor(
129
129
  existing_flavor[0].id, flavor_update_model
@@ -154,8 +154,8 @@ class FlavorRegistry:
154
154
  if len(existing_flavor) == 0:
155
155
  store.create_flavor(flavor_request_model)
156
156
  else:
157
- flavor_update_model = FlavorUpdate.parse_obj(
158
- flavor_request_model
157
+ flavor_update_model = FlavorUpdate.model_validate(
158
+ dict(flavor_request_model)
159
159
  )
160
160
  store.update_flavor(
161
161
  existing_flavor[0].id, flavor_update_model
zenml/stack/stack.py CHANGED
@@ -15,6 +15,7 @@
15
15
 
16
16
  import functools
17
17
  import itertools
18
+ import json
18
19
  import os
19
20
  from datetime import datetime
20
21
  from typing import (
@@ -481,7 +482,9 @@ class Stack:
481
482
  A dictionary containing the stack components.
482
483
  """
483
484
  component_dict = {
484
- component_type.value: component.config.json(sort_keys=True)
485
+ component_type.value: json.dumps(
486
+ component.config.model_dump(mode="json"), sort_keys=True
487
+ )
485
488
  for component_type, component in self.components.items()
486
489
  }
487
490
  component_dict.update({"name": self.name})