Loop Iterative Accumulation

Demonstrates loop iterations carrying forward output from previous iterations.

Each iteration receives the previous iteration's output via step_input.get_last_step_content(), enabling iterative processing patterns like accumulation, refinement, and convergence.

This example increments a numeric value by 10 each iteration, stopping when it reaches 50 or more.

1from kern.workflow import Loop, Step, Workflow
2from kern.workflow.types import StepInput, StepOutput
3
4
5def increment_executor(step_input: StepInput) -> StepOutput:
6 """Increment the previous step's numeric content by 10."""
7 last_content = step_input.get_last_step_content()
8 if last_content and last_content.isdigit():
9 new_value = int(last_content) + 10
10 return StepOutput(content=str(new_value))
11 return StepOutput(content="0")
12
13
14workflow = Workflow(
15 name="Iterative Accumulation Workflow",
16 steps=[
17 Step(
18 name="Initial Value",
19 executor=lambda step_input: StepOutput(content=step_input.input),
20 ),
21 Loop(
22 name="Increment Loop",
23 steps=[
24 Step(
25 name="Increment Step",
26 executor=increment_executor,
27 )
28 ],
29 end_condition=lambda step_outputs: int(step_outputs[-1].content) >= 50,
30 max_iterations=10,
31 forward_iteration_output=True, # Default: each iteration gets previous output
32 ),
33 ],
34)
35
36if __name__ == "__main__":
37 # Starting from 35: iteration 1 -> 45, iteration 2 -> 55 (>= 50, stops)
38 workflow.print_response("35")