# Phase 2 Architecture Diagram ## System Overview ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ SCAMSHIELD AI SYSTEM │ │ │ │ ┌────────────────────────────────────────────────────────────────────┐ │ │ │ USER INTERFACES │ │ │ │ │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ │ │ Phase 1 UI │ │ Phase 2 UI │ │ │ │ │ │ (index.html) │ │ (voice.html) │ │ │ │ │ │ │ │ │ │ │ │ │ │ Text Chat │ │ 🎤 Voice Chat │ │ │ │ │ │ Interface │ │ Interface │ │ │ │ │ └────────┬─────────┘ └────────┬─────────┘ │ │ │ └───────────┼────────────────────────────────┼──────────────────────┘ │ │ │ │ │ │ │ HTTP/JSON │ HTTP/FormData │ │ │ │ │ └──────────────┼─────────────────────────────────┼────────────────────────┘ │ │ ▼ ▼ ┌──────────────────────────────────────────────────────────────────────────┐ │ API LAYER │ │ │ │ ┌────────────────────────┐ ┌────────────────────────┐ │ │ │ Phase 1 Endpoints │ │ Phase 2 Endpoints │ │ │ │ (endpoints.py) │ │ (voice_endpoints.py) │ │ │ │ │ │ │ │ │ │ POST /honeypot/engage │ │ POST /voice/engage │ │ │ │ GET /honeypot/session│ │ GET /voice/audio/:id │ │ │ │ POST /honeypot/batch │ │ GET /voice/health │ │ │ └────────────┬───────────┘ └────────────┬───────────┘ │ └───────────────┼──────────────────────────────────┼───────────────────────┘ │ │ │ │ │ ▼ │ ┌──────────────────────────┐ │ │ Phase 2 Voice Layer │ │ │ │ │ │ ┌────────────────────┐ │ │ │ │ Audio Upload │ │ │ │ │ (multipart/form) │ │ │ │ └─────────┬──────────┘ │ │ │ │ │ │ │ ▼ │ │ │ ┌────────────────────┐ │ │ │ │ ASR Engine │ │ │ │ │ (Whisper) │ │ │ │ │ │ │ │ │ │ Audio → Text │ │ │ │ └─────────┬──────────┘ │ │ │ │ │ │ └────────────┼─────────────┘ │ │ │ │ Transcribed Text │ │ ▼◄────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────────────┐ │ PHASE 1 CORE (UNCHANGED) │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ DETECTION LAYER │ │ │ │ │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────┐ │ │ │ │ │ Language Detector│ │ Scam Detector │ │ Scam Type │ │ │ │ │ │ (language.py) │───▶│ (detector.py) │───▶│ Classifier │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ Auto-detect │ │ IndicBERT + │ │ Financial │ │ │ │ │ │ en/hi/gu/etc │ │ Rules-based │ │ Tech Support│ │ │ │ │ └──────────────────┘ └──────────────────┘ │ Impersonation│ │ │ │ └──────────────┘ │ │ │ └──────────────────────────────────────┬───────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ HONEYPOT LAYER │ │ │ │ │ │ │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ │ │ LangGraph Workflow │ │ │ │ │ │ │ │ │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │ │ │ Plan │─────▶│Generate │─────▶│ Extract │ │ │ │ │ │ │ │ Node │ │ Node │ │ Node │ │ │ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ │ │ │ │ ┌──────────┐ │ │ │ │ │ │ │ │ │ Groq LLM │ │ │ │ │ │ │ │ │ │ (Llama) │ │ │ │ │ │ │ │ │ └──────────┘ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └───────────────┬───────────────────┘ │ │ │ │ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ │ │ ┌───────────────┐ │ │ │ │ │ │ │ State Manager │ │ │ │ │ │ │ │ (Redis) │ │ │ │ │ │ │ └───────────────┘ │ │ │ │ │ └──────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ Output: Text Reply │ │ │ └──────────────────────────────────────┬───────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ EXTRACTION LAYER │ │ │ │ │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ │ │ UPI Extractor│ │ Bank Account │ │ Phone/URL │ │ │ │ │ │ (Regex) │ │ Extractor │ │ Extractor │ │ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ │ │ │ │ │ Output: Extracted Intelligence │ │ │ └──────────────────────────────────────┬───────────────────────────────┘ │ └─────────────────────────────────────────┼───────────────────────────────┘ │ │ Text Reply │ ▼ ┌──────────────────────────────────────────────────────────────────────────┐ │ PHASE 2 OUTPUT LAYER │ │ │ │ ┌────────────────────────────────────────────────────────────────────┐ │ │ │ TTS Engine (gTTS) │ │ │ │ │ │ │ │ Text Reply ───▶ Text-to-Speech ───▶ Audio File (.mp3) │ │ │ │ │ │ │ │ Languages: en, hi, gu, ta, te, bn, mr │ │ │ └────────────────────────────────────────────────────────────────────┘ │ │ │ │ Output: Audio URL │ └───────────────────────────────────────────────────────────────────────────┘ │ │ Audio URL │ ▼ ┌──────────┐ │ User │ │ Hears │ │ AI Voice│ └──────────┘ ``` ## Data Flow: Voice Conversation ### Step-by-Step Flow ``` 1. USER SPEAKS │ │ "Your account is blocked. Send OTP now!" │ ▼ 2. BROWSER CAPTURES AUDIO │ │ MediaRecorder API → WebM/WAV blob │ ▼ 3. UPLOAD TO API │ │ POST /api/v1/voice/engage │ FormData: audio_file, session_id, language │ ▼ 4. ASR (WHISPER) │ │ Audio → Text Transcription │ Output: "Your account is blocked. Send OTP now!" │ Language: "en" │ Confidence: 0.95 │ ▼ 5. PHASE 1 DETECTION (UNCHANGED) │ │ Input: Transcribed text │ Scam Detector → is_scam: true, confidence: 0.92 │ Type: "financial_fraud" │ ▼ 6. PHASE 1 HONEYPOT (UNCHANGED) │ │ LangGraph Workflow: │ - Plan: Select "confused_elderly" persona │ - Generate: Groq LLM creates reply │ - Extract: Parse for UPI/bank/phone │ │ Output: "Oh no! What should I do? I'm scared!" │ ▼ 7. TTS (gTTS) │ │ Text → Speech Synthesis │ Input: "Oh no! What should I do? I'm scared!" │ Language: "en" │ Output: /tmp/reply_xyz.mp3 │ ▼ 8. RESPONSE TO USER │ │ JSON Response: │ { │ "ai_reply_text": "Oh no! What should I do?", │ "ai_reply_audio_url": "/api/v1/voice/audio/reply_xyz.mp3", │ "transcription": {...}, │ "scam_detected": true, │ ... │ } │ ▼ 9. BROWSER PLAYS AUDIO │ │