Review · updated OCT 12

Qwen3 Next 80B A3B Thinking review: not one we'd recommend right now

It scored 31 out of 100, #50 of 63. It solved 8 of 30 coding jobs and scored 36 on reading documents. Runs on a Mac with 96 GB.

The short version
  • Qwen3 Next 80B A3B Thinking is a free model from Alibaba's Qwen team that you can run on your own computer. In our tests it's not one we'd recommend right now: 31 out of 100, #50 of 63.
  • It solved 8 of 30 coding jobs and scored 36 on reading documents. On our hardest tasks it scored 20.
  • Runs on a Mac with 96 GB.

Coding

Our coding test is 30 programming jobs, from small ones like reading time durations or cleaning up messy data to harder ones like a config-file parser or a double-entry ledger. We run each answer against tests the model never sees, and a job only counts if everything passes. Qwen3 Next 80B A3B Thinking got 8 of 30 right. The best local coders solved 29 of 30.

Reading documents

The second test hands the model things like an expense claim thread, a pay stub or an insurance statement, and asks for specific numbers and dates. Many questions need a bit of math, or noticing a correction further down the email. Qwen3 Next 80B A3B Thinking scored 36; the best model scored 100.

TestScorePublic questionsSecret questions
Coding271430
Reading documents362040
Decisions415736

On the 18 hardest tasks (included in the scores above) it scored 20. This number separates the top models.

This model did much better on our public questions than on the secret ones. Sometimes that's luck; it can also mean the model has seen the public questions before.

We tested the full-size version online. The smaller versions you download usually score a little lower.

Can your computer run it?

You can download Qwen3 Next 80B A3B Thinking in several sizes. Smaller versions fit on more computers and lose a little quality, so pick the biggest one that fits.

Your computerRuns it?Version to download
Graphics card, 8 GBNo–
Graphics card, 12 GBNo–
Graphics card, 16 GBNo–
Graphics card, 24 GBNo–
Graphics card, 32 GBNo–
Mac, 16 GBNo–
Mac, 24 GBNo–
Mac, 32 GBNo–
Mac, 48 GBNo–
Mac, 64 GBNo–
Mac, 96 GBYesQ6
Mac, 128 GBYesQ8

For normal-length chats. Long documents need more memory. Q4 or Q8? · How we worked this out

How to try it

Search for "Qwen3 Next 80B A3B Thinking GGUF" in LM Studio or on Hugging Face and pick the version that fits your computer. New to this? Start with our Ollama guide.

Want the strongest all-rounder instead? Qwen3.6 27B scored 97.

Its actual answers

What Qwen3 Next 80B A3B Thinking wrote for our public questions, word for word.

