aec-benchaec-bench

Agentic Variation (AVO)

Agentic Variation (AVO) is the part of Evolution that drafts changes to an agent workspace, including its system prompt and skills. It can inspect results, edit a copy of the workspace, test the changes, diagnose failures, and revise the draft before submission.

The design is based on Chen et al., “AVO: Agentic Variation Operators for Autonomous Evolutionary Search”. In AEC-Bench, AVO proposes a candidate; Evolution decides whether to keep it.

Where AVO fits

At the start of a cycle, Evolution chooses:

  • the parent workspace to improve;
  • the goal and editing strategy; and
  • any reference candidates that may contain useful approaches.

A reference candidate is another saved workspace version chosen as a read-only example. The API calls these candidates inspirations. The selected parent remains the sole parent, and AVO chooses which ideas to reproduce in its draft.

AVO works on a private copy of the parent and sees only the reference candidates supplied by Evolution. After AVO submits a child, Evolution runs selection checks and decides whether to accept it. The canonical workspace changes only after acceptance.

See Three kinds of checks for the difference between revision checks, selection checks, and holdout qualification.

Proposal flow

Before AVO starts, Evolution supplies the parent and its results, the goal, the editing strategy, selected reference candidates, and relevant history from earlier cycles. The Python API carries these inputs in a CandidateProposalRequest.

AVO then:

  1. chooses a fixed set of public tasks for draft feedback;
  2. runs those tasks on the parent;
  3. creates a private copy of the workspace;
  4. lets the agent edit, check, diagnose, and restore drafts; and
  5. returns the latest checked draft or finishes without a candidate.

The proposal status is submitted, abstained, budget_exhausted, or cancelled. Only submitted can contain child material. run_evolution() still runs selection checks before it can persist the child.

Tool surface

The agent receives these typed tools:

ToolPurpose
inspect_parent_resultsRead the parent results
inspect_current_candidateRead current scratch material
inspect_inspirationsRead the reference candidates selected for this proposal
inspect_previous_cyclesRead earlier evolution cycles
inspect_rejected_candidatesRead rejected-candidate summaries
read_program_guidanceRead the workspace guidance
edit_candidateApply validated prompt or skill edits in scratch
test_candidateRun the fixed revision checks for the current revision
restore_candidateRestore a previously checked draft
submit_candidateSubmit the current checked draft
abstainFinish without a child
request_adviceAsk for a new direction when the current approach is exhausted

edit_candidate changes only the private copy. Each new edit makes the previous revision results stale.

How revision checks stay comparable

AVO uses the same ordered public tasks for every revision in a proposal. This lets it compare a new draft with the parent and earlier drafts on the same work.

Every check is tied to the workspace content that was tested. A RevisionAttempt records the workspace snapshot, the reason for the edit, its TrialRecord results, and the resources used. Submission requires results from the exact revision being proposed.

Revision checks use public development tasks. Holdout tasks remain reserved for qualification after adaptation.

Limits

An AVOBudget uses these defaults:

LimitDefault
Model requests12
Tool calls40
Revision checks7
Elapsed time1,800 seconds
Consecutive evaluation errors2
Stagnant revision checks3
Advisor interventions0

AVOBudget() by itself allows no advisor calls. The normal build_avo() setup enables one unless you supply a different budget.

Token and USD limits are optional. If a configured limit needs a token count or cost that the provider did not report, AVO stops. A 0.0 cost means known free usage; None means unknown.

Conditional advice

If AVO gets stuck, a second model can suggest another direction. Advice can run:

  • after three valid checks without progress;
  • after two consecutive invalid or failed checks; or
  • when the main model calls request_advice.

The advisor sees short summaries of the goal, attempts, and remaining budget. Its role is to suggest one to three directions or confirm a validation failure.

This advisor is separate from the trial-level Advisor tool.

Memory and resume

AVO keeps at most 24 short facts between revisions and proposal cycles. This compact memory prioritises the best result, recent failure types, and useful editing directions.

When checkpointing is enabled, AVO saves enough state to continue an interrupted proposal. This includes:

  • the parent and current scratch workspace;
  • completed revision checks and their evidence;
  • budget and usage totals;
  • retained memory and advice; and
  • whether a model call or check was interrupted.

On resume, AVO verifies that the run, parent, workspace, and configuration still match. If the interruption occurred during a model call or revision check, AVO determines whether that work completed before retrying it. Completed paid work is not repeated. If the proposal already finished, resume returns the recorded result.

Python composition

build_avo() returns the proposer expected by run_evolution(). The revision_checks input is the public-task draft feedback capability described on the Evolution page.

from aec_bench.evolution import build_avo

propose = build_avo(
    model=proposal_model,
    model_identity=proposal_model_id,
    revision_checks=revision_checks,
    batch_size=5,
    advisor_model=advisor_model,              # optional
    advisor_model_identity=advisor_model_id,  # optional
)

When no advisor model is supplied, AVO reuses the proposal model. The aec-bench evolve run command builds the revision checks and proposer from YAML, so Python composition is optional.

What is tested

The AEC-Bench test suite covers AVO tools, budgets, revision evidence, advice, memory, and resume behavior with provider-free test doubles. Evidence that a particular model improves a workspace requires a separate model-backed study.

Measure model quality and cost with a public-task development run, then use separate holdout qualification before promoting the result.

Further reading

On this page