zenml-nightly 0.84.3.dev20250908__py3-none-any.whl → 0.84.3.dev20250909__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 CHANGED
@@ -1 +1 @@
1
- 0.84.3.dev20250908
1
+ 0.84.3.dev20250909
zenml/cli/utils.py CHANGED
@@ -2251,7 +2251,7 @@ def get_execution_status_emoji(status: "ExecutionStatus") -> str:
2251
2251
  """
2252
2252
  from zenml.enums import ExecutionStatus
2253
2253
 
2254
- if status == ExecutionStatus.INITIALIZING:
2254
+ if status in {ExecutionStatus.INITIALIZING, ExecutionStatus.PROVISIONING}:
2255
2255
  return ":hourglass_flowing_sand:"
2256
2256
  if status == ExecutionStatus.FAILED:
2257
2257
  return ":x:"
zenml/config/compiler.py CHANGED
@@ -116,7 +116,7 @@ class Compiler:
116
116
  invocation_id: self._compile_step_invocation(
117
117
  invocation=invocation,
118
118
  stack=stack,
119
- step_config=run_configuration.steps.get(invocation_id),
119
+ step_config=(run_configuration.steps or {}).get(invocation_id),
120
120
  pipeline_configuration=pipeline.configuration,
121
121
  )
122
122
  for invocation_id, invocation in self._get_sorted_invocations(
@@ -211,7 +211,10 @@ class Compiler:
211
211
  cache_policy=config.cache_policy,
212
212
  )
213
213
 
214
- invalid_step_configs = set(config.steps) - set(pipeline.invocations)
214
+ configured_step_configs = config.steps or {}
215
+ invalid_step_configs = set(configured_step_configs) - set(
216
+ pipeline.invocations
217
+ )
215
218
  if invalid_step_configs:
216
219
  logger.warning(
217
220
  f"Configuration for step invocations {invalid_step_configs} "
@@ -220,7 +223,7 @@ class Compiler:
220
223
  )
221
224
 
222
225
  for key in invalid_step_configs:
223
- config.steps.pop(key)
226
+ configured_step_configs.pop(key)
224
227
 
225
228
  # Override `enable_cache` of all steps if set at run level
226
229
  if config.enable_cache is not None:
@@ -480,7 +483,7 @@ class Compiler:
480
483
  )
481
484
 
482
485
  parameters_to_ignore = (
483
- set(step_config.parameters) if step_config else set()
486
+ set(step_config.parameters or {}) if step_config else set()
484
487
  )
485
488
  step_configuration_overrides = invocation.finalize(
486
489
  parameters_to_ignore=parameters_to_ignore
@@ -36,24 +36,75 @@ class PipelineRunConfiguration(
36
36
  ):
37
37
  """Class for pipeline run configurations."""
38
38
 
39
- run_name: Optional[str] = None
40
- enable_cache: Optional[bool] = None
41
- enable_artifact_metadata: Optional[bool] = None
42
- enable_artifact_visualization: Optional[bool] = None
43
- enable_step_logs: Optional[bool] = None
44
- enable_pipeline_logs: Optional[bool] = None
45
- schedule: Optional[Schedule] = None
39
+ run_name: Optional[str] = Field(
40
+ default=None, description="The name of the pipeline run."
41
+ )
42
+ enable_cache: Optional[bool] = Field(
43
+ default=None,
44
+ description="Whether to enable cache for all steps of the pipeline "
45
+ "run.",
46
+ )
47
+ enable_artifact_metadata: Optional[bool] = Field(
48
+ default=None,
49
+ description="Whether to enable metadata for the output artifacts of "
50
+ "all steps of the pipeline run.",
51
+ )
52
+ enable_artifact_visualization: Optional[bool] = Field(
53
+ default=None,
54
+ description="Whether to enable visualizations for the output "
55
+ "artifacts of all steps of the pipeline run.",
56
+ )
57
+ enable_step_logs: Optional[bool] = Field(
58
+ default=None,
59
+ description="Whether to enable logs for all steps of the pipeline run.",
60
+ )
61
+ enable_pipeline_logs: Optional[bool] = Field(
62
+ default=None,
63
+ description="Whether to enable pipeline logs for the pipeline run.",
64
+ )
65
+ schedule: Optional[Schedule] = Field(
66
+ default=None, description="The schedule on which to run the pipeline."
67
+ )
46
68
  build: Union[PipelineBuildBase, UUID, None] = Field(
47
- default=None, union_mode="left_to_right"
48
- )
49
- steps: Dict[str, StepConfigurationUpdate] = {}
50
- settings: Dict[str, SerializeAsAny[BaseSettings]] = {}
51
- tags: Optional[List[Union[str, Tag]]] = None
52
- extra: Dict[str, Any] = {}
53
- model: Optional[Model] = None
54
- parameters: Optional[Dict[str, Any]] = None
55
- retry: Optional[StepRetryConfig] = None
56
- failure_hook_source: Optional[SourceWithValidator] = None
57
- success_hook_source: Optional[SourceWithValidator] = None
58
- substitutions: Dict[str, str] = {}
59
- cache_policy: Optional[CachePolicyWithValidator] = None
69
+ default=None,
70
+ union_mode="left_to_right",
71
+ description="The build to use for the pipeline run.",
72
+ )
73
+ steps: Optional[Dict[str, StepConfigurationUpdate]] = Field(
74
+ default=None,
75
+ description="Configurations for the steps of the pipeline run.",
76
+ )
77
+ settings: Optional[Dict[str, SerializeAsAny[BaseSettings]]] = Field(
78
+ default=None, description="Settings for the pipeline run."
79
+ )
80
+ tags: Optional[List[Union[str, Tag]]] = Field(
81
+ default=None, description="Tags to apply to the pipeline run."
82
+ )
83
+ extra: Optional[Dict[str, Any]] = Field(
84
+ default=None, description="Extra configurations for the pipeline run."
85
+ )
86
+ model: Optional[Model] = Field(
87
+ default=None, description="The model to use for the pipeline run."
88
+ )
89
+ parameters: Optional[Dict[str, Any]] = Field(
90
+ default=None, description="Parameters for the pipeline function."
91
+ )
92
+ retry: Optional[StepRetryConfig] = Field(
93
+ default=None,
94
+ description="The retry configuration for all steps of the pipeline run.",
95
+ )
96
+ failure_hook_source: Optional[SourceWithValidator] = Field(
97
+ default=None,
98
+ description="The failure hook source for all steps of the pipeline run.",
99
+ )
100
+ success_hook_source: Optional[SourceWithValidator] = Field(
101
+ default=None,
102
+ description="The success hook source for all steps of the pipeline run.",
103
+ )
104
+ substitutions: Optional[Dict[str, str]] = Field(
105
+ default=None, description="The substitutions for the pipeline run."
106
+ )
107
+ cache_policy: Optional[CachePolicyWithValidator] = Field(
108
+ default=None,
109
+ description="The cache policy for all steps of the pipeline run.",
110
+ )
@@ -26,6 +26,7 @@ from typing import (
26
26
 
27
27
  from pydantic import (
28
28
  ConfigDict,
29
+ Field,
29
30
  SerializeAsAny,
30
31
  field_validator,
31
32
  model_validator,
@@ -142,21 +143,68 @@ class ArtifactConfiguration(PartialArtifactConfiguration):
142
143
  class StepConfigurationUpdate(StrictBaseModel):
143
144
  """Class for step configuration updates."""
144
145
 
145
- enable_cache: Optional[bool] = None
146
- enable_artifact_metadata: Optional[bool] = None
147
- enable_artifact_visualization: Optional[bool] = None
148
- enable_step_logs: Optional[bool] = None
149
- step_operator: Optional[Union[bool, str]] = None
150
- experiment_tracker: Optional[Union[bool, str]] = None
151
- parameters: Dict[str, Any] = {}
152
- settings: Dict[str, SerializeAsAny[BaseSettings]] = {}
153
- extra: Dict[str, Any] = {}
154
- failure_hook_source: Optional[SourceWithValidator] = None
155
- success_hook_source: Optional[SourceWithValidator] = None
156
- model: Optional[Model] = None
157
- retry: Optional[StepRetryConfig] = None
158
- substitutions: Dict[str, str] = {}
159
- cache_policy: Optional[CachePolicyWithValidator] = None
146
+ enable_cache: Optional[bool] = Field(
147
+ default=None,
148
+ description="Whether to enable cache for the step.",
149
+ )
150
+ enable_artifact_metadata: Optional[bool] = Field(
151
+ default=None,
152
+ description="Whether to store metadata for the output artifacts of "
153
+ "the step.",
154
+ )
155
+ enable_artifact_visualization: Optional[bool] = Field(
156
+ default=None,
157
+ description="Whether to enable visualizations for the output "
158
+ "artifacts of the step.",
159
+ )
160
+ enable_step_logs: Optional[bool] = Field(
161
+ default=None,
162
+ description="Whether to enable logs for the step.",
163
+ )
164
+ step_operator: Optional[Union[bool, str]] = Field(
165
+ default=None,
166
+ description="The step operator to use for the step.",
167
+ )
168
+ experiment_tracker: Optional[Union[bool, str]] = Field(
169
+ default=None,
170
+ description="The experiment tracker to use for the step.",
171
+ )
172
+ parameters: Optional[Dict[str, Any]] = Field(
173
+ default=None,
174
+ description="Parameters for the step function.",
175
+ )
176
+ settings: Optional[Dict[str, SerializeAsAny[BaseSettings]]] = Field(
177
+ default=None,
178
+ description="Settings for the step.",
179
+ )
180
+ extra: Optional[Dict[str, Any]] = Field(
181
+ default=None,
182
+ description="Extra configurations for the step.",
183
+ )
184
+ failure_hook_source: Optional[SourceWithValidator] = Field(
185
+ default=None,
186
+ description="The failure hook source for the step.",
187
+ )
188
+ success_hook_source: Optional[SourceWithValidator] = Field(
189
+ default=None,
190
+ description="The success hook source for the step.",
191
+ )
192
+ model: Optional[Model] = Field(
193
+ default=None,
194
+ description="The model to use for the step.",
195
+ )
196
+ retry: Optional[StepRetryConfig] = Field(
197
+ default=None,
198
+ description="The retry configuration for the step.",
199
+ )
200
+ substitutions: Optional[Dict[str, str]] = Field(
201
+ default=None,
202
+ description="The substitutions for the step.",
203
+ )
204
+ cache_policy: Optional[CachePolicyWithValidator] = Field(
205
+ default=None,
206
+ description="The cache policy for the step.",
207
+ )
160
208
 
161
209
  outputs: Mapping[str, PartialArtifactConfiguration] = {}
162
210
 
@@ -197,6 +245,10 @@ class PartialStepConfiguration(StepConfigurationUpdate):
197
245
  """Class representing a partial step configuration."""
198
246
 
199
247
  name: str
248
+ parameters: Dict[str, Any] = {}
249
+ settings: Dict[str, SerializeAsAny[BaseSettings]] = {}
250
+ extra: Dict[str, Any] = {}
251
+ substitutions: Dict[str, str] = {}
200
252
  caching_parameters: Mapping[str, Any] = {}
201
253
  external_input_artifacts: Mapping[str, ExternalArtifactConfiguration] = {}
202
254
  model_artifacts_or_metadata: Mapping[str, ModelVersionDataLazyLoader] = {}
zenml/enums.py CHANGED
@@ -74,6 +74,7 @@ class ExecutionStatus(StrEnum):
74
74
  """Enum that represents the execution status of a step or pipeline run."""
75
75
 
76
76
  INITIALIZING = "initializing"
77
+ PROVISIONING = "provisioning"
77
78
  FAILED = "failed"
78
79
  COMPLETED = "completed"
79
80
  RUNNING = "running"
@@ -104,6 +104,11 @@ class PipelineRunRequest(ProjectScopedRequest):
104
104
  status: ExecutionStatus = Field(
105
105
  title="The status of the pipeline run.",
106
106
  )
107
+ status_reason: Optional[str] = Field(
108
+ title="The reason for the status of the pipeline run.",
109
+ default=None,
110
+ max_length=STR_FIELD_MAX_LENGTH,
111
+ )
107
112
  orchestrator_environment: Dict[str, Any] = Field(
108
113
  default={},
109
114
  title=(
@@ -131,7 +136,10 @@ class PipelineRunRequest(ProjectScopedRequest):
131
136
  Returns:
132
137
  Whether the request is a placeholder request.
133
138
  """
