Documentation menu

Moderation

How it works

Jev scores each message against your categories, and your thresholds decide.

Jev doesn’t write text and it doesn’t decide. For each chat message it answers one question: how likely is this to be each of your categories, or ordinary chat? jev-guard turns those numbers into actions, in code, with your settings.

One message, start to finish

  1. A player chats. jev-guard picks the message up next to the game’s own chat handling, off the main thread. Players with jevguard.bypass, and messages shorter than min-message-length, are skipped.
  2. It joins a batch. Up to 8 messages go to Jev in one request, waiting at most 150 ms for others to join.
  3. Jev scores it. The answer is a probability for every category you defined, plus safe, which your safe-description describes.
  4. Your rules decide. jev-guard takes the most likely of your categories:
Its probability Outcome
At or above that category’s threshold Flag: the category’s actions run.
At or above review-threshold (0.5) Review: staff get an alert, nothing else happens. Not in shadow mode.
Below that Allow: nothing happens.

What a flag does depends on the mode: logged only, acted on after the message appears, or acted on before it does.

Speed

A check takes about 200 ms with TypeSafe directly. Batching can add up to 150 ms, and Cloudflare’s AI Gateway can add more. Only hold mode makes players wait, and never longer than hold.timeout-ms (1.5 seconds).

What it can’t do

It checks each message on its own, so harassment spread over several messages isn’t seen as one. See limitations.

Something wrong or missing on this page?Open an issue on GitHub.