Head to head: Qwen: Qwen3.8 Omni Flash vs Z.ai: GLM 5.3 FlashX

Qwen: Qwen3.8 Omni Flash vs Z.ai: GLM 5.3 FlashX

By · Published · Updated

RuntimeWire Head-to-Head: Head to head: Qwen: Qwen3.8 Omni Flash vs Z.ai: GLM 5.3 FlashX
RuntimeWire Head-to-Head matchup

A 36-task comparison spanning exact-format writing, code, structured data, localization, and everyday reasoning. The results show how much instruction-following and small execution details matter alongside getting the answer right.

Qwen takes the matchup with a 105.7 aggregate score to GLM’s 98.7, winning 19 tasks to 7, with 10 ties. The limited confidence verdict makes this a clear result—not a photo finish—but the scorecard is not a sweep: GLM delivered credible wins, and a substantial share of tasks ended level. Qwen’s edge is most visible when the output contract is part of the task. It repeatedly returned raw JSON or SQL when asked, followed exact bullet and line formats, and avoided extra preambles. In the SQL window-query tests, it handled second-place rankings and tie behavior more reliably; in proofreading, it generally respected the requested change-list format. GLM often had the right underlying answer, but Markdown fences, added commentary, or extra introductions cost it points on strict-output tasks. GLM was not merely keeping up on easy prompts. It got the invoice balance right and was sometimes clearer in presenting the arithmetic; it also earned wins on faithful rewrites and localization, with some judges preferring its warmer phrasing or closer tense match. The rota, ticket-triage, and several other tasks were ties, underscoring that the models are often functionally equivalent when constraints are straightforward. The distinction is editorially simple: GLM can produce strong answers, but Qwen more consistently delivers the answer in exactly the form requested. Across this set, that discipline—not a universal advantage in reasoning or prose—is what separates the scores. **Final call: Qwen3.8 Omni Flash wins clearly, on reliable execution and format fidelity; GLM 5.3 FlashX remains competitive, but its extra wrapping and occasional embellishment are costly in head-to-head evaluation.**

Invoice discount check

A freelancer is preparing a quote with three line items: 4 logo revisions at $38 each, 3 social media banners at $27 each, and 2 email headers at $46 each. Apply a 12% package discount to the subtotal, then add 8.5% sales tax on the discounted amount. The client has already paid a $90 deposit. What exact balance remains, in dollars, rounded to the nearest cent? Show the calculation step by step.

Qwen: Qwen3.8 Omni Flash: 1. **Calculate each line item:** - Logo revisions: \(4 \times \$38 = \$152\) - Social media banners: \(3 \times \$27 = \$81\) - Email headers: \(2 \times \$46 = \$92\) 2. **Calculate subtotal:** \[ \$152 + \$81 + \$92 = \$325 \] 3. **Apply 12% package discount:** \[ \$325 \times 0.12 = \$39 \] \[ \$325 - \$39 = \$286 \] 4. **Add 8.5% sales tax to the discounted amount:** \[ \$286 \times 0.085 = \$24.31 \] \[ \$286 + \$24.31 = \$310.31 \] 5. **Subtract the $90 deposit:** \[ \$310.31 - \$90 = \$220.31 \] **Exact balance remaining: \(\boxed{\$220.31}\)**
Z.ai: GLM 5.3 FlashX: # Step-by-Step Calculation ## Step 1: Calculate each line item - **Logo revisions:** 4 × $38 = **$152.00** - **Social media banners:** 3 × $27 = **$81.00** - **Email headers:** 2 × $46 = **$92.00** ## Step 2: Calculate the subtotal $$152.00 + 81.00 + 92.00 = \$325.00$$ ## Step 3: Apply the 12% package discount $$325.00 × 0.12 = \$39.00$$ $$325.00 − 39.00 = \$286.00 \text{ (discounted amount)}$$ ## Step 4: Add 8.5% sales tax on the discounted amount $$286.00 × 0.085 = \$24.31$$ $$286.00 + 24.31 = \$310.31 \text{ (total due)}$$ ## Step 5: Subtract the deposit $$310.31 − 90.00 = \$220.31$$ ## Final Answer **The remaining balance is $220.31**

