Norwegian AI Barometer / Method

How the barometer is built.

This page is for anyone who wants to understand or check the numbers. It covers why we test, the principles behind the test, exactly how answers are scored and what the numbers cannot be used for.

Background

Why a Norwegian barometer?

The well-known language model tests mostly measure English, coding, maths and knowledge questions. They say little about what Norwegian businesses actually use AI for: reading an invoice, answering a customer, summarising a meeting or writing in Nynorsk.

When Aprex builds AI solutions, we have to choose a model for each task. That takes numbers on Norwegian work, not English exam questions. The barometer is the same measurements done systematically and published, so others can use and check them.

Models change from month to month, and new ones keep arriving. So the target is to run the test every week with the same tasks once runs start, and you can follow how the models develop over time.

Foundation

Eight principles behind the test.

  1. 01

    Controlled tasks

    Tasks require explicit JSON fields that can be checked. Free writing is not measured in v0.5.

  2. 02

    Key before the run

    Answer keys and scoring rules are written before any model answers. The task set is frozen before candidate calls; changes require a new version and a new run. No edits because a model disagrees.

  3. 03

    Equal conditions

    The same tasks and declared conditions within each track. Subscriptions and APIs are assessed separately.

  4. 04

    Unpublished task set

    12 public tasks are shown with their keys; 12 calibration and 24 holdout tasks are not public and stay off the site, out of the website source and out of metadata. The repo is private, but hidden tasks are not immune to training. Holdout used for tuning is retired with a versioned new holdout.

  5. 05

    Automatic, no judges in the score

    Scores come from strict field rules, with no AI judge. Share of correct fields (fieldAccuracy) is diagnostics only and never decides the ranking. Free prose quality is a future separate track.

  6. 06

    Observed rank

    Rank shows observed scores, not proven superiority. Stratified paired comparisons on the same tasks are planned. Results are reported per split with holdout-24 as the primary comparison; results from public tasks and calibration are never combined into a claimed measurement on unseen tasks.

  7. 07

    Cost kept apart

    Score, API cost and response time sit side by side and are never mixed. Subscriptions report no API cost.

  8. 08

    A person decides

    No run is published before a person has reviewed the outliers.

Task set

48 tasks total, six work types.

Each of the six types gets eight tasks: two public, 2 calibration and 4 holdout. Two per type are public with their answer key, so anyone can see what the models get. 12 are available now; the remaining 36 are calibration and holdout, which are not public. Difficulty levels are author-graded (2 easy/3 medium/3 hard per type), not empirically calibrated. The tasks are in Norwegian.

TypesDocument extraction, Customer reply facts, Meeting decisions, Applying supplied rules, Classification, Nynorsk word forms
ContentFictional companies, people, documents and rules. No customer data, not even anonymised.
LanguageThe Nynorsk type is written in Nynorsk; the other types are in Bokmål.
RegulationSupplied fictional rules in each task. Does not test legal expertise and is not legal advice. No expert verification; model agreement never validates a key.
Each task hasTask text with rules for unknown, missing or conflicting information, key with evidence per field, an approved alternative, wrong answers including hard negatives, and strict field rules. Tasks are never chosen to favour any particular model or provider.
CheckThe key and the approved alternative must score 100, and wrong answers at most 0, before a task can be used. Each key is source-checked before the freeze; the revised calibration split is being assessed as part of method development. Nynorsk has only listed variants and does not measure fluency.
Run conditions

The subscription pilot and planned API track.

