Choosing models
Choose the model each agent in your machines starts on: one model for every agent, or one for each. The models offered are your own AI keys' - each provider's list for your key, fine-tunes and all.
wm
$ wm models --agent codex
MODEL NAME PRICE SCORE
openai/gpt-6.1-sol gpt-6.1-sol $2 / $10 1481
openai/gpt-6-luna gpt-6-luna $0.1 / $0.5 1441
Price: a million tokens in / out, each provider's own list price. Wheelmachine charges nothing for it.
Score: LMArena text leaderboard, 2026-10-28 (CC BY 4.0), https://lmarena.ai/leaderboard/text
$ wm models use codex openai/gpt-6.1-sol
Codex starts on openai/gpt-6.1-sol from its next start.Python
models = client.models.list(agent="codex")
print([m.id for m in models.data]) # ['openai/gpt-6.1-sol', 'openai/gpt-6-luna']
codex = client.agents.choose("codex", "openai/gpt-6.1-sol")
print(codex.state, codex.starts_on) # chosen openai/gpt-6.1-solTypeScript
const models = await client.models.list({ agent: "codex" });
console.log(models.data.map((m) => m.id)); // [ 'openai/gpt-6.1-sol', 'openai/gpt-6-luna' ]
const codex = await client.agents.choose("codex", "openai/gpt-6.1-sol");
console.log(codex.state, codex.starts_on); // chosen openai/gpt-6.1-solcurl
curl -X PUT https://api.wheelmachine.ai/v1/agents/codex/model \
-H "Authorization: Bearer $WHEELMACHINE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "openai/gpt-6.1-sol"}'In the dashboard, the Models page has a row for every agent, and Same model for all agents above them: pick a model and it is saved. An agent's tile on a machine's Apps tab has the same pick.
The lists#
A model's id is its provider and that provider's own id for it, such as openai/gpt-6.1-sol. Lists are read with
your key and refreshed every hour; wm models --refresh reads them again. Only models an agent codes with are
listed. A provider that does not answer shows its last list; one that refuses your key shows none. Providers listed: Anthropic,
OpenAI, Gemini, OpenRouter, DeepSeek, xAI, Mistral AI, Groq and Alibaba Cloud Model Studio.
Prices and scores#
Each model says what it costs and how it scores, where these are known, so that you can choose between models by company, by price and by score - the dashboard's pick filters and sorts by each.
- Price (
price) is the list price of the provider your key is with, per million tokens in and out, in US dollars, with no discounts. You pay that provider with your own key: Wheelmachine charges nothing for a model. In an account counted in pounds or euros, the dashboard andwm modelsshow about what the price is in your currency at our rate beside it - "$2 (about £1.60)" - as a guide; the provider charges its own price, in US dollars. - Score (
intelligence) is the model's score on LMArena's text leaderboard, where people vote between two models' answers; higher is better. It is read once a day, under CC BY 4.0.
A model with no known price or score has none (null).
Each agent, and every agent#
Each agent takes the providers it can use: Codex works with OpenAI and OpenRouter keys, Gemini CLI with Gemini's, and
Aider, Goose, Qwen Code, Hermes Agent and OpenClaw with several. One model for every agent reaches each agent that can
use its provider; the others start on their defaults. A model chosen for one agent wins over the one for every agent.
wm models chosen lists what each agent starts on, and says why where it cannot take its choice - a key
you have none of, or a model its provider no longer lists.
When it reaches your machines#
A choice reaches your running machines at once, and the others when they next start. An agent
starts on it at its next start: one running now keeps its model, and its tile on the Apps tab says
Restart to use it (wm apps ls says so too). Inside an agent, its own model setting still works, and
stays until you choose again here: the newer of the two is the one it starts on. In an organisation that limits you to a
list, a model not on the list is refused inside an agent too (Allowed models).
Allowed models#
In an organisation, owners and admins may limit the models people can use: a list of one to ten, for everyone, a team, a team
level (member, approver, team manager or full manager) or one person. The most specific list applies. With none, every model is
allowed. Owners and admins are never limited. The API and wm call a team level a role (--role).
wm
$ wm models allow --org openai/gpt-6.1-sol deepseek/deepseek-v4-pro
Everyone in Acme may use openai/gpt-6.1-sol and deepseek/deepseek-v4-pro.
$ wm models allow --role manager openai/gpt-6.1-sol
Team managers may use openai/gpt-6.1-sol.
$ wm models allowed
LIST FOR MODELS
organisation Acme openai/gpt-6.1-sol, deepseek/deepseek-v4-pro
role Team managers openai/gpt-6.1-sol
$ wm models allow --role manager --any
List taken away: those it applied to may use every model again, unless another list applies to them.Python
client.models.allow(["openai/gpt-6.1-sol", "deepseek/deepseek-v4-pro"], organisation=True)
client.models.allow(["deepseek/deepseek-v4-pro"], team="prj_01jb2xk3n4p5q6r7s8t9v0w1x2")
print([(l.level, l.models) for l in client.models.allowed()])
client.models.allow_any(team="prj_01jb2xk3n4p5q6r7s8t9v0w1x2")TypeScript
await client.models.allow(["openai/gpt-6.1-sol", "deepseek/deepseek-v4-pro"], { organisation: true });
await client.models.allow(["deepseek/deepseek-v4-pro"], { team: "prj_01jb2xk3n4p5q6r7s8t9v0w1x2" });
console.log((await client.models.allowed()).map((l) => [l.level, l.models]));
await client.models.allowAny({ team: "prj_01jb2xk3n4p5q6r7s8t9v0w1x2" });curl
curl -X PUT https://api.wheelmachine.ai/v1/models/allowed/roles/manager \
-H "Authorization: Bearer $WHEELMACHINE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"models": ["openai/gpt-6.1-sol"]}'A person on a list sees only its models and picks from them (allowed in GET /v1/models and
GET /v1/agents says which list it is); any other is refused. With one model there is nothing to pick. If a new list
leaves out their choice, the agent starts on the list's first model it can use. Owners and admins set lists under Allowed
models on the Models page.
The list also applies inside the machine, whatever an agent's own model setting says. With one of the organisation's AI keys, an agent can only chat with a model on the list, read (listing models among it), make embeddings and count tokens. Anything else is refused, in that provider's usual error format, which the agent shows as it is:
gpt-4o is not one of the models your organisation allows you to use. Allowed: openai/gpt-6.1-sol, deepseek/deepseek-v4-pro.
This is not open while your organisation sets the models you may use: only chat with these models is: openai/gpt-6.1-sol, deepseek/deepseek-v4-pro.A list covers the organisation's AI keys, not a person's own. A list, or a change of your role or your teams, reaches your running machines at once, and the others when they next start.
In an organisation#
Your choices are your own, for the machines you hold in one of its teams, with the organisation's AI keys: name the
team with --team (project in the API) when you are in more than one. The agents listed are
those your own machines carry. People with the billing role run no machines, so they choose no model.
Open in Claude