Coding: INI parser (hard) Didn't work
Coding: TTL LRU (hard) Didn't work
```python
from collections import OrderedDict

class TTL Cache:
    def __init__(self, capacity: int, ttl: float, clock):
        self.capacity = capacity
        self.ttl = ttl
        self.clock = clock
        self.stats = {'hits': 0, 'misses': 0, 'evictions': 0, 'expirations': 0}
        self.cache = OrderedDict()
    
    def put(self, key, value):
        if self.capacity == 0:
            return
        if key in self.cache:
            current_time = self.clock()
            new_expiration = current_time + self.ttl
            self.cache[key] = (value, new_expiration)
            self.cache.move_to_end(key)
            return
        
        current_time = self.clock()
        if len(self.cache) >= self.capacity:
            expired_keys = []
            for k in list(self.cache.keys()):
                if current_time >= self.cache[k][1]:
                    expired_keys.append(k)
            for k in expired_keys:
                del self.cache[k]
                self.stats['expirations'] += 1
            if len(self.cache) >= self.capacity:
                lru_key = next(iter(self.cache.keys()))
                del self.cache[lru_key]
                self.stats['evictions'] += 1
        
        new_expiration = current_time + self.ttl
        self.cache[key] = (value, new_expiration)
        self.cache.move_to_end(key)
    
    def get(self, key, default=None):
        if self.capacity == 0:
            self.stats[' misses'] += 1
            return default
        current_time = self.clock()
        if key in self.cache:
            value, expiration_time = self.cache[key]
            if current_time >= expiration_time:
                del self.cache[key]
                self.stats['expirations'] += 1
                self.stats[' misses'] += 1
                return default
            else:
                self.cache.move_to_end(key)
                self.stats['hits'] += 1
                return value
        else:
            self.stats[' misses'] += 1
            return default
    
    def __len__(self):
        current_time = self.clock()
        count = 0
        for key in self.cache:
            if current_time < self.cache[key][1]:
                count += 1
        return count
    
    def stats(self):
        return self.stats.copy()
```
Coding: Parse duration Didn't work
Coding: Summarize ranges Didn't work
```python
def summarize ranges(nums: list[int]) -> str:
    if not nums:
        return ""
    sortednums = sorted(set(nums))
    start = sortednums[0]
    current = start
    res = []
    for i in range(1, len(sortednums)):
        if sortednums[i] == current + 1:
            current = sortednums[i]
        else:
            if current - start >= 2:
                res.append(f"{start}..{current}")
            elif current - start == 1:
                res.append(str(start))
                res.append(str(current))
            else:
                res.append(str(start))
            start = sortednums[i]
            current = start
    if current - start >= 2:
        res.append(f"{start}..{current}")
    elif current - start == 1:
        res.append(str(start))
        res.append(str(current))
    else:
        res.append(str(start))
    return ','.join(res)
```
Coding: Top customers Didn't work
Coding: Slugify Didn't work
Coding: Token bucket Worked
```python
class TokenBucket:
    def __init__(self, capacity: float, refill_per_sec: float, clock):
        self.capacity = capacity
        self.refill_per_sec = refill_per_sec
        self.clock = clock
        self._tokens = capacity
        self.last_refill = clock()
    
    def _refill(self):
        current_time = self.clock()
        elapsed = current_time - self.last_refill
        add_tokens = elapsed * self.refill_per_sec
        self._tokens = min(self.capacity, self._tokens + add_tokens)
        self.last_refill = current_time
    
    @property
    def tokens(self):
        self._refill()
        return self._tokens
    
    def allow(self, cost: float = 1) -> bool:
        self._refill()
        if self._tokens >= cost:
            self._tokens -= cost
            return True
        return False
```
Decisions: Refund window (hard) 100% right
{
  "outcome": {
    "full_refund": 0.0,
    "partial_refund": 0.0,
    "store_credit": 1.0,
    "nothing": 0.0
  },
  "defective": {
    "true": 0.0,
    "false": 1.0
  }
}
Decisions: Incident matrix (hard) 0% right
{
  " severity": {
    "0": 0.0,
    "1": 1.0,
    "2": 0.0,
    "3": 0.0
  },
  " page": {
    " true": 0.0,
    " false": 1.0
  }
}
Decisions: Tool followup (hard) 0% right
Decisions: Legit security alert (hard) 100% right
{
  "phishing": {
    "true": 0.0,
    "false": 1.0
  },
  "action_needed": {
    "true": 0.0,
    "false": 1.0
  }
}
Decisions: Meeting slot (hard) 100% right
{"slot":{"A":0.0,"B":1.0,"C":0.0,"D":0.0},"raj_last":{"true":1.0," false":0.0}}
Decisions: Review mixed (hard) 100% right
{
  "hardware": {
    "true": 1.0,
    "false": 0.0
  },
  "support": {
    "true": 1.0,
    "false": 0.0
  }
}
Decisions: Support checkout down 0% right
Decisions: Refund wrong plan 0% right
{"department":{" billing":1.0," technical":0.0," account":0.0,"shipping":0.0,"sales":0.0}," refund":{"true":1.0," false":0.0}," tone":{" frustrated":0.0," calm":1.0}}
Decisions: Moderation doxxing 0% right
Decisions: Route calendar 100% right
{"tool":{"web_search":0.0," calculator":0.0,"calendar":1.0,"email":0.0,"none":0.0},"confirm":{"true":1.0,"false":0.0}}
Decisions: Doc invoice missing due 100% right
{
  "doc_type": {
    "invoice": 1.0,
    "resume": 0.0,
    "contract": 0.0,
    "bank_statement": 0.0,
    "其他": 0.0
  },
  "missing_due_date": {
    "true": 1.0,
    "false": 0.0
  }
}
Decisions: Phishing paypal 100% right
{
  "phishing": {
    "true": 1.0,
    "false": 0.0
  },
  "risk": {
    "0": 0.0,
    "1": 0.0,
    "2": 0.0,
    "3": 1.0
  }
}
Decisions: Pii ssn email 100% right
{"data_kind":{" none":0.0,"contact":0.0," financial":0.0,"government_id":1.0," health":0.0},"sensitive":{"true":1.0,"false":0.0}}
Decisions: Review mixed 0% right
Documents: Saas escalator (hard) 0% right
Documents: Expense thread 0% right
Documents: Lease amendment 0% right
Documents: Ticket SLA 0% right
Documents: Sales footnotes 100% right
{"q3_total_usd":15346000,"q2_total_usd":14464000,"q2_central_originally_reported_usd":3047000,"q2_to_q3_change_pct":6.1,"top_region_q3":"East","fastest_growing_region_q1_to_q3":"International","regions_declining_q2_to_q3":["East"],"international_q3_organic_usd":1731000,"west_excluding_mountain_q3_usd":4201000}

Size: 81B parameters. First tested OCT 11.

Models that scored about the same

Comments

Sign in with GitHub to comment. Spam and abuse are hidden automatically.