from __future__ import annotations import os from collections.abc import Mapping from dataclasses import dataclass ENABLED_ENV = "MULTI_AGENT_COLLABORATION_ENABLED" MAX_RECOVERY_ENV = "MULTI_AGENT_MAX_RECOVERY_ATTEMPTS" DEFAULT_MAX_RECOVERY_ATTEMPTS = 3 @dataclass(frozen=True) class CollaborationConfig: enabled: bool = False max_recovery_attempts: int = DEFAULT_MAX_RECOVERY_ATTEMPTS def load_config(env: Mapping[str, str] | None = None) -> CollaborationConfig: values = env or os.environ return CollaborationConfig( enabled=_parse_bool(values.get(ENABLED_ENV), default=False), max_recovery_attempts=_parse_int( values.get(MAX_RECOVERY_ENV), default=DEFAULT_MAX_RECOVERY_ATTEMPTS ), ) def _parse_bool(value: str | None, *, default: bool) -> bool: if value is None: return default return value.strip().lower() in {"1", "true", "yes", "on", "enabled"} def _parse_int(value: str | None, *, default: int) -> int: if value is None: return default try: result = int(value) except ValueError: return default return result if result > 0 else default