File size: 4,911 Bytes
519b145
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
# Hướng dẫn Switch LLM Provider

> **Mặc định kể từ bản cập nhật này, chatbot sẽ dùng local model Qwen/Qwen2.5-7B-Instruct (8-bit) nếu bạn không cấu hình `LLM_PROVIDER`.**  
> Bạn có thể dùng script bên dưới để chuyển sang API/OpenAI/... bất kỳ lúc nào.

Script để thay đổi LLM provider linh hoạt giữa local model, API mode, và các providers khác.

## Cách sử dụng

### Method 1: Python Script (Chi tiết)

```bash
# Xem cấu hình hiện tại
python3 switch_llm_provider.py show

# Switch sang local model
python3 switch_llm_provider.py local

# Switch sang local với custom model
python3 switch_llm_provider.py local --model Qwen/Qwen2.5-14B-Instruct --device cuda --8bit

# Switch sang API mode
python3 switch_llm_provider.py api

# Switch sang API với custom URL
python3 switch_llm_provider.py api --url https://custom-api.hf.space/api

# Switch sang OpenAI
python3 switch_llm_provider.py openai

# Switch sang Anthropic
python3 switch_llm_provider.py anthropic

# Switch sang Ollama
python3 switch_llm_provider.py ollama

# Tắt LLM (chỉ dùng template)
python3 switch_llm_provider.py none
```

### Method 2: Shell Script (Nhanh)

```bash
# Xem cấu hình hiện tại
./llm_switch.sh

# Switch sang local
./llm_switch.sh local

# Switch sang API
./llm_switch.sh api

# Switch sang OpenAI
./llm_switch.sh openai

# Tắt LLM
./llm_switch.sh none
```

## Các Providers hỗ trợ

### 1. Local Model (`local`)
Sử dụng local Hugging Face model trên máy của bạn.

**Cấu hình:**
```bash
LLM_PROVIDER=local
LOCAL_MODEL_PATH=Qwen/Qwen2.5-7B-Instruct
LOCAL_MODEL_DEVICE=cuda  # hoặc cpu, auto
LOCAL_MODEL_8BIT=true     # hoặc false
LOCAL_MODEL_4BIT=false    # hoặc true
```

**Ví dụ:**
```bash
# 7B model với 8-bit quantization
python3 switch_llm_provider.py local --model Qwen/Qwen2.5-7B-Instruct --device cuda --8bit

# 14B model với 4-bit quantization
python3 switch_llm_provider.py local --model Qwen/Qwen2.5-14B-Instruct --device cuda --4bit
```

### 2. API Mode (`api`)
Gọi API của Hugging Face Spaces.

**Cấu hình:**
```bash
LLM_PROVIDER=api
HF_API_BASE_URL=https://davidtran999-hue-portal-backend.hf.space/api
```

**Ví dụ:**
```bash
# Sử dụng default API URL
python3 switch_llm_provider.py api

# Sử dụng custom API URL
python3 switch_llm_provider.py api --url https://your-custom-api.hf.space/api
```

### 3. OpenAI (`openai`)
Sử dụng OpenAI API.

**Cấu hình:**
```bash
LLM_PROVIDER=openai
OPENAI_API_KEY=your-api-key-here
```

**Ví dụ:**
```bash
python3 switch_llm_provider.py openai
```

### 4. Anthropic (`anthropic`)
Sử dụng Anthropic Claude API.

**Cấu hình:**
```bash
LLM_PROVIDER=anthropic
ANTHROPIC_API_KEY=your-api-key-here
```

**Ví dụ:**
```bash
python3 switch_llm_provider.py anthropic
```

### 5. Ollama (`ollama`)
Sử dụng Ollama local server.

**Cấu hình:**
```bash
LLM_PROVIDER=ollama
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=qwen2.5:7b
```

**Ví dụ:**
```bash
python3 switch_llm_provider.py ollama
```

### 6. None (`none`)
Tắt LLM, chỉ sử dụng template-based generation.

**Ví dụ:**
```bash
python3 switch_llm_provider.py none
```

## Lưu ý quan trọng

1. **Restart Server**: Sau khi thay đổi provider, cần restart Django server để áp dụng:
   ```bash
   # Nếu dùng manage.py
   python manage.py runserver
   
   # Nếu dùng gunicorn
   systemctl restart gunicorn
   # hoặc
   pkill -f gunicorn && gunicorn ...
   ```

2. **Local Model Requirements**:
   - Cần GPU với đủ VRAM (7B 8-bit: ~7GB, 14B 4-bit: ~8GB)
   - Cần cài đặt: `transformers`, `accelerate`, `bitsandbytes`
   - Model sẽ được download tự động lần đầu

3. **API Mode**:
   - Cần internet connection
   - API endpoint phải đang hoạt động
   - Có thể có rate limits

4. **Environment Variables**:
   - Script sẽ tự động tạo/update file `.env` trong thư mục `backend/`
   - Nếu không có file `.env`, script sẽ tạo mới

## Troubleshooting

### Local model không load được
- Kiểm tra GPU có đủ VRAM không
- Thử model nhỏ hơn: `Qwen/Qwen2.5-1.5B-Instruct`
- Thử dùng CPU: `--device cpu` (chậm hơn)

### API mode không hoạt động
- Kiểm tra internet connection
- Kiểm tra API URL có đúng không
- Kiểm tra API endpoint có đang chạy không

### Script không tìm thấy .env file
- Script sẽ tự động tạo file `.env` mới
- Hoặc tạo thủ công: `touch backend/.env`

## Examples

### Development: Dùng API mode (nhanh, không cần GPU)
```bash
./llm_switch.sh api
```

### Production: Dùng local model (tốt nhất, không tốn API cost)
```bash
./llm_switch.sh local --model Qwen/Qwen2.5-7B-Instruct --device cuda --8bit
```

### Testing: Tắt LLM (chỉ template)
```bash
./llm_switch.sh none
```