sentinel-scam-honeypo / tests /live_audit.py
avinash-rai's picture
Deployment Ready: Fixed scam detection low confidence, added production audit report, optimized throttles
1838600
import httpx
import asyncio
import json
import time
BASE_URL = "http://localhost:8004"
API_KEY = "GUVI_HACKATHON_V2"
async def test_live_analysis():
print("--- Phase 1: Real API Call Execution ---")
scam_message = "Hello, this is SBI Bank. Your KYC is expired. Please update it here: http://sbi-kyc-update.net. Transfer 5000 to upi: verify.kyc@ybl to prevent account block. Contact +91-9876543210."
payload = {
"message": scam_message,
"sessionId": "live-test-session-001",
"timestamp": int(time.time()),
"conversationHistory": []
}
headers = {
"x-api-key": API_KEY,
"Content-Type": "application/json"
}
async with httpx.AsyncClient(timeout=30.0) as client:
try:
start_time = time.time()
resp = await client.post(f"{BASE_URL}/api/guvi/analyze", json=payload, headers=headers)
duration = time.time() - start_time
print(f"Status Code: {resp.status_code}")
print(f"Response Time: {duration:.2f}s")
if resp.status_code == 200:
result = resp.json()
print("--- Response Validation ---")
print(f"Scam Detected: {result.get('scamDetected')}")
print(f"Risk Level: {result.get('riskLevel')}")
intel = result.get("extractedIntelligence", {})
print(f"Extracted UPIs: {intel.get('upiIds')}")
print(f"Extracted Links: {intel.get('phishingLinks')}")
print(f"Extracted Phones: {intel.get('phoneNumbers')}")
print("--- Agent Notes ---")
print(result.get("agentNotes"))
print("--- Honeypot Response ---")
print(result.get("reply"))
# Verification of AI Reasoning
notes = result.get("agentNotes", "")
if "[AI THOUGHT TRACE]" in notes:
print("\n[SUCCESS]: Real LLM Inference Verified via Thought Trace.")
# Extract and print snippet for visual audit
trace_snippet = notes.split("[AI THOUGHT TRACE]:")[-1].strip()
print(f"DEBUG: Trace Sample: {trace_snippet[:100]}...")
else:
print("\n[WARNING]: No AI Thought trace found in agentNotes.")
print(" This might indicate a fallback to heuristic mode or a capture failure.")
# Check for Agentic Steps
if result.get("agentNotes"):
print(f"INFO: Agent Notes: {notes[:150]}...")
else:
print(f"Error: {resp.text}")
except Exception as e:
print(f"Connection Failed: {e}")
async def test_threat_feeds():
print("\n--- Phase 3: Real Threat Feed Ingestion ---")
async with httpx.AsyncClient(timeout=10.0) as client:
try:
resp = await client.get(f"{BASE_URL}/api/v1/intelligence/feed-stream-v2", headers={"x-api-key": API_KEY})
if resp.status_code == 200:
data = resp.json()
feeds = data.get("feeds", [])
print(f"Fetched {len(feeds)} live feed items.")
if not feeds:
print(f"DEBUG: Full Response: {json.dumps(data, indent=2)}")
sources = set(f.get("source") for f in feeds)
print(f"Feed Sources: {sources}")
if "Simulation_Fallback" in sources:
print("!!! FLAG: System fell back to Simulation for threat feeds.")
else:
print("--- Verified Live Threat Feed Ingestion ---")
else:
print(f"Feed Error: {resp.text}")
except Exception as e:
print(f"Feed Connection Failed: {e}")
if __name__ == "__main__":
asyncio.run(test_live_analysis())
asyncio.run(test_threat_feeds())