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
- 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 thanmin-message-length, are skipped. - It joins a batch. Up to 8 messages go to Jev in one request, waiting at most 150 ms for others to join.
- Jev scores it. The answer is a probability for every category you
defined, plus
safe, which yoursafe-descriptiondescribes. - 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.