File size: 3,051 Bytes
5e8f045
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4a43fed
 
 
5e8f045
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
"""
μ„€μ • 관리 λͺ¨λ“ˆ
μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λͺ¨λ“  섀정을 μ€‘μ•™μ—μ„œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
"""

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