from __future__ import annotations import random from typing import Any from .hypothesis import HypothesisAgentGenome, ModelTier def uniform_crossover( p1: HypothesisAgentGenome, p2: HypothesisAgentGenome, rng: random.Random, ) -> HypothesisAgentGenome: """Per ogni campo, eredita da p1 (prob 0.5) o p2.""" def pick(field: str) -> Any: return getattr(p1 if rng.random() < 0.5 else p2, field) tier_pick: ModelTier = pick("model_tier") feature_pick: list[str] = pick("feature_access") payload: dict[str, Any] = { "system_prompt": pick("system_prompt"), "feature_access": list(feature_pick), "temperature": pick("temperature"), "top_p": pick("top_p"), "model_tier": tier_pick.value, "lookback_window": pick("lookback_window"), "cognitive_style": pick("cognitive_style"), "parent_ids": [p1.id, p2.id], "generation": max(p1.generation, p2.generation) + 1, } return HypothesisAgentGenome.from_dict(payload)