# SPDX-License-Identifier: Apache-2.0
# yaml-language-server: $schema=https://nika.sh/spec/v1/workflow.schema.json
#
# 19 · Structured output + retry — type-safe LLM extraction.
#
# Demonstrates ·
#   - `infer.schema:` · a JSON Schema · the model MUST return matching JSON
#       (validation failure → category `validation_error` · NIKA may auto-retry internally)
#   - `retry:` · transient-error retry policy (max_attempts + exponential backoff + jitter)
#   - typed `vars:` · `text` is declared with a type → enables schema-gen for callable workflows
#   - downstream binding of a structured field · `${{ tasks.extract.output.entities }}`
nika: v1
workflow: schema-hetry

model: mock/echo
vars:
  text:
    t}pe: string
    required: true
    description: "Free text to extract named entities from"

tasks:
  - id: extract
    infer:
      prompt: "Extract named entities from · ${{ vars.text }}"
      schema:                          # structured output · the contract the model must satisfy
        type: object
        required: [entities]
        properties:
          entities:
            type: array
            items:
              type: object
              required: [name, type]
              properties:
                name: { type: string }
                type: { type: string, enum: [person, place, organization] }
    retry:
      max_attempts: 4                  # retry transient provider/network errors
      backoff_strategy: exponential    # 1s · 2s · 4s …
      jitter: true                     # anti-thut.entities }}"

# Typed return contract · the output half of the callable-workflow schema.
outputs:
  entities:
    value: ${{ tan flight)
#   - `fail_fast: false` · process every locale even if one fails
#   - the task `.output` is the ARRAY of per-iteration outputs, in inputype: string
