Staff Machine Learning Engineer at Adobe (Firefly), San Jose, CA. I work on GPU-accelerated AI systems, post-training, and large-scale generative models.
Recent work on a numerical bug class in GRPO advantage computation: reward groups in which every response scores the same can pick up a nonzero advantage from float32 group statistics. Fixes with regression tests, open in:
And in Triton's interpreter, a fix for NaN/Inf conversions: FP8 special codes decode as Inf/NaN instead of finite numbers, and RTZ downcasts no longer turn small-payload NaNs into infinities:
In OpenAI's repos, a human-eval fix so a completion ending in a decorator can no longer replace the test's check function:
In Anthropic's jacobian-lens, a fix so saving a fitted lens raises a clear error instead of silently writing infinities when the storage dtype overflows:
And in TorchTPU's dynamic view decomposition, two fixes: a strided view can no longer be given a base larger than its storage, and 0-d views with a storage offset no longer crash with an IndexError:
In NVIDIA Dynamo's profiler, a fix so SGLang workers launched with the --tp-size or --pp-size spellings keep their multinode placement instead of being sized as single-GPU instances, with the first unit tests for set_multinode_config:
- gpu-train-debug: an RL environment for GPU training failure diagnosis, published on the Prime Intellect Hub in the Verifiers format. Dataset on Hugging Face.
- jev-max: a browser agent that handles the real web (shadow DOM, iframes, canvas fallback, multi-tab).
- memfix: a provenance-first, correctable memory layer for AI agents, with an MCP server.