OpenAI: GPT-6 Luna: Both models calculate the $220.31 balance correctly and show the requested steps. Model B is slightly clearer in labeling the discounted amount and total due, while Model A is also concise and easy to follow. (Second judge pass, order swapped — scores are the average of both: Model B and Model A both show the calculation step by step and correctly arrive at a remaining balance of $220.31. Their answers are equally clear and follow the instructions.) | Anthropic: Claude Fable 5.1: Model A and Model B both compute every step identically and correctly (subtotal $325, discount…

Shift rota unique fit

Create the final on-call rota for Tuesday by assigning one person to each role: Front Desk, Inventory, Returns, and Packing. People: Mina, Joel, Tariq, and Elowen. Constraints: (1) Mina cannot do Front Desk or Packing. (2) Joel must work either Returns or Packing. (3) Tariq cannot do Returns. (4) Elowen must work earlier in the workflow than Joel, with role order Front Desk -> Inventory -> Returns -> Packing. (5) The person on Front Desk is not Mina or Tariq. (6) Inventory is not Joel. Give only the final mapping of person -> role.

Qwen: Qwen3.8 Omni Flash: Mina -> Inventory Joel -> Returns Tariq -> Packing Elowen -> Front Desk
Z.ai: GLM 5.3 FlashX: Elowen -> Front Desk Mina -> Inventory Joel -> Returns Tariq -> Packing

OpenAI: GPT-6 Luna: Model A and Model B give the same valid mapping and follow the instruction to provide only the final mapping, so neither is better. (Second judge pass, order swapped — scores are the average of both: Model B and Model A give the same valid assignment, satisfying all constraints. Both provide only the requested person-to-role mapping.) | Anthropic: Claude Fable 5.1: Model A and Model B give the identical assignment (Elowen Front Desk, Mina Inventory, Joel Returns, Tariq Packing), which satisfies all six constraints and respects the mapping-only output format; the only diffe…

Exact follow-up note

Write a follow-up note after a project call. Requirements: exactly 4 bullet points; each bullet must start with "- "; each bullet must be 9 to 12 words; include these four facts somewhere, once each: kickoff on May 14, budget cap $18k, send draft by Friday, waiting on venue floorplan; do not use the words "meeting", "call", or "please"; end with a final line exactly: Thanks, Nora

Qwen: Qwen3.8 Omni Flash: - kickoff on May 14 aligns all project teams early. - overall budget cap $18k keeps spending controlled for now. - send draft by Friday to enable quick stakeholder review. - waiting on venue floorplan before finalizing logistics details today. Thanks, Nora
Z.ai: GLM 5.3 FlashX: Hi team — quick recap and next steps below. - Project kickoff is confirmed for May 14, with full team attendance expected. - We agreed the total budget cap stays at $18k until further notice. - Everyone should send their draft by Friday so revisions can start quickly. - We are still waiting on the venue floorplan before finalizing the layout. Thanks, Nora

OpenAI: GPT-6 Luna: Model A satisfies the exact formatting and content requirements without adding unsupported details. Model B also gets the required facts and bullet lengths right, but adds an unrequested introduction and extra claims. (Second judge pass, order swapped — scores are the average of both: Model A follows the exact four-bullet structure, uses the required facts directly, and ends with the specified final line. Model B also meets the bullet word-count and prohibited-word constraints, but adds an unreq | Anthropic: Claude Fable 5.1: Model A satisfies every constraint precisely—fo…

Localization with tone

Translate this app onboarding line into natural, friendly European Spanish suitable for a mobile toast (keep it under 60 characters, no exclamation marks): "You're all set — your first backup starts tonight." Return only the translation, then the character count in parentheses.

Qwen: Qwen3.8 Omni Flash: Ya está: tu primera copia de seguridad empieza esta noche (57)
Z.ai: GLM 5.3 FlashX: Ya está: tu primera copia de seguridad empieza esta noche. (58)

OpenAI: GPT-6 Luna: Model A is marginally better for a mobile toast because it avoids an unnecessary final period, and its 57-character count is correct. Model B is also natural and compliant, with a correct 58-character count. (Second judge pass, order swapped — scores are the average of both: Model B preserves the meaning and gives the line natural sentence punctuation, with an accurate character count. Model A is also accurate and concise, but omitting the final period makes it slightly less polished.) | Anthropic: Claude Fable 5.1: Both translations are identical in wording, natural for E…

LRU cache

Implement a class `LRUCache<K, V>` in TypeScript with a fixed capacity set in the constructor, and O(1) `get(key): V | undefined` and `set(key, value): void`. Accessing or updating a key must mark it most-recently-used; inserting beyond capacity must evict the least-recently-used entry. Return ONLY the class, no prose.

Qwen: Qwen3.8 Omni Flash: class LRUCache<K, V> { private readonly capacity: number; private readonly cache = new Map<K, V>(); constructor(capacity: number) { this.capacity = capacity; } get(key: K): V | undefined { if (!this.cache.has(key)) { return undefined; } const value = this.cache.get(key) as V; this.cache.delete(key); this.cache.set(key, value); return value; } set(key: K, value: V): void { if (!(this.capacity > 0)) { return; } if (this.cache.has(key)) { this.cache.delete(key); } else if (this.cache.size >= this.capacity) { for (const oldestKey of this.cache.keys()) { this.cache.delete(oldestKey); break; } } this.cache.set(key, value); } }
Z.ai: GLM 5.3 FlashX: ```typescript class LRUCache<K, V> { private readonly capacity: number; private readonly entries = new Map<K, V>(); constructor(capacity: number) { if (capacity < 1) { throw new Error("Capacity must be at least 1"); } this.capacity = capacity; } get(key: K): V | undefined { if (!this.entries.has(key)) { return undefined; } const value = this.entries.get(key)!; // Re-insert to mark as most-recently-used this.entries.delete(key); this.entries.set(key, value); return value; } set(key: K, value: V): void { if (this.entries.has(key)) { // Update existing key; re-insert to mark as most-recently-used this.entries.delete(key); } else if (this.entries.size >= this.capacity) { // Evict least-recently-used (first key in insertion order) const lruKey = this.entries.keys().next().value!; this.entries.delete(lruKey); } this.entries.set(key, value); } } ```

OpenAI: GPT-6 Luna: Model A provides the class without extra formatting and handles zero or negative capacity by storing no entries. Model B’s LRU logic is sound for positive integer capacities, but its Markdown fences violate the instruction to return only the class, and it rejects capacities the prompt does not say to reject. (Second judge pass, order swapped — scores are the average of both: Model A is the better choice because it returns the class without Markdown fences and handles zero or negative capacity wi | Anthropic: Claude Fable 5.1: Model A and Model B both deliver correct, O(1)…

Support ticket triage

Classify each support message into exactly one category: Billing, Technical Issue, Account Access, or Feature Request. For each item, give a 1-sentence justification. Return in the format "1. Category — justification" on separate lines. Messages: 1) "I was charged twice for the Pro plan after updating my card last week." 2) "The export button spins forever in Chrome, but works on my phone." 3) "Could you add a dark mode for the analytics dashboard?" 4) "The password reset link says expired the moment I open it." 5) "My receipt shows VAT, but our nonprofit status should remove that tax."

