Skip to content

lm15 2.3.0 for R

Choose a tag to compare

@MaximeRivest MaximeRivest released this 10 Nov 02:28

In R: new_router(base_models = list("tinker://..." = "Qwen/Qwen3.5-4B")) (also new_lm(base_models = )), then "tinker:tinker://..." as the model.

Tinker (Thinking Machines): base models and the models you trained there (lm15-contract 18b3788; 2,266 of 2,266 checks, the same in every lm15 language; the new rules MAP-21, MAP-22 and MAP-23 are decided and wait for ratification).

  • Two new providers, one key (TINKER_API_KEY). tinker speaks Chat Completions (also spelled thinkingmachines); tinker-anthropic speaks the Anthropic Messages wire. Both serve Tinker's base models (tinker:Qwen/Qwen3.5-4B) and any sampler checkpoint by its path.
  • A URI is one model name. tinker://<run>:train:0/sampler_weights/<n> routes to Tinker whole. Before, any name://… string was read as provider name with model //….
  • Reasoning is switched the way each model family takes it. On tinker, Qwen 3/3.5/3.6, Kimi K2.6 and Nemotron take an on/off switch (an effort word turns reasoning on, and the substitution is recorded); Inkling takes the effort words. A checkpoint follows the family of the model it was trained from when you name that model (the line above). Listing models on tinker shows your checkpoints as fine-tunes with their base model.
  • Error messages from FastAPI servers are kept. An error body that is {"detail": "…"} used to raise with an empty message on every OpenAI-family and Anthropic-family adapter; the detail is now the message (MAP-21).
  • stop means the same everywhere. Tinker returns the stop sequence it stopped at; lm15 cuts it off (MAP-22).
  • New compat values: thinking format reasoning_effort_switch, reasoning off switch, JSON schema none (a server that applies no response_format: dropped with a record), and stop_in_text. Registry entries may carry aliases.
  • Known, not changed in this release: the reader for a Chat Completions response body that did not come through lm15 (response_from_openai_chat in Python; the same door under each language's spelling) is given no request, so a Tinker body that stopped at a stop sequence keeps the sequence at its end. Ordinary calls and streams cut it. On the Messages door, Tinker itself refuses reasoning off and effort words for the on/off families; use tinker for those.

Nothing is removed and no field changes meaning. Tinker calls both of its doors beta.