Skip to main content

Iteration Steps

Iteration steps provide control flow primitives for loops, conditionals, and sequence generation in Jetty workflows.

Available Steps

StepActivity NameDescription
Number Sequence Generatornumber_sequence_generatorGenerate sequences of numbers
Conditional Branchconditional_branchExecute conditional logic
Loop Counterloop_counterMaintain loop iteration state

Number Sequence Generator

Generates lists or tuples of numbers based on configurable rules.

Activity Name

number_sequence_generator

Overview

This step generates sequences of numbers in various patterns. It's useful for creating lists to iterate over, generating test data, or producing numeric ranges for parallel processing.

Configuration Parameters

ParameterTypeDefaultDescription
modestring"range"Generation mode: range, pairs, arithmetic, geometric
startint0Starting value
endint10Ending value
stepint1Step increment (or ratio for geometric)
output_formatstring"list"Output format: list, tuples, json
max_termsint100Maximum terms for geometric sequences

Path Expression Parameters

ParameterDescription
start_pathPath to dynamic start value
end_pathPath to dynamic end value
step_pathPath to dynamic step value

Generation Modes

Range Mode

Simple range: [start, start+step, start+2*step, ..., end]

{
"activity": "number_sequence_generator",
"mode": "range",
"start": 0,
"end": 10,
"step": 2
}
// Output: [0, 2, 4, 6, 8, 10]

Pairs Mode

Consecutive pairs: [(a, a+1), (a+1, a+2), ...]

{
"activity": "number_sequence_generator",
"mode": "pairs",
"start": 0,
"end": 6,
"step": 2
}
// Output: [(0, 2), (2, 4), (4, 6)]

Arithmetic Mode

Arithmetic sequence with custom step.

{
"activity": "number_sequence_generator",
"mode": "arithmetic",
"start": 5,
"end": 20,
"step": 3
}
// Output: [5, 8, 11, 14, 17, 20]

Geometric Mode

Geometric sequence with custom ratio.

{
"activity": "number_sequence_generator",
"mode": "geometric",
"start": 1,
"end": 100,
"step": 2,
"max_terms": 10
}
// Output: [1, 2, 4, 8, 16, 32, 64]

Examples

Generate Batch Indices

{
"name": "create_batches",
"activity": "number_sequence_generator",
"config": {
"mode": "range",
"start": 0,
"end_path": "data_loader.outputs.total_items",
"step": 100
}
}

Create Test Thresholds

{
"name": "thresholds",
"activity": "number_sequence_generator",
"config": {
"mode": "arithmetic",
"start": 0,
"end": 100,
"step": 10,
"output_format": "list"
}
}

Output Structure

{
"outputs": {
"sequence": [0, 2, 4, 6, 8, 10],
"stats": {
"count": 6,
"min": 0,
"max": 10,
"sum": 30,
"avg": 5.0
},
"mode": "range",
"parameters": {
"start": 0,
"end": 10,
"step": 2,
"output_format": "list"
}
}
}

Conditional Branch

Executes conditional logic based on input values.

Activity Name

conditional_branch

Overview

This step evaluates a condition and returns different outputs based on the result. Use it to implement branching logic within workflows.

Configuration Parameters

ParameterTypeDefaultDescription
value_pathstring"init_params.value"Path to the value to evaluate
condition_typestring"equals"Type of comparison
condition_valueanynullValue to compare against
true_outputobject{"result": true}Output when condition is true
false_outputobject{"result": false}Output when condition is false

Path Expression Parameters

ParameterDescription
condition_value_pathPath to dynamic comparison value

Condition Types

TypeDescriptionExample
equalsExact equalityvalue == condition_value
not_equalsNot equalvalue != condition_value
greater_thanGreater thanvalue > condition_value
less_thanLess thanvalue < condition_value
greater_equalGreater or equalvalue >= condition_value
less_equalLess or equalvalue <= condition_value
containsString containscondition_value in value
existsValue is not Nonevalue is not None
is_emptyValue is empty/falsynot value

Examples

Quality Gate

{
"name": "quality_check",
"activity": "conditional_branch",
"config": {
"value_path": "evaluator.outputs.score",
"condition_type": "greater_equal",
"condition_value": 0.8,
"true_output": {
"status": "passed",
"action": "publish"
},
"false_output": {
"status": "failed",
"action": "review"
}
}
}

Check for Errors

{
"name": "error_check",
"activity": "conditional_branch",
"config": {
"value_path": "processor.outputs.error",
"condition_type": "exists",
"true_output": {
"has_error": true,
"next_step": "error_handler"
},
"false_output": {
"has_error": false,
"next_step": "continue"
}
}
}

Category Routing

