Skip to content

Validate

validate performs a method-specific candidate check before canonical evaluation and gate. It is optional and does not replace the fixed evaluator.

Contract

class ValidateOperator:
    def validate(self, checkout, ctx) -> ValidateResult: ...

The result contains an acceptance boolean, reason, and artifact paths.

Variants

Variant Validation rule
minibatch_improvement rerun a GEPA child on the exact parent minibatch and apply an improvement criterion
hyperagents apply the fixed HyperAgents validation contract

minibatch_improvement

operators:
  validate:
    variant: minibatch_improvement
    criterion: strict
    n_concurrent: 4
    verifier_timeout_multiplier: 1
    max_retries: 1
    timeout_s: 3600

The validator reads the parent's rollout cases, runs the child on the same task names, rejects incomplete or infrastructure-invalid comparisons, and writes:

runs/gen-N/validate/comparison.json
runs/gen-N/validate/parent-cases.json
runs/gen-N/validate/child-cases.json
runs/gen-N/validate/child-eval/

The child replay accepts the same Harbor reliability controls as rollout, including n_concurrent, timeout multipliers, and max_retries. If otherwise healthy verifier jobs regularly reach their task-declared timeout, increase verifier_timeout_multiplier on both rollout and validate; lowering n_concurrent can also reduce host contention. These controls change execution headroom, not the minibatch comparison criterion. The parent and child settings should remain symmetric.

Use the criterion declared by the method, such as strict or non_decreasing; changing it changes the experiment policy.

hyperagents

The HyperAgents validator applies its fixed candidate check and retains its compile/check log beneath:

runs/gen-N/validate/

If no validate block is present, the driver proceeds from mutation (and any configured novelty) to canonical evaluation.