import gradio as gr import os import time from crewai import Agent, Task, Crew from langchain_openai import ChatOpenAI # Secure API key entry os.getenv("OPENAI_API_KEY") # Enter your OpenAI API key def analyze_scam(message_content): if not message_content.strip(): return "โ— Please enter a message or URL to analyze." loading_messages = [ "๐Ÿ›ก๏ธ Initializing AI security team...", "๐Ÿ” Claim Extractor analyzing suspicious content...", "โš–๏ธ Fact Checker verifying claims and patterns...", "๐Ÿ“‹ Safety Advisor preparing guidance report...", "๐Ÿšจ Generating comprehensive scam analysis..." ] yield loading_messages[0] try: llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0.1) for i, message in enumerate(loading_messages[1:], 1): time.sleep(2) yield message extractor_agent = Agent( role="Claim Extractor", goal="Extract key claims, offers, and suspicious elements from messages or URLs", backstory="Expert at parsing and identifying key claims in potentially fraudulent messages.", llm=llm, verbose=False ) verifier_agent = Agent( role="Fact Checker", goal="Verify claims and assess scam probability using heuristic rules and pattern matching", backstory="Cybersecurity expert who specializes in identifying scam patterns.", llm=llm, verbose=False ) explainer_agent = Agent( role="Safety Advisor", goal="Provide clear, actionable guidance to users about potential scams", backstory="Digital safety educator who explains complex security issues simply.", llm=llm, verbose=False ) extract_task = Task( description=f"Analyze and extract suspicious elements from: {message_content}", expected_output="Structured summary of extracted claims, suspicious elements, and language patterns", agent=extractor_agent ) verify_task = Task( description="Risk assessment with scam probability score, red flags, and evidence", expected_output="Risk assessment with scam probability score, red flags, and evidence", agent=verifier_agent, context=[extract_task] ) explain_task = Task( description="User-friendly safety report with clear recommendations and next steps", expected_output="User-friendly safety report with clear recommendations and next steps", agent=explainer_agent, context=[extract_task, verify_task] ) crew = Crew( agents=[extractor_agent, verifier_agent, explainer_agent], tasks=[extract_task, verify_task, explain_task], verbose=False, process="sequential" ) yield "๐ŸŽฏ AI agents collaborating on final analysis..." result = crew.kickoff() yield str(result) except Exception as e: yield f"โŒ Scam analysis failed: {str(e)}" def create_gradio_interface(): with gr.Blocks(title="Scam-Signal Verifier | AI Security Analysis", theme=gr.themes.Default()) as interface: # Custom CSS for better contrast gr.HTML(""" """) # Header gr.HTML("""

๐Ÿ›ก๏ธ Scam-Signal Verifier

AI-powered protection against phishing and fraudulent messages

""") # AI Security Team gr.HTML("""
๐Ÿค– Your AI Security Team
๐Ÿ”
Claim Extractor
Identifies suspicious content and claims
โš–๏ธ
Fact Checker
Verifies claims and calculates risk
๐Ÿ“‹
Safety Advisor
Provides clear guidance and next steps
""") # Input Section gr.HTML("

๐Ÿ“ฑ Analyze Suspicious Message or URL

") message_input = gr.Textbox( label="๐Ÿšจ Suspicious Message or URL", placeholder="Paste the suspicious message, email content, or URL you want to verify...", lines=5 ) analyze_btn = gr.Button("๐Ÿ” Analyze for Scams", variant="primary", size="lg") # Output Section โ€” restored to original output = gr.Textbox( label="๐Ÿ“Š Scam Analysis Report", lines=25, show_copy_button=True, placeholder="Your detailed scam analysis will appear here..." ) # Examples gr.Examples( examples=[ ["URGENT: Your account will be suspended! Click here immediately to verify: http://suspicious-bank-verify.tk/login"], ["Congratulations! You've won $10,000! Claim your prize now by clicking this link and entering your bank details."], ["Your package is held at customs. Pay $50 shipping fee to release: https://bit.ly/customs-fee-pay"], ["FINAL NOTICE: IRS requires immediate payment of $2,500 or face legal action. Call now: 555-SCAM"], ["Hello dear, I am Prince Williams from Nigeria with $10 million to share with you..."], ], inputs=message_input, label="๐Ÿงช Try These Example Scams" ) # Footer gr.HTML("""

Scam-Signal Verifier โ€ข AI-Powered Fraud Detection

โš ๏ธ This tool helps identify potential scams but is not 100% accurate. Always verify independently.

""") # Event Handlers analyze_btn.click(fn=analyze_scam, inputs=[message_input], outputs=output, show_progress=True) message_input.submit(fn=analyze_scam, inputs=[message_input], outputs=output, show_progress=True) return interface if __name__ == "__main__": app = create_gradio_interface() app.launch(share=False, server_name="0.0.0.0", server_port=7860, show_api=False, inbrowser=False)