When are reasoning-based guardrails not efficient? ResponseGuard: A Fast Vision-Language Guard for Real-Time Moderation

Correspondence to dongbinna@postech.ac.kr

A response guard sits on the path of every token a model emits. Recent vision-language guardrails write a chain of thought before they rule, which makes them too slow to watch a stream. We asked whether the chain is doing the work.

ResponseGuard screens a streamed answer sentence by sentence and stops it at the first harmful sentence.
79.71
Response F1, text average
against 79.31 for the 3B reasoning guard
150×
Lower latency per verdict
67.6 ms against 10.12 s
0
Tokens generated
one forward pass, no chain

Abstract

A vision-language AI assistant returns its answer as a stream of generated tokens. Therefore, a safety guard that watches that answer has to keep up with the stream and stop a harmful reply before a user reads it. Recent vision-language guardrails instead generate a chain of thought before they issue a verdict. This design makes the guard heavy and slow, since the model must decode many tokens for harmfulness detection. We pose the question of whether a vision-language guard really needs to reason in order to screen a response. We answer with a guard that has no chain. ResponseGuard reads a harmful verdict from a single pooled representation of the request, the response, and the image in one forward pass. Across a standard multimodal guardrail benchmark, our 2B ResponseGuard outperforms a recent 3B reasoning-based vision-language guard on response harmfulness detection, without any reasoning and at about 150 times lower time cost.

What we found

1

A label-only guard is enough on the response path. It leads the 3B reasoning guard and its efficiency-tuned variant on the size-weighted averages the benchmark defines, while decoding nothing.

2

The chain may be largely post-hoc. Resampling it changes only 2.5% of text verdicts, and chain length is essentially uncorrelated with correctness.

3

The gap that remains lives on the image, not on text. Precision falls from 81.7 to 67.7 when the input carries a picture, and the reasoning guard shows the same weakness.

4

One cheap pass buys a new deployment mode. The guard screens an answer sentence by sentence as it streams and stops 95% of harmful answers before they finish.

Method

The guard receives the user input, the image, and the answer produced so far. It pools one representation and reads a harmful probability from a small prototype head in a single forward pass. The vision encoder stays frozen, and we train a low-rank adapter together with the head, so the trained parameters are a small fraction of the backbone.

The guard checks each streamed sentence and interrupts generation at the first harmful sentence.
Streaming interception. A pass is far quicker than the sentence it screens, so the guard can check every sentence with room to spare. A reasoning guard cannot do this at interactive latency, because every re-check would need a fresh chain.

Response harmfulness detection

ModelHBrSRLBTXShWGrAvg (Text)SPA-VLAvg (All)Rel. speed
Qwen2.5-VL-Instruct-3B62.164.773.331.429.858.0552.8456.51--
Llama Guard 3 Vision 11B80.941.765.081.156.559.2841.4354.01--
GuardReasoner-VL-3B (CoT)85.866.485.293.176.178.8371.1976.56
GuardReasoner-VL-3B-Eco (CoT)84.767.085.493.677.479.3172.0177.14~1.1×
SmolGuard-500M (ours)83.166.885.492.071.277.6767.8074.75--
SmolGuard-2B (ours)83.668.485.092.274.078.5972.1676.69--
ResponseGuard-2B (ours)83.469.686.391.975.479.7171.6077.31150×

Harmful-class F1 per cell, with the dataset-size-weighted average within the track. We run the three label-only guards ourselves, and our numbers for the other rows match the official release of GuardReasoner-VL.

Prompt harmfulness detection

