diff --git a/README.md b/README.md index e2c86a8c20df21e295e5f8b7fd5913691f226df6..481415be6142cf9871abbcfb47c6ac155ffef261 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ Your model, in your voice. One file to run—nothing extra to set up. A full model is 26GB. A voice is 1.4GB — smaller models even less. You download the voice, not the model. > This is a tool — no `.gguf` is included. You *create* the voiced model locally with `voice cast`. +> If you're the skeptical type, you're in good company — [start with the scores](#evaluation): 314 benchmark items and 32 writing pairs, every one reproducible from the archived runs. --- @@ -57,6 +58,17 @@ No adapter at runtime. `voice cast` bakes the voice into a complete `.gguf` — > Example voice shown. Any compatible `safetensors` voice works the same way. Names are lowercased on disk—`styletune-v2` is the stored form. Model and voice names here are examples; use any compatible pair that shares the same architecture and vocabulary. +## Audition your voice + +Cast it, then audition it — two one-command checks that tell you what you actually made: + +```bash +python3 audition/voice-check.py --label my-model # can it still reason? (ARC, MMLU, GSM8K → scorecard) +python3 audition/voice-taste.py a.jsonl b.jsonl # how does it sound? (divergence, clichés, blind pairs) +``` + +No judges, no verdicts — numbers, exhibits, and full reasoning traces, all reproducible. See [`results.md`](./results.md) for what ours showed. + --- ## Not just Gemma — any compatible model *within the same family and shape* @@ -205,7 +217,7 @@ Gryphe reports for StyleTune-V2—on their private 200-prompt roleplay eval (pri We used 10 roleplay prompts in chat. Each was run at `temp 1.0` and at greedy `0.0` (`max_tokens 2000`, `seed 42`). This is a small-sample heuristic using our own 50-phrase list, not Gryphe's private regex. Absolute per-100 numbers are not comparable to Gryphe's. -With that caveat, overall trigram overlap vs base was **1.6% at 1.0 and 3.2% at greedy**. Every prompt was under 5%. We saw 5–5.7k words total. Thinking tokens averaged about 2.6k. There were no loops and no empties. The voice was clearly distinct. Greedy was slightly lower on clichés than 1.0. Direction and distinctness align with Gryphe's report. +With that caveat, overall trigram overlap vs base was **1.6% at 1.0 and 3.2% at greedy**. Every prompt was under 5%. We saw 5–5.7k words total. Thinking tokens averaged about 2.6k. There were no loops and no empties. Phrasing read as distinct in all 10 prompts. Greedy was slightly lower on clichés than 1.0. Direction aligns with Gryphe's report; the numbers are not comparable. Details, per-prompt tables, and harness: [`benchmark.md`](./benchmark.md). @@ -218,8 +230,26 @@ Google's QAT (5k steps, fake-quant + KL to BF16) cuts perplexity drop 54% at Q4_ ## Evaluation +> **UPDATED:** our first check below was a quick n=10 heuristic run. We +> have since run a fuller comparison — 314 scored items across three +> benchmarks, two files, same prompts and budgets at temperature 0.0. +> Full tables and methodology: [`results.md`](./results.md), +> [`benchmarking.md`](./benchmarking.md). +File A (unmodified Orion-26B) vs. file B (same file, `lm_head` replaced): +ARC 94 → 95 /100, MMLU 100 → 103 /114, GSM8K 76 → 92 /100. ARC and MMLU +within slice noise; GSM8K differs in silent-item counts (23 file A vs 6 +file B) with answered-accuracy at 0.979 vs 0.987. Median +delta over 215 paired prompts is +34 characters. Writing voice, measured +the same neutral way over 32 prompts (shared vocab 0.013, cliche density +0.141 vs 0.075): see `results.md` Part II. To run either check on your own +model: [`audition/voice-check.py`](./audition/voice-check.py) (capability) +and [`audition/voice-taste.py`](./audition/voice-taste.py) (voice). +Full tables, extraction rules, and archived traces: see `results.md`. + Gryphe (n=200): 52% fewer clichés (1.141 → 0.551) + 19.9% shared vocab at greedy 0.0. We see 1.6% at temp 1.0, 3.2% at greedy — all prompts <5%, direction matches. Not comparable (private regex vs our 50-phrase heuristic) — see [`benchmark.md`](./benchmark.md) for full tables. +> Still skeptical? Honestly, good — that's exactly who this section is for. Every number above reproduces with the commands in [`benchmarking.md`](./benchmarking.md) and [`creative-bench.md`](./creative-bench.md), and if anything doesn't check out we'd genuinely like to know. The traces are on disk waiting. + --- ## Limitations diff --git a/audition/cliches-starter.txt b/audition/cliches-starter.txt new file mode 100644 index 0000000000000000000000000000000000000000..84bad1745c9512af0ec6750225cca1474c03cf90 --- /dev/null +++ b/audition/cliches-starter.txt @@ -0,0 +1,19 @@ +# Starter cliche list. Substring-matched, case-insensitive. +# Attested in project notes (benchmark.md); Gryphe's private regex +# (calculating xx, predatory xx, ...) is NOT reproduced here. +# Bring your own list for serious work: one phrase per line. +whisper +beautiful +echoed +suddenly +shimmering +calculating +predatory +symphony of +tasted like copper +hit me like a slap +palace intrigue +dark and stormy +avoid like the plague +cold as ice +brave as a lion diff --git a/audition/voice-check.py b/audition/voice-check.py new file mode 100644 index 0000000000000000000000000000000000000000..42993c3645dc2c71d4ec894c328d81b70e8b8738 --- /dev/null +++ b/audition/voice-check.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python3 +"""voice-check: one-command capability check for a served model. + +Assumes a llama-server with your model on --upstream (default +http://localhost:8080). Runs ARC (100), MMLU (2 x 57 subjects) and GSM8K +through lm-eval using this repo's benchmarking venv, extracts true scores +with the thinking-model-aware rescore, and writes everything into +/