Skip to content
HN On Hacker News ↗

GitHub - prabanta-dev/janas: 37 tok/s from Qwen3-Next-80B (48 GB) on a 32 GB laptop, 24 without drafts vs 2.8 for llama.cpp; reading 62 vs 16 tok/s. Faster than llama.cpp on all 13 models compared in Q4_K_M. LLMs bigger than your RAM, pure C, CPU or GPU.

▲ 221 points • 95 comments • by khalidkhair • 3w ago • HN discussion ↗

Pangram verdict · v3.3

We believe that this text is a mix of AI and human-written content.

67 %

AI likelihood · overall

Mixed
30% human-written 70% AI-generated
SEGMENTS · HUMAN 1 of 11
SEGMENTS · AI 5 of 11
WORD COUNT 1,659
PEAK AI % 91% · §6
Analyzed
Oct 13
backend: pangram/v3.3
Segments scanned
11 windows
avg 151 words each
Distribution
30 / 70%
human / AI fraction
Verdict
Mixed
Pangram v3.3

Article text · 1,659 words · 11 segments analyzed

Human AI-generated
§1 Human · 10%

37 tok/s from Qwen3-Next-80B (a 48 GB model) on a laptop with 32 GB of memory, 24 without drafts, where llama.cpp manages 2.8; reading a prompt, 62 tok/s against 16. Janas-LLM was faster than llama.cpp on every model compared on the same laptop (Debian 13 Linux, Intel Core Ultra 9 185H, its integrated Arc GPU, 32 GB, an NVMe SSD; 9-11 October 2026; the whole machine below): Model reading 1,024 tokens: Janas-LLM llama.cpp writing: Janas-LLM llama.cpp Qwen3-Next-80B-A3B (48.4 GB, more than the memory) 62 tok/s 16 tok/s 24 tok/s 2.8 tok/s Qwen3-Coder-Next (48.4 GB, more than the memory) 66 tok/s 14 tok/s 22 tok/s 2.2 tok/s Qwen3.6-35B-A3B 104 tok/s 79 tok/s 19 tok/s 12 tok/s Qwen3-30B-A3B 135 tok/s 122 tok/s 32 tok/s 15 tok/s Gemma-4-26B-A4B-it 84 tok/s 76 tok/s 18 tok/s 12 tok/s Gemma-4-12B-it 65 tok/s 46 tok/s 9.9 tok/s 7.1 tok/s Qwen3.5-9B 111 tok/s 78 tok/s 14 tok/s 8.7 tok/s Gemma-4-E4B-it 122 tok/s 109 tok/s 20 tok/s 15 tok/s Qwen3-4B 193 tok/s 164 tok/s 27 tok/s 18 tok/s Gemma-4-E2B-it 191 tok/s 150 tok/s 38 tok/s 19 tok/s Qwen3.5-2B 441 tok/s 323 tok/s 52 tok/s 28 tok/s Qwen3.5-0.8B 799 tok/s 519 tok/s 109 tok/s 32 tok/s Qwen3-0.6B 939 tok/s 670 tok/s 130 tok/s 45 tok/s The same models from other hands, in the catalog beside them: Model reading 1,024 tokens: Janas-LLM llama.cpp writing: Janas-LLM llama.cpp Qwen3-30B-A3B, bartowski's Q4_K_M (importance matrix) 131 tok/s 122 tok/s 32 tok/s 16 tok/s Qwen3-30B-A3B, unsloth's UD-Q3_K_XL (3 bits) 100 tok/s 112 tok/s 36 tok/s 11 tok/s Qwen3-4B, bartowski's Q4_K_M (importance matrix) 191 tok/s 160 tok/s 26 tok/s 18 tok/s One exception: the 3-bit Qwen3-30B reads a prompt slower than llama.cpp, since its Q3_K weights do not go to the GPU's fast prompt yet; it writes three times as fast.

§2 AI · 75%

