Agent Model
| Name (singular): | Agent Model |
| Name (plural): | Agent Models |
| Alias (uri): | agent_model |
| Identifier (ID): | cerb.contexts.agent.model |
- Choosing a model
- Providers
- Endpoint overrides
- Icons
- Availability
- Priority
- Capabilities
- Ratings
- Usage tracking
- Records API
- Search Query Fields
An agent model configures a single LLM model that automations and AI agents can use. It holds the provider, the model ID, an optional API endpoint override, the connected account supplying credentials, the size of the model's context window, a block of provider-specific parameters, and a description of what the model can do and how it compares to the others you've configured.
Once a model exists, an automation references it by name rather than repeating a provider block inline:
llm.chat:
output: results
inputs:
model: haiku
messages:
0:
role: user
content: Summarize this conversation in one sentence.Choosing a model
You don't need to know a provider's model IDs. Once the provider and its connected account are set, the record's editor asks the provider which models that key can actually use and offers the live list.
This matters most for self-hosted OpenAI-compatible endpoints – llama.cpp, LM Studio, vLLM, or a local Ollama – where no hardcoded list could know what's currently loaded. For hosted providers, the live list is simply the current one.
A provider whose endpoint doesn't offer a model list falls back to a built-in set of known IDs.
Providers
The provider field is one of: anthropic, aws_bedrock, docker, gemini, groq, huggingface, ollama, openai, openrouter, pinecone, qwen, together, voyage, or zai.
A local provider such as ollama or docker needs no credentials, so connected_account_id is optional.
That list isn't a limit. Any service that speaks the OpenAI API or Anthropic API protocol works: set provider to openai or anthropic to match the protocol, then point api_endpoint_url at the service.
Endpoint overrides
api_endpoint_url overrides the provider's default endpoint. Leave it blank to use the provider's own. When set, it wins over any api_endpoint_url: left in params_kata.
This is what makes an unlisted provider usable – a self-hosted runtime like llama.cpp, LM Studio, or vLLM, or a hosted gateway, proxy, or vendor that emulates either protocol.
The field suggests endpoints as you type, drawn from the ones the selected provider is known to use. It stays free text, so an endpoint that isn't in the list still works. This matters most on aws_bedrock, which is addressed by region – the suggestions save looking up the hostname for the region your models are in.
Icons
Most models arrive over an OpenAI-compatible API, so the provider ID often can't name the actual vendor. icon and icon_color override the brand mark this model displays with; blank falls back to the provider's own icon. The icon must be a name from the shipped icon set – an unknown name renders as an empty box.
Availability
Every model has one of three availability statuses, set under Status in the editor:
| Status | Value | Meaning |
|---|---|---|
| Available | 0 |
Offered to any pool that matches it, and to the implicit default |
| Unlisted | 1 |
Skipped by pools, but still runs when an automation names it directly |
| Disabled | 2 |
Refused everywhere, and excluded from autocompletion |
Unlisted is the state for a model you want reachable by name without it turning up wherever something asks for "a model" – an expensive model kept for one script, or one you're still evaluating.
Availability is re-checked against each record every time a pool resolves, so unlisting or disabling a model takes it out of every pool immediately. Because unlisted and disabled models are excluded before a caller's own search runs, no search ever has to mention status, and no automation can widen a pool past what an admin allowed.
Priority
priority is the admin's fixed default order for a resolved pool, ascending – 0 is offered first and 255 last. Set it on the models you prefer and every automation that doesn't name a model follows that order.
It's the same priority convention used by automation event listeners, mail routing rules, and search indexes. Any explicit sort: in a search overrides it entirely.
Capabilities
Capabilities are facts about the model. They're yes-or-no, and they filter – a model that can't accept images isn't eligible for work that sends one, because sending it one is an error rather than a degraded result.
| Field | Filter | Meaning |
|---|---|---|
| Vision | hasVision: |
Does the model accept image inputs? |
| Thinking | hasThinking: |
Does the model support extended thinking? |
Attaching an image to a model without vision fails the request rather than quietly dropping the image, and the error names the model.
Ratings
Ratings are comparisons rather than facts. Each is a four-tier scale you fill in like a star rating, and each tier has a name you can type in a search query:
| Rating | Filter | Tiers (low to high) |
|---|---|---|
| Intelligence | intelligence: |
basic, efficient, advanced, frontier |
| Speed | speed: |
slow, moderate, fast, instant |
| Privacy | privacy: |
standard, no-training, zdr, local |
| Cost | cost: |
free, cheap, moderate, premium |
They work as floors and as sort orders, so one query can express several different kinds of requirement:
intelligence:>=advanced privacy:>=zdr cost:<=cheapPrivacy is a ladder where each step includes the ones below it, so privacy:>=zdr picks up self-hosted models too without naming them. It's a hard requirement rather than a preference on purpose: a retention rule that was requested and quietly ignored looks exactly like one that was honored.
Cost is the one rating where less is better, and the editor says so: the other three fields are hinted "Higher is better", while Cost reads "Lower is better. Price per token and caching." It's a rough tier for routing, not billing.
Ratings start blank, and an unrated model sorts last. An installation that never fills them in behaves exactly as it did before.
Each rating stores a sparse tier value – 10, 20, 30, 40, with 0 meaning unrated – rather than 1 through 4. The decade gaps leave room to insert a tier without a migration, and they keep the name separate from the value behind it, so the scale can move as the field does. When today's frontier models become ordinary, frontier is repointed and existing records read as the tier below it without a row being rewritten.
Repointing a tier is safe; renaming one is not. The labels double as quick-search
values -- privacy:zdr is the stored name -- so renaming a tier breaks every saved
search, worklist, and automation that filters on it.
Queries and bulk updates use the lowercase names above; the interface capitalizes them for display, so zdr reads as ZDR and no-training reads as No-training.
Usage tracking
Agent Model worklists offer two sparklines columns – Usage and Tokens – each with a 2h/1d/30d range toggle, drawn from the agent turn metrics. They're two columns rather than two series in one, because turns and tokens differ by orders of magnitude and bars sharing a stack share one scale.
Matching usage: and tokens: quick search filters query the same data. Each takes its own series names in parentheses:
| Filter | Series | Meaning |
|---|---|---|
usage: |
turns |
Every turn this model ran |
usage: |
rate_limited |
Turns the provider answered with 429 |
usage: |
overloaded |
Turns the provider answered with 529 |
usage: |
unreachable |
Turns where no response arrived at all |
usage: |
latency |
Response time of successful turns, in milliseconds, averaged by default |
tokens: |
input |
Uncached prompt tokens |
tokens: |
output |
Completion tokens |
tokens: |
cache_read |
Prompt tokens served from the provider's cache |
tokens: |
cache_write |
Prompt tokens written to the provider's cache |
usage:(rate_limited:>0 since:today)
tokens:(output:>1000000 since:-30 days)Token counts are their own key rather than a series inside usage: so that one autocomplete list never mixes token counts with millisecond durations.
Records API
These fields are available in the Records API and packages:
| Req'd | Field | Type | Notes |
|---|---|---|---|
api_endpoint_url |
url | An optional endpoint override; blank uses the provider default | |
connected_account_id |
number | The ID of the connected account supplying credentials | |
context_window |
number | The size of the model's context window, in tokens | |
created_at |
timestamp | The date/time when this record was created | |
has_thinking |
boolean | Does this model support extended thinking? (0 or 1) |
|
has_vision |
boolean | Does this model accept images? (0 or 1) |
|
icon |
text | An optional icon name overriding the provider's brand mark | |
icon_color |
text | An optional color for the icon | |
id |
number | The ID of this agent model | |
label |
text | A display label for this model | |
links |
links | An array of record type:id tuples to link to. Prefix with - to unlink. |
|
model |
text | The provider's model ID | |
| x | name |
text | The name of this agent model |
params_kata |
text | Provider-specific parameters in KATA | |
priority |
number | The default order in a resolved pool, 0 (first) to 255 (last) |
|
| x | provider |
text | The LLM provider ID |
rating_cost |
number | The cost tier: 0 unrated, or 10/20/30/40 |
|
rating_intelligence |
number | The intelligence tier: 0 unrated, or 10/20/30/40 |
|
rating_privacy |
number | The privacy tier: 0 unrated, or 10/20/30/40 |
|
rating_speed |
number | The speed tier: 0 unrated, or 10/20/30/40 |
|
status |
number | Availability: 0 available, 1 unlisted, 2 disabled |
|
updated_at |
timestamp | The date/time when this record was last modified |
Search Query Fields
These filters are available in agent model search queries:
| Field | Type | Description |
|---|---|---|
apiEndpointUrl |
text | The endpoint override, if any |
authentication |
virtual | Filter by the connected account supplying credentials |
authentication.id |
number | The ID of the connected account supplying credentials |
contextWindow |
number | The size of the context window, in tokens |
cost |
text | The cost tier: free, cheap, moderate, or premium |
created |
date | When the record was created |
fieldset |
virtual | Filter by custom fieldset |
hasThinking |
boolean | Does the model support extended thinking? |
hasVision |
boolean | Does the model accept images? |
icon |
text | The icon name overriding the provider's brand mark |
id |
number | The record ID |
intelligence |
text | The intelligence tier: basic, efficient, advanced, or frontier |
label |
text | The display label (partial match) |
model |
text | The provider's model ID (partial match) |
name |
text | The model name (partial match) |
priority |
number | The default order in a resolved pool |
privacy |
text | The privacy tier: standard, no-training, zdr, or local |
provider |
text | The LLM provider ID |
speed |
text | The speed tier: slow, moderate, fast, or instant |
status |
text | Availability: available, unlisted, or disabled |
status.id |
number | Availability as a number: 0, 1, or 2 |
tokens |
virtual | Filter by token usage – input, output, cache_read, cache_write |
updated |
date | When the record was last modified |
usage |
virtual | Filter by turn usage – turns, rate_limited, overloaded, unreachable, latency |
watchers |
virtual | Filter by watchers |