arifa-batool's picture
Update app.py
efb09ff verified
import gradio as gr
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
# ====================== MODEL ======================
model_path = "./best_model"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForSequenceClassification.from_pretrained(model_path)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
model.eval()
def predict_sentiment(text):
if not text or text.strip() == "":
return "ENTER TEXT", ""
inputs = tokenizer(
text,
return_tensors="pt",
truncation=True,
padding=True
).to(device)
with torch.no_grad():
outputs = model(**inputs)
probs = torch.softmax(outputs.logits, dim=1)
pred_id = torch.argmax(probs, dim=1).item()
confidence = torch.max(probs).item()
label = model.config.id2label[pred_id]
label = label.upper()
confidence_str = f"Confidence: {confidence * 100:.2f}%"
return label, confidence_str
custom_css = """
/* Fullscreen Dark Theme */
html, body, .gradio-container {
background: radial-gradient(circle at top, #0B1020, #05060A) !important;
background-attachment: fixed !important;
min-height: 100vh !important;
margin: 0 !important;
}
/* Main Heading */
h1 {
font-size: 55px !important;
font-weight: 800 !important;
background: linear-gradient(90deg, #7C3AED, #22D3EE);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
text-align: center;
}
textarea {
background: rgba(255, 255, 255, 0.03) !important;
border: 1px solid rgba(124, 58, 237, 0.25) !important;
border-radius: 20px !important;
color: #ffffff !important;
font-size: 20px !important;
padding: 18px !important;
width: 100% !important;
transition: all 0.3s ease;
}
/* FOCUS EFFECT */
textarea:focus {
outline: none !important;
border: 1px solid rgba(34, 211, 238, 0.9) !important;
box-shadow: 0 0 25px rgba(124, 58, 237, 0.35) !important;
}
/* PLACEHOLDER STYLE */
textarea::placeholder {
color: rgba(255, 255, 255, 0.4) !important;
}
/* THE GRADIENT RESULT BOX */
#sentiment_display {
background: linear-gradient(135deg, #7C3AED, #22D3EE) !important;
border-radius: 24px !important;
padding: 40px !important;
text-align: center !important;
border: none !important;
box-shadow: 0 20px 50px rgba(124, 58, 237, 0.3);
}
/* Result Text - Bold White */
#sentiment_display textarea {
background: transparent !important;
border: none !important;
color: white !important;
font-size: 45px !important;
font-weight: 900 !important;
text-align: center !important;
pointer-events: none;
}
/* Confidence Text */
#confidence_display textarea {
background: transparent !important;
border: none !important;
color: rgba(255, 255, 255, 0.8) !important;
font-size: 20px !important;
text-align: center !important;
margin-top: -20px !important;
pointer-events: none;
}
/* Button */
button.primary {
background: linear-gradient(90deg, #7C3AED, #22D3EE) !important;
border-radius: 16px !important;
font-weight: 800 !important;
height: 70px !important;
font-size: 20px !important;
border: none !important;
}
"""
with gr.Blocks(css=custom_css) as interface:
gr.Markdown("# 🇵🇰 Urdu Sentiment Analyzer")
with gr.Row():
with gr.Column(scale=7):
text_input = gr.Textbox(
label=None,
placeholder="اپنا اردو جملہ یہاں لکھیں...",
lines=10,
max_lines=25
)
analyze_btn = gr.Button("ANALYZE NOW", variant="primary")
gr.Examples(
examples=[
["یہ بہت ہی بہترین اور معیاری پروڈکٹ ہے"],
["مجھے آپ کی سروس بالکل بھی پسند نہیں آئی"],
["استاد کا پڑھانے کا انداز بہت اچھا ہے"],
["انتہائی ناقص اور بیکار سروس"],
["وہ بازار گیا اور سامان خریدا"],
["ہم نے میٹنگ میں مختلف موضوعات پر بات کی۔"]
],
inputs=text_input
)
with gr.Column(scale=5):
# Combined result area that feels like one big gradient card
with gr.Group(elem_id="sentiment_display"):
sentiment_output = gr.Textbox(
show_label=False,
interactive=False,
elem_id="sentiment_text"
)
confidence_output = gr.Textbox(
show_label=False,
interactive=False,
elem_id="confidence_display"
)
analyze_btn.click(
fn=predict_sentiment,
inputs=text_input,
outputs=[sentiment_output, confidence_output]
)
interface.launch()