Catching_Phish / app.py
sprev21's picture
Update app.py
f985395 verified
import gradio as gr
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
import torch.nn.functional as F
# Load tokenizer and model
model_name = "cybersectony/phishing-email-detection-distilbert_v2.4.1"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
# Define the prediction function
def detect_phishing(email_text):
inputs = tokenizer(email_text, return_tensors="pt", truncation=True, max_length=512)
with torch.no_grad():
outputs = model(**inputs)
probs = F.softmax(outputs.logits, dim=-1)[0]
labels = [
"Legitimate Email",
"Phishing URL",
"Legitimate URL",
"Phishing URL (Alt)"
]
label_probs = {label: float(prob) for label, prob in zip(labels, probs)}
predicted_label = max(label_probs, key=label_probs.get)
confidence = label_probs[predicted_label]
verdict = "⚠️ Suspicious Email Detected." if "Phishing" in predicted_label else "✅ Email Appears Legitimate."
result = f"{verdict}\n\nPrediction: {predicted_label}\nConfidence: {confidence:.2%}\n\nDetails:\n"
for label, prob in label_probs.items():
result += f"{label}: {prob:.2%}\n"
return result
# Create Gradio interface
interface = gr.Interface(
fn=detect_phishing,
inputs=gr.Textbox(lines=15, placeholder="Paste the email content here..."),
outputs="text",
title="Phishing Email Detector",
description="Detects whether an email is phishing or legitimate using a fine-tuned DistilBERT model."
)
if __name__ == "__main__":
interface.launch()