Skip to content
Open to ML / AI engineering roles · Mumbai, open to relocate · 2026 graduate

Machine Learning

Most recently GNN root-cause analysis at Jio Platforms. 4 merged PRs in MLflow, Great Expectations and pdfplumber. Leakage-checked validation, honest baselines and tests in CI: the part of ML that doesn’t demo well.

The part that doesn’t demo well is the part that matters.

I work across classical ML, deep learning, and generative AI, and reach for whichever the problem actually calls for.

What I care about most is leakage-checked validation, honest baselines, safety rails, and tests in CI — the difference between a notebook and something you can put in front of users.

Open source

4 merged PRs in other people’s projects.

  • mlflow/mlflow — the mlflow-skinny build now fails instead of shipping a wheel with no Python files when a Windows checkout turns its symlinked source into a plain file.
  • great_expectations — an undefined SQLite standard deviation (fewer than two values) is reported as None instead of raising an opaque OperationalError.
  • great_expectations — brought the partition-and-sample execution-engine tests under mypy, fixing the type errors that surfaced.
  • jsvine/pdfplumber — a password-protected PDF no longer fails with an empty PdfminerException message; the wrapped exception class is surfaced.

More under review, including a DenseGATv2Conv layer for PyTorch Geometric and a pdfplumber cache fix that cuts a 65-page PDF from 105 MB to 4.8 MB.

Signalovernoise.

Measure: ML Platform
29.7 req/s for the fraud-scoring service, measured on a laptop from a committed locustfile, not extrapolated.

Baseline: indic-reg-bench
The first amount in a SEBI order disagrees with the regex-located operative paragraph in 48.6% of comparable orders: the trap a model has to avoid.

Test: ML Platform
113 tests, including a cross-subsystem test that could not be written before the merge.

Ship: QueryPilot
Every pull request is scored against 129 adversarial SQL cases, and CI fails if the safety score drops below the committed baseline.

Leakage.

The bug that makes a model look better than it is. I check the split before I check the score.In my Elliptic GNN, the validation slice sorted on an anonymised feature instead of time. Fixing it took GATv2 from 0.4266 to 0.2311 illicit-F1, and the lower number is the one published ↗

48.6%

Of comparable SEBI orders where the first amount disagrees with the operative paragraph, indic-reg-bench

0.010

Attack success rate over 129 adversarial SQL cases with tables scoped; 0.089 without, QueryPilot

0.813

Random Forest illicit-F1 over 4 seeds, beating my GATv2 at 0.213, Elliptic

180

Fault scenarios evaluated, GATv2 RCA at Jio Platforms

Across ML, deep learning, and generative AI.

Pipeline diagram: topology and alarm signals feed a shared featurizer into a multi-head GATv2, served over REST.

Deep Learning · Signature

180 scenarios, 19 fault categories

Graph Attention Networks for Root-Cause Analysis

Evaluation
Evaluated across 180 scenarios in 19 corner-case fault categories, with per-head thresholds calibrated on a held-out split.
Tradeoff
The simulator only generates training data; inference is a pure model path behind one shared featurizer, enforced by structural tests, so no simulator call is left to cause train/serve skew.

A multi-head GATv2 model that jointly predicts affected access nodes, root-cause node and link candidates, and their fault types — plus a pairwise leaf-to-cause assignment that groups alarms into distinct concurrent incidents. Per-head thresholds calibrated on a held-out split and evaluated across 180 scenarios spanning 19 corner-case fault categories. A deterministic RCA simulator (fault injection, BFS reachability oracle, counterfactual causal-dominance ranking) generates the labelled training data, but inference at prediction time is a pure model path — one shared featurizer used across training and inference, enforced by structural tests, so there is no simulator or BFS call left to cause train/serve skew. Exposed via a CLI and a Flask dashboard that returns ranked causes with confidence and a plain-English explanation.

  • Python
  • PyTorch
  • PyTorch Geometric
  • GATv2
  • Flask
  • REST
Ask me about it →

Built at Jio Platforms — the code is proprietary, so there is no repository to link.

Read the case study →

OpenEval traces view: six LLM calls across Ollama llama3, GPT-4o-mini and Claude 3.5 Sonnet, each with latency, tokens and cost; one GPT-4o-mini call timed out and is shown in red.
Live

AI Engineering

24 built-in evaluators

OpenEval — Self-Hosted LLM Observability

24 built-in evaluators run against any provider, and comparing two runs flags regressions with a significance test.

Read the case study →

OpenEval — Self-Hosted LLM Observability

Tradeoff · Eval jobs run on Celery, not a request-scoped task: scoring hundreds of rows against a real LLM API takes minutes and has to survive a restart.