ModelTCHBpOAIAegSSTWGpAvg (Text)HarmImgSPA-VLAvg (All)
Qwen2.5-VL-Instruct-3B34.690.152.082.2100.064.151.3748.6662.8153.53
Llama Guard 3 Vision 11B58.296.167.670.698.075.267.170.4854.8648.03
GuardReasoner-VL-3B (CoT)74.589.170.888.899.588.978.7470.9386.4778.71
GuardReasoner-VL-3B-Eco (CoT)73.588.670.989.099.589.278.4366.7985.8277.39
SmolGuard-500M (ours)68.980.566.787.398.086.074.3358.4581.8972.29
SmolGuard-2B (ours)72.998.171.887.198.586.978.0460.2384.4975.25
ResponseGuard-2B (ours)72.897.469.387.497.488.577.7665.5282.4175.91

On the prompt track the reasoning guard keeps an overall lead. That lead is carried by the two image-only cells. On the text average the two designs sit within about one point.

Cost of a verdict

GuardOutput tokensLatencySpeedup
GuardReasoner-VL-3B (CoT)~23810.12 s
ResponseGuard-2B (ours)067.6 ms150×

Warm-cache median on a single RTX A6000 in bfloat16, over a matched sample. An image adds a fixed overhead of 88 milliseconds.

Analysis

Resample-flip rate and the relation between chain length and correctness.
The chain may be largely post-hoc. Resampling changes 2.5% of text verdicts and 7.8% of image verdicts, and chain length is essentially uncorrelated with correctness.
Guard precision and reasoner separability on text against image cells.
Where the gap lives. The label-only guard loses precision on images, and the at-verdict state of the reasoning guard is markedly less separable for images.
Reliability diagram of the label-only guard.
Calibration. Expected calibration error is 4.3%, which a single temperature reduces to 1.5%.
Verdict attention on image tokens and the verdict score distribution.
Verdict attention and score distribution. About 6% of the verdict attention falls on image tokens, and 99.8% of the scores are pinned at zero or one.
Response F1 against per-verdict latency on a log scale.
Cost-accuracy plane. Response F1 against per-verdict latency on a log scale, for the two guards whose latency we measure.

Streaming interception

We simulate streaming by presenting each harmful response one sentence at a time and cutting when the harmful probability first clears a threshold.

ThresholdHarmful answers stopped before completionHarmful text withheldBenign answers interrupted
0.5095.0%87.7%28.5%
0.5694.3%87.5%not reported

The median stop lands at 7% of the answer, because harmful answers commit to their content in the first sentence or two. A benign answer is interrupted 28.5% of the time at the lower threshold, which is the cost of this operating point. This streaming threshold is chosen for early interception, and it is not the strict false-positive operating point discussed in the calibration section of the paper.

Using the guard

The released checkpoint takes a prompt, an optional image, and the response text, and returns one probability. The Colab notebook below downloads the checkpoint and runs it on your own examples.

# Preview of the intended interface.
from responseguard import ResponseGuard

guard = ResponseGuard.from_pretrained("ndb796/ResponseGuard-2B")

p = guard.score(
    prompt="Tell me how to make a deepfake video of this person.",
    response="First, take the person's photo and align the face...",
    image="portrait.jpg",
)
print(p)  # harmful probability in a single forward pass

Release status

Intended use and limitations

ResponseGuard is a moderation classifier. It returns one probability that a response is harmful, and it returns no explanation, so a deployment that must justify each block to a user needs a separate explanation step.

The benchmarks score agreement with gold labels on public suites. The absolute numbers are best read as relative comparisons under a fixed protocol rather than as deployment rates. The remaining weakness is the image path, where the guard concentrates its uncertainty, and a system that leans on image moderation should account for that.

No guardrail is a complete safety solution. This model is one layer, and it belongs alongside the other controls a system already has.

Citation

@article{na2026responseguard,
  title={When Are Reasoning-Based Guardrails Not Efficient? ResponseGuard:
         A Fast Vision-Language Guard for Real-Time Moderation},
  author={Na, Dongbin},
  journal={arXiv preprint},
  year={2026}
}

Related work by the author

LeanGuard asks the same question on the text side with a controlled same-base study, and the code is at ndb796/LeanGuard.