I build machine learning systems that other people can run: a ranker behind an HTTP
endpoint, an inference runtime you can pip install, an LLM layer that is allowed to
decide only what it is qualified to decide. Every number below is measured, with the
command that reproduces it in the repo.

Predict the 12 articles a customer buys next week, from 31.8M H&M transactions. Five retrieval strategies narrow 105K articles to 300 candidates; a LightGBM LambdaRank model re-ranks them. FastAPI on Cloud Run.
| on the 2020-09-16 validation week, 68,984 buyers | MAP@12 | |
|---|---|---|
| repurchase + bestseller fill, the baseline to beat | 0.02557 | |
| this system | 0.03296 | +28.9% |
Live evaluation console — scales to zero, so a cold first click takes ~22 s; every request after that is ~150 ms. It shows what a shopping UI cannot: whether each prediction was right, which retrieval strategy proposed it, and what the baseline would have said.
Four of the five interventions tried after the first working version failed to clear the noise floor. They are written up as failures, next to the wins, with the command that reproduces each — resume.md · error_analysis.md · recall.md
Edge-AI — UniRT, an on-device LLM/VLM/embedding runtime. A pure C ABI is the public boundary;
backends are version-gated plugins that export plugin_id(), plugin_abi_version() and
create_plugin(), and the loader checks the ABI version before it accepts the object.
llama_cpp— GGUF text and VLMs (libmtmd) on CPU / Metal / Vulkan / CUDAmlx— safetensors on Apple Silicon GPUonnxruntime— encoder embeddings on CPU / Core ML
The same runtime as an install-only distribution — 7 releases, 8 prebuilt native
artifacts each. pip install unirt, no toolchain: wheels for Python 3.10+ on macOS 14+
arm64, Linux x86_64/arm64 (manylinux_2_31), Windows 10+ x86_64/arm64, plus Android
(AAR via JitPack) and iOS bindings. Ships an OpenAI-compatible server with streaming SSE,
tool calling, JSON-schema constrained output, /v1/embeddings and /v1/rerank — either
retrieval flag works with no chat model loaded at all.

spectrum-adjudicator — a deterministic numeric pipeline measures DESI-like spectra. An LLM adjudicates only where the fixed rules are known to fail, and may only choose among redshifts the numeric layer already put on the table. Scored against independent labels (DESI DR1 public + EDR visual inspection):
On the same 40 spectra and the same candidate lists, taking rank 1 is catastrophically wrong 19 times. The adjudicator is wrong 0 times, declining on 8.
Stack — Python, C/C++, PyTorch, LightGBM, llama.cpp, MLX, ONNX Runtime, FastAPI, DuckDB, Docker, Cloud Run


