---
title: "Models & Providers"
description: "The supported LLM providers, their config keys and endpoints, and how to choose a model."
canonical: "https://nuabase.com/docs/direct/providers/"
---

> Documentation index: https://nuabase.com/llms.txt

## Supported providers

| Provider | Config key | Endpoint |
|----------|------------|----------|
| Groq | `groq` | `https://api.groq.com/openai/v1/chat/completions` |
| Cerebras | `cerebras` | `https://api.cerebras.ai/v1/chat/completions` |
| Gemini | `gemini` | `https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent` |
| OpenRouter | `openrouter` | `https://openrouter.ai/api/v1/chat/completions` |
| DeepSeek | `deepseek` | `https://api.deepseek.com/chat/completions` |

OpenRouter is itself a router: it forwards each request to a provider that hosts the model, which makes it the provider that serves the most aliases below.

## Model aliases

An alias lists provider models in a fixed order. Nuabase uses the first one whose provider you supplied an API key for.

| Alias | Tries, in order |
|-------|-----------------|
| `fast` (default) | Cerebras `qwen-3.8-27b` → Groq `openai/gpt-oss-120b` → OpenRouter `z-ai/glm-5.3-flash` |
| `gemini` | Gemini `gemini-3.8-flash` → OpenRouter `google/gemini-3.8-flash` |
| `deepseek` | DeepSeek `deepseek-v4-pro` → OpenRouter `deepseek/deepseek-v4-pro-0813` |
| `qwen` | OpenRouter `qwen/qwen3.8-2.4t-a95b` |
| `sonnet` | OpenRouter `anthropic/claude-sonnet-5.5` |
| `opus` | OpenRouter `anthropic/claude-opus-5.5` |
| `haiku` | OpenRouter `anthropic/claude-haiku-4.5` |
| `kimi` | OpenRouter `moonshotai/kimi-k3` |
| `gpt` | OpenRouter `openai/gpt-6.1-sol` |

```typescript
// Client default
const nua = Nua.direct({
  providers: { openrouter: { apiKey: process.env.OPENROUTER_API_KEY! } },
  model: { alias: 'sonnet' },
});

// Per call
await nua.get('Summarize this', {
  input: text,
  output: { name: 'summary', schema: z.string() },
  model: { alias: 'kimi' },
});
```

On a [local agent](/docs/local-agent.md#choosing-a-model), only Claude Code accepts aliases, and only `haiku`, `sonnet`, and `opus`, which it maps to its own models.

## Explicit provider models

To use a model no alias covers, name the provider and the provider's own model ID:

```typescript
await nua.get('Summarize this', {
  input: text,
  output: { name: 'summary', schema: z.string() },
  model: { provider: 'groq', model: 'openai/gpt-oss-120b' },
});
```

The provider must be one you configured a key for. For Gemini, use bare model IDs such as `gemini-3.8-flash`, not `models/gemini-3.8-flash`.

## Picking a model

- **Latency-sensitive work** such as parsing user input in a form: `fast`. Cerebras and Groq serve open models at very high token rates.
- **Harder extraction or reasoning:** `sonnet`, `opus`, `gpt`, or `gemini`.
- **Bulk enrichment of many rows:** start with `fast` and move up only for fields where it isn't accurate enough. `nua.list()` already amortizes the prompt over many rows.

Pricing and rate limits are set by each provider. Check their dashboards for current numbers.
