# System one SPAM classifier
Wednesday, 7. October 2026


After Jev, more decision models ("system one models") got released 
([Cloudflare](https://blog.cloudflare.com/clef-decision-models/),
[Strands](https://strandsagents.com/blog/introducing-strands-decider/)).

Strands decider is an open model, based on Qwen3.5-2B, and runs locally on my Apple M2 chip. For this test,
I loaded a spam dataset with 1396 actual spam messages and
250 ham messages into the decision model to see if a simple approach leads to good spam classification.

The email itself is the "state". The question I ask is "Is this email spam?", requesting a "noul", which
is a value between 0 (no) and 1 (yes).

First of all, it is slow. The 1646 test messages take 184 minutes (about 3h) to process, with an average of
about 7 seconds per message. For larger email systems, spam classification needs to happen much faster.
Decision model's strength is speed compared to classical generative LLMs so that
I expect providers will tune their approaches in that direction.
Furthermore, an M2 chip does not compare to specialized inference hardware. In the
space of self-hosted and sovereign email infrastructure, we should consider even less performant hardware
than M2 chips though.

The results are far from production ready: 68.7% of spam got correctly detected, and 75.6% of ham was 
correctly kept. The classification of the decision model itself worked well though: A "noul" of 0.5 brings
already the best balance in this classification, so the "noul" value is optimal in that regard.

I think the future of spam classification will be a mix of authenticated emails (DKIM2) and manual sorting.
Unless we reach 100% accuracy in automatic spam detection, we still have to manually filter through our
Inbox and Spam/Junk folders.

That's why I built [Postern](https://code.raphting.dev/postern.git), which per default stores all incoming
emails in a Gatekeeper folder. Move a message from there to
Spam, and the sender will always end up in your Spam. Move a message from there anywhere else, and the sender
will end up in your Inbox the next time Postern sees it. This is all build around the idea of a flexible
policy engine at Postern's core.

If we get better results with decision model based spam classification, the policy engine allows to
quickly plug this in via the HTTP or exec module.


By Raphael Sprenger
