Cheap layers first, expensive layers only when needed.
Most mail is easy. PDMSC settles it with the cheapest model that is sure, and spends more effort only on the messages that earn it.
01The pipeline
- Receiverspamd hands the message to PDMSC
PDMSC is an
external_servicesbackend over HTTP, so an existing rspamd deployment needs no replacement. - CascadeEach layer decides or defers
A layer that is confident returns a verdict and the rest never run. A layer that is not defers to the next. Peer groups require agreement before a single specialist can act alone.
- VerdictSpam, ham, or undecided
Undecided is returned for mail that cannot be scored fairly, such as no detectable language or too little text. The surrounding rspamd signals then decide.
- IntentA local model reads the residue
For the cases the cascade will not call, a local language model reads what the message is trying to get the recipient to do. It runs on the same host; nothing goes to an external API.
02Deployment footprint
Figures are for the classifier backend, English set. Memory and latency are from the production Linux deployment; the same source builds and runs on every platform listed.
1.37 GB resident
English set, classifier daemon.
557 MB
English set, model files.
BSD, Linux, Solaris 10
FreeBSD, OpenBSD, BSDSUniX, Linux and Solaris 10.
AMD64 to SPARC64
AMD64, Intel, ARM64 and SPARC64; bare metal, VMs, and logical domains.
rspamd over HTTP
Observe-only mode scores live mail at zero weight first.
None for classification
Redis is used only to share URL verdicts across nodes.
03Operations
- Models are versioned trees with one-step rollback; systemd supervises on Linux.
- A hot reload on SIGHUP refuses a bad model list and keeps serving the old one.
- Nothing about a message leaves the host: no vendor copy of bodies and no click telemetry.
Ask for the numbers on your own mail.
Every figure here is reproducible on request.