Commit Graph
21 Commits
Author SHA1 Message Date
AygeaandClaude 2f99dd1e35 Grade muse-glimmer-28b full 7-prompt battery — new benchmark leader
7 entries (30→37 total). Muse Glimmer 28B (GGUF) avg 80.7 — the strongest
model in the benchmark, 6/7 prompts Minor Logic Flaws:
  lfu 76 | webhook 81 | automation 89 | rust 85 | data 88 | tts 58 | mcp 88

Standout results:
- rust 85 (KAT 36, Qwen3-Coder 54) — real tokio channels (mpsc::channel, not
  hallucinated mpsc::bounded), two-tier CancellationToken, zero clippy lints;
  one-line E0507 compile fix.
- automation 89 — first model to print a correct summary (98/2/0/100);
  atomic temp+fsync+rename checkpointing.
- data 88 edges out Gemma-26B's 86; mcp 88 sets the bar on a new prompt.
Only weak spot: tts 58 (backpressure raises instead of awaits, like Qwen3-Coder).

Captured via the native /api/v1/chat fix (real tok/sec + TTFT). Slow
deep-thinker: ~17-19 t/s, 5-9 min/prompt, ~5-9k tokens incl. reasoning.

Also gitignore checkpoint.json (automation test runtime artifact).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-10 13:13:54 -07:00
AygeaandClaude 3507d33006 Grade 12-model backlog + fix native-API TTFT capture
Grading (12 new entries, 18→30 total in benchmark_history.json):
- KAT-Coder v2.5 Dev XL: lfu 49 / tts 52 / webhook 72 / rust 36 / automation 60
- Qwen3 Coder 30B: lfu 45 / tts 44 / webhook 62 / rust 54 / automation 58
- Qwen 3.6 35B-A3B uncensored (automation): 46
- Gemma 4 26B-A4B (data): 86 [tests pass]
All "coder" models scored Critical Bugs across prompts — plausible-looking
async code with fatal bugs (broken LFU eviction, in-flight cancel no-op,
submit() raising instead of backpressuring, un-awaited async read-through).

grade_run.py: switch from OpenAI-compat /v1/chat/completions (empty stats)
to native /api/v1/chat — returns full stats incl. time_to_first_token_seconds.
Verified on Gemma-26B (53.5 t/s, ttft 1.13). Two native-API gotchas handled:
input (string) not messages; max_output_tokens not max_tokens (that 400s).

New capture: outputs/gemma-4-26b-a4b-data.py (native-API run).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 21:17:08 -07:00
adminandClaude 8806c88a71 Handoff: capture workflow in CLAUDE.md + per-session memory files
Tried Qwen-6bit automation (the one missing prompt) + qwen3.6-27b,
glm-4.7-flash, uncensored-qwen-35b via API — ALL timed out. Likely
cause: Mac screensaver/sleep throttles LM Studio (even fast models
hit the 240s cap with zero output). Documented in memory + CLAUDE.md:
runs need the Mac display AWAKE / sleep disabled.

Captured-but-ungraded outputs in outputs/ (Gemma26B, kat-coder,
qwen3-coder-30b all 5/5) await a grading session. Memory MCP DB was
down during handoff (will retry next session) — file-based memory +
CLAUDE.md carry the context either way.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 20:33:21 -07:00
adminandClaude c98b6bb257 Capture uncensored-Qwen-35B automation (others hung via API)
The uncensored Qwen 35B hangs/timeouts on 4/5 prompts via the API
(only automation saved). qwen3.6-27b and glm-4.7-flash also time out
via API (27B genuinely slow ~12min; GLM loops without stopping — needs
stop-token handling, noted for next session). Capture batch paused:
3 models fully captured (Gemma26B, kat-coder, qwen3-coder-30b),
grading deferred.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 20:21:13 -07:00
adminandClaude 0c79a997f5 Capture kat-coder + qwen3-coder-30b outputs (5 prompts each, API-run, NOT graded yet)
Via tools/grade_run.py against LM Studio (load -> all prompts -> unload -> verify).
kat-coder:      lfu/tts/webhook/automation/rust  (lfu has a real SyntaxError: 'self._ bump_freq')
qwen3-coder-30b: lfu/tts/webhook/automation/rust  (all 4 py parse clean; terse ~2k tok outputs)
Grading deferred to a later session (capture-only mode).

Script hardening:
  - --resident / --unload-all commands (read loaded_instances, POST unload, verify)
  - MEMORY GUARD: aborts if a different model is resident (never stack 30GB models)
  - TTFT self-discovery dump (LM Studio returns empty stats non-streaming;
    fix next session: switch to /api/v1/chat stream:true -> chat.end result.stats)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 19:22:41 -07:00
