Learn › Time Series
·★ MEMBER·PAPER·13 min read

Paper Review: MetroLLM-Bench — What Happens When an LLM Runs the Ticket Machine. Why a 2.6 GB 4B Model Tied GPT-5.6, and Why Fine-Tuning Hurt at 27B

A 955-case benchmark that asks how well a language model can serve as the decision layer of a transit ticket kiosk. We read, from the paper alone, how a 4B QLoRA student beat GPT-5.6 on the deterministic tier and why PEFT gains shrink with model size until they turn negative at 27B.

Key points

  • MetroLLM-Bench is a 955-case benchmark across eleven categories, built on six real metro systems with 37 to 414 stations.
  • In each case the model calls up to six tools within twenty rounds and submits a terminal state through submit_assistant_state that the kiosk can render directly.
  • Scoring has two tiers, fourteen deterministic Tier 1 components and eight semantic-quality Tier 2 components, and the central comparison uses Tier 1.
  • Students were built with QLoRA at rank 16 from 600 examples drawn from the 717-case training partition, with 238 cases held out for evaluation.
  • A 4B Qwen 3.5 student trained with PEFT exceeds both GPT-5.6 tiers on Tier 1 (91.3 against 90.6 and 90.0), with a 2.6 GB Q4_K_M footprint.
ModalitytextTaskforecasting

MetroLLM-Bench: Evaluating Language Models as Transit Kiosk Runtimes

Primary source — what this article is built on

undefined2026-09-09→undefined2026-09-14same month

MetroLLM-Bench: Evaluating Language Models as Transit Kiosk RuntimesRemco Hendriks · 2026-09-09 · v1arXiv:2609.10016Paper page·PDF
undefined

We introduce MetroLLM-Bench, a 955-case benchmark for testing language models as the policy layer of a transit kiosk. It covers six real metro systems, ranging from 37 to 414 stations, and eleven categories that include routing, fare calculation, disruptions, accessibility, and adversarial input. In each case, the model must call structured tools and submit a machine-renderable terminal state containing an outcome, a per-ticket fare quote when applicable, and a kiosk action. Fourteen deterministic scoring components form Tier 1; eight semantic-quality components form Tier 2, six of which use a language-model judge. We report Tier 1 and the combined score of both tiers. A stratified 75/25 split reserves 717 cases for training-data generation and 238 for held-out evaluation. We evaluate twenty-six models from six vendors, of which twenty-three are ranked. On the held-out partition, a 4B Qwen 3.5 student trained through parameter-efficient fine-tuning (PEFT) exceeds both GPT-5.6 tiers on Tier 1 (91.3 against 90.6 and 90.0) and matches GPT-5.4 full at maximum reasoning effort (91.4), with a 2.6 GB Q4_K_M footprint. Larger 9B and 27B students provide no further Tier 1 improvement over the 4B student at this training scale. Across the four Qwen sizes, the PEFT gain over the corresponding base model decreases from +7.03 points at 2B (three training seeds) to -0.91 at 27B; every seed shows the same direction at every size. A deterministic rule-based baseline reaches 84.6 on Tier 1, with the remaining language-model advantage concentrated in policy adaptation, compound scenarios, accessibility, and temporal reasoning. Muse Glimmer 30B leads the composite ranking, and serving configuration alone moves the Qwen 3.5-to-3.8 comparison by 2.7 Tier 1 points. The benchmark, harness, reproduction guide, and fine-tuned students are released at https://github.com/continker/metrollm-bench.


Replacing the kiosk's code with prose

A transit ticket kiosk carries its fare tables, route topology, and disruption responses as a programmed state machine. Every time a station closes, the change has to pass through a ticket, a patch, regression tests, and a release window.

The paper "MetroLLM-Bench: Evaluating Language Models as Transit Kiosk Runtimes" (Remco Hendriks, arXiv:2609.10016, published September 2026) measures an alternative: replace that decision logic with a language model that reads a natural-language system description (the paper calls it a framebook), calls structured tools, and emits a terminal state the kiosk hardware can render directly.

In summary, the abstract says this. MetroLLM-Bench is a 955-case benchmark built on six real metro systems (37 to 414 stations) across eleven categories including routing, fares, disruptions, accessibility, and adversarial input. In each case the model must call structured tools and submit a machine-renderable terminal state containing an outcome, a per-ticket fare quote where applicable, and a kiosk action. Scoring has two tiers: fourteen deterministic components (Tier 1) and eight semantic-quality components (Tier 2, six of them judged by a language model). A stratified 75/25 split reserves 717 cases for training-data generation and 238 for held-out evaluation. Twenty-six models from six vendors were evaluated and twenty-three ranked. A 4B Qwen 3.5 student trained with PEFT exceeds both GPT-5.6 tiers on Tier 1 (91.3 against 90.6 and 90.0) and matches GPT-5.4 full at maximum reasoning effort (91.4), with a 2.6 GB Q4_K_M footprint. The 9B and 27B students do not improve on the 4B, and the PEFT gain falls monotonically from +7.03 points at 2B to −0.91 at 27B. A deterministic rule-based baseline reaches 84.6 on Tier 1; the remaining language-model advantage is concentrated in policy adaptation, compound scenarios, accessibility, and temporal reasoning. Muse Glimmer 30B leads the composite ranking, and serving configuration alone moves the Qwen 3.5-to-3.8 comparison by 2.7 points.

