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"
|