What the measurements say.

Every number on this site comes from a logged experiment in the bpto repo. This page collects the ones that matter: how far a prompt compresses, and which search strategy gets there with fewer rollouts.

Prompt compression: 97 tokens → 6–29, GEPA vs Bayesian optimization

12 seeds × 2,000 rollouts per arm · 100 training / 200 held-out examples per seed · task: extract people's names from a passage · model under optimization: Amazon Nova Micro; rewrites by Nova Lite · total cost $0.41 · September 2026.

Both arms use the same mutation operator (an LLM reads a minibatch of the parent's failures and rewrites), the same evaluation gate, the same budget. They differ only in which parent gets expanded and how many children are proposed and screened. The objective was constrained: minimize template tokens subject to training F1 ≥ a floor that tightened from root − 0.15 to root − 0.05 over the run.

Scatter plot of template tokens (log scale) versus train F1 for every prompt evaluated by the GEPA and Bayesian optimization arms, with each arm's Pareto front; the BO front lies to the left of GEPA's at every accuracy level. Right panel: per-seed fronts.
Left: every prompt each arm fully evaluated, pooled over 12 seeds, with each arm's non-dominated front. Right: per-seed fronts. Star = the 97-token root.

Best prompt per seed (held-out F1 in parentheses; root held-out F1 0.97–0.99)

seedGEPAtokBOtok
0List all unique full names of people in: {text}, ignoring titles and organizations.19 (0.982)Extract full names from: {text}6 (0.904)
1List unique full names from this text, ignoring titles: {text}14 (0.907)Extract full names from text, excluding titles: {text}12 (0.910)
2Extract human names from: {text}6 (0.965)Extract only personal names from this passage: {text}12 (0.951)
3Extract all unique full names from: {text}, ignoring titles and organizations.18 (0.982)Extract personal names from {text}, avoid titles and organizations.15 (0.902)
4Extract names from: {text}. List only people, no titles or orgs.14 (0.880)Extract full human names from: {text}8 (0.891)
5List all names of people in this passage, excluding titles: {text}15 (0.994)Extract all human names from: {text}8 (0.952)
6Identify all people's full names mentioned in: {text}. List them once, in order, without titles.22 (0.992)Extract only person names from: {text}8 (0.987)
7Extract full names from this text, omitting titles and entities: {text}16 (0.990)Identify human names in: {text}.6 (0.942)
8Extract all full names of individuals from: {text}11 (0.916)List all full person names from the following text.\nPassage:\n{text}15 (0.953)
9Extract full names from: {text}. Ignore titles and locations.14 (0.916)List names in this text, excluding titles and organizations: {text}15 (0.972)
10Identify all full names of individuals in this passage, avoiding titles and organizations: {text}23 (0.996)Identify and list all names of people mentioned in the text below, ignoring titles and non-person entities. Names:\n{text}29 (0.946)
11Identify all full names of people in this passage and list them in order: {text}18 (0.897)Extract full names from: {text}. Exclude titles.10 (0.987)

Summary: GEPA 15.8 ± 1.3 tokens, held-out F1 0.951; BO 12.0 ± 1.8 tokens, held-out F1 0.941. Paired difference 3.8 ± 2.0 tokens, BO shorter on 8 of 12 seeds. At the accuracy the floor targeted (root − 0.05 to − 0.10) BO is 3–5 tokens shorter with the ±2 SE band clear of zero; at stricter bars (within 0.03 of root) GEPA's Pareto pool hedges better. BO makes ~3× the reflector calls (3 children per round vs 1); a "GEPA + 3 children, random keep-1" control is planned.

Mean shortest feasible prompt length at each accuracy gap from the root, GEPA versus BO, with standard-error bands, and the paired difference showing BO shorter by 3 to 5 tokens for gaps above 0.03.
Same data averaged: at each accuracy bar (train F1 ≥ root − gap), the shortest prompt each seed found, mean ± 1 SE, and the paired GEPA − BO difference.

Source: experiments/2026-09-12-compression-v2-gepa-vs-bo (NOTES.md, results.jsonl, analysis.md).

Earlier and supporting runs

dateexperimentresult
2026-09-10Synthetic BO benchmark, 20 seeds, hash embedder + GPR + EIBO finds the planted optimum in 1.45 rounds vs 7.35 for random selection. Synthetic landscape only.
2026-09-11Synthetic ladder: 8 selection arms × 40 seeds × 6 landscape conditions, $0The Pareto pool matters, stochastic sampling does not: greedy argmax within the pool beats GEPA's sampler everywhere except a deceptive landscape (tie). BO beats GEPA's sampler under noise (0.97 vs 0.86); surrogate child pre-screening helps most with a weak mutator (0.91 vs 0.83).
2026-09-11IFBench, Nova Micro, greedy top-k, 802 callsStrict accuracy 0.175 → 0.250 held-out (n=40, inside noise). Best node is a depth-1 restatement.
2026-09-11IFBench, GEPA vs BO, 1,200 rollouts each, $0.16Tie by construction: neither arm found a child beating the root; the rewriting model only paraphrased. IFBench is a flat landscape for every published optimizer (+1.7 to +8 points).
2026-09-11Compression v1, 5 seeds × 600 rollouts, 30 training examples, $0.06597 → 5–26 tokens within 0.05 train F1. BO shorter on average (11.4 vs 17.2) but lower held-out F1 (0.936 vs 0.958): not significant, and 30 examples rewards overfitting. Led to the v2 design above.

Standing conclusions

Reference points from the GEPA paper (Agrawal et al. 2025), Qwen3-8B test accuracy: HotpotQA 42.3 → 62.3, IFBench 36.9 → 38.6, HoVer 35.3 → 52.3, PUPA 80.8 → 91.9 (≤ 7k rollouts); MIPROv2: 55.3 / 36.2 / 47.3 / 81.6.