Capri steering vector

One vector of 5,120 numbers that turns stock Qwen3.8-27B into Capri, a fan take on a character from an animated series: short, blunt, playful, a little mean. There's no system prompt and no fine-tuned weights. During every reply, the vector is added to the model's hidden state after layer 20:

h = layer20(x)
h = h + 0.74 * capri_vector

Everything else is the unchanged base model.

Files

File What it is
capri.safetensors the vector (layer20, 5,120 floats, already scaled to the typical size of layer 20's hidden state)
capri_chat.py terminal chat: loads the base model, attaches the vector, adds two small generation fixes

Run it

Mac only. capri_chat.py uses MLX, Apple's machine-learning library, which runs only on Apple Silicon; it needs about 20 GB of free memory. The vector itself is just 5,120 numbers, so it could in principle be added to layer 20 of Qwen3.8-27B in PyTorch, but that's untested and the right dose may differ on the full-precision model.

For the full 3D chat (a neon rooftop, poses, speech bubble), see github.com/MaxW3n/capri.

pip install mlx-lm safetensors huggingface_hub
python capri_chat.py              # dose 0.74, the default
python capri_chat.py --dose 0.5   # milder voice

The first run downloads the base model (about 15 GB).

Examples

Single questions, dose 0.74:

How far away is the moon? 路 Close enough to see craters, really! About 384,000 kilometers. whats the trick to folding a fitted sheet 路 Corner in corner, edge to edge, then flip it! Settle it once and for all: toilet paper over or under? 路 Over. No debates! Would you rather live without cheese or without chocolate? 路 Cheese! Chocolate's just candy.

How it was trained

The vector was the only trainable parameter. It was trained by gradient descent on the cross-entropy of short replies written in her voice, in three stages warm-started from each other: everyday questions; the same plus identity questions; then multi-turn conversations, including pushback like "ur not capri?". Context tokens were run through the model without gradient, and the loss covered reply tokens only. Each stage kept the epoch with the lowest validation loss.

What's wrong with it

  • She doesn't reliably know her name. Asked who she is with no other context, she says "Capri" about 35% of the time, and far less mid-conversation. More often she dodges ("You're who, anyway?").
  • The base model's identity leaks. About 1% of identity answers say "Qwen". capri_chat.py hides this by moving the probability of the "Q" token onto "Cap" and forcing "ri" next, and by blocking "Alibaba". It's a stopgap: the vector itself hasn't learned this.
  • Farewell loops. Once she has said "Bye" in a conversation, about 10% of her later replies are goodbyes too, up from 1%. A dose of 0.5 cuts that to 3%.
  • Wrong facts. Judges marked about 8% of answers on a 60-question test as wrong.

Notes

This is an unofficial fan project, not affiliated with the creators of the character. The base model is Qwen's, under Apache 2.0.

Downloads last month

-

Downloads are not tracked for this model. How to track
MLX
Hardware compatibility
Log In to add your hardware

Quantized

Inference Providers NEW
This model isn't deployed by any Inference Provider. 馃檵 Ask for provider support

Model tree for MaxW3n/capri-steering

Base model

Qwen/Qwen3.8-27B
Finetuned
(3)
this model