Gemma 4 12B and Llama 4 Scout on 48 synthetic contact-privacy cases

Date
31 October 2026
Task type
Local models
Status
Complete

Models tested

Model or toolProviderOpen?How run
Gemma 4 12B (Instruction model, QAT Q4_0 GGUF, llama.cpp runtime directory 2.59.0)GoogleOpen weightsLocal
Llama 4 Scout (17B-16E text, MLX 8-bit)MetaOpen weightsLocal

Purpose

Test whether a local model can distinguish contacts requiring redaction from public generic contacts, placeholders and numbers that are not contact data.

Context

Apple M3 Ultra desktop, 512 GiB unified memory, 32 CPU cores, shared workload. Forty-eight entirely synthetic labelled excerpts; twenty describe third-party contacts.

Method

One request per case, temperature zero, seed 731, thinking disabled, maximum 160 generated tokens. JSON schema and enum validation; malformed responses and confidence below 0.90 default to redact. One server slot, 2048-token context, four CPU threads, GPU offload. Each request was followed by a pause at least as long as its inference time. No prompt tuning or retries.

Results

Gemma 4 12B made 29 of 48 correct decisions and kept 0 of 20 third-party contacts. Llama 4 Scout made 45 of 48 but kept 3 of 20, each at confidence 1.00.
ModelClass accuracyDecision accuracyThird-party class missesUnsafe third-party keepsRequest time (s)Whole run (s)
Gemma 4 12B47/4829/480/200/2062.9132.5
Llama 4 Scout45/4845/483/203/20126.7260.6

Caveats

What this suggests

Decision accuracy and safety diverged: the model with fewer correct decisions was the safe one. Neither result establishes a safe automatic release gate.

Source

entries/2026-10-31-local-contact-privacy-classification.md in the GitHub repository (Markdown with YAML frontmatter).