Skip to content

Commit 09dc7bb

Browse files
committed
Docs
1 parent 7ff3edd commit 09dc7bb

File tree

2 files changed

+34
-21
lines changed

2 files changed

+34
-21
lines changed

docs/book/how-to/steps-pipelines/dynamic_pipelines.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,17 @@ if __name__ == "__main__":
250250
251251
The `depends_on` parameter tells ZenML which steps can be configured via the YAML file. This is particularly useful when you want to allow users to configure pipeline behavior without modifying code.
252252

253+
### Pass pipeline parameters when running snapshots from the server
254+
255+
When running a snapshot from the server (either via the UI or the SDK/Rest API), you can now pass pipeline parameters for your dynamic pipelines.
256+
257+
For example:
258+
```python
259+
from zenml.client import Client
260+
261+
Client().trigger_pipeline(snapshot_id=<ID>, run_configuration={"parameters": {"my_param": 3}})
262+
```
263+
253264
## Limitations and Known Issues
254265

255266
### Logging

src/zenml/zen_stores/template_utils.py

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,8 @@ def generate_config_schema(
236236
all_steps: Dict[str, Any] = {}
237237
all_steps_required = False
238238
for step_name, step in step_configurations.items():
239-
step_fields = generic_step_fields.copy()
239+
step_fields: Dict[str, Any] = {}
240+
240241
if step.config.parameters:
241242
parameter_fields: Dict[str, Any] = {}
242243

@@ -259,6 +260,7 @@ def generate_config_schema(
259260
FieldInfo(default=...),
260261
)
261262

263+
step_fields.update(generic_step_fields)
262264
step_model = create_model(step_name, **step_fields)
263265

264266
# Pydantic doesn't allow field names to start with an underscore
@@ -285,32 +287,13 @@ def generate_config_schema(
285287

286288
top_level_fields: Dict[str, Any] = {}
287289

288-
for key, field_info in PipelineRunConfiguration.model_fields.items():
289-
if key in ["schedule", "build", "steps", "settings", "parameters"]:
290-
continue
291-
292-
if field_info.annotation == Optional[SourceWithValidator]: # type: ignore[comparison-overlap]
293-
top_level_fields[key] = (Optional[str], field_info)
294-
else:
295-
top_level_fields[key] = (field_info.annotation, field_info)
296-
297-
top_level_fields["settings"] = (Optional[settings_model], None)
298-
299-
if all_steps_required:
300-
top_level_fields["steps"] = (all_steps_model, FieldInfo(default=...))
301-
else:
302-
top_level_fields["steps"] = (
303-
Optional[all_steps_model],
304-
FieldInfo(default=None),
305-
)
306-
307290
if snapshot.is_dynamic:
308291
pipeline_parameter_fields: Dict[str, Any] = {}
309292

310293
for parameter_name in pipeline_configuration.parameters or {}:
311294
# Pydantic doesn't allow field names to start with an underscore
312295
sanitized_parameter_name = parameter_name.lstrip("_")
313-
while sanitized_parameter_name in parameter_fields:
296+
while sanitized_parameter_name in pipeline_parameter_fields:
314297
sanitized_parameter_name = sanitized_parameter_name + "_"
315298

316299
pipeline_parameter_fields[sanitized_parameter_name] = (
@@ -326,4 +309,23 @@ def generate_config_schema(
326309
FieldInfo(default=None),
327310
)
328311

312+
for key, field_info in PipelineRunConfiguration.model_fields.items():
313+
if key in ["schedule", "build", "steps", "settings", "parameters"]:
314+
continue
315+
316+
if field_info.annotation == Optional[SourceWithValidator]: # type: ignore[comparison-overlap]
317+
top_level_fields[key] = (Optional[str], field_info)
318+
else:
319+
top_level_fields[key] = (field_info.annotation, field_info)
320+
321+
top_level_fields["settings"] = (Optional[settings_model], None)
322+
323+
if all_steps_required:
324+
top_level_fields["steps"] = (all_steps_model, FieldInfo(default=...))
325+
else:
326+
top_level_fields["steps"] = (
327+
Optional[all_steps_model],
328+
FieldInfo(default=None),
329+
)
330+
329331
return create_model("Result", **top_level_fields).model_json_schema() # type: ignore[no-any-return]

0 commit comments

Comments
 (0)