Machine Learning Engineer · retrieval & search · real-time perception · efficient inference
MSc AI (First Class Hons). By day I lead ML at Syos Aerospace: real-time perception on Jetson / TensorRT, plus multi-sensor fusion and tracking for uncrewed vehicles. Outside work I build retrieval and matching systems with proper evaluation, work on efficient LLM inference, and contribute to open-source ML.
- Retrieval & search: BM25 with domain-aware tokenisation, dense and hybrid retrieval (RRF), cross-encoder reranking fine-tuned with hard negatives, embedding-based image retrieval
- Perception: real-time detection and tracking, deployed to edge hardware as optimised TensorRT engines
- Efficient inference: quantization, KV-cache tooling, MLX builds for Apple Silicon
- Evaluation: reproducible harnesses, paired significance testing, pre-registered held-out evaluation, honest negative results
| Project | What it is |
|---|---|
| retrieve-then-match | Two-stage product entity matching: code-aware BM25 + fine-tuned cross-encoder (hit@1 0.938, F1 0.925 on held-out Abt-Buy). Paired significance tests and a pre-registered final evaluation |
| pgvector-rag-pipeline | Hybrid vector + full-text RAG in PostgreSQL / pgvector, fused with RRF in pure SQL. Evaluation harness: Hit@5 100%, MRR 0.90, nDCG@5 0.93. Runs fully offline on local models. In progress |
| meta-ts-correction | Can a tiny corrector recover a frozen time-series foundation model's (Chronos-Bolt) accuracy at a fraction of the compute? Leakage-audited harness validated against M4 Naive2, with Wilcoxon / Diebold–Mariano / Holm testing. In progress |
| eqx-zoo | Verified Equinox ports of pretrained models, numerically matched against Hugging Face |
| rl-playground | From-scratch PPO in PyTorch, verified against Stable-Baselines3 on a custom racing environment, with multi-seed ablations |
| swellsense | A surf assistant for New Zealand surfers that answers questions about boards, swell, spots and safety from cited sources |
Merged contributions focused on device-agnostic support (Apple Silicon / MPS / CPU), correctness fixes and KV-cache tooling.
- Hugging Face Accelerate: report MPS as the accelerator in
accelerate env(#4158) - MLX-LM (Apple): validate adapter tensors when loading adapters (#1727); fix an off-by-one in size parsing caused by float truncation (#1726)
- KVCache-Factory: device-agnostic input placement for MPS / CPU (#66); fix model max length (#67)
- Hugging Face Transformers (in review): image-text contrastive loss for BLIP-2 image-text retrieval (#48583)
I keep my fundamentals sharp by implementing ML from scratch: deep learning, linear algebra, optimisation and classical ML.
- Deep-ML: actively solving problems · solutions and labs in deep-ml
- TensorTonic
- K2-geoscience-7B (4-bit MLX): the first MLX build of a geoscience LLM
- Global natural events 2011–2026: ~41.6k events from NASA EONET
- Global earthquakes 2020–2026: ~11.8k events
Python · PyTorch · Transformers · sentence-transformers · MLX · TensorRT · ONNX · PostgreSQL / pgvector · OpenCV · C++ · ROS2 · Docker
LinkedIn · Hugging Face · Deep-ML · TensorTonic · Kaggle · ORCID
off the clock: surfing · football · somewhere on the coast


