How do you train and use your own model?
You can train a model on what your workspace has done, switch it on for a small share of requests, and switch it off again. A run trains the model and records it. Before you switch it on, you can ask for a comparison with the model you use now; it is advice, not a condition. A person makes each switch decision, and each one is recorded.
What happens when you train?
Training starts from your recorded work. The run exports it, trains with the training service, then checks the model on examples it wasn't trained on. It passes only if it predicts them better than the model it started from, by the margin the server sets; otherwise it is not validated and can't be switched on. That is not a comparison with the model you use now. Before you switch it on you can ask for one, which is advice and not a test, and you can judge it yourself on a small share of requests.
POST /api/v1/cadreen/training/startGET /api/v1/cadreen/training/jobs/{id}Training is off on a server that has no key for the training service. The start route says so instead of queuing a run that can't go anywhere.
Can you try a small version first?
Yes. A first taste trains a small model on as much of your data as fits under a $0.50 ceiling for the training, so you can talk to it before you pay for the full size. The ceiling is for the training only; talking to the taste is charged separately, at what each message shows. A taste is made on the sft recipe, from one workspace, with no made-up examples, and not from checked questions: the start refuses anything else with a sentence and starts nothing.
POST /api/v1/cadreen/training/start
{ "recipe_type": "sft", "taste": true }POST /api/v1/cadreen/training/jobs/{id}/try
{ "message": "How do I ask for a refund?" }A taste takes 20 messages in all, each at most 2,000 characters. When you are happy, the full size is its own run, and the full size needs the taste to have finished (until it has a trained model the request is refused with 409 taste_not_finished). It uses all of your data and asks for its own approval before anything is sent.
POST /api/v1/cadreen/training/jobs/{id}/full-sizeHow do you switch a model on?
Choose the job it should do and the share of this workspace's requests it gets. The rest keep using what does the job now. Only a workspace admin or the owner, signed in as a person, can do this. An API key can't.
POST /api/v1/cadreen/training/jobs/{id}/deploy
{ "role": "executor", "share_pct": 5 }To skip the choice, one request switches the model on for a tenth of the requests for one job (the executor unless you name another role), and says so in words:
POST /api/v1/cadreen/training/jobs/{id}/use
{}The share is a whole number from 1 to 100. A request is placed by its id, so every step of one request goes the same way, and raising the share keeps every request the smaller share had. If the model fails, the request goes on to the model that did the job before.
The answer says where the model is in use. The job's own answer says it too, under serving, and says serving_unknown when that couldn't be read, so you never see “not in use” for something that couldn't be checked.
409 gate_not_passed: the model hasn't passed its checks.409 no_serving_model: the model has no copy at the training provider that requests can be sent to, so there is nothing to switch on yet. Nothing was changed.
What does a training run cost?
A run is charged to your Cadreen balance for what it used, when it ends. Before anything is sent, the approval step shows the most the run could cost, and a run is never charged more than that.
What is counted: the tokens the run trains on, and the held-out examples used to check the result. A run that fails, is cancelled or is abandoned is charged for what ran, and says so: "This run stopped after 1,200 of 3,000 steps. It made no model, but it still used compute, so you were charged for what ran: $1.84." A run that used nothing is not charged.
What is not charged yet: checkpoint storage and the sampling a trained model does when it answers. If a run reached the training service and what it used wasn't recorded, you aren't charged and Cadreen is told.
How do you switch it off?
Say why. The reason is kept with who did it and when, and requests go back to what served the job before the model. Raising a model's share and then switching it off still goes back to what was there before the model, not to its earlier share.
POST /api/v1/cadreen/training/jobs/{id}/take-down
{ "role": "executor", "reason": "Answers got worse on refunds" }Can you download the weights?
Yes, when Cadreen holds them: a run saves its weights in Cadreen's storage when it finishes. A workspace admin or the owner, signed in as a person, can download the archive the run made:
GET /api/v1/cadreen/training/artifacts/{id}/download?acknowledge_licence={licence_id}Before any weights are sent, the admin confirms that we may take them outside Cadreen under the base model's licence and the rights of the data they were trained on. The licence and its licence_id are on GET /api/v1/cadreen/training/artifacts/{id}; a download without the current licence_id is refused with 428 licence_not_acknowledged, and the confirmation is recorded with who made it and when.
The answer carries the licence of the base model the weights were trained from, in X-Model-Licence, and the hash the run recorded, in X-Content-SHA256. Their terms still apply to the weights. Each download is recorded. The artifact answer never says where the file is kept on the server.
A model that only the training provider holds has no weights here: the answer is 409 not_downloadable.
What is not verified yet?
Switching a trained model on works like this. Once a run passes its checks, a workspace admin or the owner, signed in as a person, can switch the model on for a share of requests for one job. Before that they can ask for a comparison: Cadreen asks your model and the model you use now the same 30 questions your model wasn't trained on, and a third model, chosen by the platform, says whose answer is closer to the answer in your data. The page shows the most it can cost before it runs, and your workspace pays for what it uses like any model call. It is advice from one model on 30 questions, never a condition of switching on, and it isn't offered for choosing tools.
The training service deletes trained weights 7 days after a run unless their expiry is removed. When you switch a model on, Cadreen asks it to remove it. If that fails, the model stays on, the page says the weights may expire and when, and Cadreen keeps trying; if it is still failing after an hour, the platform's operators are alerted. When the last use of a model is switched off, the expiry is given back.
If a model that is switched on keeps failing, Cadreen pauses it by itself: when, among its last 50 requests over the past half hour that it was asked to answer, at least 10 were judged and a fifth or more ended in an error from the trained model. A request the trained model was never asked to answer, because the training service was unreachable, its key was off or its account was out of credit, counts for nothing either way. Requests go to the model this job uses without a trained model, the model stays saved with its weights kept, and the job's page says what happened and when Cadreen will try it again. After five minutes, then ten, then longer up to an hour, Cadreen tries it on a few requests, one at a time, and puts it back at the share you set after five good answers in a row. A single failure during a try pauses it again. After five pauses in a day Cadreen stops retrying and says so; switch it on again to try it. If the training service itself has an outage, every trained model pauses and comes back by itself once it is back.
None of this has been tried against the training service itself yet. It is built and tested against stand-ins: that a real trained model answers in chat, that removing and restoring the expiry works on a real checkpoint, and how expired weights answer. Switching on is refused when no key for the training service has been saved for the platform. You can still download the trained weights.
Calls that use tools, sent to a model on the training service, are built and tested against a stand-in server, not against the training service itself: its documentation doesn't describe tool calls on that endpoint. Chat and streaming follow the training service's documented interface. There is no key test for it, because it publishes no endpoint to test a key with.