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.
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 ↗
Of comparable SEBI orders where the first amount disagrees with the operative paragraph, indic-reg-bench
Attack success rate over 129 adversarial SQL cases with tables scoped; 0.089 without, QueryPilot
Random Forest illicit-F1 over 4 seeds, beating my GATv2 at 0.213, Elliptic
Fault scenarios evaluated, GATv2 RCA at Jio Platforms
Across ML, deep learning, and generative AI.
LiveAI 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.
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
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.
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

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).
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
Generative AI
QueryPilot — Natural Language to SQL
The injection benchmark gates every pull request in CI.
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
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.
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.
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.
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.
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.
Open to ML / AI engineering roles — Mumbai, open to relocate.