Registering a model credential and choosing your tiers
How to register a model provider, activate it, choose your cheap and strong tiers, and set a spend ceiling per billing period.
Before your assistant can answer a single question, it needs a registered, activated model credential. This screen is where that happens — and where you set the two tiers every turn routes between.
1. Register a credential
Open City → Assistant models and click "Register." Choose a provider (OpenAI, Azure OpenAI, Anthropic, Bedrock, Vertex, or a local OpenAI-compatible endpoint), name your cheap and strong tier model IDs, and give the name of a vault entry holding the actual credential — never the credential itself.
Registering lands the row as Unverified. That's not an error state — it's the honest one. The platform hasn't read your vault yet, so it hasn't confirmed the material behind that name actually exists.
2. Activate it
Click "Activate" on the row. This is the moment the vault is actually read: the worker fetches the credential, computes a fingerprint, and flips the row to Active. Only Active credentials are ever used to answer a turn — a credential has to be used to become active, and has to be active to be used, which is exactly the loop activation exists to break.
There is no field on this screen, or on the underlying type, that can ever show you the credential's value again — not a fingerprint you could reverse, a masked string, or a "reveal" button at any privilege level. What comes back is a fingerprint and a last-used timestamp, full stop.
3. Set your cheap and strong tiers
Every resident turn routes to one of these two model IDs. They move together in one form (repointTiers), deliberately: picking a cheap model from one vendor's family and a strong model from another's is easy to do by accident with two separate fields, and would leave your city half-migrated without ever showing that it happened.
4. Add optional models as you need them
Embedding, translation, extraction, reranker — each is independently optional, and each has its own honestly-rendered "not set" state rather than a blank cell. An unset reranker means your city genuinely doesn't rerank; an unset translation model means turns fall back to the strong tier for translation, not that something is broken.
5. Set a spend ceiling per billing period
Under "Spend against ceiling," pick a period (e.g. 2026-10) and a maximum. The table shows consumed and reserved spend against it in real time, and raises a visible alert once a period is close to its limit — before it's exceeded, not after.