AI News

Qwen3 0.6B vs 1.7B vs 4B: JSON Tested on M4 Pro (Results + Cost)

The short answer

Qwen3-4B-Q4_K_M returned exact JSON on 8 of 12 attempts; Qwen3-0.6B-Q8_0 and Qwen3-1.7B-Q8_0 each passed 3 of 12. The 0.6B file had the shortest median request time: 0.285 seconds. Start with the tested 4B file for these JSON tasks, and check every answer against your rules. Paid provider charges were $0; hardware and electricity costs were not measured.

Four repeated tasks on one M4 Pro, with different quantizations, cannot establish a general model winner or isolate model size.

Results at a glance

Exact model fileStrict passesFormatting-only failuresContent or schema failures
Qwen3-0.6B-Q8_0.gguf3 / 1236
Qwen3-1.7B-Q8_0.gguf3 / 1236
Qwen3-4B-Q4_K_M.gguf8 / 1204

Passing meant returning only JSON with the exact keys, values, types and array order. Removing a code fence did not turn a failed answer into a pass.

Exact model fileMedian request secondsRuntime generation tokens/sPeak sampled process RSS, GiB
Qwen3-0.6B-Q8_0.gguf0.285200.91.18
Qwen3-1.7B-Q8_0.gguf0.58387.22.21
Qwen3-4B-Q4_K_M.gguf0.68267.52.70

Timing includes the unscored summaries and excludes downloads, loading and hashing. RSS is sampled server-process memory, not total unified-memory or GPU use. Read the full measurement limits.

The 4B file passed more JSON attempts

It passed 8/12, but approved a $101 item despite the $100 ceiling on all three approval-task attempts.

The smaller files answered faster

Their median request times were lower, but both passed 3/12 JSON attempts. The 1.7B file kept an outdated owner and launch date on all three correction-task attempts.

Actual Kingy test report showing strict JSON results: 3 of 12 for Qwen3-0.6B, 3 of 12 for Qwen3-1.7B, and 8 of 12 for Qwen3-4B.
Screenshot of the actual local test report. Four distinct JSON tasks were repeated three times per model; this is a narrow pilot, not a broad model ranking.

What we did

We ran three exact Qwen3 files on one Apple M4 Pro with 24 GiB unified memory. Each file answered four short synthetic JSON tasks three times: invoice extraction, corrected owner/date extraction, a deadline boundary and conditional approval.

We checked each reply against a fixed answer key. Code fences failed the JSON-only requirement. We also saved 18 summaries without scoring their factual quality, plus three unscored warmups. All 54 benchmark requests returned outputs.

One model and one server slot ran at a time through llama.cpp 0.4.0-dev, build 10809. We used a 4,096-token context, a 256-token output cap and seeds 4101–4103. We measured request timing and sampled server-process memory. The full settings and measurement limits are below.

Try it yourself

Inspect the outputs or repeat the strict scoring

Download the public evidence ZIP ↓

The ZIP includes prompts, outputs, the answer key, the strict scorer, exact settings, timing data and sampled memory traces. Model binaries are not included. Find the exact model files and runtime before rerunning inference.

Read the saved outputs to see the formatting and content mistakes. A new inference run uses your own hardware and electricity; the recorded $0 provider charge is not a total ownership cost.

How we tested and what this can't tell you

The original records below keep the exact conditions, measurements, source revisions and limits. The summaries remain unscored, and quantization differs across files.

Original opening: scope and output counts

In this small local pilot, Qwen3-4B-Q4_K_M returned the requested exact JSON on 8 of 12 attempts. Qwen3-0.6B-Q8_0 and Qwen3-1.7B-Q8_0 each passed 3 of 12. These results cover four short synthetic tasks repeated three times on one Apple M4 Pro with 24 GiB unified memory. They are observations about these files and settings, not a general model ranking.

We recorded 54 benchmark task outputs, plus three unscored warmup responses. The task outputs comprise 36 exact-answer JSON responses and 18 summaries. Every request returned an output. The summaries are retained but their factual quality remains unadjudicated and contributes no accuracy score.

