Spaces:
Paused
Paused
| 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) |