134
- return self.status == ExecutionStatus.INITIALIZING
139
+ return self.status in {
140
+ ExecutionStatus.INITIALIZING,
141
+ ExecutionStatus.PROVISIONING,
142
+ }
135
143
 
136
144
  model_config = ConfigDict(protected_namespaces=())
137
145
 
@@ -143,6 +151,11 @@ class PipelineRunUpdate(BaseUpdate):
143
151
  """Pipeline run update model."""
144
152
 
145
153
  status: Optional[ExecutionStatus] = None
154
+ status_reason: Optional[str] = Field(
155
+ default=None,
156
+ title="The reason for the status of the pipeline run.",
157
+ max_length=STR_FIELD_MAX_LENGTH,
158
+ )
146
159
  end_time: Optional[datetime] = None
147
160
  orchestrator_run_id: Optional[str] = None
148
161
  # TODO: we should maybe have a different update model here, the upper
@@ -169,6 +182,10 @@ class PipelineRunResponseBody(ProjectScopedResponseBody):
169
182
  status: ExecutionStatus = Field(
170
183
  title="The status of the pipeline run.",
171
184
  )
185
+ status_reason: Optional[str] = Field(
186
+ default=None,
187
+ title="The reason for the status of the pipeline run.",
188
+ )
172
189
  stack: Optional["StackResponse"] = Field(
173
190
  default=None, title="The stack that was used for this run."
174
191
  )