Subscription pilotLocal runner for Codex and Claude Code with existing subscription sign-in. No API keys or pay-as-you-go fallback. First approved measurement pending.
Product and modelProduct, requested model, reasoning level and CLI version are recorded. Actual model is unknown unless returned by the tool.
Planned API trackVercel AI Gateway with exact model IDs. A separate track, not enabled by the subscription runner.
Instructions«Du løser en arbeidsoppgave for en norsk bedrift. Følg instruksjonene i oppgaven nøyaktig, og svar bare med det oppgaven ber om.» (Norwegian: you solve a work task for a Norwegian business; follow the task exactly and answer only what it asks.)
TemperatureUnknown in the subscription pilot. Planned API track: 0 where supported.
ReasoningRequested level is recorded per product and model. This does not mean equal compute across models.
Tools and web searchOff
Max answer lengthUnknown in the subscription pilot. Planned API track: 2000 tokens.
Time limit120 seconds
Repeats3 per task
Errors and quotaThe subscription runner stops and preserves completed answers. Missing answers are listed separately, not automatically scored zero. Resuming is an explicit action.
Splitprepare --split public|calibration|holdout|all (default public, holdout needs an explicit split); subscription config taskSplit (actual config: calibration). Calibration is used for method checks and calibration. The primary comparison is the holdout total (24 tasks). Holdout used for tuning is retired with a versioned new holdout.
TrackAPIs, terminal products and browser chats have different product instructions. We report the surface and do not treat them as the same test.
Unpublished tasksThe repo is private, but hidden tasks are not immune to training. Calibration and holdout are not public: they are not shown on the site and are not in the website source or metadata. A runner sends its assigned task text to the provider on each run.
Scoring

How an answer earns points.

Strict fields (all types)

All six types require JSON with exactly the required fields. Each field is compared with the key after normalisation: dates become YYYY-MM-DD, amounts become numbers so «15 625,00» and «kr 15 625,-» count the same, digit fields reject letters, categories ignore case, and boolean fields accept true/false, yes/no and ja/nei. Every field must match, else 0. Null is valid only where the key explicitly allows it (allowNull plus expected null). Extra or missing fields, wrong types and non-finite values score 0. No partial credit in the v0.5 ranking. Share of correct fields (fieldAccuracy) is diagnostics only: all fields count equally within a task. The runner reports fieldCorrect, fieldTotal and fieldAccuracy per model and per split; the diagnostics never enter the ranking.

Rejected with 0

Answers that are not pure JSON, have extra or missing fields, wrong types, prose in a field that requires a date or boolean, contradictory prose or non-finite values score 0. The JSON fields are the whole answer; surrounding free prose is not scored.

  • invalid field values such as “NOT 2026-11-14”; false or no is correct when required by the key
  • extra fields, missing fields and wrong types
  • null where the key does not explicitly allow it
  • non-finite values (NaN/Infinity) and invalid formats

Future track

Free prose quality is not measured in v0.5. Any future rating is reported separately and never mixed into the numeric score.

From task to total

How the table numbers are calculated.

Task scoreMean of the three runs (each 100 or 0; missing is not scored as 0)
Type scoreMean of the tasks in the type within one split (primary: 4 holdout tasks)
Total scoreMean of the six types within one split. All types count equally.
Primary comparisonThe holdout total: 24 reserved tasks, 4 per type. Results are reported per split; a pooled mean across all splits is not an independent ranking.
RankObserved scores, not proven superiority. Stratified paired comparisons on the same tasks are planned. Results from public tasks and calibration are never combined into a claimed measurement on unseen tasks. The local CLI computes no confidence intervals.
StabilitySpread between the three runs
CostAPI-track actual price per call, including hidden reasoning, scaled to 100 tasks. Given in US dollars excluding VAT, because providers bill in dollars. Subscriptions report no API cost.
Response timeMedian time from sending the call to receiving the full answer
Quality control

Nothing is published automatically.

Before a runAutomatic checks: the self-test of every task and scoring rule must pass. Each key is source-checked before the freeze; the revised calibration split is being assessed as part of method development.
CompletenessEvery model has answered all 48 tasks in all three runs (12×48×3=1728 answers with the current catalog, which is not fixed). Missing is not full coverage. Results are reported separately for public tasks, calibration and holdout.
Error rateAt most 5 percent per model
Outlier listModels that moved more than 15 points since last week, missing or failed calls, and 10 percent randomly chosen answers (173 answers with the current catalog) plus outliers. The pilot measures actual time.
ApprovalA person at Aprex reviews the outlier list and records approval in the results file. No auto-approval. Final publication is pending; a run counts as approved only with approval recorded in the results file.
The websiteThe site does not build if a run has invalid numbers, a missing work type, missing approval/CSV, wrong version/repeats/coverage, or the protocol is draft with published runs.
Versions

