This site compiles a loop. Tinker trains it. The contract is three inputs, four primitives, and a Python file that never contains your key.
Contract
Training signal × task × base model → sample, forward_backward, optim_step, save_state.
The builder is a compiler, not a trainer. Tinker is the training API. Official Tinker docs live at tinker-docs.thinkingmachines.ai.
01 / Training signal
How you score an output. The compiler maps that onto a Tinker loss. A verifier returns a reward. That is not the same thing as a learned reward model.
SignalYou bringLossLoop
Verifiable outcome · Environment RLA verifier — Lean, pytest, compiler, retrieval set.Importance SamplingSample ➔ Reward (0/1) ➔ Backward ➔ Step
Preference pairs · Pairwise preferencePreferred / rejected pairs from real traces.Pairwise preference · also install torchPreferred ↑ / Rejected ↓ ➔ Preference loss ➔ Step
Demonstrations · Self-distillation (SDFT)Expert demonstrations you want to keep.Cross-Entropy (SDFT)Sample rewrite ➔ Cross-Entropy ➔ Step
02 / Task
The task remaps the same reward onto different traces. The algorithm does not change.
Trajectory desk
Specialized Tool Agents
The reward lands on the path: legal tool calls, cited documents, token thrift. Not the essay.
Mapping verification logic directly onto tool execution traces.Out-of-sample desk
Calibrated Forecasting
The reward lands on a probability. Calibration is the product — temporally honest, out of sample.
Mapping verification logic directly onto out-of-sample forecasts.Proof desk
Formal Reasoning Engines
The reward lands on a kernel. Lean, unit tests, compiler. Binary and checkable.
Mapping verification logic directly onto proofs and compiler traces.03 / Base model
One string. Tinker hosts the GPUs. The compiler writes BASE_MODEL and a LoRA rank.
Base modelTinker idArchActive
Qwen3.5-4BQwen/Qwen3.5-4Bdense4B dense
Qwen3-8BQwen/Qwen3-8Bdense8B dense
Qwen3.5-9BQwen/Qwen3.5-9Bdense9B dense + vision
Nemotron-3-Nanonvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16moe30B-A3B
Qwen3.6-35B-A3BQwen/Qwen3.6-35B-A3Bmoe35B-A3B + vision
DeepSeek-V3.1deepseek-ai/DeepSeek-V3.1moelarge MoE
Output
sample → forward_backward → optim_step → save_state
Every download calls those four Tinker primitives. Knobs on the builder: LoRA rank 16 / 32 / 64 and 20 / 50 / 100 steps. Defaults: r=32, 50 steps. The script reads TINKER_API_KEY from the environment. Preference / DPO loops also need uv pip install tinker torch — Tinker’s custom loss runs in PyTorch. The environment and SDFT downloads only need tinker. GET /api/tinker/status reports whether this host can list a live catalog. It never prints server-key errors.
POST /api/compile
Same file the builder downloads
JSON body. Field names match the builder URL, and the older API names still work. Unknown ids or knobs outside the allow-list return 400 with a stable message — not a raw exception.
{
"reward": "environment" | "dpo" | "sdft",
"job": "tool-agents" | "forecasting" | "formal-reasoning",
"model": "<catalog model id>",
"knobs": { "loraRank": 16 | 32 | 64, "steps": 20 | 50 | 100 }
}Aliases: rewardId, objectiveId, modelId. Omit knobs to get LoRA rank 32 and 50 steps. URL query on the builder: ?reward=&job=&model=&rank=&steps=.
Open the builder · Cookbook · Models