version: 0.0.0
graph:
  start:
    - Writer
  end:
    - Finalizer
  id: loop_timer_demo
  description: LoopTimer demo that releases output after 20 seconds of agent iterations.
  is_majority_voting: false
  log_level: INFO
  nodes:
    - id: Critic
      type: agent
      config:
        name: ${MODEL_NAME}
        provider: openai
        role: You are a critic. Provide brief feedback (1 sentence) to improve the draft.
        base_url: ${BASE_URL}
        api_key: ${API_KEY}
        params: {}
        tooling: []
        thinking: null
        memories: []
        retry: null
      description: Reviews the draft and provides feedback for improvement.
      context_window: 0
      log_output: true
    - id: Writer
      type: agent
      config:
        name: ${MODEL_NAME}
        provider: openai
        role: You are a technical writer. Generate a brief draft (1 sentence).
        base_url: ${BASE_URL}
        api_key: ${API_KEY}
        params: {}
        tooling: []
        thinking: null
        memories: []
        retry: null
      description: Drafts content based on feedback.
      context_window: 0
      log_output: true
    - id: Finalizer
      type: literal
      config:
        content: Final summary released
        role: assistant
      description: Receives the release signal from Loop Gate and outputs the final statement.
      context_window: 0
      log_output: true
    - id: Loop Gate
      type: loop_timer
      config:
        max_duration: 20
        duration_unit: seconds
        reset_on_emit: true
        message: Time limit reached - loop automatically terminated
        passthrough: false
      description: Tracks elapsed time, only granting passage after 20 seconds.
      context_window: 0
      log_output: true
  edges:
    - from: Writer
      to: Critic
    - from: Critic
      to: Writer
    - from: Critic
      to: Loop Gate
    - from: Loop Gate
      to: Writer
    - from: Loop Gate
      to: Finalizer
    - from: Loop Gate
      to: Writer
      trigger: true
      condition: 'true'
      carry_data: true
      keep_message: false
      process: null
vars:
  MODEL_NAME: qwen/qwen3-8b
