π§ VibeThinker-3B β 97% HumanEval+ at 3B on a single 3090, but no tool-calling (π£ incubating) #420
Replies: 2 comments 2 replies
-
π Update β one-shot language coverageThe HumanEval+ (97%) / LCB-v6 (83%) numbers above are Python-centric β so "great at coding" really means great at Python. To see how far the breadth goes, I ran a quick one-shot cross-language probe (merge sort β
The pattern:
It's a Qwen2.5-Coder-3B at heart: deep where training data is densest, narrow elsewhere. Practical read β a superb one-shot Python / C++ / JS solver, not a polyglot. Pair this with the disclaimer up top: great competition coder in a few languages, not a coding agent in any. (n=1 one-shot β individual cells carry temp-0.6 variance; the tiering Python/JS/C++ β« Go/Java β« Rust/TS is the robust signal.) |
Beta Was this translation helpful? Give feedback.
-
|
Update β after reading WeiboAI's official model card more closely (the benchmark numbers are inside chart images, easy to miss): the post above underweights the math and overstates the coding. Correcting both, with the card's own numbers. The real headline is competition math β it peers with a frontier 27BThe post led with GSM-Symbolic (100%), but that's the easy end. The card's competition-math numbers are the remarkable part:
For scale, that's essentially level with Qwen3.6-27B (our primary) on the same benchmarks β AIME26 94.3 vs 94.1, HMMT within ~5 pts (89.3 vs 93.8) β at 1/9 the parameters. Four independent math benchmarks agree, so it's a robust signal, not a single-benchmark fluke. This is the frontier-for-its-size claim worth leading with. But "frontier-level coding" needs a caveat β the two coding benchmarks disagree by 42 points
LCB-v6 (80.2, matching our 83%) and LeetCode (96%) are LeetCode/contest-style β a distribution an RL-tuned model gets very good at. OJBench (38.6) is hard olympiad-tier (NOI/ICPC-class), built to be novel and contamination-resistant β and there the 3B falls off a cliff. So its coding strength is distribution-specific: near-frontier on familiar LeetCode/LCB-class problems, but the hardest novel algorithmic problems are where a 3B's ceiling shows. "Frontier one-shot coding" is true for the former, not the latter. Net (refines, doesn't overturn, the post)
Numbers from the official card (charts under |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
π£ Incubating β a verifiable-reasoning specialist, NOT a coding agent: it always reasons (
<think>), has no tool-calling, and fails the standard functional gate by design (verify-full 5/9). Hidden fromswitch.sh --list(see--list --all);--forceto launch. Posted because the findings are interesting β cross-rig numbers welcome (see "What'd help").We just wired up
llamacpp/vibethinker-3b-singleβ WeiboAI's VibeThinker-3B, a 3B verifiable-reasoning model (SFT+RL on Qwen2.5-Coder-3B). All credit for the model goes to WeiboAI; prithivMLmods for the Q8 GGUF; Qwen for the Qwen2.5-Coder-3B base β see Credits.The headline: a 3B that scores 97% HumanEval+ / 83% LiveCodeBench-v6 / 100% GSM-Symbolic at ~166 TPS in ~6.2 GB β and a sharp quant finding: fp8 weights break this model, but Q8 doesn't.
With no tool-calling, it can't drive aider / opencode / cli-agent loops, edit files, or run multi-step tool workflows β it is not a coding-assistant / IDE model. For that, use a tool-calling config (the Qwen3.6-27B or Carnice composes).
Its lane is one-shot verifiable problem-solving: competition math and algorithmic coding (write-the-function / solve-the-problem, where a sandbox checks the answer). Think "competition solver," not "pair programmer."
π΄ Results Card β 1Γ RTX 3090, llama.cpp
server-cuda, temp 0.6β Serving β two engines
llamacpp/vibethinker-3b-singleβvllm/vibethinker-3b-singlellama.cpp Q8 wins on every axis. TTFT 26β43 ms;
-b 4096 -ub 2048= +20% prefill (-ubis the lever;-b 8192adds nothing). No MTP head in the GGUF (plain qwen2 conversion) β no spec-dec, not needed at this speed.β‘ Quality β benchlocal, verifier-graded, temp 0.6, thinking-on
Core 8-pack (the packs an always-reasoning, no-tools model can run):
Reasoning + one-shot coding (sandbox executes the model's output β no tool-calls needed):
dataextract (40%) is a genuine ceiling, not a config artifact β a full temp sweep
{0: 27%, 0.6: 40%, 1.0: 27%}can't lift it; the model emits valid JSON but mis-extracts values. It's a reasoner, not an extractor (as the authors state). The sweep also confirmed temp 0.6 is the sweet spot (beats greedy and the card's 1.0).β’ Takeaways
max_tokens(8Kβ40K). A small budget truncates it mid-<think>with no answer β the single most important client-side setting (and why it's incubating).Requirements
ghcr.io/ggml-org/llama.cpp:server-cuda, auto-pulled).Getting it / Run it
Serves an OpenAI-compatible API on
:8075(modelvibethinker-3b). It reasons inline incontent(llama.cpp's parser doesn't split this model's<think>); the answer follows</think>. Set a generousmax_tokens(8K+).π New to the stack? The FAQ covers weights location (
MODEL_DIR), switching models, and offline installs.What'd help
Cross-rig numbers (other 3090s / 4090s β fit, TPS), and whether reasoning/coding holds at lower quants (Q4/Q5 would shrink it under ~4 GB). The portable finding worth re-testing on any small reasoning model: fp8 weight-quant can silently break a 3B where Q8 GGUF doesn't.
Credits
VibeThinker-3B-GGUF.Beta Was this translation helpful? Give feedback.
All reactions