File size: 3,744 Bytes
d54e6a9
 
 
 
 
 
208adf4
d54e6a9
 
208adf4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eb70b46
208adf4
d54e6a9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b834258
 
 
 
c2280e3
 
d234e06
04600a5
 
 
 
 
 
 
 
 
 
59f2d9e
 
04600a5
ae31891
04600a5
d234e06
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
"""
EXAONE-3.0-7.8B-Instruct ๋ชจ๋ธ์„ Hugging Face์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ 
Ollama์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ
"""

import os
import sys
from huggingface_hub import snapshot_download, login

# ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ๋ฅผ Python ๊ฒฝ๋กœ์— ์ถ”๊ฐ€
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

def get_huggingface_token():
    """
    Hugging Face ํ† ํฐ ๊ฐ€์ ธ์˜ค๊ธฐ (ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์šฐ์„ , ์—†์œผ๋ฉด DB์—์„œ)
    Google API ํ‚ค ๊ด€๋ฆฌ ๋ฐฉ์‹๊ณผ ๋™์ผํ•œ ํŒจํ„ด
    """
    # ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ ๋จผ์ € ํ™•์ธ
    token = os.getenv('HUGGINGFACE_HUB_TOKEN', '').strip()
    if not token:
        token = os.getenv('HF_TOKEN', '').strip()
    
    if token:
        print(f"[Hugging Face] ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ ํ† ํฐ ๊ฐ€์ ธ์˜ด (๊ธธ์ด: {len(token)}์ž)")
        return token
    
    # DB์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ (์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์—ฌ๊ธฐ์„œ ์ž„ํฌํŠธ)
    try:
        from app.database import SystemConfig
        token = SystemConfig.get_config('huggingface_token', '').strip()
        if token:
            print(f"[Hugging Face] DB์—์„œ ํ† ํฐ ๊ฐ€์ ธ์˜ด (๊ธธ์ด: {len(token)}์ž)")
        return token
    except Exception as e:
        print(f"[Hugging Face] DB์—์„œ ํ† ํฐ ์กฐํšŒ ์‹คํŒจ (ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ): {e}")
        return ''

# Hugging Face ํ† ํฐ ๊ฐ€์ ธ์˜ค๊ธฐ
HF_TOKEN = get_huggingface_token()
if not HF_TOKEN:
    raise ValueError("HUGGINGFACE_HUB_TOKEN ๋˜๋Š” HF_TOKEN ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ๊ด€๋ฆฌ ํŽ˜์ด์ง€์—์„œ ํ† ํฐ์„ ์„ค์ •ํ•ด์ฃผ์„ธ์š”.")
MODEL_NAME = "LGAI-EXAONE/EXAONE-3.0-7.8B-Instruct"

def download_model():
    """Hugging Face์—์„œ ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ"""
    print("=" * 60)
    print("EXAONE-3.0-7.8B-Instruct ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ")
    print("=" * 60)
    
    # Hugging Face ๋กœ๊ทธ์ธ
    try:
        login(token=HF_TOKEN)
        print("[OK] Hugging Face ๋กœ๊ทธ์ธ ์„ฑ๊ณต")
    except Exception as e:
        print(f"[ERROR] Hugging Face ๋กœ๊ทธ์ธ ์‹คํŒจ: {e}")
        return False
    
    # ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ
    try:
        print(f"\n๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ์‹œ์ž‘: {MODEL_NAME}")
        print("์ฃผ์˜: ๋ชจ๋ธ ํฌ๊ธฐ๊ฐ€ ์•ฝ 15GB์ด๋ฏ€๋กœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...")
        
        download_path = snapshot_download(
            repo_id=MODEL_NAME,
            token=HF_TOKEN,
            local_dir="./models/EXAONE-3.0-7.8B-Instruct",
            local_dir_use_symlinks=False
        )
        
        print(f"\n[OK] ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ์™„๋ฃŒ!")
        print(f"์ €์žฅ ์œ„์น˜: {download_path}")
        return True
        
    except Exception as e:
        print(f"[ERROR] ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ์‹คํŒจ: {e}")
        return False

if __name__ == "__main__":
    import sys
    
    print("\n์ด ์Šคํฌ๋ฆฝํŠธ๋Š” EXAONE ๋ชจ๋ธ์„ Hugging Face์—์„œ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.")
    print("๋‹ค์šด๋กœ๋“œ๋œ ๋ชจ๋ธ์€ Ollama์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ,")
    print("GGUF ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.")
    print("\n์ฐธ๊ณ : Ollama๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ GGUF ํ˜•์‹์˜ ๋ชจ๋ธ๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.")
    
    response = input("\n๊ณ„์†ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (y/n): ")
    if response.lower() != 'y':
        print("๋‹ค์šด๋กœ๋“œ๋ฅผ ์ทจ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.")
        sys.exit(0)
    
    success = download_model()
    
    if success:
        print("\n" + "=" * 60)
        print("๋‹ค์šด๋กœ๋“œ ์™„๋ฃŒ!")
        print("=" * 60)
        print("\n๋‹ค์Œ ๋‹จ๊ณ„:")
        print("1. llama.cpp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GGUF ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜")
        print("2. ๋ณ€ํ™˜๋œ ๋ชจ๋ธ์„ Ollama์— ์ถ”๊ฐ€")
        print("\n์ž์„ธํ•œ ๋‚ด์šฉ์€ EXAONE_์„ค์น˜_๊ฐ€์ด๋“œ.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.")
        print("=" * 60)
    else:
        print("\n๋‹ค์šด๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.")