Docs

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.

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

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.

One string. Tinker hosts the GPUs. The compiler writes BASE_MODEL and a LoRA rank.

Base modelTinker idArchActive
Inklingthinkingmachines/Inklingmoe975B-A41B
Inkling-Smallthinkingmachines/Inkling-Smallmoe276B-A12B
Qwen3.5-4BQwen/Qwen3.5-4Bdense4B dense
Qwen3-8BQwen/Qwen3-8Bdense8B dense
Qwen3.5-9BQwen/Qwen3.5-9Bdense9B dense + vision
Qwen3.8-27BQwen/Qwen3.8-27Bdense27B dense + vision
Nemotron-3.5-Lightningnvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16moe30B-A3B
Nemotron-3-Nanonvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16moe30B-A3B
Qwen3.6-35B-A3BQwen/Qwen3.6-35B-A3Bmoe35B-A3B + vision
GPT-OSS-20Bopenai/gpt-oss-20bmoe21B-A3.6B
GPT-OSS-120Bopenai/gpt-oss-120bmoe117B-A5B
GLM-5.3zai-org/GLM-5.3:peft:262144moe753B-A40B
Kimi-K2.6moonshotai/Kimi-K2.6moe1T-A32B
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

Docs — Reinforcement: Build Your Own Reward Model