Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from toxicity_model import ( | |
| check_toxicity, | |
| is_custom_toxic, | |
| check_sentiment, | |
| paraphrase_text, | |
| check_cyberbullying_with_hatebert, | |
| is_person_or_pronoun | |
| ) | |
| import mysql.connector | |
| # MySQL connection settings | |
| db_config = { | |
| 'host': 'cyberbullying.cbo2y20cex64.ap-southeast-2.rds.amazonaws.com', | |
| 'user': 'root', | |
| 'password': 'Beauisagoodboy', | |
| 'database': 'cyberbullying' | |
| } | |
| def log_to_rds(text, is_bullying, tox_score, sentiment_score, suggested, person_or_pronoun, cyberbullying_flag, zone_db, likelihood, comment): | |
| """ | |
| Logs analyzed message data into MySQL database. | |
| """ | |
| try: | |
| connection = mysql.connector.connect(**db_config) | |
| cursor = connection.cursor() | |
| tox_score = float(tox_score) | |
| sentiment_score = float(sentiment_score) | |
| insert_query = """ | |
| INSERT INTO MESSAGE | |
| (text, is_bullying, toxicity_score, sentiment_score, suggested_text, person_or_pronoun, cyberbullying_flag, zone, likelihood, comment) | |
| VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) | |
| """ | |
| cursor.execute(insert_query, ( | |
| text, | |
| int(is_bullying), | |
| tox_score, | |
| sentiment_score, | |
| suggested or "", | |
| int(person_or_pronoun), | |
| int(cyberbullying_flag), | |
| zone_db, | |
| likelihood, | |
| comment | |
| )) | |
| connection.commit() | |
| cursor.close() | |
| connection.close() | |
| except mysql.connector.Error as err: | |
| print(f"Database error: {err}") | |
| def analyze(text): | |
| """ | |
| Performs cyberbullying analysis on text and returns the same outputs as FastAPI. | |
| """ | |
| tox_score = round(check_toxicity(text), 2) | |
| sent_score = round(check_sentiment(text), 2) | |
| custom_flag = is_custom_toxic(text) | |
| person_or_pronoun = is_person_or_pronoun(text) | |
| cyberbullying_flag = check_cyberbullying_with_hatebert(text) | |
| is_bullying = custom_flag or tox_score >= 0.4 or cyberbullying_flag >= 0.5 | |
| suggested_text = paraphrase_text(text) if is_bullying else None | |
| suggested_text = str(suggested_text) if suggested_text else "" | |
| # Determine severity zone | |
| if custom_flag or tox_score >= 0.7 or cyberbullying_flag >= 0.7: | |
| zone = '🔴 Red Zone' | |
| zone_db = 'Red Zone' | |
| likelihood = 'Very high likelihood of bullying' | |
| comment = 'Warning: this message looks very harmful. It may seriously hurt someone. This may cross the line into cyberbullying.' | |
| elif tox_score >= 0.4 or cyberbullying_flag >= 0.4: | |
| zone = '🟠 Orange Zone' | |
| zone_db = 'Orange Zone' | |
| likelihood = 'High likelihood of bullying' | |
| comment = 'This could hurt someone’s feelings — try to say it in a more positive way.' | |
| elif tox_score >= 0.2 or cyberbullying_flag >= 0.2: | |
| zone = '🟡 Yellow Zone' | |
| zone_db = 'Yellow Zone' | |
| likelihood = 'Medium likelihood of bullying' | |
| comment = 'Looks safe, but context matters — make sure it won’t hurt anyone.' | |
| else: | |
| zone = '🟢 Green Zone' | |
| zone_db = 'Green Zone' | |
| likelihood = 'Low likelihood of bullying' | |
| comment = 'Looks good! No red flags here. Nice one!' | |
| # Log to database | |
| log_to_rds(text, is_bullying, tox_score, sent_score, suggested_text, person_or_pronoun, cyberbullying_flag, zone_db, likelihood, comment) | |
| return zone, likelihood, comment, suggested_text | |
| # ---------------------- | |
| # Gradio interface | |
| # ---------------------- | |
| iface = gr.Interface( | |
| fn=analyze, | |
| inputs=gr.Textbox(label="Enter text", lines=3), | |
| outputs=[ | |
| gr.Textbox(label="Zone"), | |
| gr.Textbox(label="Likelihood"), | |
| gr.Textbox(label="Comment"), | |
| gr.Textbox(label="Suggested Text") | |
| ], | |
| title="Cyberbullying Detection Tool" | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch(share=True) |