Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

synth-optimizers

Prompt optimizers for all AI applications — beginning with open-source GEPA on a language-agnostic task contract.

PyPI · Containers · Cookbooks

synth-optimizers runs GEPA — reflective prompt evolution (paper) — against any task exposed through the synth-containers HTTP contract. Point it at a container and a TOML config; it proposes prompt changes, rolls them out, scores them, keeps a Pareto frontier, and returns a deployable candidate with replayable evidence.

  • Container boundary — the optimizer only speaks HTTP. It never imports your task code or sees your model credentials.
  • Inspectable runs — every candidate carries its prompt diff, per-seed scores, rollout traces, cache profile, and usage.
  • Rust core, thin Python — the GEPA state machine is Rust (PyO3); configure runs with GepaConfig or TOML.

Supported algorithms

Algorithm Status In this repo Paper & docs
GEPA — reflective prompt evolution Supported rust/crates/synth_gepa/ (Rust engine + service), src/synth_optimizers/gepa.py (Python API), skills/gepa/SKILL.md (agent runbook) Paper · gepa-ai docs

More optimizers will land on the shared synth_optimizer_platform crate; GEPA is the first public algorithm.

Install

pip install synth-optimizers
# or
uv add synth-optimizers

Latest daily dev build:

pip install --pre \
  synth-containers==0.2.0.dev202605312141 \
  synth-optimizers==0.2.0.dev202606010003

uv add --prerelease allow \
  synth-containers==0.2.0.dev202605312141 \
  synth-optimizers==0.2.0.dev202606010003

Install uv for local development and editable installs.

Local development

Pair this repo with synth-containers at matching dev versions, then sync and install editable:

cd optimizers
uv sync --group dev
uv pip install -e ../containers
uv pip install -e .
uv run maturin develop --manifest-path rust/crates/synth_optimizers_py/Cargo.toml

Quickstart

A run is defined by TOML (or GepaConfig): which container to talk to, which prompt modules to optimize, and how to score them.

[container]
url = "http://127.0.0.1:8765"
command = ["uv", "run", "python", "banking77_container/synth_service_app.py", "--port", "8765"]

[candidate]
target_modules = ["stage2_system"]

[seed_candidate]
stage2_system = "Classify the query into exactly one Banking77 intent. Return only the label."

[dataset]
train_seeds = [0, 1, 2, 3, 4, 5, 6, 7]
heldout_seeds = [100, 101, 102, 103]
from synth_containers import Container
from synth_optimizers import GepaConfig, GepaRun, OptimizerRun, TasksetSelection

container = Container("my-task")

with container.serve() as handle:
    result = OptimizerRun(
        GepaConfig(
            container=handle.connection(),
            taskset=TasksetSelection(train_ids=["train:0", "train:1"], heldout_ids=["test:100"]),
            program=None,
            objectives=None,
            policy=None,
        )
    ).execute()

print(result.best_candidate)
print(f"cost: ${result.cost_usd:.2f}")

Or load TOML directly: GepaRun.from_toml("gepa.toml").execute().

CLI:

synth-optimizers gepa run --config gepa.toml
synth-optimizers gepa service --db service.sqlite
synth-optimizers events compare --left a.jsonl --right b.jsonl

Runnable task examples: GEPA cookbooks (Banking77, HotpotQA, MiniGrid, TBLite, Crafter).

Authentication and models

Policy models run inside your task container; the reflective proposer runs Codex on the host (or in Docker). Rollout requests never carry proposer keys.

Default OpenAI API key setup:

export OPENAI_API_KEY="sk-..."
export SYNTH_OPTIMIZERS_TERMINAL=1   # optional: live usage in the terminal
[policy]
provider = "openai"
model = "gpt-4.1-nano"
api_key_env = "OPENAI_API_KEY"

[proposer]
backend = "codex_app_server"
runtime_substrate = "local"
provider = "openai"
auth_mode = "api_key"
api_key_env = "OPENAI_API_KEY"
copy_host_auth = false
model = "gpt-5.4-nano"
sandbox_mode = "workspace-write"
approval_policy = "never"
timeout_seconds = 900

OpenRouter proposer (provider = "openrouter", api_key_env = "OPENROUTER_API_KEY") — policy can stay on OpenAI. See skills/gepa/SKILL.md for full TOML.

Features

  • OpenAI API key proposer — run-local Codex home; does not use your host ~/.codex login.
  • OpenRouter proposer — provider-aware Codex config and base URL; OpenRouter works for policy rollouts too.
  • ChatGPT subscription proposer — auth_mode = "chatgpt" with required codex_home (OAuth via Codex CLI or opencode-openai-codex-auth); models include gpt-5.4-mini, gpt-5.3-codex, gpt-5.3-codex-spark, gpt-5.5; proposer usage is $0, policy rollouts still bill normally.
  • Live usage — SYNTH_OPTIMIZERS_TERMINAL=1 prints running token and cost splits (usage total=… policy=… proposer=…).
  • Docker proposer — runtime_substrate = "docker" with [proposer.docker].image; workspaces stage under ~/.cache/synth-gepa-docker-workspaces/, sync back, then cleanup; image: docker/codex-gepa-proposer/Dockerfile.
  • Gemini and other policy providers — supported on the policy side via [policy].provider, base_url, and container env keys; proposer stays Codex.
  • DeepSeek direct — provider = "deepseek" with backend = "deepseek_chat" runs the proposer through DeepSeek Chat Completions; OpenRouter DeepSeek slugs remain supported through provider = "openrouter".
  • Preflight validation — missing keys, missing codex_home/auth.json, or disallowed ChatGPT models fail before rollouts start.

Agent docs: skills/gepa/SKILL.md.

License

Apache-2.0

Metadata

Release files for synth-optimizers 0.2.0.dev202606010003

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for synth-optimizers 0.2.0.dev202606010003
File Size Uploaded Provenance
synth_optimizers-0.2.0.dev202606010003.tar.gz 321.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for synth-optimizers 0.2.0.dev202606010003
File Interpreter ABI Platform
synth_optimizers-0.2.0.dev202606010003-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details

Total release size: 5.9 MB

Release files / synth_optimizers-0.2.0.dev202606010003.tar.gz

Download URL synth_optimizers-0.2.0.dev202606010003.tar.gz
Size 321.8 kB
Tags Source
SHA-256 checksum
How to use checksums
76f3a002f56b67f86073aa76fe90b800bf0f89f0a7d12e832e4c7ce6087c0009
BLAKE2b-256 checksum
How to use checksums
2ceb390e5eebda6c20791bfe378a6e252091d944338a776a026b7c394b2e00a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.2

Release files / synth_optimizers-0.2.0.dev202606010003-cp311-abi3-macosx_11_0_arm64.whl

Download URL synth_optimizers-0.2.0.dev202606010003-cp311-abi3-macosx_11_0_arm64.whl
Size 5.5 MB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e65952b524bf2a764e1eda4a0bdd8a8a2661af197e3077713f903ec90e104627
BLAKE2b-256 checksum
How to use checksums
639ecba46390d700002daf7b7f10fd7320aedac5ca13cf57f8917f6a60620053
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.2

Security for synth-optimizers 0.2.0.dev202606010003

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page