Qwen: Qwen3.8 Omni Flash: 1. Billing — The message concerns an unexpected duplicate charge for a subscription plan. 2. Technical Issue — The problem describes a software malfunction where an export button fails in a specific browser. 3. Feature Request — The user is asking for a new interface option that does not currently exist. 4. Account Access — The issue prevents the user from completing a password reset needed to regain access to their account. 5. Billing — The concern is about tax shown on a receipt and whether it should have been waived for billing purposes.
Z.ai: GLM 5.3 FlashX: 1. Billing — The user was charged twice for their subscription, which is a payment/charge dispute. 2. Technical Issue — A product function (export) is malfunctioning in a specific browser, indicating a bug. 3. Feature Request — The user is asking for new functionality (dark mode) that doesn't currently exist. 4. Account Access — The core problem is the inability to complete a password reset, which blocks the user from regaining entry to their account. 5. Billing — The issue concerns a tax (VAT) applied to their charges and a requested adjustment to how they are billed.

OpenAI: GPT-6 Luna: Model A and Model B classify all five messages correctly and follow the requested format with one-sentence justifications. Their writing is clear and similarly concise, with no meaningful difference in quality. (Second judge pass, order swapped — scores are the average of both: Model B and Model A classify all five messages correctly, follow the requested format, and provide clear one-sentence justifications, so the result is a tie.) | Anthropic: Claude Fable 5.1: Model A and Model B produce identical classifications across all five tickets, each correct and defensible, wi…

