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