""" System agents 配置加载工具 从 system_agents.yaml 加载配置并构建 RuntimeConfig """ from pathlib import Path import yaml from pydantic import ValidationError from schemas.agent.system_agent import SystemAgentLLMConfig from schemas.agent.runtime_config import ( ContextSource, ContextWindowMode, MessageContextConfig, RuntimeConfig, ) from utils.paths import get_system_agents_config_path def _default_system_agents_path() -> Path: return get_system_agents_config_path() def _load_system_agents_yaml(path: Path | None = None) -> dict[str, object]: target_path = path or _default_system_agents_path() with target_path.open("r", encoding="utf-8") as f: loaded = yaml.safe_load(f) or {} if not isinstance(loaded, dict): raise ValueError(f"Invalid system agents format: {target_path}") return loaded def _parse_context_messages_config( yaml_config: dict[str, object] | None, ) -> MessageContextConfig: if not yaml_config: return MessageContextConfig() raw_mode = yaml_config.get("mode", "day") mode_str = raw_mode if isinstance(raw_mode, str) else "day" raw_count = yaml_config.get("count", 2) count = raw_count if isinstance(raw_count, int) else 2 try: source = ContextSource.LATEST_CHAT except ValueError: source = ContextSource.LATEST_CHAT try: window_mode = ContextWindowMode(mode_str) except ValueError: window_mode = ContextWindowMode.DAY return MessageContextConfig( source=source, window_mode=window_mode, window_count=count, ) def build_runtime_config_from_system_agents( yaml_path: Path | None = None, ) -> RuntimeConfig: """ 从 system_agents.yaml 构建 RuntimeConfig 仅使用 worker 配置: - worker.context_messages 配置上下文窗口 - enabled_tools 固定为空(eryao 不启用自定义工具) """ raw = _load_system_agents_yaml(yaml_path) raw_agents = raw.get("agents", []) agents_list = raw_agents if isinstance(raw_agents, list) else [] worker_config: SystemAgentLLMConfig | None = None for agent in agents_list: if not isinstance(agent, dict): continue agent_type = str(agent.get("agent_type", "")).strip().lower() if agent_type == "worker": config_dict = agent.get("config") or {} try: worker_config = SystemAgentLLMConfig.model_validate(config_dict) except ValidationError: worker_config = SystemAgentLLMConfig() context_cfg = _parse_context_messages_config( worker_config.context_messages.model_dump() if worker_config else None ) return RuntimeConfig( enabled_tools=[], context=context_cfg, )