How they were measured, and the speeds with the drafts: What works now. On another machine the figures will be other ones: janas-bench measures yours. Try it on Linux x86-64 (Ubuntu 22.04, Debian 12 and later): curl -LO https://github.com/prabanta-dev/janas/releases/latest/download/janas-linux-x86_64.tar.gz tar xf janas-linux-x86_64.tar.gz && cd janas ./janas-chat # the models it knows: pick one, it is downloaded and checked Or on Windows 10 (1903 or later) and 11, x86-64: download janas-windows-x86_64.zip, unpack it, and in a terminal in its janas folder run .\janas-chat. On the same laptop under Windows 11 (12 October 2026) Janas-LLM wrote as fast as on Linux (Qwen3-4B 25.6 tok/s, Qwen3-30B-A3B 34.2) and read a prompt as fast with the mixture (Qwen3-30B-A3B 132 tok/s) and 1.8 times as fast with the dense model (Qwen3-4B 346 tok/s against 193), whose whole blocks go to the GPU, through Intel's own Windows driver there. The models come already converted from Hugging Face; building from the sources: Getting started.

§3 Mixed · 30%

▄███████████▄ ▄███████████████▄ ███ ▄ █████ ▄ ███ ▄ J A N A S ███▄▄▄█████▄▄▄████ ▀█████▄▀▀▀▄█████▀ ▀ a family of tools for artificial intelligence, in C █████████████ █ █ █ █ █ █ █ █ ▀ ▀ ▀ ▀ ▀ ▀ ▀ ▀ Janas is a family of tools for artificial intelligence, written in C with no dependencies beyond the C library.

§4 AI · 82%

Its first component, Janas-LLM, runs large mixture-of-experts language models on ordinary computers, with or without a GPU: the weights stay on disk, the experts each token needs are streamed from an NVMe SSD, and the ones that keep coming back stay in memory. An 80-billion parameter model runs, and answers, on a laptop with 32 GB of RAM. Designed and written by Maurizio "camauri" Cammalleri. ⚠ Read this first This is an experiment, not a product. Stage Early development. The public API and the command line change without notice, and have changed several times a week. The models' files are the exception: the .jns files published on Hugging Face (format version 2) will be read by every later version of Janas-LLM. Stability Not verified. The engine is deliberately hard on the machine: it fills the free memory with its expert cache and reads the disk at full speed with O_DIRECT. On a machine with less headroom than it reckons, the desktop can be pushed into swap and become slow or unresponsive. Using a GPU has, once, caused a driver reset that took the desktop with it. Data It writes only in ~/.cache/janas (what it learns about your machine, and the system messages it has read, so as not to read them again) and where you tell it to put a converted model. It does not touch the model files it reads. Hardware Developed and run on one machine (below). On anything else it is untested: it may be slower, it may refuse the model, it may misbehave. If something goes wrong, Ctrl-C stops a reply and Ctrl-D leaves the chat; --cache <GiB> puts a hard limit on the memory it takes, and JANAS_GPU=0 keeps it off the GPU entirely.

§5 Mixed · 49%

The machine it grew on Everything in this repository was written and measured on: Linux Debian 13 (trixie), x86-64, kernel 6.12.107; GPU driver Mesa 26.1.6 (Vulkan); built with GCC 14.2 Intel Core Ultra 9 185H (6 performance cores, 8 efficiency, 2 low-power; AVX2, FMA, F16C, AVX-VNNI; integrated Arc GPU) 32 GB of DDR5 RAM 1 TB NVMe SSD (about 5.7 GB/s reading) The Windows build was run on the same laptop under Windows 11 (build 26300), with Intel's own graphics driver: its tests pass there, and how fast it was is under Or on Windows, above.

§6 AI · 91%

Everything the engine does is chosen from what it measures, so another machine will make other choices — that part is meant to travel. What has never been tried is the rest: other CPUs (especially without AVX-VNNI, or AMD), discrete GPUs, slower disks, more or less memory. If you run it somewhere else, the report from janas-bench is the single most useful thing you can send back (see Helping it run on more hardware). What works now What Janas-LLM runs today, model by model and feature by feature: docs/features.md.

§7 Mixed · 31%

