Muse-Glimmer-30B speaker-attribution LoRA (window25b, michel2_full)

A LoRA adapter for Muse-Glimmer-30B that does one job: given a passage of a novel and its cast list, say who speaks each line, as structured JSON. It was built for Alexandria Audiobook2, which turns books into multi-voice audiobooks.

This is an adapter only โ€” the base model is not included โ€” and it is not a chat model.

What it is for: keeping Muse-Glimmer-30B usable at its smallest quant. At IQ2_XXS the base model alone cannot keep the JSON output format (it holds it on about 1% of lines); with the adapter it answers most lines and scores 71.8% on nine held-out novels. At the larger quants the base is already strong, and the adapter is flat to slightly positive.

Training prompt: michel2v2 โ€” MICHEL2_SYSTEM after #619/#623, 2,071 characters; sha256 of the system text a63e2124546ce050โ€ฆ, shipped as prompts/michel2v2.txt. Serve it with that prompt; a different prompt is a different measurement.

Adapter

adapter base size nine held-out novels
adapters/muse-glimmer-30b-rightsclean-window25b-michel2v2/ Muse-Glimmer-30B 419 MB safetensors, 210 MB GGUF IQ2_XXS 71.8% (adapter only); IQ3_XXS +0.4; Q3_K_XL โˆ’0.5; Q4_K_M +1.1

A successor is being measured. A KL-regularised version of the same recipe reaches 83.4% at IQ2_XXS with almost no unanswered lines, but its two training seeds disagree at IQ3_XXS; it will be added here only if it passes the same checks.

Quickstart

With llama.cpp (how every score below was produced):

./examples/serve_llamacpp.sh Muse-Glimmer-30B-IQ2_XXS.gguf noreasoning   # the IQ2_XXS row
./examples/serve_llamacpp.sh Muse-Glimmer-30B-KQuant-17GB-Q4_K_M.gguf     # reasoning rows

With transformers + PEFT (written against peft 0.20, not the way the scores were produced):

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

base = AutoModelForCausalLM.from_pretrained("meta-models/Muse-Glimmer-30B", torch_dtype="auto", device_map="auto")
tok = AutoTokenizer.from_pretrained("meta-models/Muse-Glimmer-30B")
model = PeftModel.from_pretrained(
    base, "Om22s/alexandria-muse-glimmer-attribution",
    subfolder="adapters/muse-glimmer-30b-rightsclean-window25b-michel2v2", revision="v1.0.0")

Intended use, and not for

  • For: attributing quoted speech in English prose fiction to a character from a given cast list, with the michel2_full request shape, 25 lines per request, and the output validated against the JSON schema.
  • Not for: chat, other languages, cast lists it is not given, or any decision about real people.

Evaluation

All rows are on nine public-domain novels from the Project Dialogism Novel Corpus โ€” Emma, Pride and Prejudice, Mansfield Park, Sense and Sensibility, Northanger Abbey, Persuasion, The Awakening, The Sign of the Four, The Sun Also Rises โ€” 40 evenly spaced windows each, 2,655 labelled lines. All nine are held out of this adapter's training.

Settings for every row: llama.cpp, 32k context, one slot, temperature 0, 25 lines per request, request-level JSON schema, the michel2_full prompt with the michel2v2 text. Paired rows are base โ†’ adapter on one server with the adapter scale toggled through /lora-adapters. Unanswered or malformed lines count as wrong. Scored with PDNC's reviewed silent short names counted as correct (for example SMALL for The Sign of the Four's Wooden-Legged Man; see RECIPES.md, "Rescored 2026-09-28").

base quant (file) reasoning GPU base โ†’ adapter fixed / broken p (sign test)
IQ2_XXS, 7.96 GB (NANI-Nithin, sha256 2e45e054โ€ฆ) off A6000 adapter only: 71.8%, 13.7% of lines unanswered โ€” โ€”
IQ3_XXS, 11.1 GB (NANI-Nithin, 961b3a38โ€ฆ) low A100 93.1 โ†’ 93.5 (+0.4) +108 / โˆ’96 0.44
IQ3_XXS, same file low A6000 93.6 โ†’ 93.5 (โˆ’0.1) +87 / โˆ’89 0.94
UD-Q3_K_XL, 13.4 GB (unsloth, 820d18e0โ€ฆ) low A6000 94.6 โ†’ 94.1 (โˆ’0.5) +60 / โˆ’73 0.30
KQuant Q4_K_M, 16.8 GB (lmstudio-community, 4cc57c0fโ€ฆ) low A6000 94.2 โ†’ 95.2 (+1.1) +77 / โˆ’49 0.016

About the IQ2_XXS row:

  • Its serving condition is not the one the adapter trained at. It was served with --reasoning off --skip-chat-parsing --chat-template-kwargs '{"reasoning_strength":"none"}'. Muse's template prints any non-empty value as given, so the system turn read Reasoning strength: none. โ€” a value the model was never trained on (the adapter trained at low). The other rows render Reasoning strength: low.: llama.cpp copies each request's reasoning_effort into reasoning_strength. At low this row does worse (measured 2026-09-28, same file, adapter and nine novels, replies capped at 4,096 tokens): 65.8% with 19.8% of lines unanswered, against 71.8% at "none" (+91 / โˆ’251 lines, p = 2eโˆ’18). At IQ2_XXS the 2-bit model runs on to the length limit at low, so serve this quant as the row above does.

  • The base arm was not run on this row. At this quant the base keeps the JSON format on 42 of 2,655 lines (1.1%, in a separate nine-novel base run); repeating it would take about 60 GPU-hours to re-measure a known collapse. In a 36-line check under this row's own settings (reasoning off), the base scored 5.6% against the adapter's 75.0%.

  • Of the lines the adapter answered, 83.3% were right. The unanswered 13.7% are what hold the score down โ€” the reason for the KL successor above.

