Concepts
Checks
A check asks one thing about a prompt: is this sexual content involving a minor, is it adult content, a real person, someone else's character. Vindex runs four. Each gives a score. Your policy decides what the score means for you.
Score and lines
score is how likely, from 0 to 1, the prompt is what the check looks for. Your policy draws two lines on that scale for each check, and gives each line an action:
- At or over the act line, the check takes the policy's
on_actaction. - At or over the review line, it takes
on_review. - Below both, nothing happens.
All of a policy's checks are scored in one request to the model.
On a decision, each check carries three things:
score: compared with the act line.review_score: compared with the review line. It's the same asscoreon every check exceptminors_sexual, where it can be higher (below).fired: the named signals that crossed their own line, likeadult_nsfworrp_present. Empty when nothing did.
Checks are versioned. A change to a check ships as a new version, and Explain shows which version made each decision.
minors_sexual
Sexual or suggestive content involving anyone who is, or is presented as, under 18.
It looks for an age under 18 written in any form or language, including slang for school pupils; school and childhood settings; child-like body descriptions; age tricks, like an adult age stated next to child cues; and characters who are under 18 in their source material.
A stated adult age can turn a block into a review, never into an allow. If every person is explicitly presented as an adult, the claim can bring score under the act line, so the prompt goes to review instead of being blocked. It never touches review_score, so the prompt can't fall below review.
Youth-coded adults are the usual case: someone stated to be an adult but presented young, in a sexual context. They land in review, and the policy's youth_coded_adult setting chooses whether they're reviewed or blocked.
Its signals in fired: ms_minor_sexualised, ms_canon_minor, adult_claim (every person is stated to be an adult), adult_claim_downgrade (that claim brought the score under the act line), and the floors below.
The floors
Three rules run in code on the prompt text, alongside the model:
- Age: an age under 18 tied to a person ("a 12 year old", in digits or words, in several languages). A number next to "year" alone isn't enough, so "a 5-year plan" doesn't match.
- Slang: a versioned list of words for school pupils and young characters, across languages.
- Canon: a versioned list of characters who are under 18 in their source material.
A floor hit counts only when the model also reads sexual intent at 0.50 or more. A counted hit holds the check at review or above, whatever lines a policy sets. Floors only ever raise a result. They never lower one, and a stated adult age never cancels a hit. In fired they show as floor:age, floor:lexicon and floor:canon, and Explain gives the rule and character offsets, never the matched text.
adult
Nudity or sexual content, whatever the age. Adult platforms tag it; family apps block it. score is the probability the prompt is not safe for work because of nudity or sexual content. Its signal is adult_nsfw.
The adult scale. A policy's adult.max_level (1 to 5) caps how explicit a prompt may be. For now the level is read straight off the score in fixed bands:
| Score | up to 0.20 | up to 0.40 | up to 0.60 | up to 0.80 | above 0.80 |
|---|---|---|---|---|---|
| Level | 1 | 2 | 3 | 4 | 5 |
A prompt above the policy's level takes on_act, even under the act line. At max_level 5 nothing is over the cap, and the adult check may tag or review but never block. A finer five-level score is on the way; max_level stays as it is.
real_person
A specific real, identifiable person: named, described unambiguously, a lookalike of someone named, or a named private individual. Fictional characters and generic people don't count. Its signal is rp_present.
copyrighted_ip
Someone else's creative property: a named character from a film, show, game, comic or book; a brand or logo; "in the style of" a named living artist or studio. A real person's name on its own doesn't count, because that's real_person. Its signal is ip_present.
What each preset does with them
The lines and actions per check are in Policies & presets.