modrec-workflow/helpers/app_settings.py

71 lines
1.6 KiB
Python
Raw Normal View History

import os
from dataclasses import dataclass
from functools import lru_cache
import yaml
2025-05-22 14:12:36 -04:00
@dataclass
class GeneralConfig:
2025-05-22 14:12:36 -04:00
run_mode: str
@dataclass
class DataSetConfig:
input_dir: str
num_slices: int
train_split: float
seed: int
2025-05-21 15:46:59 -04:00
modulation_types: list
val_split: float
output_dir: str
2025-05-22 14:12:36 -04:00
@dataclass
class TrainingConfig:
batch_size: int
epochs: int
learning_rate: float
2025-05-22 14:41:07 -04:00
checkpoint_dir: str
checkpoint_filename: str
use_gpu: bool
2025-05-22 14:12:36 -04:00
@dataclass
class InferenceConfig:
num_classes: int
onnx_model_filename: str
2025-05-22 14:12:36 -04:00
@dataclass
class AppConfig:
build_dir: str
2025-05-22 14:12:36 -04:00
class AppSettings:
"""Application settings, to be initialized from app.yaml configuration file."""
def __init__(self, config_file: str):
# Load the YAML configuration file
with open(config_file, "r") as f:
config_data = yaml.safe_load(f)
# Parse the loaded YAML into dataclass objects
self.general = GeneralConfig(**config_data["general"])
self.dataset = DataSetConfig(**config_data["dataset"])
self.training = TrainingConfig(**config_data["training"])
self.inference = InferenceConfig(**config_data["inference"])
self.app = AppConfig(**config_data["app"])
2025-05-22 14:12:36 -04:00
@lru_cache
def get_app_settings() -> AppSettings:
"""Return application configuration settings."""
module_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
config_file = os.path.join(module_path, "conf", "app.yaml")
return AppSettings(config_file=config_file)
if __name__ == "__main__":
2025-05-22 14:12:36 -04:00
s = get_app_settings()