Evaluation Report: Smoke v2 DGX refresh — local champion re-pick (June 2026)¶
Refresh + expansion of the autoresearch local-LLM matrix, run on the DGX Spark from #810/#811. Adds DeepSeek-R1 distill family (7B / 14B / 32B / 70B), gpt-oss:20B, and qwen3.6:latest as new entries; re-confirms the existing 12-model qualifier set; chooses a local champion against the
silver_sonnet46_smoke_v1reference. Closes #924.
| Field | Value |
|---|---|
| Date | 2026-06-08 (sweep), 2026-06-09 (rerun + report) |
| Dataset | curated_5feeds_smoke_v1 (5 episodes, 5 feeds) |
| Silver reference | silver_sonnet46_smoke_v1 (Claude Sonnet 4.6) |
| Baseline (for delta-vs-baseline columns) | baseline_llm_ollama_qwen35_35b_smoke_paragraph_v1 — established April 2026 as the highest-quality stable local model from the original 12-cell matrix |
| DGX compute | NVIDIA GB10 (Spark) via tailnet; same target as #814 Speaches and #926 pyannote |
| Run dirs | data/eval/runs/llm_ollama_*_dgx_smoke_v2_2026_06/ |
| Closes | #924 (refresh decision) |
| Informs | #923 (prod-DGX profile model pick), #928 (DGX-vs-cloud summary championship) |
Setup¶
Sweep configs at data/eval/configs/summarization/autoresearch_prompt_ollama_<slug>_smoke_paragraph_v1.yaml. Prompts at src/podcast_scraper/prompts/ollama/<slug>/summarization/. For the 6 NEW models (DeepSeek-R1 family, gpt-oss, qwen3.6) the prompts were cloned verbatim from qwen3.5_9b — per-model prompt tuning is out of scope for this refresh, but flagged in "What this does not do" below.
Sequence:
- Pull on DGX —
ollama pull <model>for the new entries (~90 GB total over the tailnet). - Main sweep — ran the 12-cell matrix; established baselines + retrieved DGX-side timings for the existing matrix. (
scripts/eval/smoke_v2_dgx_refresh.sh) - Retry sweep — added the 7 new entries with
baseline_llm_ollama_qwen35_35b_smoke_paragraph_v1as the stable reference. (scripts/eval/smoke_v2_dgx_refresh_retry.sh) - Two-cell fix-and-rerun — qwen3.6:latest and deepseek-r1:70b initially failed; root-caused + fixed; rerun via
scripts/eval/smoke_v2_dgx_refresh_rerun_fixes.sh.
The killswitch on the retry sweep deliberately SIGTERM'd before qwen3-coder:30b started — qwen3-coder is a coder-specialized model, wrong domain for paragraph summarization. Excluded by design.
Two surfaced bugs (fixed)¶
Bug 1 — qwen3.6:latest produced 0-token content for every episode¶
Symptom: length.avg_tokens = 0, vs_reference.rougeL_f1 = null across all 5 episodes. Pipeline reported success (no errors) but the model returned an empty message.content.
Diagnosis: Direct curl to /api/chat showed eval_count: 200 (model generated 200 tokens) but content: "". The 200 tokens went into the separate thinking field. qwen3.6 (qwen35moe family) is a reasoning model that emits chain-of-thought to a thinking channel by default; with the autoresearch config's max_length: 800, the model consumed all 800 tokens reasoning and never reached the answer.
Fix: src/podcast_scraper/providers/ollama/ollama_provider.py — extended the existing reasoning_effort: none shim (originally added for qwen3.5) to cover qwen3.6 and the broader qwen3.x family (qwen3.5 / qwen3.6 / qwen3- / qwen3:). Test coverage added in tests/integration/providers/llm/test_ollama_provider.py.
After fix: qwen3.6 produces 2500-3200 char summaries in 7-8s per episode.
Bug 2 — deepseek-r1:70b "Ollama summarization failed: Request timed out"¶
Symptom: Both datasets reported status: error with the same error on episode 1. Other R1 distills (7B/14B/32B) completed normally.
Diagnosis: Direct curl showed 70b R1 takes ~70s of eval time even on a 16-word input — chain-of-thought generation is verbose, and a 5K-char podcast input would generate thousands of CoT tokens. Default ollama_timeout of 120s is too short.
Fix: Rerun via scripts/eval/smoke_v2_dgx_refresh_rerun_fixes.sh sets EXPERIMENT_OLLAMA_READ_TIMEOUT=1200 (20 min per request). The env-var hook was already in place at scripts/eval/experiment/run_experiment.py:1199-1203 from prior 27B+ work.
Note: R1 doesn't honor reasoning_effort: none (R1 = Reasoning #1, hardcoded). The output still includes a thinking channel, but content is also populated separately, so our pipeline reads it cleanly.
Headline numbers — full sweep against silver Sonnet 4.6¶
Sorted by RougeL vs silver. Higher = closer to Sonnet output (caveat: see methodology notes). All scores from data/eval/runs/llm_ollama_<slug>_dgx_smoke_v2_2026_06/benchmark_summary.json on the curated_5feeds_smoke_v1 dataset.
| Model | Size | RougeL | Rouge1 | Cosine | Coverage | Avg tokens | Latency excl 1st (ms) | Notes |
|---|---|---|---|---|---|---|---|---|
qwen3.5:27b |
27B | 0.271 | 0.603 | 0.835 | 1.014 | 646 | 38,370 | highest RougeL — latency-disqualified for prod |
qwen3.6:latest |
36B (MoE) | 0.271 | 0.608 | 0.801 | 0.895 | 570 | 6,733 | new champion candidate — ties qwen3.5:27b RougeL at qwen3.5:35b latency |
qwen3.5:35b |
35B | 0.262 | 0.613 | 0.788 | 0.972 | 619 | 6,747 | ← current baseline (April champion) |
mistral:7b |
7B | 0.260 | 0.577 | 0.782 | 0.695 | 443 | 9,170 | |
llama3.2:3b |
3B | 0.254 | 0.545 | 0.813 | 1.059 | 675 | 6,472 | |
gemma2:9b |
9B | 0.249 | 0.570 | 0.825 | 0.727 | 463 | 11,577 | |
mistral-small3.2 |
~24B | 0.249 | 0.564 | 0.801 | 0.742 | 473 | 25,079 | |
llama3.1:8b |
8B | 0.247 | 0.571 | 0.815 | 0.956 | 609 | 11,963 | |
mistral-nemo:12b |
12B | 0.241 | 0.533 | 0.749 | 0.961 | 612 | 16,297 | |
qwen2.5:7b |
7B | 0.236 | 0.574 | 0.755 | 0.874 | 557 | 9,460 | |
qwen2.5:32b |
32B | 0.229 | 0.538 | 0.770 | 0.701 | 446 | 33,166 | |
qwen3.5:9b |
9B | 0.228 | 0.576 | 0.797 | 0.905 | 577 | 11,372 | known bundled-JSON flakiness — #912 |
gpt-oss:20b |
20B | 0.226 | 0.532 | 0.760 | 0.670 | 427 | 10,332 | new — closest non-Qwen3 entrant |
deepseek-r1:14b |
14B | 0.218 | 0.510 | 0.797 | 0.690 | 439 | 33,759 | R1 distill — reasoning-tuned, not summary-shaped |
phi3:mini |
3.8B | 0.202 | 0.534 | 0.783 | 1.318 | 840 | 11,071 | |
deepseek-r1:7b |
7B | 0.199 | 0.466 | 0.765 | 0.660 | 421 | 14,761 | R1 distill — reasoning-tuned, not summary-shaped |
deepseek-r1:32b |
32B | 0.195 | 0.469 | 0.744 | 0.594 | 378 | 75,523 | R1 distill — slower AND worse than 14b |
Cells that did NOT complete cleanly:
deepseek-r1:70b— operationally disqualified, rerun terminated. First episode took 203s, second 173s, but episodes 3 and 4 took 995s and 1023s each (~17 min). At avg ~480s/episode, a 100-episode prod run would take >13 hours just for summarization. We killed the rerun at episode 5/10 of dataset 1 — no scoring data captured. Even at hypothetical best-case RougeL, the latency disqualifies it from prod consideration. Not retrying.qwen3-coder:30b— deliberately excluded at the design level. Coder-specialized model, wrong domain for paragraph summarization. The retry-sweep killswitch SIGTERM'd before its cell.
Champion decision¶
Local champion: qwen3.5:35b (keep, for now) — pending validation of the qwen3.6:latest result.
Reasoning:
- qwen3.6:latest is a credible challenger at same latency (~6.7s) with +3.4% RougeL and +1.7% cosine. See Finding 4 for details.
- 5-episode RougeL deltas under ±0.02 are noise. The qwen3.6 edge (0.009 RougeL) is below the noise floor; we need #933 prod-curated validation + #932 G-Eval finale before committing to a swap.
- qwen3.6 lowers coverage by 7.9% — terser output. May or may not be desired; the G-Eval coverage dimension in #932 will tell us.
- qwen3.5:27b has the highest RougeL of any cell (0.271, tied with qwen3.6), but at 5.7× the latency (38s vs 6.7s). Latency-disqualified for prod, but viable for #928 championship eval.
- No DeepSeek-R1 distill is a contender. Range 0.195-0.226 RougeL; reasoning-tuned, not summary-shaped.
- Sonnet-mimicry caveat applies. Per #932 (G-Eval finale tier), RougeL measures lexical proximity to Sonnet 4.6's writing style, not summary quality itself. Relative ordering is informative; absolute scores are noisy.
Implication for #923 prod profile: keep ollama_summary_model: "qwen3.5:35b" in prod_dgx_full for now. Re-evaluate qwen3.6:latest as the champion once:
-
933 prod-curated tier validates the quality edge on real podcasts.¶
-
932 G-Eval finale confirms it on faithfulness/coverage/coherence/fluency (the coverage delta is worth a closer look).¶
Cloud-fallback chain stays cheap-first (gemini-2.5-flash-lite → sonnet-4.6) per existing #812 contract.
Findings¶
1. DeepSeek-R1 distill family is NOT a paragraph-summary contender¶
| Model | RougeL | vs baseline (qwen3.5:35b at 0.262) | Latency excl. first (ms) | Verdict |
|---|---|---|---|---|
| deepseek-r1:7b | 0.199 | -24% | 14,761 | Reasoning-tuned, prose mediocre |
| deepseek-r1:14b | 0.218 | -17% | 33,759 | Best of the distills, still well below |
| deepseek-r1:32b | 0.195 | -26% | 75,523 | Slower AND worse than 14b — counter-intuitive |
| deepseek-r1:70b | rerun killed | — | ~480,000 avg | Operationally disqualified by latency alone (see below) |
70b latency was the killer. After the timeout fix landed and we re-ran with EXPERIMENT_OLLAMA_READ_TIMEOUT=1200, r1:70b completed early episodes in 3-4 min but episodes 3 and 4 took 17 min each (995s / 1023s). Avg ~8 min/ep. For a 100-episode prod run that's >13 hours of summarization compute — operationally infeasible. We killed at episode 5/10 of dataset 1 with no scoring data captured, but the verdict was already clear from the timing alone.
Pattern: the "more parameters → better quality" intuition fails here. R1 distills are fine-tuned for math/coding/reasoning; their paragraph-style writing isn't where their training optimization went. The signal "R1 is not the summarization champion" is reliable even at this small sample size — and r1:70b adds "even if quality were better, latency disqualifies it."
2. qwen3.5:27b is the highest-quality local cell, but latency-disqualified for prod¶
qwen3.5:27b's RougeL of 0.271 is the highest in the entire 19-cell matrix, but its 38.4s avg latency excl. first is 5.7× qwen3.5:35b's 6.7s. For #923's "all inference on DGX" goal with ~100 eps/day, the latency gap translates to ~50 minutes more wall-clock per run. Not a fit for the prod LLM slot, though it's a defensible candidate for #928 (DGX-vs-cloud championship) where wall-clock matters less and quality matters more.
3. gpt-oss:20B is the only new model worth keeping in the catalog¶
- RougeL 0.226 (closest new entry to baseline, 14% below)
- Latency 10.3s — slightly slower than qwen3.5:35b (6.7s) but comfortably under 20s
- Single-channel output (no reasoning channel quirks)
- 20B parameters — fits well in DGX memory alongside other services
Not a champion candidate, but a useful diversity entry for the autoresearch matrix. Future v2.1 sweep (#44/#45) should include it as a stable reference for new entries.
4. qwen3.6:latest is a credible champion contender — same speed as qwen3.5:35b, slightly better quality¶
After the reasoning-effort fix landed and the rerun completed, qwen3.6:latest produced:
| Metric (curated_5feeds_smoke_v1) | qwen3.6:latest | qwen3.5:35b (baseline) | Δ |
|---|---|---|---|
| RougeL F1 vs silver | 0.271 | 0.262 | +3.4% |
| Rouge1 F1 | 0.608 | 0.613 | -0.8% |
| Embedding cosine | 0.801 | 0.788 | +1.7% |
| Coverage ratio | 0.895 | 0.972 | -7.9% |
| Avg latency excl. first | 6,733 ms | 6,747 ms | -0.2% (tie) |
| Output tokens (avg) | 570 | 619 | -8% |
This is the standout result of the refresh sweep. qwen3.6:latest ties qwen3.5:27b on RougeL (both 0.271) while matching qwen3.5:35b's prod-viable latency. Same speed, ~3% better RougeL, ~2% better cosine, slightly lower coverage. At this sample size (5 episodes) the RougeL gap (0.009) is within the noise floor, but the latency-match + multi-metric edge is a real signal.
Caveats before swapping champion:
- 5-episode sample size — RougeL deltas under ±0.02 are noise. Need #933 prod-curated validation before committing to a champion swap.
- Coverage drops 7.9% — qwen3.6 may be summarizing more tersely. The 570 vs 619 avg-token delta is consistent with this.
- Prompt is still cloned from qwen3.5_9b. Per-model prompt tuning (#906 descendant) could push qwen3.6 further ahead, or expose a regression.
- qwen3.6:latest is a 36B MoE model (qwen35moe family); MoE memory pressure on DGX alongside Speaches + pyannote + other loaded Ollama models needs operational verification before prod.
What this report deliberately does NOT do¶
- No prompt tuning — every new model uses qwen3.5_9b's prompt templates verbatim. Each model's "true" capability is likely higher with tuned prompts. Per-model tuning is its own ticket (descendant of #906, future autoresearch tier).
- No G-Eval (LLM judge) scoring — RougeL/BLEU/cosine measure lexical/embedding proximity to silver, not summary quality. The #932 finale tier will add 4-dimension G-Eval (faithfulness / coverage / coherence / fluency) on top.
- No prod-curated validation — all signal here is from v2 synthetic smoke. The #933 prod-curated tier will add real-podcast sanity checks before any prod model swap.
- No qwen3-coder:30b — coder-specialized model, wrong domain for paragraph summarization. The retry-sweep killswitch SIGTERM'd before its cell to save DGX time.
Addendum — v2.1 sweep (2026-06-09)¶
After v2 landed, a small deep-research pass surfaced 4 newer Ollama models worth testing: gemma3:27b (Google Gemma 3), phi4:14b (Microsoft), hermes3:8b (Nous Research Llama 3.1 fine-tune), and mistral-small:24b. The v2.1 sweep ran them against the same baseline + silver as v2. Total wall-clock 16m 22s for 4 cells × 2 datasets.
v2.1 scoreboard (curated_5feeds_smoke_v1):
| Model | Size | RougeL | Rouge1 | Cosine | Coverage | Avg tokens | Latency excl 1st (ms) | Verdict |
|---|---|---|---|---|---|---|---|---|
mistral-small:24b |
24B | 0.257 | 0.591 | 0.768 | 0.875 | 557 | 29,005 | Strong mid-tier; latency-disqualified for prod |
phi4:14b |
14B | 0.256 | 0.567 | 0.782 | 0.852 | 543 | 17,877 | Best 14B-class result; latency too high for prod |
hermes3:8b |
8B | 0.218 | 0.495 | 0.777 | 0.514 | 328 | 6,315 | Worse than base llama3.1:8b (0.247) — fine-tune doesn't help summarization |
gemma3:27b |
27B | 0.207 | 0.530 | 0.739 | 0.869 | 554 | 36,447 | Surprising regression vs qwen3.5:27b (0.271 at same size class) — likely prompt-template mismatch (used qwen3.5_9b clone) |
v2.1 verdict: no new champion contender. The two strongest entries (mistral-small:24b and phi4:14b) cluster at -2% RougeL vs the v2 baseline AND have prod-disqualifying latency (3-4× qwen3.5:35b's 6.7s). qwen3.6:latest from v2 remains the only credible champion challenger.
Notable v2.1 findings:
- phi4:14b is parameter-efficient — 14B params reaching 0.256 RougeL vs qwen3.5:9b's 0.228 at similar param count. If we ever bring back the laptop-Ollama path, phi4 might be the better fast/small choice than qwen3.5:9b.
- Hermes 3 fine-tune is a regression for paragraph summarization vs base Llama 3.1:8B. The Nous fine-tune optimizes for chat/instruction-following, not abstractive prose. Same pattern as DeepSeek-R1: domain-specialized fine-tunes lose ground on this task.
- gemma3:27b underperformed expectations — 0.207 RougeL is 24% below qwen3.5:27b at the same param count. Possible causes: (a) qwen3.5_9b prompt template is wrong for Gemma's chat format, (b) Gemma 3 is multimodal-tuned and text-only paragraph summarization isn't its sweet spot, (c) tokenizer differences inflate latency. Worth a follow-up with a Gemma-native prompt before writing off entirely.
- No v2.1 entry beats qwen3.5:35b (0.262) on RougeL on prod-viable hardware. Champion decision unchanged from v2: qwen3.5:35b stays prod, qwen3.6:latest stays the validated-challenger via #932/#933.
Combined v2 + v2.1 top-5 RougeL:
| Rank | Model | RougeL | Latency | Verdict |
|---|---|---|---|---|
| 1 (tie) | qwen3.5:27b |
0.271 | 38s | championship candidate, latency-disqualified for prod |
| 1 (tie) | qwen3.6:latest |
0.271 | 6.7s | champion contender — needs #932/#933 validation |
| 3 | qwen3.5:35b |
0.262 | 6.7s | current prod champion |
| 4 | mistral:7b |
0.260 | 9.2s | v2 entry — surprisingly strong for 7B |
| 5 (tie) | mistral-small:24b |
0.257 | 29s | v2.1 entry; latency-disqualified |
The full 22-cell matrix (18 v2 + 4 v2.1) is stable; champion-swap decision unchanged.
Methodology caveats¶
- 5 episodes per cell — directional; rankings within ±0.02 RougeL are noise.
- Silver = Sonnet 4.6 — measuring "how close to Sonnet did this model write," not "how good is this summary." See #932 for the planned upgrade.
- Per-model prompt templates not tuned — clones from qwen3.5_9b. Affects all new entries equally; doesn't bias the ranking within the new cohort, but may bias new-vs-existing comparisons.
- DGX-side warm-cold variance — sequential sweeps include model load time on first episode; subsequent episodes are warmer. We report
avg_latency_ms_excluding_firstto smooth this. - No reliability axis — sustained-burst behavior (#816) not tested here. Likely irrelevant for sequential single-call autoresearch but worth flagging for prod use.
What this closes / informs¶
| Issue | Role | Status after this report |
|---|---|---|
| #924 | Driver of this sweep | Closed by this report |
| #923 | Prod profile model pick | Champion stays qwen3.5:35b; comment posted |
| #928 | DGX-vs-cloud summary championship | qwen3.5:27b nominated as the local representative (best RougeL, latency acceptable for championship eval) |
| #44 / #45 | v2.1 sweep prep + run | Done — see v2.1 addendum above; no new champion contender |
| #932 | G-Eval finale | When implemented, runs against these same 19 cells |
| #933 | Prod-curated validation | When curated, the chosen champion gets a sanity-check pass |
Addendum — Rescored against Opus 4.7 silver (2026-06-09, #939)¶
The v2 + v2.1 numbers above were originally scored against
silver_sonnet46_smoke_v1, which makes ROUGE measure "how close does this
model write to Claude Sonnet 4.6" — not "how good is this summary"
(see the methodology caveats above). Phase 0 of the next autoresearch ride
upgrades silver to Opus 4.7 (see
SILVER_OPUS47_GENERATION_2026_06)
and rescores the 22 sweep cells × 2 datasets without re-running inference.
Rescoring tool: scripts/eval/score/rescore_against_silver.py — consumes
existing predictions.jsonl, writes per-run
metrics_vs_silver_opus47_smoke_v{1,2}.json non-destructively.
Rescored scoreboard — curated_5feeds_smoke_v1 vs silver_opus47_smoke_v1¶
Sorted by new RougeL F1, with delta from the original Sonnet-silver column for context. Higher is better; absolute scores are not comparable across silvers.
| Model | Old RougeL (Sonnet) | New RougeL (Opus) | ΔRougeL | Rouge1 | Cosine | Coverage |
|---|---|---|---|---|---|---|
mistral:7b |
0.260 | 0.329 | +0.068 | 0.612 | 0.806 | 0.766 |
llama3.2:3b |
0.254 | 0.326 | +0.072 | 0.593 | 0.799 | 1.167 |
llama3.1:8b |
0.247 | 0.307 | +0.060 | 0.628 | 0.817 | 1.054 |
mistral-small:24b |
0.257 | 0.284 | +0.027 | 0.597 | 0.782 | 0.964 |
hermes3:8b |
0.218 | 0.279 | +0.061 | 0.541 | 0.785 | 0.567 |
gemma2:9b |
0.249 | 0.276 | +0.026 | 0.561 | 0.831 | 0.802 |
qwen2.5:7b |
0.236 | 0.265 | +0.029 | 0.572 | 0.776 | 0.963 |
mistral-small3.2 |
0.249 | 0.261 | +0.012 | 0.540 | 0.810 | 0.818 |
qwen3.5:27b |
0.271 (old #1) | 0.257 | -0.015 | 0.557 | 0.802 | 1.117 |
mistral-nemo:12b |
0.241 | 0.256 | +0.015 | 0.552 | 0.762 | 1.059 |
qwen3.5:35b |
0.262 (old #3, baseline) | 0.243 | -0.019 | 0.572 | 0.801 | 1.071 |
qwen3.6:latest |
0.271 (old #1, contender) | 0.241 | -0.030 | 0.571 | 0.768 | 0.986 |
phi4:14b |
0.256 | 0.240 | -0.016 | 0.556 | 0.813 | 0.939 |
qwen2.5:32b |
0.229 | 0.238 | +0.008 | 0.516 | 0.806 | 0.772 |
phi3:mini |
0.202 | 0.230 | +0.028 | 0.522 | 0.802 | 1.453 |
deepseek-r1:70b |
(killed) | 0.228 (3 eps only) | — | 0.520 | 0.793 | 0.782 |
qwen3.5:9b |
0.228 | 0.223 | -0.006 | 0.542 | 0.799 | 0.998 |
gpt-oss:20b |
0.226 | 0.219 | -0.007 | 0.523 | 0.774 | 0.738 |
deepseek-r1:14b |
0.218 | 0.212 | -0.007 | 0.488 | 0.800 | 0.760 |
qwen3-coder:30b |
0.209 | 0.209 | -0.000 | 0.532 | 0.758 | 1.191 |
deepseek-r1:7b |
0.199 | 0.209 | +0.010 | 0.442 | 0.764 | 0.728 |
deepseek-r1:32b |
0.195 | 0.205 | +0.010 | 0.438 | 0.766 | 0.655 |
gemma3:27b |
0.207 | 0.202 | -0.005 | 0.491 | 0.769 | 0.958 |
Rescored scoreboard — curated_5feeds_smoke_v2 vs silver_opus47_smoke_v2¶
Same pattern shows up on the v2-content dataset.
| Model | RougeL | Rouge1 | Cosine | Coverage |
|---|---|---|---|---|
mistral:7b |
0.302 | 0.566 | 0.825 | 0.848 |
llama3.1:8b |
0.282 | 0.546 | 0.835 | 1.155 |
llama3.2:3b |
0.271 | 0.552 | 0.802 | 1.212 |
mistral-nemo:12b |
0.265 | 0.521 | 0.808 | 1.015 |
hermes3:8b |
0.265 | 0.488 | 0.776 | 0.761 |
gemma2:9b |
0.263 | 0.497 | 0.825 | 0.863 |
mistral-small:24b |
0.257 | 0.507 | 0.808 | 0.993 |
qwen2.5:7b |
0.253 | 0.504 | 0.825 | 0.968 |
gpt-oss:20b |
0.251 | 0.486 | 0.833 | 0.795 |
qwen2.5:32b |
0.248 | 0.462 | 0.805 | 0.805 |
phi4:14b |
0.241 | 0.477 | 0.822 | 0.889 |
deepseek-r1:70b |
0.237 (partial) | 0.465 | 0.796 | 0.733 |
mistral-small3.2 |
0.230 | 0.472 | 0.797 | 0.842 |
qwen3.5:35b |
0.229 | 0.508 | 0.797 | 1.250 |
qwen3.6:latest |
0.228 | 0.501 | 0.798 | 1.149 |
qwen3-coder:30b |
0.215 | 0.477 | 0.809 | 1.400 |
qwen3.5:27b |
0.213 | 0.488 | 0.760 | 1.423 |
deepseek-r1:14b |
0.211 | 0.398 | 0.784 | 0.640 |
qwen3.5:9b |
0.211 | 0.462 | 0.792 | 1.086 |
deepseek-r1:32b |
0.199 | 0.382 | 0.788 | 0.575 |
gemma3:27b |
0.193 | 0.440 | 0.787 | 1.129 |
deepseek-r1:7b |
0.189 | 0.384 | 0.792 | 0.630 |
phi3:mini |
0.183 | 0.458 | 0.801 | 1.663 |
What changed — champion-decision implications¶
Headline: the ranking flips, and the qwen family loses its edge.
| Aspect | Old silver (Sonnet 4.6) | New silver (Opus 4.7) | Change |
|---|---|---|---|
| #1 rankings | qwen3.5:27b + qwen3.6:latest tied at 0.271 | mistral:7b at 0.329 | New leader, +21% RougeL gap |
| Top-3 family | All Qwen3 (qwen3.5:27b, qwen3.6, qwen3.5:35b) | mistral:7b, llama3.2:3b, llama3.1:8b | Top-3 swaps to non-Qwen entirely |
| qwen3.5:35b (current champion) | 0.262 (#3) | 0.243 (#11) | -0.019, drops 8 places |
| qwen3.6:latest (challenger) | 0.271 (tied #1) | 0.241 (#12) | -0.030, drops 11 places |
| qwen3.5:35b vs qwen3.6:latest delta | +0.009 (qwen3.6 ahead) | +0.002 (qwen3.5:35b ahead by a hair) | Effectively zero — tie within noise |
| Compression of top-vs-mid | Top 0.271 vs mid 0.247 = 0.024 spread | Top 0.329 vs mid 0.243 = 0.086 spread | The metric is now MORE discriminating, not less |
Critical observation: the original concern in #939 was that "ROUGE deltas may compress (smaller deltas between models)" — that turned out to be the opposite of what happened. The spread widened: against Sonnet silver, the top 9 models all clustered within 0.025 RougeL; against Opus silver, the top 3 separate from the rest by 0.04+. This means Sonnet silver was flattening the ranking by penalizing any model that wrote differently-but-well — Opus silver lets the metric breathe.
What this does NOT change:
- Champion stays
qwen3.5:35bfor the prod profile. The new scoreboard doesn't justify swapping tomistral:7bon a 5-episode smoke alone — we need #933 prod-curated validation and #932 G-Eval before any prod swap. RougeL is one signal among many. mistral:7b's coverage is 0.766 (down ~25% from Qwen) which suggests it's summarizing more tersely; G-Eval will tell us whether that's "concise" or "lossy". - qwen3.6:latest vs qwen3.5:35b championship comparison stays essentially tied, just at a lower absolute level. The original v2 conclusion ("credible champion contender pending #932/#933 validation") still holds.
- DeepSeek-R1 family remains uncontested loser for paragraph summarization. Reasoning-tuned models don't write paragraph prose well; that's a fundamental fit problem, not a silver-choice artifact.
What this DOES change for downstream planning:
- The
#928DGX-vs-cloud championship now has a different "local representative" candidate set. mistral:7b is suddenly the strongest local candidate by ROUGE-vs-Opus; that needs to be folded into the finalist roster. - The per-model prompt-tuning tickets (#935 / #936 / #937 / #938) should re-score against the new silver before deciding whether tuning helped.
- The
#932G-Eval finale will use the Opus silver as the reference for its faithfulness/coverage/coherence/fluency dimensions — this rescoring just establishes the new ROUGE baseline.
Rescoring methodology notes¶
- Same predictions, new silver only. No inference was re-run; just ROUGE/BLEU/WER/cosine/coverage recomputed.
- r1:70b cell has 3 episodes only (rerun was killed at episode 5/10 of dataset 1; episode-3-4 were 17 min each — operationally disqualified). Its 0.228 RougeL vs Opus is on a 3-episode subset and is marked as such.
- No qwen3-coder:30b cell in v1 originally — the retry sweep killswitch SIGTERM'd before its cell. The presence of a v1 cell now is from a separate fill-in run we missed mentioning above; treat as informational.
References¶
- #924 — Autoresearch v2 refresh on DGX
- #923 — Prod profile: all-DGX with cloud fallback
- #907 — Autoresearch programme epic
- #939 — Silver upgrade to Opus 4.7 — Phase 0 of next batch (this addendum)
- SILVER_OPUS47_GENERATION_2026_06 — generation report for the new silver
- EVAL_SMOKE_V1_DGX_VS_LAPTOP_2026_06 — the prior DGX validation pass
- Original autoresearch next-phase-dependencies map (WIP doc, removed 2026-06-24; #907 + children all closed)
- RFC-116 fixture corpus — failure-mode catalogue
Tuned prompt addendum — hermes3:8b (#937, 2026-06-09)¶
Verdict: Nous-native ChatML helps. Hermes 3 is a Nous Research
fine-tune of Llama 3.1 8B, post-trained against a ChatML-style chat
template with a persona-forward system message (per the
Hermes-3-Llama-3.1-8B model card).
The smoke-v2 baseline run used the generic qwen3.5:9b prompts verbatim;
this tuning pass replaces them with a Nous-shaped pair that mirrors the
"You are Hermes 3..." opener the model was explicitly trained on, then
states the task constraints. Ollama applies the <|im_start|>/<|im_end|>
ChatML wrapping automatically — the .j2 files supply only the message
content.
Prompts (in this commit):
src/podcast_scraper/prompts/ollama/hermes3_8b/summarization/system_v1.j2src/podcast_scraper/prompts/ollama/hermes3_8b/summarization/long_v1.j2
Tuned run dir: data/eval/runs/llm_ollama_hermes3_8b_dgx_smoke_v2_tuned_2026_06/
Numbers — vs silver_opus47:
| Dataset | Baseline (generic prompt) | Tuned (Nous-native) | Δ RougeL |
|---|---|---|---|
curated_5feeds_smoke_v1 |
RougeL 0.279, Cosine 0.785, Cov 0.567 | RougeL 0.309, Cosine 0.769, Cov 0.631 | +0.030 |
curated_5feeds_smoke_v2 |
RougeL 0.265, Cosine 0.776, Cov 0.761 | RougeL 0.306, Cosine 0.787, Cov 0.786 | +0.041 |
Reading the result: the Nous-native template lifts Hermes 3 from rank 5 (v1) / rank 5 (v2) on the rescored scoreboard into the top tier with mistral:7b (0.329 v1 / 0.302 v2) and llama3.1:8b (0.307 v1 / 0.282 v2). This is one of the three valid outcomes the ticket #937 called out — the Nous fine-tune does help summarization when the prompt matches its training distribution. The cell deserves a slot in the #928 championship finalist roster.
Coverage caveat: v1 coverage at 0.631 still lags the qwen baseline's ~0.94, so this is a quality-of-summary lift, not a length-discipline lift. G-Eval (#932) is the right next gate.
Tuned prompt addendum — gemma3:27b (#935, 2026-06-09)¶
Hypothesis ladder result: H3 accepted — task-fit issue, not prompt or quantization.
The v2.1 sweep used qwen3.5:9b's prompt templates verbatim for gemma3:27b and the rescored result against Opus silver showed gemma3 at the bottom of the matrix (RougeL 0.202 on smoke_v1). #935 ran a three-hypothesis ladder:
| Hypothesis | Variant | RougeL vs Opus (v1) | Δ vs baseline (0.202) | Verdict |
|---|---|---|---|---|
| H1 — prompt format mismatch | Q4_K_M + Gemma-native chat template | 0.188 | −0.014 | Regressed |
| H2 — Q4 quantization regression | Q8_0 + Gemma-native chat template | 0.191 | −0.011 | Marginal vs H1, still regressed |
| H3 — genuine task-fit | (accept) | — | — | Accepted |
Tuned prompts at src/podcast_scraper/prompts/ollama/gemma3_27b/summarization/:
system_v1.j2— minimal role anchor; Gemma 3's IT chat template has no distinct system role per Google's model card, so we keep the system message short and place all binding instructions in the user turn.long_v1.j2— Gemma-native user prompt: declarative tone, no role-play preamble, binding constraints restated near the assistant turn (recency window pattern).
Q8 quantization tested via new config
data/eval/configs/summarization/autoresearch_prompt_ollama_gemma3_27b_q8_smoke_paragraph_v1.yaml
targeting gemma3:27b-it-q8_0. Q8 lifts RougeL by +0.003 over Q4 (0.188 →
0.191) — a real but small effect. Quantization is NOT the dominant
factor; even at higher precision, gemma3:27b underperforms on this task.
Why H3 is the right verdict: across both quantizations and both prompts, gemma3's output is consistently shorter and less aligned with Opus's prose style than Qwen's. Cosine stays at ~0.78 (vs qwen3.5:35b's ~0.79), coverage stays at ~0.74-0.78 (vs qwen3.5:35b's ~1.07). Gemma 3's instruction-following on text-only paragraph summarization on this corpus just isn't competitive. The model is multimodal-tuned (vision-language strong); the v2.1 result wasn't a methodology artifact, it was a model fit issue.
Drop from #928 championship roster. Other Gemma versions or task shapes (e.g., bullet-track or with image-text hybrid inputs) might reach different conclusions; this verdict is specific to gemma3:27b on paragraph summarization of our 5-feed smoke corpus.
Runs (under data/eval/runs/, gitignored — predictions + Opus metrics persisted):
llm_ollama_gemma3_27b_dgx_smoke_v2_tuned_h1_2026_06/(H1, Q4)llm_ollama_gemma3_27b_dgx_smoke_v2_tuned_h2_q8_2026_06/(H2, Q8)
Tuned prompt addendum — mistral-small:24b (#938, 2026-06-09)¶
Verdict: counter-intuitive negative result — Mistral-native [INST] hurts ROUGE on this corpus.
| Dataset | Baseline (Qwen clone) | Tuned (Mistral [INST]) | Δ RougeL |
|---|---|---|---|
curated_5feeds_smoke_v1 |
RougeL 0.284, Cosine 0.782, Cov 0.964 | RougeL 0.257, Cosine 0.799, Cov 0.781 | −0.027 |
curated_5feeds_smoke_v2 |
RougeL 0.257, Cosine 0.793, Cov 0.952 | RougeL 0.259, Cosine 0.815, Cov 0.764 | +0.002 |
Tuned prompts at src/podcast_scraper/prompts/ollama/mistral-small_24b/summarization/:
system_v1.j2— concise, declarative role statement per the Mistral-Small-24B model card recommendations ("state constraints, don't describe them")long_v1.j2— Mistral-native user prompt with crisp task framing first, then transcript payload, then a bullet-list of binding constraints near the assistant turn (recency-window pattern). Ollama auto-wraps in[INST]...[/INST].
Why the tuned prompt regresses: the Mistral-native template produces shorter, more declarative summaries (avg 1818 chars vs the Qwen-clone's ~2400+). Coverage drops from 0.964 to 0.781 — Mistral is following Mistral's "concise, declarative" training style faithfully, but Opus's reference summaries are longer and more thorough. Cosine similarity actually improves slightly (0.799 vs 0.782), meaning Mistral writes more like Opus semantically — but ROUGE penalizes the coverage loss more than it rewards the semantic alignment.
Same shape as gemma3 H1/H2: across both cells, the verbose Qwen-clone template wins on ROUGE because it produces output that better matches Opus's length and word-overlap pattern. Native prompts produce shorter summaries that may be semantically truer but lexically penalized.
Implication for #928 / #932: mistral-small:24b is doing fine — the result tells us "ROUGE is biased toward verbose summaries that match Opus's prose length." G-Eval (#932) on faithfulness / coverage / coherence / fluency will likely tell a different story. Keep mistral-small on the #928 championship roster pending G-Eval; don't drop it on this ROUGE-on-cloned-prompt-still-wins observation.
Runs (under data/eval/runs/, gitignored):
llm_ollama_mistral-small_24b_dgx_smoke_v2_tuned_2026_06/(Mistral-native [INST])
Tuned prompt addendum — phi4:14b (#936, 2026-06-09)¶
Verdict: neutral — Microsoft-native template doesn't materially move ROUGE; phi4's ceiling on this corpus is in the 0.23–0.25 band regardless of prompt.
| Dataset | Baseline (Qwen clone) | Tuned (Microsoft <\|im_start\|>) |
Δ RougeL |
|---|---|---|---|
curated_5feeds_smoke_v1 |
RougeL 0.240, Cosine 0.813, Cov 0.939 | RougeL 0.247, Cosine 0.783, Cov 0.772 | +0.007 |
curated_5feeds_smoke_v2 |
RougeL 0.241, Cosine 0.822, Cov 0.889 | RougeL 0.233, Cosine 0.808, Cov 0.826 | −0.008 |
Tuned prompts at src/podcast_scraper/prompts/ollama/phi4_14b/summarization/:
system_v1.j2— short, role-anchor system message matching Phi-4's textbook-style instruction-following per the microsoft/phi-4 model cardlong_v1.j2— user prompt structured for Phi-4's<|im_start|>{role}<|im_end|>token convention (Ollama applies wrapping automatically)
Why neutral: phi4's outputs on both prompts produce summaries in the same length band (~1500-1900 chars). Cosine moved slightly lower with the tuned prompt (0.813 → 0.783) but stays in the same general band. The "parameter-efficiency winner" claim from the v2.1 Sonnet-silver scoring was a style-similarity artifact — Phi-4 happened to write in a Sonnet-like prose style, which Opus silver doesn't reward as strongly. With either prompt, phi4's Opus-silver ceiling looks ~0.24-0.25 on this corpus.
Implication for #928: phi4:14b is a fair 14B-class entry but not a championship contender. The Microsoft-native prompt does not unlock a meaningfully different result. Keep in matrix as a parameter-efficiency reference; don't expect prompt-tuning alone to lift it into the top tier.
The methodology gap that #936 was filed to close (qwen-clone-vs-native fairness) is now closed for phi4. The remaining variance comes from inherent model behavior, not prompt format.
Runs (under data/eval/runs/, gitignored):
llm_ollama_phi4_14b_dgx_smoke_v2_tuned_2026_06/(Microsoft-native)
Tuned prompt addendum — #945 older top-3 (mistral:7b + llama3.2:3b + llama3.1:8b, 2026-06-09)¶
Verdict: all 3 regress. The Opus-silver "unexpected top-3" was a verbose-qwen-clone-prompt artifact.
#945 closed the "tuned vs untuned" fairness gap for the 3 older models that emerged as top-3 under Opus silver despite never having had model-specific prompts.
| Model | qwen-clone baseline (v1/v2) | tuned native (v1/v2) | Δ RougeL | Coverage shift (v1) |
|---|---|---|---|---|
mistral:7b |
0.329 / 0.302 | 0.282 / 0.298 | −0.047 / −0.004 | 0.766 → 0.697 |
llama3.2:3b |
0.326 / 0.271 | 0.310 / 0.231 | −0.016 / −0.040 | 1.167 → 1.001 |
llama3.1:8b |
0.307 / 0.282 | 0.244 / 0.234 | −0.063 / −0.048 | 1.054 → 0.971 |
Tuned prompts at:
src/podcast_scraper/prompts/ollama/mistral_7b/summarization/— Mistral [INST]-stylesrc/podcast_scraper/prompts/ollama/llama3.2_3b/summarization/— Llama-3 header_id style (NEW dir)src/podcast_scraper/prompts/ollama/llama3.1_8b/summarization/— Llama-3 header_id style
YAML configs updated to point at per-model prompt paths (previously
inherited the shared ollama/summarization/ default — that's why the
v2 sweep showed these models doing so well; they were running on the
verbose qwen-clone prompt).
The post-#939 ranking, recomputed with all prompt-tuning Phase 0.5 + #945 results:
| Rank | Model | Source | RougeL v1 vs Opus |
|---|---|---|---|
| 1 | mistral:7b (qwen-clone) |
v2 sweep, untouched | 0.329 |
| 2 | llama3.2:3b (qwen-clone) |
v2 sweep, untouched | 0.326 |
| 3 | hermes3:8b (Nous-native, tuned) |
#937 | 0.309 |
| 4 | llama3.1:8b (qwen-clone) |
v2 sweep, untouched | 0.307 |
| 5 | mistral:7b (Mistral-native) |
#945 | 0.282 |
| 6 | mistral-small:24b (qwen-clone, untouched) |
v2.1 | 0.284 |
| 7 | hermes3:8b (qwen-clone, original) |
v2.1 | 0.279 |
| 8 | qwen3.5:35b (qwen-clone, prod champion) |
v2 | 0.243 |
(Selected entries; full matrix unchanged elsewhere.)
Cross-cutting finding across all 7 tuning experiments (Phase 0.5 + #945):
| Result | Models | Count |
|---|---|---|
| Tuning HELPED | hermes3:8b (+0.030) | 1 / 7 |
| Tuning NEUTRAL | phi4:14b (±0.008) | 1 / 7 |
| Tuning REGRESSED | gemma3:27b (-0.014), mistral-small:24b (-0.027), mistral:7b (-0.047), llama3.2:3b (-0.016), llama3.1:8b (-0.063) | 5 / 7 |
The qwen3.5:9b clone template is uniquely well-suited to score high on ROUGE-against-Opus across model families. It produces longer, more verbose summaries that match Opus's lexical patterns regardless of the underlying model's training distribution. Native prompts make models write in their own trained style, which lexically diverges from Opus's prose patterns and hurts ROUGE — even when the model writes faithful, well-structured summaries.
Implication for #928 championship:
The "top-3" leaders under Opus silver (mistral:7b, llama3.2:3b, llama3.1:8b) are not the strongest models, they're the strongest combinations of model + verbose Qwen-clone prompt. The actual championship roster should:
- Promote hermes3:8b — the only model where native prompts genuinely helped on Opus ROUGE. Real championship contender.
- Keep qwen3.5:35b, qwen3.6:latest as primary contenders — their high-volume Qwen-style output is what models prompt-tuning attempts to reach.
- Treat the v2-sweep top-3 (mistral:7b / llama3.2 / llama3.1) as reference points, not champions — their ROUGE-on-Opus lead came from the verbose clone prompt, not from inherent model superiority.
- Defer all final champion-pick decisions to #932 G-Eval finale. ROUGE-on-Opus rewards prompt-induced verbosity more than model quality; only the G-Eval dimensions (faithfulness / coverage / coherence / fluency) will reveal which models actually produce the best summaries.
Methodology lesson confirmed: even with the Opus silver upgrade (which raised the ceiling vs Sonnet), ROUGE remains fundamentally a lexical similarity metric. The remaining bias is to prompt-induced verbose output style, not to silver-author identity. Closing that bias requires non-lexical scoring (G-Eval, #932) or richer references with varied prose styles.
Runs (under data/eval/runs/, gitignored — predictions and Opus
metrics persisted for future re-analysis):
llm_ollama_mistral_7b_dgx_smoke_v2_tuned_2026_06/llm_ollama_llama32_3b_dgx_smoke_v2_tuned_2026_06/llm_ollama_llama31_8b_dgx_smoke_v2_tuned_2026_06/