Skip to content
Cloud Score Docs

Models, tiers, and scoring

How the Models registry, the 1–5 quality and latency priors, measured signals, and the cost, latency, and quality weights combine into the score that picks a model.

The Models page: a table of models with capabilities, context window, prices, quality and latency tiers, and an enable switch per row.
Models: the registry routing chooses from. Only enabled rows can be selected.
On this page

What it is

The Modelspage is the workspace's model registry: every model Cloud Score knows about per connected provider, with the facts routing needs. A request can only ever be routed to a model that is Enabled there. At the Select stage, Cloud Score scores the models that survived matching and policy filters on three axes, cost, latency, and quality, and the highest score wins. The rest are kept, in rank order, as failover backups.

Fact on the rowWhat routing does with it
EnabledOnly enabled models become candidates. Discovered models arrive disabled.
CapabilitiesA request competes only among models holding every capability it needs (vision, tools, json_mode, streaming).
ContextA model is dropped when its context window is smaller than the estimated input plus the expected output.
$/Mtok in and $/Mtok outList prices per million tokens; the Estimate stage prices each candidate with them, and the cost axis of the score uses that estimate.
Quality (prior) and Latency (prior)The 1–5 grades that feed the quality and latency axes of the score.
MeasuredWhat the router has observed about the model recently; it can only lower a score, never raise it.

Populating the registry

Each connected provider gets a Discover OpenAI models style button. Discovery inserts unseen models disabled and syncs prices, context, and capabilities, then reports for example Added 57 from LiteLLM (disabled — enable to route) · updated 57. Nothing routes until you switch a row on or use Enable selected or Enable all. See Enable models.

Tiers are priors, Measured is evidence

The Models page: a table of models with capabilities, context window, prices, quality and latency tiers, and an enable switch per row.
Models: the registry routing chooses from. Only enabled rows can be selected.

A tier is an opinion Cloud Score starts with, not a measurement. The column tooltips say so: Operator-set prior (price band at discovery). Not a measurement. and Operator-set prior. Not a measurement.

ColumnScaleWhere the value comes fromHow it changes
Quality (prior)1–5, 5 bestDiscovery derives it from the output price band: $10 or more per Mtok gives 5, $3 or more gives 4, $0.5 or more gives 3, $0.1 or more gives 2, anything lower gives 1.Edit it in Edit under Quality tier (1–5). Once edited, discovery never rewrites this row's tiers again.
Latency (prior)1–5, 5 fastestDiscovery derives it from the model key's name: nano gives 5; mini, haiku, or flash give 4; pro or opus give 2; anything else 3.Edit it under Latency tier (1–5). Same permanence rule.
MeasuredSample count and a total adjustment that is 0 or negativeCompleted requests in the last 7 days: provider health, measured reliability, and measured latency. The tooltip breaks the total into Δ health, Δ reliability, and Δ latency.Never editable. It never touches the tier; it only subtracts from the score.

Three things the Measured cell can show instead of a number, and none of them is zero:

  • learning with the sample count and the floor in brackets: fewer than 20 completed requests, so the model is exempt from every penalty. The tooltip reads Not penalised: still learning (12 of 20 samples). Cold start is inert by design — no delta is applied until the sample floor is reached. on the Routing signals tab of Optimization settings.
  • — with the tooltip No measured signal for this model yet: no completed requests in the stats window.
  • — for the whole column when the backend does not serve routing signals yet; the tooltip says it is unmeasured, not zero.
Health states, as shown in the Measured tooltip and in the Health column of Optimization settings › Routing signals
StateMeaning (the badge tooltip)Effect on the score
upLast health check passed. No penalty.None.
degradedA failed check, or p95 above 3× the window median. Small penalty.Half the health penalty.
downTwo consecutive failed checks. Penalised until one clean check.The full health penalty.
unknownNo checks yet, or the last check is stale (older than 3× the loop interval). Never penalised.None.

How a score is made

Filter

five gates remove candidates

Weights

default 0.4 / 0.2 / 0.4

Score

normalised within the field

Adjust

measured penalties, 0 or below

Affinity

+0.05 to last turn's model

Pick

highest wins; rest are backups

Filters first. Five gates run in a fixed order before anything is scored. The Select detail in Observability records how many candidates each gate removed.

Gate (as named in the trace)RemovesSet by
excluded_failoverModels already tried and failed on this request.The Execute stage, on a hard provider error.
allowed_providerEvery provider not on the policy allow-list. The last matching policy replaces the list.Policies.
denied_providerEvery provider on a policy deny-list. Denials from several policies add up.Policies.
model_overrideEverything except the pinned model. A caller's pin beats a policy's forced model.The caller, or Policies.
cost_capCandidates whose estimate is above the cap; the lower of the caller's and the policy's cap applies.The caller, or Policies.

Then the weights. The score is the cost weight times how cheap the model is, plus the latency weight times its latency grade, plus the quality weight times its quality grade. The built-in default is 0.4 cost, 0.2 latency, 0.4 quality. Workspace sliders under Admin › Organization, a policy's preferred tier, and the caller's own strategy or quality hint each override the one before; see Routing strategies.

Scores are relative.Each axis is normalised within the current candidate set: the cheapest candidate counts as 1.0 on cost and the priciest as 0, and the 1–5 tiers are stretched the same way. A model's score therefore changes whenever the field changes, after a filter, a failover, or a catalog edit. If every candidate ties on an axis, that axis stops discriminating.

