mcpField
T
tinker

tinker

github.com/sundial-orgDevelopment15369 installsUpdated 15w ago
Repository

About tinker

Tinker is a large language model training API from Thinking Machines Lab for developers and researchers building fine-tuning or custom training workflows. It offers both high-level cookbook patterns and a low-level API for supervised fine-tuning, reinforcement learning, and LoRA.

Key features

  1. 01Supervised fine-tuning and reinforcement learning
  2. 02Parameter-efficient LoRA training
  3. 03High-level cookbook training loops
  4. 04Low-level API for custom training logic
  5. 05Training with multimodal models

Use cases

  1. 01Fine-tune on instruction and completion data
  2. 02Build reinforcement learning workflows
  3. 03Implement custom model training loops
  4. 04Train vision- or audio-capable models

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/sundial-org/skills --skill tinker

After installing, type/tinkerin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
api-reference.md
getting-started.md
inkling.md
loss-functions.md
models-and-lora.md
recipes.md
reinforcement-learning.md
rendering.md
supervised-learning.md

Details

From the project README

Tinker API - LLM Fine-Tuning

Overview

Tinker is a training API for large language models from Thinking Machines Lab. It provides:

  • Supervised Fine-Tuning (SFT): Train models on instruction/completion pairs
  • Reinforcement Learning (RL): PPO and policy gradient losses; cookbook patterns include GRPO-like group rollouts/advantage centering
  • Multimodal Models: vision via Qwen3.5/3.6 and Kimi K2.x; vision + audio via Inkling
  • Inkling: Thinking Machines' own open-weights MoE model (975B/41B active, released July 2026) with text/image/audio inputs and tunable thinking effort
  • LoRA Training: Efficient parameter-efficient fine-tuning

Two abstraction levels:

  • Tinker Cookbook: High-level patterns with automatic training loops
  • Low-Level API: Manual control for custom training logic

Quick Reference

TopicReference
Setup & Core ConceptsGetting Started
API Classes & TypesAPI Reference
Supervised LearningSupervised Learning
RL TrainingReinforcement Learning
Loss FunctionsLoss Functions
Chat TemplatesRendering
Models & LoRAModels & LoRA
Inkling (multimodal, thinking effort)Inkling
Example ScriptsRecipes

Installation

pip install tinker tinker-cookbook
export TINKER_API_KEY=your_api_key_here

Minimal Example

import numpy as np
import tinker
from tinker import types

# Create clients
service_client = tinker.ServiceClient()
training_client = service_client.create_lora_training_client(
    base_model="Qwen/Qwen3.6-35B-A3B", rank=32
)
tokenizer = training_client.get_tokenizer()

# Prepare data
prompt = "English: hello\nPig Latin:"
completion = " ello-hay\n"
prompt_tokens = tokenizer.encode(prompt, add_special_tokens=True)
completion_tokens = tokenizer.encode(completion, add_special_tokens=False)
tokens = prompt_tokens + completion_tokens
weights = np.array(([0] * len(prompt_tokens)) + ([1] * len(completion_tokens)), dtype=np.float32)
target_tokens = np.array(tokens[1:], dtype=np.int64)

datum = types.Datum(
    model_input=types.ModelInput.from_ints(tokens=tokens[:-1]),
    loss_fn_inputs={
        "target_tokens": target_tokens,
        "weights": weights[1:]
    }
)

# Train
fwdbwd = training_client.forward_backward([datum], "cross_entropy")
optim = training_client.optim_step(types.AdamParams(learning_rate=1e-4))
fwdbwd.result(); optim.result()

# Sample
sampling_client = training_client.save_weights_and_get_sampling_client(name="v1")
result = sampling_client.sample(
    prompt=types.ModelInput.from_ints(tokens=tokenizer.encode("English: world\nPig Latin:", add_special_tokens=True)),
    sampling_params=types.SamplingParams(max_tokens=20),
    num_samples=1
).result()
print(tokenizer.decode(result.sequences[0].tokens))

Common Imports

# Low-level API
import tinker
from tinker import types
from tinker.types import Datum, ModelInput, TensorData, AdamParams, SamplingParams

# Cookbook (high-level)
import chz
import asyncio
from tinker_cookbook.supervised import train
from tinker_cookbook.supervised.types import ChatDatasetBuilder, ChatDatasetBuilderCommonConfig
from tinker_cookbook.supervised.data import (
    SupervisedDatasetFromHFDataset,
    StreamingSupervisedDatasetFromHFDataset,
    FromConversationFileBuilder,
    conversation_to_datum,
)
from tinker_cookbook.renderers import get_renderer, TrainOnWhat
from tinker_cookbook.model_info import get_recommended_renderer_name
from tinker_cookbook.tokenizer_utils import get_tokenizer

When to Use What

ScenarioApproach
Standard SFT with HF/JSONL dataCookbook ChatDatasetBuilder + tinker_cookbook.supervised.train.main()
Custom preprocessingCustom SupervisedDataset class
Large datasets (>1M)StreamingSupervisedDatasetFromHFDataset
RL / GRPOCookbook RL patterns
Research / custom loopsLow-level forward_backward() + optim_step()
Vision-languageInkling or Qwen3.5/3.6 vision models
Audio / thinking-effort controlInkling + tml-renderers (Inkling)

External Resources

Comments

Markdown supported