Inside GEPA Workbench

Adding observability and steerability to your optimize_anything runs.

What is GEPA Workbench?

GEPA Workbench is an interactive platform to observe, inspect, and steer your optimize_anything runs. The workbench lets you inspect proposed candidates, evaluations, and reflections. You can also step in at any point to steer the search with your feedback, or have GEPA Agent diagnose and propose fixes for potential issues.

Starting an optimization run

You can submit optimize_anything runs as jobs, configure and launch new runs directly in your browser, or upload a finished run to inspect it post-completion.

❯_

Submit a job

Launch a run using the submit_job call and observe it live in the workbench.

from gepa.dashboard import submit_job

Configure & launch

Set up and launch a new optimization run in the browser.

+ New run

Inspect a finished run

Upload your gepa_state.bin to replay a completed run at full fidelity.

Upload a run

Observe your optimization runs

Observe and inspect overall progress, individual candidates, training and evaluation outcomes, and model reflections.

GEPA Workbench · circle-packing-multi
← Runs circle-packing-multi In progress
Agg score0.87 (+0.14)
Calls418 / 600
ETA~4m
PauseStopBranch
Overview Evaluation Reflections
Improving Best score improved to 0.87 at iteration 12, +0.14 over the seed. ✦ Analyze
Current best
0.750.800.87▲ +0.14
Candidate 7 +19.2%
program 212 tok
def main(n, timeout, best): pts, r = anneal(grid_layout(n), steps_for(n)) …
CopyOpen ›
Score over time
Show notesPop out
0.65 0.75 0.85 0 150 300 450 600 Metric calls 0.73 0.87
seed 0.73 best 0.87 pareto 0.91
10 tasks
Fields & ScoresFields OnlyScores Only
#
n_circles
sum_radii
circles
candidates 0–7
1
1
0.500
2
2
0.586
3
3
0.663
4
4
0.714
5
5
0.741
6
6
0.766
7
7
0.788
8
8
0.803
9
9
0.812
10
10
0.820
Refiner prompt
ASI fields 6
scores.sum_radiin_circlescirclesstdouterrorvalidation_details
Reflections
Candidate 2Candidate 4accepted+0.061.9k tokens
Candidate 5Candidate 7accepted+0.032.4k tokens
Reflection output The grid layout wastes corner space once n grows past 6. Keep the greedy placement, then anneal positions and grow radii until first contact. Cap annealing steps by n so the largest tasks stay inside the timeout.
proposal: replace shrink_radii with anneal + grow_radii …
Candidate 2Candidate r1rejected−0.022.1k tokens
Logs GEPA Agent1
14:02:03iter 11paretoCandidate 6 joined the Pareto front (0.84)
14:02:11iter 12acceptCandidate 7 accepted — agg score 0.87 (+0.03)
14:02:14iter 13infominibatch eval started (5 tasks) 

Chat and Diagnostics

The GEPA Agent is built into the workbench. You can ask it questions about your runs and make edits to your configuration. It also diagnoses the run after each proposal, and when something looks wrong, it presents relevant evidence, while proposing and applying possible fixes.

GEPA Agent
Chat Diagnostics1 + new chat
Why was candidate r1 rejected?
thinking …
Candidate r1 scored 0.69 on its reflection minibatch, while its parent Candidate 2 scored 0.71 on the same tasks. Acceptance requires beating the parent, so the proposal was not added to the pool. Its main change, a denser initial grid, slowed the search on N ≥ 7.
@ run:circle-packing-multi ✕
❯ gepaAsk a question. Use '@' to add context
Diagnosing the run…
Timeouts on the largest tasks
N=9 and N=10 hit the 60s subprocess limit in 3 of the last 5 candidates, so their scores fall to 0 and drag the aggregate down.
Suggested fixCap the local search iterations by n_circles so every task finishes inside the budget.
Apply as feedbackDismiss
Agent activity
Compared per task scores across candidates
Checked stderr and timeouts in recent evals
Checking the run now

Improve a candidate with feedback

Directly edit any candidate or describe what you want changed. You can evaluate the improved candidates and add them to the pool for subsequent proposals to build on.

Improve Candidate 7
Edit the candidate directly, or describe improvements as feedback for the reflection model to propose an improved candidate.
program
def main(n, timeout, best): pts = grid_layout(n) r = shrink_radii(pts) return circles(pts, r)
Feedback for improvement
Add a local search pass after placement. Cap iterations by n to avoid timeouts.
Improve with feedback Evaluate candidate
Diff between candidates
No changes yet.
def main(n, timeout, best):
pts = grid_layout(n)
- r = shrink_radii(pts)
+ pts, r = anneal(pts, steps_for(n))
+ r = grow_radii(pts, r)
return circles(pts, r)
Evaluation
Base0.87
Improved0.91
Δ+0.04
Add candidate
Candidate addedCandidate 8 joined the pool — future proposals build from it

Help us shape GEPA Workbench

We are running a user study for GEPA Workbench. If you would like early access and are willing to share feedback, please sign up below!

Join the study