Then two nudges. Learned routing adjustments subtract the measured penalties from the routing signals snapshot, each 0 or below and clamped at 0.30 in total; a model with fewer than 20 samples and any unknown health state are never penalised. An open cooldown can exclude a model, but an exclusion that would empty the field is suppressed and recorded instead. Finally, affinity adds a flat +0.05 to the model that answered the previous turn of the same conversation, within the affinity window of 300 seconds by default. It is a tie-breaker, never an override.

Routing adjustments observe by default

Routing adjustments ships in observe mode: the penalties are recorded on every request but not applied. They change selection only once the mechanism is set to auto on Optimization settings › Settingsand the decision's confidence clears the mechanism's minimum (0.7 by default). The Measured column on Models and the Routing signals tab show the observation either way.

The reference model

The score picks the model; the reference model is what that pick is compared against when Cloud Score reports what routing saved. It plays no part in scoring. The helper text under Reference model on Optimization settings › Settings reads: What every request is compared against for the savings ledger. "auto" = the cheapest model of the top quality tier among the request's candidates; the client's requested model always wins when it matches.

client

the caller's requested model, when it is among the candidates

workspace

the model chosen under Reference model

strongest

the cheapest model in the top quality tier of the field

The first that applies wins, and the source is recorded with the plan. Only enabled models are offered in the select, as gpt-4o — openai style entries, with auto first. Check a decision on the same tab shows the outcome for a pasted request as Reference followed by the model and its source, for example gpt-4o (workspace).

A caller that pins a model gets that model as the reference, so routing savings for that request are $0 by construction. Requests with no reference are still counted, but they are left out of the Savings waterfall on Optimizations.

In the product

Term or stageWhere you meet it
Enabled, Capabilities, Context, pricesModels, one row per model; the Provider filter scopes the toolbar counts and Enable all / Disable all to the rows in view.
Quality (prior), Latency (prior)Models columns; edited in the Edit dialog fields Quality tier (1–5) and Latency tier (1–5).
MeasuredModels column; the full breakdown is the Optimization settings › Routing signals table with Health, Samples, Penalty (the total over its health · reliability · latency parts, or Not penalised while learning), and Cooldown.
up / degraded / down / unknownThe Health column on Routing signals and the Measured tooltip. The counts above the table are Models tracked, Learning, Degraded or down, and Cooling down.
MatchThe Match station on the route board in Playground and Observability, for example 2 models: how many enabled models passed capabilities and context.
SelectThe Select station and, on the Playground, the decision summary under it in Details › Routing: the winner and its score. Its detail lists the filter gate counts and a reason such as selected gpt-5-mini (score 0.700).
WeightsAdmin › Organization for the workspace default; Policies for a preferred tier; Admin › Developer for the strategy cards, for example Balanced with 40% cost · 20% latency · 40% quality.
Routing adjustments and affinityOptimization settings › Settings, the Routing adjustments row and its mode; the affinity window is Legacy · affinity TTL fallback (s) under Show advanced settings.
Reference modelOptimization settings › Settings, the Reference model select and Check a decision; the Optimization decision card in Observability and Playground, whose Candidates table has a Δ vs selected column.
Provider health checksProviders: the health dots on each provider card are the checks the router's health signal is built from. The Connected, Error, and Disconnected badges report the same check on the page.

Switches act immediately

The row switch, Enable selected, Disable selected, Enable all, and Disable all have no confirmation. Disabling removes the model from the candidate pool at once and purges its cached responses; disabling the last enabled model makes every request fail with no_candidates. Running Discover OpenAI models again also disables enabled rows the catalog no longer lists.

Example

A routine summary of about 1,000 input tokens with 500 expected out. Three enabled models pass Match; no policy filters apply; the caller sends no strategy, so the built-in 0.4 / 0.2 / 0.4 weights are used.

Balanced weights 0.4 / 0.2 / 0.4. Cost and tiers are normalised within these three candidates.
CandidateEstimated costQuality (prior)Latency (prior)Cost termLatency termQuality termScore
gpt-5-mini$0.001250 (cheapest, 1.0)4/5 (0.5)4/5 (0.5)0.4000.1000.2000.700
claude-haiku-4-5$0.003500 (0.55)3/5 (0)5/5 (1.0)0.2200.2000.0000.420
gpt-5$0.006250 (priciest, 0)5/5 (1.0)3/5 (0)0.0000.0000.4000.400

Same three candidates, three strategies

What you do

Send the prompt from Playground with Routing on auto, then again on latency, then on intelligence.

What Cloud Score does

Scores the same normalised axes with different weights: 0.4 / 0.2 / 0.4, then 0.1 / 0.7 / 0.2, then 0.1 / 0.2 / 0.7. Filters, policies, and budgets are unchanged.

What you see

The decision summary in Details › Routing names gpt-5-mini at 0.700 the first time, with the trace reason selected gpt-5-mini (score 0.700); claude-haiku-4-5 at 0.755 the second; gpt-5 at 0.700 the third. Under Optimization decision, the Candidatestable shows each alternative's Δ vs selected.

If gpt-5-mini were down and Routing adjustments were in auto, its health penalty would come off the 0.700 before the pick. In observe mode the same penalty is written to the trace and the Routing signals tab, and gpt-5-mini still wins.

Related