Narad: The Intelligent Detective Engine

Inspiration

Narad, from ancient Indian history, was known for traveling across kingdoms, gathering information, and uncovering hidden connections between events. We drew inspiration from this idea to build a modern geopolitical intelligence engine.

Today, critical global events are fragmented across languages, regions, and news ecosystems. A policy shift in Chennai, a crop failure in Punjab, and disruptions in the Suez Canal may appear unrelated, but can form part of the same economic or geopolitical chain.

Narad was built to uncover these hidden relationships and provide deeper investigative insights.

What it does

Narad is a multilingual intelligence platform that analyzes over 150,000 news articles to detect hidden geopolitical, economic, and historical connections.

The system combines:

  • Semantic vector search
  • BM25 lexical retrieval
  • Multilingual Named Entity Recognition
  • Graph-based relationship analysis
  • LLM-powered reasoning

to identify related events, bridge disconnected topics, and surface historical precedents.

We implemented a custom 3-tier temporal model to balance:

  • Breaking news detection
  • Medium-term developments
  • Long-term historical analysis

using adaptive temporal scoring:

$$ S_{temporal} = e^{-\frac{\Delta t}{72}} $$

for recent events, and:

$$ S_{temporal} = 0.3 + 0.7 \left( 1 - e^{-\frac{\Delta t}{8760}} \right) $$

for historical precedent discovery.

Narad also uses graph centrality and Louvain community detection to identify “bridge” events connecting otherwise unrelated geopolitical domains.

How we built it

Backend & Infrastructure

  • Python
  • FastAPI
  • PostgreSQL + pgvector
  • SQLAlchemy

Machine Learning & Intelligence

  • Sentence-Transformers
  • spaCy
  • AI4Bharat IndicNER
  • NetworkX

LLM Orchestration

Using AWS Bedrock with:

  • DeepSeek V3.2
  • Llama 3.3 70B
  • AWS Nova Pro

Frontend

  • React
  • Vanilla CSS

Challenges we ran into

DBSCAN Scaling Crisis

Running DBSCAN globally across 150k articles required nearly:

$$ 150{,}000^2 \times 4 \approx 90 \text{ GB RAM} $$

which exceeded our infrastructure limits.

Solution

We introduced a 7-day sliding clustering window, reducing active clustering size from 150k to ~5k articles and lowering memory usage below 100MB.

Query Latency

Our initial investigation pipeline triggered 120 sequential database queries per request, causing response times above 10 seconds.

Solution

We replaced sequential lookups with bulk batched SQL queries using: SQL query : WHERE id IN (...)

which significantly improved latency.

Recency Bias in Embeddings

Semantic embeddings naturally favored recent articles, suppressing older but strategically important precedents.

Solution

We built separate entity-linked historical retrieval paths to surface long-term geopolitical patterns effectively.

Accomplishments that we’re proud of

  • Built a multilingual intelligence engine processing 150k+ active articles
  • Combined vector search, graph intelligence, temporal reasoning, and LLM validation into a unified pipeline
  • Reduced clustering memory usage from 90GB to under 100MB
  • Improved investigation latency from 10+ seconds to near real-time
  • Developed bridge-discovery analysis capable of uncovering non-obvious geopolitical relationships

What we learned

We learned that semantic search alone is insufficient for investigative intelligence. Effective geopolitical analysis requires combining:

  • Vector search
  • Lexical retrieval
  • Entity graphs
  • Temporal reasoning
  • Graph centrality

We also learned that algorithmic optimization often outperforms expensive infrastructure scaling.

What's next for Narad

*IndicNER Native Deployment: Fully loading the 500MB AI4Bharat CPU model to automate regional entity parsing in our ingestion pipelines.

*Persistent Caching: Transitioning from process-local Python dictionaries to an ElastiCache Redis setup to maintain cached graph topologies across App Runner deployments.

*Precedent-Based Forecasting: Deploying a pattern-matching prediction engine that links active event chains to historical precedents to automatically output likely outcomes and confidence metrics for active crises.

Built With

Share this project:

Updates

Submission history