Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content
Train adapters

Training

Mubit trains an adapter version for a task on its own, once the task has enough kept examples. This page says when that happens, what a version is built on, and what can make a task wait. It is for developers following a task in the console.

When the first version trains

A task trains its first version when both of these hold:

  • it has at least 25 kept examples, calls rated good (see Tasks and ratings);
  • it has enough of them to keep at least 12 back for the version's exam and still train on the rest.

So a task whose conversations are one call each starts at about 28 kept examples. A task whose conversations have several calls needs more, because Mubit keeps whole conversations back for the exam. Until then, the task's status reads Collecting examples, or Waiting for more examples: {k} of {need} once it has 25.

At least 10 of the examples it trains on, and at least 30% of them, must have a reply that isn't empty. A task short of that waits too.

What happens in a training

The task's status shows each stage:

  1. Reviewing examples: Mubit builds the training set from the kept examples, at most 250, spread across conversations, newest first. It keeps the exam's conversations out of it.
  2. Training: the training job runs. It waits in a queue first when other trainings are running.
  3. Testing: Mubit runs the exam. See The exam.

The new version then shows on the adapter's page, under History, with its test result.

The base model

An adapter is a small set of weights trained on top of an open base model. Today Mubit trains every adapter on Qwen/Qwen3-4B-Instruct-2507. The adapter's page shows its base model.

A kept example longer than 256 KiB is left out of training. So is a kept example whose reply states a figure, such as a number or an amount, that its request doesn't hold: the adapter would learn to make figures up. The exam leaves such examples out too. When the task's examples are too long to train on, the task's page says examples too long to train on.

Shared limits

Training runs on capacity that every organization in your workspace shares:

  • a few trainings run at a time, and the rest wait in the queue;
  • the workspace has a daily training budget, and a training that doesn't fit in today's waits for the next day. When a task waits on the day's limit, its status reads Waiting: today's training limit, and training starts after 00:00 UTC.

The console doesn't show how much of the budget is left. A task waiting on it needs nothing from you.

New versions

After a version, the task keeps collecting kept examples. A new version trains once the task has enough new ones, at least 25 and at least half as many as the live version trained on, and at least a day after the task's last training. The adapter's page shows how many it waits for: Next: a new version after {need} new examples.

  • While a version of the task is in a silent test or a partial rollout, no new version trains. See The rollout.
  • A new version sits the same exam as the version before it, with the conversations each new training keeps back added to it. So the results of two versions compare like for like.
  • When versions stop improving, the task pauses its retraining, and the adapter's page says Next: retraining paused: {reason}. The pause lifts when you start a training yourself, or when the task's kept examples double.

When a training fails

When a task's first training fails, its status reads Can't train, and its page says why after No adapter yet:. Mubit tries the first training again a day after a failure. Sending new calls of the task gives that training more to work with. Troubleshooting lists each reason.

Start a training yourself

An admin can start a task's training now, without waiting for the day since its last training. The task still needs its kept examples: 25 and enough for the exam for a first version, or the new-example count above for a new one.

Python
from mubit import Mubit
 
client = Mubit()
 
job = client.tasks.train("<task id>", reason="new examples from the support backlog")
print(job["job"]["status"])

The answer is 202 with the training job: queued with its ID, or preparing while Mubit still builds the training set. Send "dry_run": true to see whether the task would train, and with how many examples, without starting a training.

Mubit refuses the training with 409 when the task has too few kept examples, when a training of the task is still running, or when a version of the task is still in its rollout.

ℹ️Note

The training still counts against the workspace's daily limit, and it waits in the same queue.

Next