Spaces:
Paused
Paused
| 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)}" | |
| def index(): | |
| return render_template("index.html") | |
| 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) | |