| import gradio as gr | |
| import os | |
| from train_abuse_model import ( | |
| run_training, | |
| evaluate_saved_model, | |
| push_model_to_hub | |
| ) | |
| from predict_pipeline import run_prediction_pipeline | |
| with gr.Blocks() as demo: | |
| gr.Markdown("## ๐ง Abuse Detection App") | |
| gr.Markdown("โ ๏ธ Keep this tab open while training or evaluating.") | |
| with gr.Tab("๐งช Train / Evaluate"): | |
| with gr.Row(): | |
| start_btn = gr.Button("๐ Start Training") | |
| eval_btn = gr.Button("๐ Evaluate Trained Model") | |
| push_btn = gr.Button("๐ค Push Model to Hub") | |
| output_box = gr.Textbox(label="Logs", lines=25, interactive=False) | |
| start_btn.click(fn=run_training, outputs=output_box) | |
| eval_btn.click(fn=evaluate_saved_model, outputs=output_box) | |
| push_btn.click(fn=push_model_to_hub, outputs=output_box) | |
| with gr.Tab("๐ฎ Abuse Detection"): | |
| desc_input = gr.Textbox(label="๐ Relationship Description", lines=5, placeholder="Write a relationship story here...") | |
| chat_upload = gr.File(label="๐ Optional: WhatsApp Chat ZIP (.zip)", file_types=[".zip"]) | |
| predict_btn = gr.Button("Run Prediction") | |
| enriched_output = gr.Textbox(label="๐ Enriched Input (Used for Prediction)", lines=8, interactive=False) | |
| label_output = gr.Textbox(label="๐ท๏ธ Predicted Labels", lines=2, interactive=False) | |
| predict_btn.click( | |
| fn=run_prediction_pipeline, | |
| inputs=[desc_input, chat_upload], | |
| outputs=[enriched_output, label_output] | |
| ) | |
| with gr.Tab("๐ View Evaluation Reports"): | |
| def list_eval_files(): | |
| folder = "/home/user/app/results_eval" | |
| return sorted(os.listdir(folder), reverse=True) if os.path.exists(folder) else [] | |
| def load_eval_file(filename): | |
| path = f"/home/user/app/results_eval/{filename}" | |
| if not os.path.exists(path): | |
| return "โ File not found." | |
| with open(path, "r", encoding="utf-8") as f: | |
| return f.read() | |
| file_dropdown = gr.Dropdown( | |
| choices=[], | |
| label="๐ Select an evaluation file", | |
| interactive=True | |
| ) | |
| refresh_btn = gr.Button("๐ Refresh File List") | |
| report_output = gr.Textbox(label="๐ Evaluation Report", lines=20) | |
| refresh_btn.click(fn=lambda: gr.Dropdown.update(choices=list_eval_files()), outputs=file_dropdown) | |
| file_dropdown.change(fn=load_eval_file, inputs=file_dropdown, outputs=report_output) | |
| if __name__ == "__main__": | |
| demo.launch() | |