I work on Bhojpuri NLP, on whether AI tests can be trusted, and on Rust systems.
Class 12 student in Hazaribagh, Jharkhand, India.
Papers accepted at NeurIPS 2026 (UserSim and ATTRIB) and IEEE AIoT 2026. My Bhojpuri work is in Stanford's Stanza v1.15.0, and I have a patent application in India.
- 🔭 I study how AI systems are tested, and I build data and tools for Bhojpuri, my language.
- 🎯 Next: getting more Bhojpuri speakers to check the sentences my models disagree on.
- 🧑🏫 I've run coding sessions for 250 students at my school, though my own subject is Painting.
- 💻 Fun fact: my laptop is a hand-me-down. I fitted its SSD myself and moved the hard disk into the CD-drive slot.
- 🎮 Off the keyboard: Rusher in Call of Duty: Mobile, and a run up Canary Hill most mornings.
To my knowledge, these are among the first open-source sentiment resources for Bhojpuri. Version 2 (October 2026) is native text, built with PURVA.
| PURVA Bhojpuri Sentiment Corpus v2 | 90,207 native sentences from 11 websites, with 451,002 labels from 5 open LLMs (Aya, Gemma, Llama, Mistral, Qwen) in 4 classes. I hand-labelled 270 sentences to check the labels. Split into train, dev and test. |
| Bhojpuri Sentiment Model v2 | IndicBERTv2 fine-tuned on PURVA labels. It gets 65.7% accuracy against human labels on native text, 81% on news and 83% on encyclopedic text. |
| Maithili and Hindi | Maithili_Sentiment_8K dataset, plus Maithili and Hindi sentiment models. |
Stanza (Stanford NLP): Bhojpuri ships in v1.15.0, which credits me by name. Most of my work was preparing the data and training the Bhojpuri models, using PURVA's text and resources. 4 PRs merged, plus 48 tag fixes to the UD Bhojpuri treebank.
What I did for Stanza
- converted the IIT (BHU) Bhojpuri POS corpus, about 14,780 sentences
- cleaned and de-duplicated the training data, and reported a train/test near-duplicate leak I found in my own results
- ran tagging and parsing experiments with Hindi as donor data (MuRIL did best on POS tags)
- opened issue #1654, where the work started -PURVA needed Bhojpuri POS tags and Stanza had none, so I built the training data and code for its first Bhojpuri models. Most of my work was preparing that data and training the models, and John Bauer, Stanza’s maintainer, asked for my PURVA corpus to train on. v1.15.0 includes my converter and credits me by name.
Ordered Disagreement in Open-Weight LLM Annotator Committees: Lessons from Building a Bhojpuri Sentiment Resource
With Dr. Deepak Rakesh (NIT Bhopal). [code] [data]
Five LLMs don't disagree at random: they sit on one shared scale (Loevinger's H = 0.76), so a native speaker only needs to check the sentences where they split.
Details
- Collected 90,207 sentences from 11 Bhojpuri websites (76,966 after cleaning), recording each one's source, style and licence; removed almost 12,000 whose origin I couldn't verify and 1,301 near-duplicates.
- Five open models from five companies labelled every sentence across 45 runs on free Kaggle GPUs: 451,002 labels. I hand-labelled 270 sentences to check them.
- Dawid-Skene, the standard way to combine labellers, did worse than a simple majority vote (57% vs 66%), and language-ID tools often mistook literary Bhojpuri for Hindi.
Same Failure, Different Cause: Ungrounded Tool-Call Provenance in Simulated Agent Evaluation
Sole author. [OpenReview] [NeurIPS] [code]
Qwen and Llama fail the same tau2-bench tasks for different reasons, but the benchmark counts them as one failure.
Ablate-and-Measure Breaks When the Measurement Depends on the Ablation
Sole author. [OpenReview] [NeurIPS] [code]
In a pre-registered 144-run study, whether a score even existed depended on the condition: it was defined for only 50 to 92% of runs.
Details
- Removed parts of an AI agent's context in six ways: 12 tasks × 2 seeds × 6 conditions, about 16 GPU-hours on free Kaggle T4s.
- No condition made a significant difference after correction (smallest adjusted p = 0.235).
- tau2-bench only scores runs that end cleanly, which is why the metric itself moved. I reported two deviations from my pre-registration, and reviewed two other submissions for this workshop.
Verify on Read, Update in Log Time: Per-Block Integrity for Mutable Edge-AI Model Files
Code: [model-integrity-bench] [axiom-os-kernel]
Catches a tampered AI model file on every read, and updates a block in 4.9 µs instead of 44 ms to re-hash the whole file.
Details
- Linux's fs-verity checks files block by block, but only files that never change. My checker keeps a Merkle tree over 4 KiB blocks and verifies only the blocks each read touches.
- In a tamper test, one flipped weight failed exactly one block, and no corrupt bytes were served.
- Measured on an Intel i5-5200U laptop and a Snapdragon 7 Gen 4 phone. Design advice from Prof. Subodh Kumar (IIT Delhi).
Article on "zombie" IoT devices
Sole author.
Why cloud-dependent smart devices stop working when their company shuts down.
- GitPython: credited finder of CVE-2026-67325 (high severity, CVSS 3.1: 8.8). Abbreviated option names could slip past its guard against dangerous git options. My fix: commit 2ab0516.
- Kaggle CLI: 2 PRs merged, including a guard against path traversal when extracting downloaded models.
axiom-os-kernel: a bare-metal Rust kernel for x86-64 and ARM that checks file integrity on every read. The model-file checker grew out of it.
tokcost: exact BPE token counts and cost estimates for LLM APIs, as one Rust binary. On crates.io.
Vehicle classification [model]
🏅 Selected top 4 worldwide for Prof. Feng Chen's AI Safety Lab, UT Dallas. A CNN trained from scratch on 26,378 images of 8 vehicle types, reaching 78.5% test accuracy against a 50% target.
I learned offline from 2023 to 2025, from printed papers and the blog_os tutorial on that old laptop, so most of my public work starts in 2026. I run experiments on free Kaggle GPUs.





