This grammY bot makes a Jev decision on eligible Telegram group messages, then deletes only messages its policy marks as spam. I inspected the README and implementation at commit f905e31; I did not run the bot, call Jev or audit its security.
The action boundary
src/spam.tssends the current message, bounded recent messages and named yes/no questions to/v1/systemone. The parser checks that every expected answer is a finite probability and compares the strongest non-media signal with a configurable deletion threshold (default 0.81).src/bot.tsseparately selects earlier messages only when Jev marks them as part of a contiguous campaign. A media-only verdict deletes only the current media message; a classifier error leaves the message alone.- The default model is pinned to
jev-1.13.0. That avoids an unreviewed model change, not a wrong verdict. The threshold is a policy setting, not a measured 81% correctness guarantee.
Context, alternatives and privacy
- The implementation distinguishes the sender’s own profile from a quoted or forwarded author’s text. It tries to keep safety warnings and moderator reports from being mistaken for the advertisements they quote.
- An optional second
/v1/systemone-compatible model runs in shadow mode: it logs its verdict for comparison but cannot delete a message. The README describes switching the primary classifier to a self-hosted endpoint only after retuning the threshold. - Normal logs omit message/profile text, but optional
TRAINING_CAPTURE=truedeliberately persists request text and answers for distillation. That changes the data-retention risk substantially.
The repo includes mocked handler tests and opt-in live-model tests; the mocked outcomes cannot establish real-world spam recall or false-delete rates. Before enabling deletion in a live group, evaluate a human-labeled local sample, especially legitimate short replies and quoted spam. Typed probabilities make the policy inspectable, not automatically correct.