Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import torch | |
| import random | |
| import os | |
| import time | |
| import threading | |
| from transformers import AutoTokenizer, AutoModelForSequenceClassification | |
| from huggingface_hub import login | |
| # Login to Hugging Face using token from environment variable | |
| hf_token = os.getenv("HUGGINGFACE_TOKEN") | |
| if hf_token: | |
| login(token=hf_token) | |
| else: | |
| raise ValueError("HUGGINGFACE_TOKEN environment variable not set.") | |
| # Load the trained model and tokenizer | |
| model_name = "chaitravi/hate-speech-classifier" # Replace with your actual Hugging Face model repo | |
| model = AutoModelForSequenceClassification.from_pretrained(model_name) | |
| tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| model.to(device) | |
| model.eval() | |
| # Predefined usernames and chat messages for a game scenario | |
| usernames = ["ShadowSlayer", "DragonKnight", "PixelMage", "CyberRogue", "PhantomArcher"] | |
| game_responses = [ | |
| "I need backup at the base!", | |
| "Watch out for enemies on the left!", | |
| "Let's team up and attack together.", | |
| "Great shot! That was amazing!", | |
| "We need to capture the objective now!", | |
| "Healing incoming, stay close!", | |
| "I got eliminated, need a revive!", | |
| "Nice strategy, let's keep it up!" | |
| ] | |
| # Function for classification | |
| def classify_message(message): | |
| inputs = tokenizer(message, padding="max_length", truncation=True, return_tensors="pt").to(device) | |
| with torch.no_grad(): | |
| outputs = model(**inputs) | |
| logits = outputs.logits | |
| prediction = torch.argmax(logits, dim=1).item() | |
| return "Hate speech/Offensive" if prediction == 1 else "Not hate speech/Offensive" | |
| # Chat simulation function | |
| def chat_interface(history, user_message=""): | |
| if history is None: | |
| history = [] | |
| # Process user input | |
| if user_message: | |
| classification = classify_message(user_message) | |
| blurred_message = "****" if classification == "Hate speech/Offensive" else user_message | |
| history.append({"role": "user", "content": f"You: {blurred_message}"}) | |
| # Generate automated response | |
| username = random.choice(usernames) | |
| new_message = random.choice(game_responses) | |
| classification = classify_message(new_message) | |
| blurred_message = "****" if classification == "Hate speech/Offensive" else new_message | |
| history.append({"role": "user", "content": f"{username}: {blurred_message}"}) | |
| # Generate bot response | |
| bot_username = "GameMaster" | |
| bot_response = random.choice(game_responses) | |
| history.append({"role": "assistant", "content": f"{bot_username}: {bot_response}"}) | |
| return history | |
| # Background chat simulation | |
| def simulate_chat(chatbot): | |
| while True: | |
| chatbot.update(chat_interface(chatbot.value)) | |
| time.sleep(2) | |
| # Create Gradio interface | |
| def main(): | |
| with gr.Blocks() as app: | |
| gr.Markdown("# Game Chat Hate Speech Detection Simulator") | |
| chatbot = gr.Chatbot(type="messages") | |
| user_input = gr.Textbox(label="Enter your message") | |
| log_box = gr.Textbox(label="Classification Log", interactive=False) | |
| user_input.submit(chat_interface, inputs=[chatbot, user_input], outputs=[chatbot]) | |
| # Start chat simulation in a separate thread | |
| threading.Thread(target=simulate_chat, args=(chatbot,), daemon=True).start() | |
| app.launch() | |
| if __name__ == "__main__": | |
| main() | |