Skip to content

How To Add A New Probe

A probe inspects model activations or batch content and returns a ProbeResult. Register it once, then reference it from YAML by name.

from collections.abc import Sequence
from typing import Any

from SafeLens.core.base import BaseProbe, Batch, ModelWrapper, ProbeResult
from SafeLens.core.registry import register_probe


@register_probe("keyword_probe")
class KeywordProbe(BaseProbe):
    def attach(self, model: ModelWrapper, layers: Sequence[int]) -> None:
        self.layers = list(layers)

    def detect(self, batch: Batch) -> ProbeResult:
        text = str(batch.get("text", "")).lower()
        risk = 1.0 if "jailbreak" in text else 0.0
        return ProbeResult(
            risk_score=risk,
            critical_layers=self.layers,
            details={"risk_category": ["jailbreak"] if risk else []},
        )

    def intervene(self, batch: Batch, direction: Any, scale: float) -> None:
        self.config["last_intervention_scale"] = scale

    def detach(self) -> None:
        self.layers = []

Use it in YAML:

pipeline:
  probes:
    - name: keyword_probe
      config:
        layers: [0, 1]

Validation catches unregistered names:

safelens validate --config examples/config.yaml