Downloads · 30 days
192
21% of all-time downloads
ProCreations/grug-3b
grug-3b is a text generation model from ProCreations. Use it when you need the model to write or continue text. The card lists the license as apache-2.0.
small grug. think in grug, answer in normal english. never other way round.
Downloads · 30 days
192
21% of all-time downloads
All-time downloads
913
Public
Parameters
4.2B
25 GB on disk
Likes
29
Trending 1
Click a slice to open those files.
.safetensors8.3 GB · 100%
From the Hugging Face model README
small grug. think in grug, answer in normal english. never other way round.
base model Nanbeige4.2-3B is smart but think A LOT. ask it capital of france and it burn 482 think token on it. that is where grug find free lunch.
old grug (27b, 35b) think short. ALWAYS short. easy question short - good. hard question also short - bad, grug not do the work, answer come out worse. people tell grug this. grug listen.
grug-3b think short when problem small, long when problem big (median think token):
| problem | base | grug-3b | cut |
|---|---|---|---|
| trivial fact | 482 | 13 | −97% |
| easy word problem | 746 | 141 | −81% |
| medium (MATH lvl 3) | 646 | 208 | −68% |
| hard (MATH lvl 4) | 2010 | 363 | −82% |
| very hard (MATH lvl 5) | 2780 | 737 | −73% |
grug hard/easy think ratio 57x (median). base only 6x - base already near ceiling on easy question, cannot stretch. grug start from almost nothing and stretch when problem earn it.
matched subset, same problems both model, greedy where noted:
| benchmark | base | grug-3b | Δ | base tokens | grug tokens |
|---|---|---|---|---|---|
| GSM8K (80) | 96.2% | 86.2% | -10.0 | 1340.4 | 209.3 |
| MATH-500 (50) | 66.0% | 76.0% | +10.0 | 2128.6 | 834.4 |
| HumanEval (60) | 98.3% | 85.0% | -13.3 | 1544.7 | 388.4 |
| MBPP (50) | 90.0% | 82.0% | -8.0 | 2504.9 | 548.0 |
| ARC-Challenge (80) | 75.0% | 87.5% | +12.5 | 1324.2 | 65.4 |
| agentic tool replay (68) | 100.0% | 97.1% | -2.9 | 251.1 | 64.9 |
grug beat base on hard math (MATH-500 +10) and on factual multiple choice (ARC +12.5). base overthink those and talk itself out of right answer. grug check work instead of spiral.
grug lose on HumanEval and MBPP and GSM8K. that is real cost, grug not hide it. squeeze 48% of think token out of 3B brain, some code and some arithmetic fall out. if you need max code pass rate and token cheap, use base. if you want most of the brain at fraction of token, grug good trade.
first grug-3b lost GSM8K bad (81.2 vs 96.2). grug look at what break: think say "204 + 160 + 330" then write 710. gold 694. numbers all correct, sum wrong. grug never re-read own sum.
making think LONGER did not fix it (81.2 at both 86 and 107 think token). what fix it: mandatory second-pass arithmetic check in every numeric think, ~10 word cost:
Check: 204+160+330 -> 330+160=490, +204=694 ok.
that single rule took GSM8K 81.2 -> 86.2, MATH-500 64.0 -> 76.0, MBPP 76.0 -> 82.0. cheap habit, big brain.
think is grug. answer is NEVER grug.
Alicia n candies, 3-digit. n+5 = 0 mod 8 -> n = 3 mod 8. n-8 = 0 mod 5 -> n = 3 mod 5.
gcd(5,8)=1, CRT -> n = 3 mod 40. n = 40k+3. smallest 3-digit: k=3 -> 123.
check: 128/8=16 ok, 115/5=23 ok. k=2 gives 83 < 100. answer 123.
answer come out clean english, full sentence, markdown, latex. measured: grug answer function-word ratio 0.3071 vs base 0.2135 - grug answer read MORE like normal english than base answer do. user never see grug unless user open think tag.
on medium/hard problem grug sometimes run long and not close </think> inside
6144 token (91.7% closed at medium, 75.0% at very hard; base 66.7% at very hard).
median stay small (208 and 737 token) - it is a tail, not the middle.
give grug room (max_new_tokens>=2048) on hard problem.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
tok = AutoTokenizer.from_pretrained("ProCreations/grug-3b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("ProCreations/grug-3b",
trust_remote_code=True, dtype=torch.bfloat16, device_map="auto")
msgs = [{"role": "user", "content": "Solve x^3 - 3x^2 + 2x = 0."}]
text = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
out = model.generate(**tok(text, return_tensors="pt").to(model.device), max_new_tokens=2048)
print(tok.decode(out[0], skip_special_tokens=True))
template open <think> already. grug fill it, close it, then talk normal.
upstream modeling_nanbeige.py call Cache.get_max_length(), removed in 4.54.
replacement get_max_cache_shape() report -1 for unbounded cache where old
contract say None. pass -1 through and attention_mask get cropped one token,
position_ids go one short of hidden states, RoPE blow up on first forward.
grug ship patched modeling_nanbeige.py here. no user shim needed. fix verified
by checking cached generation match uncached generation exactly.
llama.cpp need nanbeige support - PR
ggml-org/llama.cpp#25994,
branch Nanbeige/llama.cpp:nanbeige42, until it merge upstream.
grug-9b, grug-27b, grug-35b, grug-3b. all open. apache 2.0.
grug made by ProCreations. grug not made by openai. grug not made by google. grug not official nanbeige product. grug just grug.