|
|
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 |
|
|
|