gepa engine is the PyPI reflective engine; the other three are plugin-native and use a shared Task, BudgetTracker, and external evaluation workspace.
Comparison
Omit
engine to run the default Omni workflow, or pass one of these values to run_optimization() to compare a single engine head-to-head.
Shared Chat Completions runtime
All engines call the same OpenAI-compatible Chat Completions endpoint. The historical Codex names remain public compatibility surfaces, but model calls no longer invoke a provider CLI.CodexAgentProposer and the native agent engines use OpenAIChatCompletionRunner underneath.
Configure the endpoint once:
OPENAI_MODEL is authoritative. Legacy agent_model, codex_model, and backend command parameters remain accepted for source compatibility but do not select a different provider or executable.
Read-only GEPA proposer
CodexAgentProposer implements:
response_format={"type": "json_object"}. The response must contain new_texts with exactly the requested keys and string values.
Pass input_cost_per_million, output_cost_per_million, and max_token_cost when a PyPI GEPA run is cost-bounded. sandbox=False is rejected, and the plugin checkout is never used for proposal artifacts.
Native agent runner
The production native runner isOpenAIChatCompletionRunner:
sandbox=True is mandatory at the wrapper boundary, and external run_dir and output_dir paths are always required.
CodexAgentRunner is retained only for callers that directly depend on the old subprocess class. The plugin pipeline does not construct it.
Parallelism
For GEPA P×N proposal sampling, passgepa_parallel_proposals=(parents, mutations) with a suitable max_concurrency. Omitting it retains the sequential one-worker configuration.
EngineConfig.max_workers and parallel control proposal concurrency for the PyPI reflective engine.
Preflight per engine
Preflight is non-interactive and does not send a prompt unless--test-lm is supplied:
OPENAI_* variables.