Numbers are compared only within one task set.

The task set is versioned. New versions are made as needed: any change to a task, key or scoring rule requires a version bump and a new run. In the week a new version starts, we run both the old and the new so the trend can be linked. Changes to tasks, scoring and the model list go in the changelog on the barometer page. Holdout that is used for tuning or becomes known is retired with a versioned new holdout. No edits because a model disagrees.

Data

Download and use the numbers.

Every run is published as a CSV file with one row per model, and the barometer page carries structured data (schema.org Dataset). The numbers are free to use with Aprex credited and a link to the barometer.

ColumnContent
weekWeek of the run, e.g. 2026-U41
model_idModel ID in AI Gateway
modelModel name
providerProvider
tiertopp (top) or rimelig (budget)
totalTotal score 0–100
ci_lowLower bound, interval for future runs
ci_highUpper bound, interval for future runs
dokumentuttrekkWork type score 0–100
kundesvarWork type score 0–100
oppsummeringWork type score 0–100
regelverkWork type score 0–100
klassifiseringWork type score 0–100
nynorskWork type score 0–100
cost_per_100_usdMeasured API price for 100 tasks, USD excl. VAT (API track; subscriptions report no API cost)
median_latency_msMedian response time in milliseconds
error_rateShare of calls that failed after one retry, 0–1
Limits

What the barometer cannot tell you.

  • Results apply to these 48 controlled tasks, not all Norwegian business needs. A model may be stronger or weaker on your own tasks, and free writing is not measured.
  • Strict all-or-nothing gives 0 on one mistake. That is deliberately strict in v0.5 to avoid false partial credit.
  • Running through an API with fixed settings is not the same as using ChatGPT, Claude, Gemini or Copilot in the browser, where the provider adds its own instructions and tools. API and subscription are separate tracks.
  • Models are updated often, sometimes without a new model ID. A result applies to the product, model ID, CLI version where relevant, and the week it was measured.
  • Rank shows observed scores, not proven superiority.
  • Difficulty levels are author-graded, not empirically calibrated.
  • Temperature 0 makes answers stable but not always identical. That is why each task runs three times. (API track; temperature is unknown in the subscription pilot.)
FAQ

Technical questions

Who decides the answer key?
Aprex writes each key before a run and links every field to the task text or a stated language source. The program checks answers against that key. Passing self-tests verifies the checks on those examples; it does not prove that our key is infallible. The task set is frozen before candidate calls; confirmed errors require a new version and recalculation of affected results. No edits because a model disagrees.
Why temperature 0?
Temperature 0 is planned for the API track where supported. It does not eliminate all variation. In the subscription pilot we cannot control or verify temperature, so it is recorded as unknown.
Why three runs per task?
Answers vary slightly even at temperature 0. Three runs give a more reliable mean and show how stable each model is.
Why no AI judges in the score?
AI judges can be wrong and prefer their own style. Fixed rules can be checked by anyone. Free prose quality is a future separate track and is never mixed into the numeric score in v0.5.
Why is web search off?
We measure what the model does with the information it is given. With web search, results would depend on the search engine, the timing and which pages exist.
How are reasoning models handled?
We record the requested reasoning level per product and model. Identical level names do not imply equal compute, and hidden product settings may be unknown. The subscription pilot does not report measured API cost.
Can I repeat the test myself?
Yes, with the 12 public tasks. Task text, answer keys and the full method are open, so you can run them against the same models and compare. Calibration and holdout are not public and are not in the website source or metadata, but the repo is private without immunity to training.
I found an error. What do I do?
Write to post@aprex.no. Confirmed errors are fixed in a new version with a new run and recorded in the changelog.
Independence

No provider influences the numbers

No provider pays for or influences the barometer, and none sees results before they are published. Aprex itself uses models from several of the providers in the solutions we build.

Questions about the method?

Write to us if you want to know more, have ideas for tasks or have found something that should be fixed.

Email Aprex →