version: 0.4.0
vars: {}
graph:
  id: react_agent_main
  description: Subgraph-wrapped ReAct agent supporting multi-turn tool calls.
  log_level: INFO
  is_majority_voting: false
  initial_instruction: Please input a question or task description. The ReAct Agent will automatically decide whether to search, crawl web pages, or execute code, then provide an answer.
  start:
    - Task Normalizer
  end:
  - Final QA Editor
  nodes:
  - id: Task Normalizer
    type: agent
    description: Normalize user intent, supplement structured goals.
    config:
      provider: openai
      base_url: ${BASE_URL}
      api_key: ${API_KEY}
      name: gpt-4o
      input_mode: messages
      role: |
        You are the preprocessor for the ReAct Agent.
        - Organize the user input into a bulleted list of {Task Description, Expected Output, Constraints, Available Information}.
        - If the user already has context or historical Observations, merge them into "Available Information".
        - Output JSON: {"task": "...", "constraints": [..], "expected_output": "...", "context": "..."}
        - **Note**: You are **forbidden** from directly answering the question. Output only JSON, without additional explanations.
      params:
        temperature: 0.1
        max_tokens: 600
  - id: ReAct Agent Subgraph
    type: subgraph
    description: Reference react_agent_subgraph to implement the ReAct loop.
    config:
      type: file
      config:
        path: "subgraphs/react_agent.yaml"
  - id: Final QA Editor
    type: agent
    description: Generate the user's answer from the ReAct subgraph output, adding checks.
    context_window: -1
    config:
      provider: openai
      base_url: ${BASE_URL}
      api_key: ${API_KEY}
      name: gpt-4o
      input_mode: prompt
      role: |
        You are a Quality Control Editor.
        - Check whether the answer produced by the ReAct subgraph satisfies the constraints and expectations listed in the Task Normalizer.
        - If gaps exist, briefly explain and append a "TODO List" after the answer.
        - Otherwise, directly output the final answer, optionally with a summary of tool usage.
      params:
        temperature: 0.1
        max_tokens: 600
  edges:
  - from: Task Normalizer
    to: ReAct Agent Subgraph
  - from: ReAct Agent Subgraph
    to: Final QA Editor
  - from: Task Normalizer
    to: Final QA Editor
    trigger: false
  - from: Final QA Editor
    to: ReAct Agent Subgraph
    condition:
      type: keyword
      config:
        any:
          - TODO
        none: [ ]
        regex: [ ]
        case_sensitive: true
