CoolFace
Modelpublic

ganmoor-ai-labs/sms-shield

sourceHugging Faceapache-2.0updated 13d agoView on Hugging Face
3likes177downloads
Model Card

SMS-Shield — Indian SMS scam & inbox classifier (4B)

SMS-Shield reads one SMS (sender header + body) and returns a structured safety verdict as JSON. Built for Indian SMS traffic in English, Hindi (Devanagari), and romanized Hinglish, including DLT sender-header reasoning (the same bank alert is safe from JD-SBIINB and dangerous from a bare 10-digit mobile). Trained entirely on-device on an NVIDIA DGX Spark (GB10, 128 GB unified memory).

Two model variants in this repo

FileModelSizeUse case
sms-shield-q4_k_m.ggufSMS-Shield 4B (Qwen3-4B-Instruct LoRA)2.4 GBMaximum accuracy: 99.2% verdict acc, servers/desktops
sms-shield-mini-q4_k_m.ggufSMS-Shield Mini 1.7B (Qwen3-1.7B LoRA)1.2 GBOn-device/mobile: 99.0% verdict acc, 100% dangerous recall, 0 OTP false-flags, 3-4x faster
adapter_model.safetensors4B LoRA adapter127 MBUse with Qwen/Qwen3-4B-Instruct-2507 via PEFT

The Mini was trained on the same verified dataset plus a targeted cashback-boundary booster, and passes the same release gates (zero genuine OTPs/bank alerts flagged).

Output contract

Input:
sender: 9182736450
message: Dear customer aapka SBI account aaj band ho jayega. KYC turant update karein: sbi-kyc-renew.top/verify

Output:
{"verdict": "dangerous", "category": "scam", "scam_type": "kyc_fraud", "risk": 80,
 "red_flags": ["account closure", "urgent update", "suspicious link"],
 "explanation": "Yeh ek fraud message hai. SBI kabhi bhi SMS se aapka account band karne ki dhamki nahi deta. Link par click na karein."}
  • —verdict: safe | suspicious | dangerous (risk bands 0-39 / 40-69 / 70-100)
  • —category: otp | banking | delivery | bill_utility | govt | promo | personal | scam
  • —scam_type: 15 fraud patterns (kycfraud, digitalarrest, upifraud, jobscam, fakedelivery, investmentscam, lotteryprize, utilityscam, loanapp, phishinggeneric, refundcashback, impersonation, apkmalware, sextortionthreat, otherscam) — null unless flagged
  • —explanation: one sentence in the language/script of the input message

Results (held-out test set, n=1,390 — included in this repo)

MetricSMS-Shield 4BGemma3-27B zero-shot (same prompt)
Verdict accuracy99.2%49.2%
— English / Hindi / Hinglish / Mixed99.2 / 99.8 / 98.8 / 98.953.2 / 26.6 / — / 27.3
Category accuracy99.1%74.0%
Dangerous recall99.5%87.2%
Safe precision100%100%*
Genuine OTP/bank alerts misflagged as scam0 / 1,39022
JSON parse failures00

*The baseline almost never predicts safe — it over-flags legitimate traffic, including 22 genuine OTPs/bank alerts. Over-flagging is the deployment killer for SMS safety apps; SMS-Shield was explicitly trained against it with ~40% hard negatives (scary-but-legitimate messages).

Training

  • —Base: Qwen3-4B-Instruct-2507, LoRA (r=16, bf16), 3 epochs + 1 calibration epoch
  • —Data: 12.5k synthetic Indian SMS, two-teacher pipeline run fully locally: gemma3:27b generated labeled candidates → 20+ deterministic validators (script/language checks, risk-band consistency, sender-format, fuzzy dedup) → gpt-oss-safeguard:120b independently re-judged every sample blind; label disagreements dropped (~24% rejection). Includes counterfactual sender-flip pairs and a deliberately generated ambiguous "suspicious" tier. The training corpus is not published; the full 1,390-row eval set is.

Known limitations

  • —Sender-counterfactual calibration: on paired sender-flip tests, 100% of flipped messages are flagged (none pass as safe), but 18% land one severity band off (suspicious vs dangerous) against the reference labels.
  • —Languages: EN/HI/Hinglish only in v1. Kannada, Tamil, Telugu, Bengali, Marathi planned.
  • —Single-message classification; no thread context in v1.
  • —Trained on synthetic data; real-world distribution shift is expected. Evaluate on your own traffic before relying on it.
  • —This model assists judgment; it is not a guarantee. Never treat safe as proof of legitimacy for financial actions.

Usage

Ollama:

ollama run santosh07401/sms-shield

Transformers (adapter in this repo):

python
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
tok = AutoTokenizer.from_pretrained("Qwen/Qwen3-4B-Instruct-2507")
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-4B-Instruct-2507", dtype="bfloat16", device_map="auto")
model = PeftModel.from_pretrained(model, "ganmoor-ai-labs/sms-shield")

GGUF: sms-shield-q4_k_m.gguf (2.4 GB) — llama.cpp/Ollama ready; use a ChatML template (no <think> block).

Intended use

Defensive scam protection for Indian mobile users: on-device SMS filtering, inbox categorization, and fraud warnings. Not for generating scam content.