"""Pydantic settings loader for Multi_Swarm_Coevolutive. Loads configuration from environment variables and an optional ``.env`` file in the project root. Required secrets are validated at instantiation time. """ from pathlib import Path from pydantic import Field, SecretStr from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", extra="ignore", case_sensitive=False, ) cerbero_base_url: str = "http://localhost:9000" cerbero_testnet_token: SecretStr cerbero_mainnet_token: SecretStr | None = None cerbero_bot_tag: str = "swarm-poc-phase1" openrouter_api_key: SecretStr llm_model_tier_s: str = "google/gemini-3-flash-preview" llm_model_tier_a: str = "deepseek/deepseek-v4-flash" llm_model_tier_b: str = "deepseek/deepseek-v4-flash" llm_model_tier_c: str = "qwen/qwen-2.5-72b-instruct" llm_model_tier_d: str = "openai/gpt-oss-20b" openrouter_base_url: str = "https://openrouter.ai/api/v1" run_name: str = "phase1-spike-001" data_dir: Path = Field(default=Path("./data")) series_dir: Path = Field(default=Path("./series")) db_path: Path = Field(default=Path("./runs.db")) def load_settings() -> Settings: # Required fields are populated from environment / .env, not init kwargs. return Settings() # type: ignore[call-arg]