Ticket Extract
About this benchmark
Turns a customer support email into a structured ticket: ticket id, customer name and email, product, severity in the customer’s own words, the date the problem started, order number, requested action, and one entry per affected device with serial and model.
The input is plain text pasted into the prompt, so nothing here depends on PDF handling; it isolates comprehension and instruction-following. Each message carries a deliberate trap: numbers that look like the one being asked for, a date the customer corrects mid-thread, and a device list whose length is stated in prose rather than tabulated.
Cases
ticket-a: Two Meridian G4 gateways, urgent, RMA requested. The sender opens by correcting the start date (the fault began 2 June, not the 6th) and an invoice number sits right beside the order number.ticket-b: One Beacon M2 sensor, low priority, replacement requested. The unit was a free sample, so there is no order number and the field must stay empty rather than borrow the ticket reference.ticket-c: Five Halyard R1 controllers bricked by a firmware rollout, high severity, rollback requested. Serials are split across two sentences and a sixth serial is named only to be excluded, so the expected device count is five.
Results
| Target | Score ↓ | Stddev | Latency | Tok/s | Cost | Errors |
|---|---|---|---|---|---|---|
| gpt-6-luna@openai | 100.0 | 0.0 | 3.3s | 74.9 | $0.0015 | 0/9 |
| gpt-5.6-luna@openai | 100.0 | 0.0 | 2.6s | 62.3 | $0.0026 | 0/9 |
| gemini-3.5-flash-lite@google-ai-studio | 100.0 | 0.0 | 1.4s | 150.6 | $0.0057 | 0/9 |
| claude-haiku-4.5@anthropic | 100.0 | 0.0 | 4.8s | 30.2 | $0.0145 | 0/9 |
| gpt-6.1-sol@openai | 100.0 | 0.0 | 3.6s | 40.8 | $0.0221 | 0/9 |
| gpt-5.6-terra@openai | 100.0 | 0.0 | 2.1s | 62.6 | $0.0230 | 0/9 |
| gpt-6-sol@openai | 100.0 | 0.0 | 3.6s | 52.9 | $0.0261 | 0/9 |
| gemini-3.8-flash@google-ai-studio | 100.0 | 0.0 | 6.5s | 113.7 | $0.0272 | 0/9 |
| grok-4.5@xai | 100.0 | 0.0 | 6.6s | 64.3 | $0.0356 | 0/9 |
| ⚠claude-haiku-5.5@anthropic8 field missesticket-c: affected_devices (2/3)ticket-c: affected_devices.0.model (2/3)ticket-c: affected_devices.0.serial (2/3)ticket-c: affected_devices.4.serial (2/3) | 92.6 | 13.9 | 3.2s | 122.8 | $0.0028 | 0/9 |
| ⚠qwen3.7-plus@alibaba9 field missesticket-a: reported_at (3/3)ticket-b: reported_at (3/3)ticket-c: reported_at (3/3) | 90.9 | 0.7 | 44.3s | 57.4 | $0.0302 | 0/9 |
| ⚠qwen3.7-flash@alibaba14 field missesticket-a: product (3/3)ticket-a: reported_at (3/3)ticket-b: product (2/3)ticket-b: reported_at (3/3)ticket-c: reported_at (3/3) | 85.6 | 5.1 | 35.2s | 90.0 | $0.0038 | 0/9 |
| ⚠kimi-k2.5@moonshotaierrorPOST "https://openrouter.ai/api/v1/chat/completions": 404 Not Found {"message":"No endpoints found for moonshotai/kimi-k2.5. Every candidate endpoint was removed during routing: Filter by Parameters removed amazon-bedrock/us-east-2; Filter by Fallback removed siliconflow/int4, atlas-cloud/int4, venice, novita.","code":404,"metadata":{"routing_funnel":[{"step":"Initial Endpoints","endpoint_count":5},{"step":"Filter by Parameters","endpoint_count":4},{"step":"Filter by Fallback","endpoint_count":0}],"failed_routing_step":"Filter by Fallback"}} | n/a | n/a | n/a | n/a | $0.0000 | 9/9 |
Score by case
| Target | ticket-a | ticket-b | ticket-c |
|---|---|---|---|
| claude-haiku-4.5@anthropic | 100 | 100 | 100 |
| gemini-3.5-flash-lite@google-ai-studio | 100 | 100 | 100 |
| gemini-3.8-flash@google-ai-studio | 100 | 100 | 100 |
| gpt-5.6-luna@openai | 100 | 100 | 100 |
| gpt-5.6-terra@openai | 100 | 100 | 100 |
| gpt-6-luna@openai | 100 | 100 | 100 |
| gpt-6-sol@openai | 100 | 100 | 100 |
| gpt-6.1-sol@openai | 100 | 100 | 100 |
| grok-4.5@xai | 100 | 100 | 100 |
| claude-haiku-5.5@anthropic | 100 | 100 | 78 |
| qwen3.7-plus@alibaba | 91 | 90 | 92 |
| qwen3.7-flash@alibaba | 82 | 83 | 92 |
| kimi-k2.5@moonshotai | err | err | err |
Note
git_shareadsfdd9ef5-dirty. The binary was built with uncommitted changes tointernal/model/openrouterthat route four more slug prefixes to the decisions endpoint. No target in this run matches those prefixes, so every call took the same chat path as a clean build offdd9ef5, and the scores are what that commit produces.moonshotai/kimi-k2.5produced no gradable output. All 9 calls returned404 No endpoints found: OpenRouter's routing funnel went from five endpoints to zero, with the last four removed at the fallback filter. Its 0.0 is 9 routing failures, not 9 wrong extractions.anthropic/claude-haiku-5.5returned an emptyaffected_devicesarray onticket-ctrials 2 and 3. Trial 1 listed all five devices. Every other field on those trials is correct, so the output is well-formed and gives no sign that a list is missing.qwen/qwen3.7-plusmissesreported_aton all 9 trials and nothing else. Every trial returned a date that is not the expected one, written as ISO on 5 trials and asTue, 9 June 2026 14:22style text on 4.qwen/qwen3.7-flashmissesreported_aton all 9 trials as well. On 7 the date itself is wrong; on 2 (ticket-atrial 3,ticket-btrial 3) the date is right but written as2 June 2026instead of ISO. It also shortenedproductto a generic noun (Gateway,sensor) on 5 trials, dropping the model name.
Conclusion
Nine targets extracted every field on all 9 trials, so cost and speed decide.
openai/gpt-6-luna is the pick: the cheapest clean sweep at $0.0015 for the
run, at 3,276ms. openai/gpt-5.6-luna costs $0.0026 and answers faster at
2,617ms. If latency comes first, gemini-3.5-flash-lite is the fastest clean
sweep at 1,440ms for $0.0057. grok-4.5, gemini-3.8-flash, gpt-6-sol,
gpt-6.1-sol and gpt-5.6-terra get the same result for $0.022 to $0.036.
The qwen misses are consistent but not cleanly fixable: reported_at fails on
every trial, and the value is mostly the wrong date, not a format slip, so a
date normaliser in the caller would recover only 2 of 18 trials.
claude-haiku-5.5 is the unsafe one despite its 92.6: two of three
ticket-c trials silently dropped a whole list, and the mean hides that
the same input gave a full answer once and an empty one twice.