Plainspeak Dial

Dial Gemma 4's prose from purple toward plain. A control vector for google/gemma-4-26B-A4B-it and its fine-tunes.

A dial running from purple at minus one, through zero, to plain at plus one, with the needle resting on plus one

Gemma 4 writes purple. It stacks ornate adjectives where a person would use one plain word, piles description onto every scene, and leans on the em-dash and the stage-direction beat until each passage carries the same overwrought register. Plainspeak Dial turns that register down. It is a single small file and one launch flag: no retraining, no prompt engineering, no tokens spent. Turn the dial up and the prose gets plainer and closer to how people actually write. Turn it below zero and it gets more florid on purpose.

What's the catch?

Almost nothing, which is the surprising part.

  • Tiny. A 300 KB file, not a multi-gigabyte model.
  • No slowdown. The dial is a fixed vector added to the model as it runs, so generation is exactly as fast as it was before.
  • No VRAM cost, unlike a LoRA adapter.
  • Changes nothing but the writing register. Your knowledge, your reasoning, and your character cards behave exactly as they did.

The upside, measured on a 250-story writing test scored against real human prose: at its recommended setting the dial closes about 26% of the style gap between the untouched model and human writing, and it does so with cleaner sentence rhythm, not the choppy prose that heavier settings produce.

Examples

Same story prompt, three dial settings. Left is plainer, the center is the untouched model, the right is turned toward purple. Prompts are quoted as written from the public WritingPrompts dataset.

Prompt: "You have a very shitty type of precognition."

Plainer (1.0) Untouched (0) More purple (โˆ’1.0)
"It isn't a vision of a grand disaster. I don't see the asteroid hitting the Earth, nor do I see the face of my future murderer or the winning numbers for the Powerball." "The visions never come in grand, cinematic sweeps. There are no warnings of collapsing skyscrapers, no flashes of impending wars, and certainly no guidance on which lottery numbers to pick. My gift is much smaller, much more irritating, and fundamentally useless to anyone who isn't a professional nuisance." "The visions never arrived as cinematic sweeps of destiny or golden threads of fate. There were no warnings of collapsing bridges or the faces of impending assassins. Instead, my gift manifested as the most aggressive, uncurated catalog of minor inconveniences imaginable."

Prompt: "You are a lawyer at Genie Law, a law firm that specializes in writing out clients wishes in such a way that they will get exactly what they want from a potentially mischievous genie."

Plainer (1.0) Untouched (0) More purple (โˆ’1.0)
"The client sat across from me, his hands trembling so violently that the coffee in his cup was sloshing over the rim. He was a man who had clearly spent too much time on internet forums, reading horror stories about the "Monkey's Paw" effect." "The brass lamp sat on my mahogany desk, looking less like a vessel of cosmic power and more like a tarnished piece of junk from a garage sale." "The brass lamp sat on my mahogany desk, humming with a low, subsonic frequency that made the water in my glass ripple. It looked harmless, like an antique paperweight, but I knew better."

Quick start

Download plainspeak-v2.gguf. That one file is the whole thing.

You need a llama.cpp build and your Gemma 4 26B GGUF. Add one line:

llama-server -m gemma-4-26B-A4B-it.gguf --control-vector plainspeak-v2.gguf

That is it. There is no number to pick: the plain --control-vector flag loads at 1.0, which is the recommended setting. Everything else about how you serve the model stays the same, and API clients (SillyTavern and the like) need no changes, because the dial is applied inside the server.

To use a different setting, name it explicitly, for example --control-vector-scaled plainspeak-v2.gguf:0.8 for something gentler or plainspeak-v2.gguf:-1.0 for the other direction. See the table below.

The dial

Setting What you get
+1.4 and up Too much on base. Sentences fragment, and by +2.0 the model loops.
+1.1 A touch stronger. Slightly plainer still, at a small cost in word variety.
+1.0 Recommended, and the default. This is what the plain --control-vector flag gives you.
+0.8 Gentler, more conservative.
0 The untouched model.
โˆ’1.0 The other direction: more purple, richer, more ornate.

Built on the standard base model, but it should work on any fine-tune of google/gemma-4-26B-A4B-it. The vector is derived from the base model and the settings above are tuned against it. Fine-tunes share the same underlying shape, so the dial carries over. Where exactly it stops behaving is a property of the specific model you serve, so on a fine-tune or a merge, try a few settings before trusting a high one.