{
"name": "route_by_type",
"activity": "conditional_branch",
"config": {
"value_path": "classifier.outputs.category",
"condition_type": "equals",
"condition_value": "urgent",
"true_output": {
"priority": "high",
"queue": "urgent_queue"
},
"false_output": {
"priority": "normal",
"queue": "standard_queue"
}
}
}

Output Structure

{
"outputs": {
"status": "passed",
"action": "publish",
"condition_result": true,
"evaluated_value": 0.92,
"condition": {
"type": "greater_equal",
"expected": 0.8,
"actual": 0.92,
"result": true
}
}
}

Loop Counter

Maintains loop counter and iteration state.

Activity Name

loop_counter

Overview

This step manages iteration state for loop-based workflows. It tracks the current iteration, calculates progress, and determines when the loop should complete.

Configuration Parameters

ParameterTypeDefaultDescription
start_countint0Initial count if no current count found
max_iterationsint10Maximum number of iterations
incrementint1Amount to increment each iteration

Path Expression Parameters

ParameterDescription
current_count_pathPath to current iteration count
max_iterations_pathPath to dynamic max iterations
increment_pathPath to dynamic increment value

Examples

Basic Loop Control

{
"name": "loop_control",
"activity": "loop_counter",
"config": {
"current_count_path": "init_params.iteration",
"max_iterations": 5,
"increment": 1
}
}

Dynamic Loop Bounds

{
"name": "dynamic_loop",
"activity": "loop_counter",
"config": {
"current_count_path": "previous_iteration.outputs.next_count",
"max_iterations_path": "data_loader.outputs.total_batches",
"increment": 1
}
}

Output Structure

{
"outputs": {
"current_count": 3,
"next_count": 4,
"is_complete": false,
"continue_loop": true,
"progress": 0.4,
"remaining_iterations": 6,
"loop_info": {
"current": 3,
"max": 10,
"increment": 1,
"progress_percent": 40.0
}
}
}

Common Patterns

Iterative Refinement Loop

Use loop counter with conditional to iteratively improve output:

{
"steps": ["generate", "evaluate", "check_quality", "loop_control"],
"step_configs": {
"generate": {
"activity": "litellm_chat",
"prompt_path": "init_params.prompt",
"model": "gpt-4o"
},
"evaluate": {
"activity": "simple_judge",
"instruction": "Rate the quality of this output",
"judge_type": "scale",
"scale_range": [1, 10],
"item_path": "generate.outputs.text"
},
"check_quality": {
"activity": "conditional_branch",
"value_path": "evaluate.outputs.results[0].score",
"condition_type": "greater_equal",
"condition_value": 8,
"true_output": {"done": true},
"false_output": {"done": false}
},
"loop_control": {
"activity": "loop_counter",
"max_iterations": 3
}
}
}

Batch Processing with Sequences

Generate batch boundaries for large dataset processing:

{
"steps": ["count_items", "generate_batches", "process_batches"],
"step_configs": {
"count_items": {
"activity": "read_text_file",
"text_path": "init_params.data_file"
},
"generate_batches": {
"activity": "number_sequence_generator",
"mode": "range",
"start": 0,
"end_path": "count_items.outputs.line_count",
"step": 100
},
"process_batches": {
"activity": "list_emit_await",
"items_path": "generate_batches.outputs.sequence",
"task_reference": {"task_name": "process_batch"},
"data_mapping": {
"offset": "{{ $item }}",
"limit": 100
}
}
}
}

Threshold Testing

Test multiple thresholds to find optimal values:

{
"steps": ["generate_thresholds", "test_all", "find_best"],
"step_configs": {
"generate_thresholds": {
"activity": "number_sequence_generator",
"mode": "arithmetic",
"start": 50,
"end": 100,
"step": 5
},
"test_all": {
"activity": "list_emit_await",
"items_path": "generate_thresholds.outputs.sequence",
"task_reference": {"task_name": "test_threshold"},
"data_mapping": {
"threshold": "{{ $item }}"
}
},
"find_best": {
"activity": "extract_from_trajectories",
"trajectory_list_path": "test_all.outputs.trajectory_references",
"extract_keys": {
"threshold": "init_params.threshold",
"accuracy": "steps.evaluate.outputs.accuracy"
}
}
}
}

Best Practices

Sequence Generation

  • Use appropriate modes for your use case
  • Set max_terms for geometric sequences to prevent runaway generation
  • Consider memory usage with very large sequences

Conditional Logic

  • Keep conditions simple and readable
  • Use descriptive true_output and false_output values
  • Consider using multiple conditions for complex routing

Loop Control

  • Always set reasonable max_iterations to prevent infinite loops
  • Track progress for long-running iterative processes
  • Use is_complete to determine loop termination