Published
Updated
jevmod scores sexual text at 0.984 AUROC, and ZeroNSFW keeps the pictures local
This topic was created 28 days ago, and the information it contains may have evolved or changed since then.
jevmod's sexual AUROC on OpenAI's moderation eval is 0.984. ZeroNSFW scores pictures on the host and asks Jev only about text.
Omar Hernandez’s jevmod 0.2.1 asks Jev one yes/no question per category and flags adult text at 0.80. BENCHMARK.md, remeasured September 23, 2026, puts the sexual row at AUROC 0.984 on OpenAI’s moderation eval. SeYeD.Dev (@seyed_dev) posted ZeroNSFWBot on September 22. That bot scores pictures on the host. Jev sees text, and only when JEV_API_KEY is set.
The nsfw question asks whether the message has sexual or graphically violent content that does not belong in a general-audience community. The true side names explicit sex, solicitation, sexual content involving minors, and graphic gore. The false side names insults with no sexual content, romance, medical talk, and game violence. A separate minors question covers sexualisation and grooming. The OpenAI row maps the human sexual label onto nsfw, so the question also covers gore that the label does not.
The set is 1,680 messages, 1,158 of them marked clean. The sexual base rate in the calibration table is 0.15. F1 at the shipped 0.80 line is 0.866. The best F1 on this set, chosen after the fact, is 0.877 at 0.85. Llama Guard 3 8B is AUROC 0.843 and F1 0.780. ShieldGemma 2B is 0.968 and 0.800, and 0.851 at 0.90. toxic-bert is 0.876 and 0.549. The September 18 run was 0.982. The September 23 shipped rerun is 0.984. The file says repeat-run noise on AUROC is 0.001. ECE on the sexual row is 0.083 and Brier is 0.049. In the bin above 0.9, 229 messages have mean probability 0.97 and an observed rate of 92%. The harassment bins between 0.5 and 0.85 are the ones the file prints as running high.
The same request also scores harassment at AUROC 0.930, self-harm at 0.992, and minors at 0.978. Minors F1 at 0.70 is 0.551. The file says recall there is 0.45, because OpenAI’s label also covers discussion of child abuse, while the question asks about sexualisation or grooming. The $0.044 per 1,000 messages is that whole request: 2.6 million input tokens on 2,504 messages, batches of 25, list price $0.042 per million input tokens. Amortised latency is 19 ms a message, about 480 ms a request. Twenty-seven messages under eight letters and without a link are never sent, and they count as clean.
A probe of 30 Discord messages, measured September 20, scored each one in several batch positions. For nsfw the noise floor was 0.040 and the largest move was 0.380. None of the 30 crossed 0.80. Spam and scam did cross their shipped lines. The file says AUROC still stands, because the move is small next to the gap between positives and negatives, and a line sitting on the mass does not. We did not rerun the table. GitHub listed 1 star on October 4. The package is MIT, Python 3.10 or newer, and it calls typesafe-sdk.
ZeroNSFWBot is Rust 0.1.0. The repo was created August 7 and pushed September 28. The README says MIT. GitHub’s license field was empty on October 4, and Cargo.toml has no license key. GitHub listed 14 stars that day. Images stay in a local detector. The first model is Marqo/nsfw-image-detection-384, a ViT-tiny of about 18 million parameters, NSFW or SFW. Anything it flags is scored again by giacomoarienti/nsfw-classifier, a ViT-base of about 86 million parameters, with classes drawings, hentai, neutral, porn, and sexy. The bot acts on the second score. porn, hentai, and sexy count. drawings and neutral do not. If the second model is missing, the image produces no signal.
Profile photos use a 40% bar as one signal next to a bio or a channel. The default preset wants an explicit avatar and something being advertised. Group media uses 90%, deletes only, applies to every member, and stays off until an admin turns it on. Clips are sampled across the file, default 5 frames, ceiling 12. The labelled adult folder is empty and gitignored. CI checks that the committed synthetic safe samples stay at or under 50%. The README does not print an accuracy on adult images.
Jev defaults to jev-latest at https://api.typesafe.ai/v1/systemone, with a 5 second timeout. With no key, the text features report unavailable, and unavailable does not count as clean. Profile text, message text, and text read off an avatar are clipped to 600 characters and sent as labelled fields. The profile question is a four-level Score about whether that text is selling adult content. The filter fires at 0.70. A comment in bio_semantic.rs says that bar means the profile promotes something adult, and that suggestive wording alone does not fire. A test in the same file treats 0.50 as not triggered and 0.91 as triggered.
Message text can add a Score for sexual content, among other subjects an admin picks. The panel default for that strength is 70%, and the scan stays off until it is turned on. When a group asks three or more questions, a short Noul runs first and opens the full pass at 0.30. A comment in text.rs says ordinary traffic sat at 0.02 to 0.03 and messages worth acting on sat above 0.91. The comment does not print how many messages that was. We did not run the bot.
A September 28 post from @plattypuus links the jevmod repo and adds no number. jevbench.app lists a content-moderation test and does not print a match count. The toxic-bert row above is the Detoxify classifier in the jevmod file.
This site's reading
Editorial notes evaluating claims against primary sources, contextualizing findings alongside related implementations, and defining technical terms.
Verify
Omar Hernandez, GitHub ohernandezdev. jevmod 0.2.1, MIT, Python 3.10 or newer, created September 17, 2026. The README and BENCHMARK.md were opened October 4. The sexual row is OpenAI's moderation eval, 1,680 messages, human label sexual mapped to nsfw. AUROC 0.984, F1 0.866 at the shipped 0.80 line, best F1 0.877 at 0.85. The September 18 run was 0.982. The file says the September 23 shipped rerun moved less than the 0.001 repeat-run noise. We did not rerun it.
The same file prices the whole request, not the sexual question alone. $0.044 per 1,000 messages, 2.6 million input tokens on 2,504 messages, batches of 25, about 19 ms a message. A probe of 30 Discord messages moved nsfw scores by as much as 0.380, and none of those 30 crossed 0.80. GitHub listed 1 star on October 4.
SeYeD.Dev, @seyed_dev, September 22, 2026, 16:31 UTC, status 2102435590721434021. The post links https://github.com/mohamadkhoshnava/ZeroNSFWBot and says Jev handles backend logic. The README, text.rs, profile.rs, bio_semantic.rs, and config.rs were opened October 4. Images stay on a local detector. Jev is jev-latest at https://api.typesafe.ai/v1/systemone when JEV_API_KEY is set. The README says MIT. GitHub's license field was empty, and Cargo.toml has no license key. The adult image folder is empty. We did not run the bot. GitHub listed 14 stars on October 4.
Compare
On the sexual row, Llama Guard 3 8B is AUROC 0.843 and F1 0.780. ShieldGemma 2B is 0.968 and 0.800, best F1 0.851 at 0.90. toxic-bert is 0.876 and 0.549. Those three ran locally on an RTX 5080. jevmod called the TypeSafe API. The file says Llama Guard's per-category probability is the unsafe score when it named the category, and 0 otherwise.
ZeroNSFW prints no labelled accuracy on adult images. Its CI check is that synthetic safe samples stay at or under 50%. jevbench.app lists a content-moderation test and does not print a match count. That test is a different page from this table. The toxic-bert row is the Detoxify classifier in BENCHMARK.md.
Terms
- jevmod
- Omar Hernandez's MIT package, version 0.2.1. One Noul per moderation category. Adult text flags at 0.80.
- 0.984
- jevmod's AUROC on the sexual labels in OpenAI's moderation eval, 1,680 messages, remeasured September 23, 2026.
- ZeroNSFWBot
- SeYeD.Dev's Telegram bot. Pictures are scored on the host. Jev reads clipped profile and message text when a key is set.