import gradio as gr from transformers import pipeline import pandas as pd import os # Initialize detector detector = pipeline("text-classification", model="debojit01/fake-review-detector") # CSV file setup FEEDBACK_FILE = "training_data.csv" if not os.path.exists(FEEDBACK_FILE): pd.DataFrame(columns=["text", "label"]).to_csv(FEEDBACK_FILE, index=False) def predict(text): result = detector(text)[0] if result["label"] == "LABEL_0": # Real return {"Real": result["score"], "Fake": 1 - result["score"]} else: # Fake (LABEL_1) return {"Real": 1 - result["score"], "Fake": result["score"]} def save_feedback(text, prediction, is_correct): """Save feedback only when user submits""" if is_correct is None: # No feedback provided return "Prediction shown" predicted_label = "Real" if prediction["Real"] > 0.5 else "Fake" true_label = predicted_label if is_correct else ("Fake" if predicted_label == "Real" else "Real") new_data = pd.DataFrame({"text": [text], "label": [true_label]}) new_data.to_csv(FEEDBACK_FILE, mode='a', header=not os.path.exists(FEEDBACK_FILE), index=False) return "Thank you for your feedback!" with gr.Blocks() as app: gr.Markdown("## Fake Review Detector") with gr.Row(): review_input = gr.Textbox(label="Enter Review") predict_btn = gr.Button("Predict") output_label = gr.Label(label="Prediction") with gr.Row(visible=False) as feedback_row: feedback_radio = gr.Radio( ["Correct", "Incorrect"], label="Is this prediction accurate?" ) feedback_btn = gr.Button("Submit Feedback") status_text = gr.Textbox(label="Status", interactive=False) def show_prediction(text): prediction = predict(text) return prediction, gr.Row(visible=True), "" predict_btn.click( show_prediction, inputs=review_input, outputs=[output_label, feedback_row, status_text] ) feedback_btn.click( save_feedback, inputs=[review_input, output_label, feedback_radio], outputs=status_text ) app.launch()