adminandClaude b9f45a7c46 Gemma 4 26B-A4B head-to-head vs Qwen (4 prompts, via grade_run.py API)
Ran via tools/grade_run.py against LM Studio (no clipboard). Results:
  TTS:        80 Minor Flaws  PASSES (real N-worker concurrency) <- Qwen 49, didn't parse
  Rust:       72 Minor Flaws  COMPILES CLEAN (0 errs w/ deps)     <- Qwen 50, 7 real errors
  Webhook:    55 Critical     uses forbidden aiohttp (won't run)  <- Qwen 75, passed
  Automation: 48 Critical     SyntaxError (global-after-assign)   <- first run for both

DECISIVE head-to-head: Gemma generalizes where Qwen fails (TTS, Rust),
but Qwen beats it on stdlib-discipline prompts (webhook). The two are
COMPLEMENTARY local offloads, not redundant.

Fixed: grade_run.py extractor (markdown/prose wrapping, multi-fence lang
selection), TTFT-null handling in generator. TTFT capture from LM Studio
API still needs the right stats key (left null + noted).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 18:42:58 -07:00
adminandClaude b82c665ec6 Add tools/grade_run.py: call LM Studio API, save output + capture metrics
Replaces clipboard-based submission (which was mangling outputs).
Run from any LAN host that can reach LM Studio:
  python3 tools/grade_run.py --lmstudio http://10.0.0.31:1234 --list
  python3 tools/grade_run.py --model <id> --prompt tts --name <slug> --append

Saves the raw completion to outputs/<name>.<ext> (no clipboard),
captures tok/sec + tokens + TTFT from the API response (no manual
entry), and drafts a pending JSON entry. The 5-pillar audit still
done by hand (subjective). TODO_submission_tool.md updated.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 18:16:00 -07:00
adminandClaude 241298b410 Grade Qwen 6-bit on webhook prompt: 75/100 Minor Flaws (runs, all 4 tests pass)
Fourth data point on Qwen 3.6 35B-A3B 6-bit MLX:
  LFU cache    82  (runs)
  Webhook     75  (runs, all tests pass) <- best non-LFU result
  TTS pipeline 49  (doesn't parse)
  Rust service 50  (7 compile errors)

Profile sharpens: Qwen 6-bit handles SINGLE-HANDLER logic well
(webhook HMAC/idempotency/rate-limit/429-backoff all correct) but fails
on multi-task orchestration (TTS) and typed/compiled langs (Rust).
Safe offload for HTTP/bridge/verification work; not for pipelines or Rust.

Added webhook prompt_id + pillar set. (Initial paste was mangled -
stripped '=' signs - re-pasted clean.)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 18:03:50 -07:00
adminandClaude e3d73de36a Grade Qwen 6-bit on Rust prompt: 50/100 Critical (does not compile, 7 errors)
Third data point on the same model:
  Qwen 3.6 35B-A3B 6-bit MLX:
    LFU cache    82  (runs clean)
    TTS pipeline 49  (doesn't parse)
    Rust service 50  (7 compile errors)

Profile is now sharp: strong on single-file Python data-structure/ACID
work; repeatedly ships non-compiling/non-parsing code on multi-task async
and typed-language prompts. Keep it on Python ACID tasks; do NOT offload
Rust or async-pipeline work.

Verified with cargo 1.94 (mpsc::bounded hallucination, ownership moves,
dead test override, broken remove_watcher). Lang field added for non-Python.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 17:53:15 -07:00
adminandClaude dd5724ed77 First multi-prompt result: Qwen 6-bit TTS = 49 (vs 82 LFU) + per-prompt schema
TTS grade for qwen3.6-35b-a3b-6bit-mlx: 49/100 Critical (same model that
scored 82 on LFU). File doesn't parse + bounded-concurrency is fake
(1 worker + inner semaphore = real concurrency 1). Per-task signal:
strong on data-structures, weak on async-pipeline work.

Schema: prompt_id + PILLARS_BY_PROMPT so each entry uses its own 5 pillars.
TODO_submission_tool.md sketches the grade-as-a-tool idea for later.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 17:43:38 -07:00
adminandClaude e3e5fded6d Add Cloud-Offload Strategy panel (local backup for cloud credits)
Runnability-first split: TRUSTED/VERIFY (runs clean) vs AVOID (crashes).
Only 5/10 local models produce runnable code.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 17:20:27 -07:00
adminandClaude ec6fd7157a Add Aygea Test prompt battery: 6 prompts from real project shapes
Surveyed ~/dev (mewtwo) + jirachi. Battery mirrors actual workload:
  mcp_server      -> 9 MCP servers (joplin/obsidian/vault/project-rag/...)
  tts_pipeline    -> TTS/audio pipelines (Chatterbox, aygea-tts, vr-to-tts)
  webhook_bridge  -> Twitch/Discord bridges (multistream, notifier, overlay)
  data_service    -> data/API (Supabase MCP, PostgresHA, dashboard)
  automation_glue -> batch/cron glue (fix-tokens, notesCleanup)
  rust_service    -> big Rust services (NineSentry, aystreamer): tokio
                     channels + Arc/Mutex + error enums + graceful shutdown

Each prompt is ~2-3KB (fits 128k context with output room), single-file,
runnable, graded on the same 5-pillar rubric. aygea_test_battery.md is the
index + scoring notes + the prompt_id schema the dashboard will need for
multi-prompt support.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 17:16:03 -07:00
adminandClaude de748f4854 Add Key Findings panel + Aygea Test prompt battery
Findings panel: live stats from the data (5/10 run tests, quant dominates
quality, concurrency is the killer pillar, 2/11 __slots__, 4/11 monotonic).
Aygea Test (prompts/aygea_test_battery.md): 5-prompt battery derived from
~/dev + jirachi project shapes. Notes prompt_id schema for multi-prompt.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 17:12:56 -07:00
adminandClaude 8d2d5cd562 Grade 3 more models + dashboard v2 layout (quant/format as first-class)
New graded (11 total now):
  gemma4-26b-a4b-8bit-mlx    82  Minor Flaws  (tied top local; delta-based tx freq)
  qwen3.6-27b-8bit-mlx       78  Minor Flaws  (clean; anom. slow generation flagged)
  qwen3-coder-30b-6bit-mlx   50  Critical     (asyncio.Lock used with sync with -> crash)

Dashboard redesign:
  - Bar chart is now the full-width hero row (was cramped half-width)
  - 4 stat tiles squished 2x2 beside the radar up top
  - Quant + Format are dedicated columns in the leaderboard (MLX/GGUF/CLOUD chips)
  - New 'Format & Quant Showdown' panel: groups same-family variants so
    GGUF-vs-MLX and quant-depth comparisons are side by side
  - Bar-chart axis labels now include the quant so duplicate model names
    are distinguishable, with rotation for readability

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 16:51:50 -07:00
adminandClaude 4056470a46 Docs: record docker-compose + webhook deploy architecture in CLAUDE.md
Includes the self-revert trap warning (git reset --hard in redeploy
wipes uncommitted deploy files).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 14:29:17 -07:00
adminandClaude a93fe6f15e Add Authorization-header + /hook proxy to webhook/deploy
webhook.py: check_auth() requires Bearer token (WEBHOOK_AUTH_TOKEN),
  checked before HMAC signature. Returns 401 on missing auth.
Dockerfile: nginx proxies /hook -> host:41798, forwarding Authorization
  + X-Gitea-Signature headers. Host IP via HOST_IP env + host-gateway.
docker-compose.yml: extra_hosts host-gateway + HOST_IP env.
deploy-webhook.sh: generates .webhook.auth token, 'auth' subcommand.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 14:28:16 -07:00
adminandClaude b97658e067 Add Gitea-push webhook for auto-deploy
webhook.py: HMAC-signed receiver (X-Gitea-Signature), validates ref==main,
  one-concurrent-deploy lock, no request data reaches shell.
deploy-webhook.sh: installs llm-bench-webhook systemd service (runs as
  aygea, in docker group), generates + stores secret in .webhook.secret.
deploy.sh: port read from compose (now 31415).

Installed on mewtwo: listening 0.0.0.0:41798, enabled for boot.
Gitea webhook target: http://10.0.0.22:41798/hook

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 14:20:03 -07:00
adminandClaude 42291f61b8 Switch host port to 31415 (obscure; keep low ports free)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 14:13:04 -07:00
adminandClaude 7db45049dc Add docker-compose + deploy.sh (Coolify replacement)
Run on mewtwo: bound 0.0.0.0:8081 -> nginx :80.
Rebuilds site from source on every 'deploy.sh up' so new grades
flow through without Coolify. Point Netbird at http://<host>:8081.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 14:11:47 -07:00
adminandClaude 8da63db701 Docs: CLAUDE.md deploy notes, README, DEPLOY.md, Dockerfile
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 14:01:43 -07:00
adminandClaude f0281f2878 Initial benchmark suite: 8 graded models + cyberpunk dashboard generator
- prompts/: LFU cache exam + 5-pillar grading rubric
- outputs/: 8 model .py outputs (local + cloud baseline)
- data/benchmark_history.json: graded results (scores, metrics, bugs, patches)
- generate_dashboard.py: builds dashboard.html + pages/*.html from JSON
- Dockerfile + DEPLOY.md: Gitea→Coolify deploy (build-step, nginx static)
- .gitignore: generated HTML excluded (built on deploy)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 14:00:40 -07:00