zenml-nightly 0.61.0.dev20240712__py3-none-any.whl → 0.62.0.dev20240726__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. README.md +2 -2
  2. RELEASE_NOTES.md +40 -0
  3. zenml/VERSION +1 -1
  4. zenml/__init__.py +2 -0
  5. zenml/cli/stack.py +114 -248
  6. zenml/cli/stack_components.py +5 -3
  7. zenml/constants.py +3 -0
  8. zenml/enums.py +16 -0
  9. zenml/integrations/__init__.py +1 -0
  10. zenml/integrations/azure/__init__.py +2 -2
  11. zenml/integrations/constants.py +1 -0
  12. zenml/integrations/databricks/__init__.py +52 -0
  13. zenml/integrations/databricks/flavors/__init__.py +30 -0
  14. zenml/integrations/databricks/flavors/databricks_model_deployer_flavor.py +118 -0
  15. zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +147 -0
  16. zenml/integrations/databricks/model_deployers/__init__.py +20 -0
  17. zenml/integrations/databricks/model_deployers/databricks_model_deployer.py +249 -0
  18. zenml/integrations/databricks/orchestrators/__init__.py +20 -0
  19. zenml/integrations/databricks/orchestrators/databricks_orchestrator.py +497 -0
  20. zenml/integrations/databricks/orchestrators/databricks_orchestrator_entrypoint_config.py +97 -0
  21. zenml/integrations/databricks/services/__init__.py +19 -0
  22. zenml/integrations/databricks/services/databricks_deployment.py +407 -0
  23. zenml/integrations/databricks/utils/__init__.py +14 -0
  24. zenml/integrations/databricks/utils/databricks_utils.py +87 -0
  25. zenml/integrations/great_expectations/data_validators/ge_data_validator.py +12 -8
  26. zenml/integrations/huggingface/materializers/huggingface_datasets_materializer.py +88 -3
  27. zenml/integrations/huggingface/steps/accelerate_runner.py +1 -7
  28. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +1 -13
  29. zenml/integrations/kubernetes/orchestrators/manifest_utils.py +22 -4
  30. zenml/integrations/kubernetes/pod_settings.py +4 -0
  31. zenml/integrations/lightgbm/__init__.py +1 -0
  32. zenml/integrations/mlflow/__init__.py +1 -1
  33. zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +6 -2
  34. zenml/integrations/mlflow/services/mlflow_deployment.py +1 -1
  35. zenml/integrations/skypilot_azure/__init__.py +1 -3
  36. zenml/integrations/skypilot_lambda/__init__.py +1 -1
  37. zenml/logging/step_logging.py +34 -35
  38. zenml/materializers/built_in_materializer.py +1 -1
  39. zenml/materializers/cloudpickle_materializer.py +1 -1
  40. zenml/model/model.py +1 -1
  41. zenml/models/v2/core/component.py +29 -0
  42. zenml/models/v2/core/server_settings.py +0 -20
  43. zenml/models/v2/misc/full_stack.py +32 -0
  44. zenml/models/v2/misc/stack_deployment.py +5 -0
  45. zenml/new/pipelines/run_utils.py +1 -1
  46. zenml/orchestrators/__init__.py +4 -0
  47. zenml/orchestrators/step_launcher.py +1 -0
  48. zenml/orchestrators/wheeled_orchestrator.py +147 -0
  49. zenml/service_connectors/service_connector_utils.py +408 -0
  50. zenml/stack_deployments/azure_stack_deployment.py +179 -0
  51. zenml/stack_deployments/gcp_stack_deployment.py +13 -4
  52. zenml/stack_deployments/stack_deployment.py +10 -0
  53. zenml/stack_deployments/utils.py +4 -0
  54. zenml/steps/base_step.py +7 -5
  55. zenml/utils/function_utils.py +1 -1
  56. zenml/utils/pipeline_docker_image_builder.py +8 -0
  57. zenml/utils/source_utils.py +4 -1
  58. zenml/zen_server/dashboard/assets/{404-DpJaNHKF.js → 404-B_YdvmwS.js} +1 -1
  59. zenml/zen_server/dashboard/assets/{@reactflow-DJfzkHO1.js → @reactflow-l_1hUr1S.js} +1 -1
  60. zenml/zen_server/dashboard/assets/{AwarenessChannel-BYDLT2xC.js → AwarenessChannel-CFg5iX4Z.js} +1 -1
  61. zenml/zen_server/dashboard/assets/{CodeSnippet-BkOuRmyq.js → CodeSnippet-Dvkx_82E.js} +1 -1
  62. zenml/zen_server/dashboard/assets/CollapsibleCard-opiuBHHc.js +1 -0
  63. zenml/zen_server/dashboard/assets/{Commands-ZvWR1BRs.js → Commands-DoN1xrEq.js} +1 -1
  64. zenml/zen_server/dashboard/assets/{CopyButton-DVwLkafa.js → CopyButton-Cr7xYEPb.js} +1 -1
  65. zenml/zen_server/dashboard/assets/{CsvVizualization-C2IiqX4I.js → CsvVizualization-Ck-nZ43m.js} +3 -3
  66. zenml/zen_server/dashboard/assets/{Error-CqX0VqW_.js → Error-kLtljEOM.js} +1 -1
  67. zenml/zen_server/dashboard/assets/{ExecutionStatus-BoLUXR9t.js → ExecutionStatus-DguLLgTK.js} +1 -1
  68. zenml/zen_server/dashboard/assets/{Helpbox-LFydyVwh.js → Helpbox-BXUMP21n.js} +1 -1
  69. zenml/zen_server/dashboard/assets/{Infobox-DnENC0sh.js → Infobox-DSt0O-dm.js} +1 -1
  70. zenml/zen_server/dashboard/assets/{InlineAvatar-CbJtYr0t.js → InlineAvatar-xsrsIGE-.js} +1 -1
  71. zenml/zen_server/dashboard/assets/Pagination-C6X-mifw.js +1 -0
  72. zenml/zen_server/dashboard/assets/{SetPassword-BYBdbQDo.js → SetPassword-BXGTWiwj.js} +1 -1
  73. zenml/zen_server/dashboard/assets/{SuccessStep-Nx743hll.js → SuccessStep-DZC60t0x.js} +1 -1
  74. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DF9gSzE0.js → UpdatePasswordSchemas-DGvwFWO1.js} +1 -1
  75. zenml/zen_server/dashboard/assets/{chevron-right-double-BiEMg7rd.js → chevron-right-double-CZBOf6JM.js} +1 -1
  76. zenml/zen_server/dashboard/assets/cloud-only-C_yFCAkP.js +1 -0
  77. zenml/zen_server/dashboard/assets/index-BczVOqUf.js +55 -0
  78. zenml/zen_server/dashboard/assets/index-EpMIKgrI.css +1 -0
  79. zenml/zen_server/dashboard/assets/{login-mutation-BUnVASxp.js → login-mutation-CrHrndTI.js} +1 -1
  80. zenml/zen_server/dashboard/assets/logs-D8k8BVFf.js +1 -0
  81. zenml/zen_server/dashboard/assets/{not-found-B4VnX8gK.js → not-found-DYa4pC-C.js} +1 -1
  82. zenml/zen_server/dashboard/assets/{package-CsUhPmou.js → package-B3fWP-Dh.js} +1 -1
  83. zenml/zen_server/dashboard/assets/page-1h_sD1jz.js +1 -0
  84. zenml/zen_server/dashboard/assets/{page-Sxn82W-5.js → page-1iL8aMqs.js} +1 -1
  85. zenml/zen_server/dashboard/assets/{page-DMOYZppS.js → page-2grKx_MY.js} +1 -1
  86. zenml/zen_server/dashboard/assets/page-5NCOHOsy.js +1 -0
  87. zenml/zen_server/dashboard/assets/{page-JyfeDUfu.js → page-8a4UMKXZ.js} +1 -1
  88. zenml/zen_server/dashboard/assets/{page-Bx6o0ARS.js → page-B6h3iaHJ.js} +1 -1
  89. zenml/zen_server/dashboard/assets/page-BDns21Iz.js +1 -0
  90. zenml/zen_server/dashboard/assets/{page-3efNCDeb.js → page-BhgCDInH.js} +2 -2
  91. zenml/zen_server/dashboard/assets/{page-DKlIdAe5.js → page-Bi-wtWiO.js} +2 -2
  92. zenml/zen_server/dashboard/assets/{page-7zTHbhhI.js → page-BkeAAYwp.js} +1 -1
  93. zenml/zen_server/dashboard/assets/{page-CRTJ0UuR.js → page-BkuQDIf-.js} +1 -1
  94. zenml/zen_server/dashboard/assets/page-BnaevhnB.js +1 -0
  95. zenml/zen_server/dashboard/assets/{page-BEs6jK71.js → page-Bq0YxkLV.js} +1 -1
  96. zenml/zen_server/dashboard/assets/page-Bs2F4eoD.js +2 -0
  97. zenml/zen_server/dashboard/assets/{page-CUZIGO-3.js → page-C6-UGEbH.js} +1 -1
  98. zenml/zen_server/dashboard/assets/{page-Xu8JEjSU.js → page-CCNRIt_f.js} +1 -1
  99. zenml/zen_server/dashboard/assets/{page-DvCvroOM.js → page-CHNxpz3n.js} +1 -1
  100. zenml/zen_server/dashboard/assets/{page-BpSqIf4B.js → page-DgorQFqi.js} +1 -1
  101. zenml/zen_server/dashboard/assets/page-K8ebxVIs.js +1 -0
  102. zenml/zen_server/dashboard/assets/{page-Cx67M0QT.js → page-MFQyIJd3.js} +1 -1
  103. zenml/zen_server/dashboard/assets/page-TgCF0P_U.js +1 -0
  104. zenml/zen_server/dashboard/assets/page-ZnCEe-eK.js +9 -0
  105. zenml/zen_server/dashboard/assets/{page-Dc_7KMQE.js → page-uA5prJGY.js} +1 -1
  106. zenml/zen_server/dashboard/assets/persist-D7HJNBWx.js +1 -0
  107. zenml/zen_server/dashboard/assets/plus-C8WOyCzt.js +1 -0
  108. zenml/zen_server/dashboard/assets/stack-detail-query-Cficsl6d.js +1 -0
  109. zenml/zen_server/dashboard/assets/update-server-settings-mutation-7d8xi1tS.js +1 -0
  110. zenml/zen_server/dashboard/assets/{url-DuQMeqYA.js → url-D7mAQGUM.js} +1 -1
  111. zenml/zen_server/dashboard/index.html +4 -4
  112. zenml/zen_server/dashboard_legacy/asset-manifest.json +4 -4
  113. zenml/zen_server/dashboard_legacy/index.html +1 -1
  114. zenml/zen_server/dashboard_legacy/{precache-manifest.c8c57fb0d2132b1d3c2119e776b7dfb3.js → precache-manifest.12246c7548e71e2c4438e496360de80c.js} +4 -4
  115. zenml/zen_server/dashboard_legacy/service-worker.js +1 -1
  116. zenml/zen_server/dashboard_legacy/static/js/main.3b27024b.chunk.js +2 -0
  117. zenml/zen_server/dashboard_legacy/static/js/{main.382439a7.chunk.js.map → main.3b27024b.chunk.js.map} +1 -1
  118. zenml/zen_server/deploy/helm/Chart.yaml +1 -1
  119. zenml/zen_server/deploy/helm/README.md +2 -2
  120. zenml/zen_server/rbac/utils.py +10 -2
  121. zenml/zen_server/routers/devices_endpoints.py +4 -1
  122. zenml/zen_server/routers/server_endpoints.py +29 -2
  123. zenml/zen_server/routers/service_connectors_endpoints.py +57 -0
  124. zenml/zen_server/routers/steps_endpoints.py +2 -1
  125. zenml/zen_stores/migrations/versions/0.62.0_release.py +23 -0
  126. zenml/zen_stores/migrations/versions/b4fca5241eea_migrate_onboarding_state.py +167 -0
  127. zenml/zen_stores/rest_zen_store.py +4 -0
  128. zenml/zen_stores/schemas/component_schemas.py +14 -0
  129. zenml/zen_stores/schemas/server_settings_schemas.py +23 -11
  130. zenml/zen_stores/sql_zen_store.py +151 -1
  131. {zenml_nightly-0.61.0.dev20240712.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/METADATA +5 -5
  132. {zenml_nightly-0.61.0.dev20240712.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/RECORD +135 -115
  133. zenml/zen_server/dashboard/assets/Pagination-DEbVUupy.js +0 -1
  134. zenml/zen_server/dashboard/assets/chevron-down-D_ZlKMqH.js +0 -1
  135. zenml/zen_server/dashboard/assets/cloud-only-DVbIeckv.js +0 -1
  136. zenml/zen_server/dashboard/assets/index-C_CrU4vI.js +0 -1
  137. zenml/zen_server/dashboard/assets/index-DK1ynKjA.js +0 -55
  138. zenml/zen_server/dashboard/assets/index-inApY3KQ.css +0 -1
  139. zenml/zen_server/dashboard/assets/page-C43QGHTt.js +0 -9
  140. zenml/zen_server/dashboard/assets/page-CR0OG7ss.js +0 -1
  141. zenml/zen_server/dashboard/assets/page-CaopxiU1.js +0 -1
  142. zenml/zen_server/dashboard/assets/page-D7Z399xy.js +0 -1
  143. zenml/zen_server/dashboard/assets/page-D93kd7Xj.js +0 -1
  144. zenml/zen_server/dashboard/assets/page-DMsSn3dv.js +0 -2
  145. zenml/zen_server/dashboard/assets/page-Hus2pr9T.js +0 -1
  146. zenml/zen_server/dashboard/assets/page-TKXERe16.js +0 -1
  147. zenml/zen_server/dashboard/assets/plus-DOeLmm7C.js +0 -1
  148. zenml/zen_server/dashboard/assets/update-server-settings-mutation-CR8e3Sir.js +0 -1
  149. zenml/zen_server/dashboard_legacy/static/js/main.382439a7.chunk.js +0 -2
  150. {zenml_nightly-0.61.0.dev20240712.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/LICENSE +0 -0
  151. {zenml_nightly-0.61.0.dev20240712.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/WHEEL +0 -0
  152. {zenml_nightly-0.61.0.dev20240712.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,179 @@
1
+ # Copyright (c) ZenML GmbH 2024. All Rights Reserved.
2
+
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at:
6
+
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12
+ # or implied. See the License for the specific language governing
13
+ # permissions and limitations under the License.
14
+ """Functionality to deploy a ZenML stack to Azure."""
15
+
16
+ import re
17
+ from typing import ClassVar, Dict, List
18
+
19
+ from zenml.enums import StackDeploymentProvider
20
+ from zenml.stack_deployments.stack_deployment import ZenMLCloudStackDeployment
21
+
22
+
23
+ # TODO: this class just implements the regions list, and is not suitable for other
24
+ # deployment tasks.
25
+ class AZUREZenMLCloudStackDeployment(ZenMLCloudStackDeployment):
26
+ """Azure ZenML Cloud Stack Deployment."""
27
+
28
+ provider: ClassVar[StackDeploymentProvider] = StackDeploymentProvider.AZURE
29
+
30
+ @classmethod
31
+ def description(cls) -> str:
32
+ """Return a description of the ZenML Cloud Stack Deployment.
33
+
34
+ This will be displayed when the user is prompted to deploy
35
+ the ZenML stack.
36
+
37
+ Returns:
38
+ A MarkDown description of the ZenML Cloud Stack Deployment.
39
+ """
40
+ # TODO: Implement this
41
+ return ""
42
+
43
+ @classmethod
44
+ def instructions(cls) -> str:
45
+ """Return instructions on how to deploy the ZenML stack to the specified cloud provider.
46
+
47
+ This will be displayed before the user is prompted to deploy the ZenML
48
+ stack.
49
+
50
+ Returns:
51
+ MarkDown instructions on how to deploy the ZenML stack to the
52
+ specified cloud provider.
53
+ """
54
+ # TODO: Implement this
55
+ return ""
56
+
57
+ @classmethod
58
+ def post_deploy_instructions(cls) -> str:
59
+ """Return instructions on what to do after the deployment is complete.
60
+
61
+ This will be displayed after the deployment is complete.
62
+
63
+ Returns:
64
+ MarkDown instructions on what to do after the deployment is
65
+ complete.
66
+ """
67
+ # TODO: Implement this
68
+ return ""
69
+
70
+ @classmethod
71
+ def integrations(cls) -> List[str]:
72
+ """Return the ZenML integrations required for the stack.
73
+
74
+ Returns:
75
+ The list of ZenML integrations that need to be installed for the
76
+ stack to be usable.
77
+ """
78
+ return ["azure"]
79
+
80
+ @classmethod
81
+ def permissions(cls) -> Dict[str, List[str]]:
82
+ """Return the permissions granted to ZenML to access the cloud resources.
83
+
84
+ Returns:
85
+ The permissions granted to ZenML to access the cloud resources, as
86
+ a dictionary grouping permissions by resource.
87
+ """
88
+ # TODO: Implement this
89
+ return {}
90
+
91
+ @classmethod
92
+ def locations(cls) -> Dict[str, str]:
93
+ """Return the locations where the ZenML stack can be deployed.
94
+
95
+ Returns:
96
+ The regions where the ZenML stack can be deployed as a map of region
97
+ names to region descriptions.
98
+ """
99
+ # Based on `az account list-locations -o table` on 16.07.2024
100
+ return {
101
+ "(US) East US": "eastus",
102
+ "(US) South Central US": "southcentralus",
103
+ "(US) West US 2": "westus2",
104
+ "(US) West US 3": "westus3",
105
+ "(Asia Pacific) Australia East": "australiaeast",
106
+ "(Asia Pacific) Southeast Asia": "southeastasia",
107
+ "(Europe) North Europe": "northeurope",
108
+ "(Europe) Sweden Central": "swedencentral",
109
+ "(Europe) UK South": "uksouth",
110
+ "(Europe) West Europe": "westeurope",
111
+ "(US) Central US": "centralus",
112
+ "(Africa) South Africa North": "southafricanorth",
113
+ "(Asia Pacific) Central India": "centralindia",
114
+ "(Asia Pacific) East Asia": "eastasia",
115
+ "(Asia Pacific) Japan East": "japaneast",
116
+ "(Asia Pacific) Korea Central": "koreacentral",
117
+ "(Canada) Canada Central": "canadacentral",
118
+ "(Europe) France Central": "francecentral",
119
+ "(Europe) Germany West Central": "germanywestcentral",
120
+ "(Europe) Italy North": "italynorth",
121
+ "(Europe) Norway East": "norwayeast",
122
+ "(Europe) Poland Central": "polandcentral",
123
+ "(Europe) Spain Central": "spaincentral",
124
+ "(Europe) Switzerland North": "switzerlandnorth",
125
+ "(Mexico) Mexico Central": "mexicocentral",
126
+ "(Middle East) UAE North": "uaenorth",
127
+ "(South America) Brazil South": "brazilsouth",
128
+ "(Middle East) Israel Central": "israelcentral",
129
+ "(Middle East) Qatar Central": "qatarcentral",
130
+ "(US) Central US (Stage)": "centralusstage",
131
+ "(US) East US (Stage)": "eastusstage",
132
+ "(US) East US 2 (Stage)": "eastus2stage",
133
+ "(US) North Central US (Stage)": "northcentralusstage",
134
+ "(US) South Central US (Stage)": "southcentralusstage",
135
+ "(US) West US (Stage)": "westusstage",
136
+ "(US) West US 2 (Stage)": "westus2stage",
137
+ "(Asia Pacific) East Asia (Stage)": "eastasiastage",
138
+ "(Asia Pacific) Southeast Asia (Stage)": "southeastasiastage",
139
+ "(South America) Brazil US": "brazilus",
140
+ "(US) East US 2": "eastus2",
141
+ "(US) East US STG": "eastusstg",
142
+ "(US) North Central US": "northcentralus",
143
+ "(US) West US": "westus",
144
+ "(Asia Pacific) Japan West": "japanwest",
145
+ "(Asia Pacific) Jio India West": "jioindiawest",
146
+ "(US) Central US EUAP": "centraluseuap",
147
+ "(US) East US 2 EUAP": "eastus2euap",
148
+ "(US) West Central US": "westcentralus",
149
+ "(Africa) South Africa West": "southafricawest",
150
+ "(Asia Pacific) Australia Central": "australiacentral",
151
+ "(Asia Pacific) Australia Central 2": "australiacentral2",
152
+ "(Asia Pacific) Australia Southeast": "australiasoutheast",
153
+ "(Asia Pacific) Jio India Central": "jioindiacentral",
154
+ "(Asia Pacific) Korea South": "koreasouth",
155
+ "(Asia Pacific) South India": "southindia",
156
+ "(Asia Pacific) West India": "westindia",
157
+ "(Canada) Canada East": "canadaeast",
158
+ "(Europe) France South": "francesouth",
159
+ "(Europe) Germany North": "germanynorth",
160
+ "(Europe) Norway West": "norwaywest",
161
+ "(Europe) Switzerland West": "switzerlandwest",
162
+ "(Europe) UK West": "ukwest",
163
+ "(Middle East) UAE Central": "uaecentral",
164
+ "(South America) Brazil Southeast": "brazilsoutheast",
165
+ }
166
+
167
+ @classmethod
168
+ def skypilot_default_regions(cls) -> Dict[str, str]:
169
+ """Returns the regions supported by default for the Skypilot.
170
+
171
+ Returns:
172
+ The regions supported by default for the Skypilot.
173
+ """
174
+ matcher = re.compile(r".*us\d*( |$)")
175
+ return {
176
+ k: v
177
+ for k, v in cls.locations().items()
178
+ if "(US)" in k and matcher.match(v)
179
+ }
@@ -13,6 +13,7 @@
13
13
  # permissions and limitations under the License.
14
14
  """Functionality to deploy a ZenML stack to GCP."""
15
15
 
16
+ import re
16
17
  from typing import ClassVar, Dict, List
17
18
 
18
19
  from zenml.enums import StackDeploymentProvider
@@ -208,6 +209,16 @@ GCP project and to clean up the resources created by the stack by using
208
209
  "US West (Las Vegas)": "us-west4",
209
210
  }
210
211
 
212
+ @classmethod
213
+ def skypilot_default_regions(cls) -> Dict[str, str]:
214
+ """Returns the regions supported by default for the Skypilot.
215
+
216
+ Returns:
217
+ The regions supported by default for the Skypilot.
218
+ """
219
+ matcher = re.compile(r"us-.*")
220
+ return {k: v for k, v in cls.locations().items() if matcher.match(v)}
221
+
211
222
  def get_deployment_config(
212
223
  self,
213
224
  ) -> StackDeploymentConfig:
@@ -236,8 +247,6 @@ GCP project and to clean up the resources created by the stack by using
236
247
  cloudshell_open_in_editor="gcp-gar-gcs-vertex.jinja,gcp-gar-gcs-vertex-deploy.sh",
237
248
  cloudshell_tutorial="gcp-gar-gcs-vertex.md",
238
249
  ephemeral="true",
239
- # TODO: remove this before the branch is merged
240
- cloudshell_git_branch="feature/prd-482-gcp-stack-deployment",
241
250
  )
242
251
  # Encode the parameters as URL query parameters
243
252
  query_params = "&".join([f"{k}={v}" for k, v in params.items()])
@@ -251,8 +260,8 @@ ZENML_STACK_NAME={self.stack_name}
251
260
  ZENML_STACK_REGION={self.location or "europe-west3"}
252
261
  ZENML_SERVER_URL={self.zenml_server_url}
253
262
  ZENML_SERVER_API_TOKEN={self.zenml_server_api_token}
254
- ### END CONFIGURATION ###
255
- """
263
+ ### END CONFIGURATION ###"""
264
+
256
265
  return StackDeploymentConfig(
257
266
  deployment_url=url,
258
267
  deployment_url_text="GCP Cloud Shell Console",
@@ -105,6 +105,15 @@ class ZenMLCloudStackDeployment(BaseModel):
105
105
  names to region descriptions.
106
106
  """
107
107
 
108
+ @classmethod
109
+ def skypilot_default_regions(cls) -> Dict[str, str]:
110
+ """Returns the regions supported by default for the Skypilot.
111
+
112
+ Returns:
113
+ The regions supported by default for the Skypilot.
114
+ """
115
+ return cls.locations()
116
+
108
117
  @classmethod
109
118
  def get_deployment_info(cls) -> StackDeploymentInfo:
110
119
  """Return information about the ZenML Cloud Stack Deployment.
@@ -120,6 +129,7 @@ class ZenMLCloudStackDeployment(BaseModel):
120
129
  integrations=cls.integrations(),
121
130
  permissions=cls.permissions(),
122
131
  locations=cls.locations(),
132
+ skypilot_default_regions=cls.skypilot_default_regions(),
123
133
  )
124
134
 
125
135
  @abstractmethod
@@ -19,6 +19,9 @@ from zenml.enums import StackDeploymentProvider
19
19
  from zenml.stack_deployments.aws_stack_deployment import (
20
20
  AWSZenMLCloudStackDeployment,
21
21
  )
22
+ from zenml.stack_deployments.azure_stack_deployment import (
23
+ AZUREZenMLCloudStackDeployment,
24
+ )
22
25
  from zenml.stack_deployments.gcp_stack_deployment import (
23
26
  GCPZenMLCloudStackDeployment,
24
27
  )
@@ -27,6 +30,7 @@ from zenml.stack_deployments.stack_deployment import ZenMLCloudStackDeployment
27
30
  STACK_DEPLOYMENT_PROVIDERS = {
28
31
  StackDeploymentProvider.AWS: AWSZenMLCloudStackDeployment,
29
32
  StackDeploymentProvider.GCP: GCPZenMLCloudStackDeployment,
33
+ StackDeploymentProvider.AZURE: AZUREZenMLCloudStackDeployment,
30
34
  }
31
35
 
32
36
 
zenml/steps/base_step.py CHANGED
@@ -479,7 +479,7 @@ class BaseStep(metaclass=BaseStepMeta):
479
479
  bound_args = signature.bind_partial(*args, **kwargs)
480
480
  except TypeError as e:
481
481
  raise StepInterfaceError(
482
- f"Wrong arguments when calling step `{self.name}`: {e}"
482
+ f"Wrong arguments when calling step '{self.name}': {e}"
483
483
  ) from e
484
484
 
485
485
  artifacts = {}
@@ -980,7 +980,7 @@ class BaseStep(metaclass=BaseStepMeta):
980
980
  )
981
981
  if conflicting_parameters:
982
982
  is_plural = "s" if len(conflicting_parameters) > 1 else ""
983
- msg = f"Configured parameter{is_plural} for the step `{self.name}` conflict{'' if not is_plural else 's'} with parameter{is_plural} passed in runtime:\n"
983
+ msg = f"Configured parameter{is_plural} for the step '{self.name}' conflict{'' if not is_plural else 's'} with parameter{is_plural} passed in runtime:\n"
984
984
  for key, values in conflicting_parameters.items():
985
985
  msg += (
986
986
  f"`{key}`: config=`{values[0]}` | runtime=`{values[1]}`\n"
@@ -1023,7 +1023,7 @@ To avoid this consider setting step parameters only in one place (config or code
1023
1023
  if output_name not in allowed_output_names:
1024
1024
  raise StepInterfaceError(
1025
1025
  f"Got unexpected materializers for non-existent "
1026
- f"output '{output_name}' in step `{self.name}`. "
1026
+ f"output '{output_name}' in step '{self.name}'. "
1027
1027
  f"Only materializers for the outputs "
1028
1028
  f"{allowed_output_names} of this step can"
1029
1029
  f" be registered."
@@ -1036,7 +1036,7 @@ To avoid this consider setting step parameters only in one place (config or code
1036
1036
  ):
1037
1037
  raise StepInterfaceError(
1038
1038
  f"Materializer source `{source}` "
1039
- f"for output '{output_name}' of step `{self.name}` "
1039
+ f"for output '{output_name}' of step '{self.name}' "
1040
1040
  "does not resolve to a `BaseMaterializer` subclass."
1041
1041
  )
1042
1042
 
@@ -1070,7 +1070,9 @@ To avoid this consider setting step parameters only in one place (config or code
1070
1070
  or key in client_lazy_loaders
1071
1071
  ):
1072
1072
  continue
1073
- raise StepInterfaceError(f"Missing entrypoint input {key}.")
1073
+ raise StepInterfaceError(
1074
+ f"Missing entrypoint input '{key}' in step '{self.name}'."
1075
+ )
1074
1076
 
1075
1077
  def _finalize_configuration(
1076
1078
  self,
@@ -107,7 +107,7 @@ def _is_valid_optional_arg(arg_type: Any) -> bool:
107
107
  if (
108
108
  args[0] not in _ALLOWED_TYPES
109
109
  and not _is_valid_collection_arg(args[0])
110
- ) or args[1] != type(None):
110
+ ) or args[1] is not type(None):
111
111
  return False
112
112
  return True
113
113
  return False
@@ -297,6 +297,14 @@ class PipelineDockerImageBuilder:
297
297
  if docker_settings.install_stack_requirements:
298
298
  apt_packages += stack.apt_packages
299
299
 
300
+ # include apt packages from all required integrations
301
+ for integration in docker_settings.required_integrations:
302
+ # get the integration
303
+ integration_cls = integration_registry.integrations[
304
+ integration
305
+ ]
306
+ apt_packages += integration_cls.APT_PACKAGES
307
+
300
308
  if apt_packages:
301
309
  logger.info(
302
310
  "Including apt packages: %s",
@@ -38,6 +38,7 @@ from zenml.config.source import (
38
38
  Source,
39
39
  SourceType,
40
40
  )
41
+ from zenml.constants import ENV_ZENML_CUSTOM_SOURCE_ROOT
41
42
  from zenml.environment import Environment
42
43
  from zenml.logger import get_logger
43
44
 
@@ -57,7 +58,9 @@ BuiltinFunctionTypeSource = Source(
57
58
  type=SourceType.BUILTIN,
58
59
  )
59
60
 
60
- _CUSTOM_SOURCE_ROOT: Optional[str] = None
61
+ _CUSTOM_SOURCE_ROOT: Optional[str] = os.getenv(
62
+ ENV_ZENML_CUSTOM_SOURCE_ROOT, None
63
+ )
61
64
 
62
65
 
63
66
  def load(source: Union[Source, str]) -> Any:
@@ -1 +1 @@
1
- import{j as e}from"./@radix-CFOkMR_E.js";import{h as s,r as t}from"./index-DK1ynKjA.js";import{E as r}from"./EmptyState-BMLnFVlB.js";import{H as a}from"./help-bu_DgLKI.js";import{L as o}from"./@react-router-CO-OsFwI.js";import"./@tanstack-DYiOyJUL.js";import"./@reactflow-DJfzkHO1.js";function d(){return e.jsx("div",{className:"flex min-h-screen w-full flex-col",children:e.jsx(r,{icon:e.jsx(a,{className:"h-[120px] w-[120px] fill-neutral-300"}),children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"mb-2 text-display-xs font-semibold",children:"We can't find the page you are looking for"}),e.jsx("p",{className:"text-lg text-theme-text-secondary",children:"You can try typing a different URL or we can bring you back to your Homepage."}),e.jsx("div",{className:"mt-5 flex justify-center",children:e.jsx(s,{size:"md",asChild:!0,children:e.jsx(o,{className:"w-min self-center whitespace-nowrap",to:t.home,children:e.jsx("span",{className:"px-0.5",children:"Go to Home"})})})})]})})})}export{d as default};
1
+ import{j as e}from"./@radix-CFOkMR_E.js";import{h as s,r as t}from"./index-BczVOqUf.js";import{E as r}from"./EmptyState-BMLnFVlB.js";import{H as a}from"./help-bu_DgLKI.js";import{L as o}from"./@react-router-CO-OsFwI.js";import"./@tanstack-DYiOyJUL.js";import"./@reactflow-l_1hUr1S.js";function d(){return e.jsx("div",{className:"flex min-h-screen w-full flex-col",children:e.jsx(r,{icon:e.jsx(a,{className:"h-[120px] w-[120px] fill-neutral-300"}),children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"mb-2 text-display-xs font-semibold",children:"We can't find the page you are looking for"}),e.jsx("p",{className:"text-lg text-theme-text-secondary",children:"You can try typing a different URL or we can bring you back to your Homepage."}),e.jsx("div",{className:"mt-5 flex justify-center",children:e.jsx(s,{size:"md",asChild:!0,children:e.jsx(o,{className:"w-min self-center whitespace-nowrap",to:t.home,children:e.jsx("span",{className:"px-0.5",children:"Go to Home"})})})})]})})})}export{d as default};