Catalog

Capabilities

Models differ in what they accept. Here is what each capability changes about your request — and what happens when you exceed it.

Capability flags
FieldTypeDescription
visionbooleanAccepts images. See Vision.
toolsbooleanSupports function calling. See Tool calling.
reasoningbooleanCan spend extra tokens thinking. See Reasoning.
context windownumberMaximum tokens for input and output combined.
max outputnumberUpper bound on a single response.

Context window#

The window covers input and output. A 200,000-token window with 190,000 tokens of input leaves room for a very short answer — which is why a request can fail with plenty of window apparently left.

Rejected before anything is spent

An oversized request returns 400 at the gateway, before any provider is called, so it costs you nothing. The message states the measured size and the limit.

{
  "error": {
    "message": "Input is ~164970 tokens, which exceeds the safe limit of 160000 tokens for this model. Shorten the input or use a model with a larger context window.",
    "type": "invalid_request_error",
    "code": "invalid_request"
  }
}

The limit sits slightly below the advertised window on purpose. Token counting is an estimate until the provider tokenises for real, and a request accepted here but rejected upstream costs a round trip and is far more confusing to debug.

Maximum output#

A max_tokens larger than a model allows is clamped down — never up. Your value is a cost ceiling, so raising it silently would bill you beyond a budget you set deliberately.

Images on a model without vision#

The request is not rejected. The image is removed and replaced with a note telling the model it could not see an image, so it says so rather than describing something it never saw.

  • Current turn — the model is told explicitly not to guess, and to suggest switching to a vision model.
  • Earlier turns — replaced with a short marker so the history still reads coherently.

Editors and agent frameworks routinely attach screenshots the user never meant to send. Failing the whole request over an incidental attachment throws away the question they actually asked.

Tool reliability varies by model#

The wire format is identical everywhere — the same tool_calls shape comes back. On some models tool use is less reliable with complex schemas, so keep parameter sets small if you target those.

Checking capabilities#

GET /v1/modelslists every chat model in the catalog (public, same for everyone), and the dashboard catalog shows the capability flags per model. Check there rather than inferring from a model's name — names do not reliably predict features.

Was this page helpful?