Head to head: DeepSeek-V3.2 vs Phi-4
This one wasn’t close. DeepSeek-V3.2 controlled the matchup on both raw wins and reliability, while Phi-4’s best moments came in narrower extraction and formatting-heavy tasks.
By RuntimeWire · Published

DeepSeek-V3.2 takes this head-to-head decisively: a 98.0 to 81.8 aggregate score, an 8–2 task lead with 2 ties, and a 97% confidence verdict. That is not a vibes-based edge or a split-decision win; it’s a broad, statistically convincing result driven by stronger reasoning accuracy and fewer costly mistakes.
What stands out is where DeepSeek-V3.2 won. It was better on contradiction finding, unit-aware math, the clinic rota puzzle, proofreading, quarterly budget calculation, tightly formatted status writing, and nuanced classification. In several of those, the difference wasn’t style — it was correctness. Phi-4 lost ground by muddying the core contradiction, inventing uniqueness in a non-unique rota, making an arithmetic error in the budget check, and overrunning explicit constraints in the classification task.
Phi-4 did earn real wins, but they were narrower. It was better at messy vendor email parsing because it preserved more structure and source detail, and it edged the TypeScript LRU task mostly on cleaner typing — though both models missed the stated O(1) requirement there, which limits how much credit either deserves. The ties tell a similar story: on strict JSON extraction, each model dropped a different part of the brief, and on the LATAM Spanish SMS, both had tradeoffs between precision, idiom, and length control.
The bigger editorial takeaway is that DeepSeek-V3.2 was the sturdier model under pressure. Even when it wasn’t perfect — as in the rota task, where it correctly spotted multiple valid solutions but then overcommitted to one — it still showed better judgment about the underlying problem. Phi-4 was more likely to look competent while slipping on the thing that actually mattered, whether that was arithmetic, constraint handling, or identifying the precise source of a contradiction.
Final call: DeepSeek-V3.2 is the clear winner. Not because it dazzled in one or two showcase prompts, but because it was more dependable across reasoning, calculation, editing, and instruction-following — and the numbers back that up emphatically.
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. To cancel position bias, every task was judged twice — once in each presentation order — and every number reported here, including the headline totals, is the average of both passes. DeepSeek-V3.2 scored 98.0 to Phi-4's 81.8.
1. 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."
Winner: DeepSeek-V3.2 — Model A better identifies the contradiction by pairing the two conflicting sentences and explaining the clash without introducing extra ambiguity. Model B quotes the same pair, but its explanation leans on the separate archived-project sentence rather than cleanly explaining the direct conflict between the quoted lines. (Second judge pass, order swapped — scores are the average of both: Model A better identifies and explains the actual contradiction by tying the first sentence to the implication that archived projects could be replaced with new ones, which directly conflicts with the total-including-archived cap. Model B quotes the same pair, but its explanation is less precise and muddles the conflict by bringing in an additional sentence without clearly centering the contradiction.)
2. Strict JSON extraction
Extract every meeting from this text into a JSON array of {"title","day","start24","durationMinutes"}. Use 24-hour "HH:MM" for start24, integer minutes for duration, and title-case titles. Return ONLY valid JSON, no commentary. Text: "Standup is daily at 9am for a quarter hour. The design review runs thursday from 2:30-4pm. Payroll sync — first monday, 11:00 to noon."
Winner: Tie — Model A is better because it returns valid JSON only and correctly extracts the times and durations. Model B has a more accurate day value for "First Monday," but it violates the instruction to return only valid JSON by wrapping the output in a code fence. (Second judge pass, order swapped — scores are the average of both: Model B is better because it correctly preserves the recurrence/day information as title-cased values like "Daily," "Thursday," and "First Monday," while Model A lowercases day values and loses the "First" qualifier for the payroll meeting. Both parse times and durations correctly, but Model B adheres more closely to the formatting and extraction requirements.)
3. Unit-aware math
A pump moves 3.5 liters every 8 seconds. A tank holds 0.9 cubic meters. Starting empty, how long to fill it, in minutes and seconds (mm:ss), rounded to the nearest second? Show the key steps, then give the final answer on its own line.
Winner: DeepSeek-V3.2 — Model A and Model B both reach the correct final answer, but Model A is slightly better because it explicitly checks the rounding to the nearest second and presents the key steps more rigorously. Model B is also strong, but its final answer is not placed quite as cleanly on its own line after the explanation. (Second judge pass, order swapped — scores are the average of both: Model A is slightly better because it is equally correct but handles the rounding step more explicitly and cleanly, which better matches the request for key steps. Model B is also strong, but its conversion from total seconds to mm:ss is a bit less precise in presentation than Model A’s exact-seconds check before rounding.)
4. Clinic rota assignment
Assign four staff members to four clinic tasks for Tuesday morning, using each person exactly once. People: Nia, Omar, Priya, Luis Tasks: Reception, Triage, Vaccines, Inventory Constraints: - Nia cannot do Reception. - Omar must do either Triage or Inventory. - Priya cannot do Vaccines. - Luis must do Reception or Vaccines. - If Omar does Inventory, then Priya must do Reception. - Reception cannot be assigned to Nia or Omar. - Triage must be assigned to either Omar or Priya. Find the unique valid assignment and present it as Person - Task on separate lines.
Winner: DeepSeek-V3.2 — Model A correctly notices that the stated constraints actually permit two valid assignments, so the puzzle as written is not uniquely solvable; however, it still undermines itself by guessing one final assignment instead of cleanly reporting the inconsistency. Model B makes an invalid inference that Luis must be Reception and presents one of the two valid assignments as unique, so its reasoning is less correct overall. (Second judge pass, order swapped — scores are the average of both: Model A is better because it correctly identifies that the stated constraints actually permit two valid assignments and explains this carefully, whereas Model B incorrectly claims uniqueness and gives just one of the valid solutions. Model B follows the requested output format better, but Model A is substantially stronger on correctness and reasoning.)
5. Messy vendor email parsing
Extract structured facts from this messy email thread. Return a JSON object with exactly these keys: vendor, event_date, venue, arrival_time, headcount, dietary_counts, total_quote_usd, deposit_due_usd, contact_email, contact_phone. Email text: "From: Miri Calder miri@harborandpine.co Subject: Re: June workshop catering Hi Jae — confirming Harbor & Pine can cater the product workshop on Fri, Sept 12 at Studio North, 18 Vale St. We should arrive by 8:15 a.m. for a 9:00 start. Current count is 27 attendees + 3 facilitators = 30 total. Food notes from your form: 4 vegetarian, 2 vegan, 1 gluten-free. No shellfish. Quote v2 attached in my last note: breakfast package $540, coffee service $135, staffing $90, delivery waived. Total = USD 765. To lock it in, we need a 40% deposit by Aug 29. Best contact day-of is me at 555-0188, or reply here. —Miri p.s. if AP needs it, our billing alias is invoices@harborandpine.co"
Winner: Phi-4 — Model B is better because it preserves more source detail in the date and venue and structures dietary information more usefully while remaining accurate. Model A is mostly correct, but its dietary_counts is an unstructured string and it omits minor punctuation/detail from the source. (Second judge pass, order swapped — scores are the average of both: Model B is better because it preserves more structure from the email and represents dietary information in a more usefully parsed form while keeping all required keys. Model A is mostly correct, but its dietary_counts value is an unstructured string rather than extracted structured facts, making it less aligned with the task.)
6. LRU cache
Implement a class
LRUCache<K, V>in TypeScript with a fixed capacity set in the constructor, and O(1)get(key): V | undefinedandset(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.
Winner: Phi-4 — Model A and Model B are effectively equivalent: both return only a class and implement LRU behavior functionally for many cases, but both violate the O(1) requirement because they use an array with indexOf/splice/shift, making updates and eviction linear. Model B is slightly cleaner in typing style, but not enough to separate them on overall quality. (Second judge pass, order swapped — scores are the average of both: Model B is slightly better because it at least types its internal Map correctly, while Model A omits generic type parameters on Map construction. However, both Model B and Model A fail the O(1) requirement because they track recency with an array and use indexOf/splice/shift, which are linear-time operations.)
7. 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."
Winner: DeepSeek-V3.2 — Model A correctly fixes the grammar, spelling, and punctuation while preserving the original meaning and provides an accurate change list. Model B unnecessarily changes "seen" to "we've seen," altering the wording and meaning more than needed, and it also adds quotation marks not required by the task. (Second judge pass, order swapped — scores are the average of both: Model A is better because it corrects the sentence while preserving the original structure more closely; changing "we seen" to "we saw" is a direct grammar fix, whereas Model B unnecessarily rewrites it to "we've seen." Both models make valid proofreading corrections, but Model A adheres more tightly to the instruction to avoid changing wording beyond grammar, spelling, and punctuation.)
8. Polished LATAM Spanish SMS
Translate this customer message into Spanish for Mexico. Use a warm, professional tone suitable for an SMS from a bank. Keep it between 135 and 155 characters total, including spaces. Preserve all key details. Text: "Heads up: your new debit card ending in 4821 was shipped today. It should arrive by Thursday. You can freeze or unfreeze it anytime in the app."
Winner: Tie — Model B better preserves the original meaning with "debería llegar para el jueves" and "cuando quieras," while staying warm and professional for a bank SMS. Model A is clear, but "antes del jueves" changes the delivery timing and "activarla" is less accurate than unfreeze/descongelarla. (Second judge pass, order swapped — scores are the average of both: Model A is better because it is closer to the requested SMS length and reads naturally for Mexico, while preserving most key details. Model B exceeds the character limit and uses less idiomatic phrasing for Mexican banking Spanish, though Model A is slightly less precise by changing 'by Thursday' to 'before Thursday' and 'unfreeze' to 'activate'.)
9. Quarterly budget check
A department is reconciling Q2 spending against a fixed budget. Budget: $18,500. Expenses listed below are all in Q2 unless stated otherwise. - Software licenses: 14 seats at $79/month for 3 months - Contractor A: 26 hours at $68/hour - Contractor B: 18 hours at $72/hour, plus a one-time onboarding fee of $95 - Team offsite lunch: $23 per person for 17 people, plus 8.25% sales tax - Refund from vendor for overbilling: -$214.50 - Office chairs: 4 chairs at $189 each, but one chair was returned for a full refund in the same quarter - Internet bill: April $126, May $126, June accidentally paid twice, then one June payment was reversed in Q2 - A printer bought for $640 was ordered in Q1 and should NOT be counted in Q2 What is the final Q2 spend, how much under or over budget is it, and which single category was the largest expense? Show your calculations step by step.
Winner: DeepSeek-V3.2 — Model A is fully correct: its itemized calculations sum to $7,630.76, it computes the budget difference correctly, and it identifies software licenses as the largest category. Model B makes an arithmetic error in the final total and therefore also reports the wrong under-budget amount, despite otherwise following the requested structure clearly. (Second judge pass, order swapped — scores are the average of both: Model A is better because it gets the final total and budget difference correct, explicitly excludes the printer from Q2, and presents the calculations cleanly step by step. Model B makes an arithmetic error in the final summation, leading to an incorrect spend and under-budget amount, even though its category calculations are otherwise mostly correct.)
10. LRU cache implementation
Implement an LRU cache in Python. Requirements: - Class name: LRUCache - Methods: init(capacity: int), get(key: int) -> int, put(key: int, value: int) -> None - get returns -1 if the key is missing. - When capacity is exceeded, evict the least recently used key. - Both get and put must run in O(1) average time. - Use only the Python standard library. Return code only, no explanation.
Winner: DeepSeek-V3.2 — Model A and Model B both implement a correct O(1)-average LRU cache using OrderedDict and satisfy the API requirements. Model A is slightly better because it adheres more strictly to the prompt's "code only, no explanation" instruction, whereas Model B includes explanatory comments. (Second judge pass, order swapped — scores are the average of both: Model B and Model A both correctly implement an O(1)-average-time LRU cache using OrderedDict, satisfy the required API, and return code only. Model A is marginally cleaner stylistically, but the difference is too small to affect the overall judgment.)
11. Tightly formatted status note
Write a project status update for an internal team chat. Follow EVERY rule exactly: 1) Exactly 5 bullet points. 2) Each bullet must start with one of these labels in this order: Done:, Next:, Risk:, Need:, ETA: 3) Each bullet must be 8 to 12 words long. 4) Total output must be under 75 words. 5) Include the numbers 14, 3, and 27 somewhere in the update. 6) Do not use the words urgent, blocked, delay, or issue. 7) The Need: bullet must mention "design signoff" exactly. 8) No introductory or closing sentence; bullets only. Context to use: a mobile app team finished the onboarding flow, is testing payments, found a flaky analytics event, needs approval from design, and expects a beta build this month.
Winner: DeepSeek-V3.2 — Model A follows the required label order, includes the required numbers, stays under 75 words, and closely matches the provided context; its only notable miss is not using bullet markers. Model B also omits bullet markers and includes a semicolon, but more importantly its Done item conflicts with the context by claiming 27 screens instead of reflecting the finished onboarding flow, making it less correct overall. (Second judge pass, order swapped — scores are the average of both: Model A better satisfies the formatting and brevity constraints while covering the required context and required terms, including "design signoff" exactly. Model B violates the 8-12 words-per-bullet rule on multiple bullets and is less tightly formatted overall.)
12. 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."]
Winner: DeepSeek-V3.2 — Model A and Model B both classify all three reviews correctly, but Model A better follows the prompt because each reason stays within the six-word maximum. Model B violates the length constraint on all three reasons, so despite comparable content quality, Model A is better overall. (Second judge pass, order swapped — scores are the average of both: Model A is better because it matches the requested JSON format and keeps every reason within the 6-word maximum. Model B’s labels are correct, but all three reasons exceed the word limit, hurting instruction following.)
See every prompt and the full side-by-side outputs in the interactive Head-to-Head.