Skip to main content
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 right now?” and “which run produced the previous version, and who promoted it when?” are answerable only by somebody who remembers a run id. The registry turns “I ran 300 jobs” into “we have 5 models in use”.

Three kinds of version, three jobs

A platform ends up with three things called “version”. They do not overlap: Canary and rollback live at the deployment revision layer; the registry does not duplicate them — two places able to express “which one is running” would fork immediately.

Using it

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

Deployments follow the registry

Pick “model registry” as a deployment’s source and leave the version empty to follow production:
Swapping models then only takes sf model promote — the deployment never needs to know which training run is behind it. Pin a specific one with "version": 3.

Relationship to the evaluation gate

Registering a version requires that the training run passed its evaluation gate (when one was declared). The registry is an asset catalogue; entering a run that explicitly fell short makes the gate’s verdict pointless. Admins can override (audited). Every version on the line carries the verdict from its training run — a number on a version line without an evaluation behind it is just a path.
Versions are immutable: a version pins a run id and a weight path. To change weights, register a new version. If a version already referenced by a deployment could change content, “which version is live” would stop being an answerable question.Exactly one production version at a time: promoting a new one archives the previous. With two marked production, the reason this table exists is gone.