GEPA.Proposer.Merge (GEPA v0.3.0)

Copy Markdown View Source

Official-compatible merge proposer.

Merge is scheduled after an accepted reflective mutation. The proposer finds two Pareto-front programs with a useful common ancestor, merges component changes relative to that ancestor, and evaluates the merged candidate on a balanced validation subsample. Counter consumption and final acceptance are handled by the engine, matching the Python implementation.

Summary

Types

t()

@type t() :: %GEPA.Proposer.Merge{
  evaluator: function(),
  last_iter_found_new_program: boolean(),
  max_merge_invocations: non_neg_integer(),
  merges_due: non_neg_integer(),
  merges_performed: {[tuple()], [tuple()]},
  seed: integer(),
  total_merges_tested: non_neg_integer(),
  use_merge: boolean(),
  val_overlap_floor: pos_integer(),
  valset: GEPA.DataLoader.t()
}

Functions

new(opts)

@spec new(keyword()) :: t()

propose(proposer, state)

@spec propose(t(), GEPA.State.t()) :: {GEPA.CandidateProposal.t() | nil, t()}

schedule_if_needed(proposer)

@spec schedule_if_needed(t()) :: t()

select_eval_subsample_for_merged_program(proposer, scores1, scores2, opts \\ [])

@spec select_eval_subsample_for_merged_program(t(), map(), map(), keyword()) :: [
  term()
]