Khaled Bakeer
@0xBakeer on X, GitHub and Hugging Face
Open models can do real work. TandemLLM is where I try to prove it: models that run as agents on an engine I wrote myself, fast, and in their own words.
TandemLLM
TandemLLM began as an inference engine and grew into the environment around it. A request goes in, a router reads what it wants, and the model gets the skills, memory and sandboxed tools that kind of task needs. Underneath, small drafters guess the next tokens and the big model checks the guesses in one pass. A guess it agrees with is a free token. What comes out is the model's own text, only faster. Nothing in the design depends on one model or one machine.
The path of one request
- RoutingA router reads the request, decides what kind of task it is and how much reasoning it deserves.
- Skills and memoryThe task gets the skills and packages written for it, and notes from earlier sessions when memory is on.
- Sandboxed toolsShell, files, web and MCP servers run in a sandbox that belongs to this one conversation, behind permission prompts.
- State cachesThe KV and recurrent state of the last turn is still there for the next one, in memory or on disk, so a long conversation resumes instead of reading it all again.
- Draft and verifySmall drafters propose a tree of tokens. The big model checks the whole tree in one pass and keeps every guess it agrees with.
- MonitorWhile the model writes, the conductor reads along. It closes a reasoning loop, repairs a broken tool call and checks each call against its schema.
Projects
All projectsDeepSeek-V4.1-Flash on one DGX Spark
DeepSeek-V4.1-Flash is 510 GB on disk, and the machine I ran it on has 128 GB of memory. I kept the experts a workload uses in memory, as the checkpoint stores them, and read the rest from the NVMe when a token asked for one.
Inference Atlas
A public atlas of measured inference setups. Engine, version, quantization, flags and workload together decide a number, so each measurement is one JSON file that records all of them, and the repository is the database.
arbiter
Serves typed-decision models such as Laya, on their own or next to a language model. You hand it a text and a list of typed questions, and one forward pass answers all of them with a probability for each. It generates no text, so nothing needs parsing. On one GB10 a single question takes 20.9 ms over HTTP. It runs on NVIDIA GPUs and Apple Silicon and speaks a Jev-compatible API.
n-gram
N-gram language models from counting up to Kneser-Ney, in three parts that belong together: an article, a TypeScript implementation with 50 tests on the maths, and a browser explorer that trains on text you paste. Raise n and watch the generated text turn into quotation. Nothing leaves the page.
Writing
All writing- TandemLLMTandemLLM and StairCut
- DeepSeek-V4.1-Flash on one DGX SparkA 510 GB model on a 128 GB box, measured
- DeepSeek-V4.1-Flash on one DGX SparkLong answers find the experts I left out
- DeepSeek-V4.1-Flash on one DGX SparkTen profiles, one box, and what each one keeps
- DeepSeek-V4.1-Flash on one DGX SparkOne vote each is not one outcome each
- More articlesSeven ways to serve Qwen-Image-2.1
Research
StairCut: sizing speculative draft trees on a measured verification-cost staircase
Khaled Bakeer, 2026. Preprint, Zenodo. doi:10.5281/zenodo.23045275
Checking a draft tree does not get more expensive one token at a time. The cost climbs in steps, and the GPU kernel's tiles set where the steps are. StairCut measures that staircase once and cuts the tree every round to the size that pays the most tokens per millisecond.
About
I build TandemLLM and write up what I learn running big open models on a small machine, dead ends included.