Setup¶
Configure your LLM provider and model selection for ACE.
Guided Setup (Recommended)¶
The ace setup command walks you through configuration interactively — it validates the connection first, and only asks for credentials if needed.
ACE Setup
Step 1: Choose your model
Examples: gpt-4o-mini, claude-sonnet-4-20250514, ollama/llama2
Search models: ace models <query>
Default model: gpt-4o-mini
v Connected! (gpt-4o-mini via openai, 203ms)
Using OPENAI_API_KEY
Step 2: Role assignment
ACE uses three roles. You can assign a different model to each,
or use the same model for all (recommended to start).
Use this model for all roles? [Y/n]: n
Agent (executes tasks) [gpt-4o-mini]: claude-sonnet-4-20250514
! No credentials found for anthropic
ANTHROPIC_API_KEY: sk-ant-...
v Connected! (claude-sonnet-4-20250514 via anthropic, 347ms)
v Saved credentials to .env
Reflector (analyses results) [gpt-4o-mini]:
Skill Manager (updates skillbook) [gpt-4o-mini]:
v Saved model config to ace.toml
Configuration summary:
default: gpt-4o-mini
agent: claude-sonnet-4-20250514
The wizard tries the connection immediately — if your credentials are already in the environment (via .env, exported variables, or cloud auth like AWS), it just works. It only prompts for keys when the connection actually fails.
This creates two files:
| File | Contains | Commit to git? |
|---|---|---|
.env |
API keys only | No (gitignore it) |
ace.toml |
Model names per role | Yes (no secrets) |
Then in your code:
Manual Setup¶
If you prefer not to use the CLI, set environment variables directly.
1. Set API keys¶
2. Use in code¶
from ace import ACELiteLLM, ACEModelConfig, ModelConfig
# Different models per role
ace = ACELiteLLM.from_config(ACEModelConfig(
default=ModelConfig(model="gpt-4o-mini"),
agent=ModelConfig(model="claude-sonnet-4-20250514"),
))
Per-Role Model Selection¶
ACE has three roles, each making LLM calls. You can assign different models to optimise cost vs quality:
| Role | What it does | Recommendation |
|---|---|---|
| Agent | Executes tasks, produces answers | Strong reasoning model |
| Reflector | Analyses results, extracts lessons | Good analysis, lower cost OK |
| Skill Manager | Updates the skillbook | Structured output reliability |
Example ace.toml:
[default]
model = "gpt-4o-mini"
[agent]
model = "claude-sonnet-4-20250514"
max_tokens = 4096
[reflector]
model = "gpt-4o-mini"
Roles without an explicit section use [default].
Discovering Models¶
Search available models¶
Use multiple terms to narrow results — all terms must match:
ace models claude # All Claude models
ace models haiku us # Only US-region Haiku models
ace models gpt 4o # GPT-4o variants
ace models --provider openai # All OpenAI models
Output shows model name, provider, pricing, and whether your API key is configured:
Model Provider Input $/M Output $/M Key
------------------------------------------------------------------------------------------
us.anthropic.claude-haiku-4-5-20251001-v1:0 bedrock_converse $1.10 $5.50 v
claude-haiku-4-5-20251001 anthropic $1.00 $5.00 x
Showing 20 of 40 models. Narrow your search: ace models <query> or use --limit 40
Validate a specific model¶
Makes a tiny test call (3 tokens) to confirm the key, model, and network all work.
Supported Providers¶
ACE uses LiteLLM for model access. Any model string LiteLLM supports will work:
| Provider | Model Example | Env Variable |
|---|---|---|
| OpenAI | gpt-4o-mini |
OPENAI_API_KEY |
| Anthropic | claude-sonnet-4-20250514 |
ANTHROPIC_API_KEY |
| AWS Bedrock | us.anthropic.claude-haiku-4-5-20251001-v1:0 |
AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY + AWS_REGION_NAME |
| Google Gemini | gemini/gemini-2.0-flash |
GEMINI_API_KEY |
| DeepSeek | deepseek/deepseek-chat |
DEEPSEEK_API_KEY |
| Groq | groq/llama-3.1-70b |
GROQ_API_KEY |
| Ollama (local) | ollama/llama2 |
--- |
| Azure OpenAI | azure/gpt-4 |
AZURE_API_KEY |
| OpenRouter | openrouter/anthropic/claude-3.5-sonnet |
OPENROUTER_API_KEY |
100+ providers supported. Run ace models to search the full catalog.
Troubleshooting¶
"No ace.toml found"¶
Run ace setup or use ACELiteLLM.from_model("gpt-4o-mini") instead of from_setup().
"Invalid API key"¶
"Model not found"¶
The model string may have a typo. ace validate and ace setup suggest alternatives:
ace validate claud-sonnet
# x Model 'claud-sonnet' not found at the provider.
# Did you mean:
# - claude-sonnet-4-20250514
# - claude-3-5-sonnet-20241022
"Could not detect a provider"¶
Use the provider/model-name format:
Search for the correct model string: ace models llama
What to Read Next¶
- Quick Start --- build your first self-learning agent
- How ACE Works --- understand the three-role architecture
- Integrations --- LangChain, Browser-Use, Claude Code