@@ -316,6 +316,11 @@ class BaseOrchestrator(StackComponent, ABC):
316
316
  environment=environment,
317
317
  placeholder_run=placeholder_run,
318
318
  )
319
+ if placeholder_run:
320
+ publish_pipeline_run_status_update(
321
+ pipeline_run_id=placeholder_run.id,
322
+ status=ExecutionStatus.PROVISIONING,
323
+ )
319
324
 
320
325
  if submission_result:
321
326
  if submission_result.metadata:
@@ -511,6 +516,7 @@ class BaseOrchestrator(StackComponent, ABC):
511
516
  publish_pipeline_run_status_update(
512
517
  pipeline_run_id=run.id,
513
518
  status=ExecutionStatus.STOPPING,
519
+ status_reason="Manual stop requested.",
514
520
  )
515
521
 
516
522
  # Now call the concrete implementation
@@ -138,6 +138,7 @@ def publish_failed_pipeline_run(
138
138
  def publish_pipeline_run_status_update(
139
139
  pipeline_run_id: "UUID",
140
140
  status: ExecutionStatus,
141
+ status_reason: Optional[str] = None,
141
142
  end_time: Optional[datetime] = None,
142
143
  ) -> "PipelineRunResponse":
143
144
  """Publishes a pipeline run status update.
@@ -145,6 +146,7 @@ def publish_pipeline_run_status_update(
145
146
  Args:
146
147
  pipeline_run_id: The ID of the pipeline run to update.
147
148
  status: The new status for the pipeline run.
149
+ status_reason: The reason for the status of the pipeline run.
148
150
  end_time: The end time for the pipeline run. If None, will be set to current time
149
151
  for finished statuses.
150
152
 
@@ -158,6 +160,7 @@ def publish_pipeline_run_status_update(
158
160
  run_id=pipeline_run_id,
159
161
  run_update=PipelineRunUpdate(
160
162
  status=status,
163
+ status_reason=status_reason,
161
164
  end_time=end_time,
162
165
  ),
163
166
  )
@@ -91,36 +91,6 @@ def create_placeholder_run(
91
91
  return run
92
92
 
93
93
 
94
- def get_placeholder_run(
95
- deployment_id: UUID,
96
- ) -> Optional["PipelineRunResponse"]:
97
- """Get the placeholder run for a deployment.
98
-
99
- Args:
100
- deployment_id: ID of the deployment for which to get the placeholder
101
- run.
102
-
103
- Returns:
104
- The placeholder run or `None` if there exists no placeholder run for the
105
- deployment.
106
- """
107
- runs = Client().list_pipeline_runs(
108
- sort_by="asc:created",
109
- size=1,
110
- deployment_id=deployment_id,
111
- status=ExecutionStatus.INITIALIZING,
112
- hydrate=True,
113
- )
114
- if len(runs.items) == 0:
115
- return None
116
-
117
- run = runs.items[0]
118
- if run.orchestrator_run_id is None:
119
- return run
120
-
121
- return None
122
-
123
-
124
94
  def deploy_pipeline(
125
95
  deployment: "PipelineDeploymentResponse",
126
96
  stack: "Stack",
@@ -268,16 +238,18 @@ def validate_run_config_is_runnable_from_server(
268
238
  "Can't set schedule when running pipeline via Rest API."
269
239
  )
270
240
 
271
- if run_configuration.settings.get("docker"):
241
+ if run_configuration.settings and run_configuration.settings.get("docker"):
272
242
  raise ValueError(
273
243
  "Can't set DockerSettings when running pipeline via Rest API."
274
244
  )
275
245
 
276
- for step_update in run_configuration.steps.values():
277
- if step_update.settings.get("docker"):
278
- raise ValueError(
279
- "Can't set DockerSettings when running pipeline via Rest API."
280
- )
246
+ if run_configuration.steps:
247
+ for step_update in run_configuration.steps.values():
248
+ if step_update.settings and step_update.settings.get("docker"):
249
+ raise ValueError(
250
+ "Can't set DockerSettings when running pipeline via "
251
+ "Rest API."
252
+ )
281
253
 
282
254
 
283
255
  def upload_notebook_cell_code_if_necessary(
zenml/steps/base_step.py CHANGED
@@ -862,7 +862,8 @@ class BaseStep:
862
862
  config: The configuration update to validate.
863
863
  runtime_parameters: Dictionary of parameters passed to a step from runtime
864
864
  """
865
- settings_utils.validate_setting_keys(list(config.settings))
865
+ if config.settings:
866
+ settings_utils.validate_setting_keys(list(config.settings))
866
867
  self._validate_function_parameters(
867
868
  parameters=config.parameters, runtime_parameters=runtime_parameters
868
869
  )
@@ -870,7 +871,7 @@ class BaseStep:
870
871
 
871
872
  def _validate_function_parameters(
872
873
  self,
873
- parameters: Dict[str, Any],
874
+ parameters: Optional[Dict[str, Any]],
874
875
  runtime_parameters: Dict[str, Any],
875
876
  ) -> None:
876
877
  """Validates step function parameters.
@@ -13,16 +13,50 @@
13
13
  # permissions and limitations under the License.
14
14
  """Runner entrypoint configuration."""
15
15
 
16
+ from typing import Any, List, Set
17
+ from uuid import UUID
18
+
16
19
  from zenml.client import Client
17
20
  from zenml.entrypoints.base_entrypoint_configuration import (
18
21
  BaseEntrypointConfiguration,
19
22
  )
20
- from zenml.pipelines.run_utils import deploy_pipeline, get_placeholder_run
23
+ from zenml.pipelines.run_utils import deploy_pipeline
24
+
25
+ PLACEHOLDER_RUN_ID_OPTION = "placeholder_run_id"
21
26
 
22
27
 
23
28
  class RunnerEntrypointConfiguration(BaseEntrypointConfiguration):
24
29
  """Runner entrypoint configuration."""
25
30
 
31
+ @classmethod
32
+ def get_entrypoint_options(cls) -> Set[str]:
33
+ """Gets all options required for running with this configuration.
34
+
35
+ Returns:
36
+ The superclass options as well as an option for the name of the
37
+ step to run.
38
+ """
39
+ return super().get_entrypoint_options() | {PLACEHOLDER_RUN_ID_OPTION}
40
+
41
+ @classmethod
42
+ def get_entrypoint_arguments(
43
+ cls,
44
+ **kwargs: Any,
45
+ ) -> List[str]:
46
+ """Gets all arguments that the entrypoint command should be called with.
47
+
48
+ Args:
49
+ **kwargs: Kwargs, must include the placeholder run id.
50
+
51
+ Returns:
52
+ The superclass arguments as well as arguments for the placeholder
53
+ run id.
54
+ """
55
+ return super().get_entrypoint_arguments(**kwargs) + [
56
+ f"--{PLACEHOLDER_RUN_ID_OPTION}",
57
+ str(kwargs[PLACEHOLDER_RUN_ID_OPTION]),
58
+ ]
59
+
26
60
  def run(self) -> None:
27
61
  """Run the entrypoint configuration.
28
62
 
@@ -30,11 +64,14 @@ class RunnerEntrypointConfiguration(BaseEntrypointConfiguration):
30
64
  to the entrypoint configuration.
31
65
  """
32
66
  deployment = self.load_deployment()
67
+ placeholder_run_id = UUID(
68
+ self.entrypoint_args[PLACEHOLDER_RUN_ID_OPTION]
69
+ )
70
+ placeholder_run = Client().get_pipeline_run(placeholder_run_id)
33
71
 
34
72
  stack = Client().active_stack
35
73
  assert deployment.stack and stack.id == deployment.stack.id
36
74
 
37
- placeholder_run = get_placeholder_run(deployment_id=deployment.id)
38
75
  deploy_pipeline(
39
76
  deployment=deployment,
40
77
  stack=stack,
@@ -222,7 +222,8 @@ def run_template(
222
222
 
223
223
  command = RunnerEntrypointConfiguration.get_entrypoint_command()
224
224
  args = RunnerEntrypointConfiguration.get_entrypoint_arguments(
225
- deployment_id=new_deployment.id
225
+ deployment_id=new_deployment.id,
226
+ placeholder_run_id=placeholder_run.id,
226
227
  )
227
228
 
228
229
  if build.python_version:
@@ -306,14 +307,20 @@ def run_template(
306
307
  str(template.id),
307
308
  str(placeholder_run.id),
308
309
  )
309
- zen_store().update_run(
310
- run_id=placeholder_run.id,
311
- run_update=PipelineRunUpdate(
312
- status=ExecutionStatus.FAILED,
313
- end_time=utc_now(),
314
- ),
315
- )
316
- raise
310
+ run_status, _ = zen_store().get_run_status(placeholder_run.id)
311
+ if run_status == ExecutionStatus.INITIALIZING:
312
+ # The run isn't in the provisioning status yet, which means
313
+ # the orchestrator wasn't able to submit the run. In this
314
+ # case, we can update the run to failed.
315
+ zen_store().update_run(
316
+ run_id=placeholder_run.id,
317
+ run_update=PipelineRunUpdate(
318
+ status=ExecutionStatus.FAILED,
319
+ status_reason="Failed to start run.",
320
+ end_time=utc_now(),
321
+ ),
322
+ )
323
+ raise
317
324
 
318
325
  if sync:
319
326
  _task_with_analytics_and_error_handling()
@@ -461,8 +468,9 @@ def deployment_request_from_template(
461
468
  )
462
469
 
463
470
  steps = {}
471
+ step_config_updates = config.steps or {}
464
472
  for invocation_id, step in deployment.step_configurations.items():
465
- step_update = config.steps.get(
473
+ step_update = step_config_updates.get(
466
474
  invocation_id, StepConfigurationUpdate()
467
475
  ).model_dump(
468
476
  # Get rid of deprecated name to prevent overriding the step name
@@ -0,0 +1,41 @@
1
+ """Add status reason [83ef3cb746a5].
2
+
3
+ Revision ID: 83ef3cb746a5
4
+ Revises: aae4eed923b5
5
+ Create Date: 2025-09-04 15:41:30.829628
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ import sqlmodel
11
+ from alembic import op
12
+
13
+ # revision identifiers, used by Alembic.
14
+ revision = "83ef3cb746a5"
15
+ down_revision = "aae4eed923b5"
16
+ branch_labels = None
17
+ depends_on = None
18
+
19
+
20
+ def upgrade() -> None:
21
+ """Upgrade database schema and/or data, creating a new revision."""
22
+ # ### commands auto generated by Alembic - please adjust! ###
23
+ with op.batch_alter_table("pipeline_run", schema=None) as batch_op:
24
+ batch_op.add_column(
25
+ sa.Column(
26
+ "status_reason",
27
+ sqlmodel.sql.sqltypes.AutoString(),
28
+ nullable=True,
29
+ )
30
+ )
31
+
32
+ # ### end Alembic commands ###
33
+
34
+
35
+ def downgrade() -> None:
36
+ """Downgrade database schema and/or data back to the previous revision."""
37
+ # ### commands auto generated by Alembic - please adjust! ###
38
+ with op.batch_alter_table("pipeline_run", schema=None) as batch_op:
39
+ batch_op.drop_column("status_reason")
40
+
41
+ # ### end Alembic commands ###
@@ -99,6 +99,7 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
99
99
  start_time: Optional[datetime] = Field(nullable=True)
100
100
  end_time: Optional[datetime] = Field(nullable=True, default=None)
101
101
  status: str = Field(nullable=False)
102
+ status_reason: Optional[str] = Field(nullable=True)
102
103
  orchestrator_environment: Optional[str] = Field(
103
104
  sa_column=Column(TEXT, nullable=True)
104
105
  )
@@ -330,6 +331,7 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
330
331
  orchestrator_environment=orchestrator_environment,
331
332
  start_time=request.start_time,
332
333
  status=request.status.value,
334
+ status_reason=request.status_reason,
333
335
  pipeline_id=request.pipeline,
334
336
  deployment_id=request.deployment,
335
337
  trigger_execution_id=request.trigger_execution_id,
@@ -503,6 +505,7 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
503
505
  user_id=self.user_id,
504
506
  project_id=self.project_id,
505
507
  status=ExecutionStatus(self.status),
508
+ status_reason=self.status_reason,
506
509
  stack=stack,
507
510
  pipeline=pipeline,
508
511
  build=build,
@@ -596,8 +599,19 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
596
599
  The updated `PipelineRunSchema`.
597
600
  """
598
601
  if run_update.status:
599
- self.status = run_update.status.value
600
- self.end_time = run_update.end_time
602
+ if (
603
+ run_update.status == ExecutionStatus.PROVISIONING
604
+ and self.status != ExecutionStatus.INITIALIZING.value
605
+ ):
606
+ # This run is already past the provisioning status, so we ignore
607
+ # the update.
608
+ pass
609
+ else:
610
+ self.status = run_update.status.value
611
+ self.end_time = run_update.end_time
612
+
613
+ if run_update.status_reason:
614
+ self.status_reason = run_update.status_reason
601
615
 
602
616
  if run_update.orchestrator_run_id:
603
617
  self.orchestrator_run_id = run_update.orchestrator_run_id
@@ -673,4 +687,7 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
673
687
  Returns:
674
688
  Whether the pipeline run is a placeholder run.
675
689
  """
676
- return self.status == ExecutionStatus.INITIALIZING.value
690
+ return self.status in {
691
+ ExecutionStatus.INITIALIZING.value,
692
+ ExecutionStatus.PROVISIONING.value,
693
+ }
@@ -5899,7 +5899,12 @@ class SqlZenStore(BaseZenStore):
5899
5899
  )
