""" 설정 관리 모듈 애플리케이션의 모든 설정을 중앙에서 관리합니다. """ import os from dotenv import load_dotenv # .env 파일 로드 load_dotenv() class Config: """애플리케이션 설정 클래스""" # API 설정 # 멀티 키 지원: UPSTAGE_API_KEYS(콤마 구분) 우선, 없으면 단일 키 사용 _UPSTAGE_API_KEYS_RAW = os.getenv('UPSTAGE_API_KEYS') if _UPSTAGE_API_KEYS_RAW: _parsed_keys = [k.strip() for k in _UPSTAGE_API_KEYS_RAW.split(',') if k.strip()] else: _single = os.getenv('UPSTAGE_API_KEY') _parsed_keys = [ _single.strip() ] if (_single and _single.strip()) else [] # 공개 속성: 호환성을 위해 첫 번째 키를 기존 이름으로 노출 UPSTAGE_API_KEYS = _parsed_keys UPSTAGE_API_KEY = _parsed_keys[0] if _parsed_keys else None HF_TOKEN = os.getenv('HF_TOKEN') # 데이터 설정 FRESHQA_DATA_REPO_ID = os.getenv('FRESHQA_DATA_REPO_ID') FRESHQA_DATA_FILENAME = os.getenv('FRESHQA_DATA_FILENAME', 'ko-freshqa_2025_total.csv') # 프롬프트 설정 # 멀티라인 값 지원: python-dotenv가 로드한 원문을 그대로 사용 FRESHQA_PROMPT_RELAXED = os.getenv('FRESHQA_PROMPT_RELAXED') FRESHQA_PROMPT_STRICT = os.getenv('FRESHQA_PROMPT_STRICT') try: from freshqa.freshqa_prompt import FRESHQA_PROMPT_RELAXED, FRESHQA_PROMPT_STRICT if not FRESHQA_PROMPT_RELAXED: FRESHQA_PROMPT_RELAXED = FRESHQA_PROMPT_RELAXED if not FRESHQA_PROMPT_STRICT: FRESHQA_PROMPT_STRICT = FRESHQA_PROMPT_STRICT except Exception as e: pass # 제출 제한 설정 ENABLE_SUBMISSION_LIMIT = os.getenv('ENABLE_SUBMISSION_LIMIT', 'true').lower() == 'true' SUBMISSION_TRACKER_REPO_ID = os.getenv('SUBMISSION_TRACKER_REPO_ID') # 리더보드 HF 업로드 설정 UPLOAD_LEADERBOARD_TO_HF = os.getenv('UPLOAD_LEADERBOARD_TO_HF', 'true').lower() == 'true' # 환경 설정 IS_HUGGINGFACE_SPACES = os.getenv("SPACE_ID") is not None @classmethod def validate_required_configs(cls): """필수 설정들이 모두 있는지 확인""" missing_configs = [] # 멀티/단일 키 모두 허용: 최소 1개 키가 존재해야 함 if not cls.UPSTAGE_API_KEYS: # 메시지는 두 변수 모두 안내 missing_configs.append('UPSTAGE_API_KEY or UPSTAGE_API_KEYS') if not cls.HF_TOKEN: missing_configs.append('HF_TOKEN') if not cls.FRESHQA_DATA_REPO_ID: missing_configs.append('FRESHQA_DATA_REPO_ID') if not cls.FRESHQA_PROMPT_RELAXED: missing_configs.append('FRESHQA_PROMPT_RELAXED') if not cls.FRESHQA_PROMPT_STRICT: missing_configs.append('FRESHQA_PROMPT_STRICT') if missing_configs: raise ValueError(f"필수 설정이 누락되었습니다: {', '.join(missing_configs)}") return True