Skip to content

fix(benchmarks): resolve a tag to Ollama's own spelling, and mark a model whose every run failed - #3078

Merged
Xore merged 1 commit into
mainfrom
fix/tag-case-silent-hole
Sep 6, 2026
Merged

Xore merged 1 commit into
mainfrom
fix/tag-case-silent-hole

Conversation

@Xore

@Xore Xore commented Sep 6, 2026

Copy link
Copy Markdown
Owner

Two defects that combined into silent data loss. Three models pulled
perfectly, failed all six run attempts, were written MODEL_DONE, and had their
weights deleted — leaving nothing in the results directory to say they had not
been measured.

1. Ollama's stored tag case is not the case you asked for

It rewrites some quant-shaped tags and not others. Measured on tags this repo
created itself, every one written lowercase:

gemma4-26b-a4b-selfquant:q3_k_m    ← kept as written
gemma4-26b-a4b-selfquant:Q4_K_M    ← uppercased by Ollama
gemma4-26b-a4b-selfquant:q5_k_m    ← kept as written

sweep_extra.sh's presence check is grep -qixF — case-insensitive, so a
folded tag passes. record_baseline.py then resolves the model by exact
string match against /api/tags and exits model tag is not installed. Every
run fails for a model that is sitting right there.

It hit exactly the rows that matter most: Ornith-35B Q3_K_M and
gemma-4-26B-A4B Q3_K_M/Q5_K_M — the published twins of the self-quantized
ladder, i.e. the controls the entire #2245 comparison rests on. gemma Q4_K_M
succeeded, which is what made it look like a per-model quirk instead of a
systematic one.

Fixed in the driver, not in record_baseline.py — that file is on the pinned
a99e765 harness, and moving the pin to fix a name lookup would split the
scoring vintage for no benefit. The driver now hands the scorer the name Ollama
actually holds.

Verified live: the same model that failed three times now scores 62.

08:31:01 tag case differs: roster '…:Q3_K_M' -> ollama '…'
08:32:49 done  A Ornith-1.0-35B…Q3_K_M run1 score=62

2. A model that produced nothing left no marker

Total failure wrote a GIVEUP line to failures.txt and MODEL_DONE to the
log, and nothing next to the results. Anything reading the results directory
could not distinguish it from a model that was never in the roster. Same
silent-hole class as the false EXTRA_COMPLETE in #3031 — and it is why defect 1
went unnoticed until the phase-3 chain refused to advance.

Now writes UNMEASURED with the reason, so the state is machine-readable.

The guard held, and that is the point

chain_phase3.sh's completion check — every roster entry has both tier files
or an explicit marker — blocked with:

sweep not running but roster incomplete (46+3/52) -- waiting

Without it, the ladder scoring and then the 96-model cold run would both have
proceeded with three of the most decision-relevant rows missing, and nothing
announcing it. The whole reason that guard exists is that EXTRA_COMPLETE has
lied three times; this is the fourth shape it would have taken.

Refs #1947, #2245, #3031, #2738

…odel whose every run failed

Two defects that combined into silent data loss. Three models pulled perfectly,
failed all six run attempts, were written MODEL_DONE, and had their weights
deleted -- leaving nothing in the results directory to say they had not been
measured.

## 1. Ollama's stored tag case is not the case you asked for

It rewrites SOME quant-shaped tags and not others. Measured on tags this repo
created itself, every one written lowercase:

    gemma4-26b-a4b-selfquant:q3_k_m    <- kept as written
    gemma4-26b-a4b-selfquant:Q4_K_M    <- uppercased by Ollama
    gemma4-26b-a4b-selfquant:q5_k_m    <- kept as written

sweep_extra.sh's presence check is `grep -qixF`, case-insensitive, so a folded
tag passes it. record_baseline.py then resolves the model by EXACT string match
against /api/tags and exits "model tag is not installed". Every run fails for a
model that is sitting right there.

It hit exactly the rows that matter most: Ornith-35B Q3_K_M and
gemma-4-26B-A4B Q3_K_M/Q5_K_M -- the published twins of the self-quantized
ladder, i.e. the controls the whole #2245 comparison rests on. gemma Q4_K_M
succeeded, which is what made it look like a per-model quirk rather than a
systematic one.

Fixed in the driver, not in record_baseline.py: that file is on the pinned
a99e765 harness, and moving the pin to fix a name lookup would split the scoring
vintage for no benefit. The driver now hands the scorer the name Ollama actually
holds. Verified live -- the same model that failed three times now scores 62.

## 2. A model that produced nothing left no marker

Total failure wrote a GIVEUP line to failures.txt and MODEL_DONE to the log, and
nothing at all next to the results. Anything reading the results directory could
not tell it from a model that was never in the roster. Same silent-hole class as
the false EXTRA_COMPLETE in #3031, and it is why defect 1 went unnoticed until
the phase-3 chain refused to advance.

Now writes UNMEASURED with the reason, so the state is machine-readable.

## The guard held

chain_phase3.sh's completion check -- every roster entry has both tier files OR
an explicit marker -- blocked on "roster incomplete (46+3/52)" and would not
start the ladder scoring. Without it the ladder and then the 96-model cold run
would both have proceeded with three of the most decision-relevant rows missing
and nothing announcing it.

Refs #1947, #2245, #3031, #2738
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@Xore
Xore merged commit 32dbdeb into main Sep 6, 2026
107 checks passed
@Xore
Xore deleted the fix/tag-case-silent-hole branch September 6, 2026 09:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant