115 lines
2.5 KiB
YAML
115 lines
2.5 KiB
YAML
state_schema:
|
|
# fixed, system-owned
|
|
artifacts:
|
|
discovery_result: {}
|
|
plan: {}
|
|
execution_result: {}
|
|
critic_decision: {}
|
|
|
|
signals:
|
|
tests: { status: "unknown" } # pass | fail | unknown
|
|
failure: "none" # none | schema_fail | test_fail | hallucination | timeout
|
|
complexity: 0.0 # 0..1 (heuristic)
|
|
retries: 0
|
|
iteration: 0
|
|
|
|
pointers:
|
|
current_agent: null
|
|
last_agent: null
|
|
last_artifact: null
|
|
|
|
limits:
|
|
max_total_steps: 12
|
|
max_retries_per_agent: 3
|
|
|
|
agents:
|
|
discovery:
|
|
models: [small]
|
|
prompt: prompts/discovery.md
|
|
needs: []
|
|
produces: [discovery_result]
|
|
|
|
planner:
|
|
models: [small, medium]
|
|
prompt: prompts/planner.md
|
|
needs: [discovery_result]
|
|
produces: [plan]
|
|
|
|
executor:
|
|
models: [medium]
|
|
prompt: prompts/executor.md
|
|
needs: [plan]
|
|
produces: [execution_result]
|
|
|
|
critic:
|
|
models: [small]
|
|
prompt: prompts/critic_struct.md
|
|
needs: [execution_result]
|
|
produces: [critic_decision]
|
|
|
|
fixer_minimal:
|
|
models: [medium, large]
|
|
prompt: prompts/fix_minimal.md
|
|
needs: [execution_result]
|
|
produces: [execution_result]
|
|
|
|
selection:
|
|
default: smallest_sufficient
|
|
|
|
overrides:
|
|
- when: complexity > 0.6
|
|
pick: medium
|
|
|
|
- when: failure == "hallucination"
|
|
pick: large
|
|
|
|
- when: retries >= 2
|
|
pick: large
|
|
|
|
routing:
|
|
start: discovery
|
|
|
|
rules:
|
|
# initial flow
|
|
- when: !has(discovery_result)
|
|
next: discovery
|
|
|
|
- when: has(discovery_result) && !has(plan)
|
|
next: planner
|
|
|
|
- when: has(plan) && !has(execution_result)
|
|
next: executor
|
|
|
|
- when: has(execution_result) && !has(critic_decision)
|
|
next: critic
|
|
|
|
# success exit
|
|
- when: critic_decision.decision == "pass" || tests.status == "pass"
|
|
next: done
|
|
|
|
# retry loops
|
|
- when: critic_decision.decision == "retry" && failure == "test_fail"
|
|
next: executor
|
|
mutate:
|
|
- inject_failure_reason
|
|
- increment_retries
|
|
|
|
- when: critic_decision.decision == "retry" && failure == "schema_fail"
|
|
next: executor
|
|
mutate:
|
|
- tighten_constraints
|
|
- increment_retries
|
|
|
|
- when: critic_decision.decision == "retry" && failure == "hallucination"
|
|
next: fixer_minimal
|
|
mutate:
|
|
- restrict_to_provided_context
|
|
- increment_retries
|
|
|
|
# escalation
|
|
- when: retries >= 2 && tests.status == "fail"
|
|
next: fixer_minimal
|
|
|
|
# fallback
|
|
- when: iteration >= 10
|
|
next: done |