Head to head: Kimi K3 vs Z.ai: GLM 5.3
Kimi K3 vs Z.ai: GLM 5.3
By Ryan Merket · Published
A near-dead heat on aggregate score conceals a far more lopsided task-by-task contest. The difference comes down to precision, format discipline, and whether each model catches the prompt’s least obvious constraint.
The topline scores—112.5 for GLM 5.3 and 111.8 for Kimi K3—are effectively neck and neck, but they obscure the stronger signal: Kimi won seven tasks to GLM’s one, with four ties. The paired statistical verdict gives Kimi a decisive 98% confidence advantage, so GLM’s 0.7-point aggregate edge does not make it the better all-around performer here. Kimi’s wins were rarely flashy; they came from reading the entire brief. It preserved exact output formatting in localization and proofreading, covered the separate invoice-PDF issue in meeting notes, retained technical nuance in dense summarization, and produced a customer email without unresolved placeholders. Its concurrency fix was also more robust, using an identity check so stale rejection cleanup could not delete a replacement cache entry. GLM’s sole win mattered: it correctly recognized that the clinic-shift constraints were impossible, while Kimi returned a schedule that violated the required Priya-before-Lin ordering. Elsewhere, however, GLM repeatedly lost on small but real execution details—telegraphic classification reasons, less precise wording, multi-line output where one line was requested, and an email that was not ready to send. Both models also shared avoidable compliance blemishes, notably wrapping JSON in Markdown fences. **Final call: Kimi K3 wins. The aggregate totals are too close to suggest a raw capability gap, but the 7–1 task record and 98% confidence make Kimi the decisively more reliable model across this test set.**
invoice-fact-extraction
Extract the requested fields from this messy note and return ONLY valid JSON with keys: vendor, invoice_number, issue_date, due_date, currency, subtotal, tax, total, po_number, bill_to_email, ship_to_city, line_items (array of {description, qty, unit_price}). Text: "Fwd: AP cleanup — please pay soon. Vendor: North Lantern Office Supply LLC // inv no. NL-48217-A. Issued 2026-02-11; terms Net 21, so due Mar 4, 2026. Bill to: Ridgeway Clinics, AP <[email protected]>. Ship-to: 88 Vale St., Duluth, MN. PO# RC-7719. Items: 4 x ergonomic keyboard wrist rests @ $18.50; 2 x USB-C docks (dual HDMI) @ $94.00; 1 x cable organizer kit @ $27. Tax 7.875%. Subtotal noted in margin as USD 289.00, tax USD 22.76, grand total USD 311.76. Ignore scribble: 'old invoice NL-47002 voided'."
Model A and Model B are identical and extract every requested field accurately. Both slightly miss the instruction to return only valid JSON because the JSON is wrapped in Markdown code fences. (Second judge pass, order swapped — scores are the average of both: Model B and Model A are identical and extract every requested field correctly; both have the same minor instruction-following issue of wrapping the JSON in Markdown code fences rather than returning only raw JSON.)
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.
Model A provides a natural European Spanish translation and follows the requested count format exactly. Model B is equally natural and accurate, but “(58 characters)” is less faithful to the instruction to return the character count in parentheses. (Second judge pass, order swapped — scores are the average of both: Model A follows the requested output format more precisely by giving only the translation and a parenthesized number. Both translations are accurate, natural, friendly, exactly 58 characters long, and contain no exclamation marks, though Model A’s sentence break reads slightly more naturally than Model B’s colon.)
meeting-notes-summary
Summarize the meeting notes below in EXACTLY 4 bullet points, each 10-16 words, with no intro or conclusion. Notes: "Ops/Eng sync, 7 May. Checkout slowdown traced to image-resizing service saturating CPU on two nodes after a catalog import. Team temporarily disabled high-resolution thumbnail generation, which restored median checkout latency from 4.8s to 1.3s. Permanent fix: move resizing jobs to async queue and cap worker concurrency; owner is Nia, target 16 May. Finance asked whether delayed invoice PDFs are related; answer: no, that issue comes from a separate template rendering timeout. Support has 14 open tickets tied to checkout slowness; Eli will send a customer-facing update by 3 p.m. Legal reminder: avoid saying 'outage' because transactions still processed."
Model A satisfies the exact bullet and word-count constraints while covering the separate invoice-PDF issue. Model B also follows the format precisely but omits that clarification and devotes more space to incident details. (Second judge pass, order swapped — scores are the average of both: Both models satisfy the exact bullet-count and word-count requirements while accurately summarizing the notes. Model A is better because it includes the separate invoice-PDF issue and the reason for avoiding “outage,” providing broader coverage than Model B.)
Nuanced classification
Classify each review's sentiment as "positive", "negative", or "mixed", and give a 6-word-max reason. Return ONLY a JSON array of {"text","label","reason"} in input order. Reviews: ["Fast shipping but the fabric feels cheap.", "Absolutely love it, wearing it daily!", "It broke after a week. Refund was quick and painless though."]
Model A and Model B classify every review correctly and keep all reasons within six words, but both improperly use code fences. Model A has more natural, polished reasons than Model B’s slightly telegraphic phrasing. (Second judge pass, order swapped — scores are the average of both: Model B and Model A classify every review correctly and keep all reasons within six words. Model A has slightly more natural, polished phrasing, though both improperly add Markdown fences instead of returning only the JSON array.)
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."
Model A is slightly more precise because it describes the large model accepting text it agrees with rather than calling accepted guesses objectively correct, while still clearly covering the mechanism, tradeoff, and caveat. Model B is concise and accessible but loses a small amount of technical accuracy with “correct ones” and “first mistake.” (Second judge pass, order swapped — scores are the average of both: Model A is slightly more precise because it describes the larger model as accepting guesses it agrees with, whereas Model B calls them “correct,” which could imply objective correctness rather than agreement between models. Both models follow the three-bullet, one-sentence-per-bullet format and use clear, accessible language.)
Concurrency bug fix
This TypeScript function is meant to memoize an async loader but has a race: concurrent callers can each trigger the underlying fetch. Fix it so the fetch runs at most once per key, and a rejected fetch does NOT poison the cache (a later call must retry). Return ONLY the corrected function. ```ts const cache = new Map<string, Promise<string>>(); async function load(key: string, fetcher: (k: string) => Promise<string>) { if (cache.has(key)) return cache.get(key)!; const value = await fetcher(key); cache.set(key, Promise.resolve(value)); return value; } ```
Model A correctly caches the in-flight promise and evicts it on rejection, while its identity check prevents accidentally deleting a replacement entry. Model B is also correct under normal use, but unconditional deletion is slightly less robust if the cache entry is replaced before the rejection handler runs. (Second judge pass, order swapped — scores are the average of both: Model A correctly caches the in-flight promise and conditionally removes it on rejection, preventing stale cleanup from deleting a newer entry. Model B is also correct in the shown context, but its unconditional deletion is slightly less robust; both include the cache declaration despite the request for only the corrected function.)
support-ticket-labeling
Classify each ticket into one category: Billing, Bug, Feature Request, Account Access, or How-To. Return a Markdown table with columns Ticket, Category, Justification. Tickets: (A) "I was charged twice for invoice QN-204 after updating my card." (B) "The Android app closes every time I tap Export CSV on version 5.2.1." (C) "Can you add an option to auto-archive projects after 90 days of inactivity?" (D) "I’m not receiving the sign-in code at my backup email and I’m locked out." (E) "Where do I change the default timezone for reports in the admin console?"
Model A and Model B classify all five tickets correctly, follow the requested Markdown table format, and provide concise, accurate justifications. Neither output has a meaningful quality advantage. (Second judge pass, order swapped — scores are the average of both: Model B and Model A classify all five tickets correctly, follow the required Markdown table format, and provide clear, concise justifications. Neither output has a meaningful quality advantage.)
Find the contradiction
The following spec contains exactly one internal contradiction. Quote the two conflicting sentences verbatim and explain the conflict in one sentence. Do not fix it. Spec: "Free accounts may create up to three projects. Every account, regardless of tier, may archive unlimited projects. Archiving a project does not count against the project limit. Free accounts are limited to three projects total, including archived ones."
Model A and Model B both quote the correct conflicting sentences verbatim and accurately explain the contradiction in one sentence without attempting to fix it. Both are clear, concise, and fully compliant with the prompt. (Second judge pass, order swapped — scores are the average of both: Model B and Model A both quote the two conflicting sentences verbatim and accurately explain the contradiction in a single clear sentence without attempting to fix it.)
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."
Model A provides the correct sentence and lists all changes on a single second line as requested, while Model B gives the same correct edits but spreads the change list across multiple bulleted lines. (Second judge pass, order swapped — scores are the average of both: Model A provides the correct sentence and lists every change on the requested second line. Model B makes the same correct edits but spreads the change list across multiple bulleted lines, slightly missing the specified format.)
customer-delay-email
Write a customer email from a hardware store support team to a buyer named Elise Rowan. Situation: her order for a GlacierBlue 24-inch induction range (order HB-93841) was supposed to ship today, but the carrier damaged the outbound pallet during loading. Replacement stock arrives at the warehouse on 18 September and can ship within 2 business days after that. Offer two options: keep the order with free threshold delivery upgrade, or cancel for a full refund. Tone: apologetic, calm, professional. Audience: customer. Length: 110-140 words. Include a clear subject line.
Model A fully covers the delay, cause, revised timing, and both remedies in a polished email within the requested length. Model B is similarly accurate, but its unresolved placeholders for the phone number and store name make it less customer-ready and it may slightly exceed the word limit depending on counting. (Second judge pass, order swapped — scores are the average of both: Model A fully covers the delay, replacement timeline, and both customer options in a polished email within the requested length. Model B is also strong, but its unresolved placeholders for the phone number and store name make it less ready to send.)
clinic-shift-assignment
Assign exactly one person to each shift and return ONLY JSON as {"Mon_AM":"...","Mon_PM":"...","Tue_AM":"...","Tue_PM":"..."}. Staff: Priya, Mateo, Lin, Zoe. Constraints: (1) Each person works exactly one shift. (2) Priya cannot work Monday. (3) Mateo can only work a PM shift. (4) Lin cannot work Tue_PM. (5) Zoe cannot work Mon_PM. (6) Tue_AM must be covered by either Priya or Lin. (7) Mon_PM must be covered by Mateo or Zoe. (8) Priya works earlier in the week than Lin. There is exactly one valid schedule.
Model A violates the requirement that Priya work earlier in the week than Lin, since Lin is assigned Monday and Priya Tuesday. Model B correctly recognizes that Priya must work Tue_AM, which leaves no later permissible shift for Lin, though Model B does not use the requested schedule schema. (Second judge pass, order swapped — scores are the average of both: Model B correctly identifies that no schedule can satisfy both Priya working earlier than Lin and the other Tuesday restrictions, though Model B does not use the requested assignment schema. Model A uses the requested schema but violates the requirement that Priya work earlier in the week than Lin.)
warehouse-restock-math
A café manager is planning a 6-day restock for bottled cold brew. Daily sales forecast is: Mon 18, Tue 23, Wed 19, Thu 27, Fri 31, Sat 22 bottles. Starting inventory Monday morning is 42 bottles. A supplier delivery of 36 bottles arrives before opening on Thursday. The café requires a safety stock of 12 bottles at the end of Saturday. What is the MINIMUM number of bottles the manager must order to arrive before opening on Monday? Show your calculation briefly, then give the final number.
Model A and Model B both correctly calculate total demand, account for starting inventory and the Thursday delivery, preserve the required Saturday safety stock, and arrive at the minimum order of 74 bottles. Both follow the request with clear, concise calculations and a valid inventory check. (Second judge pass, order swapped — scores are the average of both: Model B and Model A are both fully correct and clearly verify the 74-bottle minimum, but Model B is slightly better because its calculation is more concise and better matches the request to show the work briefly.)
Matchup powered by OpenRouter.