AIML Docs

ForEach Element

Element for iterating over arrays

ForEach Element

Coming soon: This feature is not yet available. Please check back soon.

The <foreach> element enables iteration over arrays:

<foreach 
items={({state}) => state.items}
var="item"
index="idx"
>
<llm>
  <prompt>
    {({item, idx}) => `Processing item ${idx}: ${item}`}
  </prompt>
</llm>
</foreach>

Props

PropTypeDefault
id?
string
-
items
array
-
var
string
-
index
string
-

Examples

Basic Iteration

<foreach items={({state}) => state.tasks} var="task">
<llm>
  <prompt>
    {({task}) => `Completing task: ${task.name}`}
  </prompt>
</llm>
</foreach>

Using Index

<foreach 
items={({state}) => state.queue} 
var="item" 
index="position"
>
<log expr={({item, position}) => 
  `Processing item ${position + 1}: ${item}`
} />
</foreach>

Complex Processing

<foreach items={({state}) => state.records} var="record">
<if condition={({record}) => record.isValid}>
  <script>
    processRecord(record);
  </script>
</if>
<else>
  <assign location="state.errors" expr={({state, record}) => [
    ...state.errors,
    { record, error: 'Invalid record' }
  ]} />
  <log expr={({record}) => 
    `Invalid record: ${JSON.stringify(record)}`
  } />
</else>
</foreach>

Usage Notes

  • Iterates over array elements sequentially
  • Current item available via specified var name
  • Optional index tracking
  • Can contain any executable content

Common Patterns

Data Processing

<foreach items={({state}) => state.data} var="item">
<script>
  const processed = transform(item);
  _dataModel.setValue("state.results", 
    [...state.results, processed]
  );
</script>
</foreach>

Batch Operations

<foreach items={({state}) => state.batch} var="record" index="i">
<script>
  const response = await fetch('https://api.example.com/process', {
    method: 'POST',
    body: JSON.stringify({
      id: record.id,
      data: record.data
    })
  });
  _dataModel.setValue('state.responses', [
    ...state.responses,
    await response.json()
  ]);
</script>
 
<if condition={({i}) => (i + 1) % 10 === 0}>
  <log expr="Batch checkpoint reached" />
</if>
</foreach>

Validation Chain

<foreach items={({state}) => state.inputs} var="input">
<if condition={({input}) => !input.value}>
  <assign 
    location="state.errors" 
    expr={({state, input}) => [
      ...state.errors,
      `Missing value for ${input.name}`
    ]}
  />
  <assign
    location="state.isValid"
    expr={false}
  />
</if>
</foreach>

On this page