62 lines
2.5 KiB
Python
62 lines
2.5 KiB
Python
import os
|
|
import yaml
|
|
from pathlib import Path
|
|
from typing import Dict, Any, Optional
|
|
|
|
class ConfigLoader:
|
|
"""Utility class for loading YAML configuration files"""
|
|
|
|
def __init__(self, config_root: Optional[str] = None):
|
|
if config_root is None:
|
|
project_root = Path(__file__).parent.parent.parent
|
|
self.config_root = project_root / "config"
|
|
else:
|
|
self.config_root = Path(config_root)
|
|
|
|
def load_agents_config(self, config_file: str = "research_agents.yaml") -> Dict[str, Any]:
|
|
"""Load agents configuration from YAML file"""
|
|
config_path = self.config_root / "agents" / config_file
|
|
return self._load_yaml_file(config_path)
|
|
|
|
def load_tasks_config(self, config_file: str = "research_tasks.yaml") -> Dict[str, Any]:
|
|
"""Load tasks configuration from YAML file"""
|
|
config_path = self.config_root / "tasks" / config_file
|
|
return self._load_yaml_file(config_path)
|
|
|
|
def _load_yaml_file(self, file_path: Path) -> Dict[str, Any]:
|
|
"""Load a YAML file and return its contents"""
|
|
try:
|
|
if not file_path.exists():
|
|
raise FileNotFoundError(f"Configuration file not found: {file_path}")
|
|
|
|
with open(file_path, 'r', encoding='utf-8') as file:
|
|
content = yaml.safe_load(file)
|
|
|
|
if content is None:
|
|
raise ValueError(f"Empty or invalid YAML file: {file_path}")
|
|
|
|
return content
|
|
|
|
except yaml.YAMLError as e:
|
|
raise ValueError(f"Error parsing YAML file {file_path}: {e}")
|
|
except Exception as e:
|
|
raise Exception(f"Error loading configuration file {file_path}: {e}")
|
|
|
|
def get_agent_config(self, agent_name: str, config_file: str = "research_agents.yaml") -> Dict[str, Any]:
|
|
"""Get configuration for a specific agent"""
|
|
agents_config = self.load_agents_config(config_file)
|
|
|
|
if agent_name not in agents_config:
|
|
raise KeyError(f"Agent '{agent_name}' not found in configuration file")
|
|
|
|
return agents_config[agent_name]
|
|
|
|
def get_task_config(self, task_name: str, config_file: str = "research_tasks.yaml") -> Dict[str, Any]:
|
|
"""Get configuration for a specific task"""
|
|
tasks_config = self.load_tasks_config(config_file)
|
|
|
|
if task_name not in tasks_config:
|
|
raise KeyError(f"Task '{task_name}' not found in configuration file")
|
|
|
|
return tasks_config[task_name]
|