AIML Docs

Final Element

Element for terminal states in the state machine

Final Element

The <final> element represents a terminal state:

<final id="complete">
<donedata>
  <content>
    {({state}) => ({
      result: state.output,
      timestamp: new Date()
    })}
  </content>
</donedata>
</final>
PropTypeDefault
id?
string
-

Allowed Children

  • donedata: Completion data

Examples

Basic Final State

<final id="done">
<log expr="Process complete" />
</final>

Final State with Data

<final id="complete">
<assign 
  location="state.completionTime" 
  expr={new Date().toISOString()} 
/>
<donedata>
  <content>
    {({state}) => ({
      status: "complete",
      result: state.output,
      duration: calculateDuration(state.startTime),
      timestamp: state.completionTime
    })}
  </content>
</donedata>
</final>

Error Final State

<final id="error">
<log expr={({error}) => 
  `Process failed: ${error.message}`
} />
<donedata>
  <content>
    {({state, error}) => ({
      status: "error",
      error: error.message,
      context: state.context
    })}
  </content>
</donedata>
</final>

Usage Notes

  • Marks completion of a region or machine
  • Can include final processing
  • Can return completion data
  • Cannot have transitions

Common Patterns

Success Completion

<final id="success">
<log expr="Process completed successfully" />
<script>
  notifyCompletion({
    status: "success",
    result: state.result
  });
</script>
<donedata>
  <content>
    {({state}) => ({
      status: "success",
      result: state.result,
      metadata: {
        duration: state.duration,
        timestamp: new Date()
      }
    })}
  </content>
</donedata>
</final>

Error Completion

<final id="failure">
<log expr={({error}) => 
  `Process failed: ${error.message}`
} />
<script>
  notifyError({
    error: error,
    context: state.context
  });
</script>
<donedata>
  <content>
    {({state, error}) => ({
      status: "error",
      error: {
        message: error.message,
        code: error.code,
        stack: error.stack
      },
      context: state.context
    })}
  </content>
</donedata>
</final>

Cleanup Final State

<final id="cleanup">
<script>
  releaseResources();
  clearCache();
  resetState();
</script>
<log expr="Cleanup complete" />
<donedata>
  <content>
    {({state}) => ({
      status: "cleaned",
      resources: {
        released: state.releasedResources,
        cached: state.cachedData
      },
      timestamp: new Date()
    })}
  </content>
</donedata>
</final>

On this page