A self-hosted LangSmith/Helicone alternative: trace every LLM call, version prompts and datasets, run 24 built-in evaluators (RAGAS-equivalent and DeepEval-backed) against any provider, and compare runs to catch regressions — one docker compose up, no vendor lock-in. Eval jobs run on Celery, not a request-scoped async task, because scoring hundreds of rows against a real LLM API takes minutes and needs to survive a process restart. Every resource — traces, datasets, prompts, eval runs — is scoped to an organisation → project → role from the first migration, because multi-tenancy retrofits are where authorization bugs live. Live on a free tier: the first request after idle can take minutes.

  • Python
  • FastAPI
  • Celery
  • PostgreSQL
  • Next.js
  • Redis
  • Docker
Live demo ↗free tier: first load can take minutesView code ↗
Agent graph: the planner fans sub-questions out to parallel researcher, browser and summarizer branches; the fact checker and critic loop gaps back to the planner within a retry limit, then the code executor, writer and citation validator produce the cited report.

LLM Agents

9 cooperating agents

DeepResearch — Multi-Agent Research System

Every claim is cross-checked against at least two sources and tagged HIGH, MEDIUM, LOW or UNVERIFIED.

Read the case study →

DeepResearch — Multi-Agent Research System

Tradeoff · The critic can send gaps back to the planner, but a retry-depth limit stops it researching forever.

Give it a research question and nine cooperating agents — planner, researcher, browser, summariser, fact-checker, critic, code executor, writer, citation validator — plan sub-questions, search the web in parallel, cross-check every claim against at least two sources, and hand back a cited report with a per-claim HIGH/MEDIUM/LOW/UNVERIFIED confidence tag. The fact-checker/critic loop can send gaps back to the planner, bounded by a retry-depth limit so it can’t research forever. LangGraph checkpoints to Postgres after every node, and a crashed worker’s job is redelivered to another replica instead of being lost. Runs end to end on Ollama + DuckDuckGo for $0.

  • Python
  • LangGraph
  • Celery
  • FastAPI
  • Next.js
  • Postgres / pgvector
  • Docker
Bar chart of SEBI enforcement orders by year, 2004 to 2026: all 11,957 listed orders against the 2,000-order benchmark sample, which follows the same shape.

AI Engineering

11,957 SEBI orders indexed

indic-reg-bench — A Benchmark for Indian Regulatory Documents

Tasks a regex can’t win: the first currency amount disagrees with the regex-located operative paragraph in 48.6% of comparable orders (567 of 1,166).

Read the case study →

indic-reg-bench — A Benchmark for Indian Regulatory Documents

Tradeoff · The 2,000-order benchmark sample (seed 42) follows the year distribution of all 11,957 listed orders, so no era dominates the score.

An open benchmark for document understanding on SEBI enforcement orders: five tasks, a harness, and a HuggingFace dataset. Everything else here is a system I built; this is an instrument other people measure their systems with. The hard part is designing tasks a regex can’t win — SEBI orders quote the noticee’s own settlement pleas in phrasing identical to the ruling, so the first currency amount disagrees with the regex-located operative paragraph in 48.6% of comparable orders.

  • Python
  • HuggingFace Datasets
  • PDF parsing
  • Evaluation
  • GitHub Actions
Terminal output of query-injection-bench against QueryPilot v2: the default adapter lets several SQL-injection attacks succeed, the scoped adapter blocks them and the run passes the CI baseline.

Generative AI

QueryPilot — Natural Language to SQL

The injection benchmark gates every pull request in CI.

Read the case study →

QueryPilot — Natural Language to SQL

Tradeoff · Safety never depends on parsing the SQL: the connection is read-only at the engine and an authorizer denies writes at prepare time.

Ask a database questions in plain English — and it is structurally impossible for the answer to write to, alter, or escape that database. An LLM writes the SQL, but nothing trusts it: every query runs on a connection that is read-only at the SQLite engine level and behind a SQLite authorizer that denies any non-read operation at prepare time, so the guarantee never depends on parsing the SQL text (the part an attacker controls). The linked code is v2 — FastAPI, schema-aware RAG, Postgres, Docker — whose injection benchmark gates every PR in CI.

  • Python
  • FastAPI
  • SQLite
  • ChromaDB
  • Postgres
  • Docker
  • Streamlit
Terminal output of the ml-platform drift demo: no drift on in-distribution data, then injected drift on amount and merchant risk score flagged as critical.

Data / ETL

113 tests passing

ML Platform — Feature Store + Drift Monitor + Fraud Scoring

113 tests, including a cross-subsystem test that could not exist before the merge; 29.7 req/s measured on a laptop from a committed locustfile.

