zenml-nightly 0.82.0.dev20250506__py3-none-any.whl → 0.82.0.dev20250508__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/actions/pipeline_run/pipeline_run_action.py +1 -0
- zenml/config/server_config.py +6 -0
- zenml/constants.py +1 -0
- zenml/exceptions.py +4 -0
- zenml/utils/docker_utils.py +10 -1
- zenml/zen_server/exceptions.py +3 -0
- zenml/zen_server/routers/run_templates_endpoints.py +9 -5
- zenml/zen_server/template_execution/utils.py +80 -11
- zenml/zen_server/utils.py +33 -0
- zenml/zen_server/zen_server_api.py +9 -0
- {zenml_nightly-0.82.0.dev20250506.dist-info → zenml_nightly-0.82.0.dev20250508.dist-info}/METADATA +1 -1
- {zenml_nightly-0.82.0.dev20250506.dist-info → zenml_nightly-0.82.0.dev20250508.dist-info}/RECORD +16 -16
- {zenml_nightly-0.82.0.dev20250506.dist-info → zenml_nightly-0.82.0.dev20250508.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.82.0.dev20250506.dist-info → zenml_nightly-0.82.0.dev20250508.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.82.0.dev20250506.dist-info → zenml_nightly-0.82.0.dev20250508.dist-info}/entry_points.txt +0 -0
zenml/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.82.0.
|
1
|
+
0.82.0.dev20250508
|
zenml/config/server_config.py
CHANGED
@@ -40,6 +40,7 @@ from zenml.constants import (
|
|
40
40
|
DEFAULT_ZENML_SERVER_GENERIC_API_TOKEN_MAX_LIFETIME,
|
41
41
|
DEFAULT_ZENML_SERVER_LOGIN_RATE_LIMIT_DAY,
|
42
42
|
DEFAULT_ZENML_SERVER_LOGIN_RATE_LIMIT_MINUTE,
|
43
|
+
DEFAULT_ZENML_SERVER_MAX_CONCURRENT_TEMPLATE_RUNS,
|
43
44
|
DEFAULT_ZENML_SERVER_MAX_DEVICE_AUTH_ATTEMPTS,
|
44
45
|
DEFAULT_ZENML_SERVER_MAX_REQUEST_BODY_SIZE_IN_BYTES,
|
45
46
|
DEFAULT_ZENML_SERVER_NAME,
|
@@ -153,6 +154,8 @@ class ServerConfiguration(BaseModel):
|
|
153
154
|
server.
|
154
155
|
workload_manager_implementation_source: Source pointing to a class
|
155
156
|
implementing the workload management interface.
|
157
|
+
max_concurrent_template_runs: The maximum number of concurrent template
|
158
|
+
runs that can be executed on the server.
|
156
159
|
pipeline_run_auth_window: The default time window in minutes for which
|
157
160
|
a pipeline run action is allowed to authenticate with the ZenML
|
158
161
|
server.
|
@@ -291,6 +294,9 @@ class ServerConfiguration(BaseModel):
|
|
291
294
|
feature_gate_implementation_source: Optional[str] = None
|
292
295
|
reportable_resources: List[str] = []
|
293
296
|
workload_manager_implementation_source: Optional[str] = None
|
297
|
+
max_concurrent_template_runs: int = (
|
298
|
+
DEFAULT_ZENML_SERVER_MAX_CONCURRENT_TEMPLATE_RUNS
|
299
|
+
)
|
294
300
|
pipeline_run_auth_window: int = (
|
295
301
|
DEFAULT_ZENML_SERVER_PIPELINE_RUN_AUTH_WINDOW
|
296
302
|
)
|
zenml/constants.py
CHANGED
@@ -291,6 +291,7 @@ DEFAULT_ZENML_SERVER_GENERIC_API_TOKEN_MAX_LIFETIME = (
|
|
291
291
|
60 * 60 * 24 * 7
|
292
292
|
) # 7 days
|
293
293
|
DEFAULT_ZENML_SERVER_FILE_DOWNLOAD_SIZE_LIMIT = 2 * 1024 * 1024 * 1024 # 20 GB
|
294
|
+
DEFAULT_ZENML_SERVER_MAX_CONCURRENT_TEMPLATE_RUNS = 2
|
294
295
|
|
295
296
|
DEFAULT_ZENML_SERVER_SECURE_HEADERS_HSTS = (
|
296
297
|
"max-age=63072000; includeSubdomains"
|
zenml/exceptions.py
CHANGED
@@ -216,3 +216,7 @@ class BackupSecretsStoreNotConfiguredError(NotImplementedError):
|
|
216
216
|
|
217
217
|
class CustomFlavorImportError(ImportError):
|
218
218
|
"""Raised when failing to import a custom flavor."""
|
219
|
+
|
220
|
+
|
221
|
+
class MaxConcurrentTasksError(ZenMLBaseException):
|
222
|
+
"""Raised when the maximum number of concurrent tasks is reached."""
|
zenml/utils/docker_utils.py
CHANGED
@@ -266,12 +266,21 @@ def push_image(
|
|
266
266
|
logger.info("Finished pushing Docker image.")
|
267
267
|
|
268
268
|
image_name_without_tag, _ = image_name.rsplit(":", maxsplit=1)
|
269
|
+
prefix_candidates = [f"{image_name_without_tag}@"]
|
270
|
+
|
271
|
+
if image_name_without_tag.startswith(("index.docker.io/", "docker.io/")):
|
272
|
+
# When looking for the repo digest later, Docker sometimes removes the
|
273
|
+
# index prefix, so we make sure to check for a digest with and without.
|
274
|
+
image_name_without_index = image_name_without_tag.split(
|
275
|
+
"/", maxsplit=1
|
276
|
+
)[1]
|
277
|
+
prefix_candidates.append(f"{image_name_without_index}@")
|
269
278
|
|
270
279
|
image = docker_client.images.get(image_name)
|
271
280
|
repo_digests: List[str] = image.attrs["RepoDigests"]
|
272
281
|
|
273
282
|
for digest in repo_digests:
|
274
|
-
if digest.startswith(
|
283
|
+
if digest.startswith(tuple(prefix_candidates)):
|
275
284
|
return digest
|
276
285
|
|
277
286
|
for info in reversed(aux_info):
|
zenml/zen_server/exceptions.py
CHANGED
@@ -25,6 +25,7 @@ from zenml.exceptions import (
|
|
25
25
|
EntityCreationError,
|
26
26
|
EntityExistsError,
|
27
27
|
IllegalOperationError,
|
28
|
+
MaxConcurrentTasksError,
|
28
29
|
MethodNotAllowedError,
|
29
30
|
SubscriptionUpgradeRequiredError,
|
30
31
|
ValidationError,
|
@@ -85,6 +86,8 @@ REST_API_EXCEPTIONS: List[Tuple[Type[Exception], int]] = [
|
|
85
86
|
(ValueError, 400),
|
86
87
|
# 422 Unprocessable Entity
|
87
88
|
(ValueError, 422),
|
89
|
+
# 429 Too Many Requests
|
90
|
+
(MaxConcurrentTasksError, 429),
|
88
91
|
# 500 Internal Server Error
|
89
92
|
(EntityCreationError, 500),
|
90
93
|
(RuntimeError, 500),
|
@@ -16,7 +16,11 @@
|
|
16
16
|
from typing import Optional, Union
|
17
17
|
from uuid import UUID
|
18
18
|
|
19
|
-
from fastapi import
|
19
|
+
from fastapi import (
|
20
|
+
APIRouter,
|
21
|
+
Depends,
|
22
|
+
Security,
|
23
|
+
)
|
20
24
|
|
21
25
|
from zenml.analytics.enums import AnalyticsEvent
|
22
26
|
from zenml.analytics.utils import track_handler
|
@@ -220,12 +224,12 @@ if server_config().workload_manager_enabled:
|
|
220
224
|
401: error_response,
|
221
225
|
404: error_response,
|
222
226
|
422: error_response,
|
227
|
+
429: error_response,
|
223
228
|
},
|
224
229
|
)
|
225
230
|
@handle_exceptions
|
226
231
|
def create_template_run(
|
227
232
|
template_id: UUID,
|
228
|
-
background_tasks: BackgroundTasks,
|
229
233
|
config: Optional[PipelineRunConfiguration] = None,
|
230
234
|
auth_context: AuthContext = Security(authorize),
|
231
235
|
) -> PipelineRunResponse:
|
@@ -233,14 +237,15 @@ if server_config().workload_manager_enabled:
|
|
233
237
|
|
234
238
|
Args:
|
235
239
|
template_id: The ID of the template.
|
236
|
-
background_tasks: Background tasks.
|
237
240
|
config: Configuration for the pipeline run.
|
238
241
|
auth_context: Authentication context.
|
239
242
|
|
240
243
|
Returns:
|
241
244
|
The created pipeline run.
|
242
245
|
"""
|
243
|
-
from zenml.zen_server.template_execution.utils import
|
246
|
+
from zenml.zen_server.template_execution.utils import (
|
247
|
+
run_template,
|
248
|
+
)
|
244
249
|
|
245
250
|
with track_handler(
|
246
251
|
event=AnalyticsEvent.EXECUTED_RUN_TEMPLATE,
|
@@ -268,6 +273,5 @@ if server_config().workload_manager_enabled:
|
|
268
273
|
return run_template(
|
269
274
|
template=template,
|
270
275
|
auth_context=auth_context,
|
271
|
-
background_tasks=background_tasks,
|
272
276
|
run_config=config,
|
273
277
|
)
|
@@ -3,10 +3,11 @@
|
|
3
3
|
import copy
|
4
4
|
import hashlib
|
5
5
|
import sys
|
6
|
-
|
6
|
+
import threading
|
7
|
+
from concurrent.futures import Future, ThreadPoolExecutor
|
8
|
+
from typing import Any, Callable, Dict, List, Optional
|
7
9
|
from uuid import UUID
|
8
10
|
|
9
|
-
from fastapi import BackgroundTasks
|
10
11
|
from packaging import version
|
11
12
|
|
12
13
|
from zenml.analytics.enums import AnalyticsEvent
|
@@ -26,6 +27,7 @@ from zenml.constants import (
|
|
26
27
|
handle_int_env_var,
|
27
28
|
)
|
28
29
|
from zenml.enums import ExecutionStatus, StackComponentType, StoreType
|
30
|
+
from zenml.exceptions import MaxConcurrentTasksError
|
29
31
|
from zenml.logger import get_logger
|
30
32
|
from zenml.models import (
|
31
33
|
CodeReferenceRequest,
|
@@ -50,30 +52,92 @@ from zenml.zen_server.auth import AuthContext, generate_access_token
|
|
50
52
|
from zenml.zen_server.template_execution.runner_entrypoint_configuration import (
|
51
53
|
RunnerEntrypointConfiguration,
|
52
54
|
)
|
53
|
-
from zenml.zen_server.utils import
|
55
|
+
from zenml.zen_server.utils import (
|
56
|
+
run_template_executor,
|
57
|
+
server_config,
|
58
|
+
workload_manager,
|
59
|
+
zen_store,
|
60
|
+
)
|
54
61
|
|
55
62
|
logger = get_logger(__name__)
|
56
63
|
|
57
64
|
RUNNER_IMAGE_REPOSITORY = "zenml-runner"
|
58
65
|
|
59
66
|
|
67
|
+
class BoundedThreadPoolExecutor:
|
68
|
+
"""Thread pool executor which only allows a maximum number of concurrent tasks."""
|
69
|
+
|
70
|
+
def __init__(self, max_workers: int, **kwargs: Any) -> None:
|
71
|
+
"""Initialize the executor.
|
72
|
+
|
73
|
+
Args:
|
74
|
+
max_workers: The maximum number of workers.
|
75
|
+
**kwargs: Arguments to pass to the thread pool executor.
|
76
|
+
"""
|
77
|
+
self._executor = ThreadPoolExecutor(max_workers=max_workers, **kwargs)
|
78
|
+
self._semaphore = threading.BoundedSemaphore(value=max_workers)
|
79
|
+
|
80
|
+
def submit(
|
81
|
+
self, fn: Callable[..., Any], *args: Any, **kwargs: Any
|
82
|
+
) -> Future[Any]:
|
83
|
+
"""Submit a task to the executor.
|
84
|
+
|
85
|
+
Args:
|
86
|
+
fn: The function to execute.
|
87
|
+
*args: The arguments to pass to the function.
|
88
|
+
**kwargs: The keyword arguments to pass to the function.
|
89
|
+
|
90
|
+
Raises:
|
91
|
+
Exception: If the task submission fails.
|
92
|
+
MaxConcurrentTasksError: If the maximum number of concurrent tasks
|
93
|
+
is reached.
|
94
|
+
|
95
|
+
Returns:
|
96
|
+
The future of the task.
|
97
|
+
"""
|
98
|
+
if not self._semaphore.acquire(blocking=False):
|
99
|
+
raise MaxConcurrentTasksError(
|
100
|
+
"Maximum number of concurrent tasks reached."
|
101
|
+
)
|
102
|
+
|
103
|
+
try:
|
104
|
+
future = self._executor.submit(fn, *args, **kwargs)
|
105
|
+
except Exception:
|
106
|
+
self._semaphore.release()
|
107
|
+
raise
|
108
|
+
else:
|
109
|
+
future.add_done_callback(lambda _: self._semaphore.release())
|
110
|
+
return future
|
111
|
+
|
112
|
+
def shutdown(self, **kwargs: Any) -> None:
|
113
|
+
"""Shutdown the executor.
|
114
|
+
|
115
|
+
Args:
|
116
|
+
**kwargs: Keyword arguments to pass to the shutdown method of the
|
117
|
+
executor.
|
118
|
+
"""
|
119
|
+
self._executor.shutdown(**kwargs)
|
120
|
+
|
121
|
+
|
60
122
|
def run_template(
|
61
123
|
template: RunTemplateResponse,
|
62
124
|
auth_context: AuthContext,
|
63
|
-
background_tasks: Optional[BackgroundTasks] = None,
|
64
125
|
run_config: Optional[PipelineRunConfiguration] = None,
|
126
|
+
sync: bool = False,
|
65
127
|
) -> PipelineRunResponse:
|
66
128
|
"""Run a pipeline from a template.
|
67
129
|
|
68
130
|
Args:
|
69
131
|
template: The template to run.
|
70
132
|
auth_context: Authentication context.
|
71
|
-
background_tasks: Background tasks.
|
72
133
|
run_config: The run configuration.
|
134
|
+
sync: Whether to run the template synchronously.
|
73
135
|
|
74
136
|
Raises:
|
75
137
|
ValueError: If the template can not be run.
|
76
138
|
RuntimeError: If the server URL is not set in the server configuration.
|
139
|
+
MaxConcurrentTasksError: If the maximum number of concurrent run
|
140
|
+
template tasks is reached.
|
77
141
|
|
78
142
|
Returns:
|
79
143
|
ID of the new pipeline run.
|
@@ -241,13 +305,18 @@ def run_template(
|
|
241
305
|
)
|
242
306
|
raise
|
243
307
|
|
244
|
-
if
|
245
|
-
background_tasks.add_task(_task_with_analytics_and_error_handling)
|
246
|
-
else:
|
247
|
-
# Run synchronously if no background tasks were passed. This is probably
|
248
|
-
# when coming from a trigger which itself is already running in the
|
249
|
-
# background
|
308
|
+
if sync:
|
250
309
|
_task_with_analytics_and_error_handling()
|
310
|
+
else:
|
311
|
+
try:
|
312
|
+
run_template_executor().submit(
|
313
|
+
_task_with_analytics_and_error_handling
|
314
|
+
)
|
315
|
+
except MaxConcurrentTasksError:
|
316
|
+
zen_store().delete_run(run_id=placeholder_run.id)
|
317
|
+
raise MaxConcurrentTasksError(
|
318
|
+
"Maximum number of concurrent run template tasks reached."
|
319
|
+
) from None
|
251
320
|
|
252
321
|
return placeholder_run
|
253
322
|
|
zenml/zen_server/utils.py
CHANGED
@@ -60,6 +60,9 @@ from zenml.zen_stores.sql_zen_store import SqlZenStore
|
|
60
60
|
if TYPE_CHECKING:
|
61
61
|
from fastapi import Request
|
62
62
|
|
63
|
+
from zenml.zen_server.template_execution.utils import (
|
64
|
+
BoundedThreadPoolExecutor,
|
65
|
+
)
|
63
66
|
|
64
67
|
logger = get_logger(__name__)
|
65
68
|
|
@@ -67,6 +70,7 @@ _zen_store: Optional["SqlZenStore"] = None
|
|
67
70
|
_rbac: Optional[RBACInterface] = None
|
68
71
|
_feature_gate: Optional[FeatureGateInterface] = None
|
69
72
|
_workload_manager: Optional[WorkloadManagerInterface] = None
|
73
|
+
_run_template_executor: Optional["BoundedThreadPoolExecutor"] = None
|
70
74
|
_plugin_flavor_registry: Optional[PluginFlavorRegistry] = None
|
71
75
|
_memcache: Optional[MemoryCache] = None
|
72
76
|
|
@@ -196,6 +200,35 @@ def initialize_workload_manager() -> None:
|
|
196
200
|
_workload_manager = workload_manager_class()
|
197
201
|
|
198
202
|
|
203
|
+
def run_template_executor() -> "BoundedThreadPoolExecutor":
|
204
|
+
"""Return the initialized run template executor.
|
205
|
+
|
206
|
+
Raises:
|
207
|
+
RuntimeError: If the run template executor is not initialized.
|
208
|
+
|
209
|
+
Returns:
|
210
|
+
The run template executor.
|
211
|
+
"""
|
212
|
+
global _run_template_executor
|
213
|
+
if _run_template_executor is None:
|
214
|
+
raise RuntimeError("Run template executor not initialized")
|
215
|
+
|
216
|
+
return _run_template_executor
|
217
|
+
|
218
|
+
|
219
|
+
def initialize_run_template_executor() -> None:
|
220
|
+
"""Initialize the run template executor."""
|
221
|
+
global _run_template_executor
|
222
|
+
from zenml.zen_server.template_execution.utils import (
|
223
|
+
BoundedThreadPoolExecutor,
|
224
|
+
)
|
225
|
+
|
226
|
+
_run_template_executor = BoundedThreadPoolExecutor(
|
227
|
+
max_workers=server_config().max_concurrent_template_runs,
|
228
|
+
thread_name_prefix="zenml-run-template-executor",
|
229
|
+
)
|
230
|
+
|
231
|
+
|
199
232
|
def initialize_plugins() -> None:
|
200
233
|
"""Initialize the event plugins registry."""
|
201
234
|
plugin_flavor_registry().initialize_plugins()
|
@@ -102,9 +102,11 @@ from zenml.zen_server.utils import (
|
|
102
102
|
initialize_memcache,
|
103
103
|
initialize_plugins,
|
104
104
|
initialize_rbac,
|
105
|
+
initialize_run_template_executor,
|
105
106
|
initialize_workload_manager,
|
106
107
|
initialize_zen_store,
|
107
108
|
is_user_request,
|
109
|
+
run_template_executor,
|
108
110
|
server_config,
|
109
111
|
zen_store,
|
110
112
|
)
|
@@ -390,6 +392,7 @@ def initialize() -> None:
|
|
390
392
|
initialize_rbac()
|
391
393
|
initialize_feature_gate()
|
392
394
|
initialize_workload_manager()
|
395
|
+
initialize_run_template_executor()
|
393
396
|
initialize_plugins()
|
394
397
|
initialize_secure_headers()
|
395
398
|
initialize_memcache(cfg.memcache_max_capacity, cfg.memcache_default_expiry)
|
@@ -399,6 +402,12 @@ def initialize() -> None:
|
|
399
402
|
send_pro_workspace_status_update()
|
400
403
|
|
401
404
|
|
405
|
+
@app.on_event("shutdown")
|
406
|
+
def shutdown() -> None:
|
407
|
+
"""Shutdown the ZenML server."""
|
408
|
+
run_template_executor().shutdown(wait=True)
|
409
|
+
|
410
|
+
|
402
411
|
DASHBOARD_REDIRECT_URL = None
|
403
412
|
if (
|
404
413
|
server_config().dashboard_url
|
{zenml_nightly-0.82.0.dev20250506.dist-info → zenml_nightly-0.82.0.dev20250508.dist-info}/RECORD
RENAMED
@@ -1,10 +1,10 @@
|
|
1
1
|
zenml/README.md,sha256=827dekbOWAs1BpW7VF1a4d7EbwPbjwccX-2zdXBENZo,1777
|
2
|
-
zenml/VERSION,sha256=
|
2
|
+
zenml/VERSION,sha256=6ZapUMtAIHQPUp8zaMIANfD4zKfro3i2gKaHktdx2gk,19
|
3
3
|
zenml/__init__.py,sha256=CKEyepFK-7akXYiMrNVh92Nb01Cjs23w4_YyI6sgdc8,2242
|
4
4
|
zenml/actions/__init__.py,sha256=mrt6wPo73iKRxK754_NqsGyJ3buW7RnVeIGXr1xEw8Y,681
|
5
5
|
zenml/actions/base_action.py,sha256=UcaHev6BTuLDwuswnyaPjdA8AgUqB5xPZ-lRtuvf2FU,25553
|
6
6
|
zenml/actions/pipeline_run/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
-
zenml/actions/pipeline_run/pipeline_run_action.py,sha256=
|
7
|
+
zenml/actions/pipeline_run/pipeline_run_action.py,sha256=0V0r-PcxYkmnjZ3X2efjs2ttUo4XIgTzjmoq1ei56Ew,7461
|
8
8
|
zenml/alerter/__init__.py,sha256=2t0W_95iKIV_0iKOPLrViyynS5Cg-hswpcNw7lOCbVU,1047
|
9
9
|
zenml/alerter/base_alerter.py,sha256=7g7iK0wKDNDYrugvO3RvbvHT0vzRyTtQfJvWwV_pl3k,3015
|
10
10
|
zenml/analytics/__init__.py,sha256=jXTcNiyH1ZyUCR6NkoBmxQQnDXa2VGfkajpvfyRF6_Q,3064
|
@@ -77,7 +77,7 @@ zenml/config/retry_config.py,sha256=4UH1xqw0G6fSEbXSNKfmiFEkwadxQef9BGMe3JBm6NI,
|
|
77
77
|
zenml/config/schedule.py,sha256=qtMWa-mEo7jIKvDzQUstMwe57gdbvyWAQ7ggsoddbCA,5349
|
78
78
|
zenml/config/secret_reference_mixin.py,sha256=YvY68MTd1gE23IVprf0BLkNn62hoxcvb5nqGgc8jMkU,5871
|
79
79
|
zenml/config/secrets_store_config.py,sha256=y05zqyQhr_DGrs3IfBGa_FRoZ043hSYRT5wzrx-zHTU,2818
|
80
|
-
zenml/config/server_config.py,sha256=
|
80
|
+
zenml/config/server_config.py,sha256=or-LKYFl-9yE3MEq_yPa5aCCu3d5_f0tL9MqPtb_3-c,31852
|
81
81
|
zenml/config/settings_resolver.py,sha256=PR9BRm_x1dy7nVKa9UqpeFdck8IEATSW6aWT8FKd-DI,4278
|
82
82
|
zenml/config/source.py,sha256=RzUw8lin8QztUjz-AdoCzVM5Om_cSSPuroaPx-qAO4w,8226
|
83
83
|
zenml/config/step_configurations.py,sha256=mngjobhHRj88f3klMdz6iw2mOj9wzYUPIV8Rp_2hV3g,10433
|
@@ -85,7 +85,7 @@ zenml/config/step_run_info.py,sha256=KiVRSTtKmZ1GbvseDTap2imr7XwMHD3jSFVpyLNEK1I
|
|
85
85
|
zenml/config/store_config.py,sha256=Cla5p5dTB6nNlo8_OZDs9hod5hspi64vxwtZj882XgU,3559
|
86
86
|
zenml/config/strict_base_model.py,sha256=t_ULrtJF2eW7TgyYBRobl1fscwwIZXATYky8ER97ev4,860
|
87
87
|
zenml/console.py,sha256=hj_KerPQKwnyKACj0ehSqUQX0mGVCJBKE1QvCt6ik3A,1160
|
88
|
-
zenml/constants.py,sha256=
|
88
|
+
zenml/constants.py,sha256=VI_-MR69Qxx3kEgxyRWL4Tf3wNAQyPYuJwsp6Yk59_Y,16485
|
89
89
|
zenml/container_registries/__init__.py,sha256=ZSPbBIOnzhg88kQSpYgKe_POLuru14m629665-kAVAA,2200
|
90
90
|
zenml/container_registries/azure_container_registry.py,sha256=t1sfDa94Vzbyqtb1iPFNutJ2EXV5_p9CUNITasoiQ70,2667
|
91
91
|
zenml/container_registries/base_container_registry.py,sha256=-9RIkD6oXNPaU59R3PB_PtyCqsFoLPLSn5xYZmEmzbc,8915
|
@@ -110,7 +110,7 @@ zenml/event_sources/base_event.py,sha256=irrpiYi4fDYewzaXtb6_gPsqyFlYYLSap2BTGQz
|
|
110
110
|
zenml/event_sources/base_event_source.py,sha256=04ramQhcPhGD9Mo9BcJZR-b9fJb8a4wzvlPVMAb9Dyk,25893
|
111
111
|
zenml/event_sources/webhooks/__init__.py,sha256=VsHzSn1oKFaUs495ZqsKCfXiYxtaeGsnSGuvuqbGXCg,658
|
112
112
|
zenml/event_sources/webhooks/base_webhook_event_source.py,sha256=2zADrL3cNpD-akZRdemUePUnTl8pPMPVX6eFQgWeUSo,7371
|
113
|
-
zenml/exceptions.py,sha256=
|
113
|
+
zenml/exceptions.py,sha256=n69jnFh2KiQJsD5jU4mkSoxheCCu0L9g4FCf2aehzHQ,6883
|
114
114
|
zenml/experiment_trackers/__init__.py,sha256=b5XlKoRtMR1WBQVEiItolkpsa0iJ1IqxTmmRatr4YDw,1119
|
115
115
|
zenml/experiment_trackers/base_experiment_tracker.py,sha256=K92w7c0r45qLPIsA3YmwPflaIl_WTK8-_Hh_1MQiLkE,2218
|
116
116
|
zenml/feature_stores/__init__.py,sha256=tSW7YnDa3NDnlkX3yA_CTdX7ocWB9gsfF-7X9sc6i8Y,1415
|
@@ -768,7 +768,7 @@ zenml/utils/daemon.py,sha256=GZ7Dx6GLHK04SR50wBxpKYmFhxPBfdLWxJiAWzJC6cM,11863
|
|
768
768
|
zenml/utils/dashboard_utils.py,sha256=V4pas-zgMn3vOpXWZ-yoW11ZLZi__oFQw9jvhiXhK1A,8345
|
769
769
|
zenml/utils/deprecation_utils.py,sha256=QcWkOnzIRDKPOfkr523n3l2MoY2wE0LIPfbx99t4Gmg,6343
|
770
770
|
zenml/utils/dict_utils.py,sha256=i7KAaKrkaWA_cG5IvVfMnr0CwWlBJ7KAsGvP2wxjZI8,2667
|
771
|
-
zenml/utils/docker_utils.py,sha256=
|
771
|
+
zenml/utils/docker_utils.py,sha256=_zKOVeTWuKJiQVtBP7y-6e4-kBfeWUAvXeM0ujXxDMM,14349
|
772
772
|
zenml/utils/downloaded_repository_context.py,sha256=GyPOzC8M3SaEGnnbPgEgJhUW-m5hx9rLScnCiGw6_PY,1504
|
773
773
|
zenml/utils/enum_utils.py,sha256=0fA0B9v9Wjutuqlu_owUoOit1utIw2UH5J6YHXSqhLU,1368
|
774
774
|
zenml/utils/env_utils.py,sha256=2--2DDUt3gPOvCNVyobBtAciikQ0OEXs5WWp7NvYuKo,5276
|
@@ -1012,7 +1012,7 @@ zenml/zen_server/deploy/docker/docker_provider.py,sha256=18pNpxvP8xqbxS_KxvYTEIu
|
|
1012
1012
|
zenml/zen_server/deploy/docker/docker_zen_server.py,sha256=313IXHgZLBPZx-lS9AF0CH0sSdoy3P1htS_d4ZXGuKw,7480
|
1013
1013
|
zenml/zen_server/deploy/exceptions.py,sha256=tX0GNnLB_GMkeN7zGNlJRwtlrpZ5Slvyj_unVYVmGxk,1396
|
1014
1014
|
zenml/zen_server/download_utils.py,sha256=g366TqytIWR4L4u9dd0jg-ouSWpDwdAh_-F2zryFzfo,4224
|
1015
|
-
zenml/zen_server/exceptions.py,sha256=
|
1015
|
+
zenml/zen_server/exceptions.py,sha256=hP8zJBofQljxPByFIa4tKpVjKdCAMJlKvk_5Opgusqg,9718
|
1016
1016
|
zenml/zen_server/feature_gate/__init__.py,sha256=yabe4fBY6NSusn-QlKQDLOvXVLERNpcAQgigsyWQIbQ,612
|
1017
1017
|
zenml/zen_server/feature_gate/endpoint_utils.py,sha256=o6sBVlqqlc9KokMaEsRTYeMra7f2a6kCt3FrB-oHhCw,2227
|
1018
1018
|
zenml/zen_server/feature_gate/feature_gate_interface.py,sha256=XCgsqUN5yYCipodHCIDmCHRhyYMyt483Pp5mdpqzwHA,1647
|
@@ -1044,7 +1044,7 @@ zenml/zen_server/routers/pipelines_endpoints.py,sha256=R6OM-0Tc6ZNPzQmLs5MWTJIE4
|
|
1044
1044
|
zenml/zen_server/routers/plugin_endpoints.py,sha256=vgIdA0kdYsf8PeF_pqDaqEYnIi2mlYALAv4uB9Nn7S0,3239
|
1045
1045
|
zenml/zen_server/routers/projects_endpoints.py,sha256=iIgCg_0_iR5OddgULvsP4xxMOOmEGmtCuSKYZVRE9f4,8464
|
1046
1046
|
zenml/zen_server/routers/run_metadata_endpoints.py,sha256=UTWQvweZTGuZnLrqhbIRYQ-z_TfOPY3Kn9p4YwU0tqw,3662
|
1047
|
-
zenml/zen_server/routers/run_templates_endpoints.py,sha256=
|
1047
|
+
zenml/zen_server/routers/run_templates_endpoints.py,sha256=rEREmFmG38O_w6ktVJU5iu-dguGZpSC8RN9qH4WkEsA,8254
|
1048
1048
|
zenml/zen_server/routers/runs_endpoints.py,sha256=YoTqWm-Mx97q8ZMYXgIY8gr2ICJpRlk6DxxHKN1utFU,12631
|
1049
1049
|
zenml/zen_server/routers/schedule_endpoints.py,sha256=UXt6TIEX0PYhLoBgU-n5kIvWckX1BY_P5uUA_lK9J9A,5782
|
1050
1050
|
zenml/zen_server/routers/secrets_endpoints.py,sha256=diYTC-jl6Hxd_BHVaNsPf2ZcWUwC99naWHsM1xRjR-g,9198
|
@@ -1064,10 +1064,10 @@ zenml/zen_server/routers/webhook_endpoints.py,sha256=KOJsuykv_TMjL3oEItpC4OWWP75
|
|
1064
1064
|
zenml/zen_server/secure_headers.py,sha256=glh6QujnjyeoH1_FK-tAS-105G-qKS_34AqSzqJ6TRc,4182
|
1065
1065
|
zenml/zen_server/template_execution/__init__.py,sha256=79knXLKfegsvVSVSWecpqrepq6iAavTUA4hKuiDk-WE,613
|
1066
1066
|
zenml/zen_server/template_execution/runner_entrypoint_configuration.py,sha256=Y8aYJhqqs8Kv8I1q-dM1WemS5VBIfyoaaYH_YkzC7iY,1541
|
1067
|
-
zenml/zen_server/template_execution/utils.py,sha256=
|
1067
|
+
zenml/zen_server/template_execution/utils.py,sha256=jx_FdkrXKI-LOG1DykedhpNPwoUm_iFDJF9r1UVaE_o,19680
|
1068
1068
|
zenml/zen_server/template_execution/workload_manager_interface.py,sha256=CL9c7z8ajuZE01DaHmdCDCZmsroDcTarvN-nE8jv6qQ,2590
|
1069
|
-
zenml/zen_server/utils.py,sha256=
|
1070
|
-
zenml/zen_server/zen_server_api.py,sha256=
|
1069
|
+
zenml/zen_server/utils.py,sha256=yOwPI0DxzDIxF7Ppnty_DuGMWYJ_ubHUNWfbTQ1_q9Q,18461
|
1070
|
+
zenml/zen_server/zen_server_api.py,sha256=1_YHOUmBulXuHWCxDLYtDCMxGze159UmU3f05643PSg,18182
|
1071
1071
|
zenml/zen_stores/__init__.py,sha256=6LTgH6XwDeDxKqVJ1JTfGhmS8II1NLopPloINGmdyI0,691
|
1072
1072
|
zenml/zen_stores/base_zen_store.py,sha256=AplsW2NR-G9_CU54XvNTQJo4W0KJ5TJV22cjKW4n2BY,16124
|
1073
1073
|
zenml/zen_stores/migrations/README.md,sha256=x04jsb6EOP6PBEGMQlDELiqKEham2O-iztAs9AylMFc,4898
|
@@ -1318,8 +1318,8 @@ zenml/zen_stores/secrets_stores/sql_secrets_store.py,sha256=LPFW757WCJLP1S8vrvjs
|
|
1318
1318
|
zenml/zen_stores/sql_zen_store.py,sha256=biOoDb2_zYmpsN-J-FSlKICYdwM9KDIe-_KN_yDf_mA,441414
|
1319
1319
|
zenml/zen_stores/template_utils.py,sha256=GWBP5QEOyvhzndS_MLPmvh28sQaOPpPoZFXCIX9CRL4,9065
|
1320
1320
|
zenml/zen_stores/zen_store_interface.py,sha256=fF_uL_FplnvGvM5o3jOQ8i1zHXhuhKLL2n4nvIKSR7E,92090
|
1321
|
-
zenml_nightly-0.82.0.
|
1322
|
-
zenml_nightly-0.82.0.
|
1323
|
-
zenml_nightly-0.82.0.
|
1324
|
-
zenml_nightly-0.82.0.
|
1325
|
-
zenml_nightly-0.82.0.
|
1321
|
+
zenml_nightly-0.82.0.dev20250508.dist-info/LICENSE,sha256=wbnfEnXnafPbqwANHkV6LUsPKOtdpsd-SNw37rogLtc,11359
|
1322
|
+
zenml_nightly-0.82.0.dev20250508.dist-info/METADATA,sha256=HwiVOaLegimi0ZV8nGTInes1CvJnC-FMDRC-eu9bAgw,24315
|
1323
|
+
zenml_nightly-0.82.0.dev20250508.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
1324
|
+
zenml_nightly-0.82.0.dev20250508.dist-info/entry_points.txt,sha256=QK3ETQE0YswAM2mWypNMOv8TLtr7EjnqAFq1br_jEFE,43
|
1325
|
+
zenml_nightly-0.82.0.dev20250508.dist-info/RECORD,,
|
{zenml_nightly-0.82.0.dev20250506.dist-info → zenml_nightly-0.82.0.dev20250508.dist-info}/LICENSE
RENAMED
File without changes
|
{zenml_nightly-0.82.0.dev20250506.dist-info → zenml_nightly-0.82.0.dev20250508.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|