from flask import Flask, render_template, request, jsonify import os import time from crewai import Agent, Task, Crew from langchain_openai import ChatOpenAI app = Flask(__name__) # Ensure API key is set in environment os.getenv("OPENAI_API_KEY") # Enter your OpenAI API key or set it via env var def run_scam_analysis(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..." ] try: llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0.1) 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" ) result = crew.kickoff() return str(result) except Exception as e: return f"❌ Scam analysis failed: {str(e)}" @app.route("/") def index(): return render_template("index.html") @app.route("/analyze", methods=["POST"]) def analyze(): data = request.get_json() message = data.get("message", "") result = run_scam_analysis(message) return jsonify({"result": result}) if __name__ == "__main__": app.run(host="0.0.0.0", port=7860)