text2sql-assistant / src /t2s /config.py
Ashoksainibadu's picture
Upload folder using huggingface_hub
388137e verified
Raw History Blame Contribute Delete
3 kB
"""Configuration loader module."""
import os
from dataclasses import dataclass, field
from pathlib import Path
from typing import Any, Dict
import yaml
@dataclass
class PathsConfig:
raw_data_dir: str = "data/raw/spider"
processed_data_dir: str = "data/processed"
reports_dir: str = "reports"
models_dir: str = "models"
@dataclass
class SplitConfig:
val_db_ratio: float = 0.10
@dataclass
class ModelConfig:
base_model_name: str = "Qwen/Qwen2.5-Coder-3B-Instruct"
fallback_model_name: str = "Qwen/Qwen2.5-Coder-1.5B-Instruct"
max_seq_len: int = 1024
@dataclass
class GenerationConfig:
do_sample: bool = False
temperature: float = 0.0
max_new_tokens: int = 256
include_sample_rows: bool = False
@dataclass
class SelfCorrectionConfig:
enabled: bool = False
max_retries: int = 2
@dataclass
class VotingConfig:
enabled: bool = False
n: int = 5
temperature: float = 0.7
per_candidate_timeout_seconds: float = 3.0
total_budget_seconds: float = 15.0
max_concurrent: int = 4
@dataclass
class ServingConfig:
max_concurrent_generations: int = 1
max_queue_depth: int = 10
request_timeout_seconds: float = 30.0
max_tokens_cap: int = 256
max_request_bytes: int = 65536
global_rate_limit_per_minute: int = 60
enable_metrics_auth: bool = False
@dataclass
class AppConfig:
seed: int = 42
paths: PathsConfig = field(default_factory=PathsConfig)
split: SplitConfig = field(default_factory=SplitConfig)
model: ModelConfig = field(default_factory=ModelConfig)
generation: GenerationConfig = field(default_factory=GenerationConfig)
self_correction: SelfCorrectionConfig = field(default_factory=SelfCorrectionConfig)
voting: VotingConfig = field(default_factory=VotingConfig)
serving: ServingConfig = field(default_factory=ServingConfig)
@classmethod
def load(cls, config_path: str = "configs/config.yaml") -> "AppConfig":
path = Path(config_path)
if not path.exists():
return cls()
with open(path, "r", encoding="utf-8") as f:
data: Dict[str, Any] = yaml.safe_load(f) or {}
paths_data = data.get("paths", {})
split_data = data.get("split", {})
model_data = data.get("model", {})
gen_data = data.get("generation", {})
sc_data = data.get("self_correction", {})
voting_data = data.get("voting", {})
serving_data = data.get("serving", {})
return cls(
seed=data.get("seed", 42),
paths=PathsConfig(**paths_data),
split=SplitConfig(**split_data),
model=ModelConfig(**model_data),
generation=GenerationConfig(**gen_data),
self_correction=SelfCorrectionConfig(**sc_data),
voting=VotingConfig(**voting_data),
serving=ServingConfig(**serving_data),
)
def get_env_var(name: str, default: str = "") -> str:
return os.getenv(name, default)