12-Angry-Agent / agents /config_loader.py
Blu3Orange
Add agent implementation and configuration loader for jurors
8944fd8
"""Load juror configurations from YAML."""
from pathlib import Path
from typing import Any
import yaml
from core.models import JurorConfig
def load_juror_configs(config_path: str | Path | None = None) -> list[JurorConfig]:
"""Load all juror configurations from YAML file.
Args:
config_path: Path to jurors.yaml. Defaults to agents/configs/jurors.yaml.
Returns:
List of JurorConfig objects.
"""
if config_path is None:
config_path = Path(__file__).parent / "configs" / "jurors.yaml"
config_path = Path(config_path)
if not config_path.exists():
raise FileNotFoundError(f"Juror config file not found: {config_path}")
with open(config_path, "r", encoding="utf-8") as f:
data = yaml.safe_load(f)
configs = []
for juror_data in data.get("jurors", []):
config = JurorConfig(
juror_id=juror_data["juror_id"],
seat_number=juror_data["seat_number"],
name=juror_data["name"],
emoji=juror_data["emoji"],
archetype=juror_data["archetype"],
personality_prompt=juror_data["personality_prompt"],
stubbornness=juror_data["stubbornness"],
volatility=juror_data["volatility"],
influence=juror_data["influence"],
verbosity=juror_data.get("verbosity", 0.5),
initial_lean=juror_data.get("initial_lean", "neutral"),
)
configs.append(config)
return configs
def get_juror_config(juror_id: str, configs: list[JurorConfig] | None = None) -> JurorConfig | None:
"""Get a specific juror config by ID.
Args:
juror_id: The juror ID to find.
configs: Optional list of configs. If None, loads from default path.
Returns:
JurorConfig if found, None otherwise.
"""
if configs is None:
configs = load_juror_configs()
for config in configs:
if config.juror_id == juror_id:
return config
return None