Skip to content

Evolution Config

genesis.core.EvolutionConfig dataclass

Configuration for evolution loop.

ARCHITECTURAL NOTE (SAGA Paper): Genesis currently implements SAGA's "inner loop" (solution optimization). Future extensions could add SAGA's "outer loop" (objective evolution):

  • Objective evolution: LLM modifies evaluate.py based on reward hacking
  • Bi-level optimization: Separate solution-level and objective-level
  • Multi-objective: Pareto frontier instead of single combined_score

See docs/saga_integration.md for design details.

Source code in genesis/core/runner.py
@dataclass
class EvolutionConfig:
    """Configuration for evolution loop.

    ARCHITECTURAL NOTE (SAGA Paper):
    Genesis currently implements SAGA's "inner loop" (solution optimization).
    Future extensions could add SAGA's "outer loop" (objective evolution):

    - Objective evolution: LLM modifies evaluate.py based on reward hacking
    - Bi-level optimization: Separate solution-level and objective-level
    - Multi-objective: Pareto frontier instead of single combined_score

    See docs/saga_integration.md for design details.
    """
    task_sys_msg: Optional[str] = None
    patch_types: List[str] = field(default_factory=lambda: ["diff"])
    patch_type_probs: List[float] = field(default_factory=lambda: [1.0])
    num_generations: int = 10
    max_parallel_jobs: int = 2
    max_patch_resamples: int = 3
    max_patch_attempts: int = 5
    job_type: str = "local"
    language: str = "python"
    llm_models: List[str] = field(default_factory=lambda: ["azure-gpt-4.1-mini"])
    llm_dynamic_selection: Optional[Union[str, BanditBase]] = None
    llm_dynamic_selection_kwargs: dict = field(default_factory=lambda: {})
    llm_kwargs: dict = field(default_factory=lambda: {})
    meta_rec_interval: Optional[int] = None
    meta_llm_models: Optional[List[str]] = None
    meta_llm_kwargs: dict = field(default_factory=lambda: {})
    meta_max_recommendations: int = 5
    embedding_model: Optional[str] = None
    init_program_path: Optional[str] = "initial.py"
    results_dir: Optional[str] = None
    max_novelty_attempts: int = 3
    code_embed_sim_threshold: float = 1.0
    novelty_llm_models: Optional[List[str]] = None
    novelty_llm_kwargs: dict = field(default_factory=lambda: {})
    use_text_feedback: bool = False
    # ALMA-style long-term memory
    alma_enabled: bool = False
    alma_max_entries: int = 256
    alma_max_retrievals: int = 4
    alma_min_success_delta: float = 0.0
    # GEPA-style prompt optimization (DSPy-inspired)
    gepa_enabled: bool = False
    gepa_num_fewshot_traces: int = 3
    gepa_max_traces: int = 64
    gepa_min_improvement: float = 0.0
    gepa_exploration_weight: float = 1.1
    gepa_candidate_instructions: Optional[List[str]] = None

    # Web search
    web_search_enabled: bool = False
    web_search_prob: float = 0.1

    # Git tracking and strategy metadata
    git_commit_sha: Optional[str] = None
    git_dirty: bool = False
    git_branch: Optional[str] = None
    strategy_name: str = "default"