← Projects

Production system 03 / 03

News Pipeline

Real-time and historical news ingestion — deduplicated, embedded, and served back as semantic search.

Pipeline

GDELT Public global news feed INGEST Two modes, one path REALTIME HISTORICAL PARSE Records + country tags DEDUP URL hash, then SimHash EMBED Batched vector calls VECTOR STORE Sharded indexes RETRIEVAL LIBRARY Filters: date, country, language, source SEMANTIC SEARCH BULK EXPORT AGENTIC RAG SERVES STATE REGISTRY Checkpoints, leases, retries RESUMABLE
  • Real timeGDELT ingest as the news breaks
  • Shardedvector indexes in production
  • Self-serviceretrieval for other internal teams

The pipeline

GDELT publishes machine-readable article files every minute. The pipeline consumes them in two modes off one code path: a realtime poller working a rolling window, and a historical backfill that walks a date range backwards and checkpoints as it goes, so a crash resumes exactly where it stopped.

Everything after fetch is shared — parse and country enrichment, then two-stage deduplication that drops exact URL matches before paying to embed anything and near-duplicates after, then batched embedding into sharded vector indexes. What used to be keyword hunting is now search by meaning.

Who uses it

A Python client library on top made the store self-service for other internal teams: semantic search with date, country, language and source filters, streaming bulk export for large pulls, and an agentic mode that answers questions with citations.

Reliability

I own pipeline reliability end to end: observability and alerting, so failures surface instead of passing silently.

Stack
  • Python · asyncio
  • Amazon S3 Vectors
  • OpenAI-compatible embeddings
  • AWS
  • Docker
  • Observability
Back to All projects