VindexDocs

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_act action.
  • 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 as score on every check except minors_sexual, where it can be higher (below).
  • fired: the named signals that crossed their own line, like adult_nsfw or rp_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:

Scoreup to 0.20up to 0.40up to 0.60up to 0.80above 0.80
Level12345

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.