On the machine above, with nothing else running, janas-bench reports this (measured on 10 October 2026, with the fast prompt the engine uses by default since that day): Model reading a prompt writing a reply with drafts, in a chat Qwen3.5-2B (dense, 1.3 GB) 395 tok/s 50 tok/s 67 tok/s Qwen3-4B (dense, 2.5 GB) 220 tok/s 28 tok/s see --draft below Qwen3.5-9B (dense, 5.7 GB) 103 tok/s 14 tok/s 24 tok/s Qwen3-30B-A3B (18.6 GB) 133 tok/s 34 tok/s — Qwen3.6-35B-A3B (22.3 GB) 86 tok/s 25 tok/s 34 tok/s Qwen3-Next-80B-A3B (48.4 GB) 64 tok/s 22 tok/s 37 tok/s Gemma-4-E2B-it (3.1 GB) 211 tok/s 38 tok/s 52 tok/s Gemma-4-E4B-it (5.0 GB) 133 tok/s 20 tok/s 32 tok/s Gemma-4-12B-it (dense, 7.1 GB) 71 tok/s 10 tok/s 14 tok/s Gemma-4-26B-A4B-it (18.3 GB) 90 tok/s 18 tok/s 26 tok/s Every figure is the mean of three rounds, not a best round, of the configuration the engine itself chose for each kind of pass - the one a chat runs: a prompt of 256 tokens, then 64 written.

§8 AI · 71%

Here the integrated GPU reads every prompt (the fast prompt, below), and the threads the engine settled on were the performance cores' 12 for a prompt and for a single token on nearly every model, all the usable cores (performance and efficiency, not the low-power ones) for a few tokens at once. On another machine the engine may settle on other threads: the first passes of each kind try every core, one thread per performance core and the performance cores' threads, keep the fastest, and later try the others now and then, so that a machine that warms up can change the verdict (on an i9-14900HX every thread replied at less than half the speed of the performance cores' 16). The rounds run in alternating order so that the machine warming up and the cache filling weigh on each setting alike.

§9 Mixed · 40%

Expect a few per cent either way between runs, and rather less than these on a first run, while the cache is still filling. Without the GPU (JANAS_GPU=0) Qwen3-4B reads the same prompt at 85 tok/s and writes at 27.

§10 AI · 74%

The last column is a draft guessing the next tokens and the model checking them, which is the same text at a higher rate — the whole of it is explained under --mtp: the Qwen3.5 and Qwen3.6 models' and Qwen3-Next's own prediction block, Gemma 4's assistant (a small drafting model of its own). It is measured on a chat reply: an ordinary question in English ("explain how bread is made at home"), 64 tokens of the answer, sampled as the chat samples.

§11 Mixed · 34%

What the draft is worth depends on the text: there the drafts survived 74-89% of the time on the Qwen models and Gemma's two larger ones, 63-72% on Gemma's E2B and E4B; on Italian prose Qwen3.5-2B kept about a third of them, and gained next to nothing. One round of 64 tokens is noisy here, a tenth either way between runs. Qwen3-30B-A3B has no such block, nor have the dense Qwen3; the dense Qwen3.5 have one in their original checkpoint, which hf2jns_mtp converts (MODELS.md). This column was wrong until 26 September 2026, and higher: it measured the block continuing a paragraph that repeated itself, which a model copies and the block guesses almost every time - 107 tok/s for Qwen3.5-2B, 26 for Qwen3.5-9B. The MoE figures of the time (29 and 30) happened to be lower than today's; the ChangeLog has the details. The comparison with llama.cpp at the top of this page was measured so: llama.cpp (build 2b18470 of 18 September 2026) with its Vulkan backend on the same integrated GPU, everything on it (llama-bench -p 1024 -n 16 -ngl 99 -t 12; the largest model otherwise, below), against janas-bench --prompt 1024 --gen 16 on the same files the same days (9-11 October 2026; llama.cpp's best configuration, Janas-LLM's own choice; on 11 October three rounds each, llama-bench -r 3 and janas-bench --rounds 3, for Qwen3-0.6B, Qwen3.5-0.8B, Qwen3.6-35B-A3B and the models from other hands; Qwen3-Coder-Next as Qwen3-Next-80B, below).