Exact JSON results

The tasks tested invoice extraction, corrected owner/date extraction, a deadline boundary, and conditional approval. A pass required JSON-only output with the specified keys, values, types and array order. Markdown fences failed the original requirement even when the enclosed JSON was otherwise correct. We did not change that rule after seeing the results.

Formatting-only means removing one surrounding Markdown code fence reveals JSON that exactly matches the answer key. This is a diagnostic explanation, not a revised score. Content/schema failures can also contain fences; categories are mutually exclusive.

For example, the 1.7B file retained the superseded owner and launch date in all three correction-task attempts. The 4B file approved an item priced at $101 despite the stated $100 ceiling in all three approval-task attempts. The raw outputs preserve those mistakes.

Observed timing and process memory

Timing covers all 18 completed requests per file, including the unscored summaries. Request time starts after the server is ready and excludes downloads, model loading and file hashing. Generation speed is the generation-duration-weighted mean of the runtime’s reported throughput, retaining its first-token timing convention. It excludes prompt processing and loading.

RSS was sampled from the server process with macOS ps roughly every 100 ms. It is not total unified-memory or GPU physical footprint, and sampling can miss brief peaks. We did not use model file size as a substitute for measured memory. No electricity or total ownership cost was measured.

How this run was controlled

We used llama.cpp 0.4.0-dev, build 10809, commit 5266f24da. One model and one server slot ran at a time, with four CPU inference and batch threads, requested all-layer GPU offload (-ngl 99), a 4,096-token context, prompt caching disabled, temperature 0.6, top-p 0.95, a 256-token output cap, and seeds 4101–4103. The retained logs do not independently confirm actual device placement. Other runtime defaults are retained in the metadata. Each model received one unscored warmup capped at eight output tokens. Pinned source files were SHA-256 verified before inference.

The complete cohort interval was 79.98 seconds, including startup, warmups, hashing and requests. Paid provider charges were $0. Hardware and electricity are excluded from that figure.

What this can and cannot establish

There are four distinct JSON tasks per model, not 12 independent task designs. Three repetitions describe this narrow sample; they do not establish broad capability or population-level reliability. The 4B file uses Q4_K_M while the smaller files use Q8_0, so this is not a controlled model-size comparison. Summary quality remains pending, and these timings should not be generalized to other machines, prompts, contexts or runtime versions.

Primary sources and evidence

The source links identify the files and runtime; they do not substantiate Kingy’s measured scores. Our saved requests, outputs, answer key, checksums and timing/RSS records provide that evidence.

Original download contents and redaction notes

Download the evidence

Download the public evidence ZIP (about 121 KB). Includes all 54 benchmark task outputs, three unscored warmup responses, prompts, answer key, reproducible strict scorer, settings, timing data and sampled process RSS traces. Local usernames, absolute path prefixes and ephemeral identifiers are redacted; prompts, response text, measurements and model hashes are preserved. Model binaries are not included.

FAQ

Which Qwen3 file passed the most JSON attempts?

Qwen3-4B-Q4_K_M.gguf passed 8/12. Qwen3-0.6B-Q8_0.gguf and Qwen3-1.7B-Q8_0.gguf each passed 3/12. Four tasks on one machine and different quantizations prevent a general model ranking.

Why did correct JSON inside a code fence fail?

The original rule required JSON-only output. A surrounding Markdown code fence failed that requirement. Formatting-only failures identify otherwise exact answers after removing the fence, but the score was not revised.

Does the memory table show total Mac memory use?

No. It shows peak sampled RSS from the server process, sampled roughly every 100 ms. It is not total unified-memory or GPU physical footprint, and brief peaks may be missed.

Did the local test cost nothing?

Paid provider charges were $0. Hardware, electricity and total ownership cost were not measured. The complete run interval was 79.98 seconds, including startup, warmups, hashing and requests.

Were the summaries scored for accuracy?

No. The 18 summaries were saved, but their factual quality remains unadjudicated and contributes no accuracy score. The exact JSON results cover 36 responses.