Providers and Models
Providers and Models
Section titled “Providers and Models”Perstack supports multiple LLM providers. Configure via CLI options, environment variables, or perstack.toml.
Default Model
Section titled “Default Model”Perstack uses claude-sonnet-4-5 as the default model, selected based on:
- Standard tier pricing — not a flagship model, economically sustainable for extended runs
- High agentic performance — demonstrated tool use capability in benchmarks like 𝜏²-Bench
The default balances cost efficiency with reliable agent behavior. As new models are released, the default may change based on these criteria.
To override the default, specify in perstack.toml:
model = "gemini-2.5-pro"
[provider]providerName = "google"Or via CLI:
npx perstack run my-expert "query" --provider google --model gemini-2.5-proSupported Providers
Section titled “Supported Providers”| Provider | Key | Description |
|---|---|---|
| Anthropic | anthropic | Claude models (default) |
google | Gemini models | |
| OpenAI | openai | GPT and reasoning models |
| DeepSeek | deepseek | DeepSeek models |
| Ollama | ollama | Local model hosting |
| Azure OpenAI | azure-openai | Azure-hosted OpenAI models |
| Amazon Bedrock | amazon-bedrock | AWS Bedrock-hosted models |
| Google Vertex AI | google-vertex | Google Cloud Vertex AI models |
Anthropic
Section titled “Anthropic”Environment variables:
| Variable | Required | Description |
|---|---|---|
ANTHROPIC_API_KEY | Yes | API key |
ANTHROPIC_BASE_URL | No | Custom endpoint |
perstack.toml settings:
[provider]providerName = "anthropic"[provider.setting]baseUrl = "https://custom-endpoint.example.com" # Optionalheaders = { "X-Custom-Header" = "value" } # Optional| Setting | Type | Description |
|---|---|---|
baseUrl | string | Custom API endpoint |
headers | object | Custom HTTP headers |
Native reasoning: Supported via extended thinking.
Models:
| Model | Context | Max Output |
|---|---|---|
claude-opus-4-5 | 200K | 32K |
claude-opus-4-1 | 200K | 32K |
claude-opus-4-20250514 | 200K | 32K |
claude-sonnet-4-5 | 200K | 64K |
claude-sonnet-4-20250514 | 200K | 64K |
claude-3-7-sonnet-20250219 | 200K | 64K |
claude-haiku-4-5 | 200K | 8K |
claude-3-5-haiku-latest | 200K | 8K |
export ANTHROPIC_API_KEY=sk-ant-...npx perstack run my-expert "query" --provider anthropic --model claude-sonnet-4-5Environment variables:
| Variable | Required | Description |
|---|---|---|
GOOGLE_GENERATIVE_AI_API_KEY | Yes | API key |
GOOGLE_GENERATIVE_AI_BASE_URL | No | Custom endpoint |
perstack.toml settings:
[provider]providerName = "google"[provider.setting]baseUrl = "https://custom-endpoint.example.com" # Optionalheaders = { "X-Custom-Header" = "value" } # Optional| Setting | Type | Description |
|---|---|---|
baseUrl | string | Custom API endpoint |
headers | object | Custom HTTP headers |
Models:
| Model | Context | Max Output |
|---|---|---|
gemini-3-pro-preview | 1M | 64K |
gemini-2.5-pro | 1M | 64K |
gemini-2.5-flash | 1M | 64K |
gemini-2.5-flash-lite | 1M | 64K |
export GOOGLE_GENERATIVE_AI_API_KEY=AIza...npx perstack run my-expert "query" --provider google --model gemini-2.5-proOpenAI
Section titled “OpenAI”Environment variables:
| Variable | Required | Description |
|---|---|---|
OPENAI_API_KEY | Yes | API key |
OPENAI_BASE_URL | No | Custom endpoint (OpenAI-compatible) |
OPENAI_ORGANIZATION | No | Organization ID |
OPENAI_PROJECT | No | Project ID |
perstack.toml settings:
[provider]providerName = "openai"[provider.setting]baseUrl = "https://custom-endpoint.example.com" # Optionalorganization = "org-xxx" # Optionalproject = "proj-xxx" # Optionalname = "custom-openai" # Optional: custom provider nameheaders = { "X-Custom-Header" = "value" } # Optional| Setting | Type | Description |
|---|---|---|
baseUrl | string | Custom API endpoint |
organization | string | OpenAI organization ID |
project | string | OpenAI project ID |
name | string | Custom provider name |
headers | object | Custom HTTP headers |
Native reasoning: Supported via reasoningEffort. Works with o-series models (o1, o3, o4-mini).
Models:
| Model | Context | Max Output |
|---|---|---|
gpt-5 | 400K | 128K |
gpt-5-mini | 400K | 128K |
gpt-5-nano | 400K | 128K |
gpt-5-chat-latest | 128K | 16K |
o4-mini | 200K | 100K |
o3 | 200K | 10K |
o3-mini | 200K | 10K |
gpt-4.1 | 1M | 32K |
export OPENAI_API_KEY=sk-proj-...npx perstack run my-expert "query" --provider openai --model gpt-5DeepSeek
Section titled “DeepSeek”Environment variables:
| Variable | Required | Description |
|---|---|---|
DEEPSEEK_API_KEY | Yes | API key |
DEEPSEEK_BASE_URL | No | Custom endpoint |
perstack.toml settings:
[provider]providerName = "deepseek"[provider.setting]baseUrl = "https://custom-endpoint.example.com" # Optionalheaders = { "X-Custom-Header" = "value" } # Optional| Setting | Type | Description |
|---|---|---|
baseUrl | string | Custom API endpoint |
headers | object | Custom HTTP headers |
Models:
| Model | Context | Max Output |
|---|---|---|
deepseek-chat | 128K | 8K |
deepseek-reasoner | 128K | 64K |
export DEEPSEEK_API_KEY=sk-...npx perstack run my-expert "query" --provider deepseek --model deepseek-chatOllama
Section titled “Ollama”Environment variables:
| Variable | Required | Description |
|---|---|---|
OLLAMA_BASE_URL | No | Server URL (default: http://localhost:11434) |
perstack.toml settings:
[provider]providerName = "ollama"[provider.setting]baseUrl = "http://localhost:11434" # Optionalheaders = { "X-Custom-Header" = "value" } # Optional| Setting | Type | Description |
|---|---|---|
baseUrl | string | Ollama server URL |
headers | object | Custom HTTP headers |
Models:
| Model | Context | Max Output |
|---|---|---|
gpt-oss:20b | 128K | 128K |
gpt-oss:120b | 128K | 128K |
gemma3:1b | 32K | 32K |
gemma3:4b | 128K | 128K |
gemma3:12b | 128K | 128K |
gemma3:27b | 128K | 128K |
export OLLAMA_BASE_URL=http://localhost:11434npx perstack run my-expert "query" --provider ollama --model gpt-oss:20bAzure OpenAI
Section titled “Azure OpenAI”Environment variables:
| Variable | Required | Description |
|---|---|---|
AZURE_API_KEY | Yes | API key |
AZURE_RESOURCE_NAME | Yes | Resource name |
AZURE_API_VERSION | No | API version |
AZURE_BASE_URL | No | Custom endpoint |
perstack.toml settings:
[provider]providerName = "azure-openai"[provider.setting]resourceName = "your-resource-name" # Optional (env fallback)apiVersion = "2024-02-15-preview" # OptionalbaseUrl = "https://custom-endpoint.example.com" # Optionalheaders = { "X-Custom-Header" = "value" } # OptionaluseDeploymentBasedUrls = true # Optional| Setting | Type | Description |
|---|---|---|
resourceName | string | Azure resource name |
apiVersion | string | Azure API version |
baseUrl | string | Custom API endpoint |
headers | object | Custom HTTP headers |
useDeploymentBasedUrls | boolean | Use deployment-based URLs |
export AZURE_API_KEY=your_azure_keyexport AZURE_RESOURCE_NAME=your_resource_namenpx perstack run my-expert "query" --provider azure-openai --model your-deployment-nameAmazon Bedrock
Section titled “Amazon Bedrock”Environment variables:
| Variable | Required | Description |
|---|---|---|
AWS_ACCESS_KEY_ID | Yes | Access key ID |
AWS_SECRET_ACCESS_KEY | Yes | Secret access key |
AWS_REGION | Yes | Region (e.g., us-east-1) |
AWS_SESSION_TOKEN | No | Session token (temporary credentials) |
perstack.toml settings:
[provider]providerName = "amazon-bedrock"[provider.setting]region = "us-east-1" # Optional (env fallback)| Setting | Type | Description |
|---|---|---|
region | string | AWS region |
export AWS_ACCESS_KEY_ID=AKIA...export AWS_SECRET_ACCESS_KEY=...export AWS_REGION=us-east-1npx perstack run my-expert "query" --provider amazon-bedrock --model anthropic.claude-v2Google Vertex AI
Section titled “Google Vertex AI”Environment variables:
| Variable | Required | Description |
|---|---|---|
GOOGLE_VERTEX_PROJECT | No | GCP project ID |
GOOGLE_VERTEX_LOCATION | No | GCP location (e.g., us-central1) |
GOOGLE_VERTEX_BASE_URL | No | Custom endpoint |
perstack.toml settings:
[provider]providerName = "google-vertex"[provider.setting]project = "my-gcp-project" # Optionallocation = "us-central1" # OptionalbaseUrl = "https://custom-endpoint.example.com" # Optionalheaders = { "X-Custom-Header" = "value" } # Optional| Setting | Type | Description |
|---|---|---|
project | string | GCP project ID |
location | string | GCP location |
baseUrl | string | Custom API endpoint |
headers | object | Custom HTTP headers |
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.jsonnpx perstack run my-expert "query" --provider google-vertex --model gemini-1.5-pro