Spaces:
Paused
Paused
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)
|