An analogy: a new hire with a binder

Imagine you start today at a station's service window. You have one binder (the framebook) listing this system's terminology, currency, operating hours, and local rules, plus six internal phone lines: routing, fares, station facilities, line information, disruptions, and the rulebook. When a passenger arrives you call whichever desks you need and finally hand in a fixed-format slip saying "show this route, this fare, this banner." If the slip is malformed the terminal rejects it and you redo it.

MetroLLM-Bench measures how well that new hire follows the binder. The paper is explicit that it tests whether a model can follow supplied rules, not whether it remembers a network from pretraining (§2.1).

What is in the benchmark: six cities, eleven categories, 955 cases (§2.1)

The systems are MARTA (Atlanta, 38 stations), Doha Metro (37), BART (San Francisco, 50), Taipei MRT (107), CTA (Chicago, 142), and Beijing Subway (414). They cover three fare models (flat, distance-based, flat with exceptions) and four currencies.

The eleven categories are A Routing, B Fare, C Disruption, D Accessibility, E Cultural, F Policy, G Multi-turn, H Adversarial, I Temporal, J Tool-Hallucination, and K Compound Stress. cases/generator.py combines category templates with each system's station pairs and disruption metadata, and derives route and fare ground truth mechanically from the benchmark's graph and fare engines. An independent annotator validated a 50-case sample of the answer key against the underlying network data (Appendix B.7).

One case: six tools and a submit tool (§2.2)

The model enters a ReAct-style loop with a budget of twenty tool rounds, calling route_planner, fare_calculator, station_info, line_info, disruption_feed, and knowledge_base, and ends the case with submit_assistant_state.

That terminal tool is the kiosk's render contract. Every submission must carry one of five outcomes (route_and_fare_ready, advisory_only, service_unavailable, request_declined, policy_answer_only), a kiosk action with a reason code, and a passenger-facing message; a fare quote with per-ticket line items is required when a fare is ready. A mock server validates the structure with Pydantic and returns HTTP 422 with field-level errors on inconsistency, which the runner feeds back so the model can correct itself within the remaining rounds.

for round in range(20):
    call = model.next_action(prompt, history)        # a tool call or a submit
    if call.name != "submit_assistant_state":
        history.append(tools[call.name](**call.args)) # one of the six tools
        continue
    ok, errors = validate(call.args)                  # Pydantic validation
    if ok: break                                      # terminal state accepted
    history.append({"http": 422, "errors": errors})   # let the model fix it

In the paper's Figure 1 example, a BART passenger travels during a Transbay Tube closure; the model reads the closure from disruption_feed, re-plans with route_planner to a route ending at West Oakland, and submits an advisory_only state pointing to the free bus bridge.

Scoring: a deterministic Tier 1 and a judged Tier 2 (§2.3, §2.4)

The paper repeats that no headline claim rests on Tier 2 alone; the central comparison uses Tier 1. That separation keeps the quirks of an LLM-as-a-Judge from deciding the conclusion. The judge was calibrated against humans on 100 case-rubric pairs: author–judge agreement is κw = 0.53, higher than the agreement between the author and an independent second annotator (κw = 0.25). Under prevalence-robust Gwet AC2, all three pairings land between 0.81 and 0.89.

How the students were built: QLoRA at rank 16 (§3.1, §4)

The teachers are Qwen 3.5 27B-dense and 35B-A3B MoE, run only on the 717-case training partition. Traces scoring at least 90 percent on Tier 1 are kept and deduplicated, giving 600 examples. No held-out case enters the teacher pool. The students come in four sizes (2B, 4B, 9B, 27B) and use QLoRA: a low-rank adapter on top of a 4-bit-quantised base.

W=W0+BA,B∈Rd×r, A∈Rr×k, r=16W = W_0 + BA, \qquad B \in \mathbb{R}^{d \times r},\ A \in \mathbb{R}^{r \times k},\ r = 16
(1)

In words: the original weight matrix W0W_0 stays frozen, and only the product of two thin matrices (BB and AA, each 16 wide) is learned and added on. dd and kk are the dimensions of the original matrix; rr is the adapter width. Whether a width of 16 is enough is something you can feel in the figure below by trading error against parameter count.

FIG 1Reconstructing a matrix at rank r — error versus parameter count. QLoRA never learns W itself, only this r-wide difference

The recipe is shared across sizes: rank 16, alpha 32, dropout 0.05, three epochs, batch 2 with gradient accumulation 4, `paged_adamw_32bit`, learning rate 2e-4 with cosine decay and 5 percent warmup (Appendix C.2). The sequence length is 4096, except 2048 at 27B because of the 32 GB VRAM limit. Everything ran on a sing…

What's behind this

§

Members-only from here

449 walkthroughs, 42 textbook chapters, 48 student units and 6 close readings — all included for $4.99/mo, with about three new explainers a day on average. Cancel any time; access runs to the end of the period.

Already a member? Sign in to keep reading

References

  1. Remco Hendriks. (2026-09-09) MetroLLM-Bench: Evaluating Language Models as Transit Kiosk Runtimes. arXiv:2609.10016Paper page·PDF

This article is written from the source paper above. Where they differ, the original is authoritative.

Published by TechAthletes · Editorial policy · How we cite · Corrections

Comments

Sign in to comment