> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tuneplane.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Register and promote a model

> A named version line across runs: which model is in production, and which run produced it.

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
tp export run-4f2a91
tp model register alice/support-agent --run run-4f2a91 --notes "kl 0.01, 500 steps"
tp model promote alice/support-agent 3
tp model ls
```

A run id is a fact about an experiment. A model version is a decision: this is the one we are
willing to serve. Registering turns the first into the second.

Without it, "which model is in production" and "which run produced the previous version, and who
promoted it when" are answerable only by somebody who remembers a run id.

## Register a version

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
tp model register alice/support-agent --run run-4f2a91 --notes "new data mix"
```

Version numbers increment on their own; there is no naming step. The run has to have been
exported first, which `--then export` at submission does for you.

Base models and externally supplied weights belong on the line too, or the first entry is
missing:

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
tp model register alice/support-agent --path /shared/models/qwen-base \
  --notes "base model" --desc "Customer support assistant"
```

`--desc` is the model's description and belongs on the first registration.

## Read and move the line

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
tp model ls                          # every model, and which version each runs
tp model ls alice/support-agent      # the full version line for one model
tp model promote alice/support-agent 3
tp model archive alice/support-agent 2
tp model card alice/support-agent    # the acceptance card
```

Promoting a version archives the previous production one. There is exactly one production
version at a time; with two, the reason this line exists is gone.

Versions are immutable. A version pins a run id and a weight path, so changing weights means
registering a new version. If a version a deployment already references could change content,
"which version is live" would stop being answerable.

## Point a deployment at the line

Use the model registry as a deployment's source and leave the version empty to
select the current production version when creating a deployment revision:

```json theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
{ "kind": "model", "model": "alice/support-agent" }
```

Each deployment revision pins the version it resolved. After `tp model promote`,
create a new deployment revision from the same source to serve the newly promoted
model. Select a particular version explicitly with `"version": 3`.

## Three things called version

They do not overlap, and it is worth keeping them apart:

| Concept | Attached to | Answers |
| - | - | - |
| Artifact | One run | What this training run produced |
| **Model version** | One named model | Which models we have, and which version each is on |
| Deployment revision | One deployment | What configuration this live service is running |

Canary and rollback belong to the deployment revision layer. The registry does not duplicate
them: two places able to express "which one is running" would fork immediately.

## Choose the project's release policy

In **Projects → Settings → Release policy**, choose **Require passing evaluation**
to require evidence before production promotion or deployment. Existing projects
default to **Flexible experiments**.

Strict release requires a successful training run with declared evaluation suites
and gates, a completed benchmark of the selected export, and passing scores. A
relative gate also needs baseline scores under matching benchmark configuration.
Missing, pending, failed or stale evidence blocks release for everyone, including
administrators. The refusal explains what needs to be completed.

The training project follows its artifact into the model registry. A Deployment
also keeps its project for its lifetime; changing revisions or rolling back cannot
drop that requirement. A replacement candidate is checked again before launch or
traffic promotion. An already serving revision keeps serving after a policy change.

For external weights, name the project explicitly:

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
tp model register alice/support-agent --path /shared/models/qwen-base \
  --project @alice/support
```

External weights can be catalogued, but cannot satisfy strict release without
verified training and evaluation evidence. Leaving an external model unbound does
not apply a project policy to it. This setting is not a deployment-wide restriction
on all external models.

Models awaiting evaluation can still be registered as drafts. The legacy check
for an explicitly failed evaluation still applies at registration. Disabling a
strict requirement is a separate project-management action recorded in the audit;
there is no automatic administrator exception to strict release.

## Flexible experiments

In flexible mode, an explicitly failed evaluation blocks ordinary artifact registration
and deployment. Pending or absent evaluation does not. Administrators retain the
existing override in this mode.

Every version on the line carries the verdict from its training run. A number on a version line
with no evaluation behind it is just a path.

## Check it worked

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
tp model ls alice/support-agent
```

The new version appears with its run id and notes, and exactly one row is marked production.

## Next

[Deploy a version](https://docs.tuneplane.ai/en/guides/deployments.md) · [Playground](https://docs.tuneplane.ai/en/guides/playground.md) ·
[Reflow](https://docs.tuneplane.ai/en/guides/reflow.md) · [The Models page](https://docs.tuneplane.ai/en/console/models.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.