# Models

[RightNow AI](https://www.rightnowai.co/) / [Decision model](https://www.rightnowai.co/docs/decision-model) / [Models](https://www.rightnowai.co/docs/decision-model/models)

Updated 2026-11-13

Read the model list to choose the alias or an attested pinned version.

**TypeScript (models.ts)**

```typescript
import { SystemZeroClient } from '@rightnowai/system-zero';

const client = new SystemZeroClient({
  apiKey: process.env.SYSTEM_ZERO_API_KEY,
  baseURL: "https://api.rightnowai.co/v1",
});
const models = await client.models.list();
console.log(models);

// Set SYSTEM_ZERO_API_KEY to your API key before running this example.
// Run this example on your server.
// SDK defaults: The default is 5 retries, also the maximum, with 150 seconds
// per attempt and a 60-second total retry budget. A single wait longer than 60
// seconds raises the last error.
// Use Retry-After-Ms, or Retry-After when milliseconds are absent. The wait is
// never shorter than a random backoff floor: a random fraction of 0.5 seconds
// doubled for each attempt, capped at 8 seconds.
```

**Python (models.py)**

```python
from system_zero import SystemZero

import os

with SystemZero(
    api_key=os.environ["SYSTEM_ZERO_API_KEY"],
    base_url="https://api.rightnowai.co/v1",
) as client:
    models = client.models.list()
    print(models)

# Set SYSTEM_ZERO_API_KEY to your API key before running this example.
# Run this example on your server.
# SDK defaults: The default is 5 retries, also the maximum, with 150 seconds per
# attempt and a 60-second total retry budget. A single wait longer than 60
# seconds raises the last error.
# Use Retry-After-Ms, or Retry-After when milliseconds are absent. The wait is
# never shorter than a random backoff floor: a random fraction of 0.5 seconds
# doubled for each attempt, capped at 8 seconds.
```

**Manual HTTP (models.sh)**

```shell
# Manual example policy: One attempt with no automatic retry.
# SDK defaults: The default is 5 retries, also the maximum, with 150 seconds per
# attempt and a 60-second total retry budget. A single wait longer than 60
# seconds raises the last error.
# Use Retry-After-Ms, or Retry-After when milliseconds are absent. The wait is
# never shorter than a random backoff floor: a random fraction of 0.5 seconds
# doubled for each attempt, capped at 8 seconds.
# Set SYSTEM_ZERO_API_KEY in your environment first.
if [ -z "$SYSTEM_ZERO_API_KEY" ]; then
  printf '%s\n' 'Set SYSTEM_ZERO_API_KEY before running this example.' >&2
  exit 1
fi

# Read the models available to your key.
if ! response=$(curl --silent --show-error --fail-with-body \
  'https://api.rightnowai.co/v1/models' \
  --header "Authorization: Bearer $SYSTEM_ZERO_API_KEY"); then
  printf '%s\n' "$response" >&2
  exit 1
fi

# Print the response without changing its fields.
printf '%s\n' "$response"
```

## Choose a model

`GET /v1/models` requires a RightNow decision model API key. The response places the alias first, followed by attested versions.

- **`rightnow-decision`**: Always the latest version.

To pin a version, use `rightnow-decision-3.0.0`.

Use an ID from the list as the `model` in a decide request. The list names the same model by an earlier ID. A request accepts either ID. See [Versions](https://www.rightnowai.co/docs/decision-model/versions) for choosing between an alias and a pin.

**Illustration of model selection.**

```text
[ Read model list ]
        |
        v
[ Choose an ID ]
  |             |
  v             v
[ Alias ]   [ Listed version ]
  |             |
  '-----.-------'
        |
        v
[ Set request model ]
```

Use the alias or a listed version as your request's model.

## Model fields

The response has `object: "list"` and a `data` array. Each model entry contains these fields.

- **`id`**: The alias or pinned model ID.
- **`object`**: `model`
- **`alias_for`**: The model version named by the alias.
- **`input_routes`**: Optional. Names the version that answers each file kind for the alias.
- **`released_at`**: The stated release date, or null.
- **`calibration_versions`**: The stated calibration set, or null.
- **`limits`**: Limits reported by the gateway.
- **`held_routes`**: Features that the deployment does not serve.

A null release date or calibration set means that metadata has not been stated. Do not infer it from the model ID or an example answer.

## Limits and availability

These are the served facts for `rightnow-decision-3.0.0`. Read the model list for workspace admission.

Read `limits` for the model's reported boundaries and `held_routes` for unavailable features. A media-shaped field in a limits object does not make media available.

Inline input: text, JSON state (robot state), images, voice, PDF, video (preview). Only listed formats are supported.

The 64k and 128k bands are served through Danger zone with SZ-Danger-Zone: long\_context\_64k or long\_context\_128k.

**Every input modality**

| Input | State | Formats and limits |
| --- | --- | --- |
| Text | Served | String state. Boolean, choice and score questions. |
| JSON state | Served | JSON objects and arrays, including robot state. |
| Images | Served | image/png, image/jpeg. Up to 4 images; 16,777,216 source pixels per image. |
| PDF and documents | Served | application/pdf only, up to 500 pages. Encrypted PDFs and other document formats are refused. Plain document text can be sent as state. |
| Audio | Served | Audio: one WAV file with PCM or float samples at exactly 16,000 Hz per request. All attachments share the 2.5 MiB decoded limit. Channels and sample encoding affect how much audio fits. Audio is limited to 60 seconds per request. |
| Video | Preview | 1 silent H.264 MP4, up to 10 seconds, without other files. |

**Every context**

| Context | State | Availability and limits |
| --- | --- | --- |
| Standard context | Served | 38,000 state tokens and 40,960 rendered tokens. Body and question limits also apply. |
| Visual input | Served | Images, PDFs, and video share a 32,768 rendered-token limit. |
| 64k | Served | Up to 65,536 state tokens and 70,656 rendered tokens. Send SZ-Danger-Zone: long\_context\_64k. |
| 128k | Served | Up to 131,072 state tokens and 136,192 rendered tokens. Send SZ-Danger-Zone: long\_context\_128k. |

**Measured inside the API, in US East on 2026-11-10. From the request's arrival to the end of the response. Your network is not included.**

**Measured latency**

| Input | Median ms | Tail p90 ms | Tail p95 ms | Samples |
| --- | --- | --- | --- | --- |
| Text, one or more questions | 204 | 287 | 313 | 357 |
| Text, over the stream transport | 150 | 174 | 179 | 48 |
| Text, one short text question alone at 2026-11-10 00:15 UTC | 136 | Not published | Not published | 38 |
| Image | 230 | 343 | 376 | 55 |
| PDF | 272 | 372 | 426 | 56 |
| Audio | 400 | Not published | Not published | 17 |
| Video | 314 | 345 | 363 | 36 |

These are measurements, not a guarantee. Read `X-Latency-Ms` on your own replies.

Window: 2026-11-09 23:45 to 2026-11-10 01:36 UTC; version 3.0.0; warm and first calls mixed; measured on RightNow's own traffic. HTTP 200 with one model attempt.

Add your round trip to US East: about 10 ms from the US east coast, about 80 ms from the west coast.

## Discovery failures

A call without an API key returns `401 invalid_api_key`.

An unsupported model returns `404 model_not_found`. Choose the alias or a pinned version returned by the model list.

Model discovery returns `503 service_unavailable` when no serving version is attested. Follow the response's retry advice.

## Next

[Inputs](https://www.rightnowai.co/docs/decision-model/attachments)