5900
5900
  )
5901
5901
  .where(
5902
- PipelineRunSchema.status == ExecutionStatus.INITIALIZING.value
5902
+ or_(
5903
+ PipelineRunSchema.status
5904
+ == ExecutionStatus.INITIALIZING.value,
5905
+ PipelineRunSchema.status
5906
+ == ExecutionStatus.PROVISIONING.value,
5907
+ )
5903
5908
  )
5904
5909
  # In very rare cases, there can be multiple placeholder runs for
5905
5910
  # the same deployment. By ordering by the orchestrator_run_id, we
@@ -5959,7 +5964,12 @@ class SqlZenStore(BaseZenStore):
5959
5964
  PipelineRunSchema.orchestrator_run_id == orchestrator_run_id
5960
5965
  )
5961
5966
  .where(
5962
- PipelineRunSchema.status != ExecutionStatus.INITIALIZING.value
5967
+ and_(
5968
+ PipelineRunSchema.status
5969
+ != ExecutionStatus.INITIALIZING.value,
5970
+ PipelineRunSchema.status
5971
+ != ExecutionStatus.PROVISIONING.value,
5972
+ )
5963
5973
  )
5964
5974
  ).first()
5965
5975
 
@@ -14,7 +14,7 @@
14
14
  """Utilities for run templates."""
