Head to head: DeepSeek-V4-Pro vs gpt-oss-120b Gpt-oss-120b defeated DeepSeek-V4-Pro 106.3 to 93.7 across 12 text tasks, winning 10 of 12 matchups with 99% confidence, according to a head-to-head benchmark scored by gpt-5.4. The open-source model proved more reliable on practical work including proofreading, localization, JSON extraction, and format compliance, while DeepSeek-V4-Pro won only on precise proofreading and a SQL query task. The topline is blunt: gpt-oss-120b wins, 106.3 to 93.7, with 99% confidence . The task count is even harsher — 10 wins to 2 — which makes this less a stylistic preference than a real separation in day-to-day utility. If you’re picking a general-purpose text model on these results alone, the answer is straightforward. What pushed gpt-oss-120b over the top was not one flashy category but repeated competence on practical work: proofreading for fidelity and tone, localization, strict JSON extraction, incident-note summarization, cache implementation, scheduling under constraints, and concise reasoning. Just as important, it often won by being the model that actually respected the output contract — returning clean JSON, sticking closer to requested format, or avoiding unnecessary elaboration when the prompt asked for just the answer. DeepSeek-V4-Pro was not outclassed everywhere. It earned real wins on Precise proofreading , where it preserved wording and meaning better, and on sql vendor spend q2 , where one judge pass preferred its safer grouping. But those bright spots were isolated, and even several of its nominal losses came from a recurring editorial problem: adding markdown fences, extra prose, or slightly more interpretive rewrites than the prompt invited. In a benchmark like this, that’s not cosmetic; it’s the difference between usable output and cleanup work. The per-task notes do show some judge-order instability on individual items, so this wasn’t a perfect sweep in spirit. But that caveat doesn’t rescue the overall result. When one model wins 10 of 12 tasks and the aggregate margin lands at 99% confidence , the right read is not "close, but maybe" — it’s that gpt-oss-120b was the more reliable model across a wide spread of realistic text tasks . Final call: gpt-oss-120b is the clear winner. DeepSeek-V4-Pro shows flashes of strong judgment, but gpt-oss-120b was more dependable, more format-disciplined, and simply better across this matchup. How they were tested We ran 12 fresh text tasks, generated on the fly for this matchup so neither model could prepare in advance, and had gpt-5.4 score each one. DeepSeek-V4-Pro scored 93.7 to gpt-oss-120b's 106.3. 1. sql vendor spend q2 You are given this PostgreSQL schema: vendors vendor id INT PRIMARY KEY, vendor name TEXT, category TEXT invoices invoice id INT PRIMARY KEY, vendor id INT, invoice date DATE, status TEXT, total amount NUMERIC invoice lines line id INT PRIMARY KEY, invoice id INT, cost center TEXT, line amount NUMERIC Write ONE SQL query that returns, for Q2 2024 only, the top 3 vendors by total approved spend charged to the 'Field Ops' cost center. Count only invoices with status = 'approved'. Output columns: vendor name, total spend, invoice count. total spend is the sum of relevant line amount values, invoice count is the number of distinct approved invoices contributing to that vendor's spend. Sort by total spend DESC, then vendor name ASC. Winner: DeepSeek-V4-Pro — Model A provides a fully correct query and groups by vendor id plus vendor name, which is safer if vendor names are duplicated. Model B is mostly correct, but grouping only by vendor name can incorrectly merge distinct vendors with the same name. Order-swapped judge pass: Both queries are functionally correct, but B is slightly better because it groups by vendor id as well as vendor name, avoiding accidental merging of vendors with the same name, and it uses a safer half-open date range. A is still strong but slightly less robust. 2. 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