agahs / app.py
magahcicek's picture
Update app.py
a64158f verified
import re
import torch
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "magahcicek/avastin-side-effects-model"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.pad_token = tokenizer.eos_token
tokenizer.padding_side = "right"
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
def clean_side_effects(text, drug_name):
text = text.strip(" ,.\n\t")
text = re.sub(re.escape(drug_name), '', text, flags=re.IGNORECASE)
text = re.sub(r"([a-z])([A-Z])", r"\1 \2", text)
text = re.sub(r"\s*,\s*", ", ", text)
text = re.sub(r",+", ",", text)
text = re.sub(r"\s{2,}", " ", text)
text = re.sub(r"([a-zA-Z])\.([a-zA-Z])", r"\1. \2", text)
items = re.split(r"[,\n\-]+", text)
items = [item.strip() for item in items if item.strip()]
unique_items = []
for item in items:
if item.lower() not in [x.lower() for x in unique_items]:
unique_items.append(item)
unique_items = [item if item.endswith('.') else item + '.' for item in unique_items]
return unique_items
def generate_side_effects(drug_name):
prompt = f"[DRUG_START]{drug_name}[DRUG_END][SIDE_EFFECTS]"
inputs = tokenizer(prompt, return_tensors="pt", max_length=256, truncation=True, padding="max_length").to(device)
outputs = model.generate(
**inputs,
max_new_tokens=50,
pad_token_id=tokenizer.eos_token_id,
num_beams=1,
repetition_penalty=1.2,
no_repeat_ngram_size=2,
early_stopping=True
)
full_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
return clean_side_effects(full_text, drug_name)
def process_drug_name(drug_name):
if not drug_name.strip():
return "Lütfen geçerli bir ilaç adı giriniz."
side_effects = generate_side_effects(drug_name)
if isinstance(side_effects, list):
side_effects_str = "\n- " + "\n- ".join(side_effects)
else:
side_effects_str = side_effects
return f"İlaç Adı: {drug_name}\nÖngörülen Yan Etkiler:\n{side_effects_str}"
iface = gr.Interface(
fn=process_drug_name,
inputs=gr.Textbox(lines=1, placeholder="İlaç adını yazınız..."),
outputs=gr.Textbox(),
title="Yan Etki Tahmini",
description="İlaç adını girerek öngörülen yan etkileri liste halinde görün."
)
if __name__ == "__main__":
iface.launch()