Faithful rewrite

Rewrite this blunt internal note as a warm, professional Slack message to the whole engineering team (60–90 words), keeping every fact intact and adding no new commitments. Return only the message. Note: "Deploy is frozen until the memory leak in the image service is fixed. Priya is on it. Do not merge to main. ETA tomorrow noon."

Qwen: Qwen3.8 Omni Flash: Hi team, sharing a quick update: deploys are frozen until the memory leak in the image service is fixed. Priya is working on the fix. Please do not merge to main while the freeze is in place. The current ETA is tomorrow at noon. Thanks so much for your patience and for helping keep things running smoothly. If anything is unclear, feel free to reach out.
Z.ai: GLM 5.3 FlashX: Hi team! 👋 Hope everyone's week is going well. A quick heads-up: deploys are frozen until we fix the memory leak in the image service. Priya is on it, with an ETA of tomorrow at noon. In the meantime, please hold off on merging anything to main. Thanks so much for your patience and flexibility while we get this sorted — it's genuinely appreciated! 🙏

OpenAI: GPT-6 Luna: Model A preserves the facts in a warm, professional tone and stays within the requested length. Model B also preserves the key facts, but its emojis and extra upbeat language are less suited to a professional team update. (Second judge pass, order swapped — scores are the average of both: Model A preserves the note’s factual framing more closely while remaining warm and professional. Model B is also effective, but its more embellished wording slightly suggests broader team responsibility for fix | Anthropic: Claude Fable 5.1: Both outputs preserve every fact and land withi…

SQL window query

Given Postgres tables `orders(id, customer_id, created_at, total_cents)` and `customers(id, name)`, write ONE SQL query returning each customer's name and their SECOND-largest order total (in dollars, 2 decimals), excluding customers with fewer than two orders. Order by that value descending. Return ONLY the SQL.

Qwen: Qwen3.8 Omni Flash: WITH ranked_orders AS ( SELECT customer_id, total_cents, ROW_NUMBER() OVER ( PARTITION BY customer_id ORDER BY total_cents DESC, id DESC ) AS rn FROM orders ) SELECT c.name, (ro.total_cents / 100.0)::numeric(18, 2) AS second_largest_order_total FROM ranked_orders ro JOIN customers c ON c.id = ro.customer_id WHERE ro.rn = 2 ORDER BY second_largest_order_total DESC;
Z.ai: GLM 5.3 FlashX: ```sql SELECT c.name, ROUND(o.total_cents / 100.0, 2) AS second_largest_total FROM ( SELECT customer_id, total_cents, DENSE_RANK() OVER (PARTITION BY customer_id ORDER BY total_cents DESC) AS rnk, COUNT(*) OVER (PARTITION BY customer_id) AS order_count FROM orders ) o JOIN customers c ON c.id = o.customer_id WHERE o.rnk = 2 AND o.order_count >= 2 ORDER BY o.total_cents DESC; ```

OpenAI: GPT-6 Luna: Model A returns the second order by position, handles tied totals consistently, and follows the requirement to return only SQL. Model B ranks distinct totals instead, which can omit customers with tied order totals, and its Markdown fences violate the output instruction. (Second judge pass, order swapped — scores are the average of both: Model A correctly selects the second order per customer, including when order totals tie, and its query is returned without extra formatting. Model B uses dense | Anthropic: Claude Fable 5.1: Model A uses ROW_NUMBER with a deterministic ti…

Polish warm SMS

Translate this customer-service text into Polish for a warm, professional SMS. Keep the meaning and nuance, use natural Polish, and keep it between 150 and 180 characters total: "Hi Lena — your bike is ready for pickup after 3 pm today. We replaced the rear brake cable and tightened the headset. If you want, reply here and we can hold it until Saturday."

Qwen: Qwen3.8 Omni Flash: Cześć, Lena – rower jest gotowy do odbioru dziś po 15:00. Wymieniliśmy linkę tylnego hamulca i dokręciliśmy stery. Jeśli chcesz, odpisz tutaj, a potrzymamy go do soboty.
Z.ai: GLM 5.3 FlashX: **Polish translation (172 characters, incl. spaces):** > Cześć Lena! Twój rower jest już gotowy do odbioru dziś po 15:00. Wymieniliśmy linkę tylnego hamulca i podciągnęliśmy ster. Jeśli chcesz, odpisz, a przechowamy go do soboty. **Notes on choices:** - "Headset" → *ster*, the standard Polish bike-shop term; *podciągnęliśmy* ("tightened up") is how a mechanic would naturally phrase it. - "Reply here" → *odpisz*, which reads naturally in an SMS context without spelling it out. - 24-hour time (*15:00*) is the norm in Polish texting, and *Cześć Lena!* strikes a warm but still professional tone. If you'd prefer a slightly more formal register, swap the greeting to *Dzień dobry, Pani Lena!* (adds 8 characters — still within the 180 limit at 180 exactly, though right at the edge).

OpenAI: GPT-6 Luna: Model A uses the more accurate and natural Polish phrasing “dokręciliśmy stery” and stays focused on the SMS. Model B’s “podciągnęliśmy ster” is awkward, and the added notes go beyond the requested SMS format. (Second judge pass, order swapped — scores are the average of both: Model A is the stronger ready-to-send SMS: “dokręciliśmy stery” is the more idiomatic technical phrasing, and it preserves “reply here.” Model B’s “podciągnęliśmy ster” is awkward, and its explanatory notes are unnecessary | Anthropic: Claude Fable 5.1: Both translations are natural, accurate and wit…

Messy contacts to JSON

Convert the contact notes below into valid JSON: an array of objects sorted by last_name A-Z. Each object must have exactly these keys: first_name, last_name, company, email, phone, city, tags. Use null for missing values. phone must keep digits and a leading + if present, with all other characters removed. tags must be a lowercase array with duplicates removed. Notes: - "Priya Naredi | BlueHarbor | [email protected] | +1 (415) 555-0188 | Oakland | tags: Partner, west, partner" - "Tom Asa, Northline Health, [email protected], 020 7946 1102, London, tags=lead;urgent" - "Mei Sato / company: Kestrel Studio / email missing / phone: none / Kyoto / tags: design, Lead" - "Jules Perret ; Atelier Nox ; [email protected] ; +33 1 44 55 66 77 ; Paris ; tags: france, prospect"

Qwen: Qwen3.8 Omni Flash: [ { "first_name": "Tom", "last_name": "Asa", "company": "Northline Health", "email": "[email protected]", "phone": "02079461102", "city": "London", "tags": [ "lead", "urgent" ] }, { "first_name": "Priya", "last_name": "Naredi", "company": "BlueHarbor", "email": "[email protected]", "phone": "+14155550188", "city": "Oakland", "tags": [ "partner", "west" ] }, { "first_name": "Jules", "last_name": "Perret", "company": "Atelier Nox", "email": "[email protected]", "phone": "+33144556677", "city": "Paris", "tags": [ "france", "prospect" ] }, { "first_name": "Mei", "last_name": "Sato", "company": "Kestrel Studio", "email": null, "phone": null, "city": "Kyoto", "tags": [ "design", "lead" ] } ]
Z.ai: GLM 5.3 FlashX: ```json [ { "first_name": "Tom", "last_name": "Asa", "company": "Northline Health", "email": "[email protected]", "phone": "02079461102", "city": "London", "tags": ["lead", "urgent"] }, { "first_name": "Priya", "last_name": "Naredi", "company": "BlueHarbor", "email": "[email protected]", "phone": "+14155550188", "city": "Oakland", "tags": ["partner", "west"] }, { "first_name": "Jules", "last_name": "Perret", "company": "Atelier Nox", "email": "[email protected]", "phone": "+33144556677", "city": "Paris", "tags": ["france", "prospect"] }, { "first_name": "Mei", "last_name": "Sato", "company": "Kestrel Studio", "email": null, "phone": null, "city": "Kyoto", "tags": ["design", "lead"] } ] ``` Notes on transformations: - Sorted by last_name: Asa → Naredi → Perret → Sato. - Phones stripped to digits plus leading `+` where present. - Duplicate tag "partner" removed and tags lowercased (e.g., "Partner", "Lead"). - Mei Sato's missing email/phone set to `null`.

OpenAI: GPT-6 Luna: Model A returns valid JSON with the requested fields, sorting, and transformations. Model B has the same correct data but adds Markdown fences and explanatory text, so the full response is not valid JSON as requested. (Second judge pass, order swapped — scores are the average of both: Model B has the correct contact data but adds Markdown fences and explanatory notes, so the full response is not valid JSON. Model A provides the same correctly transformed and sorted data as valid JSON only.) | Anthropic: Claude Fable 5.1: Model A and Model B produce identical, fully correct…

Precise proofreading

Correct ONLY the grammar, spelling, and punctuation errors in the sentence below without changing wording, tone, or meaning, then on a second line list each change as 'was -> now'. Sentence: "Its been a long time since we seen there new office, and me and him was suprised how quite it was."

Qwen: Qwen3.8 Omni Flash: It's been a long time since we saw their new office, and he and I were surprised how quiet it was. Its -> It's; seen -> saw; there -> their; me and him -> he and I; was -> were; suprised -> surprised; quite -> quiet
Z.ai: GLM 5.3 FlashX: It's been a long time since we saw their new office, and he and I were surprised how quiet it was. - Its -> It's - seen -> saw - there -> their - me and him -> he and I - was -> were - suprised -> surprised - quite -> quiet

OpenAI: GPT-6 Luna: Model A places the complete change list on the requested second line, while Model B spreads it across multiple lines. Both make the same correct edits, but Model A follows the requested format more closely. (Second judge pass, order swapped — scores are the average of both: Both outputs make the same correct corrections. Model A follows the request more closely by placing the complete change list on the second line, while Model B spreads the list across several lines.) | Anthropic: Claude Fable 5.1: Both Model A and Model B produce the identical, fully correct sentence and…

Summarize dense passage

Summarize the passage below in exactly three bullet points, each one sentence, capturing the mechanism, the tradeoff, and the caveat — no jargon a non-specialist couldn't follow. Return only the bullets. Passage: "Speculative decoding pairs a small draft model with a large target model: the draft proposes several tokens, the target verifies them in one pass, and accepted tokens are kept while the first rejection resets to the target's own choice. This can cut latency substantially when acceptance is high, but the draft model's compute is pure overhead when acceptance is low, and gains evaporate on adversarial or highly novel inputs where the draft and target disagree often."

Qwen: Qwen3.8 Omni Flash: - A fast small helper model suggests several upcoming pieces of text, and a larger main model checks them together, keeps the ones it agrees with, and replaces the first disagreement with its own suggestion. - This saves time when the helper is usually right, but if it is often wrong, the extra suggestions and checking waste effort and can slow the process down. - The speed benefit can disappear on difficult, unusual, or deliberately tricky inputs where the helper and main model frequently disagree.
Z.ai: GLM 5.3 FlashX: - A small, fast "draft" model suggests several pieces of text ahead of time, and the large, accurate model checks them all in a single pass, keeping the guesses it agrees with and falling back to its own choice at the first disagreement. - This can greatly speed up response time when the draft guesses well, but every wrong guess wastes the draft model's effort, so poor accuracy erases the savings. - The speedup vanishes on tricky or highly unusual inputs, where the small and large models tend to disagree often.

OpenAI: GPT-6 Luna: Model A explains the mechanism and tradeoff in more accessible language while covering the caveat. Model B is also accurate, but uses terms such as “draft” and “falling back” that are less suited to the no-jargon instruction. (Second judge pass, order swapped — scores are the average of both: Model B more precisely captures that low acceptance wastes the draft model’s effort and that gains vanish on adversarial or highly novel inputs. Model A follows the format and is clear, but its phrasing abo | Anthropic: Claude Fable 5.1: Both Model A and Model B deliver exactly three…

Matchup powered by OpenRouter.