File size: 3,412 Bytes
c314765
e287440
 
c314765
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e287440
 
c314765
 
 
 
 
 
 
e287440
c314765
 
 
 
 
 
 
e287440
c314765
 
 
 
 
e287440
c314765
 
 
 
 
 
e287440
c314765
 
 
 
 
 
e287440
c314765
 
 
 
 
 
e287440
c314765
 
e287440
c314765
 
e287440
c314765
 
 
e287440
c314765
 
 
 
 
 
e287440
 
c314765
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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)