Hassam Gani

I'm a computer science student at Columbia working on language-model agents and reinforcement learning.

At Columbia's DAPLab I test when LLM agents should debate instead of voting, build self-play training in which a model learns from problems it sets itself, and compare graph and SQL agents for querying databases. I also co-founded MorningsideMunch, a dining app used by more than 1,000 Columbia and Barnard students.

Research

DAPLab, Columbia

Multi-agent debate. With a fixed budget of LLM calls, is it better to have agents vote, have one model refine its own answer, or let several agents debate? The theory we're testing predicts the winner from how far the correct answer leads the strongest wrong one. I run the experiments that check it: voting, self-refinement, and several debate variants at 5 to 40 calls, across six models and six benchmarks including GPQA-Diamond, MMLU-Pro, and MedQA. So far that's 34 runs, about 28,000 question-level results, and millions of model calls.

Self-play for LLM reasoning. Can a language model improve without labeled data? A challenger invents problems at the edge of what a solver can do, a critic screens or repairs them, and both train with GRPO. I built the math version on Qwen3 with veRL and vLLM on Modal H100s, with per-role LoRA adapters, a GRPO-trained critic, and preemption-safe restarts. I then extended it to open-ended writing, where the hard part is a reward you can trust: I raised valid challenger outputs from 42.5% to 77.5%, built a near-duplicate detector that agrees with blind LLM judges (Spearman 0.89), and showed that the 7B critic can't tell good rubrics from bad ones (Spearman 0.18).

I also re-measured the baselines of R-Zero, a published self-play method, with its own evaluation code on all four of its models and seven benchmarks. Three of its four headline gains shrink to about one point (Qwen3-4B's +6.49 becomes +0.79), and for one model the evaluation harness alone moved the score by about 20 points.

Graph vs. SQL database agents. I compare two LLM agents that answer questions over the same clinical databases: one writes SQL against PostgreSQL, the other writes Cypher against a graph of the same data, with the same model and the same explore-then-answer loop. On EHRSQL the graph agent finishes slightly ahead (78.0% vs. 75.2% on MIMIC-III, 71.5% vs. 70.6% on eICU), and almost all of the gap comes down to dates: on 22–25% of questions about relative time, the SQL agent counted back from today's date instead of the dataset's, against 7.5–11% for the graph agent. I designed and ran the experiments and audited the scoring, which turned up 626 correct answers among 2,722 that the automatic grader had failed.

Software Systems Lab, Columbia

Malicious code in pickled models. I built cpyAnalyzer, which maps class-hierarchy dependencies to catch malicious object transformations in pickle-based Python models. It shaped loading policies that accepted 79.8% of benign models and rejected every malicious one, with support from a $5,000 Kluge Scholar grant. I also containerized 10+ known-vulnerable Hugging Face models so the lab's PhD students could run reproducible tests with no setup.

Code

MorningsideMunch

Co-founder and CEO

A dining app for Columbia and Barnard that reached 1,000+ users within a month of launch, over 30% of Columbia's dining-plan holders. I engineered its data pipeline: headless Chromium in Vercel functions behind a Redis lock to get past Cloudflare, feeding a multi-tier cache and a hand-rolled HTTP/2 APNs service. It cut each refresh from 20+ requests to one across all 21 dining halls.

morningsidemunch.com

Projects

SmartSnake

A deep Q-learning agent in PyTorch. An 11-256-3 network reads hazards, heading, and food direction and picks relative moves, trained with experience replay, one-step TD targets, and ε-greedy exploration that decays to zero by game 80. Its score improves 733% by game 100 and levels off around an average of 31.

Watch it train in your browserCode

FaceGuard

An OpenCV tool (YuNet and SFace) that learns the owner's face in seconds without a GPU and stores it as an averaged 128-dimensional embedding. When the Mac wakes, it scans a three-second window; if the owner isn't there, it emails the four most confident non-matching frames and a video clip. A dual cosine and L2 match gate identified the owner within two feet 100% of the time.

Code

Other experience

Ambassador, Breakthrough Ventures

A community of 40 founders who have raised $50M between them.

Co-founder, stealth startup

Built the foundations of an early computer-vision product.

Teaching assistant, COMS 1404, Columbia

Taught an ML curriculum in NLP and computer vision, built with faculty and PhD students, through workshops and mentoring.

Frontend developer, Columbia SIPA

Designed and maintained course sites for the Executive MPA program.

Penetration tester, CyberPro Tech

Tested 15+ systems and documented 200+ vulnerabilities with Burp Suite, Metasploit, and Wireshark.

About

Hassam Gani

The research I like most is the kind that reaches real users. I'm interested in language models end to end, from tokenization and the transformer up to reinforcement learning, which is where most of my time goes now.

I live in New York and speak English, Spanish, Portuguese, and Arabic. Email is the best way to reach me, at gani.hassamabdul@gmail.com.