DataEngEval / src /utils /config_loader.py
uparekh01151's picture
Add dataset visibility configuration - only show nyc_taxi_small by default
a026fe5
"""
Configuration Loader
Loads and manages configuration from YAML files.
"""
import yaml
import os
from typing import Dict, Any, Optional
from dataclasses import dataclass
@dataclass
class AppConfig:
"""Application configuration."""
title: str
description: str
theme: str
server_host: str
server_port: int
server_share: bool
@dataclass
class LeaderboardConfig:
"""Leaderboard configuration."""
path: str
columns: list
top_results: int
results_table_headers: list
@dataclass
class MetricsConfig:
"""Metrics configuration."""
weights: Dict[str, float]
descriptions: Dict[str, str]
thresholds: Dict[str, float]
formatting: Dict[str, str]
@dataclass
class PromptsConfig:
"""Prompts configuration."""
files: Dict[str, str]
fallback: str
placeholders: Dict[str, str]
sections: Dict[str, str]
class ConfigLoader:
"""Loads and manages configuration from YAML files."""
def __init__(self, config_dir: str = "config"):
self.config_dir = config_dir
self._app_config = None
self._leaderboard_config = None
self._metrics_config = None
self._prompts_config = None
def _load_yaml(self, filename: str) -> Dict[str, Any]:
"""Load a YAML configuration file."""
filepath = os.path.join(self.config_dir, filename)
if not os.path.exists(filepath):
raise FileNotFoundError(f"Configuration file not found: {filepath}")
with open(filepath, 'r') as f:
return yaml.safe_load(f)
def get_app_config(self) -> AppConfig:
"""Get application configuration."""
if self._app_config is None:
config = self._load_yaml("app.yaml")
app = config["app"]
server = app["server"]
self._app_config = AppConfig(
title=app["title"],
description=app["description"],
theme=app["theme"],
server_host=server["host"],
server_port=server["port"],
server_share=server["share"]
)
return self._app_config
def get_leaderboard_config(self) -> LeaderboardConfig:
"""Get leaderboard configuration."""
if self._leaderboard_config is None:
config = self._load_yaml("app.yaml")
leaderboard = config["leaderboard"]
display = leaderboard["display"]
self._leaderboard_config = LeaderboardConfig(
path=leaderboard["path"],
columns=leaderboard["columns"],
top_results=display["top_results"],
results_table_headers=display["results_table_headers"]
)
return self._leaderboard_config
def get_metrics_config(self) -> MetricsConfig:
"""Get metrics configuration."""
if self._metrics_config is None:
config = self._load_yaml("metrics.yaml")
metrics = config["metrics"]
self._metrics_config = MetricsConfig(
weights=metrics["weights"],
descriptions=metrics["descriptions"],
thresholds=metrics["thresholds"],
formatting=metrics["formatting"]
)
return self._metrics_config
def get_prompts_config(self) -> PromptsConfig:
"""Get prompts configuration."""
if self._prompts_config is None:
config = self._load_yaml("prompts.yaml")
prompts = config["prompts"]
self._prompts_config = PromptsConfig(
files=prompts["files"],
fallback=prompts["fallback"],
placeholders=prompts["placeholders"],
sections=prompts["sections"]
)
return self._prompts_config
def get_dialects(self) -> list:
"""Get available SQL dialects."""
config = self._load_yaml("app.yaml")
return config["dialects"]
def get_ui_config(self) -> Dict[str, Any]:
"""Get UI configuration."""
config = self._load_yaml("app.yaml")
return config["ui"]
def get_environment_config(self) -> Dict[str, Any]:
"""Get environment configuration."""
config = self._load_yaml("app.yaml")
return config["environment"]
def get_mock_sql_config(self) -> Dict[str, Any]:
"""Get mock SQL configuration."""
config = self._load_yaml("metrics.yaml")
return config["mock_sql"]
def get_visible_datasets(self) -> list:
"""Get list of visible datasets from configuration."""
config = self._load_yaml("app.yaml")
return config.get("visible_datasets", [])
# Global configuration loader instance
config_loader = ConfigLoader()