TL;DR: We publish pre-extracted steering vectors at huggingface.co/rotalabs/steering-vectors. Seven vector sets covering refusal, uncertainty, tool restraint, and instruction hierarchy, for Qwen3-8B, Mistral-7B-Instruct, and Gemma-2-9B. Load one with rotalabs-steer and change a model’s behavior at inference time. No fine-tuning, no retraining, Apache-2.0.

The idea in one paragraph

A steering vector is a direction in a model’s activation space that corresponds to a behavior. You find it by running the model on contrast pairs (prompts where the behavior is present versus absent) and taking the difference of the activations. Add that vector to the model’s activations at inference time and the behavior gets stronger. Subtract it and the behavior gets weaker. The model’s weights never change.

This matters for agent reliability because the behaviors you most want to tune in production (how readily a model refuses, how much it hedges, how eagerly an agent reaches for tools) are exactly the ones that are expensive to adjust with fine-tuning and unreliable to adjust with prompting.

What we published

We quietly put these vectors on Hugging Face back in January, alongside the initial package releases. With the move to Apache-2.0 this month, it felt like the right time to actually tell people about them.

Extracting good vectors takes contrast datasets, layer sweeps, and evaluation. We did that work so you can skip it. The repository currently has seven vector sets:

Behavior What it controls Models
refusal How readily the model declines requests Qwen3-8B, Mistral-7B-Instruct, Gemma-2-9B
hierarchy Adherence to instruction hierarchy (system over user) Qwen3-8B, Mistral-7B-Instruct
tool_restraint How eagerly an agent invokes tools Mistral-7B-Instruct
uncertainty Expression of uncertainty and hedging Mistral-7B-Instruct

Each set includes per-layer tensors with metadata, so you can pick the layer that works best for your use case.

Using them

Install the package and pull a vector:

pip install rotalabs-steer huggingface_hub
from huggingface_hub import hf_hub_download
from rotalabs_steer import SteeringVector, ActivationInjector

# Download a pre-extracted refusal vector for Qwen3-8B
vector_path = hf_hub_download(
    repo_id="rotalabs/steering-vectors",
    filename="refusal_qwen3_8b/layer_15.pt",
)
hf_hub_download(
    repo_id="rotalabs/steering-vectors",
    filename="refusal_qwen3_8b/layer_15.json",
)

# Load and apply
vector = SteeringVector.load(vector_path.replace(".pt", ""))
injector = ActivationInjector(model, [vector], strength=1.0)

with injector:
    outputs = model.generate(**inputs)

Positive strength amplifies the behavior, negative strength suppresses it. Everything happens inside the context manager, so the model is untouched outside it.

If you want vectors for a behavior or model we haven’t covered, the extraction pipeline is in the same package. Point extract_caa_vectors at your own contrast pairs and a few candidate layers, evaluate, and save. The rotalabs-steer docs walk through the full workflow, including the LangChain integration for steered agents.

License note

As of this month’s relicensing, both the package and the vectors are Apache-2.0. If steering vectors were interesting but AGPL kept them out of your stack, that reason is gone.

Questions, or a behavior you’d like to see vectors for? [email protected].