Search Old Results Before Publishing an LLM Test
An independent QA pass caught my second post about the same Ollama batch sweep. Here is the duplicate check I now run before publishing an LLM result.
TL;DR
- On August 1, 2026 a second draft about the same Ollama num_batch sweep failed independent QA. The July 30 report carried generated_at: 2026-07-30 09:50 and mixed Ollama 0.22.1 rows with Ollama 0.31.1 rows.
- In the saved gemma4:26b workshop rows, num_batch=256 produced 215.7 output tokens per second at 187.6 watts average. The 512 row reached 218.5 output tokens per second at 234.3 watts average. Both passed the fixed task checks.
- The July 19 post already compared those rows and made the same route choice. Search the archive for the model, the setting, and two signature numbers such as 215.7 and 218.5 before drafting.
My latest RTX 5090 post passed every mechanical check and still failed QA. I had already published the finding.
The short answer: Before I write from a local LLM benchmark, I now search the published archive for the model, runtime setting, and two signature numbers from the result. That check catches a repeated conclusion even when the title and framing changed. On August 1, 2026, it stopped me from publishing a second post about the same Ollama num_batch sweep. Canonical URL: https://bmdpat.com/blog/ollama-num-batch-tuning-quality-gate-2026

How did the duplicate get through the first checks?
The new draft looked clean. It used a fresh July 30 report, cited the source rows, included two live internal links, passed the prose gate, passed the publish-body validator, and carried a generator-made visual that cleared the mechanical image check. Every one of those gates reads the draft on its own. None of them reads the archive.
Its conclusion was also defensible. In the saved gemma4:26b workshop rows, num_batch=256 produced 215.7 output tokens per second at 187.6 watts average. The 512 row reached 218.5 output tokens per second at 234.3 watts average. Both passed the fixed task checks.
The problem was not truth. The problem was novelty.
My July 19 post, Ollama num_batch: 256 Was My RTX 5090 Sweet Spot, had already compared those rows and made the same route choice. The second draft changed the title and added a tuning checklist, but the load-bearing finding was identical.
Why is a new report date not a new result?
The July 30 lab report carries generated_at: 2026-07-30 09:50. That stamp records when the rollup ran. It says nothing about when any single row was measured.
The saved rows prove the gap. The workshop benchmark CSV has these columns: model, quant, engine, workload, input tokens, output tokens, tokens per second, watts average, and notes. There is no capture-time column at all. The same July 30 table also mixes runtime versions, listing rows from Ollama 0.22.1 and rows from Ollama 0.31.1. One report date cannot stand in for the run time of any row.
So a report generator can pull an old measurement back into view without creating new evidence. If I treat the newest report as a list of new findings, I publish the same result twice.
My benchmark provenance guide argues for binding driver, runtime, model, workload, settings, and capture time to every row. This workshop CSV predates that rule, which is exactly how a stale row reads as current. The content path needs one more field on top: the public claim already made from that row.
What is a signature-number search?
A title search is too weak. The old post may use different words.
I search for three parts of the result together:
- The model or model family, such as
gemma4:26b. - The changed setting, such as
num_batch. - Two numbers that identify the comparison, such as
215.7and218.5.
The numbers act like a small fingerprint. They survive headline changes and topic labels. A match does not always mean the new post is a duplicate, but it forces a direct comparison before drafting continues.
For this run, the search found the July 19 post. Independent QA then compared the thesis, rows, power tradeoff, and recommendation. It returned FAIL, so the post did not ship.
When can the same benchmark support another post?
The bar is a new decision, not a new introduction.
The same rows can support a follow-up if new evidence changes the route, a later runtime version changes the result, or the post answers a different operational question that the first one did not answer. A translation of the same conclusion into another checklist is not enough.
For example, a repeated sweep across several seeds could show whether the 2.8 tokens-per-second gap persists. A new VRAM trace could test whether either batch value crosses a memory limit. A queue-level run could measure completed jobs per hour instead of output rate. Those would add evidence.
Without that addition, I should link the old post and move on.
What gate do I run before drafting now?
First, identify the exact measurement rows. Do not start from the report title.
Second, extract the model, setting, workload, and two signature numbers. Search the published archive for all four.
Third, compare the proposed one-sentence takeaway with each match. If the new post reaches the same conclusion from the same rows, stop.
Fourth, record what changed. A new model, rerun, verifier, route decision, or failure can justify a follow-up. A new date in a rollup cannot.
This gate runs before I draft the hook. It also keeps the public lab notebook honest. Readers get one clear result instead of several versions that make the evidence look larger than it is.
Accompanying prompt
What the prompt does: It checks whether a planned local LLM benchmark post repeats a finding that is already public.
Copy/paste this prompt:
Copy-ready prompt
Paste the exact block into your coding agent.
No article chrome, no footnotes, no formatting drift.
This prompt and every other one we publish live in the free prompt library.
Copy the block above.
I publish measured local AI build notes in The 5090 Reports. Join the email list for the next result.
FAQ
Why did the second num_batch post fail QA?
The draft passed prose, publish-body, and image checks, but its load-bearing finding matched the July 19 post: num_batch 256 at 215.7 tok/s versus 512 at 218.5 tok/s.
Why is a new report date not a new result?
The July 30 stamp records when the rollup ran. The workshop CSV has no capture-time column and mixes Ollama 0.22.1 with 0.31.1. A generator can pull an old measurement back into view.
What is a signature-number search?
Search for the model or family, the changed setting, and two numbers that identify the comparison. For this run that was gemma4:26b, num_batch, 215.7, and 218.5.
Get the Local AI Field Kit
Four copy-ready tools now, then one evidence-backed Local AI Lab Note on Friday when there is something worth sharing.
Try the free agent run check firstGet the requested artifact now, then at most one evidence-backed Local AI Lab Note on Friday when there is something worth sharing. One-click unsubscribe. No sponsored placements. Privacy.
Patrick Hughes
I build BMD and publish measured AI runs, failure reports, and reusable checks. Nashville, Tennessee.
More writing
- 6 min
Build Local LLM Eval Data From Real Failures
I show how I turn failed local coding runs into replayable eval rows with the prompt, model output, tests, route, and verifier result intact.
- 5 min
Log Local LLM Fallbacks Before You Score the Output
My local writer hit a host RAM guard, then Sonnet produced a draft that failed QA. Here is how I separate availability, model identity, and useful output.
- 5 min
My local daily brief used 0 model calls
On September 4, 2026 my llama3.1:8b daily brief was ready with 0 model calls and 0 seconds. Preview-only file ranking is not a model run.
- 5 min
Long Context Cost Me VRAM, Not Tokens a Second
A 94x bigger prompt cost llama3.1:8b only 9.7% of its generation rate. VRAM rose 656 MiB, but num_ctx doubled in the same step. Budget memory first.
- 5 min
One model logged 14.5 and 6,178 prompt tokens a second
gemma4:26b read 53 prompt tokens at 14.5 tok/s and 4,470 at 6,178.9 on the same RTX 5090 run set. Prompt speed is not one number.