All articles

CLM, explained — decisions as a contrastive lookup

Contrastive Language Models do not classify. They embed the state and every candidate action and pick by similarity, which is why a decision can cost 28 milliseconds and why the heads are 75 MB.

Most System One models turn a decision into a classification: score the options, softmax, done. CLM, from the Contrastive-LM group (Jacky Kwok, with co-authors including Pavone, Ré and Mirhoseini), turns it into retrieval. It was released on 23 September 2026 with its data recipe and a scaling-law study.

Two heads, one frozen model

CLM v0.1-8B takes Qwen3-8B, freezes it, and uses it only to embed text. On top sit two projection heads: one for states, one for actions. They are trained with InfoNCE — the contrastive objective behind CLIP — on roughly 60M question–answer pairs, 30M hard negatives and 1M agent trajectories, so that a state's embedding lands near the embeddings of the actions that were right for it.

A decision is then a similarity search: embed the state once, embed each candidate, take the softmax over the similarities. The whole learned part is about 75 MB; everything else is the frozen encoder, which you fetch from Qwen and run behind a vLLM pooling server on Linux with an NVIDIA GPU.

What that buys

  • Speed on repeated states. Candidate embeddings can be cached; a new state costs one embedding, about 28 ms on an RTX 4090 by the README's measurement. The authors claim up to 9× lower latency than Jev.
  • Ranking for free. Because every candidate gets a similarity, clm-serve exposes /v1/rank next to /v1/systemone, and Choice, Score and Noul are all mapped onto candidate ranking.
  • Cheap adaptation. Fine-tuning means training two small heads, not a backbone.

Confidence is defined as the top probability minus the mean of the rest, and states are rendered as prose rather than JSON before embedding.

The claims, as claims

The authors report parity with Jev on computer-use, gaming and tool-calling benchmarks and, after fine-tuning the heads, 87.6% on Terminal-Bench 2.1 and 81.6% on DeepSWE. None of these have been reproduced independently at the time of writing, and the registry lists them as reported, not measured. A multimodal CLM-35B is announced for early October.

Running it

pip install systemonemodels
systemone pull contrastive-lm/clm

That fetches the heads and config (Apache-2.0); the Qwen3-8B encoder and clm-serve come from the CLM repository. CLM's page records its capabilities, which include rank, and links the paper and code.

If your candidate sets are large and change often — tools, documents, actions in an agent loop — the contrastive shape is the one to try first. If you need a small model on a CPU, Laya or GLiNER2.5-Decide will serve you better.