TruthX-Space / app.py
Ankit74990's picture
Upload app.py with huggingface_hub
d04e8ba verified
import os
import gradio as gr
import torch
from dotenv import load_dotenv
from transformers import AutoModelForSequenceClassification, AutoTokenizer
load_dotenv()
MODEL_NAME = os.getenv("MODEL_NAME", "Ankit74990/TruthX-DISTILBERT")
NEWSDATA_API_KEY = os.getenv("NEWSDATA_API_KEY", "")
NEWSAPI_API_KEY = os.getenv("NEWSAPI_API_KEY", "")
GNEWS_API_KEY = os.getenv("GNEWS_API_KEY", "")
MEDIASTACK_API_KEY = os.getenv("MEDIASTACK_API_KEY", "")
tokenizer = None
model = None
def load_model():
global tokenizer, model
if tokenizer is None:
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME)
model.eval()
def predict(text):
load_model()
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512, padding=True)
with torch.no_grad():
outputs = model(**inputs)
probs = torch.nn.functional.softmax(outputs.logits, dim=-1)
fake_prob = probs[0][0].item()
real_prob = probs[0][1].item()
label = "Real News" if fake_prob < real_prob else "Fake News"
confidence = max(fake_prob, real_prob)
return {"label": label, "confidence": f"{confidence:.2%}", "fake_probability": f"{fake_prob:.2%}", "real_probability": f"{real_prob:.2%}"}
demo = gr.Interface(
fn=predict,
inputs="text",
outputs=gr.Label(label="Prediction Result"),
title="TruthX - Fake News Detector",
description="Enter a news article or headline to determine if it's real or fake news.",
examples=[
["Breaking: Scientists discover new cure for cancer"],
["Government announces new policy changes for education"],
["Massive scandal revealed involving major corporation"],
]
)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)