zenml-nightly 0.84.1.dev20250805__py3-none-any.whl → 0.84.1.dev20250806__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.
@@ -95,7 +95,7 @@ def add_local_stores_mount(
95
95
 
96
96
 
97
97
  def build_pod_manifest(
98
- pod_name: str,
98
+ pod_name: Optional[str],
99
99
  image_name: str,
100
100
  command: List[str],
101
101
  args: List[str],
@@ -262,90 +262,6 @@ def add_pod_settings(
262
262
  setattr(pod_spec, key, value)
263
263
 
264
264
 
265
- def build_cron_job_manifest(
266
- cron_expression: str,
267
- pod_name: str,
268
- image_name: str,
269
- command: List[str],
270
- args: List[str],
271
- privileged: bool,
272
- pod_settings: Optional[KubernetesPodSettings] = None,
273
- service_account_name: Optional[str] = None,
274
- env: Optional[Dict[str, str]] = None,
275
- labels: Optional[Dict[str, str]] = None,
276
- mount_local_stores: bool = False,
277
- successful_jobs_history_limit: Optional[int] = None,
278
- failed_jobs_history_limit: Optional[int] = None,
279
- ttl_seconds_after_finished: Optional[int] = None,
280
- termination_grace_period_seconds: Optional[int] = 30,
281
- ) -> k8s_client.V1CronJob:
282
- """Create a manifest for launching a pod as scheduled CRON job.
283
-
284
- Args:
285
- cron_expression: CRON job schedule expression, e.g. "* * * * *".
286
- pod_name: Name of the pod.
287
- image_name: Name of the Docker image.
288
- command: Command to execute the entrypoint in the pod.
289
- args: Arguments provided to the entrypoint command.
290
- privileged: Whether to run the container in privileged mode.
291
- pod_settings: Optional settings for the pod.
292
- service_account_name: Optional name of a service account.
293
- Can be used to assign certain roles to a pod, e.g., to allow it to
294
- run Kubernetes commands from within the cluster.
295
- env: Environment variables to set.
296
- labels: Labels to add to the pod.
297
- mount_local_stores: Whether to mount the local stores path inside the
298
- pod.
299
- successful_jobs_history_limit: The number of successful jobs to retain.
300
- failed_jobs_history_limit: The number of failed jobs to retain.
301
- ttl_seconds_after_finished: The amount of seconds to keep finished jobs
302
- before deleting them.
303
- termination_grace_period_seconds: The amount of seconds to wait for a
304
- pod to shutdown gracefully.
305
-
306
- Returns:
307
- CRON job manifest.
308
- """
309
- pod_manifest = build_pod_manifest(
310
- pod_name=pod_name,
311
- image_name=image_name,
312
- command=command,
313
- args=args,
314
- privileged=privileged,
315
- pod_settings=pod_settings,
316
- service_account_name=service_account_name,
317
- env=env,
318
- labels=labels,
319
- mount_local_stores=mount_local_stores,
320
- termination_grace_period_seconds=termination_grace_period_seconds,
321
- )
322
-
323
- job_spec = k8s_client.V1CronJobSpec(
324
- schedule=cron_expression,
325
- successful_jobs_history_limit=successful_jobs_history_limit,
326
- failed_jobs_history_limit=failed_jobs_history_limit,
327
- job_template=k8s_client.V1JobTemplateSpec(
328
- metadata=pod_manifest.metadata,
329
- spec=k8s_client.V1JobSpec(
330
- template=k8s_client.V1PodTemplateSpec(
331
- metadata=pod_manifest.metadata,
332
- spec=pod_manifest.spec,
333
- ),
334
- ttl_seconds_after_finished=ttl_seconds_after_finished,
335
- ),
336
- ),
337
- )
338
-
339
- job_manifest = k8s_client.V1CronJob(
340
- kind="CronJob",
341
- api_version="batch/v1",
342
- metadata=pod_manifest.metadata,
343
- spec=job_spec,
344
- )
345
-
346
- return job_manifest
347
-
348
-
349
265
  def build_role_binding_manifest_for_service_account(
350
266
  name: str,
351
267
  role_name: str,
@@ -475,6 +391,7 @@ def build_job_manifest(
475
391
  backoff_limit: Optional[int] = None,
476
392
  ttl_seconds_after_finished: Optional[int] = None,
477
393
  labels: Optional[Dict[str, str]] = None,
394
+ annotations: Optional[Dict[str, str]] = None,
478
395
  active_deadline_seconds: Optional[int] = None,
479
396
  pod_failure_policy: Optional[Dict[str, Any]] = None,
480
397
  owner_references: Optional[List[k8s_client.V1OwnerReference]] = None,
@@ -487,6 +404,7 @@ def build_job_manifest(
487
404
  backoff_limit: The backoff limit for the job.
488
405
  ttl_seconds_after_finished: The TTL seconds after finished for the job.
489
406
  labels: The labels to use for the job.
407
+ annotations: The annotations to use for the job.
490
408
  active_deadline_seconds: The active deadline seconds for the job.
491
409
  pod_failure_policy: The pod failure policy for the job.
492
410
  owner_references: The owner references for the job.
@@ -505,7 +423,57 @@ def build_job_manifest(
505
423
  job_metadata = k8s_client.V1ObjectMeta(
506
424
  name=job_name,
507
425
  labels=labels,
426
+ annotations=annotations,
508
427
  owner_references=owner_references,
509
428
  )
510
429
 
511
430
  return k8s_client.V1Job(spec=job_spec, metadata=job_metadata)
431
+
432
+
433
+ def job_template_manifest_from_job(
434
+ job: k8s_client.V1Job,
435
+ ) -> k8s_client.V1JobTemplateSpec:
436
+ """Build a Kubernetes job template manifest from a job.
437
+
438
+ Args:
439
+ job: The job manifest to build the template from.
440
+
441
+ Returns:
442
+ The job template manifest.
443
+ """
444
+ return k8s_client.V1JobTemplateSpec(
445
+ metadata=job.metadata,
446
+ spec=job.spec,
447
+ )
448
+
449
+
450
+ def build_cron_job_manifest(
451
+ job_template: k8s_client.V1JobTemplateSpec,
452
+ cron_expression: str,
453
+ successful_jobs_history_limit: Optional[int] = None,
454
+ failed_jobs_history_limit: Optional[int] = None,
455
+ ) -> k8s_client.V1CronJob:
456
+ """Build a Kubernetes cron job manifest.
457
+
458
+ Args:
459
+ job_template: The job template to use for the cron job.
460
+ cron_expression: The cron expression to use for the cron job.
461
+ successful_jobs_history_limit: The number of successful jobs to keep.
462
+ failed_jobs_history_limit: The number of failed jobs to keep.
463
+
464
+ Returns:
465
+ The Kubernetes cron job manifest.
466
+ """
467
+ spec = k8s_client.V1CronJobSpec(
468
+ schedule=cron_expression,
469
+ successful_jobs_history_limit=successful_jobs_history_limit,
470
+ failed_jobs_history_limit=failed_jobs_history_limit,
471
+ job_template=job_template,
472
+ )
473
+
474
+ return k8s_client.V1CronJob(
475
+ kind="CronJob",
476
+ api_version="batch/v1",
477
+ metadata=job_template.metadata,
478
+ spec=spec,
479
+ )
@@ -13,6 +13,7 @@
13
13
  # permissions and limitations under the License.
14
14
  """Kubernetes step operator implementation."""
15
15
 
16
+ import random
16
17
  from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Type, cast
17
18
 
18
19
  from kubernetes import client as k8s_client
@@ -20,13 +21,21 @@ from kubernetes import client as k8s_client
20
21
  from zenml.config.base_settings import BaseSettings
21
22
  from zenml.config.build_configuration import BuildConfiguration
22
23
  from zenml.enums import StackComponentType
24
+ from zenml.integrations.kubernetes.constants import (
25
+ STEP_NAME_ANNOTATION_KEY,
26
+ STEP_OPERATOR_ANNOTATION_KEY,
27
+ )
23
28
  from zenml.integrations.kubernetes.flavors import (
24
29
  KubernetesStepOperatorConfig,
25
30
  KubernetesStepOperatorSettings,
26
31
  )
27
- from zenml.integrations.kubernetes.orchestrators import kube_utils
32
+ from zenml.integrations.kubernetes.orchestrators import (
33
+ kube_utils,
34
+ )
28
35
  from zenml.integrations.kubernetes.orchestrators.manifest_utils import (
36
+ build_job_manifest,
29
37
  build_pod_manifest,
38
+ pod_template_manifest_from_pod,
30
39
  )
31
40
  from zenml.logger import get_logger
32
41
  from zenml.stack import Stack, StackValidator
@@ -174,6 +183,15 @@ class KubernetesStepOperator(BaseStepOperator):
174
183
  """
175
184
  return k8s_client.CoreV1Api(self.get_kube_client())
176
185
 
186
+ @property
187
+ def _k8s_batch_api(self) -> k8s_client.BatchV1Api:
188
+ """Getter for the Kubernetes Batch API client.
189
+
190
+ Returns:
191
+ The Kubernetes Batch API client.
192
+ """
193
+ return k8s_client.BatchV1Api(self.get_kube_client())
194
+
177
195
  def launch(
178
196
  self,
179
197
  info: "StepRunInfo",
@@ -194,53 +212,77 @@ class KubernetesStepOperator(BaseStepOperator):
194
212
  image_name = info.get_image(
195
213
  key=KUBERNETES_STEP_OPERATOR_DOCKER_IMAGE_KEY
196
214
  )
197
-
198
- pod_name = f"{info.run_name}_{info.pipeline_step_name}"
199
- pod_name = kube_utils.sanitize_pod_name(
200
- pod_name, namespace=self.config.kubernetes_namespace
201
- )
202
-
203
215
  command = entrypoint_command[:3]
204
216
  args = entrypoint_command[3:]
205
217
 
206
- # Create and run the orchestrator pod.
218
+ step_labels = {
219
+ "run_id": kube_utils.sanitize_label(str(info.run_id)),
220
+ "run_name": kube_utils.sanitize_label(str(info.run_name)),
221
+ "pipeline": kube_utils.sanitize_label(info.pipeline.name),
222
+ "step_name": kube_utils.sanitize_label(info.pipeline_step_name),
223
+ }
224
+ step_annotations = {
225
+ STEP_NAME_ANNOTATION_KEY: info.pipeline_step_name,
226
+ STEP_OPERATOR_ANNOTATION_KEY: str(self.id),
227
+ }
228
+
229
+ # We set some default minimum memory resource requests for the step pod
230
+ # here if the user has not specified any, because the step pod takes up
231
+ # some memory resources itself and, if not specified, the pod will be
232
+ # scheduled on any node regardless of available memory and risk
233
+ # negatively impacting or even crashing the node due to memory pressure.
234
+ pod_settings = kube_utils.apply_default_resource_requests(
235
+ memory="400Mi",
236
+ pod_settings=settings.pod_settings,
237
+ )
238
+
207
239
  pod_manifest = build_pod_manifest(
208
- pod_name=pod_name,
240
+ pod_name=None,
209
241
  image_name=image_name,
210
242
  command=command,
211
243
  args=args,
244
+ env=environment,
212
245
  privileged=settings.privileged,
246
+ pod_settings=pod_settings,
213
247
  service_account_name=settings.service_account_name,
214
- pod_settings=settings.pod_settings,
215
- env=environment,
216
- mount_local_stores=False,
217
- labels={
218
- "run_id": kube_utils.sanitize_label(str(info.run_id)),
219
- "pipeline": kube_utils.sanitize_label(info.pipeline.name),
220
- },
248
+ labels=step_labels,
221
249
  )
222
250
 
223
- kube_utils.create_and_wait_for_pod_to_start(
224
- core_api=self._k8s_core_api,
225
- pod_display_name=f"pod of step `{info.pipeline_step_name}`",
226
- pod_name=pod_name,
227
- pod_manifest=pod_manifest,
251
+ job_name = settings.job_name_prefix or ""
252
+ random_prefix = "".join(random.choices("0123456789abcdef", k=8))
253
+ job_name += f"-{random_prefix}-{info.pipeline_step_name}-{info.pipeline.name}-step-operator"
254
+ # The job name will be used as a label on the pods, so we need to make
255
+ # sure it doesn't exceed the label length limit
256
+ job_name = kube_utils.sanitize_label(job_name)
257
+
258
+ job_manifest = build_job_manifest(
259
+ job_name=job_name,
260
+ pod_template=pod_template_manifest_from_pod(pod_manifest),
261
+ # The orchestrator already handles retries, so we don't need to
262
+ # retry the step operator job.
263
+ backoff_limit=0,
264
+ ttl_seconds_after_finished=settings.ttl_seconds_after_finished,
265
+ active_deadline_seconds=settings.active_deadline_seconds,
266
+ labels=step_labels,
267
+ annotations=step_annotations,
268
+ )
269
+
270
+ kube_utils.create_job(
271
+ batch_api=self._k8s_batch_api,
228
272
  namespace=self.config.kubernetes_namespace,
229
- startup_max_retries=settings.pod_failure_max_retries,
230
- startup_failure_delay=settings.pod_failure_retry_delay,
231
- startup_failure_backoff=settings.pod_failure_backoff,
232
- startup_timeout=settings.pod_startup_timeout,
273
+ job_manifest=job_manifest,
233
274
  )
234
275
 
235
276
  logger.info(
236
- "Waiting for pod of step `%s` to finish...",
237
- info.pipeline_step_name,
277
+ "Waiting for step operator job `%s` to finish...",
278
+ job_name,
238
279
  )
239
- kube_utils.wait_pod(
240
- kube_client_fn=self.get_kube_client,
241
- pod_name=pod_name,
280
+ kube_utils.wait_for_job_to_finish(
281
+ batch_api=self._k8s_batch_api,
282
+ core_api=self._k8s_core_api,
242
283
  namespace=self.config.kubernetes_namespace,
243
- exit_condition_lambda=kube_utils.pod_is_done,
284
+ job_name=job_name,
285
+ fail_on_container_waiting_reasons=settings.fail_on_container_waiting_reasons,
244
286
  stream_logs=True,
245
287
  )
246
- logger.info("Pod of step `%s` completed.", info.pipeline_step_name)
288
+ logger.info("Step operator job completed.")
@@ -48,6 +48,7 @@ from zenml.exceptions import DoesNotExistException
48
48
  from zenml.logger import get_logger
49
49
  from zenml.models import (
50
50
  LogsRequest,
51
+ LogsResponse,
51
52
  PipelineDeploymentResponse,
52
53
  PipelineRunUpdate,
53
54
  )
@@ -702,7 +703,9 @@ class PipelineLogsStorageContext:
702
703
 
703
704
 
704
705
  def setup_orchestrator_logging(
705
- run_id: str, deployment: "PipelineDeploymentResponse"
706
+ run_id: UUID,
707
+ deployment: "PipelineDeploymentResponse",
708
+ logs_response: Optional[LogsResponse] = None,
706
709
  ) -> Any:
707
710
  """Set up logging for an orchestrator environment.
708
711
 
@@ -712,61 +715,61 @@ def setup_orchestrator_logging(
712
715
  Args:
713
716
  run_id: The pipeline run ID.
714
717
  deployment: The deployment of the pipeline run.
718
+ logs_response: The logs response to continue from.
715
719
 
716
720
  Returns:
717
721
  The logs context (PipelineLogsStorageContext)
718
722
  """
719
723
  try:
720
- step_logging_enabled = True
724
+ logging_enabled = True
721
725
 
722
- # Check whether logging is enabled
723
726
  if handle_bool_env_var(ENV_ZENML_DISABLE_PIPELINE_LOGS_STORAGE, False):
724
- step_logging_enabled = False
727
+ logging_enabled = False
725
728
  else:
726
729
  if (
727
730
  deployment.pipeline_configuration.enable_pipeline_logs
728
731
  is not None
729
732
  ):
730
- step_logging_enabled = (
733
+ logging_enabled = (
731
734
  deployment.pipeline_configuration.enable_pipeline_logs
732
735
  )
733
736
 
734
- if not step_logging_enabled:
737
+ if not logging_enabled:
735
738
  return nullcontext()
736
739
 
737
740
  # Fetch the active stack
738
741
  client = Client()
739
742
  active_stack = client.active_stack
740
743
 
741
- # Configure the logs
742
- logs_uri = prepare_logs_uri(
743
- artifact_store=active_stack.artifact_store,
744
- )
744
+ if logs_response:
745
+ logs_uri = logs_response.uri
746
+ else:
747
+ logs_uri = prepare_logs_uri(
748
+ artifact_store=active_stack.artifact_store,
749
+ )
750
+ logs_model = LogsRequest(
751
+ uri=logs_uri,
752
+ source="orchestrator",
753
+ artifact_store_id=active_stack.artifact_store.id,
754
+ )
755
+
756
+ # Add orchestrator logs to the pipeline run
757
+ try:
758
+ run_update = PipelineRunUpdate(add_logs=[logs_model])
759
+ client.zen_store.update_run(
760
+ run_id=run_id, run_update=run_update
761
+ )
762
+ except Exception as e:
763
+ logger.error(
764
+ f"Failed to add orchestrator logs to the run {run_id}: {e}"
765
+ )
766
+ raise e
745
767
 
746
- logs_context = PipelineLogsStorageContext(
768
+ return PipelineLogsStorageContext(
747
769
  logs_uri=logs_uri,
748
770
  artifact_store=active_stack.artifact_store,
749
771
  prepend_step_name=False,
750
772
  )
751
-
752
- logs_model = LogsRequest(
753
- uri=logs_uri,
754
- source="orchestrator",
755
- artifact_store_id=active_stack.artifact_store.id,
756
- )
757
-
758
- # Add orchestrator logs to the pipeline run
759
- try:
760
- run_update = PipelineRunUpdate(add_logs=[logs_model])
761
- client.zen_store.update_run(
762
- run_id=UUID(run_id), run_update=run_update
763
- )
764
- except Exception as e:
765
- logger.error(
766
- f"Failed to add orchestrator logs to the run {run_id}: {e}"
767
- )
768
- raise e
769
- return logs_context
770
773
  except Exception as e:
771
774
  logger.error(
772
775
  f"Failed to setup orchestrator logging for run {run_id}: {e}"
zenml/steps/base_step.py CHANGED
@@ -104,8 +104,8 @@ class BaseStep:
104
104
  enable_artifact_metadata: Optional[bool] = None,
105
105
  enable_artifact_visualization: Optional[bool] = None,
106
106
  enable_step_logs: Optional[bool] = None,
107
- experiment_tracker: Optional[str] = None,
108
- step_operator: Optional[str] = None,
107
+ experiment_tracker: Optional[Union[bool, str]] = None,
108
+ step_operator: Optional[Union[bool, str]] = None,
109
109
  parameters: Optional[Dict[str, Any]] = None,
110
110
  output_materializers: Optional[
111
111
  "OutputMaterializersSpecification"
@@ -594,8 +594,8 @@ class BaseStep:
594
594
  enable_artifact_metadata: Optional[bool] = None,
595
595
  enable_artifact_visualization: Optional[bool] = None,
596
596
  enable_step_logs: Optional[bool] = None,
597
- experiment_tracker: Optional[str] = None,
598
- step_operator: Optional[str] = None,
597
+ experiment_tracker: Optional[Union[bool, str]] = None,
598
+ step_operator: Optional[Union[bool, str]] = None,
599
599
  parameters: Optional[Dict[str, Any]] = None,
600
600
  output_materializers: Optional[
601
601
  "OutputMaterializersSpecification"
@@ -728,8 +728,8 @@ class BaseStep:
728
728
  enable_artifact_metadata: Optional[bool] = None,
729
729
  enable_artifact_visualization: Optional[bool] = None,
730
730
  enable_step_logs: Optional[bool] = None,
731
- experiment_tracker: Optional[str] = None,
732
- step_operator: Optional[str] = None,
731
+ experiment_tracker: Optional[Union[bool, str]] = None,
732
+ step_operator: Optional[Union[bool, str]] = None,
733
733
  parameters: Optional[Dict[str, Any]] = None,
734
734
  output_materializers: Optional[
735
735
  "OutputMaterializersSpecification"
@@ -64,8 +64,8 @@ def step(
64
64
  enable_artifact_metadata: Optional[bool] = None,
65
65
  enable_artifact_visualization: Optional[bool] = None,
66
66
  enable_step_logs: Optional[bool] = None,
67
- experiment_tracker: Optional[str] = None,
68
- step_operator: Optional[str] = None,
67
+ experiment_tracker: Optional[Union[bool, str]] = None,
68
+ step_operator: Optional[Union[bool, str]] = None,
69
69
  output_materializers: Optional["OutputMaterializersSpecification"] = None,
70
70
  settings: Optional[Dict[str, "SettingsOrDict"]] = None,
71
71
  extra: Optional[Dict[str, Any]] = None,
@@ -85,8 +85,8 @@ def step(
85
85
  enable_artifact_metadata: Optional[bool] = None,
86
86
  enable_artifact_visualization: Optional[bool] = None,
87
87
  enable_step_logs: Optional[bool] = None,
88
- experiment_tracker: Optional[str] = None,
89
- step_operator: Optional[str] = None,
88
+ experiment_tracker: Optional[Union[bool, str]] = None,
89
+ step_operator: Optional[Union[bool, str]] = None,
90
90
  output_materializers: Optional["OutputMaterializersSpecification"] = None,
91
91
  settings: Optional[Dict[str, "SettingsOrDict"]] = None,
92
92
  extra: Optional[Dict[str, Any]] = None,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: zenml-nightly
3
- Version: 0.84.1.dev20250805
3
+ Version: 0.84.1.dev20250806
4
4
  Summary: ZenML: Write production-ready ML code.
5
5
  License: Apache-2.0
6
6
  Keywords: machine learning,production,pipeline,mlops,devops
@@ -1,5 +1,5 @@
1
1
  zenml/README.md,sha256=827dekbOWAs1BpW7VF1a4d7EbwPbjwccX-2zdXBENZo,1777
2
- zenml/VERSION,sha256=JgD203b6qhEP0gZ0HZYxfmgZpi3b8WAfHxs7VQjEn5I,19
2
+ zenml/VERSION,sha256=KMpAeP_9YhseXa7vHadCSXfPfoKYBJW_PucPxE3onyI,19
3
3
  zenml/__init__.py,sha256=r7JUg2SVDf_dPhS7iU6vudKusEqK4ics7_jFMZhq0o4,2731
4
4
  zenml/actions/__init__.py,sha256=mrt6wPo73iKRxK754_NqsGyJ3buW7RnVeIGXr1xEw8Y,681
5
5
  zenml/actions/base_action.py,sha256=UcaHev6BTuLDwuswnyaPjdA8AgUqB5xPZ-lRtuvf2FU,25553
@@ -333,21 +333,23 @@ zenml/integrations/kubeflow/orchestrators/__init__.py,sha256=J879DBt9WbpojBTdOXy
333
333
  zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py,sha256=lPQSQn6Jp2oJxULG_G8UcbE_bgw_9XTlAjdsujahWbY,38195
334
334
  zenml/integrations/kubeflow/orchestrators/local_deployment_utils.py,sha256=qszoOdvBpgIp40XkncphXAr9dRKnyZzGiz2mJ56bYmw,15448
335
335
  zenml/integrations/kubernetes/__init__.py,sha256=k1bfrdI1u5RBnAh7yT4w-m-4SWgZ7b4L5uu7dPRc0SI,1809
336
+ zenml/integrations/kubernetes/constants.py,sha256=7pejIdiOAwcQNkWOkqBta_FFMllzsKte5l2fcFdaqN8,1232
336
337
  zenml/integrations/kubernetes/flavors/__init__.py,sha256=a5gU45qCj3FkLwl_uVjlIkL_2F5DHk-w1gdcZrvVjBI,1266
337
- zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py,sha256=zhcn5d3N4VmlVq-cxtyXtp63AKcwVfKWg-jAlkx2B10,14420
338
- zenml/integrations/kubernetes/flavors/kubernetes_step_operator_flavor.py,sha256=Vp7kY9t2TWdWRBNSf_sJKPL5dZnhuHnskPhQ7KBuGPY,6384
338
+ zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py,sha256=O_fnKZ6jPItdOyhgxCTJTD7gpIx1MHhU9_22Cg5x0Ig,15266
339
+ zenml/integrations/kubernetes/flavors/kubernetes_step_operator_flavor.py,sha256=unk8I8uYXn3pJS3HajEhZodhsdFvvhCTs5NzzqkQk3Q,7453
339
340
  zenml/integrations/kubernetes/orchestrators/__init__.py,sha256=TJID3OTieZBox36WpQpzD0jdVRA_aZVcs_bNtfXS8ik,811
340
- zenml/integrations/kubernetes/orchestrators/kube_utils.py,sha256=Gbw1mT0z-F_t2iQKPmLntGhdNTT-CZNHO5sDb-XxE68,27709
341
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py,sha256=Agx_Thj6nByAd5p61HTf0p6SRDPOcYKSSl-_Km2EdfU,41316
342
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py,sha256=jgxnJdBVFVn6l6gSoygIoScQxyKh5cVbgXF10qFA9Nk,20809
341
+ zenml/integrations/kubernetes/orchestrators/dag_runner.py,sha256=IDumuhi9hySiTZ7oTI6hz5RlJ4kiuv3NpVYgA_pLS_Y,12044
342
+ zenml/integrations/kubernetes/orchestrators/kube_utils.py,sha256=soQPph_FWFPAwL7vpZX91cu8jEjo4xBYnafLUdMNtnw,38684
343
+ zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py,sha256=TnrKa6xnrYtAq1elyob0aRy-aTLrSjLuuOzdLSs_GFs,36811
344
+ zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py,sha256=QahXJ-cM6lrXqWs2BHMQtKQf3svqKB5l69d4D0OB4qc,24789
343
345
  zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint_configuration.py,sha256=QOwQnWCfB-t_BQ2eOZN0SakurGUd0GTMCSdUlREhk6I,2324
344
- zenml/integrations/kubernetes/orchestrators/manifest_utils.py,sha256=52Ba6MZ4lCo6CpnW0IjnFOJQNpPoVgbvIqR-x32ubew,16085
346
+ zenml/integrations/kubernetes/orchestrators/manifest_utils.py,sha256=JskjDSbR3HdTxGT3NOVi0ha7Ku3CqMkPzMJJq4IZYp0,14491
345
347
  zenml/integrations/kubernetes/pod_settings.py,sha256=s6I0sALXB7PnRqJ-nlU71o3cTm2GM1TfqsE44qhiDJY,8022
346
348
  zenml/integrations/kubernetes/serialization_utils.py,sha256=Uy30YWUU8VAizYLWk0cZKtEisSo4AzuzsyGU_KIb8PY,7044
347
349
  zenml/integrations/kubernetes/service_connectors/__init__.py,sha256=Uf6zlHIapYrRDl3xOPWQ2jA7jt85SXx1U7DmSxzxTvQ,818
348
350
  zenml/integrations/kubernetes/service_connectors/kubernetes_service_connector.py,sha256=Cv4tiVxoQOz9ex0lf3JdJrooEkgMwfDfwt5GOeNRpQU,19669
349
351
  zenml/integrations/kubernetes/step_operators/__init__.py,sha256=40utDPYAezxHsFgO0UUIT_6XpCDzDapje6OH951XsTs,806
350
- zenml/integrations/kubernetes/step_operators/kubernetes_step_operator.py,sha256=__7t6XuzedUEheUImSkX2grsDCz0YFWUJ6uxv47MXUo,8851
352
+ zenml/integrations/kubernetes/step_operators/kubernetes_step_operator.py,sha256=yNCBOwjF9zN-UeI2jTEz6zMmmtx0xiwTdq5Z1JH-Yhg,10506
351
353
  zenml/integrations/label_studio/__init__.py,sha256=sF2c9FxTDRlbcu95OxaUNKNtIhC1LgfmBRKY4jBME38,1475
352
354
  zenml/integrations/label_studio/annotators/__init__.py,sha256=YtOtSfS1_NBoLoXIygEerElBP1-B98UU0HOAEfzdRY0,821
353
355
  zenml/integrations/label_studio/annotators/label_studio_annotator.py,sha256=VkuW4zsZhHz8__P9WTTLRTF-FOmoYB-_cFqBdu-PUyA,30498
@@ -578,7 +580,7 @@ zenml/io/filesystem_registry.py,sha256=stujDg4a5k983WMwp3rj4Z4puiUco4REyVoIoMIpI
578
580
  zenml/io/local_filesystem.py,sha256=xQTZPT5cpooptUV8KiifxZojS6pWCv1-6UUxitUYb_E,7386
579
581
  zenml/logger.py,sha256=STfebaOdCGmw404gwKhwpDrrhtKDUREeerO7UtapzfE,6997
580
582
  zenml/logging/__init__.py,sha256=knhroJ2h0uHBCGzAiBBGJEiuhEA3cwI6XYBRIyXdbkQ,613
581
- zenml/logging/step_logging.py,sha256=PTAHlqNfWF-Ly0zvBxroQ3S9vOMEhjSZTzi0cmZVKqQ,27767
583
+ zenml/logging/step_logging.py,sha256=dv_lo4rNdBCHsCaYOBoVwKAorY0Rmxh_6AhcGy_Y78g,27922
582
584
  zenml/login/__init__.py,sha256=Evi7hq8tpUn57IM3iX3hYP0r8oIeEWUhS471TAOyVGs,644
583
585
  zenml/login/credentials.py,sha256=RtLmYkFQ5trbprhsO8NCRKwBA136KzGoUWY52dZP9GA,12722
584
586
  zenml/login/credentials_store.py,sha256=k55mNSqc_RaBuvLWtg5ubQAwlSbaTxTVAqoZ1OQ2YcM,24750
@@ -754,11 +756,11 @@ zenml/step_operators/__init__.py,sha256=tqj7fgnQyZubLjwUu4ITwkA-70KMQz4g37agbfF7
754
756
  zenml/step_operators/base_step_operator.py,sha256=ZRnY6lcEHY8xZskrKKdPhgKg2BlEoh2_kb8xCaM2D1g,3522
755
757
  zenml/step_operators/step_operator_entrypoint_configuration.py,sha256=wuQKmEI_ckn1CHHrxWGGdIhQyBFXG01aKC2-2b6Atjo,3690
756
758
  zenml/steps/__init__.py,sha256=KKWFOmCZGLDEikOD2E5YmDA7QHo47uPV37by21WwI0U,1453
757
- zenml/steps/base_step.py,sha256=qzW9I99PWK8brm3wdV1NEuUxGFlMvrmqNh3YjNKUkgg,44312
759
+ zenml/steps/base_step.py,sha256=6mz8ZBn4wd509KcwZeD1qdxQV4BF3wLknMMzn_g3wgg,44390
758
760
  zenml/steps/decorated_step.py,sha256=C8Ng5PCLc9eql4JF1N345HQ6LyC1qCUdTnysUTeoAJs,1315
759
761
  zenml/steps/entrypoint_function_utils.py,sha256=H0WIkHpR_R0S9gl_tWr0nX-fcBlYnm8OQ1cimvrw-qo,9555
760
762
  zenml/steps/step_context.py,sha256=sFvVVvEyKmWTrucofor8Cuxv-72jbziVaQY-OlOvFAM,15526
761
- zenml/steps/step_decorator.py,sha256=cbu7s2EZ6-yIgBlY6npour2X_CnUCkBfcXfJoiSb3iQ,6454
763
+ zenml/steps/step_decorator.py,sha256=0TKxP_oAVRizjN3JhBZ8ShFd3fSBdVPU2ijytTg1h2U,6506
762
764
  zenml/steps/step_invocation.py,sha256=ETfOaV-P4_iXGk9y1-xK54Kfg2QRYaGoj_jTyEYZfb0,4861
763
765
  zenml/steps/utils.py,sha256=UpZ5lN46Bqu1eXyVfh969M4-UBbOZjq5R7u4PkXYDZ8,18586
764
766
  zenml/types.py,sha256=LhGWJ4t3nybBk1l9Ox3tqqHbTYSuCqhkRsL5FqO6yf4,1206
@@ -1352,8 +1354,8 @@ zenml/zen_stores/secrets_stores/sql_secrets_store.py,sha256=LPFW757WCJLP1S8vrvjs
1352
1354
  zenml/zen_stores/sql_zen_store.py,sha256=-3zeByIUjIvsx3564O2gJ463512QkZl04okL3eB-nJs,491568
1353
1355
  zenml/zen_stores/template_utils.py,sha256=iCXrXpqzVTY7roqop4Eh9J7DmLW6PQeILZexmw_l3b8,10074
1354
1356
  zenml/zen_stores/zen_store_interface.py,sha256=weiSULdI9AsbCE10a5TcwtybX-BJs9hKhjPJnTapWv4,93023
1355
- zenml_nightly-0.84.1.dev20250805.dist-info/LICENSE,sha256=wbnfEnXnafPbqwANHkV6LUsPKOtdpsd-SNw37rogLtc,11359
1356
- zenml_nightly-0.84.1.dev20250805.dist-info/METADATA,sha256=jJ1Pq_B-npNNW5qFIT8aOon1RsIHxqo2E7EIUSdPF6U,24296
1357
- zenml_nightly-0.84.1.dev20250805.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
1358
- zenml_nightly-0.84.1.dev20250805.dist-info/entry_points.txt,sha256=QK3ETQE0YswAM2mWypNMOv8TLtr7EjnqAFq1br_jEFE,43
1359
- zenml_nightly-0.84.1.dev20250805.dist-info/RECORD,,
1357
+ zenml_nightly-0.84.1.dev20250806.dist-info/LICENSE,sha256=wbnfEnXnafPbqwANHkV6LUsPKOtdpsd-SNw37rogLtc,11359
1358
+ zenml_nightly-0.84.1.dev20250806.dist-info/METADATA,sha256=VZaHyV--b2EcSDdhFPJE0noToZKb34x6Cq6CKNDsSk4,24296
1359
+ zenml_nightly-0.84.1.dev20250806.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
1360
+ zenml_nightly-0.84.1.dev20250806.dist-info/entry_points.txt,sha256=QK3ETQE0YswAM2mWypNMOv8TLtr7EjnqAFq1br_jEFE,43
1361
+ zenml_nightly-0.84.1.dev20250806.dist-info/RECORD,,