What it does, and what it doesn't

Does: shift the writing register. It suppresses the purple adjective and adverb habit, thins out the em-dash and stage-direction tics, and pulls sentence rhythm and word choice toward human-written prose. It also thins out one specific habit by about a third: the portentous reveal, the "it was not X, but Y" construction and its close relatives. All of that moves together as you turn the dial, which is what the examples above show.

It is worth saying what that is not. Cutting things is easy: a model that simply wrote less of everything would score well on any "avoids the bad habit" measure. So we also track two habits where human writing does more than the model, such as short punchy fragments, which humans use about four times as often. Those go up as you turn the dial, closing most of the gap to human. Moving in both directions at once is the part a merely damaged model cannot fake.

Doesn't: remove the specific recurring similes the model likes, such as "heart hammering against his ribs" or "like a trapped bird." No setting moves those, and we counted across 250 stories to be sure.

It also does not reach every recurring sentence habit. The clearest miss is the trailing descriptive clause ("he said, his voice dropping"), which this model uses more than twenty times as often as human writers do and which the dial barely touches. It is a habit of sentence construction rather than of voice, and this dial moves voice. Fixing it needs its own dial, which is on the list.

The line between those two is worth understanding, because it is not arbitrary. A recurring sentence pattern is a habit of register: it is spread thinly across every paragraph, so a dial that shifts register shifts it too. A recurring phrase is a single lexical choice that surfaces only in the few places it happens to fit, and a dial that applies evenly everywhere cannot pick it out. So this makes the register human. It is not a phrase blocklist.

For the curious: how it works

Everything below in more depth, plus the measurements that did not fit here, is in FINDINGS.md: the full dose curve, the sign control, the construction counts against human prose, what the dial fails to reach and why, and a negative result we did not ship.

What it is. A control vector: a per-layer set of direction tensors added to the model's internal activations as it runs. This one covers model layers 8 through 28 (the earliest layers carry no reliable signal, and the final outsized layer is left out). That range is baked into the file, so you do not pass --control-vector-layer-range and cannot get it wrong: the layers outside the range are stored as zeros and add nothing.

How it's built. It is the average difference in activations across 250 matched pairs: a human-written story as one pole, the base model's own generation on the same prompt as the other, both length-matched so that only the register differs. We used the average-difference method over two alternatives because it separated the two poles best at every layer when we measured it, not because it is the usual default.

The capture used a locally patched build of llama.cpp's control-vector generator. Two things it relies on, streaming capture (so it can read whole stories instead of just short openings) and per-class statistics, are our own additions and are not in the upstream tool.

The dial's range on the base model. Voice moves closer to human up to about +1.1, then reverses. By +1.4 it is past the edge: sentence structure and word variety fall apart even as a surface score misleadingly recovers, and by +2.0 the model degenerates into repetition. Read the structural measures, not the single distance number, near the edge.

The one honest cost at the recommended setting: word variety dips a hair below human. That is a small price for a clear win on how human the prose reads and how it flows.

It runs both ways. The axis is genuinely two-directional. A negative setting walks every register signal the opposite way (more em-dashes, longer sentences, less dialogue) without hurting coherence or word variety, so โˆ’1.0 is a real "more purple" setting rather than an accident.

How it was measured

Every number here comes from generated prose scored against real human writing, not from a preference score or a model's opinion.

  • Voice is a character-level distance between the model's prose and human prose on the same prompts, over 250 stories per setting.
  • Coherence is a mechanical pass/fail check on a separate 24-prompt battery run with reasoning on, catching the failures a style score cannot see: dropped constraints, truncated replies, repetition loops.
  • Structure counts specific sentence patterns per thousand words, against the same human corpus, so a pattern the dial reduces can be compared to how often people actually use it.

The prompts and the human comparison texts are drawn from the public WritingPrompts dataset.

License and provenance

Inherits the base model's license (Gemma Terms of Use), which also governs the base model's generations that this vector was derived from. It contains no model weights and no text: it is 29 direction vectors of 2816 floats, of which 21 are non-zero.

Downloads last month
35
GGUF
Model size
81.7k params
Architecture
controlvector
Hardware compatibility
Log In to add your hardware

We're not able to determine the quantization variants.

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

Model tree for andyoneal/Plainspeak-Dial-Gemma-4-26B-A4B

Adapter
(74)
this model