LLM profiles
An LLM profile is one model at one vendor: how to reach the model and what the model costs. Agents name the profile in the llm command. To use another model, define another profile.
Settings
| Field | Type | Default | Description |
|---|---|---|---|
namerequired | string | The name this profile is referred to by, in agents and in other configuration. | |
doc | string | Free-text notes about this profile, for whoever maintains the configuration. | |
vendor | string | "openai" | The LLM vendor. Reports are organized under this name. |
adapter | string | "openai" | The adapter class that connects to this LLM. It must implement the LlmAdapter interface and be on the allowlist. |
url | dynamic string | "https://api.openai.com" | The URL of the LLM server. |
headers | object of string → dynamic string | Headers added to the request. Values are dynamic strings, as in agents. | |
queryParams | object of string → dynamic string | Query parameters. Values are dynamic strings, as in agents. | |
additionalParams | dynamic dict | Additional parameters to send to the LLM. They are merged with the parameters the adapter class produces and win wherever the two disagree. String values are interpreted as dynamic strings, as in agents. | |
modelrequired | string | The model this profile calls. A profile represents one model of one vendor; to use another model, define another profile. | |
pricing | ModelDetails | The model's prices per million tokens. The cost of a run is calculated from these. | |
maxTokens | integer | 5000 | The token ceiling for agents using this profile. An agent may ask for fewer but not more. What it counts depends on the vendor. |
retries | integer | 1 | How many times a failed request is retried. |
connectionPoolName | string | "default" | The connection pool used for calls to the LLM server. |
maxTools | integer | 10 | The most tools that may be sent in a single call. |
toolErrorPrompt | string | "Tool returned an error. If changing the arguments to the tool would get past this error, change the arguments. Otherwise, if the tool can be skipped, skip it. As a last resort, provide a text error message and end the conversation." | The user prompt sent to the LLM when a tool call fails. |
Model prices
Prices are per million tokens. The cost report and the per-run spend limit are computed from these prices.
| Field | Type | Default | Description |
|---|---|---|---|
inputText | number | 0 | Price per million input text tokens. |
outputText | number | 0 | Price per million output text tokens. |
inputImage | number | 0 | Price per million input image tokens. |
outputImage | number | 0 | Price per million output image tokens. |
Dynamic values
url, the values in headers, and the string values in additionalParams are dynamic strings. These values are evaluated for every call with the same rules as an agent expression. A secret read at call time keeps the key out of the configuration: { f"Bearer {sys.secret['OPENAI_API_KEY']}" }.
Seeded profiles
A new account has profiles for OpenAI (gpt5_mini, and gpt_image for image generation), Anthropic (claude_haiku) and Gemini (gemini_flash, and gemini_image for image generation). Each profile reads its key from the environment. Edit the model and the prices to match your contracts.
Other vendors
Any endpoint that speaks one of the three protocols needs only a profile with the endpoint's URL. Any other endpoint needs an adapter.

