Providers and models
Bring your own model; how Diffgazer talks to providers.
Diffgazer does not run a model of its own. It is provider-agnostic: you configure one of nine selectable products, satisfy that product's admission checks, pick an exact admitted model, and Diffgazer talks to it directly from your machine. Switching products or models is a configuration change, not a reinstall. Your credentials and source never pass through a Diffgazer-hosted service. See Privacy for where credentials and review content actually go.
Supported products
The provider picker lists nine selectable products drawn from the canonical support matrix: Google Gemini, Z.AI, OpenRouter, DeepSeek, Qwen International, Moonshot Open Platform, MiniMax International, Ollama Cloud, and OpenCode Zen.
Each product is a distinct hosted API transport contract requiring a credential reference and an allowed endpoint. None of them share credentials across products, and Diffgazer does not fall back to another product when one fails.
Experimental, deferred, and rejected candidates in the matrix are documentation-only in this tranche. A compatible endpoint, free credit, or local binary cannot override the frozen verdict at runtime.
How models are listed
You do not type model names by hand in the setup wizard. Diffgazer rejects aliases, routing selectors, and marketing names. Each product's model policy decides whether discovery populates the picker, whether a pinned allowlist or family is shown instead, and how an exact ID is validated at save time.
Catalog-backed hosted products
For Google Gemini, Z.AI, DeepSeek, Qwen International, Moonshot Open Platform, MiniMax International, Ollama Cloud, OpenCode Zen, and OpenRouter, the wizard starts from the shared models.dev catalog. Diffgazer first uses a non-empty cache that is less than an hour old when available. Otherwise, unless DIFFGAZER_OFFLINE is set, it asks models.dev for the current catalog, sending the ETag of the cached copy so an unchanged catalog costs one small conditional request instead of a full download. When a live request is skipped, fails, or does not contain the selected provider, Diffgazer falls back to a non-empty cached list for that provider even if it is stale, then to the bundled offline snapshot. The picker shows when the list was last checked and offers Retry.
Where the product publishes its own model list, that list is the current set of ids and models.dev supplies the name, price, and context size for the ids it also knows:
- OpenRouter and Ollama Cloud publish keyless lists, so Diffgazer reads them without a credential.
- For a saved Z.AI, DeepSeek, Qwen International, Moonshot Open Platform, MiniMax International, or OpenCode Zen configuration that has a credential, Diffgazer asks that configuration's own endpoint (
{endpoint}/models) with that configuration's own key. The key goes only to the endpoint of the configuration it belongs to, plus — for OpenCode Zen alone, whose two endpoints are two billing pools on one key — that same product's other pool endpoint, and there only to read its model list. - OpenCode Zen has two endpoints on one key — Zen pay-as-you-go at
https://opencode.ai/zen/v1and the OpenCode Go subscription athttps://opencode.ai/zen/go/v1— which are two billing pools of one account rather than two accounts. The bound pool's own list is the live source of model identity for that pool, rotating as Zen adds and retires stealth routes; the sibling pool's list is read too, on the same key, but only as evidence of which pool serves a row. The picker lists the union of both pools, with the sibling's rows drawn from models.dev's OpenCode Zen and OpenCode Go entries — which also supply names and prices for the ids they know — so a model only the sibling's live list names waits until models.dev learns it, and a row models.dev still names for the sibling stays offered after the sibling's list drops it; picking it can fail, and the failure then names the pool and the picker action that fixes it. - For a saved Google Gemini configuration, the list comes from
{endpoint}/openai/modelson its endpoint's OpenAI-compatible layer, with the same key rules. Gemini's live list also names embeddings, TTS, and image routes, so only models the catalog knows are offered there: the live list prunes retired models but never adds unknown ids.
A model the provider lists but models.dev has never seen appears under its id, with no price badge, and says so on its secondary line ("Pricing unknown", or "<size> context · pricing unknown" when the list states a context size); Z.AI rows may borrow only their display name from models.dev's Z.AI coding-plan entries for the same id, never a price. Such rows appear only under the All tab until models.dev learns them. A model models.dev knows but the provider no longer lists is dropped. Live lists are cached for five minutes; when one cannot be fetched, or names only ids the product policy rejects, the picker falls back to the models.dev catalog. See Privacy for exactly what each request carries.
The picker hides only two kinds of model: models that cannot emit text, and — for strict JSON-schema products like Google Gemini — models the catalog marks as unable to return structured output. OpenRouter is the exception to the second: every pinned route is listed — its gateway applies schema enforcement where the route supports it and Diffgazer validates the response locally either way. On a dual-pool product like OpenCode Zen, the picker's Zen/Go tabs filter the list to the models the active tab's pool serves: a model both pools serve appears under both tabs, a model only one pool serves appears only under its own tab, and every model in the union stays reachable through at least one tab. The active tab is the pool a save bills — confirming a model moves the configuration to that pool along with it — and switching tabs never touches the saved configuration until you confirm; a saved model the active tab does not serve is called out by an inline notice naming the tab that serves it. A model no source says anything about is listed; your first review verifies it.
Google Gemini, Z.AI, DeepSeek, Qwen International, Moonshot Open Platform, MiniMax International, Ollama Cloud, and OpenCode Zen use a discovered-exact policy: the model you select must appear in the admitted discovery result for your configuration.
OpenRouter
OpenRouter's picker is OpenRouter's own public model list, with the models.dev OpenRouter rows supplying metadata for the ids both know; a model only OpenRouter lists shows its OpenRouter name and is free when OpenRouter prices both prompt and completion at zero. OpenRouter's pinned downstream route policy requires an exact provider/model pair, optionally carrying a pinned variant suffix — :free and :thinking name separately priced catalog entries with their own display name, limits, and price, so they are identities rather than instructions. Dynamic routing selectors are rejected: openrouter/auto, openrouter/free, and the request-time sort suffixes :nitro, :floor, :online, and :exacto.
Save-time gates
Arbitrary model IDs are rejected at save time when they violate the product's model policy — discovery membership or pinned route shape.
Choosing a model
The right model depends on the trade-off you want between speed, cost, and review depth. Several hosted products ship with a suggested starting model, but every choice is explicit and exact.
For a side-by-side view of every product, transport family, endpoint, structured-output posture, and enablement gate, see the providers reference. For setup and readiness steps, see Configuration and Your first review.
Related
- Providers reference — the full canonical support matrix
- Configuration — V2 configuration identity and actions
- Onboarding — create your first configuration in the UI