Add, update, or remove text/image/video models. Handles any provider.
Use this workflow for every model change. Keep the implementation minimal, preserve the public contract unless the user explicitly approves a change, and prove provider behavior with real requests.
AGENTS.md.temp/manage_inference.mdtemp/manage_inferenceport.mdtemp/manage_gpus.mdtemp/manage_azure_limits.mdThe temp plans are ignored operational state, not repository truth. When working in a linked worktree where they are absent, locate the primary checkout with git worktree list and read them there. Never copy balances, prices, PR statuses, quotas, or candidate rankings into this skill.
Read operating-policy.md before recommending a route or model. Read only the other references needed for the task:
| Task | Required references |
|---|---|
| Find code or run locally | repository-and-local-testing.md |
| Add, update, reroute, rename, or remove | change-and-test-matrix.md |
| New model, provider, model ID, or price | billing-verification.md |
Apply this gate only to a proposed tracked model mutation. Do not turn a read-only status confirmation, an approval of an already-documented planning decision, or a correction of an operational fact into a different mutation. Treat a generic βconfirmβ as approval only for the exact contract just shown.
Do not edit any model until the user confirms its complete business and inference contract. Inspect the code and provider first; do not ask the user to discover values for you.
Show one complete row per model:
| Field | Required value |
|---|---|
| Canonical name | Public model ID after the change |
| Aliases | Every compatibility alias, or none |
priceMultiplier |
Exact multiplier after provider cost |
paidOnly |
Whether purchased pack balance is required |
| Pollinations GPU | yes only if Pollinations operates the production hardware |
| Registry provider | Configured primary provider |
| Primary route | Provider, deployment/host, and exact upstream model ID |
| Best fallback candidate | Provider, deployment/host, exact upstream model ID, and why it is the best viable alternative; or none found with the searched routes |
| Pollinations fallback | use <candidate> or none, with the reason for declining or lacking a viable candidate |
Ask:
Please confirm: canonical name X, aliases A/none, price multiplier M, paid-only yes/no, Pollinations GPU yes/no, registry provider P, primary route R, best fallback candidate C/none found, and Pollinations fallback decision use C/none. Are all of these correct?
An answer approves only the values shown. If a value is unknown, inferred, conflicting, or route-dependent, label it UNKNOWN, explain the evidence, and wait for that exact decision. A batch approval is valid only when every row is complete.
Model approval does not authorize adding, renaming, removing, or changing a public endpoint, method, transport, request or response schema, streaming behavior, or event protocol. Do not propose an API-surface change without a concrete user or developer problem it solves.
Before editing, present:
none.State plainly: This adds/changes the public API: ... Then ask for explicit confirmation of that exact API change. If the problem, standard, or compatibility impact is unclear, do not edit.
Model approval never authorizes adding, rotating, synchronizing, deploying, revoking, or otherwise mutating a credential. Follow the exact approval wording, execution order, verification, and rollback rules in AGENTS.md. Do not duplicate or weaken that process here.
main since
the current production revision; production can lag behind main.git log --all -- <path>
and gh pr list --state merged --search <model> before re-adding it β it may have been
removed on purpose, added and reverted, or replaced.none found; never omit the fallback decision because the primary route is healthy.For direct Novita discovery, use the supported
model catalog
and account quotas with an
existing authorized key. Quota queries require modal=llm; query RPM and
TPM separately with productType=Public Endpoint and the exact model as
quotaObject, then check the returned identity. The OpenAI-compatible base is
https://api.novita.ai/openai/v1; probe the exact upstream model using
Chat Completions.
Request stream_options.include_usage for streaming and prove terminal usage,
cache/reasoning billing, capabilities and burst capacity through local Gen
before routing traffic. Gateway availability does not prove direct access or
independent capacity: OpenRouter/Vercel routes backed by Novita can share the
same upstream pool. Keep direct provider attribution and charges distinct from
gateway-billed traffic; use the Economics Novita connector guide for supported
billing sources. Preserve the existing public contract and fallback mechanism.
Present the mandatory row and obtain explicit confirmation before editing. If a capability or access change is intentional, state it plainly.
<publisher-slug>/<official-model-slug>. Keep both
components lowercase, preserve the publisher's model family and version,
and follow the publisher's public slug when one exists. Never invent, drop,
or silently advance a version.publisher is the human-readable publisher (OpenAI, Anthropic, xAI), not
the inference provider. Keep provider deployment IDs, casing, punctuation,
and revision suffixes internal when they are routing details rather than the
publisher's public model identity.<public-canonical-id>:<provider>.
The public registry key, catalogs, request model, and permissions remain the
public ID. Keep fallback identity separate from priority: never use
:fallback, numbered fallback suffixes, or priority labels in these IDs.<public-canonical-id>:<provider>:<route-qualifier>, such as
google/gemini-2.5-flash-lite:openrouter:vertex-global or
google/gemini-2.5-flash-lite:openrouter:ai-studio. Distinguish multiple
deployments through the same provider explicitly. Use lowercase labels;
never encode priority or the temporary fallback role. Preserve fallback
registry IDs when changing their order. For provider-managed routing without
a fixed backend, do not invent an endpoint qualifier.provider field and route configuration remain authoritative; the name
does not select an upstream endpoint. Keep fallback-only entries hidden,
without aliases, and excluded from catalogs and direct model selection.
Route-specific cost belongs on the serving definition; callers retain the
requested public model's price. Use the existing shared fallback mechanism.resolved_model_requested, model_used, x-model-used,
provider, per-attempt, community and cache attribution semantics during a
canonical rename. Recorded IDs may adopt the new spelling, including hidden
fallback registry IDs; do not force primary IDs into execution identifiers.
Explicit primary execution IDs and their analytics/header contract are
deferred to #14543.
Review affected consumers and any public API changes separately; do not
silently repurpose x-model-used or rewrite historical events.google/gemini-2.5-flash-lite:search could be
google/gemini-2.5-flash-lite:search:openrouter:ai-studio.
These are naming examples, not declarations of configured routes. Link
routes through explicit registry keys; do not split or strip colon suffixes
to infer providers or fallback relationships. The fallback must preserve
the public model's behavior, including search in this example.<public-canonical-id>:paid, never with the inference provider in the slug.
Treat it as a separate public contract with its own price, paidOnly value,
permissions, and aliases. Do not use :paid for automatic fallback routing.x-fal-billable-units. Do not rebuild the
provider's formula (rounding, minimums, per-reference units, parameter
multipliers) from the request. When the route reports nothing, derive usage
from the request and reconcile it against the provider's billing records./v1 and a standard-compatible route under /v1./v1 as a compatibility namespace: match the selected standard's route, transport, request, response, streaming, and event contracts exactly, and keep provider-specific protocols behind the route adapters β never a Pollinations-specific or upstream-provider schema under /v1.model. Keep distinct operations separate while reusing their shared internal handler, authorization, billing, and observability paths.-high, -search, -reasoning, or -1080p; only explicit request parameters and canonical defaults apply. Keep a separate canonical model if the old behavior must remain.instr() inside CASE so JSON functions never
run on non-matching rows. A single whole-table JSON scan fails with error
7429 at production scale (~150k apikey rows).shared/registry/; use the live model
catalog for public listings rather than maintaining a duplicate Markdown list.baseRate * 1.055 (for example,
perMillion(0.75) * 1.055). Include search, cache-storage, and other billable
adjustments, including provider-reported charges. Keep priceMultiplier
unchanged; prices derive from the fee-inclusive cost. Declare this in the
registry entries, not a provider-wide transformation. Apply the fee exactly
once: same-provider fallbacks may inherit fee-inclusive rates; cross-provider
fallbacks need explicit costs when inheritance would add or omit the fee.APIDOCS.md; update the source schema or route./models metadata.Before publishing:
A model change is not complete until all applicable statements are true: