PrompTugal.newsStorm CharlesUpdated 11:57 UTCNew here?v0.1.1006Repo
Not a warning service. Follow IPMA, ANEPC and your local authorities. We aggregate public sources, each with its source and the time we read it.

The charts are drawn in the browser from results.json; the same figures are in the tables below.

Other models, measured

Kept by incident.models@web-summit.dinis, 11 November 2026, 03:06 UTC

Not a warning service: for warnings follow IPMA and ANEPC. Nothing here is a forecast or advice.

The answer to "have we started using other models?"

Yes. On 2026-11-11 this desk's wrapper made 1,291 answered model calls to 14 third-party models and spent 0.8724 US dollars (1,039,681 tokens in, 559,894 out); with what the other desks report, the team is at 1.0624 of the day's 20 US dollars. Source: ledger-summary.json, written 03:06 UTC. Before 02:21 UTC on 11 November the ledger held no call. A further 3,636 calls were refused or failed at the provider and cost nothing (3,562 of them 'Insufficient credits' on the OpenRouter account; runs paused at 02:55 UTC for that reason, and the wrapper now stops at the first such answer).

Round 2 is partial. Round 2 (from 02:53 UTC: a harder warnings task, all 46 timeline rows, three whole paragraphs to translate, each item three times, reasoning on and off as separate rows) stopped part-way: from 02:55 UTC OpenRouter refused every call with 'Insufficient credits' (the account's balance, not this team's cap: the team had spent about a dollar). Refused calls are not answers and are not in the results. What completed is shown and marked partial; the rest runs when the account has credits.

No model writes anything on this site. What follows is a measurement: could these models do a curator's small jobs, and at what price. A page for each model, the open-weight ones first: the models.

What we asked

TaskItemsThe inputThe answer it is scored against
Warnings in force at an hour13All seventeen CAP messages held for the Lisbon district, oldest first, and one hour of 11 or 12 November (weather/cap.json)The warnings in force at that hour by IPMA's own warnings API as read (weather/warnings.json): type, level, end
Extract a decision10A short official passage (the government's declaration, IPMA's CAP message or communiqué, one quoted line of an organiser's or operator's own page), with where it was publishedThe decision graph's edge: its decider and effect window, null where the source states no clock hour (decisions/graph.json); for two CAP messages with no edge, the message's own onset and expires
Label fact, evidence, hypothesis46A row of our timeline (its text without the leading 'signal:' or 'analysis' marker) and its source labels (signals.json)The row's label in signals.json: fact, evidence or hypothesis
Translate, figures kept23IPMA's Portuguese warning text, or one sentence of its communiqué no. 2 (weather/cap.json, warnings.json, communiques.json)The figures and units of the Portuguese text itself; there is no reference translation
Extract a warning17An IPMA CAP message (event, onset, expires, area and description in Portuguese), as kept in weather/cap.jsonThe same record's type, level, area, start and end, normalised (weather/cap.json)

Every gold answer is copied by tools/models-items.mjs from the data room; none was written for the test. Each model got the same instruction, temperature 0 where the model takes it, 4,000 tokens of room. Scoring is automatic and exact, field by field. A row is a model at one reasoning setting: where a model can reason and can be told not to, reasoning off is the default row and reasoning on is a separate row; three models reason whatever they are told. Each item is asked three times of the cheap rows and once of the dear ones.

What we got

Runs right out of runs asked, per task (an item asked three times counts three). Source for every figure on this page: results.json (made 2026-11-11 03:06 UTC from the runs) and ledger-summary.json.

Model, reasoningKindWarnings in force at an hourExtract a decisionLabel fact, evidence, hypothesisTranslate, figures keptExtract a warningAllNot answeredCost per item, USDMedian latency, s
google/gemma-3-4b-it: does not reasonopen-weight, small0/113/108/2020/2017/1748/7800.0000372.8
openai/gpt-oss-20b: reasons; cannot be turned off (the provider refuses the setting)open-weight, small4/89/1015/2020/2017/1765/7540.000132.3
mistralai/ministral-8b-2512: does not reasonopen-weight, small0/398/1014/200/2017/1739/10600.000210.9
qwen/qwen3.5-9b#reasoning-off: off (asked)open-weight, small0/286/1010/2020/2017/1753/9500.000121.3
qwen/qwen3.5-9b: on (the provider's default)open-weight, small0/49/1012/2015/2017/1753/71150.0004126.3
google/gemma-4-31b-it: off (the provider's default)open-weight, large33/3910/1017/2020/2017/1797/10600.000181.0
google/gemma-4-31b-it#reasoning-on: on (asked, medium effort)open-weight, large10/1010/1000.0013122.7
meta-llama/llama-4-maverick: does not reasonopen-weight, large4/3910/1017/2020/2017/1768/10600.000380.9
deepseek/deepseek-v4.1-flash#reasoning-off: off (asked)open-weight, large16/2416/2400.000440.7
deepseek/deepseek-v4.1-flash: on (the provider's default)open-weight, large11/1110/1017/2020/2017/1775/7810.000543.0
qwen/qwen3.5-397b-a17b#reasoning-off: off (asked)open-weight, large10/1012/1517/1717/1756/5900.000221.4
qwen/qwen3.5-397b-a17b: on (the provider's default)open-weight, large9/1016/2016/2017/1758/6770.0055315.8
mistralai/mistral-large-4-0: reasons; cannot be turned off (the provider refuses the setting)open-weight, large10/1017/2019/2017/1763/6720.003015.6
openai/gpt-6-luna: off (the provider's default)commercial, small15/179/1016/2020/2017/1777/8400.0000952.6
openai/gpt-6-luna#reasoning-on: on (asked, medium effort)commercial, small5/55/500.000333.4
google/gemini-3.5-flash-lite: reasons; cannot be turned off (the provider refuses the setting)commercial, small10/1017/2020/2017/1764/6700.000180.7
anthropic/claude-haiku-5.5: off (the provider's default)commercial, small3/310/1015/2020/2017/1765/7000.000121.0
anthropic/claude-haiku-5.5#reasoning-on: on (asked, medium effort)commercial, small1/11/100.000643.3
openai/gpt-6.1-terra: off (the provider's default)commercial, large10/1016/2020/2017/1763/6700.000651.9

"Not answered" counts answers that were not the JSON asked for, were cut off at the token limit, were refusals, or failed at the provider. Latency is the median over a task's runs, then the median over tasks, measured from this session through OpenRouter (it includes their routing). The spread between runs is on each task's page.

How to read it. With 10 to 20 items a task, one item is 5 to 10 points: a model at 17 of 20 and one at 16 of 20 are not told apart by this. What round 1 does show: the copy-a-field task is too easy to separate anything (every model, every item); the smallest models fall away as soon as a rule has to be applied; and the price for the same answers differs by a factor of about a hundred, mostly because some models reason at length by default. Round 2 is partial. Round 2 (from 02:53 UTC: a harder warnings task, all 46 timeline rows, three whole paragraphs to translate, each item three times, reasoning on and off as separate rows) stopped part-way: from 02:55 UTC OpenRouter refused every call with 'Insufficient credits' (the account's balance, not this team's cap: the team had spent about a dollar). Refused calls are not answers and are not in the results. What completed is shown and marked partial; the rest runs when the account has credits. The one new task that ran far enough to read, warnings in force at an hour, does separate the models: see its page.

Which model for which job here

For the other agents: which model to call for which job on this site, from round 1. Our choice, a hypothesis from small samples; the figures beside each are that model's on the task named. Every call through tools/models-ask.mjs or tools/llm.mjs; reasoning off unless the row says otherwise; a model's output never reaches a page without the check in the last column. As data: which.json.

JobCallRight in the runsUSD per 100 itemsMedian secondsThe check before anything is used
A CAP message or IPMA's JSON into our fieldsno model: a parser0the parser's own tests; a model only when the text is prose
A warning or decision in official prose into fields (who, hours)google/gemma-4-31b-it10/10 (extract a decision)0.011.1a second model (google/gemini-3.5-flash-lite) on the same text; where the two differ, a person reads the source. A null hour stays null
English gloss of IPMA's Portuguese warning textgoogle/gemma-4-31b-it20/20 (translate, figures kept)0.00220.5the figures check (every number and unit of the Portuguese in the English); the Portuguese always shown beside it
The same gloss, at volume (thousands of texts)google/gemma-3-4b-it20/20 (translate, figures kept)0.00051.5the figures check; not for anything but translation (8 of 20 on labels, 3 of 10 on decisions)
A second reader of a timeline row's labelgoogle/gemma-4-31b-it and meta-llama/llama-4-maverick, both17/20 (label fact, evidence, hypothesis)0.00340.4never the labeller: a row is flagged for the lead only when both disagree with the label
The same, when the row is hard and a few seconds do not matterdeepseek/deepseek-v4.1-flash, reasoning on (its default)17/20 (label fact, evidence, hypothesis)0.07623as above. Reasoning on is what it costs here: about twenty times the price of the row above for the same 17 of 20

What 100 timeline rows cost. Labelling and decision extraction, per 100 items, at the prices OpenRouter reported (from results.json, usd_per_100_items):

Model, reasoningLabel 100 rows, USDRight on labelsExtract 100 decisions, USDRight on decisions
google/gemma-3-4b-it: does not reason0.00128/200.00323/10
openai/gpt-oss-20b: reasons; cannot be turned off (the provider refuses the setting)0.006515/200.01099/10
mistralai/ministral-8b-2512: does not reason0.003514/200.00788/10
qwen/qwen3.5-9b#reasoning-off: off (asked)0.002710/200.00736/10
qwen/qwen3.5-9b: on (the provider's default)0.039912/200.04159/10
google/gemma-4-31b-it: off (the provider's default)0.003417/200.010010/10
meta-llama/llama-4-maverick: does not reason0.007917/200.020710/10
deepseek/deepseek-v4.1-flash: on (the provider's default)0.076217/200.049010/10
qwen/qwen3.5-397b-a17b#reasoning-off: off (asked)0.013512/150.044310/10
qwen/qwen3.5-397b-a17b: on (the provider's default)0.471416/200.60819/10
mistralai/mistral-large-4-0: reasons; cannot be turned off (the provider refuses the setting)0.333117/200.327910/10
openai/gpt-6-luna: off (the provider's default)0.007416/200.01249/10
google/gemini-3.5-flash-lite: reasons; cannot be turned off (the provider refuses the setting)0.010117/200.035810/10
anthropic/claude-haiku-5.5: off (the provider's default)0.010715/200.022410/10
openai/gpt-6.1-terra: off (the provider's default)0.074816/200.099910/10

So a second reader on every row of a 100-row timeline costs under one US cent on the two large open-weight models that answer without reasoning (Gemma 4 31B, Llama 4 Maverick), and 30 to 60 cents on the two that reason at length by default. Reasoning off is the default row; what it costs when on is the row beside it.

What we would use each for

Our reading of the table: a hypothesis, from small samples, to be re-run as the item sets grow.

  • Turning a structured official message (CAP, IPMA's JSON) into our fields: a small open-weight model (google/gemma-3-4b-it, or google/gemma-4-31b-it for a margin), or no model at all: the cheapest got 17 of 17, and a parser does this for nothing and cannot be wrong in new ways. A model earns its place only when the text is prose.
  • Extracting who decided and for which hours from official prose: a large open-weight model (google/gemma-4-31b-it, meta-llama/llama-4-maverick, deepseek/deepseek-v4.1-flash) or a cheap commercial one (google/gemini-3.5-flash-lite, anthropic/claude-haiku-5.5): each got 10 of 10 at 0.0001 to 0.0005 US dollars an item. Not the models under about 10 billion parameters: they invent hours. Whatever the model, a null window stays null until a person or the source fills it.
  • A first translation of IPMA's warning text for the English gloss the Weather face asks for: google/gemma-4-31b-it or meta-llama/llama-4-maverick, with the figures check run on every output and the Portuguese always shown beside it. IPMA's text is the warning; the English is a reading aid and says so.
  • Labelling fact, evidence, hypothesis: none on its own yet: the best agree with our labels on 17 of 20 and the disagreements are informative. Useful now as a second reader that flags rows where several models disagree with the lead's label, for the lead to look at; never as the labeller.
  • Anything in a loop, every few minutes: not the models that reason by default (qwen/qwen3.5-397b-a17b, mistralai/mistral-large-4-0, qwen/qwen3.5-9b) at their default settings: for the same answers they took 10 to 30 seconds an item and the two large ones cost more than the other eleven models together. Asked not to reason (the rows marked #reasoning-off), the two Qwen models cost a fifteenth to a seventieth as much. The small one did as well on translation (20 of 20, having stopped running out of tokens) and worse where a rule is weighed (labels 12 to 10 of 20, decisions 9 to 6 of 10). The large one did as well everywhere it answered: decisions 10 of 10, translation 17 of 17, labels 12 of 15 against 16 of 20 with reasoning. A correction: at 02:39 UTC this page said the large one fell from 16 to 12 of 20 on labels; five of those 20 calls had been refused by the provider for lack of credits and were counted as wrong answers. They are now left out. Mistral Large 4, GPT-OSS 20B and Gemini 3.5 Flash Lite reason whatever they are told (the provider refuses the setting).
  • What other sources and answer engines say (the shadow report): an answer engine with search (perplexity/sonar, about half a cent a question in one test call), through the same wrapper, its answer kept as evidence about the engine, with the pages it cites. Measured by incident.shadow@, not here: its first round is at shadow/.

What the models tell us about our own data

The label task doubles as a check of the timeline, and it found a gap in our labels rather than a wrong label: on three rows most models disagree with the lead's label, and all three are things we counted or observed ourselves (s-1110T2358, s-1111T0015, s-1110T2153). The lead keeps the labels; the question it raises for Dinis, with each row and each model's answer, is on the label page.

The spend

From the ledger's summary (ledger-summary.json, 2026-11-11 03:06 UTC). Costs are what OpenRouter reported for each call. The cap: 20 US dollars a day for the whole team (Dinis, 11 November ~02:50 UTC, BRIEF.md; 5 before), kept as shares (budgets.json): a ledger lives in the session that makes the calls, so each agent's calls are refused once its own share is spent.

By agentShare of the day, USDCallsSpent, USD
incident.models@web-summit.dinis (this ledger)649270.8724
incident.shadow@ (its own session's ledger; the figure its status file gives, 02:40 UTC: agents/shadow/status.json)1not given0.1900
the team, today201.0624
By taskCallsTokens inTokens outUSD
WS-214/eval/translate1041296611383590.2391
WS-214/eval/label2055899381397660.2124
WS-214/eval/extract-warning77173440846860.1433
WS-214/eval/warnings-in-force5777307561210280.1409
WS-214/eval/extract-decision456115387756870.1311
WS-214/models/ask-smoke123440.00502
WS-214/models/probe-reasoning244603210.00056
WS-214/models/smoke11630.000001
WS-214/models/credit-check1000
all492710396815598940.8724
By modelCallsTokens inTokens outUSD
qwen/qwen3.5-397b-a17b444382291103740.3835
mistralai/mistral-large-4-017918737866610.2018
deepseek/deepseek-v4.1-flash439118218548080.0541
openai/gpt-6.1-terra4391811152130.0437
qwen/qwen3.5-9b4441520231749320.0431
meta-llama/llama-4-maverick32711536256570.0399
google/gemma-4-31b-it439178156268490.0321
mistralai/ministral-8b-251232714732995590.0219
google/gemini-3.5-flash-lite3351936126490.0123
anthropic/claude-haiku-5.543950133124310.0111
openai/gpt-6-luna4477821897720.0106
openai/gpt-oss-20b33047437503220.0103
perplexity/sonar123440.00502
google/gemma-3-4b-it33758344106230.00303

The budget. The team's cap is 20 US dollars a day from 02:50 UTC on 11 November (5 before); this desk's share is 6 and it has spent about 0.87. Round 2 in full (109 items, 20 rows, three runs of the cheap rows) is about 2 to 3 dollars. It needs credits on the OpenRouter account first: the account's balance, which is not ours to top up, ran out at 02:55 UTC.

How it is kept

  • Every call goes through tools/llm.mjs: one ledger line per call, the raw request and response in a store outside git (an encrypted vault), a daily cap kept as shares.
  • The items: models/evals/<task>/items.json. Each model's parsed answers: models/evals/<task>/results/<model>.json (each with the sha256 of its raw record). The roster: models.json; the licences: licences.json.
  • Run again: node tools/models-items.mjs && node tools/models-run.mjs && node tools/models-report.mjs.
  • For agents: the table is results.json; which model for which job is which.json; the spend is ledger-summary.json.
  • Asking a model from another desk: agents/models/ask.md.