Skip to content

Border detector set

29 detectors, and what each one costs

What each one looks for, which side it runs on, what a deployment has to provide for it, and what it costs. The few that are catalogued but not runnable raise at policy load rather than letting text through as if it had been checked.

28 of 29run after an install today
26need nothing beyond a CPU
28 msp95 for an encoder pass, 87 tokens on one thread; rules cost under 1 ms
tiersT0T1T2T3one crossingone verdict

The set

29 of 29
SelectDetectorTierWhat it doesNeedsBacked byMean F1CostStatus
disclosureoutputruns todayT0Reports whether an AI disclosure is present in the output, in 26 languages, and records the affirmative as well as the absence.CPUrulenot a classifier0.038 msmeasuredRuns today
invisible_textinput, outputruns todayT0Characters that are in the text but not on the screen: bidirectional controls, tag characters used to smuggle instructions, zero-width characters used to evade filters.CPUrulenot a classifier0.038 msmeasuredRuns today
secretsinputruns todayT0Credentials in text on its way to the model: named key formats, plus a deliberately conservative entropy rule.CPUrulenot a classifier0.048 msmeasuredRuns today
banned_termsinput, outputruns todayT1Terms the deploying organisation has decided must not appear, matched correctly in 26 languages. The list is policy; none ships.CPUrulenot a classifier0.168 msmeasuredRuns today
code_presentinput, outputruns todayT1Source code in text that should be prose, reported as one finding per shape found: a fence, a shebang, a definition, an import, a script tag, a shell invocation. Each carries its own confidence so a policy can act on a fenced block without acting on a line that merely ends in a brace.CPUrulenot a classifier0.009 msmeasuredRuns today
gibberishinputruns todayT1Input that is not meaningful text.CPUclassifier0.96627.528 msmeasuredRuns today
internal_domainsoutputruns todayT1Internal hostnames appearing in an answer meant for someone outside, in both their Unicode and punycode spellings.CPUrulenot a classifier0.234 msmeasuredRuns today
json_schemaoutputruns today · needs dependencyT1Output that does not satisfy a JSON Schema the policy carries. Point it at the OpenAPI meta-schema and it validates an OpenAPI document.dependencyrulenot a classifier0.001 msmeasuredRuns today
language_idinput, outputruns todayT1Which of the 26 supported languages the text is in, whether that is one the policy permits, and whether an answer is in the same language as the prompt. Reports uncertain rather than guessing on short or mixed text.CPUrulenot a classifier0.362 msmeasuredRuns today
markup_injectioninput, outputruns todayT1Markup in the text that a browser would execute rather than display, found through case folding, entity decoding and compatibility folding.CPUrulenot a classifier0.239 msmeasuredRuns today
output_formatoutputruns todayT1Shape assertions a policy states: JSON, HTML, URL presence, length in graphemes, word count, case, choices, ranges, a regex, reading time.CPUrulenot a classifier0.001 msmeasuredRuns today
output_leakageoutputruns todayT1Personal data in the output that the user did not supply, which is the narrower and more useful question than whether any is present.CPUnerper entity27.991 msmeasuredRuns today
piiinput, outputruns todayT1Personal data in input or output, as named entity spans with checksum validation where the identifier has one.CPUnerper entity27.636 msmeasuredRuns today
postal_codeoutputruns todayT1Postal codes that cannot exist in the countries the product serves: the wrong shape, or outside a published province or department range.CPUrulenot a classifier0.002 msmeasuredRuns today
repetitionoutputruns todayT1Sentences the answer says twice, compared over folded text so a change of case or diacritic spelling does not hide a repeat.CPUrulenot a classifier0.497 msmeasuredRuns today
sql_injectionoutputruns today · needs dependencyT1Generated SQL that does more than the product asked for: a second statement, a forbidden statement kind, a tautology, an unexpected UNION.dependencyrulenot a classifier0.238 msmeasuredRuns today
summary_supportoutputruns todayT1Whether each sentence of a summary appears in the source it summarises, by string overlap rather than by judgement. Useful for an extractive summary, and not a groundedness check: it says so in its own docstring.CPUrulenot a classifier0.921 msmeasuredRuns today
system_prompt_leakageoutputruns todayT1Whether the answer gave away the instructions the model was operating under, by containment against the system prompt and by phrase match in 26 languages.CPUrulenot a classifier5 msbudgetRuns today
token_limitinput, outputruns todayT1Text longer than the token budget of the model it is going to, counted with a tokenizer the policy names and pins: a local file, whose hash is reported as the revision, or an id already carrying a commit. A bare repo id is refused, because an unpinned count cannot be reproduced.CPUrulenot a classifier5 msbudgetRuns today
biasoutputruns todayT2Output carrying bias related to a protected characteristic.CPUclassifier0.97721.327 msmeasuredRuns today
injectioninputruns todayT2Attempts to talk the model out of its instructions.CPUclassifier0.97027.622 msmeasuredRuns today
moderationinput, outputtrainedT2Thirteen hazard categories in one pass, from violent crime to election misinformation. Replaces the capability Llama Guard and ShieldGemma provide, with weights this project can ship.CPUclassifierno corpus yet150 msbudgettrained
nsfwinput, outputruns todayT2Sexual or otherwise not-safe-for-work content.CPUclassifier0.93427.544 msmeasuredRuns today
politenessoutputruns todayT2Whether the tone of an answer is acceptable.CPUclassifier0.96230.319 msmeasuredRuns today
regulated_adviceoutputruns todayT2Output that reads as regulated financial, legal or medical advice.CPUclassifier0.99530.43 msmeasuredRuns today
toxicityinput, outputruns todayT2Abusive or hateful language, in input or output.CPUclassifier0.99227.224 msmeasuredRuns today
groundednessoutputruns todayT3Whether the claims in an answer are supported by the sources it was given.CPUclassifierno corpus yet300 msbudgetRuns today
topic_scopeinputruns todayT3Whether a request is inside the subject matter the product covers.CPUclassifierno corpus yet46.298 msmeasuredRuns today
url_reachabilityoutputruns today · needs networkT3Whether links in the answer resolve to something that answers, with a deadline and a refusal to request private addresses.networkrulenot a classifier3000 msbudgetRuns today

What a detector asks of your deployment

Three of 29 ask for something. Each declares it in the catalogue, so a policy that switches one on returns a note saying so: a caller finds out when they enable it, not when it fails.

json_schemadependency

Output that does not satisfy a JSON Schema the policy carries. Point it at the OpenAPI meta-schema and it validates an OpenAPI document.

sql_injectiondependency

Generated SQL that does more than the product asked for: a second statement, a forbidden statement kind, a tautology, an unexpected UNION.

url_reachabilitynetwork

Whether links in the answer resolve to something that answers, with a deadline and a refusal to request private addresses.

Off unless a policy turns it on. It reaches another machine, so their outage becomes yours.

Why tiers, and what they are not

A tier says when a detector runs, not that it is cheap. Every model-backed detector shares one encoder base, so at the same input length they cost the same: about 1.663 ms per token on one thread. Keeping that off the common path is the whole job.

T03

Always runs. Cannot be disabled.

T116

Runs on the standard path.

T27

Runs on the standard path. Can be disabled by policy.

T33

Runs only when a lower tier flags, or when the policy asks for it.

Per-language accuracy for the 7 that have it, with the corpus provenance and the languages that fail.