Skip to main content
GridOS ships with a static catalog of models across four providers. Once you configure an API key for a provider, every model from that provider appears in the model picker dropdown in the chat composer. You can switch models between requests without restarting. This page is the authoritative catalog — ordered by practical usefulness, not alphabetically.

Model catalog

Model IDFree-tier TPMNotes
gemini-3.1-flash-lite-preview~250KRecommended default. Fast, cheap, huge TPM headroom. Handles multi-intent 3-statement and DCF builds comfortably.
gemini-3.1-pro~250KHigher-quality Gemini; slower and more expensive per token. Use when Flash Lite struggles on complex reasoning.

Anthropic Claude

Model IDFree tierNotes
claude-haiku-4-5-20251001$5 creditsFast and cheap; strong JSON reliability. Best free-credit option if you don’t have a Gemini key.
claude-sonnet-4-6$5 creditsBalanced; solid for mid-complexity financial models.
claude-opus-4-7$5 creditsMost capable Claude; best for long-reasoning builds where quality matters more than cost.

Groq

Fast inference (~500–1000 tokens/sec) but tight free-tier TPM. See the free-tier fit table before picking a Groq model on free tier.
Model IDFree-tier TPMNotes
openai/gpt-oss-120b~8KStrongest Groq model for structured JSON. Tight on free tier for multi-intent builds — pair with chain mode or upgrade Groq plan.
openai/gpt-oss-20b~20KFastest Groq model (~1000 tps). Also the preferred router model when you have Groq configured.
qwen/qwen3-32b~12KPreview; strong at structured output.
llama-3.3-70b-versatile~12KCapable but occasionally prefaces JSON with prose — GridOS’s balanced-brace parser strips that, but reliability varies.

OpenRouter

Model IDFree tierNotes
nousresearch/hermes-3-llama-3.1-405b:freeFreeLarge 405B model with reasoning chops. Rate-limited.
meta-llama/llama-3.3-70b-instruct:freeFreeStrong general-purpose Llama; reliable for GridOS prompts.
meta-llama/llama-3.2-3b-instruct:freeFreeTiny and fast; fine for simple single-cell edits.
openrouter/freeFreeMeta-router — auto-picks a working free model at request time. Use when you don’t want to think about model choice.
llama-3.1-8b-instant (Groq) is in the catalog but hidden from the chat composer’s model picker — its 6K TPM free-tier ceiling can’t fit GridOS’s agent prompt. It’s used internally as the router classifier, where prompts are small enough to fit.

Picking a model

Open the chat composer at the bottom of the workbook view. The model picker dropdown is embedded in the composer — click it to see every model available for your configured providers. Select any model and your next chat message uses it. The selection persists across page reloads (stored in localStorage).
If a model returns garbled or non-JSON output, switch to a stronger one (Claude Sonnet, Gemini Pro) or rephrase to be more specific. If you hit 413 — Request too large, switch providers or enable chain mode — see Troubleshooting.

The router model

GridOS uses a separate, smaller model for intent classification — deciding whether your prompt needs the finance agent or the general agent. This routing call is pinned to whichever fast small model has a configured key, in this preference order:
  1. llama-3.1-8b-instant (Groq, ~560 tps)
  2. gemini-3.1-flash-lite-preview (Google)
  3. claude-haiku-4-5-20251001 (Anthropic)
  4. meta-llama/llama-3.2-3b-instruct:free (OpenRouter)
The router call is transparent: it reserves only 32 completion tokens (enough for one lowercase agent id), so it fits even the tightest free-tier TPM buckets. Your chosen model in the composer drives only the agent call — the part that actually writes cells.

Adding your own models

Self-hosted users can extend the catalog two ways: Create a plugin that calls kernel.model({...}) — see Plugins for the full walkthrough. Plugins don’t require editing core files and can ship as a self-contained directory.

By editing core/providers/catalog.py

Append an entry to MODEL_CATALOG:
{
    "id": "model-id-sent-to-provider-sdk",
    "provider": "gemini",  # one of: gemini | anthropic | groq | openrouter
    "display_name": "Human-readable name",
    "description": "Short description shown in the UI.",
}
The UI picks up new entries on the next page load, as long as the owning provider has a configured key.
{
    "id": "llama-3.1-70b-versatile",
    "provider": "groq",
    "display_name": "Llama 3.1 70B (Groq)",
    "description": "Llama 3.1 70B via Groq.",
}
Restricting a model to router use only? Add "router_only": True — the picker will hide it but route_prompt() will still reach it.