janrakshak-ml-api / scripts /seed_mongodb.py
Archit
Deploy FastAPI Backend to HF Space
96ac3c1
Raw
History Blame Contribute Delete
3.14 kB
import asyncio
import uuid
import random
from datetime import datetime, timedelta
from motor.motor_asyncio import AsyncIOMotorClient
import os
from dotenv import load_dotenv
load_dotenv(os.path.join(os.path.dirname(__file__), '..', '.env'))
MONGO_URI = os.getenv("MONGO_URI", "mongodb://localhost:27017")
DB_NAME = "janrakshak"
async def seed():
client = AsyncIOMotorClient(MONGO_URI)
db = client[DB_NAME]
print("Clearing existing incidents for a clean demo state...")
await db["incidents"].delete_many({})
# 1. Coordinate Centers for DBSCAN (Jamtara & Bharatpur)
# Note: GeoJSON uses [longitude, latitude]
clusters = {
"Jamtara_Hub": [86.8000, 23.9667],
"Bharatpur_Hub": [77.4930, 27.2152]
}
# 2. Key Entities for Agentic AI to find historical overlap
scammer_phones = ["+91-9876543210", "+91-8765432109", "+91-7654321098"]
safe_accounts = ["SBI-987654321", "HDFC-123456789"]
incidents = []
print("Generating 100 heavily interconnected fraud incidents...")
for i in range(100):
# Pick a cluster 80% of the time, noise 20%
if random.random() < 0.8:
hub = random.choice(list(clusters.values()))
# Add small random offset for scatter (approx 1-5km)
lng = hub[0] + random.uniform(-0.05, 0.05)
lat = hub[1] + random.uniform(-0.05, 0.05)
else:
# Random noise across India
lng = random.uniform(68.0, 97.0)
lat = random.uniform(8.0, 37.0)
# Select entities
phone = random.choice(scammer_phones)
bank = random.choice(safe_accounts)
incident = {
"incident_id": str(uuid.uuid4()),
"type": "audio",
"timestamp": datetime.utcnow() - timedelta(days=random.randint(0, 30)),
"location": {
"type": "Point",
"coordinates": [lng, lat]
},
"extracted_entities": [
{"text": phone, "label": "phone_number"},
{"text": bank, "label": "bank_account"}
],
"risk_score": round(random.uniform(0.7, 0.99), 2),
"threat_dossier": "Legacy historical record.",
"details": {
"transcription": f"Hello, this is customs. Transfer to {bank} immediately or face arrest.",
"intent": "Extortion",
"scam_stage": "Stage 5: Extortion",
"deepfake_probability": round(random.uniform(0.0, 1.0), 2)
},
"digital_signature": "SEED_DATA_SIGNATURE"
}
incidents.append(incident)
await db["incidents"].insert_many(incidents)
# Ensure geospatial index exists
await db["incidents"].create_index([("location", "2dsphere")])
print(f"Successfully seeded {len(incidents)} incidents.")
print("Agentic AI will now successfully find historical patterns for phones:", scammer_phones)
print("DBSCAN will now flag giant red hotspots over Jamtara and Bharatpur.")
if __name__ == "__main__":
asyncio.run(seed())