Source code for eval_framework.base_config
from enum import Enum
from pathlib import Path
from typing import Any
import yaml # type: ignore[import-untyped]
from pydantic import BaseModel, ConfigDict
[docs]
class BaseConfig(BaseModel):
model_config = ConfigDict(extra="forbid", frozen=True, protected_namespaces=())
[docs]
def as_dict(self) -> dict[str, Any]:
def simplify_recursive(obj: Any) -> Any:
if isinstance(obj, dict):
return {key: simplify_recursive(value) for key, value in obj.items()}
elif isinstance(obj, list):
return [simplify_recursive(item) for item in obj]
elif isinstance(obj, Path):
return str(obj)
elif isinstance(obj, Enum):
return obj.value
else:
return obj
return simplify_recursive(self.model_dump())
[docs]
@classmethod
def from_yaml(cls, yml_filename: str | Path) -> "BaseConfig":
with open(yml_filename) as conf_file:
config_dict = yaml.load(conf_file, Loader=yaml.FullLoader)
return cls(**config_dict)
[docs]
def save(self, out_file: Path) -> None:
with open(out_file, "w", encoding="UTF-8") as f:
yaml.safe_dump(self.model_dump(mode="json"), f)