"""설정 로딩 — config.yaml + credentials.env""" import os from pathlib import Path import yaml from pydantic import BaseModel class AIModelConfig(BaseModel): endpoint: str model: str max_tokens: int = 4096 timeout: int = 60 daily_budget_usd: float | None = None require_explicit_trigger: bool = False class AIConfig(BaseModel): gateway_endpoint: str primary: AIModelConfig fallback: AIModelConfig premium: AIModelConfig embedding: AIModelConfig vision: AIModelConfig rerank: AIModelConfig class Settings(BaseModel): # DB database_url: str = "" # AI ai: AIConfig | None = None # NAS nas_mount_path: str = "/documents" nas_pkm_root: str = "/documents/PKM" # 인증 jwt_secret: str = "" totp_secret: str = "" # kordoc kordoc_endpoint: str = "http://kordoc-service:3100" def load_settings() -> Settings: """config.yaml + 환경변수에서 설정 로딩""" # 환경변수 (docker-compose에서 주입) database_url = os.getenv("DATABASE_URL", "") jwt_secret = os.getenv("JWT_SECRET", "") totp_secret = os.getenv("TOTP_SECRET", "") kordoc_endpoint = os.getenv("KORDOC_ENDPOINT", "http://kordoc-service:3100") # config.yaml config_path = Path(__file__).parent.parent.parent / "config.yaml" ai_config = None nas_mount = "/documents" nas_pkm = "/documents/PKM" if config_path.exists(): with open(config_path) as f: raw = yaml.safe_load(f) if "ai" in raw: ai_raw = raw["ai"] ai_config = AIConfig( gateway_endpoint=ai_raw.get("gateway", {}).get("endpoint", ""), primary=AIModelConfig(**ai_raw["models"]["primary"]), fallback=AIModelConfig(**ai_raw["models"]["fallback"]), premium=AIModelConfig(**ai_raw["models"]["premium"]), embedding=AIModelConfig(**ai_raw["models"]["embedding"]), vision=AIModelConfig(**ai_raw["models"]["vision"]), rerank=AIModelConfig(**ai_raw["models"]["rerank"]), ) if "nas" in raw: nas_mount = raw["nas"].get("mount_path", nas_mount) nas_pkm = raw["nas"].get("pkm_root", nas_pkm) return Settings( database_url=database_url, ai=ai_config, nas_mount_path=nas_mount, nas_pkm_root=nas_pkm, jwt_secret=jwt_secret, totp_secret=totp_secret, kordoc_endpoint=kordoc_endpoint, ) settings = load_settings()