Skip to content

v0.4.1

Latest

Choose a tag to compare

@codelion codelion released this 02 Nov 06:35
73448d7

Highlights

  • Mixed evolution modes (#580, thanks @SUPR1M3): full_rewrite_probability makes a share of diff-based iterations ask for a full rewrite instead. The mode used is recorded on each program and in the evolution trace. Default 0.0.
  • AlphaEvolve interoperability (#519, #520, #522, #526, #527, #529, #532, #534, #535, #540, #541): opt-in adapters run Google's AlphaEvolve examples and evaluators locally, and export limited settings and Python bundles the other way.
  • Competitive evolution (#505): alternating competitive evolution with phase checkpoints.
  • Codex app-server provider (#512): use a ChatGPT subscription as the LLM backend, with no API key.
  • Per-island setup: per-island system messages (#496) and per-island initial programs (#547).
  • Runs that generate nothing now fail (#545): if no iteration produces a candidate, OpenEvolve.run raises EvolutionFailedError and the CLI exits with code 1, rather than presenting the seed as the evolved result.
  • Rewritten README (#580): shorter, and it now leads with research using OpenEvolve. Detailed guides moved to docs/.

New options

  • --evaluator-args forwards keyword arguments to evaluate() (#506)
  • logger_prefix and --logger-prefix tell parallel runs apart in the logs (#507)
  • checkpoint_on_improvement saves a checkpoint when a new best is found (#461)
  • evolution_trace.include_failures logs failed iterations, including timeouts and crashes, to <trace name>_failures.jsonl (#580)
  • metadata["llm_model"] records which model generated each program (#580)

Bug fixes

Evolution and database

  • Novelty-rejected programs are dropped from the database (#528)
  • Island migrants are chosen before any are moved (#524)
  • New island maps are initialized when resuming checkpoints (#530)
  • Checkpoint feature statistics are retained during construction (#510)
  • Inspiration sampling fills the available slots in small islands and bounds neighbors per feature dimension (#508, #509)
  • Early stopping honors patience with a zero convergence threshold and skips failed evaluations in the plateau count (#566, #502)
  • Explicit zero iteration budgets are honored (#531)
  • Very large finite metrics no longer overflow fallback fitness averages (#583)

LLM and workers

  • Model sampling and request seeds vary per iteration in workers, so runs stay reproducible and parallel iterations don't repeat the same response (#559, #582)
  • Ensemble weights are validated and safely normalized, zero primary-model weights are preserved, and zero-weight judges are skipped (#570, #533, #567)
  • CLI backends: Claude Code gets the prompt over stdin and failed responses are rejected, text pipes use UTF-8, and the Codex process stops before its pipes close (#497, #576, #577, #578)
  • Requests use AsyncOpenAI rather than a sync client in an executor (#513)
  • Custom clients no longer need a model field (#568)
  • All top-level config fields reach worker processes (#517), the worker event loop is preserved (#556), and callable evaluators work in subprocess workers (#423)

Parsing and evaluation

  • Only whole lines count as SEARCH/REPLACE markers (#546)
  • Full-rewrite code fences handle CRLF, whitespace after the language, literal languages and language-tag fallback (#491, #523, #544)
  • Java declarations are recognized before generic imports (#560)
  • Boolean flags survive cascade evaluation, invalid LLM judge metrics are ignored, and partial judge ensembles keep valid feedback (#572, #573, #511)
  • Embedding vector shapes are preserved after provider failures (#571)
  • Top-program metrics in prompts use a neutral label (#539)

Evolution trace and visualizer

  • Children whose parent left the archive are still traced (#581)
  • Trace payloads are snapshotted, and JSON export metadata can be reused (#579, #575)
  • HDF5 metadata lists round-trip, and strings that look like JSON stay strings (#580)
  • The visualizer normalizes checkpoint paths before discovery (#525)

Example evaluators

  • Evaluators no longer trust values reported by the candidate program (#518, #563)
  • Non-finite and invalid inputs are rejected across the math and packing evaluators (#551, #552, #553, #555, #564, #565)
  • The circle packing target is configurable through the environment, and the recorded best result is updated to 2.635977 (#501, #500)

Performance

  • Fewer per-iteration values are recomputed in the controller path (#477)

Behaviour changes to note

  • A run where no iteration produces a candidate now raises EvolutionFailedError, and the CLI exits with code 1 (#545).
  • The invalid llm.model config key is rejected with an actionable error (#503).
  • Config objects built in code now have their evolution-mode settings validated when passed to OpenEvolve (#580).

Full changelog: v0.4.0...v0.4.1