darwin-agents 0.6.0-alpha.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +97 -0
- package/README.md +43 -1
- package/dist/src/cli/run.js +1 -1
- package/dist/src/cli/run.js.map +1 -1
- package/dist/src/evolution/alignment.d.ts +44 -0
- package/dist/src/evolution/alignment.d.ts.map +1 -1
- package/dist/src/evolution/alignment.js +124 -0
- package/dist/src/evolution/alignment.js.map +1 -1
- package/dist/src/evolution/loop.d.ts +56 -0
- package/dist/src/evolution/loop.d.ts.map +1 -1
- package/dist/src/evolution/loop.js +168 -16
- package/dist/src/evolution/loop.js.map +1 -1
- package/dist/src/evolution/multi-critic.d.ts +30 -1
- package/dist/src/evolution/multi-critic.d.ts.map +1 -1
- package/dist/src/evolution/multi-critic.js +57 -2
- package/dist/src/evolution/multi-critic.js.map +1 -1
- package/dist/src/evolution/optimizer-gepa.d.ts +47 -4
- package/dist/src/evolution/optimizer-gepa.d.ts.map +1 -1
- package/dist/src/evolution/optimizer-gepa.js +44 -5
- package/dist/src/evolution/optimizer-gepa.js.map +1 -1
- package/dist/src/evolution/pareto.d.ts +98 -3
- package/dist/src/evolution/pareto.d.ts.map +1 -1
- package/dist/src/evolution/pareto.js +193 -30
- package/dist/src/evolution/pareto.js.map +1 -1
- package/dist/src/evolution/safety.d.ts +35 -1
- package/dist/src/evolution/safety.d.ts.map +1 -1
- package/dist/src/evolution/safety.js +56 -2
- package/dist/src/evolution/safety.js.map +1 -1
- package/dist/src/evolution/sequential.d.ts +149 -0
- package/dist/src/evolution/sequential.d.ts.map +1 -0
- package/dist/src/evolution/sequential.js +239 -0
- package/dist/src/evolution/sequential.js.map +1 -0
- package/dist/src/evolution/tracker.d.ts +12 -0
- package/dist/src/evolution/tracker.d.ts.map +1 -1
- package/dist/src/evolution/tracker.js +24 -0
- package/dist/src/evolution/tracker.js.map +1 -1
- package/dist/src/index.d.ts +5 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +10 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/types.d.ts +84 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -43,8 +43,9 @@
|
|
|
43
43
|
* - **paretoSelect truncation has two strategies (V0.5.1):**
|
|
44
44
|
* `"scalarised"` (V0.5.0 default, weighted-sum tie-break) and
|
|
45
45
|
* `"crowding"` (NSGA-II Deb 2002 density-preserving truncation).
|
|
46
|
-
* GEPA Algorithm 2's instance-proportional coverage sampling
|
|
47
|
-
*
|
|
46
|
+
* GEPA Algorithm 2's instance-proportional coverage sampling SHIPPED in
|
|
47
|
+
* v0.7.0 — see `coverageFrontier`/`selectByCoverage`/`sampleByCoverage`
|
|
48
|
+
* in `pareto.ts` and the `useCoverage` path in {@link GepaOptimizer#nextGeneration}.
|
|
48
49
|
* - **GEPA+Merge (system-aware crossover from two Pareto-pool
|
|
49
50
|
* ancestors, paper Appendix F)** SHIPPED in V0.5.1 via
|
|
50
51
|
* {@link GepaOptimizer#merge}. Paper reports ~5% lift when run on
|
|
@@ -52,8 +53,9 @@
|
|
|
52
53
|
* - **Stronger reflection LM** SHIPPED in V0.5.1 via
|
|
53
54
|
* {@link GepaOptimizerOptions.reflectionRunPrompt}. Falls back to
|
|
54
55
|
* the main `runPrompt` when omitted.
|
|
55
|
-
* - **Instance-wise coverage sampling** (paper Algorithm 2)
|
|
56
|
-
*
|
|
56
|
+
* - **Instance-wise coverage sampling** (paper Algorithm 2) SHIPPED in
|
|
57
|
+
* v0.7.0 (`coverageFrontier`/`selectByCoverage`/`sampleByCoverage` in
|
|
58
|
+
* `pareto.ts`; opt-in via `NextGenerationOptions.useCoverage`).
|
|
57
59
|
*
|
|
58
60
|
* @example
|
|
59
61
|
* ```ts
|
|
@@ -83,11 +85,40 @@
|
|
|
83
85
|
* ```
|
|
84
86
|
*/
|
|
85
87
|
import { Reflector } from "./reflector.js";
|
|
86
|
-
import { paretoSelect, } from "./pareto.js";
|
|
88
|
+
import { paretoSelect, selectByCoverage, } from "./pareto.js";
|
|
87
89
|
const DEFAULT_NUM_VARIANTS = 3;
|
|
88
90
|
const MIN_NUM_VARIANTS = 1;
|
|
89
91
|
const MAX_NUM_VARIANTS = 10;
|
|
90
92
|
const DEFAULT_MAX_CARRY = 3;
|
|
93
|
+
/**
|
|
94
|
+
* v0.7.0 — Epoch-shuffled minibatch sampler (GEPA `reflection_minibatch_size`
|
|
95
|
+
* + epoch-shuffled batch sampler, adapted to an online loop).
|
|
96
|
+
*
|
|
97
|
+
* Returns a deterministic rotating window of `size` items, offset by `epoch`,
|
|
98
|
+
* wrapping around the array. Across consecutive epochs the window walks the
|
|
99
|
+
* whole array, so every item is eventually reflected on — without the
|
|
100
|
+
* persistent sampler state a true epoch shuffle needs, and without any RNG
|
|
101
|
+
* (the module stays pure). When `size` is non-positive or ≥ the array length,
|
|
102
|
+
* the full array is returned (no minibatching).
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* epochShuffledMinibatch(['a','b','c','d','e'], 2, 0) // ['a','b']
|
|
106
|
+
* epochShuffledMinibatch(['a','b','c','d','e'], 2, 1) // ['c','d']
|
|
107
|
+
* epochShuffledMinibatch(['a','b','c','d','e'], 2, 2) // ['e','a']
|
|
108
|
+
*/
|
|
109
|
+
export function epochShuffledMinibatch(items, size, epoch) {
|
|
110
|
+
const n = items.length;
|
|
111
|
+
if (n === 0)
|
|
112
|
+
return [];
|
|
113
|
+
if (!Number.isFinite(size) || size <= 0 || size >= n)
|
|
114
|
+
return [...items];
|
|
115
|
+
const e = Number.isFinite(epoch) && epoch >= 0 ? Math.floor(epoch) : 0;
|
|
116
|
+
const start = (e * size) % n;
|
|
117
|
+
const out = [];
|
|
118
|
+
for (let i = 0; i < size; i++)
|
|
119
|
+
out.push(items[(start + i) % n]);
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
91
122
|
/**
|
|
92
123
|
* V0.5.1 — GEPA+Merge prompt template (Paper Appendix F).
|
|
93
124
|
*
|
|
@@ -203,6 +234,14 @@ export class GepaOptimizer {
|
|
|
203
234
|
throw new TypeError("GepaOptimizer.nextGeneration: opts.objectives must contain at least one objective");
|
|
204
235
|
}
|
|
205
236
|
const maxCarry = opts.maxCarry ?? DEFAULT_MAX_CARRY;
|
|
237
|
+
// v0.7.0 — GEPA Algorithm 2 coverage selection (opt-in). Only taken when
|
|
238
|
+
// useCoverage is on AND every variant carries perKeyScores; otherwise we
|
|
239
|
+
// fall through to the metrics-based Pareto path so existing callers are
|
|
240
|
+
// byte-for-byte unaffected.
|
|
241
|
+
if (opts.useCoverage && scored.length > 0 && scored.every((v) => v.perKeyScores)) {
|
|
242
|
+
const coverage = scored.map((v) => v.perKeyScores);
|
|
243
|
+
return selectByCoverage(scored, coverage, maxCarry);
|
|
244
|
+
}
|
|
206
245
|
// R1 V0.5.0-alpha.2 Critic Finding M2 (S1185): map metrics back to
|
|
207
246
|
// indices via parallel array (NOT reference-identity on the metrics
|
|
208
247
|
// object). Reference-identity worked today because paretoSelect
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optimizer-gepa.js","sourceRoot":"","sources":["../../../src/evolution/optimizer-gepa.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"optimizer-gepa.js","sourceRoot":"","sources":["../../../src/evolution/optimizer-gepa.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,6 +79,31 @@ export declare const DARWIN_DEFAULT_OBJECTIVES: ReadonlyArray<ParetoObjective<{
|
|
|
79
79
|
* malformed variants poisoning the front).
|
|
80
80
|
*/
|
|
81
81
|
export declare function dominates<T extends Record<string, unknown>>(a: T, b: T, objectives: ReadonlyArray<ParetoObjective<T>>): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* True iff `a` ε-dominates `b` over the given objectives (v0.7.0).
|
|
84
|
+
*
|
|
85
|
+
* ε-dominance relaxes strict {@link dominates} with a per-objective relative
|
|
86
|
+
* tolerance applied SYMMETRICALLY: `a` may be worse than `b` on an objective
|
|
87
|
+
* by up to a fraction `epsilon` of that objective's own magnitude and still
|
|
88
|
+
* count as "non-regressing", AND `a` must beat `b` by more than that same band
|
|
89
|
+
* on at least one objective to count as a real improvement. This stops a
|
|
90
|
+
* genuinely better challenger from being rejected over a microscopic
|
|
91
|
+
* regression (e.g. "+12% quality but 0.3% slower"), while not letting a
|
|
92
|
+
* within-noise "gain" masquerade as domination.
|
|
93
|
+
*
|
|
94
|
+
* The tolerance is `epsilon · |bNorm|` per objective, so it is **scale-safe**
|
|
95
|
+
* across mixed-unit objectives (quality 0–10 vs duration in ms) — exactly
|
|
96
|
+
* like strict dominance, no pre-normalisation needed. At `epsilon = 0` this
|
|
97
|
+
* is byte-for-byte equivalent to {@link dominates} (`a < b` ⇒ false, `a > b`
|
|
98
|
+
* ⇒ strictly-better). Degenerate objective values (0) fall back to strict on
|
|
99
|
+
* that axis (zero tolerance) — fail-closed.
|
|
100
|
+
*
|
|
101
|
+
* Returns false if either side has a non-finite value for any objective
|
|
102
|
+
* (same defensive contract as {@link dominates}).
|
|
103
|
+
*
|
|
104
|
+
* @param epsilon Relative tolerance ≥ 0. Negative / NaN inputs clamp to 0.
|
|
105
|
+
*/
|
|
106
|
+
export declare function dominatesEpsilon<T extends Record<string, unknown>>(a: T, b: T, objectives: ReadonlyArray<ParetoObjective<T>>, epsilon: number): boolean;
|
|
82
107
|
/**
|
|
83
108
|
* Return the subset of `variants` that are NOT dominated by any other
|
|
84
109
|
* variant in the set. This is the Pareto front.
|
|
@@ -124,9 +149,11 @@ export declare function scalarise<T extends Record<string, unknown>>(variant: T,
|
|
|
124
149
|
* critical workloads.
|
|
125
150
|
|
|
126
151
|
* GEPA Algorithm 2's instance-proportional coverage sampling is the
|
|
127
|
-
* third paper strategy
|
|
128
|
-
*
|
|
129
|
-
*
|
|
152
|
+
* third paper strategy. It is NOT a `paretoSelect` truncation mode
|
|
153
|
+
* (it needs the per-key score matrix, not aggregate metrics) — it
|
|
154
|
+
* SHIPPED in v0.7.0 as its own pure functions {@link coverageFrontier} /
|
|
155
|
+
* {@link selectByCoverage} / {@link sampleByCoverage}, wired into the GEPA
|
|
156
|
+
* loop via `NextGenerationOptions.useCoverage`.
|
|
130
157
|
*/
|
|
131
158
|
export type ParetoTruncationStrategy = "scalarised" | "crowding";
|
|
132
159
|
export declare function paretoSelect<T extends Record<string, unknown>>(variants: ReadonlyArray<T>, objectives: ReadonlyArray<ParetoObjective<T>>, maxKeep?: number, truncationStrategy?: ParetoTruncationStrategy): T[];
|
|
@@ -162,5 +189,73 @@ export declare function paretoSelect<T extends Record<string, unknown>>(variants
|
|
|
162
189
|
* // distances[i] = sum of per-objective normalised neighbour gaps for variant i
|
|
163
190
|
* ```
|
|
164
191
|
*/
|
|
192
|
+
/**
|
|
193
|
+
* A "frontier key" in GEPA's instance-level Pareto search — a validation
|
|
194
|
+
* example id, an objective name, or an "example×objective" pair. Coverage is
|
|
195
|
+
* measured per key: a candidate that is best-in-class on many keys is more
|
|
196
|
+
* valuable (it excels on more task subsets) even if no single aggregate score
|
|
197
|
+
* crowns it.
|
|
198
|
+
*/
|
|
199
|
+
export type FrontierKey = string;
|
|
200
|
+
/**
|
|
201
|
+
* Per-variant, per-key score matrix for coverage sampling. Outer index =
|
|
202
|
+
* variant; inner map = `frontierKey → score` (higher is always better — the
|
|
203
|
+
* caller direction-normalises before calling). Variants may carry different
|
|
204
|
+
* key sets; missing keys are treated as −∞ (never best on that key).
|
|
205
|
+
*
|
|
206
|
+
* NEW v0.7.0.
|
|
207
|
+
*/
|
|
208
|
+
export type CoverageScores = ReadonlyArray<Readonly<Record<FrontierKey, number>>>;
|
|
209
|
+
/**
|
|
210
|
+
* GEPA Algorithm 2 — the instance-level Pareto frontier. For each frontier
|
|
211
|
+
* key, returns the set of variant indices that achieve the maximum score on
|
|
212
|
+
* that key (ties keep all winners). This is the structure GEPA's official
|
|
213
|
+
* `pareto` candidate selector is built on: selection probability proportional
|
|
214
|
+
* to the number of keys a candidate wins.
|
|
215
|
+
*
|
|
216
|
+
* Pure, deterministic. `eps` is the float-tie tolerance (a variant counts as
|
|
217
|
+
* a winner on a key if its score ≥ keyMax − eps). Non-finite scores never win.
|
|
218
|
+
*
|
|
219
|
+
* NEW v0.7.0 — closes the "coverage sampling = backlog for V0.6" deferral.
|
|
220
|
+
*/
|
|
221
|
+
export declare function coverageFrontier(scores: CoverageScores, eps?: number): Map<FrontierKey, Set<number>>;
|
|
222
|
+
/**
|
|
223
|
+
* Coverage weight per variant = how many frontier keys it is best-in-class on
|
|
224
|
+
* (a key shared by K co-winners contributes 1/K to each, so the weights sum
|
|
225
|
+
* to the number of covered keys — fractional credit prevents a duplicate
|
|
226
|
+
* candidate from doubling the population's apparent coverage). Returns an
|
|
227
|
+
* array indexed by variant. This is the GEPA selection weight.
|
|
228
|
+
*
|
|
229
|
+
* NEW v0.7.0.
|
|
230
|
+
*/
|
|
231
|
+
export declare function coverageWeights(scores: CoverageScores, eps?: number): number[];
|
|
232
|
+
/**
|
|
233
|
+
* Deterministically select up to `maxKeep` variants by coverage BREADTH —
|
|
234
|
+
* GEPA's diversity-preserving survivor rule. Ranks by coverage weight desc,
|
|
235
|
+
* tie-broken by total score sum desc, then original index (stable). Unlike
|
|
236
|
+
* `paretoSelect` truncation (which can keep N near-copies of the aggregate
|
|
237
|
+
* winner), this keeps candidates that win on DIFFERENT keys, preserving the
|
|
238
|
+
* spread that makes the next reflection generation productive.
|
|
239
|
+
*
|
|
240
|
+
* Pure — no RNG, so it is the test-friendly survivor selector. For the
|
|
241
|
+
* probabilistic GEPA candidate-to-mutate step, use {@link sampleByCoverage}.
|
|
242
|
+
*
|
|
243
|
+
* NEW v0.7.0.
|
|
244
|
+
*/
|
|
245
|
+
export declare function selectByCoverage<T>(variants: ReadonlyArray<T>, scores: CoverageScores, maxKeep: number, eps?: number): T[];
|
|
246
|
+
/**
|
|
247
|
+
* GEPA Algorithm 2 candidate-selection step — pick ONE variant index, sampled
|
|
248
|
+
* with probability proportional to its coverage weight (candidates excelling
|
|
249
|
+
* on more task subsets are mutated more often). Because this module is pure,
|
|
250
|
+
* the randomness is INJECTED: pass an `rng` returning a float in [0,1). When
|
|
251
|
+
* every variant has zero coverage the choice is uniform. Returns a variant
|
|
252
|
+
* index (−1 only for empty input).
|
|
253
|
+
*
|
|
254
|
+
* Mirrors the official GEPA `NonDominatedSelector(rng)` contract — same shape,
|
|
255
|
+
* so a seeded RNG makes runs reproducible.
|
|
256
|
+
*
|
|
257
|
+
* NEW v0.7.0.
|
|
258
|
+
*/
|
|
259
|
+
export declare function sampleByCoverage(scores: CoverageScores, rng: () => number, eps?: number): number;
|
|
165
260
|
export declare function crowdingDistance<T extends Record<string, unknown>>(variants: ReadonlyArray<T>, objectives: ReadonlyArray<ParetoObjective<T>>): number[];
|
|
166
261
|
//# sourceMappingURL=pareto.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pareto.d.ts","sourceRoot":"","sources":["../../../src/evolution/pareto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC,CAAC;IACb;;;OAGG;IACH,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;IACnC;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,EAAE,aAAa,CAAC,eAAe,CAAC;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC,CAKD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAC5C,OAAO,CAeT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAC1B,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAC5C,CAAC,EAAE,CAoBL;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,OAAO,EAAE,CAAC,EACV,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAC5C,MAAM,CAUR;AAED
|
|
1
|
+
{"version":3,"file":"pareto.d.ts","sourceRoot":"","sources":["../../../src/evolution/pareto.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,6 +62,58 @@ export function dominates(a, b, objectives) {
|
|
|
62
62
|
}
|
|
63
63
|
return strictlyBetterSomewhere;
|
|
64
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* True iff `a` ε-dominates `b` over the given objectives (v0.7.0).
|
|
67
|
+
*
|
|
68
|
+
* ε-dominance relaxes strict {@link dominates} with a per-objective relative
|
|
69
|
+
* tolerance applied SYMMETRICALLY: `a` may be worse than `b` on an objective
|
|
70
|
+
* by up to a fraction `epsilon` of that objective's own magnitude and still
|
|
71
|
+
* count as "non-regressing", AND `a` must beat `b` by more than that same band
|
|
72
|
+
* on at least one objective to count as a real improvement. This stops a
|
|
73
|
+
* genuinely better challenger from being rejected over a microscopic
|
|
74
|
+
* regression (e.g. "+12% quality but 0.3% slower"), while not letting a
|
|
75
|
+
* within-noise "gain" masquerade as domination.
|
|
76
|
+
*
|
|
77
|
+
* The tolerance is `epsilon · |bNorm|` per objective, so it is **scale-safe**
|
|
78
|
+
* across mixed-unit objectives (quality 0–10 vs duration in ms) — exactly
|
|
79
|
+
* like strict dominance, no pre-normalisation needed. At `epsilon = 0` this
|
|
80
|
+
* is byte-for-byte equivalent to {@link dominates} (`a < b` ⇒ false, `a > b`
|
|
81
|
+
* ⇒ strictly-better). Degenerate objective values (0) fall back to strict on
|
|
82
|
+
* that axis (zero tolerance) — fail-closed.
|
|
83
|
+
*
|
|
84
|
+
* Returns false if either side has a non-finite value for any objective
|
|
85
|
+
* (same defensive contract as {@link dominates}).
|
|
86
|
+
*
|
|
87
|
+
* @param epsilon Relative tolerance ≥ 0. Negative / NaN inputs clamp to 0.
|
|
88
|
+
*/
|
|
89
|
+
export function dominatesEpsilon(a, b, objectives, epsilon) {
|
|
90
|
+
if (objectives.length === 0)
|
|
91
|
+
return false;
|
|
92
|
+
const eps = Number.isFinite(epsilon) && epsilon > 0 ? epsilon : 0;
|
|
93
|
+
let strictlyBetterSomewhere = false;
|
|
94
|
+
for (const obj of objectives) {
|
|
95
|
+
const av = a[obj.key];
|
|
96
|
+
const bv = b[obj.key];
|
|
97
|
+
if (typeof av !== "number" || typeof bv !== "number")
|
|
98
|
+
return false;
|
|
99
|
+
if (!Number.isFinite(av) || !Number.isFinite(bv))
|
|
100
|
+
return false;
|
|
101
|
+
const aNorm = obj.direction === "maximize" ? av : -av;
|
|
102
|
+
const bNorm = obj.direction === "maximize" ? bv : -bv;
|
|
103
|
+
const tol = eps * Math.abs(bNorm);
|
|
104
|
+
// `a` regressed below `b` by more than the tolerance band → not dominating.
|
|
105
|
+
if (aNorm < bNorm - tol)
|
|
106
|
+
return false;
|
|
107
|
+
// Strictly-better must clear the SAME ε band — a within-ε "gain" is noise,
|
|
108
|
+
// not a real improvement. Applying the tolerance only to the regression
|
|
109
|
+
// side (and counting any `aNorm > bNorm` as a win) would be asymmetric:
|
|
110
|
+
// an infinitesimal gain could classify `a` as dominating while the loss
|
|
111
|
+
// side is forgiven. At ε=0 this reduces exactly to strict `aNorm > bNorm`.
|
|
112
|
+
if (aNorm > bNorm + tol)
|
|
113
|
+
strictlyBetterSomewhere = true;
|
|
114
|
+
}
|
|
115
|
+
return strictlyBetterSomewhere;
|
|
116
|
+
}
|
|
65
117
|
/**
|
|
66
118
|
* Return the subset of `variants` that are NOT dominated by any other
|
|
67
119
|
* variant in the set. This is the Pareto front.
|
|
@@ -139,37 +191,148 @@ export function paretoSelect(variants, objectives, maxKeep, truncationStrategy =
|
|
|
139
191
|
.slice(0, maxKeep);
|
|
140
192
|
}
|
|
141
193
|
/**
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
194
|
+
* GEPA Algorithm 2 — the instance-level Pareto frontier. For each frontier
|
|
195
|
+
* key, returns the set of variant indices that achieve the maximum score on
|
|
196
|
+
* that key (ties keep all winners). This is the structure GEPA's official
|
|
197
|
+
* `pareto` candidate selector is built on: selection probability proportional
|
|
198
|
+
* to the number of keys a candidate wins.
|
|
199
|
+
*
|
|
200
|
+
* Pure, deterministic. `eps` is the float-tie tolerance (a variant counts as
|
|
201
|
+
* a winner on a key if its score ≥ keyMax − eps). Non-finite scores never win.
|
|
202
|
+
*
|
|
203
|
+
* NEW v0.7.0 — closes the "coverage sampling = backlog for V0.6" deferral.
|
|
204
|
+
*/
|
|
205
|
+
export function coverageFrontier(scores, eps = 1e-9) {
|
|
206
|
+
const frontier = new Map();
|
|
207
|
+
if (scores.length === 0)
|
|
208
|
+
return frontier;
|
|
209
|
+
// Collect every key that appears on any variant.
|
|
210
|
+
const allKeys = new Set();
|
|
211
|
+
for (const variant of scores) {
|
|
212
|
+
for (const key of Object.keys(variant))
|
|
213
|
+
allKeys.add(key);
|
|
214
|
+
}
|
|
215
|
+
for (const key of allKeys) {
|
|
216
|
+
let max = Number.NEGATIVE_INFINITY;
|
|
217
|
+
for (let i = 0; i < scores.length; i++) {
|
|
218
|
+
const v = scores[i][key];
|
|
219
|
+
if (typeof v === "number" && Number.isFinite(v) && v > max)
|
|
220
|
+
max = v;
|
|
221
|
+
}
|
|
222
|
+
if (!Number.isFinite(max))
|
|
223
|
+
continue; // no finite score on this key
|
|
224
|
+
const winners = new Set();
|
|
225
|
+
for (let i = 0; i < scores.length; i++) {
|
|
226
|
+
const v = scores[i][key];
|
|
227
|
+
if (typeof v === "number" && Number.isFinite(v) && v >= max - eps) {
|
|
228
|
+
winners.add(i);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
frontier.set(key, winners);
|
|
232
|
+
}
|
|
233
|
+
return frontier;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Coverage weight per variant = how many frontier keys it is best-in-class on
|
|
237
|
+
* (a key shared by K co-winners contributes 1/K to each, so the weights sum
|
|
238
|
+
* to the number of covered keys — fractional credit prevents a duplicate
|
|
239
|
+
* candidate from doubling the population's apparent coverage). Returns an
|
|
240
|
+
* array indexed by variant. This is the GEPA selection weight.
|
|
241
|
+
*
|
|
242
|
+
* NEW v0.7.0.
|
|
172
243
|
*/
|
|
244
|
+
export function coverageWeights(scores, eps = 1e-9) {
|
|
245
|
+
const weights = new Array(scores.length).fill(0);
|
|
246
|
+
const frontier = coverageFrontier(scores, eps);
|
|
247
|
+
for (const winners of frontier.values()) {
|
|
248
|
+
if (winners.size === 0)
|
|
249
|
+
continue;
|
|
250
|
+
const share = 1 / winners.size;
|
|
251
|
+
for (const idx of winners)
|
|
252
|
+
weights[idx] += share;
|
|
253
|
+
}
|
|
254
|
+
return weights;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Deterministically select up to `maxKeep` variants by coverage BREADTH —
|
|
258
|
+
* GEPA's diversity-preserving survivor rule. Ranks by coverage weight desc,
|
|
259
|
+
* tie-broken by total score sum desc, then original index (stable). Unlike
|
|
260
|
+
* `paretoSelect` truncation (which can keep N near-copies of the aggregate
|
|
261
|
+
* winner), this keeps candidates that win on DIFFERENT keys, preserving the
|
|
262
|
+
* spread that makes the next reflection generation productive.
|
|
263
|
+
*
|
|
264
|
+
* Pure — no RNG, so it is the test-friendly survivor selector. For the
|
|
265
|
+
* probabilistic GEPA candidate-to-mutate step, use {@link sampleByCoverage}.
|
|
266
|
+
*
|
|
267
|
+
* NEW v0.7.0.
|
|
268
|
+
*/
|
|
269
|
+
export function selectByCoverage(variants, scores, maxKeep, eps = 1e-9) {
|
|
270
|
+
const n = variants.length;
|
|
271
|
+
if (n === 0)
|
|
272
|
+
return [];
|
|
273
|
+
if (typeof maxKeep !== "number" || maxKeep >= n)
|
|
274
|
+
return [...variants];
|
|
275
|
+
if (maxKeep <= 0)
|
|
276
|
+
return [];
|
|
277
|
+
const weights = coverageWeights(scores, eps);
|
|
278
|
+
const totals = scores.map((s) => {
|
|
279
|
+
let sum = 0;
|
|
280
|
+
for (const v of Object.values(s)) {
|
|
281
|
+
if (typeof v === "number" && Number.isFinite(v))
|
|
282
|
+
sum += v;
|
|
283
|
+
}
|
|
284
|
+
return sum;
|
|
285
|
+
});
|
|
286
|
+
return [...variants.keys()]
|
|
287
|
+
.sort((i, j) => {
|
|
288
|
+
const dw = (weights[j] ?? 0) - (weights[i] ?? 0);
|
|
289
|
+
if (dw !== 0)
|
|
290
|
+
return dw;
|
|
291
|
+
const dt = (totals[j] ?? 0) - (totals[i] ?? 0);
|
|
292
|
+
if (dt !== 0)
|
|
293
|
+
return dt;
|
|
294
|
+
return i - j; // stable
|
|
295
|
+
})
|
|
296
|
+
.slice(0, maxKeep)
|
|
297
|
+
.map((i) => variants[i]);
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* GEPA Algorithm 2 candidate-selection step — pick ONE variant index, sampled
|
|
301
|
+
* with probability proportional to its coverage weight (candidates excelling
|
|
302
|
+
* on more task subsets are mutated more often). Because this module is pure,
|
|
303
|
+
* the randomness is INJECTED: pass an `rng` returning a float in [0,1). When
|
|
304
|
+
* every variant has zero coverage the choice is uniform. Returns a variant
|
|
305
|
+
* index (−1 only for empty input).
|
|
306
|
+
*
|
|
307
|
+
* Mirrors the official GEPA `NonDominatedSelector(rng)` contract — same shape,
|
|
308
|
+
* so a seeded RNG makes runs reproducible.
|
|
309
|
+
*
|
|
310
|
+
* NEW v0.7.0.
|
|
311
|
+
*/
|
|
312
|
+
export function sampleByCoverage(scores, rng, eps = 1e-9) {
|
|
313
|
+
const n = scores.length;
|
|
314
|
+
if (n === 0)
|
|
315
|
+
return -1;
|
|
316
|
+
if (n === 1)
|
|
317
|
+
return 0;
|
|
318
|
+
const weights = coverageWeights(scores, eps);
|
|
319
|
+
const total = weights.reduce((a, b) => a + b, 0);
|
|
320
|
+
// Draw a uniform in [0,1); clamp non-finite/out-of-range rng output.
|
|
321
|
+
const raw = rng();
|
|
322
|
+
const u = Number.isFinite(raw) ? Math.min(0.999999999, Math.max(0, raw)) : 0;
|
|
323
|
+
if (!(total > 0)) {
|
|
324
|
+
// No coverage signal anywhere → uniform pick.
|
|
325
|
+
return Math.min(n - 1, Math.floor(u * n));
|
|
326
|
+
}
|
|
327
|
+
let cumulative = 0;
|
|
328
|
+
const target = u * total;
|
|
329
|
+
for (let i = 0; i < n; i++) {
|
|
330
|
+
cumulative += weights[i] ?? 0;
|
|
331
|
+
if (target < cumulative)
|
|
332
|
+
return i;
|
|
333
|
+
}
|
|
334
|
+
return n - 1; // float-safety fallthrough
|
|
335
|
+
}
|
|
173
336
|
export function crowdingDistance(variants, objectives) {
|
|
174
337
|
const n = variants.length;
|
|
175
338
|
if (n === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pareto.js","sourceRoot":"","sources":["../../../src/evolution/pareto.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pareto.js","sourceRoot":"","sources":["../../../src/evolution/pareto.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,16 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { PromptVersionStats, SafetyThresholds, DarwinExperiment } from '../types.js';
|
|
9
9
|
export type ABTestOutcome = 'a_wins' | 'b_wins' | 'continue';
|
|
10
|
+
/**
|
|
11
|
+
* v0.7.0 — Optional per-arm composite-score samples for the sequential
|
|
12
|
+
* confidence methods (`'msprt'` / `'hoeffding'`). When omitted, the gate
|
|
13
|
+
* falls back to the v0.6.0 effect-size heuristic so all existing callers are
|
|
14
|
+
* byte-for-byte unaffected.
|
|
15
|
+
*/
|
|
16
|
+
export interface ABTestSamples {
|
|
17
|
+
a: ReadonlyArray<number>;
|
|
18
|
+
b: ReadonlyArray<number>;
|
|
19
|
+
}
|
|
10
20
|
export interface ABTestConfidence {
|
|
11
21
|
/** Effect size (Cohen's d approximation) */
|
|
12
22
|
effectSize: number;
|
|
@@ -21,6 +31,13 @@ export declare class SafetyGate {
|
|
|
21
31
|
* to proceed with evolution (prompt optimization).
|
|
22
32
|
*/
|
|
23
33
|
canEvolve(_agentName: string, stats: PromptVersionStats): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* v0.7.0 — True iff the peeking guard is configured to use a sequential
|
|
36
|
+
* method (mSPRT / Hoeffding), which needs the per-arm composite samples.
|
|
37
|
+
* The loop calls this to decide whether to load that (slightly more
|
|
38
|
+
* expensive) per-sample data before calling {@link evaluateABTest}.
|
|
39
|
+
*/
|
|
40
|
+
usesSequentialConfidence(): boolean;
|
|
24
41
|
/**
|
|
25
42
|
* Check whether score B is NOT a regression beyond the allowed threshold.
|
|
26
43
|
*
|
|
@@ -49,7 +66,7 @@ export declare class SafetyGate {
|
|
|
49
66
|
* @param overrideMinRuns — Per-test minimum runs (from ABTest.minRuns).
|
|
50
67
|
* Falls back to SafetyThresholds.minDataPoints if not provided.
|
|
51
68
|
*/
|
|
52
|
-
evaluateABTest(compositeA: number, compositeB: number, runsA: number, runsB: number, failsA?: number, failsB?: number, overrideMinRuns?: number): ABTestOutcome;
|
|
69
|
+
evaluateABTest(compositeA: number, compositeB: number, runsA: number, runsB: number, failsA?: number, failsB?: number, overrideMinRuns?: number, samples?: ABTestSamples): ABTestOutcome;
|
|
53
70
|
/**
|
|
54
71
|
* Calculate a simple confidence metric for an A/B test result.
|
|
55
72
|
* Uses effect size (difference / pooled estimate) as a proxy.
|
|
@@ -65,6 +82,23 @@ export declare class SafetyGate {
|
|
|
65
82
|
* and at least 2×minRuns total samples before a margin win counts.
|
|
66
83
|
*/
|
|
67
84
|
private meetsConfidence;
|
|
85
|
+
/**
|
|
86
|
+
* v0.7.0 — Dispatch the peeking-resistant confidence gate to the
|
|
87
|
+
* configured {@link SafetyThresholds.confidenceMethod}.
|
|
88
|
+
*
|
|
89
|
+
* - `'effect-size'` (default): the v0.6.0 heuristic ({@link meetsConfidence}).
|
|
90
|
+
* Byte-for-byte unchanged when no method is set.
|
|
91
|
+
* - `'msprt'` / `'hoeffding'`: an always-valid sequential test over the
|
|
92
|
+
* RAW per-arm composite samples (reliability is already handled by the
|
|
93
|
+
* auto-loss rule upstream, so the statistical test uses the unadjusted
|
|
94
|
+
* scores). The verdict must be `decisive` AND point in the SAME
|
|
95
|
+
* direction as the score margin — a sequential test that fires for the
|
|
96
|
+
* opposite arm does not confirm this margin.
|
|
97
|
+
*
|
|
98
|
+
* Falls back to the effect-size heuristic when a sequential method is set
|
|
99
|
+
* but no per-sample data was supplied (graceful — never throws).
|
|
100
|
+
*/
|
|
101
|
+
private isConfident;
|
|
68
102
|
/**
|
|
69
103
|
* Compute dynamic minRuns based on observed quality score variance.
|
|
70
104
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../../src/evolution/safety.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../../src/evolution/safety.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI1F,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAC;CACpB;AAMD,qBAAa,UAAU;IACrB,OAAO,CAAC,UAAU,CAAmB;gBAEzB,UAAU,GAAE,gBAAiC;IAIzD;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO;IAIjE;;;;;OAKG;IACH,wBAAwB,IAAI,OAAO;IAQnC;;;;;;;;;OASG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAUxD;;;OAGG;IACH,cAAc,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO;IAIpD;;;;;;;;;;;OAWG;IACH,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAU,EAClB,MAAM,GAAE,MAAU,EAClB,eAAe,CAAC,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,aAAa,GACtB,aAAa;IA+EhB;;;;OAIG;IACH,mBAAmB,CACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,gBAAgB;IAuBnB;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAevB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,WAAW;IAuCnB;;;;;;;;;;;;;;OAcG;IACH,qBAAqB,CACnB,WAAW,EAAE,gBAAgB,EAAE,EAC/B,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM;CAkCV"}
|