Skip to main content
The attacker and judge LLMs run on a provider you choose. Set the provider’s API key in your shell or a .env file before running, then reference it by name in attackerLlm.apiKeyEnv.

Supported providers

Providerprovider valueEnv varDefault modelNotes
OpenAIopenaiOPENAI_API_KEYgpt-4o-mini
AnthropicanthropicANTHROPIC_API_KEYclaude-3-5-haiku-20241022
GroqgroqGROQ_API_KEYllama-3.3-70b-versatile
GooglegoogleGOOGLE_GENERATIVE_AI_API_KEYgemini-2.0-flash
DeepSeekdeepseekDEEPSEEK_API_KEYdeepseek-chat
Azure OpenAIazureAZURE_OPENAI_API_KEYgpt-4o-minirequires attackerLlm.baseURL
OpenAI-compatibleopenai-compatibleOPFOR_API_KEY(no default)requires attackerLlm.baseURL
openai-compatible covers LiteLLM, OpenRouter, Ollama, vLLM, and any other OpenAI-shaped endpoint — point baseURL at it.

Configuring a model

"attackerLlm": {
  "provider": "openai",
  "model": "gpt-4o-mini",
  "apiKeyEnv": "OPENAI_API_KEY"
},
"judgeLlm": {
  "provider": "anthropic",
  "model": "claude-3-5-haiku-20241022",
  "apiKeyEnv": "ANTHROPIC_API_KEY"
}
judgeLlm is optional — it falls back to attackerLlm when omitted. For azure and openai-compatible, add "baseURL".

Setting keys

export OPENAI_API_KEY=sk-...
export GROQ_API_KEY=gsk_...
export ANTHROPIC_API_KEY=sk-ant-...
The CLI loads .env from the working directory automatically. Load a non-default path with --env <path>.
Add .env to .gitignore. The config stores the env var name (apiKeyEnv), never the key value.