Read the case study →

ML Platform — Feature Store + Drift Monitor + Fraud Scoring

Tradeoff · Merging three repos replaced three stubs with real calls; one had silently swallowed an ImportError.

A feature store, a drift monitor, and a real-time fraud-scoring service, merged from three separate repos into one that can actually import across the seam. Each stub was real before the merge: the feature store’s drift detection was a documented no-op waiting on a "not-yet-built sibling," the monitor duck-typed its feature-store adapter instead of importing it, and the fraud service wrapped its monitoring hook in a try/except that silently swallowed ImportError. The merge replaces all three with a real call, verified by a cross-subsystem test that could not have been written before — 113 tests total, throughput measured at 29.7 req/s from a committed locustfile, not extrapolated.

  • Python
  • Kafka (Redpanda)
  • Redis
  • XGBoost
  • IsolationForest
  • Postgres
  • FastAPI

Where I’ve worked.

  1. Jio Platforms

    GNN-Based Analyst Intern (AI/ML)

    Jan – Jul 2026 · Mumbai

    • Designed and trained a multi-head GATv2 model in PyTorch Geometric that jointly predicts affected access nodes, root-cause candidates with fault types, and pairwise leaf-to-cause assignments — grouping concurrent alarms into distinct incidents, with per-head thresholds calibrated across 180 scenarios spanning 19 fault categories.
    • Built a deterministic, topology-agnostic RCA simulator — fault injection, BFS reachability oracle, device-type alarm rules, causal-dominance ranking — to generate labelled multi-incident training data against a fixed ground-truth contract.
    • Shipped a pure-model inference path behind a shared 28-dim node / 11-dim edge featurizer enforced by structural tests, so no simulator or BFS call is left at prediction time to cause training/serving skew.
    • Surfaced predictions via a CLI and Flask dashboard returning ranked root causes with confidence scores and human-readable explanations, so operators could act without reading model internals.
  2. Euronet Services India

    Backend Engineering Intern

    Jun – Aug 2024 · Mumbai

    • Analysed daily payment transaction records via SQL to surface failure patterns, latency bottlenecks, and reconciliation anomalies.
    • Designed and tested RESTful APIs for transaction validation, routing, and reconciliation, integrated with two external payment gateway providers.
  3. UNO Minda

    Network Engineering Intern

    Jun – Jul 2023 · Gurgaon

    • Documented enterprise network architecture and configured routers and switches in Cisco Packet Tracer.
    • Diagnosed routing, switching, and connectivity issues across the corporate network.

Grouped by what I build.

  • ML / Deep Learning

    Graph neural networks and gradient-boosted models, validated walk-forward, not on a random split.

    • GNNs
    • GATv2
    • PyTorch
    • PyTorch Geometric
    • XGBoost
    • LightGBM
    • scikit-learn
    • LSTM
    • Isolation Forest
    • SHAP
    • Feature engineering
    • Walk-forward validation
  • Statistics & experimentation

    A/B tests when you can run one, causal methods when you can’t.

    • A/B testing (frequentist & Bayesian)
    • CUPED
    • Difference-in-differences
    • Synthetic control
    • Uplift modelling
    • Welch’s t-test
    • Regression analysis
  • LLM / Generative AI

    Retrieval, agents and evaluation, with prompt-injection defence built in.

    • RAG pipelines
    • GraphRAG
    • Hybrid retrieval
    • NL-to-SQL & Cypher
    • LangGraph
    • LangChain
    • LiteLLM
    • Multi-agent systems
    • LLM evaluation
    • LLM-as-judge
    • Prompt-injection defence
    • MCP server development
    • ChromaDB
    • pgvector
    • Sentence Transformers
    • Ollama
  • Graph algorithms

    Centrality, paths and communities on real networks, in Neo4j or NetworkX.

    • Neo4j
    • Cypher
    • NetworkX
    • PageRank
    • Betweenness
    • Community detection
    • Dijkstra
  • Data & infrastructure

    The streams, queues, feature stores and drift monitors around a model.

    • Kafka / Redpanda
    • Redis
    • Celery
    • RabbitMQ
    • PostgreSQL
    • DuckDB
    • Feature stores
    • Drift monitoring
    • ETL / Parquet
  • Foundation & tooling

    Python and SQL first; APIs, containers and CI that gates regressions.

    • Python
    • SQL
    • C
    • DSA / OOP
    • FastAPI / Flask / REST
    • Docker & Compose
    • pandas / NumPy / Plotly
    • Next.js
    • Streamlit
    • Grafana
    • Alembic
    • Locust
    • Git
    • Linux
    • pytest
    • GitHub Actions
    • CI regression gating

Let’s build something.