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.ts sends 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.ts separately 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=true deliberately 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.