import gradio as gr from transformers import AutoModelForCausalLM, AutoTokenizer import torch import torch.nn.functional as F from peft import ( LoraConfig, PeftModel, prepare_model_for_kbit_training, get_peft_model, ) model_name = "google/gemma-2-2b-it" lora_model_name="Anlam-Lab/gemma-2-2b-it-anlamlab-SA-Chatgpt4mini" device = "cuda" if torch.cuda.is_available() else "cpu" @torch.no_grad() def load_model(): tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained( model_name, device_map=device, torch_dtype=torch.float16 if device == "cuda" else torch.float32, low_cpu_mem_usage=True ) model = PeftModel.from_pretrained(model, lora_model_name) model.eval() return model, tokenizer model, tokenizer = load_model() def generate_response(text): example = f"""<|begin_of_text|><|start_header_id|>system<|end_header_id|>Bir duygu analisti olarak sana verilen metinleri analiz et ve aşağıdaki kategorilerden yalnızca birini seçerek metnin duygu durumunu belirle:Positive,Negative,Neutral<|eot_id|><|start_header_id|>user<|end_header_id|>{text}<|eot_id|><|start_header_id|>assistant<|end_header_id|>""" inputs = tokenizer(example, return_tensors="pt") with torch.no_grad(): model_output = model(**inputs) logits = model_output.logits probabilities = F.softmax(logits, dim=-1) top_probs, top_tokens = torch.topk(probabilities[0, -1, :], k=10) predicted_label = tokenizer.decode(top_tokens[0]) return predicted_label iface = gr.Interface( fn=generate_response, inputs=gr.Textbox(lines=5, placeholder="Metninizi buraya girin..."), outputs=gr.Textbox(lines=5, label="Model Çıktısı"), title="Anlam-Lab", examples=[ ["Akıllı saati uzun süre kullandım ve şık tasarımı, harika sağlık takibi özellikleri ve uzun pil ömrüyle çok memnun kaldım."], ["Ürünü aldım ama pil ömrü kısa, ekran parlaklığı yetersiz ve sağlık takibi doğru sonuçlar vermedi."], ] ) if __name__ == "__main__": iface.launch()