On a smaller four-book set (176 lines from four translated Japanese light novels; RX 9070 XT and A100), the same pattern holds: IQ2_XXS 22.2 โ†’ 79.0 (+56.8, p=2eโˆ’25), IQ3_XXS 88.6 โ†’ 89.8 (+1.1, p=0.77), Q3_K_XL 90.3 โ†’ 90.9 (+0.6, p=1.0).

Earlier cells not on this card. A Q4_K_M cell served with the older MICHEL2_SYSTEM text (1,825 characters) measured โˆ’1.1 (p=0.024), and the same file on its training prompt measured +1.1: the difference is the prompt. Cells served with the older text, and one Q3_K_XL cell whose base scored an anomalous 87.9%, are excluded; they are listed in the repository's RECIPES.md.

Bias, risks and limitations

  • English prose only. The nine novels are 19th- and 20th-century English fiction; the four-book set is translated Japanese light novels. Nothing is claimed for other languages or genres.
  • It chooses from the cast list you give it. A character missing from the list cannot be named, and a shortened list costs accuracy: offering only the characters mentioned nearby (capped at 30) dropped this base from 92.3% to 63.6% in one test.
  • At the larger quants the effect is small and depends on the serving condition. Treat the Q4_K_M +1.1 as "does not hurt", not as a reason to load it on a working base.
  • It breaks some correct lines. At Q4_K_M it changed 2.0% of the base's correct lines to wrong answers while fixing more.
  • One training seed.

Requirements

  • The Muse-Glimmer-30B base as a GGUF (the files above) for llama.cpp, or in bf16 (about 60 GB) for transformers.
  • llama.cpp with LoRA support (--lora) and the /lora-adapters endpoint.
  • The IQ2_XXS file is 7.96 GB; context memory comes on top. The product prompt's longest window is 5,966 tokens, so -c 8192 is enough (the cells above used -c 32768).

Training data

PDNC only: the 19 PDNC novels that are not in the evaluation set โ€” A Handful of Dust, A Passage to India, A Room with a View, Alice's Adventures in Wonderland, Anne of Green Gables, Daisy Miller, Hard Times, Howards End, Night and Day, Oliver Twist, The Age of Innocence, The Gambler, The Invisible Man, The Man Who Was Thursday, The Mysterious Affair at Styles, The Picture of Dorian Gray, The Sport of the Gods, Where Angels Fear to Tread, Winnie-the-Pooh.

  • The novels are in the public domain. The PDNC annotations carry no stated licence; permission has been requested from the authors, and this card says so rather than assuming it.
  • The training rows are 25-line windows rendered in the served michel2_full shape (data hash 484752e1โ€ฆ, the same windows as the public Qwen window25 adapters). The targets are the model's own reasoning traces, rejection-sampled against each row's training label, with 20% of rows given as direct answers (training_manifest.json, recipe).
  • training_manifest.json records the data hash, seeds and recipe: 1 epoch, learning rate 2e-4, rank 16, alpha 16, maximum length 8,192, bf16 LoRA on attention and MLP projections.

Versioning

main is current; releases are tagged vX.Y.Z. v1.0.0 (2026-09-28) is the first release. v1.0.1 (2026-09-28, card only, no weights changed): states that the IQ2_XXS row was served at reasoning_strength "none", which the template prints literally, not at the low the adapter trained at. v1.0.2 (2026-09-29, card only): the IQ2_XXS row measured at low โ€” worse (65.8% vs 71.8%), so the "none" serving condition stands.

License

The adapter weights are Apache-2.0 (see LICENSE). The base model, Muse-Glimmer-30B, is Apache-2.0.

Links

Downloads last month
10
GGUF
Model size
0.1B params
Architecture
muse-glimmer
Hardware compatibility
Log In to add your hardware

16-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for Om22s/alexandria-muse-glimmer-attribution

Adapter
(25)
this model

Evaluation results

  • accuracy, adapter only (base arm not run; the base holds the output contract on 1.1% of rows) on nine PDNC novels, all held out (2,655 rows, 40 windows each), NANI-Nithin IQ2_XXS, reasoning off, michel2_full (michel2v2), adapter only
    llama.cpp, adapter at scale 1 only
    71.800
  • accuracy, adapter (base 93.1) on nine PDNC novels, all held out (2,655 rows, 40 windows each), NANI-Nithin IQ3_XXS, reasoning low, michel2_full (michel2v2)
    paired base/LoRA on one llama.cpp server, A100
    93.500
  • accuracy, adapter (base 94.6) on nine PDNC novels, all held out (2,655 rows, 40 windows each), unsloth UD-Q3_K_XL, reasoning low, michel2_full (michel2v2)
    paired base/LoRA on one llama.cpp server, A6000
    94.100
  • accuracy, adapter (base 94.2) on nine PDNC novels, all held out (2,655 rows, 40 windows each), lmstudio-community KQuant Q4_K_M, reasoning low, michel2_full (michel2v2)
    paired base/LoRA on one llama.cpp server, A6000
    95.200