zenml-nightly 0.70.0.dev20241201__py3-none-any.whl → 0.70.0.dev20241203__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- zenml/VERSION +1 -1
- zenml/cli/__init__.py +4 -4
- zenml/cli/base.py +1 -1
- zenml/cli/pipeline.py +48 -79
- zenml/config/secret_reference_mixin.py +1 -1
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +1 -1
- zenml/integrations/neptune/experiment_trackers/neptune_experiment_tracker.py +7 -5
- zenml/integrations/neptune/experiment_trackers/run_state.py +69 -53
- zenml/integrations/registry.py +2 -2
- zenml/orchestrators/base_orchestrator.py +1 -1
- zenml/service_connectors/service_connector_utils.py +3 -3
- zenml/stack/stack_component.py +1 -1
- zenml/zen_stores/rest_zen_store.py +1 -1
- {zenml_nightly-0.70.0.dev20241201.dist-info → zenml_nightly-0.70.0.dev20241203.dist-info}/METADATA +1 -1
- {zenml_nightly-0.70.0.dev20241201.dist-info → zenml_nightly-0.70.0.dev20241203.dist-info}/RECORD +18 -18
- {zenml_nightly-0.70.0.dev20241201.dist-info → zenml_nightly-0.70.0.dev20241203.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.70.0.dev20241201.dist-info → zenml_nightly-0.70.0.dev20241203.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.70.0.dev20241201.dist-info → zenml_nightly-0.70.0.dev20241203.dist-info}/entry_points.txt +0 -0
zenml/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.70.0.
|
1
|
+
0.70.0.dev20241203
|
zenml/cli/__init__.py
CHANGED
@@ -1987,7 +1987,7 @@ Secrets management
|
|
1987
1987
|
------------------
|
1988
1988
|
|
1989
1989
|
ZenML offers a way to [securely store secrets associated with your other
|
1990
|
-
stack components and infrastructure](https://docs.zenml.io/getting-started/deploying-zenml/
|
1990
|
+
stack components and infrastructure](https://docs.zenml.io/getting-started/deploying-zenml/secret-management).
|
1991
1991
|
A ZenML Secret is a collection or grouping of key-value pairs stored by the
|
1992
1992
|
ZenML secrets store. ZenML Secrets are identified by a unique name which
|
1993
1993
|
allows you to fetch or reference them in your pipelines and stacks.
|
@@ -2083,7 +2083,7 @@ challenge in configuring uninterrupted, secure access to infrastructure
|
|
2083
2083
|
resources. In ZenML, Service Connectors streamline this process by abstracting
|
2084
2084
|
away the complexity of authentication and help you connect your stack to your
|
2085
2085
|
resources. You can find the full docs on the ZenML service connectors
|
2086
|
-
[here](https://docs.zenml.io/how-to/auth-management).
|
2086
|
+
[here](https://docs.zenml.io/how-to/infrastructure-deployment/auth-management).
|
2087
2087
|
|
2088
2088
|
The ZenML CLI features a variety of commands to help you manage your service
|
2089
2089
|
connectors. First of all, to explore all the types of service connectors
|
@@ -2113,7 +2113,7 @@ zenml service-connector register SERVICE_CONNECTOR_NAME \
|
|
2113
2113
|
```
|
2114
2114
|
|
2115
2115
|
For more details on how to create a service connector, please refer to our
|
2116
|
-
[docs](https://docs.zenml.io/how-to/auth-management).
|
2116
|
+
[docs](https://docs.zenml.io/how-to/infrastructure-deployment/auth-management).
|
2117
2117
|
|
2118
2118
|
To check if your service connector is registered properly, you can `verify` it.
|
2119
2119
|
By doing this, you can both check if it is configured correctly and also, you
|
@@ -2367,7 +2367,7 @@ defining the pipeline is not in your current directory, the module path consists
|
|
2367
2367
|
of the full path to the file, separated by dots, e.g.
|
2368
2368
|
`some_directory.some_file.my_pipeline`.
|
2369
2369
|
|
2370
|
-
To [build Docker images for your pipeline](https://docs.zenml.io/how-to/customize-docker-builds)
|
2370
|
+
To [build Docker images for your pipeline](https://docs.zenml.io/how-to/infrastructure-deployment/customize-docker-builds)
|
2371
2371
|
without actually running the pipeline, use:
|
2372
2372
|
|
2373
2373
|
```bash
|
zenml/cli/base.py
CHANGED
@@ -264,7 +264,7 @@ def init(
|
|
264
264
|
f"will only take effect when you're running ZenML from the initialized "
|
265
265
|
f"repository root, or from a subdirectory. For more information on "
|
266
266
|
f"repositories and configurations, please visit "
|
267
|
-
f"https://docs.zenml.io/user-guide/
|
267
|
+
f"https://docs.zenml.io/user-guide/production-guide/understand-stacks."
|
268
268
|
)
|
269
269
|
|
270
270
|
|
zenml/cli/pipeline.py
CHANGED
@@ -40,6 +40,35 @@ from zenml.utils.yaml_utils import write_yaml
|
|
40
40
|
logger = get_logger(__name__)
|
41
41
|
|
42
42
|
|
43
|
+
def _import_pipeline(source: str) -> Pipeline:
|
44
|
+
"""Import a pipeline.
|
45
|
+
|
46
|
+
Args:
|
47
|
+
source: The pipeline source.
|
48
|
+
|
49
|
+
Returns:
|
50
|
+
The pipeline.
|
51
|
+
"""
|
52
|
+
try:
|
53
|
+
pipeline_instance = source_utils.load(source)
|
54
|
+
except ModuleNotFoundError as e:
|
55
|
+
source_root = source_utils.get_source_root()
|
56
|
+
cli_utils.error(
|
57
|
+
f"Unable to import module `{e.name}`. Make sure the source path is "
|
58
|
+
f"relative to your source root `{source_root}`."
|
59
|
+
)
|
60
|
+
except AttributeError as e:
|
61
|
+
cli_utils.error("Unable to load attribute from module: " + str(e))
|
62
|
+
|
63
|
+
if not isinstance(pipeline_instance, Pipeline):
|
64
|
+
cli_utils.error(
|
65
|
+
f"The given source path `{source}` does not resolve to a pipeline "
|
66
|
+
"object."
|
67
|
+
)
|
68
|
+
|
69
|
+
return pipeline_instance
|
70
|
+
|
71
|
+
|
43
72
|
@cli.group(cls=TagGroup, tag=CliCategories.MANAGEMENT_TOOLS)
|
44
73
|
def pipeline() -> None:
|
45
74
|
"""Interact with pipelines, runs and schedules."""
|
@@ -85,22 +114,7 @@ def register_pipeline(
|
|
85
114
|
"source code root."
|
86
115
|
)
|
87
116
|
|
88
|
-
|
89
|
-
pipeline_instance = source_utils.load(source)
|
90
|
-
except ModuleNotFoundError as e:
|
91
|
-
source_root = source_utils.get_source_root()
|
92
|
-
cli_utils.error(
|
93
|
-
f"Unable to import module `{e.name}`. Make sure the source path is "
|
94
|
-
f"relative to your source root `{source_root}`."
|
95
|
-
)
|
96
|
-
except AttributeError as e:
|
97
|
-
cli_utils.error("Unable to load attribute from module: " + str(e))
|
98
|
-
|
99
|
-
if not isinstance(pipeline_instance, Pipeline):
|
100
|
-
cli_utils.error(
|
101
|
-
f"The given source path `{source}` does not resolve to a pipeline "
|
102
|
-
"object."
|
103
|
-
)
|
117
|
+
pipeline_instance = _import_pipeline(source=source)
|
104
118
|
|
105
119
|
parameters: Dict[str, Any] = {}
|
106
120
|
if parameters_path:
|
@@ -176,24 +190,9 @@ def build_pipeline(
|
|
176
190
|
"your source code root."
|
177
191
|
)
|
178
192
|
|
179
|
-
try:
|
180
|
-
pipeline_instance = source_utils.load(source)
|
181
|
-
except ModuleNotFoundError as e:
|
182
|
-
source_root = source_utils.get_source_root()
|
183
|
-
cli_utils.error(
|
184
|
-
f"Unable to import module `{e.name}`. Make sure the source path is "
|
185
|
-
f"relative to your source root `{source_root}`."
|
186
|
-
)
|
187
|
-
except AttributeError as e:
|
188
|
-
cli_utils.error("Unable to load attribute from module: " + str(e))
|
189
|
-
|
190
|
-
if not isinstance(pipeline_instance, Pipeline):
|
191
|
-
cli_utils.error(
|
192
|
-
f"The given source path `{source}` does not resolve to a pipeline "
|
193
|
-
"object."
|
194
|
-
)
|
195
|
-
|
196
193
|
with cli_utils.temporary_active_stack(stack_name_or_id=stack_name_or_id):
|
194
|
+
pipeline_instance = _import_pipeline(source=source)
|
195
|
+
|
197
196
|
pipeline_instance = pipeline_instance.with_options(
|
198
197
|
config_path=config_path
|
199
198
|
)
|
@@ -277,36 +276,21 @@ def run_pipeline(
|
|
277
276
|
"your source code root."
|
278
277
|
)
|
279
278
|
|
280
|
-
try:
|
281
|
-
pipeline_instance = source_utils.load(source)
|
282
|
-
except ModuleNotFoundError as e:
|
283
|
-
source_root = source_utils.get_source_root()
|
284
|
-
cli_utils.error(
|
285
|
-
f"Unable to import module `{e.name}`. Make sure the source path is "
|
286
|
-
f"relative to your source root `{source_root}`."
|
287
|
-
)
|
288
|
-
except AttributeError as e:
|
289
|
-
cli_utils.error("Unable to load attribute from module: " + str(e))
|
290
|
-
|
291
|
-
if not isinstance(pipeline_instance, Pipeline):
|
292
|
-
cli_utils.error(
|
293
|
-
f"The given source path `{source}` does not resolve to a pipeline "
|
294
|
-
"object."
|
295
|
-
)
|
296
|
-
|
297
|
-
build: Union[str, PipelineBuildBase, None] = None
|
298
|
-
if build_path_or_id:
|
299
|
-
if uuid_utils.is_valid_uuid(build_path_or_id):
|
300
|
-
build = build_path_or_id
|
301
|
-
elif os.path.exists(build_path_or_id):
|
302
|
-
build = PipelineBuildBase.from_yaml(build_path_or_id)
|
303
|
-
else:
|
304
|
-
cli_utils.error(
|
305
|
-
f"The specified build {build_path_or_id} is not a valid UUID "
|
306
|
-
"or file path."
|
307
|
-
)
|
308
|
-
|
309
279
|
with cli_utils.temporary_active_stack(stack_name_or_id=stack_name_or_id):
|
280
|
+
pipeline_instance = _import_pipeline(source=source)
|
281
|
+
|
282
|
+
build: Union[str, PipelineBuildBase, None] = None
|
283
|
+
if build_path_or_id:
|
284
|
+
if uuid_utils.is_valid_uuid(build_path_or_id):
|
285
|
+
build = build_path_or_id
|
286
|
+
elif os.path.exists(build_path_or_id):
|
287
|
+
build = PipelineBuildBase.from_yaml(build_path_or_id)
|
288
|
+
else:
|
289
|
+
cli_utils.error(
|
290
|
+
f"The specified build {build_path_or_id} is not a valid UUID "
|
291
|
+
"or file path."
|
292
|
+
)
|
293
|
+
|
310
294
|
pipeline_instance = pipeline_instance.with_options(
|
311
295
|
config_path=config_path,
|
312
296
|
build=build,
|
@@ -369,24 +353,9 @@ def create_run_template(
|
|
369
353
|
"init` at your source code root."
|
370
354
|
)
|
371
355
|
|
372
|
-
try:
|
373
|
-
pipeline_instance = source_utils.load(source)
|
374
|
-
except ModuleNotFoundError as e:
|
375
|
-
source_root = source_utils.get_source_root()
|
376
|
-
cli_utils.error(
|
377
|
-
f"Unable to import module `{e.name}`. Make sure the source path is "
|
378
|
-
f"relative to your source root `{source_root}`."
|
379
|
-
)
|
380
|
-
except AttributeError as e:
|
381
|
-
cli_utils.error("Unable to load attribute from module: " + str(e))
|
382
|
-
|
383
|
-
if not isinstance(pipeline_instance, Pipeline):
|
384
|
-
cli_utils.error(
|
385
|
-
f"The given source path `{source}` does not resolve to a pipeline "
|
386
|
-
"object."
|
387
|
-
)
|
388
|
-
|
389
356
|
with cli_utils.temporary_active_stack(stack_name_or_id=stack_name_or_id):
|
357
|
+
pipeline_instance = _import_pipeline(source=source)
|
358
|
+
|
390
359
|
pipeline_instance = pipeline_instance.with_options(
|
391
360
|
config_path=config_path
|
392
361
|
)
|
@@ -66,7 +66,7 @@ class SecretReferenceMixin(BaseModel):
|
|
66
66
|
"but future versions of ZenML will require you to pass "
|
67
67
|
"in sensitive information as secrets. Check out the "
|
68
68
|
"documentation on how to configure values with secrets "
|
69
|
-
"here: https://docs.zenml.io/getting-started/deploying-zenml/
|
69
|
+
"here: https://docs.zenml.io/getting-started/deploying-zenml/secret-management"
|
70
70
|
)
|
71
71
|
continue
|
72
72
|
|
@@ -793,7 +793,7 @@ class VertexOrchestrator(ContainerizedOrchestrator, GoogleCredentialsMixin):
|
|
793
793
|
"set or set to 0. The accelerator type will be ignored. "
|
794
794
|
"To fix this warning, either remove the specified "
|
795
795
|
"accelerator type or set the `gpu_count` using the "
|
796
|
-
"ResourceSettings (https://docs.zenml.io/how-to/training-with-gpus
|
796
|
+
"ResourceSettings (https://docs.zenml.io/how-to/advanced-topics/training-with-gpus)."
|
797
797
|
)
|
798
798
|
|
799
799
|
return dynamic_component
|
@@ -77,10 +77,12 @@ class NeptuneExperimentTracker(BaseExperimentTracker):
|
|
77
77
|
NeptuneExperimentTrackerSettings, self.get_settings(info)
|
78
78
|
)
|
79
79
|
|
80
|
-
self.run_state.
|
81
|
-
|
82
|
-
|
83
|
-
|
80
|
+
self.run_state.initialize(
|
81
|
+
project=self.config.project,
|
82
|
+
token=self.config.api_token,
|
83
|
+
run_name=info.run_name,
|
84
|
+
tags=list(settings.tags),
|
85
|
+
)
|
84
86
|
|
85
87
|
def get_step_run_metadata(
|
86
88
|
self, info: "StepRunInfo"
|
@@ -107,4 +109,4 @@ class NeptuneExperimentTracker(BaseExperimentTracker):
|
|
107
109
|
"""
|
108
110
|
self.run_state.active_run.sync()
|
109
111
|
self.run_state.active_run.stop()
|
110
|
-
self.run_state.
|
112
|
+
self.run_state.reset()
|
@@ -20,7 +20,6 @@ import neptune
|
|
20
20
|
|
21
21
|
import zenml
|
22
22
|
from zenml.client import Client
|
23
|
-
from zenml.integrations.constants import NEPTUNE
|
24
23
|
from zenml.utils.singleton import SingletonMetaClass
|
25
24
|
|
26
25
|
if TYPE_CHECKING:
|
@@ -29,20 +28,38 @@ if TYPE_CHECKING:
|
|
29
28
|
_INTEGRATION_VERSION_KEY = "source_code/integrations/zenml"
|
30
29
|
|
31
30
|
|
32
|
-
class InvalidExperimentTrackerSelected(Exception):
|
33
|
-
"""Raised if a Neptune run is fetched while using a different experiment tracker."""
|
34
|
-
|
35
|
-
|
36
31
|
class RunProvider(metaclass=SingletonMetaClass):
|
37
32
|
"""Singleton object used to store and persist a Neptune run state across the pipeline."""
|
38
33
|
|
39
34
|
def __init__(self) -> None:
|
40
35
|
"""Initialize RunProvider. Called with no arguments."""
|
41
36
|
self._active_run: Optional["Run"] = None
|
42
|
-
self._project: Optional[str]
|
43
|
-
self._run_name: Optional[str]
|
44
|
-
self._token: Optional[str]
|
45
|
-
self._tags: Optional[List[str]]
|
37
|
+
self._project: Optional[str] = None
|
38
|
+
self._run_name: Optional[str] = None
|
39
|
+
self._token: Optional[str] = None
|
40
|
+
self._tags: Optional[List[str]] = None
|
41
|
+
self._initialized = False
|
42
|
+
|
43
|
+
def initialize(
|
44
|
+
self,
|
45
|
+
project: Optional[str] = None,
|
46
|
+
token: Optional[str] = None,
|
47
|
+
run_name: Optional[str] = None,
|
48
|
+
tags: Optional[List[str]] = None,
|
49
|
+
) -> None:
|
50
|
+
"""Initialize the run state.
|
51
|
+
|
52
|
+
Args:
|
53
|
+
project: The neptune project.
|
54
|
+
token: The neptune token.
|
55
|
+
run_name: The neptune run name.
|
56
|
+
tags: Tags for the neptune run.
|
57
|
+
"""
|
58
|
+
self._project = project
|
59
|
+
self._token = token
|
60
|
+
self._run_name = run_name
|
61
|
+
self._tags = tags
|
62
|
+
self._initialized = True
|
46
63
|
|
47
64
|
@property
|
48
65
|
def project(self) -> Optional[Any]:
|
@@ -53,15 +70,6 @@ class RunProvider(metaclass=SingletonMetaClass):
|
|
53
70
|
"""
|
54
71
|
return self._project
|
55
72
|
|
56
|
-
@project.setter
|
57
|
-
def project(self, project: str) -> None:
|
58
|
-
"""Setter for project name.
|
59
|
-
|
60
|
-
Args:
|
61
|
-
project: Neptune project name
|
62
|
-
"""
|
63
|
-
self._project = project
|
64
|
-
|
65
73
|
@property
|
66
74
|
def token(self) -> Optional[Any]:
|
67
75
|
"""Getter for API token.
|
@@ -71,15 +79,6 @@ class RunProvider(metaclass=SingletonMetaClass):
|
|
71
79
|
"""
|
72
80
|
return self._token
|
73
81
|
|
74
|
-
@token.setter
|
75
|
-
def token(self, token: str) -> None:
|
76
|
-
"""Setter for API token.
|
77
|
-
|
78
|
-
Args:
|
79
|
-
token: Neptune API token
|
80
|
-
"""
|
81
|
-
self._token = token
|
82
|
-
|
83
82
|
@property
|
84
83
|
def run_name(self) -> Optional[Any]:
|
85
84
|
"""Getter for run name.
|
@@ -89,15 +88,6 @@ class RunProvider(metaclass=SingletonMetaClass):
|
|
89
88
|
"""
|
90
89
|
return self._run_name
|
91
90
|
|
92
|
-
@run_name.setter
|
93
|
-
def run_name(self, run_name: str) -> None:
|
94
|
-
"""Setter for run name.
|
95
|
-
|
96
|
-
Args:
|
97
|
-
run_name: name of the pipeline run
|
98
|
-
"""
|
99
|
-
self._run_name = run_name
|
100
|
-
|
101
91
|
@property
|
102
92
|
def tags(self) -> Optional[Any]:
|
103
93
|
"""Getter for run tags.
|
@@ -107,14 +97,14 @@ class RunProvider(metaclass=SingletonMetaClass):
|
|
107
97
|
"""
|
108
98
|
return self._tags
|
109
99
|
|
110
|
-
@
|
111
|
-
def
|
112
|
-
"""
|
100
|
+
@property
|
101
|
+
def initialized(self) -> bool:
|
102
|
+
"""If the run state is initialized.
|
113
103
|
|
114
|
-
|
115
|
-
|
104
|
+
Returns:
|
105
|
+
If the run state is initialized.
|
116
106
|
"""
|
117
|
-
self.
|
107
|
+
return self._initialized
|
118
108
|
|
119
109
|
@property
|
120
110
|
def active_run(self) -> "Run":
|
@@ -137,9 +127,14 @@ class RunProvider(metaclass=SingletonMetaClass):
|
|
137
127
|
self._active_run = run
|
138
128
|
return self._active_run
|
139
129
|
|
140
|
-
def
|
141
|
-
"""
|
130
|
+
def reset(self) -> None:
|
131
|
+
"""Reset the run state."""
|
142
132
|
self._active_run = None
|
133
|
+
self._project = None
|
134
|
+
self._run_name = None
|
135
|
+
self._token = None
|
136
|
+
self._tags = None
|
137
|
+
self._initialized = False
|
143
138
|
|
144
139
|
|
145
140
|
def get_neptune_run() -> "Run":
|
@@ -149,14 +144,35 @@ def get_neptune_run() -> "Run":
|
|
149
144
|
Neptune run object
|
150
145
|
|
151
146
|
Raises:
|
152
|
-
|
147
|
+
RuntimeError: When unable to fetch the active neptune run.
|
153
148
|
"""
|
154
|
-
|
155
|
-
|
156
|
-
if experiment_tracker.flavor == NEPTUNE: # type: ignore
|
157
|
-
return experiment_tracker.run_state.active_run # type: ignore
|
158
|
-
raise InvalidExperimentTrackerSelected(
|
159
|
-
"Fetching a Neptune run works only with the 'neptune' flavor of "
|
160
|
-
"the experiment tracker. The flavor currently selected is %s"
|
161
|
-
% experiment_tracker.flavor # type: ignore
|
149
|
+
from zenml.integrations.neptune.experiment_trackers import (
|
150
|
+
NeptuneExperimentTracker,
|
162
151
|
)
|
152
|
+
|
153
|
+
experiment_tracker = Client().active_stack.experiment_tracker
|
154
|
+
|
155
|
+
if not experiment_tracker:
|
156
|
+
raise RuntimeError(
|
157
|
+
"Unable to get neptune run: Missing experiment tracker in the "
|
158
|
+
"active stack."
|
159
|
+
)
|
160
|
+
|
161
|
+
if not isinstance(experiment_tracker, NeptuneExperimentTracker):
|
162
|
+
raise RuntimeError(
|
163
|
+
"Unable to get neptune run: Experiment tracker in the active "
|
164
|
+
f"stack ({experiment_tracker.flavor}) is not a neptune experiment "
|
165
|
+
"tracker."
|
166
|
+
)
|
167
|
+
|
168
|
+
run_state = experiment_tracker.run_state
|
169
|
+
if not run_state.initialized:
|
170
|
+
raise RuntimeError(
|
171
|
+
"Unable to get neptune run: The experiment tracker has not been "
|
172
|
+
"initialized. To solve this, make sure you use the experiment "
|
173
|
+
"tracker in your step. See "
|
174
|
+
"https://docs.zenml.io/stack-components/experiment-trackers/neptune#how-do-you-use-it "
|
175
|
+
"for more information."
|
176
|
+
)
|
177
|
+
|
178
|
+
return experiment_tracker.run_state.active_run
|
zenml/integrations/registry.py
CHANGED
@@ -111,7 +111,7 @@ class IntegrationRegistry(object):
|
|
111
111
|
)
|
112
112
|
else:
|
113
113
|
raise KeyError(
|
114
|
-
f"
|
114
|
+
f"Integration {integration_name} does not exist. "
|
115
115
|
f"Currently the following integrations are implemented. "
|
116
116
|
f"{self.list_integration_names}"
|
117
117
|
)
|
@@ -148,7 +148,7 @@ class IntegrationRegistry(object):
|
|
148
148
|
].get_uninstall_requirements(target_os=target_os)
|
149
149
|
else:
|
150
150
|
raise KeyError(
|
151
|
-
f"
|
151
|
+
f"Integration {integration_name} does not exist. "
|
152
152
|
f"Currently the following integrations are implemented. "
|
153
153
|
f"{self.list_integration_names}"
|
154
154
|
)
|
@@ -61,7 +61,7 @@ class BaseOrchestratorConfig(StackComponentConfig):
|
|
61
61
|
"The 'custom_docker_base_image_name' field has been "
|
62
62
|
"deprecated. To use a custom base container image with your "
|
63
63
|
"orchestrators, please use the DockerSettings in your "
|
64
|
-
"pipeline (see https://docs.zenml.io/how-to/customize-docker-builds)."
|
64
|
+
"pipeline (see https://docs.zenml.io/how-to/infrastructure-deployment/customize-docker-builds)."
|
65
65
|
)
|
66
66
|
|
67
67
|
return data
|
@@ -61,13 +61,13 @@ def _raise_specific_cloud_exception_if_needed(
|
|
61
61
|
container_registries: List[ResourcesInfo],
|
62
62
|
) -> None:
|
63
63
|
AWS_DOCS = (
|
64
|
-
"https://docs.zenml.io/how-to/auth-management/aws-service-connector"
|
64
|
+
"https://docs.zenml.io/how-to/infrastructure-deployment/auth-management/aws-service-connector"
|
65
65
|
)
|
66
66
|
GCP_DOCS = (
|
67
|
-
"https://docs.zenml.io/how-to/auth-management/gcp-service-connector"
|
67
|
+
"https://docs.zenml.io/how-to/infrastructure-deployment/auth-management/gcp-service-connector"
|
68
68
|
)
|
69
69
|
AZURE_DOCS = (
|
70
|
-
"https://docs.zenml.io/how-to/auth-management/azure-service-connector"
|
70
|
+
"https://docs.zenml.io/how-to/infrastructure-deployment/auth-management/azure-service-connector"
|
71
71
|
)
|
72
72
|
|
73
73
|
if not artifact_stores:
|
zenml/stack/stack_component.py
CHANGED
@@ -102,7 +102,7 @@ class StackComponentConfig(BaseModel, ABC):
|
|
102
102
|
"in sensitive information as secrets. Check out the "
|
103
103
|
"documentation on how to configure your stack "
|
104
104
|
"components with secrets here: "
|
105
|
-
"https://docs.zenml.io/getting-started/deploying-zenml/
|
105
|
+
"https://docs.zenml.io/getting-started/deploying-zenml/secret-management"
|
106
106
|
)
|
107
107
|
continue
|
108
108
|
|
@@ -4062,7 +4062,7 @@ class RestZenStore(BaseZenStore):
|
|
4062
4062
|
"you should use a service account API key to authenticate to "
|
4063
4063
|
"the server instead of temporary CLI login credentials. For "
|
4064
4064
|
"more information, see "
|
4065
|
-
"https://docs.zenml.io/how-to/connecting-to-zenml/connect-with-a-service-account"
|
4065
|
+
"https://docs.zenml.io/how-to/project-setup-and-management/connecting-to-zenml/connect-with-a-service-account"
|
4066
4066
|
)
|
4067
4067
|
|
4068
4068
|
if api_key is not None:
|
{zenml_nightly-0.70.0.dev20241201.dist-info → zenml_nightly-0.70.0.dev20241203.dist-info}/RECORD
RENAMED
@@ -6,7 +6,7 @@ RELEASE_NOTES.md,sha256=DleauURHESDrTrcVzCVLqPiSM9NIAk5vldvEFMc7qlk,389375
|
|
6
6
|
ROADMAP.md,sha256=hiLSmr16BH8Dfx7SaQM4JcXCGCVl6mFZPFAwJeDTrJU,407
|
7
7
|
SECURITY.md,sha256=9DepA8y03yvCZLHEfcXLTDH4lUyKHquAdukBsccNN7c,682
|
8
8
|
zenml/README.md,sha256=827dekbOWAs1BpW7VF1a4d7EbwPbjwccX-2zdXBENZo,1777
|
9
|
-
zenml/VERSION,sha256=
|
9
|
+
zenml/VERSION,sha256=X1k6h9fTwNJHLhvwMrbIeu0zyNdWZlpq_FOYVzRDLMg,19
|
10
10
|
zenml/__init__.py,sha256=SkMObQA41ajqdZqGErN00S1Vf3KAxpLvbZ-OBy5uYoo,2130
|
11
11
|
zenml/actions/__init__.py,sha256=mrt6wPo73iKRxK754_NqsGyJ3buW7RnVeIGXr1xEw8Y,681
|
12
12
|
zenml/actions/base_action.py,sha256=UcaHev6BTuLDwuswnyaPjdA8AgUqB5xPZ-lRtuvf2FU,25553
|
@@ -33,11 +33,11 @@ zenml/artifacts/external_artifact_config.py,sha256=P172p0JOu8Xx1F8RCQut1dnRpt5lp
|
|
33
33
|
zenml/artifacts/preexisting_data_materializer.py,sha256=dcahDcHUD3Lvn0-6zE2BG84bkyo_ydAgzBWxtbyJJZQ,3325
|
34
34
|
zenml/artifacts/unmaterialized_artifact.py,sha256=JNPKq_sNifQx5wP8jEw7TGBEi26zwKirPGlWX9uxbJI,1300
|
35
35
|
zenml/artifacts/utils.py,sha256=k4BNl03CQhvC4BMFeXk6TBcF47ca7AtQcVh6t_fn7xY,35132
|
36
|
-
zenml/cli/__init__.py,sha256=
|
36
|
+
zenml/cli/__init__.py,sha256=d239fhufu48sglF4_WJpcvfWTAjHblL9NR75yjQ7AXw,75666
|
37
37
|
zenml/cli/annotator.py,sha256=tEdducGdFn57DFLJVZQ-MyXH1auTGFueRmDc78N-vPQ,6970
|
38
38
|
zenml/cli/artifact.py,sha256=7lsAS52DroBTFkFWxkyb-lIDOGP5jPL_Se_RDG_2jgg,9564
|
39
39
|
zenml/cli/authorized_device.py,sha256=_1PzE3BM2SmwtuzRliEMStvbBRKWQmg_lbwCRtn8dBg,4324
|
40
|
-
zenml/cli/base.py,sha256=
|
40
|
+
zenml/cli/base.py,sha256=kFG3d6IaYyrJXYgafsJNDJmIPIKL6rY_ScT6AjVppE0,28243
|
41
41
|
zenml/cli/cli.py,sha256=Pnq468IZ4oqzluA_gZ5PsrdnSPEyHcasIH-xI1_8Y_Q,5454
|
42
42
|
zenml/cli/code_repository.py,sha256=7DNJMc7RL8GaU8DwX0mDSViLH9oclqhsX2AU-VWOKb8,6979
|
43
43
|
zenml/cli/config.py,sha256=UI_j0a_zRgEUd2q0zuOi4UgbjiCYjMJ_Y9iSg-wi8Oo,2768
|
@@ -48,7 +48,7 @@ zenml/cli/integration.py,sha256=O-JbkDMyJfwrzwm--Ddh41siLZ8lDuXwIiCaZvjdCt4,1620
|
|
48
48
|
zenml/cli/login.py,sha256=xZdDiTbFiHvzvd5o08VRL01Oim5-0NSeKlxpBayAvss,35232
|
49
49
|
zenml/cli/model.py,sha256=hXRXkMUOOf0eTo07WnQHNeeDDQLiH0m76E-xypFLYF0,22993
|
50
50
|
zenml/cli/model_registry.py,sha256=cNAZ3iBa0ofdMD8inQil05yLJq7rWKgadSKMmVdlHOQ,20806
|
51
|
-
zenml/cli/pipeline.py,sha256
|
51
|
+
zenml/cli/pipeline.py,sha256=ZK_J_GE1OGZkLCBsdTiHnSh7BBp29QiigtxvQNifxAc,19228
|
52
52
|
zenml/cli/secret.py,sha256=2WxDYg6iodnAVSbVJQvQEYWEgcy0oytcSBVnnyN0JOw,20135
|
53
53
|
zenml/cli/served_model.py,sha256=3w1UcAbg6Geu37fr7ej1_81GBCt3fF7j3Ge799YE4Mc,14974
|
54
54
|
zenml/cli/server.py,sha256=vmNThi0nwNQoNAmLkA_kwcudoNrqR2wVcWNA7y7vfSI,25519
|
@@ -82,7 +82,7 @@ zenml/config/pipeline_spec.py,sha256=uWpiIfznJvXAiKs1yMIUDT1h1tYEFNO-RDVTYcIv9CE
|
|
82
82
|
zenml/config/resource_settings.py,sha256=bl3xahx--XS9p1CsTDSuvkZX9Oxb-Zj85UpefR8WrYs,3899
|
83
83
|
zenml/config/retry_config.py,sha256=4UH1xqw0G6fSEbXSNKfmiFEkwadxQef9BGMe3JBm6NI,929
|
84
84
|
zenml/config/schedule.py,sha256=QdezLjIONnEAVPrWFekbetNvkclx_5eJyhza0Prl5Y0,4944
|
85
|
-
zenml/config/secret_reference_mixin.py,sha256=
|
85
|
+
zenml/config/secret_reference_mixin.py,sha256=6DOgOH_w1_coNs1NasMjY8SOv0MqzWQZxwrWsfncsgs,5862
|
86
86
|
zenml/config/secrets_store_config.py,sha256=y05zqyQhr_DGrs3IfBGa_FRoZ043hSYRT5wzrx-zHTU,2818
|
87
87
|
zenml/config/server_config.py,sha256=na4muBGzT25vdsaHvy69xSzYEPBCh7PZViZxVGQnjgc,25744
|
88
88
|
zenml/config/settings_resolver.py,sha256=PR9BRm_x1dy7nVKa9UqpeFdck8IEATSW6aWT8FKd-DI,4278
|
@@ -270,7 +270,7 @@ zenml/integrations/gcp/google_credentials_mixin.py,sha256=bPy3JYCCcyuTmPiVFqbY81
|
|
270
270
|
zenml/integrations/gcp/image_builders/__init__.py,sha256=2IvTL6U2YpUoxGQXeXew-6WFoL5hHIxkqr4DaA5Ez9w,786
|
271
271
|
zenml/integrations/gcp/image_builders/gcp_image_builder.py,sha256=dNpMJa1TITUOHSn5nj1gWTFwVNmvWz321A_JoTMOqCM,9114
|
272
272
|
zenml/integrations/gcp/orchestrators/__init__.py,sha256=6xLFJKZKQk73fHPF-XdpbQO87zjQNGTsNHjJjLfG_Kg,805
|
273
|
-
zenml/integrations/gcp/orchestrators/vertex_orchestrator.py,sha256=
|
273
|
+
zenml/integrations/gcp/orchestrators/vertex_orchestrator.py,sha256=7O-Wh-LTGKOWpjARtbE0eWG_vpq6eSI3UERgUoNwzHA,36923
|
274
274
|
zenml/integrations/gcp/service_connectors/__init__.py,sha256=fdydawaor8KAtMYvRZieiTuA1i5QATxXXgI-yV1lsn8,788
|
275
275
|
zenml/integrations/gcp/service_connectors/gcp_service_connector.py,sha256=E0OIF_6Godw1GCOsiYB_RvqpIZhPbnsY7WqTuIZ90Ec,94875
|
276
276
|
zenml/integrations/gcp/step_operators/__init__.py,sha256=iPkob2LtPIQ-OHszhbNz_ojhoovL6SprmTx37It4EJ8,808
|
@@ -403,8 +403,8 @@ zenml/integrations/modal/step_operators/__init__.py,sha256=8NYCXe7aNPnldCI9IjcHz
|
|
403
403
|
zenml/integrations/modal/step_operators/modal_step_operator.py,sha256=J2HiNaGnlP6kDLBnQKz8mQKaoaQLitFkjHhOP_XRWgI,8543
|
404
404
|
zenml/integrations/neptune/__init__.py,sha256=FUaMxVC9uPryIY7reWdzfMcMdsf5T3HjBZ1QjpjEX4Q,1717
|
405
405
|
zenml/integrations/neptune/experiment_trackers/__init__.py,sha256=DJi7lk7NXYrRg3VGPPSEsMycKECDfXL-h2V0A0r7z8Y,833
|
406
|
-
zenml/integrations/neptune/experiment_trackers/neptune_experiment_tracker.py,sha256=
|
407
|
-
zenml/integrations/neptune/experiment_trackers/run_state.py,sha256=
|
406
|
+
zenml/integrations/neptune/experiment_trackers/neptune_experiment_tracker.py,sha256=hqEOgyBEQhjcnxvgw2oC2WZ0FAv1ez4VAqa_fJAHeCw,3716
|
407
|
+
zenml/integrations/neptune/experiment_trackers/run_state.py,sha256=W-3mnjoVT-lZNVxGm4982jvMYbxC9WNiQ9_0vd4f9SM,5411
|
408
408
|
zenml/integrations/neptune/flavors/__init__.py,sha256=NzORpmtI3Vu7yH1maj5pYd_2gQoN4QR2ZZLy1uPr6uw,975
|
409
409
|
zenml/integrations/neptune/flavors/neptune_experiment_tracker_flavor.py,sha256=dGlRmnPjG5qG1RlcpEmpANDKAigh1N4hE86jvmaC968,3634
|
410
410
|
zenml/integrations/neptune/neptune_constants.py,sha256=-VddhrALS1HMBhGtFiGDKaRahC-qhG0JAF2zAuc3lMM,746
|
@@ -448,7 +448,7 @@ zenml/integrations/pytorch/utils.py,sha256=IbJTsMb5zYcGlxZj0xKIFQuPHdnizWMd_zmeM
|
|
448
448
|
zenml/integrations/pytorch_lightning/__init__.py,sha256=tk1Io7xI6HbwHkUauvXMs9xQRb1oploneHCmRIcbeAE,1177
|
449
449
|
zenml/integrations/pytorch_lightning/materializers/__init__.py,sha256=zZsRri9X8YMJy4_h-8_Uss5RHjkFkd-RGF9zKnd713Q,814
|
450
450
|
zenml/integrations/pytorch_lightning/materializers/pytorch_lightning_materializer.py,sha256=dmNXbGLAzbiaFEa2K9ctOiOoyuQ2GNVsDfgcvdV14Is,1245
|
451
|
-
zenml/integrations/registry.py,sha256=
|
451
|
+
zenml/integrations/registry.py,sha256=L43KXOAW5vi736Ox7mJJgQN3lVrtbf0TwUHA-Gao31o,7164
|
452
452
|
zenml/integrations/s3/__init__.py,sha256=Q7v4V4YuPDcGwHVkbJSX6MDBJoaaC65A16Gy2PQ4xLc,2215
|
453
453
|
zenml/integrations/s3/artifact_stores/__init__.py,sha256=xK8pbJIg66f7BXlJfyCKVRgxxD7KmdAxiuXGtFvenVQ,793
|
454
454
|
zenml/integrations/s3/artifact_stores/s3_artifact_store.py,sha256=0KD2b2-Fi3w5I4tnVh2XnmczwIcsNIjkOHCWGRO3KZE,18059
|
@@ -674,7 +674,7 @@ zenml/models/v2/misc/service_connector_type.py,sha256=jGJLvIsBB87ZIEeZCLLueUf28H
|
|
674
674
|
zenml/models/v2/misc/stack_deployment.py,sha256=PgQevLjvHTpsecY_rzrXesr7jiGms7rH_QbFtI2ZIaA,3768
|
675
675
|
zenml/models/v2/misc/user_auth.py,sha256=1-yafNA9qK4wL8ToROjaklTVI7Mj9va0t80_4wm7w3U,6988
|
676
676
|
zenml/orchestrators/__init__.py,sha256=p4Y9Ni7Lp33fZ6UrjgI7qu-rrg8LrlyafCM-K1WC81w,1961
|
677
|
-
zenml/orchestrators/base_orchestrator.py,sha256=
|
677
|
+
zenml/orchestrators/base_orchestrator.py,sha256=rKC76EVovOIRyRM5x3Y6gNOhnrCLan_vM_d9CU71i68,12267
|
678
678
|
zenml/orchestrators/cache_utils.py,sha256=J5sMmgy-qRJVtTWt5hDjSAR6vPPulOhMJu0m-Y1onO8,4327
|
679
679
|
zenml/orchestrators/containerized_orchestrator.py,sha256=rdebgBW0Bk--JcHcT0NpLkAbyhY0VS5xO1uwWEgkLpA,3230
|
680
680
|
zenml/orchestrators/dag_runner.py,sha256=0F0zOy90ZHad_YUiwG_47JiH7KEVFQ5tLen0kGPvppk,6940
|
@@ -712,7 +712,7 @@ zenml/service_connectors/__init__.py,sha256=gIBAVUPBZtdO6JtEBCixy9YG4wZRA1mnaxaG
|
|
712
712
|
zenml/service_connectors/docker_service_connector.py,sha256=_6WPqYCcSUf8JPakipbkJRvaN2ghhY7zCr38WCHG0SI,13218
|
713
713
|
zenml/service_connectors/service_connector.py,sha256=HW8dTE826ZSD1vWQlqQRm8XYq08v7tDZQ8ORnJ5rTcE,55351
|
714
714
|
zenml/service_connectors/service_connector_registry.py,sha256=mCabyKAr7Y6bcAbIFXbir9YrHczDe1ZJ8Bks5bOQouk,9658
|
715
|
-
zenml/service_connectors/service_connector_utils.py,sha256=
|
715
|
+
zenml/service_connectors/service_connector_utils.py,sha256=JlpfqpjftTjQvUSlamg4eSoaWBhDGips0DnJnNb8lwo,18104
|
716
716
|
zenml/services/__init__.py,sha256=8aSLtYlX9EVLB1Se1I4dbhZdTqrjNrAfsn1d_RCc_nk,2800
|
717
717
|
zenml/services/container/__init__.py,sha256=dFHcmlXgNXjUaCR18oGQJ19-I_6f3UeAUURHjqldjTs,668
|
718
718
|
zenml/services/container/container_service.py,sha256=DJIK7DD53Q_mgZByM0oeIyAgkrwN12T5E3QCWjubkLs,18383
|
@@ -732,7 +732,7 @@ zenml/stack/authentication_mixin.py,sha256=sg7GkpB-Ao9Gsa7Po0jxMn-_mVYUB42etmspZ
|
|
732
732
|
zenml/stack/flavor.py,sha256=F60xxZaqsNRK51K1g-SIWAK9dFxRQXaIErtr3evQ-ng,9775
|
733
733
|
zenml/stack/flavor_registry.py,sha256=IL0fRrxxQJ9YkCYCeADP7nwWEQo4XBElJY4owMjKGbQ,6108
|
734
734
|
zenml/stack/stack.py,sha256=zpFQ7aOusTKBIwMG4B-chxISEranUo8tvlPu2tMUjPc,32905
|
735
|
-
zenml/stack/stack_component.py,sha256=
|
735
|
+
zenml/stack/stack_component.py,sha256=4V111uBLpmsPaNffaQS-fLuz163WFEjsmIFzb_lq7is,29497
|
736
736
|
zenml/stack/stack_validator.py,sha256=hWbvvGIeWLj6NwSsF4GCc6RAxAWvxHXTcBZL9nJvcak,3111
|
737
737
|
zenml/stack/utils.py,sha256=qHMFi8SVMSDFeZTFO4KkvaLUbF-l3B0_JZ5SSMxYrwI,6406
|
738
738
|
zenml/stack_deployments/__init__.py,sha256=-7593cQ_ZgRn774Ol-8AKXXQquIU4DSiaThVEr6TfWM,644
|
@@ -1230,7 +1230,7 @@ zenml/zen_stores/migrations/versions/ec6307720f92_simplify_model_version_links.p
|
|
1230
1230
|
zenml/zen_stores/migrations/versions/f3b3964e3a0f_add_oauth_devices.py,sha256=2CR4R-7Vx6j_AXxo-e5Guy6OX-ZnS47HSKSGfqlO-y0,3065
|
1231
1231
|
zenml/zen_stores/migrations/versions/f49904a80aa7_increase_length_of_artifact_table_sources.py,sha256=kLgfDUnQdAb5_SyFx3VKXDLC0YbuBKf9iXRDNeBin7Q,1618
|
1232
1232
|
zenml/zen_stores/migrations/versions/fbd7f18ced1e_increase_step_run_field_lengths.py,sha256=kn-ng5EHe_mmLfffIFbz7T59z-to3oMx8III_4wOsz4,1956
|
1233
|
-
zenml/zen_stores/rest_zen_store.py,sha256=
|
1233
|
+
zenml/zen_stores/rest_zen_store.py,sha256=WPgXQdeYUJ853tEKCzDkCHuPKnrwVxpXWQD6s7ypB3I,157484
|
1234
1234
|
zenml/zen_stores/schemas/__init__.py,sha256=vMb0Pyf94aMWZDWpPKuRaxNoMsTp9DZNKSQScm9Vd5I,4339
|
1235
1235
|
zenml/zen_stores/schemas/action_schemas.py,sha256=vNnDF4zRy0eWgNwtcU7yY0JXyqe4I3Nns2LHRHWwiDs,6293
|
1236
1236
|
zenml/zen_stores/schemas/api_key_schemas.py,sha256=pCvoTSXSHz-im6aRt-opSBnmIhw3wDRIsi-NJP5WtCQ,7243
|
@@ -1276,8 +1276,8 @@ zenml/zen_stores/secrets_stores/sql_secrets_store.py,sha256=Bq1djrUP9saoD7vECjS7
|
|
1276
1276
|
zenml/zen_stores/sql_zen_store.py,sha256=gq7hwCqXuvABUGHoo6J_fOdf4PGuN88BFWE84KK_-UM,408283
|
1277
1277
|
zenml/zen_stores/template_utils.py,sha256=EKYBgmDLTS_PSMWaIO5yvHPLiQvMqHcsAe6NUCrv-i4,9068
|
1278
1278
|
zenml/zen_stores/zen_store_interface.py,sha256=vf2gKBWfUUPtcGZC35oQB6pPNVzWVyQC8nWxVLjfrxM,92692
|
1279
|
-
zenml_nightly-0.70.0.
|
1280
|
-
zenml_nightly-0.70.0.
|
1281
|
-
zenml_nightly-0.70.0.
|
1282
|
-
zenml_nightly-0.70.0.
|
1283
|
-
zenml_nightly-0.70.0.
|
1279
|
+
zenml_nightly-0.70.0.dev20241203.dist-info/LICENSE,sha256=wbnfEnXnafPbqwANHkV6LUsPKOtdpsd-SNw37rogLtc,11359
|
1280
|
+
zenml_nightly-0.70.0.dev20241203.dist-info/METADATA,sha256=qZZHNrbpj8dGXfo9ZYuePjmJKt5XXOo3rsZpQKioRSA,21208
|
1281
|
+
zenml_nightly-0.70.0.dev20241203.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
1282
|
+
zenml_nightly-0.70.0.dev20241203.dist-info/entry_points.txt,sha256=QK3ETQE0YswAM2mWypNMOv8TLtr7EjnqAFq1br_jEFE,43
|
1283
|
+
zenml_nightly-0.70.0.dev20241203.dist-info/RECORD,,
|
{zenml_nightly-0.70.0.dev20241201.dist-info → zenml_nightly-0.70.0.dev20241203.dist-info}/LICENSE
RENAMED
File without changes
|
{zenml_nightly-0.70.0.dev20241201.dist-info → zenml_nightly-0.70.0.dev20241203.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|