zenml-nightly 0.65.0.dev20240906__py3-none-any.whl → 0.66.0.dev20240913__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.
- README.md +1 -1
- RELEASE_NOTES.md +58 -0
- zenml/VERSION +1 -1
- zenml/cli/service_accounts.py +54 -14
- zenml/config/compiler.py +34 -0
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +2 -1
- zenml/integrations/feast/__init__.py +1 -1
- zenml/integrations/tensorflow/materializers/tf_dataset_materializer.py +2 -2
- zenml/integrations/wandb/experiment_trackers/wandb_experiment_tracker.py +1 -1
- zenml/stack/stack_component.py +50 -17
- zenml/utils/settings_utils.py +1 -1
- zenml/zen_server/dashboard/assets/{404-nKxQ4QDX.js → 404-iO8vpun1.js} +1 -1
- zenml/zen_server/dashboard/assets/{@reactflow-IuMOnBUC.js → @reactflow-B6kq9fJZ.js} +1 -1
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-BXeSvmMY.js +1 -0
- zenml/zen_server/dashboard/assets/{CodeSnippet-i_WEOWw9.js → CodeSnippet-DNWdQmbo.js} +2 -2
- zenml/zen_server/dashboard/assets/CollapsibleCard-B2OVjWYE.js +1 -0
- zenml/zen_server/dashboard/assets/{Commands-m9HMl-eh.js → Commands-DsoaVElZ.js} +1 -1
- zenml/zen_server/dashboard/assets/CopyButton-BqE_-PHO.js +2 -0
- zenml/zen_server/dashboard/assets/{CsvVizualization-Bbzv7VEL.js → CsvVizualization-Dyasr2jU.js} +6 -6
- zenml/zen_server/dashboard/assets/{DialogItem-B576Svvy.js → DialogItem-Cz1VLRwa.js} +1 -1
- zenml/zen_server/dashboard/assets/EditSecretDialog-Du423_3U.js +1 -0
- zenml/zen_server/dashboard/assets/{Error-QMgFNDTs.js → Error-DorJD_va.js} +1 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-CIfQTutR.js +1 -0
- zenml/zen_server/dashboard/assets/{Helpbox-C96LeSX9.js → Helpbox-CmfvtNeq.js} +1 -1
- zenml/zen_server/dashboard/assets/Infobox-BL9NOS37.js +1 -0
- zenml/zen_server/dashboard/assets/{InlineAvatar-C2ZECnGP.js → InlineAvatar-Ds2ZFHPc.js} +1 -1
- zenml/zen_server/dashboard/assets/Partials-DX-8iEa1.js +1 -0
- zenml/zen_server/dashboard/assets/{ProviderIcon-wA4qBOv1.js → ProviderIcon-BOQJgapd.js} +1 -1
- zenml/zen_server/dashboard/assets/ProviderRadio-BsYBw9YA.js +1 -0
- zenml/zen_server/dashboard/assets/{SearchField-BPNazO4G.js → SearchField-W3GXpLlI.js} +1 -1
- zenml/zen_server/dashboard/assets/{SetPassword-kA6Bi_Kp.js → SetPassword-B-0a8UCj.js} +1 -1
- zenml/zen_server/dashboard/assets/{Tick-DEACFydX.js → Tick-i1DYsVcX.js} +1 -1
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-BKyR7Eqi.js → UpdatePasswordSchemas-C6Zb7ASL.js} +1 -1
- zenml/zen_server/dashboard/assets/UsageReason-CCnzmwS8.js +1 -0
- zenml/zen_server/dashboard/assets/{WizardFooter-sUnbJ70r.js → WizardFooter-BHbO7zOa.js} +1 -1
- zenml/zen_server/dashboard/assets/all-pipeline-runs-query-BBEe6I9-.js +1 -0
- zenml/zen_server/dashboard/assets/{cloud-only-DrdxC8NV.js → cloud-only-BuP4Kt_7.js} +1 -1
- zenml/zen_server/dashboard/assets/codespaces-BitYDX9d.gif +0 -0
- zenml/zen_server/dashboard/assets/create-stack-B2x2d4r1.js +1 -0
- zenml/zen_server/dashboard/assets/{form-schemas-DD4OppNK.js → form-schemas-Bap0f854.js} +1 -1
- zenml/zen_server/dashboard/assets/index-6DYjZgDn.css +1 -0
- zenml/zen_server/dashboard/assets/{index-Davdjm1d.js → index-B9wVwe7u.js} +6 -6
- zenml/zen_server/dashboard/assets/{index-CnqMjIZT.js → index-DFi8BroH.js} +1 -1
- zenml/zen_server/dashboard/assets/link-external-BT2L8hAQ.js +1 -0
- zenml/zen_server/dashboard/assets/{login-mutation-TIWnZoJ7.js → login-mutation-DwxUz8VA.js} +1 -1
- zenml/zen_server/dashboard/assets/{not-found-C_bW_Kkr.js → not-found-D5i9DunU.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BFuJICXM.js +9 -0
- zenml/zen_server/dashboard/assets/{page-Dvr6lpJm.js → page-BiF8hLbO.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BN7n3Dsp.js → page-BitfWsiW.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CDOQLrPC.js +1 -0
- zenml/zen_server/dashboard/assets/page-CEJWu1YO.js +1 -0
- zenml/zen_server/dashboard/assets/page-CIbehp7V.js +1 -0
- zenml/zen_server/dashboard/assets/page-CLiRGfWo.js +1 -0
- zenml/zen_server/dashboard/assets/page-CV44mQn9.js +1 -0
- zenml/zen_server/dashboard/assets/page-CrSdkteO.js +2 -0
- zenml/zen_server/dashboard/assets/page-D5F3DJjm.js +1 -0
- zenml/zen_server/dashboard/assets/page-DE03uZZR.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BxPQz4Q8.js → page-DFCK65G9.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-XReFLy-1.js → page-DGMa3ZQL.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DI-qTWrm.js +1 -0
- zenml/zen_server/dashboard/assets/page-DQGCHKrQ.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BhqIV8mu.js → page-DQdwZZ9x.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DgM-N9RL.js +1 -0
- zenml/zen_server/dashboard/assets/page-Dt8VgzbE.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CDG9uQT9.js → page-J0s8Sq3N.js} +1 -1
- zenml/zen_server/dashboard/assets/page-WCQ659by.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BSkbj719.js → page-bimkItOg.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Dy0EbJQD.js → page-iwoJnwPv.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Bg5X2mLz.js → page-oS4hqS8M.js} +1 -1
- zenml/zen_server/dashboard/assets/page-oSqx9dkH.js +1 -0
- zenml/zen_server/dashboard/assets/page-p3GqEAUW.js +1 -0
- zenml/zen_server/dashboard/assets/page-qvcUVPE-.js +1 -0
- zenml/zen_server/dashboard/assets/{page-HXZtxyWq.js → page-xQG6GmFJ.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-g4uRK-v-.js → persist-mEZN_fgH.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-CnMMI8ls.js → persist-xsYgVtR1.js} +1 -1
- zenml/zen_server/dashboard/assets/{refresh-CtPKdk2G.js → refresh-hfgWPeto.js} +1 -1
- zenml/zen_server/dashboard/assets/{sharedSchema-Dbpe2oAO.js → sharedSchema-BfZcy7aP.js} +2 -2
- zenml/zen_server/dashboard/assets/stack-detail-query-CU4egfhp.js +1 -0
- zenml/zen_server/dashboard/assets/templates-1S_8WeSK.webp +0 -0
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-YhoZKgC9.js → update-server-settings-mutation-DNqmQXDM.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-DNHuFfYx.js → url-DwbuKk1b.js} +1 -1
- zenml/zen_server/dashboard/index.html +4 -4
- zenml/zen_server/dashboard_legacy/asset-manifest.json +4 -4
- zenml/zen_server/dashboard_legacy/index.html +1 -1
- zenml/zen_server/dashboard_legacy/{precache-manifest.123c8e8fafecee40f30294ab26484cf1.js → precache-manifest.290b95d5b43efa3368b3dc63d20c4782.js} +4 -4
- zenml/zen_server/dashboard_legacy/service-worker.js +1 -1
- zenml/zen_server/dashboard_legacy/static/js/{main.a98a73cf.chunk.js → main.840d1bf0.chunk.js} +2 -2
- zenml/zen_server/dashboard_legacy/static/js/{main.a98a73cf.chunk.js.map → main.840d1bf0.chunk.js.map} +1 -1
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_stores/migrations/versions/0.66.0_release.py +23 -0
- {zenml_nightly-0.65.0.dev20240906.dist-info → zenml_nightly-0.66.0.dev20240913.dist-info}/METADATA +3 -3
- {zenml_nightly-0.65.0.dev20240906.dist-info → zenml_nightly-0.66.0.dev20240913.dist-info}/RECORD +96 -92
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-CO2rOw5M.js +0 -1
- zenml/zen_server/dashboard/assets/CollapsibleCard-C9BzoY6q.js +0 -1
- zenml/zen_server/dashboard/assets/CopyButton-BAYaQlWF.js +0 -2
- zenml/zen_server/dashboard/assets/EditSecretDialog-CmY9fiM0.js +0 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-BSQgMpzk.js +0 -1
- zenml/zen_server/dashboard/assets/Infobox-BB7dfbrO.js +0 -1
- zenml/zen_server/dashboard/assets/Partials-RDhJ8Ci7.js +0 -1
- zenml/zen_server/dashboard/assets/ProviderRadio-DkPE6alG.js +0 -1
- zenml/zen_server/dashboard/assets/UsageReason-DbgUeRkI.js +0 -1
- zenml/zen_server/dashboard/assets/create-stack-u6VyIXZP.js +0 -1
- zenml/zen_server/dashboard/assets/index-CsIuf3i6.css +0 -1
- zenml/zen_server/dashboard/assets/page-0eecLRNs.js +0 -1
- zenml/zen_server/dashboard/assets/page-BPFkP_IB.js +0 -1
- zenml/zen_server/dashboard/assets/page-CUOBhxxU.js +0 -1
- zenml/zen_server/dashboard/assets/page-CrjI9mjm.js +0 -1
- zenml/zen_server/dashboard/assets/page-D4J2Oy-I.js +0 -1
- zenml/zen_server/dashboard/assets/page-D5I0-LSs.js +0 -1
- zenml/zen_server/dashboard/assets/page-D7bwpJvV.js +0 -1
- zenml/zen_server/dashboard/assets/page-DCnizFO_.js +0 -9
- zenml/zen_server/dashboard/assets/page-DQBv3t8t.js +0 -1
- zenml/zen_server/dashboard/assets/page-DYNlbmas.js +0 -1
- zenml/zen_server/dashboard/assets/page-DsKroTLH.js +0 -1
- zenml/zen_server/dashboard/assets/page-DsQOL6ZL.js +0 -1
- zenml/zen_server/dashboard/assets/page-DyM2M_wT.js +0 -1
- zenml/zen_server/dashboard/assets/page-OmVfClGH.js +0 -2
- zenml/zen_server/dashboard/assets/page-t1VWIy6W.js +0 -1
- zenml/zen_server/dashboard/assets/page-wPiJkPp6.js +0 -1
- zenml/zen_server/dashboard/assets/page-wQ8_y5mW.js +0 -1
- zenml/zen_server/dashboard/assets/stack-detail-query-fuuoot1D.js +0 -1
- zenml/zen_server/dashboard/assets/terminal-DRIPb4oF.js +0 -1
- {zenml_nightly-0.65.0.dev20240906.dist-info → zenml_nightly-0.66.0.dev20240913.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.65.0.dev20240906.dist-info → zenml_nightly-0.66.0.dev20240913.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.65.0.dev20240906.dist-info → zenml_nightly-0.66.0.dev20240913.dist-info}/entry_points.txt +0 -0
README.md
CHANGED
@@ -327,7 +327,7 @@ the Apache License Version 2.0.
|
|
327
327
|
<a href="https://github.com/zenml-io/zenml-projects">Projects Showcase</a>
|
328
328
|
<br />
|
329
329
|
<br />
|
330
|
-
🎉 Version 0.
|
330
|
+
🎉 Version 0.66.0 is out. Check out the release notes
|
331
331
|
<a href="https://github.com/zenml-io/zenml/releases">here</a>.
|
332
332
|
<br />
|
333
333
|
🖥️ Download our VS Code Extension <a href="https://marketplace.visualstudio.com/items?itemName=ZenML.zenml-vscode">here</a>.
|
RELEASE_NOTES.md
CHANGED
@@ -1,5 +1,63 @@
|
|
1
1
|
<!-- markdown-link-check-disable -->
|
2
2
|
|
3
|
+
# 0.66.0
|
4
|
+
|
5
|
+
## New Features and Improvements
|
6
|
+
|
7
|
+
### Python 3.12 support
|
8
|
+
|
9
|
+
This release adds support for Python 3.12, which means you can now develop your ZenML pipelines
|
10
|
+
with the latest python features.
|
11
|
+
|
12
|
+
### Easier way to specify component settings
|
13
|
+
|
14
|
+
Before this release, settings for stack components had to be specified with both the component type
|
15
|
+
as well as the flavor. We simplified this and it is now possible to specify settings just using the
|
16
|
+
component type:
|
17
|
+
```python
|
18
|
+
# Before
|
19
|
+
@pipeline(settings={"orchestrator.sagemaker": SagemakerOrchestratorSettings(...)})
|
20
|
+
def my_pipeline():
|
21
|
+
...
|
22
|
+
|
23
|
+
# Now
|
24
|
+
@pipeline(settings={"orchestrator": SagemakerOrchestratorSettings(...)})
|
25
|
+
def my_pipeline():
|
26
|
+
...
|
27
|
+
```
|
28
|
+
|
29
|
+
## Breaking changes
|
30
|
+
|
31
|
+
* In order to slim down the ZenML library, we removed the `numpy` and `pandas` libraries as dependencies of ZenML. If your
|
32
|
+
code uses these libraries, you have to make sure they're installed in your local environment as well as the Docker images that
|
33
|
+
get built to run your pipelines (Use `DockerSettings.requirements` or `DockerSettings.required_integrations`).
|
34
|
+
|
35
|
+
## What's Changed
|
36
|
+
* Add 0.65.0 to migration testing by @avishniakov in https://github.com/zenml-io/zenml/pull/2963
|
37
|
+
* Hotfix for release flow by @avishniakov in https://github.com/zenml-io/zenml/pull/2961
|
38
|
+
* Fix the one-click AWS and GCP stack deployments by @stefannica in https://github.com/zenml-io/zenml/pull/2964
|
39
|
+
* Fix wandb mypy error by @strickvl in https://github.com/zenml-io/zenml/pull/2967
|
40
|
+
* Fix accelerate docs for 0.65.0+ by @avishniakov in https://github.com/zenml-io/zenml/pull/2968
|
41
|
+
* Dynamic model version names docs by @avishniakov in https://github.com/zenml-io/zenml/pull/2970
|
42
|
+
* Logging nits by @avishniakov in https://github.com/zenml-io/zenml/pull/2972
|
43
|
+
* Fix excess Azure logging by @strickvl in https://github.com/zenml-io/zenml/pull/2965
|
44
|
+
* Fix typo in docs by @strickvl in https://github.com/zenml-io/zenml/pull/2976
|
45
|
+
* Pass code path to template run by @schustmi in https://github.com/zenml-io/zenml/pull/2973
|
46
|
+
* Prevent extra attributes in component configs by @schustmi in https://github.com/zenml-io/zenml/pull/2978
|
47
|
+
* Dependency cleanup and Python 3.12 support by @bcdurak in https://github.com/zenml-io/zenml/pull/2953
|
48
|
+
* Few nits in docs based on integrations review by @avishniakov in https://github.com/zenml-io/zenml/pull/2983
|
49
|
+
* Update slack alerter docs by @stefannica in https://github.com/zenml-io/zenml/pull/2981
|
50
|
+
* Update Kubeflow orchestrator docs by @stefannica in https://github.com/zenml-io/zenml/pull/2985
|
51
|
+
* Build docker images for python 3.12 by @schustmi in https://github.com/zenml-io/zenml/pull/2988
|
52
|
+
* Allow shortcut keys for component settings by @schustmi in https://github.com/zenml-io/zenml/pull/2957
|
53
|
+
* Remove references to workspaces from docs by @strickvl in https://github.com/zenml-io/zenml/pull/2991
|
54
|
+
* Added some adjustments for colab by @AlexejPenner in https://github.com/zenml-io/zenml/pull/2966
|
55
|
+
* Reverting the installation of `mlstacks` after its new release by @bcdurak in https://github.com/zenml-io/zenml/pull/2980
|
56
|
+
* Small dependency and docs updates by @strickvl in https://github.com/zenml-io/zenml/pull/2982
|
57
|
+
|
58
|
+
|
59
|
+
**Full Changelog**: https://github.com/zenml-io/zenml/compare/0.65.0...0.66.0
|
60
|
+
|
3
61
|
# 0.65.0
|
4
62
|
|
5
63
|
## New Features and Improvements
|
zenml/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.66.0.dev20240913
|
zenml/cli/service_accounts.py
CHANGED
@@ -35,6 +35,7 @@ def _create_api_key(
|
|
35
35
|
name: str,
|
36
36
|
description: Optional[str],
|
37
37
|
set_key: bool = False,
|
38
|
+
output_file: Optional[str] = None,
|
38
39
|
) -> None:
|
39
40
|
"""Create an API key.
|
40
41
|
|
@@ -44,6 +45,7 @@ def _create_api_key(
|
|
44
45
|
name: Name of the API key
|
45
46
|
description: The API key description.
|
46
47
|
set_key: Configure the local client with the generated key.
|
48
|
+
output_file: Output file to write the API key to.
|
47
49
|
"""
|
48
50
|
client = Client()
|
49
51
|
zen_store = client.zen_store
|
@@ -74,13 +76,19 @@ def _create_api_key(
|
|
74
76
|
)
|
75
77
|
return
|
76
78
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
f"
|
82
|
-
|
83
|
-
|
79
|
+
if output_file and api_key.key:
|
80
|
+
with open(output_file, "w") as f:
|
81
|
+
f.write(api_key.key)
|
82
|
+
|
83
|
+
cli_utils.declare(f"Wrote API key value to {output_file}")
|
84
|
+
else:
|
85
|
+
cli_utils.declare(
|
86
|
+
f"The API key value is: '{api_key.key}'\nPlease store it safely as "
|
87
|
+
"it will not be shown again.\nTo configure a ZenML client to use "
|
88
|
+
"this API key, run:\n\n"
|
89
|
+
f"zenml connect --url {zen_store.config.url} --api-key \\\n"
|
90
|
+
f" '{api_key.key}'\n"
|
91
|
+
)
|
84
92
|
|
85
93
|
|
86
94
|
@cli.group(cls=TagGroup, tag=CliCategories.IDENTITY_AND_SECURITY)
|
@@ -111,11 +119,18 @@ def service_account() -> None:
|
|
111
119
|
help=("Configure the local client to use the generated API key."),
|
112
120
|
is_flag=True,
|
113
121
|
)
|
122
|
+
@click.option(
|
123
|
+
"--output-file",
|
124
|
+
type=str,
|
125
|
+
required=False,
|
126
|
+
help="File to write the API key to.",
|
127
|
+
)
|
114
128
|
def create_service_account(
|
115
129
|
service_account_name: str,
|
116
130
|
description: str = "",
|
117
131
|
create_api_key: bool = True,
|
118
132
|
set_api_key: bool = False,
|
133
|
+
output_file: Optional[str] = None,
|
119
134
|
) -> None:
|
120
135
|
"""Create a new service account.
|
121
136
|
|
@@ -124,6 +139,7 @@ def create_service_account(
|
|
124
139
|
description: The API key description.
|
125
140
|
create_api_key: Create an API key for the service account.
|
126
141
|
set_api_key: Configure the local client to use the generated API key.
|
142
|
+
output_file: Output file to write the API key to.
|
127
143
|
"""
|
128
144
|
client = Client()
|
129
145
|
try:
|
@@ -142,6 +158,7 @@ def create_service_account(
|
|
142
158
|
name="default",
|
143
159
|
description="Default API key.",
|
144
160
|
set_key=set_api_key,
|
161
|
+
output_file=output_file,
|
145
162
|
)
|
146
163
|
|
147
164
|
|
@@ -302,12 +319,19 @@ def api_key(
|
|
302
319
|
is_flag=True,
|
303
320
|
help="Configure the local client with the generated key.",
|
304
321
|
)
|
322
|
+
@click.option(
|
323
|
+
"--output-file",
|
324
|
+
type=str,
|
325
|
+
required=False,
|
326
|
+
help="File to write the API key to.",
|
327
|
+
)
|
305
328
|
@click.pass_obj
|
306
329
|
def create_api_key(
|
307
330
|
service_account_name_or_id: str,
|
308
331
|
name: str,
|
309
332
|
description: Optional[str],
|
310
333
|
set_key: bool = False,
|
334
|
+
output_file: Optional[str] = None,
|
311
335
|
) -> None:
|
312
336
|
"""Create an API key.
|
313
337
|
|
@@ -317,12 +341,14 @@ def create_api_key(
|
|
317
341
|
name: Name of the API key
|
318
342
|
description: The API key description.
|
319
343
|
set_key: Configure the local client with the generated key.
|
344
|
+
output_file: Output file to write the API key to.
|
320
345
|
"""
|
321
346
|
_create_api_key(
|
322
347
|
service_account_name_or_id=service_account_name_or_id,
|
323
348
|
name=name,
|
324
349
|
description=description,
|
325
350
|
set_key=set_key,
|
351
|
+
output_file=output_file,
|
326
352
|
)
|
327
353
|
|
328
354
|
|
@@ -450,12 +476,19 @@ def update_api_key(
|
|
450
476
|
is_flag=True,
|
451
477
|
help="Configure the local client with the generated key.",
|
452
478
|
)
|
479
|
+
@click.option(
|
480
|
+
"--output-file",
|
481
|
+
type=str,
|
482
|
+
required=False,
|
483
|
+
help="File to write the API key to.",
|
484
|
+
)
|
453
485
|
@click.pass_obj
|
454
486
|
def rotate_api_key(
|
455
487
|
service_account_name_or_id: str,
|
456
488
|
name_or_id: str,
|
457
489
|
retain: int = 0,
|
458
490
|
set_key: bool = False,
|
491
|
+
output_file: Optional[str] = None,
|
459
492
|
) -> None:
|
460
493
|
"""Rotate an API key.
|
461
494
|
|
@@ -466,6 +499,7 @@ def rotate_api_key(
|
|
466
499
|
retain: Number of minutes for which the previous key is still valid
|
467
500
|
after it has been rotated.
|
468
501
|
set_key: Configure the local client with the newly generated key.
|
502
|
+
output_file: Output file to write the API key to.
|
469
503
|
"""
|
470
504
|
client = Client()
|
471
505
|
zen_store = client.zen_store
|
@@ -499,13 +533,19 @@ def rotate_api_key(
|
|
499
533
|
)
|
500
534
|
return
|
501
535
|
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
f"
|
507
|
-
|
508
|
-
|
536
|
+
if output_file and api_key.key:
|
537
|
+
with open(output_file, "w") as f:
|
538
|
+
f.write(api_key.key)
|
539
|
+
|
540
|
+
cli_utils.declare(f"Wrote API key value to {output_file}")
|
541
|
+
else:
|
542
|
+
cli_utils.declare(
|
543
|
+
f"The new API key value is: '{api_key.key}'\nPlease store it "
|
544
|
+
"safely as it will not be shown again.\nTo configure a ZenML "
|
545
|
+
"client to use this API key, run:\n\n"
|
546
|
+
f"zenml connect --url {zen_store.config.url} --api-key \\\n"
|
547
|
+
f" '{api_key.key}'\n"
|
548
|
+
)
|
509
549
|
|
510
550
|
|
511
551
|
@api_key.command("delete")
|
zenml/config/compiler.py
CHANGED
@@ -93,6 +93,10 @@ class Compiler:
|
|
93
93
|
self._apply_run_configuration(
|
94
94
|
pipeline=pipeline, config=run_configuration
|
95
95
|
)
|
96
|
+
convert_component_shortcut_settings_keys(
|
97
|
+
pipeline.configuration.settings, stack=stack
|
98
|
+
)
|
99
|
+
|
96
100
|
self._apply_stack_default_settings(pipeline=pipeline, stack=stack)
|
97
101
|
if run_configuration.run_name:
|
98
102
|
self._verify_run_name(run_configuration.run_name)
|
@@ -445,6 +449,9 @@ class Compiler:
|
|
445
449
|
step_config, runtime_parameters=invocation.parameters
|
446
450
|
)
|
447
451
|
|
452
|
+
convert_component_shortcut_settings_keys(
|
453
|
+
step.configuration.settings, stack=stack
|
454
|
+
)
|
448
455
|
step_spec = self._get_step_spec(invocation=invocation)
|
449
456
|
step_settings = self._filter_and_validate_settings(
|
450
457
|
settings=step.configuration.settings,
|
@@ -596,3 +603,30 @@ class Compiler:
|
|
596
603
|
additional_spec_args["parameters"] = pipeline._parameters
|
597
604
|
|
598
605
|
return PipelineSpec(steps=step_specs, **additional_spec_args)
|
606
|
+
|
607
|
+
|
608
|
+
def convert_component_shortcut_settings_keys(
|
609
|
+
settings: Dict[str, "BaseSettings"], stack: "Stack"
|
610
|
+
) -> None:
|
611
|
+
"""Convert component shortcut settings keys.
|
612
|
+
|
613
|
+
Args:
|
614
|
+
settings: Dictionary of settings.
|
615
|
+
stack: The stack that the pipeline will run on.
|
616
|
+
|
617
|
+
Raises:
|
618
|
+
ValueError: If stack component settings were defined both using the
|
619
|
+
full and the shortcut key.
|
620
|
+
"""
|
621
|
+
for component in stack.components.values():
|
622
|
+
shortcut_key = str(component.type)
|
623
|
+
if component_settings := settings.pop(shortcut_key, None):
|
624
|
+
key = settings_utils.get_stack_component_setting_key(component)
|
625
|
+
if key in settings:
|
626
|
+
raise ValueError(
|
627
|
+
f"Duplicate settings provided for your {shortcut_key} "
|
628
|
+
f"using the keys {shortcut_key} and {key}. Remove settings "
|
629
|
+
"for one of them to fix this error."
|
630
|
+
)
|
631
|
+
|
632
|
+
settings[key] = component_settings
|
@@ -372,7 +372,8 @@ class SagemakerOrchestrator(ContainerizedOrchestrator):
|
|
372
372
|
# mainly for testing purposes, we wait for the pipeline to finish
|
373
373
|
if self.config.synchronous:
|
374
374
|
logger.info(
|
375
|
-
"Executing synchronously. Waiting for pipeline to finish..."
|
375
|
+
"Executing synchronously. Waiting for pipeline to finish... \n"
|
376
|
+
"At this point you can `Ctrl-C` out without cancelling the execution."
|
376
377
|
)
|
377
378
|
try:
|
378
379
|
pipeline_execution.wait(
|
@@ -31,7 +31,7 @@ class FeastIntegration(Integration):
|
|
31
31
|
|
32
32
|
NAME = FEAST
|
33
33
|
# click is added to keep the feast click version in sync with ZenML's click
|
34
|
-
REQUIREMENTS = ["feast
|
34
|
+
REQUIREMENTS = ["feast", "click>=8.0.1,<8.1.4"]
|
35
35
|
REQUIREMENTS_IGNORED_ON_UNINSTALL = ["click", "pandas"]
|
36
36
|
|
37
37
|
@classmethod
|
@@ -48,7 +48,7 @@ class TensorflowDatasetMaterializer(BaseMaterializer):
|
|
48
48
|
temp_dir = tempfile.mkdtemp()
|
49
49
|
io_utils.copy_dir(self.uri, temp_dir)
|
50
50
|
path = os.path.join(temp_dir, DEFAULT_FILENAME)
|
51
|
-
dataset = tf.data.
|
51
|
+
dataset = tf.data.Dataset.load(path)
|
52
52
|
# Don't delete the temporary directory here as the dataset is lazily
|
53
53
|
# loaded and needs to read it when the object gets used
|
54
54
|
return dataset
|
@@ -62,7 +62,7 @@ class TensorflowDatasetMaterializer(BaseMaterializer):
|
|
62
62
|
temp_dir = tempfile.TemporaryDirectory()
|
63
63
|
path = os.path.join(temp_dir.name, DEFAULT_FILENAME)
|
64
64
|
try:
|
65
|
-
tf.data.
|
65
|
+
tf.data.Dataset.save(
|
66
66
|
dataset, path, compression=None, shard_func=None
|
67
67
|
)
|
68
68
|
io_utils.copy_dir(temp_dir.name, self.uri)
|
@@ -126,7 +126,7 @@ class WandbExperimentTracker(BaseExperimentTracker):
|
|
126
126
|
info: Info about the step that was executed.
|
127
127
|
step_failed: Whether the step failed or not.
|
128
128
|
"""
|
129
|
-
wandb.finish(exit_code=1) if step_failed else wandb.finish()
|
129
|
+
wandb.finish(exit_code=1) if step_failed else wandb.finish()
|
130
130
|
os.environ.pop(WANDB_API_KEY, None)
|
131
131
|
|
132
132
|
def _initialize_wandb(
|
zenml/stack/stack_component.py
CHANGED
@@ -421,23 +421,56 @@ class StackComponent:
|
|
421
421
|
else:
|
422
422
|
user_id = None
|
423
423
|
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
424
|
+
try:
|
425
|
+
return flavor.implementation_class(
|
426
|
+
user=user_id,
|
427
|
+
workspace=component_model.workspace.id,
|
428
|
+
name=component_model.name,
|
429
|
+
id=component_model.id,
|
430
|
+
config=configuration,
|
431
|
+
labels=component_model.labels,
|
432
|
+
flavor=component_model.flavor,
|
433
|
+
type=component_model.type,
|
434
|
+
created=component_model.created,
|
435
|
+
updated=component_model.updated,
|
436
|
+
connector_requirements=flavor.service_connector_requirements,
|
437
|
+
connector=component_model.connector.id
|
438
|
+
if component_model.connector
|
439
|
+
else None,
|
440
|
+
connector_resource_id=component_model.connector_resource_id,
|
441
|
+
)
|
442
|
+
except ImportError as e:
|
443
|
+
from zenml.integrations.registry import integration_registry
|
444
|
+
|
445
|
+
integration_requirements = " ".join(
|
446
|
+
integration_registry.select_integration_requirements(
|
447
|
+
flavor_model.integration
|
448
|
+
)
|
449
|
+
)
|
450
|
+
|
451
|
+
if integration_registry.is_installed(flavor_model.integration):
|
452
|
+
raise ImportError(
|
453
|
+
f"{e}\n\n"
|
454
|
+
f"Something went wrong while trying to import from the "
|
455
|
+
f"`{flavor_model.integration}` integration. Please make "
|
456
|
+
"sure that all its requirements are installed properly by "
|
457
|
+
"reinstalling the integration either through our CLI: "
|
458
|
+
f"`zenml integration install {flavor_model.integration} "
|
459
|
+
"-y` or by manually installing its requirements: "
|
460
|
+
f"`pip install {integration_requirements}`. If the error"
|
461
|
+
"persists, please contact the ZenML team."
|
462
|
+
) from e
|
463
|
+
else:
|
464
|
+
raise ImportError(
|
465
|
+
f"{e}\n\n"
|
466
|
+
f"The `{flavor_model.integration}` integration that you "
|
467
|
+
"are trying to use is not installed in your current "
|
468
|
+
"environment. Please make sure that it is installed by "
|
469
|
+
"either using our CLI: `zenml integration install "
|
470
|
+
f"{flavor_model.integration}` or by manually installing "
|
471
|
+
f"its requirements: `pip install "
|
472
|
+
f"{integration_requirements}`"
|
473
|
+
) from e
|
441
474
|
|
442
475
|
@property
|
443
476
|
def config(self) -> StackComponentConfig:
|
zenml/utils/settings_utils.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
import{j as e}from"./@radix-DnFH_oo1.js";import{
|
1
|
+
import{j as e}from"./@radix-DnFH_oo1.js";import{f as s,r as t}from"./index-B9wVwe7u.js";import{E as r}from"./EmptyState-Cs3DEmso.js";import{H as a}from"./help-CwN931fX.js";import{L as o}from"./@react-router-APVeuk-U.js";import"./@tanstack-QbMbTrh5.js";import"./@reactflow-B6kq9fJZ.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};
|