15
15
 
16
16
  from enum import Enum
17
- from typing import Any, Dict, Optional
17
+ from typing import Any, Dict, Optional, Union
18
18
 
19
19
  from pydantic import create_model
20
20
  from pydantic.fields import FieldInfo
@@ -145,7 +145,9 @@ def generate_config_schema(
145
145
  experiment_trackers = []
146
146
  step_operators = []
147
147
 
148
- settings_fields: Dict[str, Any] = {"resources": (ResourceSettings, None)}
148
+ settings_fields: Dict[str, Any] = {
149
+ "resources": (Optional[ResourceSettings], None)
150
+ }
149
151
  for component in stack.components:
150
152
  if not component.flavor_schema:
151
153
  continue
@@ -188,7 +190,7 @@ def generate_config_schema(
188
190
  continue
189
191
 
190
192
  if field_info.annotation == Optional[SourceWithValidator]:
191
- generic_step_fields[key] = (Optional[str], None)
193
+ generic_step_fields[key] = (Optional[str], field_info)
192
194
  else:
193
195
  generic_step_fields[key] = (field_info.annotation, field_info)
194
196
 
@@ -197,7 +199,7 @@ def generate_config_schema(
197
199
  "ExperimentTrackers", {e: e for e in experiment_trackers}
198
200
  )
199
201
  generic_step_fields["experiment_tracker"] = (
200
- Optional[experiment_tracker_enum],
202
+ Optional[Union[experiment_tracker_enum, bool]],
201
203
  None,
202
204
  )
203
205
  if step_operators:
@@ -205,7 +207,7 @@ def generate_config_schema(
205
207
  "StepOperators", {s: s for s in step_operators}
206
208
  )
207
209
  generic_step_fields["step_operator"] = (
208
- Optional[step_operator_enum],
210
+ Optional[Union[step_operator_enum, bool]],
209
211
  None,
210
212
  )
211
213
 
@@ -270,7 +272,7 @@ def generate_config_schema(
270
272
  continue
271
273
 
272
274
  if field_info.annotation == Optional[SourceWithValidator]:
273
- top_level_fields[key] = (Optional[str], None)
275
+ top_level_fields[key] = (Optional[str], field_info)
274
276
  else:
275
277
  top_level_fields[key] = (field_info.annotation, field_info)
276
278
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: zenml-nightly
3
- Version: 0.84.3.dev20250908
3
+ Version: 0.84.3.dev20250909
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=T2W9F2GGgOirAKmIWlFNMQfMWCwMO8xVSezEeiVAFVM,19
2
+ zenml/VERSION,sha256=epczvIA_D6WQRK62rjTxIojcP385PMEnmztGbG_-IEc,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
@@ -53,7 +53,7 @@ zenml/cli/stack_components.py,sha256=QqakqWsvzgG7nOvQmvlbcfwDZUTsXI2pOlsOBXP5EXg
53
53
  zenml/cli/tag.py,sha256=JiAoYyDDBBYj0ChT8zWY8KGjzAnJTNx-WLQrjLLEyik,4802
54
54
  zenml/cli/text_utils.py,sha256=bY1GIjoULt1cW2FyrPlMoAXNS2R7cSOjDFEZQqrpVQ8,3553
55
55
  zenml/cli/user_management.py,sha256=sNnhaUxH-cHecbZBR1L0mEU0TnLNZHzI6ZBCUSQa7OY,13078
56
- zenml/cli/utils.py,sha256=9sKbKFZ3lEtJ9za0VrsRHLU4Q6Ls8e-tIBiB_Go38hI,86889
56
+ zenml/cli/utils.py,sha256=Z5tXxaqhPCPtdLIF3yQE70uJgGo87VRLpcX4gnbJDac,86921
57
57
  zenml/cli/version.py,sha256=nm1iSU_1V6-MUwpMKeXcwFhLYGUMLswvQL67cEuCpxA,3635
58
58
  zenml/client.py,sha256=PKO264uusgT2HuUQY2XRS0WjHYSnX0W9yGuX0hXoSdg,296270
59
59
  zenml/client_lazy_loader.py,sha256=oyxKvBWVB7k2pHMavdhNEOfR2Vk4IS3XUu43SBzDPsI,7152
@@ -66,12 +66,12 @@ zenml/config/__init__.py,sha256=KRAcMVUgE5R5cvoVQjs1lHUcl-IYBKmDSeBnwRIPG04,1265
66
66
  zenml/config/base_settings.py,sha256=itoLqc1cOwEYhgSGdZmSKSaBevQkvYH7NQh7PUamazc,1700
67
67
  zenml/config/build_configuration.py,sha256=jGGNwP0Cb7a80JXArNxDgxzxl9ytSZRtv-WW7_psLbM,6870
68
68
  zenml/config/cache_policy.py,sha256=_bXEbR7s8xt78JO-BUJ1V2clI3lO7FNMF3r6YbD_s8M,3121
69
- zenml/config/compiler.py,sha256=YY1C-y_NBn0RpVCHfde0TQ01CJXLn01VOsytPpowEWg,23852
69
+ zenml/config/compiler.py,sha256=BYzEdaUJZ2AnQgifiWfTJiGdlzka3H_qV79qgLe4VLQ,23963
70
70
  zenml/config/constants.py,sha256=QvSgMwXWxtspcJ45CrFDP1ZY3w6gS3bIhXLOtIDAbZA,713
71
71
  zenml/config/docker_settings.py,sha256=xZvoeC6v6RG_5MFK_RgdTgrkOLu-QT6frY4SGQNZUTo,18460
72
72
  zenml/config/global_config.py,sha256=59orl6xp4moxSo2Q8tXtDfpIBX4AxJ9FHcm8s2VHyWw,29712
73
73
  zenml/config/pipeline_configurations.py,sha256=3AVe-VYwFkccpdpb4aH8w2JZCwD_Bh4V25f4YAufbwE,4106
74
- zenml/config/pipeline_run_configuration.py,sha256=zZQS10-3qEnjXE9yZ7dJnnfYKh6mX-8Nwybjag-Ywpk,2434
74
+ zenml/config/pipeline_run_configuration.py,sha256=9BtgM49rB0Cb19AwoqPAyEqtP1U6IKEBFFPZM_HOjCo,4395
75
75
  zenml/config/pipeline_spec.py,sha256=uWpiIfznJvXAiKs1yMIUDT1h1tYEFNO-RDVTYcIv9CE,2821
76
76
  zenml/config/resource_settings.py,sha256=0taXGHvDfXuvpMplxsuzpznB1sAvWJIGnXoVJ9-ySfw,3899
77
77
  zenml/config/retry_config.py,sha256=rld2nvjGpX67Wci6abCA5T7vAi-TVgM30gT5nT8N_8M,1009
@@ -81,7 +81,7 @@ zenml/config/secrets_store_config.py,sha256=y05zqyQhr_DGrs3IfBGa_FRoZ043hSYRT5wz
81
81
  zenml/config/server_config.py,sha256=HNHODfojAstBWMxcV5OjxcXSh8Oy9k-_0J5la60fqzQ,32616
82
82
  zenml/config/settings_resolver.py,sha256=PR9BRm_x1dy7nVKa9UqpeFdck8IEATSW6aWT8FKd-DI,4278
83
83
  zenml/config/source.py,sha256=RzUw8lin8QztUjz-AdoCzVM5Om_cSSPuroaPx-qAO4w,8226
84
- zenml/config/step_configurations.py,sha256=KVjcAAtNmEcDkEyLjW1tVPHEHBo9dnu25dCoj9JV6rg,15088
84
+ zenml/config/step_configurations.py,sha256=G4weYxoM3dhNlFGEEUa_iA8lyfOGD0jDBgrWXPVR_QI,16722
85
85
  zenml/config/step_run_info.py,sha256=KiVRSTtKmZ1GbvseDTap2imr7XwMHD3jSFVpyLNEK1I,1888
86
86
  zenml/config/store_config.py,sha256=Cla5p5dTB6nNlo8_OZDs9hod5hspi64vxwtZj882XgU,3559
87
87
  zenml/config/strict_base_model.py,sha256=t_ULrtJF2eW7TgyYBRobl1fscwwIZXATYky8ER97ev4,860
@@ -101,7 +101,7 @@ zenml/entrypoints/base_entrypoint_configuration.py,sha256=t7sU2MEEPVomX9dZCpPhk1
101
101
  zenml/entrypoints/entrypoint.py,sha256=XNgXBCMKoidmP0_AYgMpqo-neG8Y8jG0rj43ofTDZ9E,2033
102
102
  zenml/entrypoints/pipeline_entrypoint_configuration.py,sha256=To-vTP29qAE36ndJDF1fRw9wL2Nk2bsBuO-ayAwvSmo,1646
103
103
  zenml/entrypoints/step_entrypoint_configuration.py,sha256=hdw54YLwHXyFREySih3F8BTRavj_QeS_hAsgrnU-gCc,7790
104
- zenml/enums.py,sha256=g7c4L-G_HtkPlsp6GaX8kMSzU2P2tmBoNl9F1sDWYrs,11967
104
+ zenml/enums.py,sha256=Uigz9p-sJjFyCepRjR4wO3Ns6zlNAqUmhoB-uQu5DvI,12001
105
105
  zenml/environment.py,sha256=_iS9o4rTxRCjLocSw_LEe9pZ9jfyMhXBY47LIUF3VCI,12255
106
106
  zenml/event_hub/__init__.py,sha256=-fD9mPOslf4J-_XFBPp5gYlPz7-6ZaAKHa5jxf_nyAo,757
107
107
  zenml/event_hub/base_event_hub.py,sha256=PqKrnvOye0UUS3s09zGgjI5dtj0IwzEBDbavA_PgfZQ,6579
@@ -652,7 +652,7 @@ zenml/models/v2/core/model_version_pipeline_run.py,sha256=JbPZZEQvOK9I32htkWdAON
652
652
  zenml/models/v2/core/pipeline.py,sha256=OXArih3YodMAZBS_GzuLL6VPpFv3c59EthwDfDZiNGk,12044
653
653
  zenml/models/v2/core/pipeline_build.py,sha256=z0LCc8aR8AdNFLLtzaAP0U0ffv7WpmSx9nNAyI__e14,17008
654
654
  zenml/models/v2/core/pipeline_deployment.py,sha256=nrJHrweNlwFsIdExINMF7jwhjOwBpOd8iwtEyAnvlz4,11971
655
- zenml/models/v2/core/pipeline_run.py,sha256=LJRNc2tR42SWiyyN5njcdAh-O5RJo8ihboW-ATfEGS0,31062
655
+ zenml/models/v2/core/pipeline_run.py,sha256=RNAPY53ADBvUPXSwA--ZFjQymPWr2SyZcUb-iCZUL0A,31613
656
656
  zenml/models/v2/core/project.py,sha256=fNNO8Tg5OhSzmFf2t6g4SpUzGWC96oHhUccVyWytvIE,5627
657
657
  zenml/models/v2/core/run_metadata.py,sha256=hRGQa_sk99uDSab3EyyOQhefypVpiQDCH3oAtblREDk,2432
658
658
  zenml/models/v2/core/run_template.py,sha256=6jdH1son7kpvFv-vtaOL2nXMATtVpqk_7a2xOVv_7cc,14097
@@ -686,7 +686,7 @@ zenml/models/v2/misc/statistics.py,sha256=ajce9rHC2bBylLzOmLfcOBSbTnJD67Y8n5YKCY
686
686
  zenml/models/v2/misc/tag.py,sha256=jUoz7wqMpDFlIUmvj4PVq8NYJJB7TMCcdRfW-DAABCU,974
687
687
  zenml/models/v2/misc/user_auth.py,sha256=1-yafNA9qK4wL8ToROjaklTVI7Mj9va0t80_4wm7w3U,6988
688
688
  zenml/orchestrators/__init__.py,sha256=Nhmc6U-q6c8TEH1Jb5l8XaKnc4KmLNspDpvvV5TcvzQ,2007
689
- zenml/orchestrators/base_orchestrator.py,sha256=-WbVagJ8PEs0-RVAa_mSFFUQqn0L4npjwBwN16LQ_5Y,21760
689
+ zenml/orchestrators/base_orchestrator.py,sha256=I_fEZNgkokO4WGgA1tnJYtN_iCISBsQLoGJNZ7sVb1U,22047
690
690
  zenml/orchestrators/cache_utils.py,sha256=PLZwNZREx3W4ZgRUahuIbfeTdR08uNWcwuDeoxzANac,6537
691
691
  zenml/orchestrators/containerized_orchestrator.py,sha256=-umxlNlQfezks1GLoi0SyXtXXo9dkC4Re9nA0fh_avw,3858
692
692
  zenml/orchestrators/dag_runner.py,sha256=6pDloHKuGvOTaABJ8G8OJ94f_8uPfeN-M0Nc5sFjHwA,10708
@@ -696,7 +696,7 @@ zenml/orchestrators/local/local_orchestrator.py,sha256=KCzc901_wrb1DPTDu_IY6HFxT
696
696
  zenml/orchestrators/local_docker/__init__.py,sha256=k8J68ydy6HmmvE9tWo32g761H8P_Dw4AxWNf4UMpsbs,669
697
697
  zenml/orchestrators/local_docker/local_docker_orchestrator.py,sha256=dEc1R2_xzFIzvSwPirwtH2noYzPyw0gbdDhpsqAgFMM,10032
698
698
  zenml/orchestrators/output_utils.py,sha256=01vqke1ZfmfuLpgxNerF-QL2wA0VPv1zUdvlMw0OwUY,3508
699
- zenml/orchestrators/publish_utils.py,sha256=u0jk9Q57fLQE1QDJjrydy5KQ9xtYKUvn3CXBirDH2u8,8485
699
+ zenml/orchestrators/publish_utils.py,sha256=BxzMWNvk0TH8v-XxDjlgmgwsuCSqlVbZF099SmpEo9A,8637
700
700
  zenml/orchestrators/step_launcher.py,sha256=dOvvMtgO_UhzPJYR3cz2H_j4L74qd9r9ggIc7EYzj40,18767
701
701
  zenml/orchestrators/step_run_utils.py,sha256=52ANscGnPTAyrOcMfMzSb3s3udxLiDL3Ly1uDvd2ZRk,16655
702
702
  zenml/orchestrators/step_runner.py,sha256=X3sX7f5NBYxT3utFGKcOJlkvCauYyEoo0LB2TB2Pp9U,27435
@@ -708,7 +708,7 @@ zenml/pipelines/build_utils.py,sha256=n7PyBGKPYGGc-QLuf4IfZE7iqlFMu2S2dnpI4TGAN6
708
708
  zenml/pipelines/pipeline_context.py,sha256=4BixReLcPo33VtNBDrMwnJqjKTinHjmO5AOfmoeIOQM,3659
709
709
  zenml/pipelines/pipeline_decorator.py,sha256=4UO9JZuO7PylwqEmcYpCTcWND9bFBdaMS7dK5mbd4gw,5107
710
710
  zenml/pipelines/pipeline_definition.py,sha256=UeGemwJ_TMWlVCdOnm5g_b8Vk55YSvFhmQc8Uo6WOuA,60534
711
- zenml/pipelines/run_utils.py,sha256=VAjfdu300AKfTuwXll3uoFrwN5dt_hesXxtylndUraQ,12515
711
+ zenml/pipelines/run_utils.py,sha256=cmI5PFwUBMi-6AzizGf2W1fFNb_zv95duVBb63gcx30,11932
712
712
  zenml/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
713
713
  zenml/plugins/base_plugin_flavor.py,sha256=88IxFW91UB_rQ8xPlfRnIhIJh7A308NEq2epMMdlOng,2530
714
714
  zenml/plugins/plugin_flavor_registry.py,sha256=LsN2Q0K-7EQ9H4uvlEG62Y0C1_Ro1UwppX4cnGbEcOA,10862
@@ -757,7 +757,7 @@ zenml/step_operators/__init__.py,sha256=tqj7fgnQyZubLjwUu4ITwkA-70KMQz4g37agbfF7
757
757
  zenml/step_operators/base_step_operator.py,sha256=ZRnY6lcEHY8xZskrKKdPhgKg2BlEoh2_kb8xCaM2D1g,3522
758
758
  zenml/step_operators/step_operator_entrypoint_configuration.py,sha256=wuQKmEI_ckn1CHHrxWGGdIhQyBFXG01aKC2-2b6Atjo,3690
759
759
  zenml/steps/__init__.py,sha256=KKWFOmCZGLDEikOD2E5YmDA7QHo47uPV37by21WwI0U,1453
760
- zenml/steps/base_step.py,sha256=6XncnFSONWfezBcWzatevo-GPRJ2P5uVuigCIY9iEIs,45156
760
+ zenml/steps/base_step.py,sha256=xN6IwoCBfazNpNInqM-mN5o6in9Rgufy1MaQL4GDr_I,45198
761
761
  zenml/steps/decorated_step.py,sha256=cr4m7qi525fUc_VTkb7J16dKdUSzc4UA5eyHg8vFWQg,4275
762
762
  zenml/steps/entrypoint_function_utils.py,sha256=H0WIkHpR_R0S9gl_tWr0nX-fcBlYnm8OQ1cimvrw-qo,9555
763
763
  zenml/steps/step_context.py,sha256=sFvVVvEyKmWTrucofor8Cuxv-72jbziVaQY-OlOvFAM,15526
@@ -1086,8 +1086,8 @@ zenml/zen_server/routers/users_endpoints.py,sha256=-0wjKK0LYOUY7gmmbTRU1AHIej99d
1086
1086
  zenml/zen_server/routers/webhook_endpoints.py,sha256=4Ca6k_qyE5lZpflEqV0P4mcuXnhlW9N-YemZIwchRJg,4009
1087
1087
  zenml/zen_server/secure_headers.py,sha256=glh6QujnjyeoH1_FK-tAS-105G-qKS_34AqSzqJ6TRc,4182
1088
1088
  zenml/zen_server/template_execution/__init__.py,sha256=79knXLKfegsvVSVSWecpqrepq6iAavTUA4hKuiDk-WE,613
1089
- zenml/zen_server/template_execution/runner_entrypoint_configuration.py,sha256=Y8aYJhqqs8Kv8I1q-dM1WemS5VBIfyoaaYH_YkzC7iY,1541
1090
- zenml/zen_server/template_execution/utils.py,sha256=xaxG2gAaWDSFHH-R0-P_YxwVPnrZzw8imL0VM0I_LTA,19386
1089
+ zenml/zen_server/template_execution/runner_entrypoint_configuration.py,sha256=9tGLrbXrHoMSH6HwisXoHvEDv6g32YRgI_Nfhb_2CjY,2648
1090
+ zenml/zen_server/template_execution/utils.py,sha256=uS6e5MrxVytF13ZsGwSi2n04FP_HcLggvY6mxfiDX5U,19945
1091
1091
  zenml/zen_server/template_execution/workload_manager_interface.py,sha256=CL9c7z8ajuZE01DaHmdCDCZmsroDcTarvN-nE8jv6qQ,2590
1092
1092
  zenml/zen_server/utils.py,sha256=BKwaSRRWpYUaItCH4xwXOfG3JmsuFuf6Oi1B6dms0ps,24657
1093
1093
  zenml/zen_server/zen_server_api.py,sha256=bXriGA06xKe_Pz-Adw-dzJX9yWpQbS5Hqxbmg_7FQSA,11603
@@ -1263,6 +1263,7 @@ zenml/zen_stores/migrations/versions/7b651bf6822e_track_secrets_in_db.py,sha256=
1263
1263
  zenml/zen_stores/migrations/versions/7d1919bb1ef0_add_run_templates.py,sha256=nvJ6pnd6ivlUs7tlFAy-Z2SKGxytToXSziekRzjVN0E,3296
1264
1264
  zenml/zen_stores/migrations/versions/7e4a481d17f7_add_identity_table.py,sha256=5I5v4Y7oxvo9O2pU46Aw3DVffIqh7R8EGE-ylNpx08E,1356
1265
1265
  zenml/zen_stores/migrations/versions/7f603e583dd7_fixed_migration.py,sha256=UGwP2-kjQrASvvQbrTnOK8y-XDFrfPvH8sRCGZu2LLE,3913
1266
+ zenml/zen_stores/migrations/versions/83ef3cb746a5_add_status_reason.py,sha256=YywZIc4c9OnKSqHA7AIEz6D52dHsAMSoG8DKQSLgRKE,1122
1266
1267
  zenml/zen_stores/migrations/versions/85289fea86ff_adding_source_to_logs.py,sha256=YQPRRmBvtOeJZ40VDuZydyIB0WbMv6p0I_kf1xubKuY,1988
1267
1268
  zenml/zen_stores/migrations/versions/857843db1bcf_add_api_transaction_table.py,sha256=Wq6pOTYEeERdn7nOzMzREu9yN0Iofs40Th92sXQV4Vw,2108
1268
1269
  zenml/zen_stores/migrations/versions/86fa52918b54_remove_teams_and_roles.py,sha256=HF-0PaDS6_ljZinJFwGZQldaHB8Znx9KkLPjwIl1KQI,4689
@@ -1329,7 +1330,7 @@ zenml/zen_stores/schemas/logs_schemas.py,sha256=la8ipJeTZ920ubHn8Uqf1DJLR7xHEXKK
1329
1330
  zenml/zen_stores/schemas/model_schemas.py,sha256=cDhWggrn3rTjaFML3iQGuW_4CpUJUxAnHieiY-dq0y4,26006
1330
1331
  zenml/zen_stores/schemas/pipeline_build_schemas.py,sha256=8GMdJNNcoSnbYH9daVr8zrhwQ1n-HZrpgzHoBZ7DZyA,7320
1331
1332
  zenml/zen_stores/schemas/pipeline_deployment_schemas.py,sha256=ZJ5K_rzVhe7rvE6kRdmYhRn4E2DcZxxMUPgAImeLN2s,15423
1332
- zenml/zen_stores/schemas/pipeline_run_schemas.py,sha256=yTXvL72X_v2ymJxcP1lAF0x0BkxSvvG9Oja6qI-RJqg,24254
1333
+ zenml/zen_stores/schemas/pipeline_run_schemas.py,sha256=3FravYvu03zTws9Uz53aLuYgYmGS7ZEqbHMT40abN_w,24916
1333
1334
  zenml/zen_stores/schemas/pipeline_schemas.py,sha256=xgioTeBuFFFDOJi5eESx2j-8mW55B6hshosFylev5Mw,8213
1334
1335
  zenml/zen_stores/schemas/project_schemas.py,sha256=X2GClPNQz0COsEZX8xI-I8Sm68Hb6f20Obm24mQyLS0,6013
1335
1336
  zenml/zen_stores/schemas/run_metadata_schemas.py,sha256=G94rT4ldluMSnf9rm7R_9rw_GlgaAyq72ptkHl0gHeg,3605
@@ -1355,11 +1356,11 @@ zenml/zen_stores/secrets_stores/hashicorp_secrets_store.py,sha256=5err1a-TrV3SR5
1355
1356
  zenml/zen_stores/secrets_stores/secrets_store_interface.py,sha256=Q2Jbnt2Pp7NGlR-u1YBfRZV2g8su2Fd0ArBMdksAE-Q,2819
1356
1357
  zenml/zen_stores/secrets_stores/service_connector_secrets_store.py,sha256=DrXGMkBxQIy2n_kkux5Xh2OM3Ks3MOpqP1D4aY8bfyY,7047
1357
1358
  zenml/zen_stores/secrets_stores/sql_secrets_store.py,sha256=LPFW757WCJLP1S8vrvjsrl2Tf1yo281xUTjSBsos4qk,8788
1358
- zenml/zen_stores/sql_zen_store.py,sha256=T40n0lPnai6UW16FZM7neBEjgcfz0VRnnkb20SKivDw,493073
1359
- zenml/zen_stores/template_utils.py,sha256=iCXrXpqzVTY7roqop4Eh9J7DmLW6PQeILZexmw_l3b8,10074
1359
+ zenml/zen_stores/sql_zen_store.py,sha256=Hs4gP6vMBK_hBUFF-s5T8NJVHCj7d-lVkxgRp_sFLTU,493410
1360
+ zenml/zen_stores/template_utils.py,sha256=O4T7c4r4V7OkP7vFPQisPQ7XRNB5YKWNlj1foiDxdqk,10143
1360
1361
  zenml/zen_stores/zen_store_interface.py,sha256=weiSULdI9AsbCE10a5TcwtybX-BJs9hKhjPJnTapWv4,93023
1361
- zenml_nightly-0.84.3.dev20250908.dist-info/LICENSE,sha256=wbnfEnXnafPbqwANHkV6LUsPKOtdpsd-SNw37rogLtc,11359
1362
- zenml_nightly-0.84.3.dev20250908.dist-info/METADATA,sha256=fcKRyecU6fvfdQGZh9_WiM07pATW80GkSV66doZnVQo,25252
1363
- zenml_nightly-0.84.3.dev20250908.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
1364
- zenml_nightly-0.84.3.dev20250908.dist-info/entry_points.txt,sha256=QK3ETQE0YswAM2mWypNMOv8TLtr7EjnqAFq1br_jEFE,43
1365
- zenml_nightly-0.84.3.dev20250908.dist-info/RECORD,,
1362
+ zenml_nightly-0.84.3.dev20250909.dist-info/LICENSE,sha256=wbnfEnXnafPbqwANHkV6LUsPKOtdpsd-SNw37rogLtc,11359
1363
+ zenml_nightly-0.84.3.dev20250909.dist-info/METADATA,sha256=Gre_LfN6S6rMJmzzZz5nFu4DZCDbbKDi2TvnNiwesok,25252
1364
+ zenml_nightly-0.84.3.dev20250909.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
1365
+ zenml_nightly-0.84.3.dev20250909.dist-info/entry_points.txt,sha256=QK3ETQE0YswAM2mWypNMOv8TLtr7EjnqAFq1br_jEFE,43
1366
+ zenml_nightly-0.84.3.dev20250909.dist-info/RECORD,,