Skip to content

feat(models): show the UVT cap on locked rows, not just usable ones - #67

Merged
AetherAI3 merged 1 commit into
mainfrom
feat/uvt-cap-on-locked-rows
Aug 14, 2026
Merged

feat(models): show the UVT cap on locked rows, not just usable ones#67
AetherAI3 merged 1 commit into
mainfrom
feat/uvt-cap-on-locked-rows

Conversation

@AetherAI3

Copy link
Copy Markdown
Owner

A locked row in aether models answered "what unlocks it" and not "what you get for unlocking it" — so the one number that argues for upgrading was missing from the only row where the upgrade decision happens.

before   opus   1M   needs pro
after    opus   1M   needs pro · cap 60k

Why it was missing

monthly_uvt_cap answers for the caller's tier. On a locked row it is null by construction — the caller's tier doesn't include the model, so it has no cap on it. The renderer then fell back to showing the gate alone.

The server-side companion adds unlock_uvt_cap: the ceiling the model carries on tier_min. This PR reads it and renders both.

Compatibility

unlock_uvt_cap is optional on CatalogItem, so an older server that doesn't send it degrades to exactly the previous output rather than printing cap undefined. Available rows are untouched and still show the caller's own cap.

Verification

  • tsc --noEmit clean
  • model_picker suite: 14 pass, 0 fail
  • npm test exits 0

Depends on

The AETHER-CLOUD change that emits unlock_uvt_cap from lib/model_catalog.py. This PR is safe to merge first — without the field, output is unchanged from today.

A locked row answered "what unlocks it" and not "what you get for unlocking
it" — so the one number that argues for upgrading was missing from the only
row where the upgrade decision happens.

The cause is that `monthly_uvt_cap` answers for the CALLER's tier. On a locked
row that is null by construction: the caller's tier does not include the model,
so it has no cap on it. The renderer then fell back to showing only the gate.

Server-side companion adds `unlock_uvt_cap` — the ceiling the model carries on
`tier_min`. This reads it and renders both, joined by a separator:

  before   opus   1M   needs pro
  after    opus   1M   needs pro · cap 60k

Available rows are unchanged and still show the caller's own cap.

The field is optional on CatalogItem so an older server that does not send it
degrades to exactly the previous output rather than rendering "cap undefined".

tsc clean; model_picker suite 14 pass.
@AetherAI3
AetherAI3 merged commit 0b2fd6c into main Aug 14, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant