Nattapong Tapachoom commited on
Commit
c484890
·
1 Parent(s): 18f1382
Files changed (1) hide show
  1. app.py +65 -3
app.py CHANGED
@@ -130,6 +130,10 @@ class LLMProvider:
130
  return self._generate_openai(prompt, model, temperature, max_tokens)
131
  elif self.provider == "huggingface":
132
  return self._generate_huggingface(prompt, model, temperature, max_tokens)
 
 
 
 
133
  else:
134
  raise ValueError(f"ไม่รองรับ provider: {self.provider}")
135
  except Exception as e:
@@ -164,6 +168,52 @@ class LLMProvider:
164
  )
165
  return response.choices[0].message.content
166
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  def _generate_huggingface(self, prompt, model, temperature, max_tokens):
168
  headers = {"Authorization": f"Bearer {self.api_key}"}
169
  response = requests.post(
@@ -546,7 +596,11 @@ def main_workflow(source_type, path_or_name, llm_provider_type, api_key, base_ur
546
  # 3. Generate new samples
547
  if n_generate > 0:
548
  progress_text += f"✨ กำลัง generate {n_generate} samples ใหม่ ({generation_type})...\n"
549
- new_samples = generate_new_samples(samples, llm_provider, generation_type, n_generate, custom_prompt)
 
 
 
 
550
  samples.extend(new_samples)
551
  progress_text += f"✅ Generate สำเร็จ {len(new_samples)} samples ใหม่\n"
552
 
@@ -565,14 +619,22 @@ def main_workflow(source_type, path_or_name, llm_provider_type, api_key, base_ur
565
  # 5. Translation
566
  if target_language and target_language != "none":
567
  progress_text += f"🌐 กำลังแปลเป็น {target_language}...\n"
568
- translated = translate_to_multilingual(samples, llm_provider, target_language)
 
 
 
 
569
  samples.extend(translated)
570
  progress_text += f"✅ แปลภาษาสำเร็จ {len(translated)} samples\n"
571
 
572
  # 6. Add multiple choice
573
  if add_multiple_choice:
574
  progress_text += "📝 กำลังเพิ่ม multiple choice options...\n"
575
- samples = add_multiple_choice_options(samples, llm_provider)
 
 
 
 
576
  progress_text += "✅ เพิ่ม multiple choice เสร็จสิ้น\n"
577
 
578
  # 7. Export
 
130
  return self._generate_openai(prompt, model, temperature, max_tokens)
131
  elif self.provider == "huggingface":
132
  return self._generate_huggingface(prompt, model, temperature, max_tokens)
133
+ elif self.provider == "deepseek":
134
+ return self._generate_deepseek(prompt, model, temperature, max_tokens)
135
+ elif self.provider == "hf_local":
136
+ return self._generate_hf_local(prompt, model, temperature, max_tokens)
137
  else:
138
  raise ValueError(f"ไม่รองรับ provider: {self.provider}")
139
  except Exception as e:
 
168
  )
169
  return response.choices[0].message.content
170
 
171
+ def _generate_deepseek(self, prompt, model, temperature, max_tokens):
172
+ url = "https://api.deepseek.com/v1/chat/completions"
173
+ headers = {
174
+ "Authorization": f"Bearer {self.api_key}",
175
+ "Content-Type": "application/json"
176
+ }
177
+ payload = {
178
+ "model": model,
179
+ "messages": [
180
+ {"role": "user", "content": prompt}
181
+ ],
182
+ "temperature": temperature,
183
+ "max_tokens": max_tokens
184
+ }
185
+ response = requests.post(url, headers=headers, json=payload)
186
+ response.raise_for_status()
187
+ result = response.json()
188
+ # DeepSeek API returns: {"choices":[{"message":{"role":"assistant","content":"..."}}], ...}
189
+ return result["choices"][0]["message"]["content"]
190
+
191
+ def _generate_hf_local(self, prompt, model, temperature, max_tokens):
192
+ # โหลดโมเดลและ tokenizer แค่ครั้งแรก (cache ใน instance)
193
+ if not hasattr(self, "_hf_local_model") or self._hf_local_model_name != model:
194
+ from transformers import AutoModelForCausalLM, AutoTokenizer
195
+ import torch
196
+ self._hf_local_model_name = model
197
+ self._hf_local_tokenizer = AutoTokenizer.from_pretrained(model)
198
+ self._hf_local_model = AutoModelForCausalLM.from_pretrained(model)
199
+ self._hf_local_model.eval()
200
+ tokenizer = self._hf_local_tokenizer
201
+ model = self._hf_local_model
202
+ import torch
203
+ inputs = tokenizer(prompt, return_tensors="pt")
204
+ with torch.no_grad():
205
+ outputs = model.generate(
206
+ **inputs,
207
+ max_new_tokens=max_tokens,
208
+ temperature=temperature,
209
+ do_sample=True
210
+ )
211
+ result = tokenizer.decode(outputs[0], skip_special_tokens=True)
212
+ # ตัด prompt ออกถ้ามี
213
+ if result.startswith(prompt):
214
+ result = result[len(prompt):].strip()
215
+ return result
216
+
217
  def _generate_huggingface(self, prompt, model, temperature, max_tokens):
218
  headers = {"Authorization": f"Bearer {self.api_key}"}
219
  response = requests.post(
 
596
  # 3. Generate new samples
597
  if n_generate > 0:
598
  progress_text += f"✨ กำลัง generate {n_generate} samples ใหม่ ({generation_type})...\n"
599
+ if llm_provider_type == "huggingface":
600
+ with gr.Progress(track_tqdm=True, desc="กำลัง generate ด้วย Hugging Face..."):
601
+ new_samples = generate_new_samples(samples, llm_provider, generation_type, n_generate, custom_prompt)
602
+ else:
603
+ new_samples = generate_new_samples(samples, llm_provider, generation_type, n_generate, custom_prompt)
604
  samples.extend(new_samples)
605
  progress_text += f"✅ Generate สำเร็จ {len(new_samples)} samples ใหม่\n"
606
 
 
619
  # 5. Translation
620
  if target_language and target_language != "none":
621
  progress_text += f"🌐 กำลังแปลเป็น {target_language}...\n"
622
+ if llm_provider_type == "huggingface":
623
+ with gr.Progress(track_tqdm=True, desc="กำลังแปลด้วย Hugging Face..."):
624
+ translated = translate_to_multilingual(samples, llm_provider, target_language)
625
+ else:
626
+ translated = translate_to_multilingual(samples, llm_provider, target_language)
627
  samples.extend(translated)
628
  progress_text += f"✅ แปลภาษาสำเร็จ {len(translated)} samples\n"
629
 
630
  # 6. Add multiple choice
631
  if add_multiple_choice:
632
  progress_text += "📝 กำลังเพิ่ม multiple choice options...\n"
633
+ if llm_provider_type == "huggingface":
634
+ with gr.Progress(track_tqdm=True, desc="กำลังเพิ่มตัวเลือกด้วย Hugging Face..."):
635
+ samples = add_multiple_choice_options(samples, llm_provider)
636
+ else:
637
+ samples = add_multiple_choice_options(samples, llm_provider)
638
  progress_text += "✅ เพิ่ม multiple choice เสร็จสิ้น\n"
639
 
640
  # 7. Export