userdotcs's picture
Update app.py
c9b6342 verified
import torch
import gradio as gr
import spaces
import re # Metin temizleme için eklendi
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
# --- Model Ayarları ---
base_model_name = "unsloth/gpt-oss-20b"
adapter_model_name = "userdotcs/gpt-oss-20b-turkish-correction-adapter"
print("Model yükleniyor...")
tokenizer = AutoTokenizer.from_pretrained(base_model_name)
base_model = AutoModelForCausalLM.from_pretrained(
base_model_name,
torch_dtype=torch.bfloat16,
device_map="auto"
)
model = PeftModel.from_pretrained(base_model, adapter_model_name)
model.eval()
@spaces.GPU(duration=120)
def fix_text(input_text):
if not input_text or input_text.strip() == "":
return ""
messages = [
{
"role": "system",
"content": "You are an intelligent assistant that corrects Turkish spelling and grammar mistakes."
},
{
"role": "user",
"content": f"Fix typos in the text:\n{input_text}"
}
]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt",
).to("cuda")
with torch.no_grad():
outputs = model.generate(
input_ids=inputs,
max_new_tokens=16_384,
pad_token_id=tokenizer.eos_token_id
)
input_length = inputs.shape[1]
full_response = tokenizer.decode(outputs[0][input_length:], skip_special_tokens=True)
# --- Ayıklama Mantığı ---
# Modelin çıktısında "assistantfinal" anahtar kelimesini arıyoruz
separator = "assistantfinal"
if separator in full_response:
# Metni separator'a göre böl ve en son (sağdaki) parçayı al
clean_response = full_response.split(separator)[-1]
else:
# Eğer separator yoksa ama "analysis" varsa, analizi temizlemeye çalışalım
# Genellikle asıl cevap en sonda olur.
# Alternatif olarak son satırı almayı deneyebiliriz:
lines = full_response.strip().split('\n')
clean_response = lines[-1] if lines else full_response
return clean_response.strip()
# Arayüz
demo = gr.Interface(
fn=fix_text,
inputs=gr.Textbox(label="Input", lines=3),
outputs=gr.Textbox(label="Output", lines=3),
title="gpt-oss-20b Turkish correction"
)
if __name__ == "__main__":
demo.launch()