Model capabilities
What each model is strong at, where every number comes from, and how an assistant picks one
list_models tells an assistant which models exist. It does not say which one to use. Model capabilities adds that: per model, a score for eight aspects, each with its source and its date, and a call that turns "this is a coding task" into a ranked shortlist.
Being rolled out, behind the flag modelCapabilities (off by default). While
it is off, the badge, the Models page, the endpoints and the tools below do
not exist for the account.
The aspects, and who measures them
| Aspect | What the number is | Source | Key needed |
|---|---|---|---|
coding | Code Arena score (web development tasks, voted by people) | LMArena | No |
agentic | Agent Arena score (long tasks with tools) | LMArena | No |
reasoning | Intelligence Index, or the text arena's hard prompts without it | Artificial Analysis, else LMArena | AA only |
creative | Text arena score for creative writing | LMArena | No |
video | Text to video arena score | LMArena | No |
context | Context window, in tokens | OpenRouter | No |
speed | Median output tokens per second | Artificial Analysis | Yes |
cost | List price in USD per 1M input and output tokens | OpenRouter | No |
Three rules hold everywhere a number is shown:
- One source per aspect.
reasoninguses Artificial Analysis for every model once its key is set, and LMArena for every model until then. The two are never mixed in one ranking, and nothing is averaged. - No data means no number. A model a source does not list has
nullfor that aspect. It is named under "No data" and never ranked. - Every number carries its source and date. LMArena dates each leaderboard; OpenRouter and Artificial Analysis publish no date, so n8v shows the day it read them.
How to read a score
Each number appears twice. score is the source's own figure: an arena score of 1817.7, a context window of 1,000,000 tokens, $4 in and $20 out. normalized places it between 0 and 100 among the models n8v offers: 100 is the strongest of them on that aspect and 0 the weakest that was measured. For cost the scale is turned around, so 100 is the cheapest.
A normalized score is a position, not a percentage. A model at 50 is halfway between the weakest and the strongest n8v runs; it is not "half as good".
Effort levels
Sources measure a model at a particular effort level: LMArena lists "Claude Opus 5.5 (Max)", not Opus 5.5 in general. n8v matches that entry to the id that runs it, opus-5.5-max, and marks it exact. An id at another effort level shows the model's highest measured effort with exact: false and measured_as naming the entry. In the picker those badges have a dashed outline, and in tool text the number carries a ~. Price and context window belong to the model whatever the effort.
The same holds for variants. A source entry marked non-reasoning is a configuration n8v does not run, so its number is never used. A preview entry, or one with a qualifier n8v does not recognise, is used only when the plain entry is missing, and then as exact: false.
Freshness
Sources are read once a day at 05:17 UTC. A number is fresh while its last good read is under 48 hours old and the source's own date is under 30 days old. A failed read keeps the previous numbers and records the error beside them. An empty answer is refused, and so is one where any aspect lost more than half its rows while the kept numbers are under a week old. When a preferred source has gone stale and the next source for that aspect is fresh, the fresh one takes over.
In the app
The model picker shows a small badge on a model that places in the top three for coding, agentic work, reasoning, creative writing or video, for example "1st coding". Hover a row for every number it has.
The Models page (sidebar) has one table per aspect: rank, model and measured effort, the id to run it with, the source's number and the 0 to 100 bar, under a line that names the metric, the source, its date and its licence. Below the table it lists the models without data, and at the bottom the state of each source.
For assistants
recommend_model answers "which model for this work". It takes an intent (coding, agentic, reasoning, creative, video, cheap, fast) and optionally a provider, a max_cost and a limit:
{ "intent": "coding", "max_cost": 10 }For coding, best first. Pass the id as `model` to start_chat or send_message.
1. opus-5.5-max (Opus 5.5 Max): Code Arena score 1817.7, 1st of 43 measured (LMArena, 2026-11-09). Claude #1 has room (62% left).
2. sonnet-5.5-xhigh (Sonnet 5.5 X-High): Code Arena score 1774.3, 2nd of 43 measured (LMArena, 2026-11-09). Claude #1 has room (62% left).
Left out: gpt-6-astra-max (over the price limit).
No data for coding: fable-5.2, amp.model_capabilities lists every model with its scores, filtered by aspect and provider. list_models takes detail: "capabilities" to add a compact score per aspect to each id; without it the list is as short as before.
# A ranked shortlist for a kind of work
curl -sS "https://n8v.online/api/v1/model-capabilities/recommend?intent=coding&max_cost=10" \
-H "Authorization: Bearer $N8V_API_KEY"
# Every model's scores, here for two aspects of one provider
curl -sS "https://n8v.online/api/v1/model-capabilities?aspect=coding,cost&provider=anthropic" \
-H "Authorization: Bearer $N8V_API_KEY"
# The model list with a compact score per aspect
curl -sS "https://n8v.online/api/v1/models?detail=capabilities" \
-H "Authorization: Bearer $N8V_API_KEY"Any valid key may read capabilities and the model list. /recommend reads quota, so it needs chats:read, like GET /subscriptions. With the flag off all three answer 403 model_capabilities_off.
A recommendation only ranks models the account can run. It leaves out, with the reason, models that are not enabled, that need a ChatGPT sign-in, that cost more than max_cost, or that have no known price when a price limit is set.
Quota
Where subscription quotas are on, each pick says whether its subscription has room. A model whose subscription is at its limit moves to the end of the list and says until when. Unknown quota is reported as unknown and does not change the order. A key restricted to some repositories gets the ranking without quota, because quota covers the whole account.
The sources, and their limits
LMArena publishes its leaderboards as a dataset on Hugging Face under CC BY 4.0, with the publication date on every row. No key. Its scores come from people comparing two anonymous answers and voting, so they measure preference. That is a fair proxy for coding and writing quality and a weaker one for reasoning: reasoning from LMArena is the text arena restricted to hard prompts, not a benchmark with right answers. Its video arena ranks video generators, none of which n8v runs, so video has no pick today and names the source's leaders instead.
OpenRouter's public catalogue gives list price and context window, no key. The price is what the API costs per token; work on a subscription is not billed that way. The context window is the provider's, which can be larger than what an agent uses in a given chat. Free and per-request priced entries are not read as prices.
Artificial Analysis is optional and needs a key. Its free Data API allows 100 requests a day and gives the Intelligence Index and measured output speed. It no longer publishes a coding or an agentic index; both fields are always null in its API. The free tier is licensed for internal use with attribution, not for redistribution, so keep the flag to your own accounts while the key is set unless you hold its Pro or Commercial licence. Per-benchmark scores and context windows are part of Pro.
Models without data
A new model has no arena score until LMArena has collected enough votes on it. On 10 November 2026 that was Fable 5.2, released the day before: it had a price and a context window and nothing else. Models that no source lists under a matching name have no numbers at all: Amp, Ox Alpha, Qwen3 Coder 480B, GPT-5 Codex, GPT-5.4 Codex and GPT-5.3 Codex Spark.
Connect Artificial Analysis
- Sign in at artificialanalysis.ai and create an API key (free).
- Set it as
ARTIFICIAL_ANALYSIS_API_KEYin the app's environment and redeploy. - The next daily read fills
speedand movesreasoningto the Intelligence Index. The Models page shows the source as read.
Questions
Why does my model show a score it was not measured at? The source measured another effort level of it. The entry is named in measured_as, and exact is false.
Why is a model missing from a ranking? No source lists it under a name n8v can match. It appears under "No data".
Can I change the source? Each source is one adapter file with one interface (ready, pull). Which source answers which aspect is one table. See the feature notes in the repository.