Update app.py
Browse files
app.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
import torch
|
| 2 |
import gradio as gr
|
| 3 |
import spaces
|
|
|
|
| 4 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 5 |
from peft import PeftModel
|
| 6 |
|
|
@@ -8,14 +9,12 @@ from peft import PeftModel
|
|
| 8 |
base_model_name = "unsloth/gpt-oss-20b"
|
| 9 |
adapter_model_name = "userdotcs/gpt-oss-20b-turkish-correction-adapter"
|
| 10 |
|
| 11 |
-
print("Model yükleniyor
|
| 12 |
tokenizer = AutoTokenizer.from_pretrained(base_model_name)
|
| 13 |
|
| 14 |
-
# Hata almamak için kuantizasyon parametrelerini manuel geçmiyoruz,
|
| 15 |
-
# model zaten kuantize olduğu için sadece cihazı ve tipi belirtiyoruz.
|
| 16 |
base_model = AutoModelForCausalLM.from_pretrained(
|
| 17 |
base_model_name,
|
| 18 |
-
torch_dtype=torch.bfloat16,
|
| 19 |
device_map="auto"
|
| 20 |
)
|
| 21 |
|
|
@@ -39,22 +38,33 @@ def fix_text(input_text):
|
|
| 39 |
with torch.no_grad():
|
| 40 |
outputs = model.generate(
|
| 41 |
input_ids=inputs,
|
| 42 |
-
max_new_tokens=
|
| 43 |
-
do_sample=False,
|
| 44 |
pad_token_id=tokenizer.eos_token_id
|
| 45 |
)
|
| 46 |
|
| 47 |
-
#
|
| 48 |
input_length = inputs.shape[1]
|
| 49 |
-
|
| 50 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 51 |
|
| 52 |
# Arayüz
|
| 53 |
demo = gr.Interface(
|
| 54 |
fn=fix_text,
|
| 55 |
-
inputs=gr.Textbox(label="
|
| 56 |
-
outputs=gr.Textbox(label="
|
| 57 |
-
title="
|
| 58 |
)
|
| 59 |
|
| 60 |
if __name__ == "__main__":
|
|
|
|
| 1 |
import torch
|
| 2 |
import gradio as gr
|
| 3 |
import spaces
|
| 4 |
+
import re # Metin temizleme için eklendi
|
| 5 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 6 |
from peft import PeftModel
|
| 7 |
|
|
|
|
| 9 |
base_model_name = "unsloth/gpt-oss-20b"
|
| 10 |
adapter_model_name = "userdotcs/gpt-oss-20b-turkish-correction-adapter"
|
| 11 |
|
| 12 |
+
print("Model yükleniyor...")
|
| 13 |
tokenizer = AutoTokenizer.from_pretrained(base_model_name)
|
| 14 |
|
|
|
|
|
|
|
| 15 |
base_model = AutoModelForCausalLM.from_pretrained(
|
| 16 |
base_model_name,
|
| 17 |
+
torch_dtype=torch.bfloat16,
|
| 18 |
device_map="auto"
|
| 19 |
)
|
| 20 |
|
|
|
|
| 38 |
with torch.no_grad():
|
| 39 |
outputs = model.generate(
|
| 40 |
input_ids=inputs,
|
| 41 |
+
max_new_tokens=1024, # Biraz artırdık çünkü düşünme kısmı token tüketir
|
| 42 |
+
do_sample=False,
|
| 43 |
pad_token_id=tokenizer.eos_token_id
|
| 44 |
)
|
| 45 |
|
| 46 |
+
# Yanıtı decode et
|
| 47 |
input_length = inputs.shape[1]
|
| 48 |
+
full_response = tokenizer.decode(outputs[0][input_length:], skip_special_tokens=True)
|
| 49 |
+
|
| 50 |
+
# --- Düşünme Kısmını Temizleme ---
|
| 51 |
+
# 1. Yaygın düşünme etiketlerini (thought, reasoning vb.) temizle
|
| 52 |
+
clean_response = re.sub(r'<(thought|reasoning)>.*?</\1>', '', full_response, flags=re.DOTALL)
|
| 53 |
+
|
| 54 |
+
# 2. Eğer model etiket kullanmadan sadece bir boşluk veya özel karakterle ayırıyorsa
|
| 55 |
+
# bazen düşünme kısmı metnin en başında kalabilir.
|
| 56 |
+
# Genellikle asıl yanıt en son kısımdır.
|
| 57 |
+
if "### Response" in clean_response:
|
| 58 |
+
clean_response = clean_response.split("### Response")[-1]
|
| 59 |
+
|
| 60 |
+
return clean_response.strip()
|
| 61 |
|
| 62 |
# Arayüz
|
| 63 |
demo = gr.Interface(
|
| 64 |
fn=fix_text,
|
| 65 |
+
inputs=gr.Textbox(label="Input", lines=3),
|
| 66 |
+
outputs=gr.Textbox(label="Output", lines=3),
|
| 67 |
+
title="gpt-oss-20b Turkish correction"
|
| 68 |
)
|
| 69 |
|
| 70 |
if __name__ == "__main__":
|