anomaly-detection / src /config.py
zeetay's picture
initial deploy
b0add2b verified
Raw
History Blame Contribute Delete
1.27 kB
"""Load project configuration from config.yaml."""
from __future__ import annotations
from dataclasses import dataclass
from pathlib import Path
import yaml
_ROOT = Path(__file__).resolve().parent.parent
_CONFIG_PATH = _ROOT / "config.yaml"
@dataclass
class StreamConfig:
phase_a_length: int
phase_b_length: int
phase_c_length: int
drift_magnitude: float
anomaly_rate: float
point_ratio: float
delay: float
seed: int
@dataclass
class DetectorConfig:
n_trees: int
height: int
window_size: int
threshold: float
seed: int
@dataclass
class DriftConfig:
delta: float
grace_period: int
@dataclass
class ServerConfig:
port: int
replay_buffer_size: int
@dataclass
class Config:
stream: StreamConfig
detector: DetectorConfig
drift: DriftConfig
server: ServerConfig
def load_config(path: Path = _CONFIG_PATH) -> Config:
with open(path) as f:
raw = yaml.safe_load(f)
return Config(
stream=StreamConfig(**raw["stream"]),
detector=DetectorConfig(**raw["detector"]),
drift=DriftConfig(**raw["drift"]),
server=ServerConfig(**raw["server"]),
)
# Module-level singleton loaded once at import time
settings: Config = load_config()