| import yaml |
| from typing import Dict, AnyStr, Union, Any |
| from pathlib import Path |
|
|
| from ..prompt import SimpleReactPrompt, ZeroShotReactPrompt |
| from .logger import get_logger |
|
|
| logger = get_logger() |
|
|
|
|
| class Config: |
| """ |
| A class for loading and creating configuration dictionaries from files or dictionaries. |
| """ |
|
|
| @staticmethod |
| def _prompt_constructor(loader, node): |
| value = node.value |
| if value == "SimpleReactPrompt": |
| return SimpleReactPrompt() |
| elif value == "ZeroShotReactPrompt": |
| return ZeroShotReactPrompt() |
| else: |
| logger.warning(f"Unknown prompt name: {value}. use default SimpleReactPrompt") |
| return SimpleReactPrompt() |
|
|
| @staticmethod |
| def load(path: Union[Path, AnyStr]) -> Dict[AnyStr, Any]: |
| """ |
| Load a configuration dictionary from a YAML file. |
| |
| :param path: The path to the configuration file. |
| :type path: Union[Path, AnyStr] |
| :raises FileNotFoundError: If the file is not found. |
| :raises yaml.YAMLError: If a YAML error occurred while loading the file. |
| :raises Exception: If an unexpected error occurred. |
| :return: A dictionary containing the configuration. |
| :rtype: Dict[AnyStr, Any] |
| """ |
| |
| logger.info(f"Starting to load configuration from {path}") |
|
|
| |
| yaml.add_constructor('!prompt', Config._prompt_constructor) |
|
|
| try: |
| with open(path, "r") as f: |
| config = yaml.load(f, Loader=yaml.FullLoader) |
| logger.info(f"Successfully loaded configuration from {path}") |
| return config |
| except FileNotFoundError: |
| logger.error(f"Config file {path} not found") |
| raise FileNotFoundError(f"Config file {path} not found") |
| except yaml.YAMLError as e: |
| logger.error(f"YAML error occurred while loading the configuration: {str(e)}", exc_info=True) |
| raise yaml.YAMLError(e) |
| except Exception as e: |
| logger.error(f"An unexpected error occurred: {str(e)}", exc_info=True) |
| raise Exception(e) |
|
|
| @staticmethod |
| def from_dict(config: Dict[AnyStr, Any]) -> Dict[AnyStr, Any]: |
| """ |
| Create a configuration dictionary from a Python dictionary. |
| |
| :param config: A dictionary containing configuration parameters. |
| :type config: Dict[AnyStr, Any] |
| :return: A dictionary containing the configuration. |
| :rtype: Dict[AnyStr, Any] |
| """ |
| logger.info(f"Creating Config from dictionary") |
| return config |
|
|