- Category
- AI Tools
- Rank
- No. 489Tools index
- Pricing
- Open Source
- Type
- TOOL
- Use case
- Agent Building · Coding
- Builder
- gepa-ai
- GitHub
- 6.7k stars
- Latest release
- v0.1.4
- Date
About
An LLM-based optimization framework that automatically improves any measurable text - prompts, code, agent architectures, or configurations - using reflection and evolutionary search algorithms. Built for AI engineers who want to systematically optimize their systems beyond manual prompt engineering.
What it does
This project treats a prompt, snippet of code, or agent design as a candidate to be rewritten and tested repeatedly. Instead of scoring a run with a single number and hoping gradient-style updates find an improvement, it has a language model read the full trace of a run, the errors, logs, and intermediate outputs, and explain why a candidate underperformed. That explanation drives the next mutation. Several competing candidates are kept alive at once rather than narrowing to one early, since different variants can each be best at different subsets of the task.
Why it's ranked here
The case for it is adoption, not hype: DSPy, MLflow, and Comet ML's Opik each wired it in as a named optimizer rather than building their own, and the documentation lists production use at companies including Shopify and Databricks. It ships MIT licensed behind one small interface to implement, which lowers the cost of trying it. The central idea, that reading a full execution trace beats collapsing a run to a single score, holds up on its own logic, though the speed and cost comparisons in the README are self-reported and worth treating as marketing until verified independently.
What's good
The adapter model is genuinely thin: connecting a new system means implementing two methods, so the built-in list already covers retrieval pipelines, tool-calling agents, terminal-use agents, and LangChain chains without forcing a rewrite of your own code. Keeping several competing candidates alive at once, rather than settling on a single best-so-far, means a variant tuned for one slice of the task is not thrown away just because it loses on average. Packaging it as an installable agent skill lets a coding agent run the optimization loop on your behalf instead of you scripting it by hand.
Tradeoffs
Because the goal is generality, using it well requires writing your own evaluation function and, for most systems, your own adapter, which is more upfront work than a single-purpose prompt tuner needs. Some optional install extras carry narrow, version-pinned dependency ranges with a documented workaround for a packaging bug in one dependency, though the core package itself has no required dependencies. Every optimization run also calls out to a language model for both the task and the reflection step, so cost scales with how many evaluations the search performs.
How to use it well
This fits teams that already have a way to score an output automatically and are willing to spend a budget of runs searching for a better prompt, code snippet, or agent design instead of hand-tuning one by hand. It pairs naturally with an existing DSPy pipeline, since that integration is the most complete one described. It is a poor fit if you cannot express your goal as an evaluator function, or if you need a single deterministic answer rather than a population of competing candidates to choose from afterward. Budget the reflection calls: each optimization round spends language-model calls on the diagnosis step, not just the task itself.
Technical notes+
pyproject.toml declares a Python floor of 3.10 and a ceiling below 3.15, zero required dependencies for the core install, and optional extras (full, confidence, langchain, dspy, test, build, dev, gskill) layered with environment markers; a comment there documents a litellm wheel gap that breaks installs on macOS, Windows and Python 3.14 unless the version is capped below 1.92, which is why the extras pin narrow ranges. src/gepa/__init__.py exposes the public surface: the optimize entry point, the GEPAAdapter and EvaluationBatch base types, a GEPAResult container, a family of stop-condition classes (MaxMetricCallsStopper, ScoreThresholdStopper, TimeoutStopCondition, and others), and the separate optimize_anything submodule. examples/aime_math/main.py shows the shape of a full run: an evaluator returning a score plus a side-info dict of input, output, reasoning, and execution_feedback, fed into optimize_anything with an EngineConfig (parallel workers, evaluation caching, a run_dir for outputs) and a ReflectionConfig naming the model used for diagnosis. README.md documents an MIT license, PyPI packaging (pip install gepa), and eight built-in adapters (default, confidence, DSPy full-program, generic RAG, MCP, TerminalBench, AnyMaths, LangChain); docs/docs/index.md is the marketing landing page and repeats the same claims with a testimonials section rather than added technical detail.
Observed
- License
- MIT, per pyproject.toml's license field and the README's license badge.
- Packaging
- Distributed on PyPI as the gepa package via pip install gepa; the core install declares zero required dependencies in pyproject.toml (dependencies = []).
- Python support
- Requires Python >=3.10 and <3.15, per pyproject.toml's requires-python.
- Interface
- Primary interface is a Python library (import gepa, gepa.optimize per README.md); src/gepa/__init__.py exposes optimize, GEPAAdapter, EvaluationBatch, and GEPAResult as the public surface.
- Extension mechanism
- New systems are connected by implementing a GEPAAdapter with evaluate and make_reflective_dataset methods, described in README.md and exposed from src/gepa/__init__.py.
- Built-in adapters
- Eight named adapters ship in the repository per README.md: DefaultAdapter, ConfidenceAdapter, DSPy Full Program, Generic RAG, MCP Adapter, TerminalBench, AnyMaths, and LangChain.
- Alternate distribution
- Also ships as an installable Agent Skill / Claude Code plugin (gepa-optimize-anything) via a plugin marketplace, per README.md, in addition to the pip package.
- Test configuration
- pyproject.toml declares testpaths = ["tests"] under tool.pytest.ini_options and lists pytest and pyright as test-related dependencies.
- Dependency fragility
- pyproject.toml's optional extras pin narrow, environment-conditional ranges on litellm, with a comment documenting an incomplete wheel matrix that breaks installs on macOS, Windows, and Python 3.14 unless the version is capped below 1.92.
Read from README.md, pyproject.toml, src/gepa/__init__.py, examples/aime_math/main.py, docs/docs/index.md.
What it can do
Optimize prompts using evolutionary search algorithms
Text prompts and performance metrics → Improved prompts with better performance scores
Automatically improve code quality through reflection
Source code and measurable quality criteria → Optimized code with enhanced performance
Enhance agent architectures using LLM-based optimization
Agent configuration files and performance benchmarks → Improved agent architectures with better efficiency
Optimize system configurations through evolutionary search
Configuration parameters and success metrics → Optimized configuration settings
Perform Pareto-efficient multi-objective optimization
Multiple conflicting objectives and constraints → Pareto-optimal solutions balancing trade-offs
Generate optimization insights through LLM reflection
Performance data and system parameters → Analysis reports with improvement recommendations
Tags
Tech Stack
Media

Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.