Building LLM agents, tool calling, fine-tuning, model evaluation, RAGLLM agents
I build LLM systems end to end: agents that call tools to finish real tasks, fine-tuned models that keep what they already knew, and the evaluations that prove both work.
Pre-launch startup designed to let people send money abroad over WhatsApp through licensed money-transfer companies.
Led development of the WhatsApp chatbot (Next.js, TypeScript, WhatsApp Cloud API) that completes a money transfer inside one chat. The bot uses LLM tool calling to quote exchange rates, run Persona KYC identity checks, collect recipient details, and send the customer a payment link, so nobody has to leave WhatsApp or fill out a form.
Designed the payment backend so no payment is ever charged or paid out twice. Every payment step carries an idempotency key, and each payment event is written through a transactional outbox in PostgreSQL, so a retry or a crash cannot repeat a charge. Customer data is envelope-encrypted, and every action lands in a full audit trail.
Built a partner dashboard, a REST API, and signed webhooks so licensed partners can review transfers, check compliance, and connect their own systems. Deployed the platform on Vercel with Neon Postgres and Upstash Redis.
Next.js
TypeScript
WhatsApp Cloud API
LLM tool calling
PostgreSQL
Upstash Redis
Vercel
Aug 2025 – May 2026Fairfax, VA
George Mason University — Costello College of Business
AI Systems Engineer (Graduate Research Assistant)
Automated a professor’s trademark research, replacing manual data collection and image review with a scraper and a multimodal LLM.
Partnered with Dr. Saurabh Mishra to automate his trademark research. Built a Python scraper with caching and retry handling that collected ~200 USPTO opposition filings from TTABVue and TSDR and turned them into structured records ready for analysis.
Classified trademark images with Claude Vision (a multimodal LLM) at ~90% accuracy, which cut manual review time by ~60%.
Python
Web scraping
Claude Vision
Multimodal LLMs
Jan 2022 – May 2024India
KL University — Department of Computer Science & Engineering
Undergraduate Researcher, Applied ML
Ran applied machine-learning research that led to peer-reviewed publications.
Implemented 4 classifiers (Decision Tree, Random Forest, SVM, Logistic Regression), tuned each with grid search and cross-validation, and combined them into an ensemble for hair-fall prediction. The ensemble reached 93% accuracy, compared with 89% for the best single model.
Published 2 first-author papers, one on hair-fall prediction and one on AI in cybersecurity, and presented team research at IEEE ICICT 2023.
scikit-learn
Ensemble learning
Grid search
Cross-validation
Projects
Questions I answered
Each project starts with a question and ends with a measured answer. The charts are interactive.
01
Evaluation research · CS 692, advised by Prof. Bo Han
VLM Chart-Understanding Study
Can a frontier vision-language model still read a chart once the chart is drawn in 3D?
Evaluated GPT-5.4 on chart question answering with the ChartX benchmark: 6,000 chart images across 18 chart types. Accuracy fell from 85.7% on 2D charts to 59.3% on 3D charts, and McNemar’s test showed the drop is statistically significant.
Found why: 3D views hide or distort parts of the chart, so the model cannot read values it cannot see. Also found a flaw in the benchmark itself, where some questions asked for exact numbers the image never showed. Adding data labels to those charts raised accuracy from 51.6% to 97.7%.
GPT-5.4
ChartX benchmark
McNemar’s test
Python
GPT-5.4 accuracy on ChartX
2D charts85.7%
3D charts59.3%
▼ 26.4 points
Same benchmark, same model: moving the charts into 3D cost 26.4 points of accuracy, because 3D views hide or distort the values the questions ask about.
02
Fine-tuning · Personal project
Finance-Tuned Llama 3.2 1B
Can a small model learn finance without forgetting everything else it knew?
Fine-tuned Llama 3.2 1B Instruct on 5,675 finance examples with LoRA (Hugging Face PEFT, TRL SFTTrainer) and published the model on Hugging Face. Cleaned the training data first, removing 72% of 20,000 loaded examples as noisy or duplicate.
Benchmarked every version on MMLU, GSM8K, and IFEval. An earlier run lost 7.4 MMLU points to catastrophic forgetting, so I traced the cause and fixed it: lowered the LoRA rank to 8, trained only the attention layers, cut the learning rate 5x, and trained for a single epoch.
Held the final model at 45.9% on MMLU vs. 46.1% for the base model, and recovered 25.9 points on GSM8K and 15.7 points on IFEval compared with the earlier run. Training took under 7 minutes on one NVIDIA A100.
The earlier run collapsed on math (33.6% → 6.1% on GSM8K). The final model stayed within 2.1 points of the base model on all three benchmarks.
03
Self-hosted AI mail platform · TypeScript
Mail Agent
Can one private inbox triage and draft replies across every email account I own?
Created a self-hosted web app that combines 5 email accounts (Gmail, iCloud, Fastmail, Zoho) into one inbox, with LLM triage and reply drafting powered by Gemma via Ollama, running locally or in the cloud.
Encrypted stored credentials with AES-256-GCM and sandboxed email HTML in an iframe, so a malicious email cannot run code inside the app. Automated follow-ups stop on their own when the recipient replies or unsubscribes.
TypeScript
Gemma via Ollama
AES-256-GCM
LLM triage
AI Lab
Don’t just read it. Test it.
Three working AI tools, built into this site. Each one shows a skill from my resume: retrieval with citations, structured LLM output checked by code, and a model I fine-tuned.
Ask about my work
Ask anything about my experience, projects, research, or skills. The assistant answers only from this site’s content and cites the section each fact comes from.
How it works
BM25 retrieval picks the most relevant passages from my resume.
An open LLM answers using only those passages, citing each one.
The server drops any citation that doesn’t match a real passage.
Job-fit check
Paste a job description. Each requirement is mapped to evidence from my work, with links, and anything I have not done is listed as a gap. Gaps are shown on purpose.
How it works
An open LLM extracts the key requirements and proposes evidence.
The server checks every evidence id against my real resume passages.
Claims without valid evidence are downgraded to partial or gap.
Finance-Llama, live
Ask one finance question and get two answers: one from the base Llama 3.2 1B model and one from my fine-tuned version. Both run as 4-bit GGUF models on a free CPU server.
How it works
Your question goes to a Hugging Face Space running llama.cpp.
The base model and my fine-tuned model answer the same prompt.
Benchmarks for both are in the Projects section above.
Checking the demo server…
Research
Peer-reviewed publications
IJRITCC · 2023 · First author
Enhancing Hairfall Prediction: A Comparative Analysis of Individual Algorithms and an Ensemble Method