You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* feat(optimizer): introduce GEPA reflective evolution with Pareto sampling
Adds a sample-efficient optimizer with reflective mutation, Pareto-based candidate selection, optional crossover, and multi-objective support. Includes typed options and examples, and improves progress logging of total rounds.
* feat(optimizer): add GEPA-Flow for multi-module reflective evolution
Implements a Flow-aware GEPA variant that selects modules round-robin and supports system-aware merge across candidates. Adds AxFlow helpers to expose/set node instructions and exports the optimizer.
* feat(optimizer): make GEPA and GEPA-Flow Pareto-only to align with the paper and simplify the API; refactor examples to remove basic variants and promote Pareto examples
* refactor(optimizer): remove legacy single-objective compile and rename GEPA-Pareto to GEPA in logs/metrics
* docs(optimize): clarify that GEPA/GEPA-Flow use compile for Pareto; MiPRO continues to use compilePareto
* chore(gepa-flow): use flow() factory and add OptimizationStart logging; align labels to GEPA-Flow
* feat(gepa,gepa-flow): adopt per-instance Pareto selection (Alg. 2)
Implement paper’s Algorithm 2 candidate selection:
- Track per-instance scalar scores on validation/Pareto set (S matrix)
- Sample parent from non-dominated set weighted by per-instance wins
- Compute scalar as mean of multi-objective metrics per instance
- GEPA-Flow also samples second parent for merge via Algorithm 2
- Persist S for each accepted candidate to drive subsequent sampling
Rationale: align behavior with the GEPA paper and improve exploration vs. archive crowding-distance selection; sets the stage for optional scalar acceptance gating in a follow-up.
* refactor(optimizer): centralize Pareto helpers for GEPA/GEPA-Flow
Extract shared multi-objective utilities to paretoUtils and replace inline duplicates in gepa.ts and gepaFlow.ts. No functional changes; simplifies maintenance and sets up for paper parity.
* feat(gepa,gepa-flow): add Merge strategy and guards; parametrize Pareto size
GEPA: enable periodic instruction merge with cap and progress reporting. GEPA-Flow: add merge caps, ancestry/desirability guards per Appendix F, and make Pareto set size configurable via args. Keeps acceptance via minibatch Pareto dominance.
* feat(gepa,gepa-flow): align with GEPA paper (splits, μf, σ-accept, guards)\n\nIntroduce explicit D_feedback/D_pareto splits to control rollout budget; plumb evaluator textual feedback μ_f into reflection; default to σ-based minibatch acceptance with configurable epsilon; add scalarizer/metric-key for per-instance S and Pareto selection; implement system-aware merge guards (ancestor/outperforms, desirability, tried merges).
* feat(gepa,gepa-flow): source-parity merges, acceptance, and adapter path
- Schedule merges via mergesDue/lastIterFoundNewProgram and skip reflective on merge attempts
- Dominator-based pair + ancestor selection with desirability filter and duplicate-merge guard
- Targeted subsample for merge acceptance (new_sum ≥ max(parent sums)); full eval on accept
- Stricter minibatch acceptance; when adapter provided, also require minibatch sum(child) > sum(parent)
- Parent selection via per-instance fronts; honor maxMetricCalls; preserve fallback behavior without adapter
This aligns both GEPA and GEPA-Flow with the reference engine while keeping public API stable.
* feat(gepa,gepa-flow): deterministic selection + strict acceptance for source parity
Seed RNG across selection/minibatching, enforce maxMetricCalls budget, and add Flow merge guards/de-dup for stable improvements; re-export adapter types and update examples.
* chore(cspell,gepa,gepa-flow): add GEPA terms; resolve lint warnings
Add domain terms (GEPA, Traj, etc.) to cspell and ignore dist to keep spelling checks green. Rename unused vars and drop unused imports in GEPA optimizers to satisfy lint without behavior changes.
* feat(gepa): source-parity single-module merges, guards, and safer defaults
Align GEPA merges with source: replace LLM merge with parent-pick, add ancestor/desirability guards and de-dup, use seeded sampling, schedule merges after accepted improvements; default merges off and skipPerfectScore on to match reference behavior.
* feat(gepa,gepa-flow,optimizer): epsilon ties, optional budget, aligned defaults
Bring GEPA in line with source parity by tolerating score ties, removing the hard budget requirement, and defaulting skip‑perfect in flow to match single‑module; Pareto frontier now respects epsilon.
* feat(gepa,gepa-flow): require maxMetricCalls for strict parity
Enforce a positive `options.maxMetricCalls` in GEPA/GEPA-Flow compile loops to match the source implementation and avoid unbounded optimization runs.
BREAKING CHANGE: compile now throws if `options.maxMetricCalls` is absent or non-positive.
* fix(gepa): only skip reflective after an evaluated merge attempt\n\nAlign single-module merge gating with the reference engine so reflective mutation is skipped only when a merge is actually attempted, improving behavioral parity and avoiding lost reflective iterations when no valid merge pair exists.
* docs(optimize): migrate multi-objective docs to GEPA/GEPA-Flow using compile (remove compilePareto)
---------
Co-authored-by: Spacy <832235+dosco@users.noreply.github.com>
0 commit comments