perfecXion/intentguard-legal
IntentGuard — Legal & Compliance
    
Production-ready vertical intent classifier for LLM chatbot guardrails. Classifies user messages as `allow`, `deny`, or `abstain` to keep legal chatbots on-topic and within professional boundaries.
Research Article | perfecXion.ai | Finance Model | Healthcare Model | Legal Model
IntentGuard Model Family
Overview
The Problem
Legal chatbots carry significant liability risk — unauthorized practice of law, confidentiality breaches, and jurisdictional issues demand strict topic boundaries. An LLM that happily answers questions about celebrity gossip or sports while branded as a legal assistant undermines professional credibility and trust.
The Solution
IntentGuard uses a tiny DeBERTa-v3-xsmall model (22M parameters, 2.5MB quantized) to classify user intent in <30ms on CPU with three-way classification:
- Allow — On-topic legal query, pass to the LLM
- Deny — Off-topic, block with a polite redirect
- Abstain — Ambiguous, escalate to secondary classifier or human review
Performance
Model Details
Core Topics (Allow)
Contracts, litigation, employment law, intellectual property, criminal law, family law, real estate law, immigration, corporate law, compliance, privacy law, civil rights, estate planning, bankruptcy
Hard Exclusions (Deny)
Sports, entertainment, cooking, gaming, celebrity gossip, fashion, travel/leisure, fiction writing, relationship advice
Usage
Python (ONNX Runtime)
import onnxruntime as ort
from transformers import AutoTokenizer
import numpy as np
tokenizer = AutoTokenizer.from_pretrained("perfecXion/intentguard-legal")
session = ort.InferenceSession("model.onnx")
text = "What are the requirements for filing a patent application?"
inputs = tokenizer(text, return_tensors="np", max_length=128, truncation=True, padding="max_length")
logits = session.run(None, {
"input_ids": inputs["input_ids"],
"attention_mask": inputs["attention_mask"]
})[0]
labels = ["allow", "deny", "abstain"]
prediction = labels[np.argmax(logits)]
confidence = float(np.max(np.exp(logits) / np.sum(np.exp(logits))))
print(f"Intent: {prediction} (confidence: {confidence:.3f})")
# Output: Intent: allow (confidence: 0.996)Docker
docker pull ghcr.io/perfecxion/intentguard:legal-1.0
docker run -p 8080:8080 ghcr.io/perfecxion/intentguard:legal-1.0
curl -X POST http://localhost:8080/v1/classify \
-H "Content-Type: application/json" \
-d '{"messages": [{"role": "user", "content": "What are my rights as a tenant?"}]}'pip
pip install intentguard
from intentguard import IntentGuard
guard = IntentGuard.load("legal")
result = guard.classify("What are the requirements for filing a patent?")
print(result) # Intent(label='allow', confidence=0.996)Example Classifications
Citation
@misc{thornton2025intentguard,
title={IntentGuard: A Production-Grade Vertical Intent Classifier for LLM Guardrails},
author={Thornton, Scott},
year={2025},
publisher={perfecXion.ai},
url={https://perfecxion.ai/articles/intentguard-vertical-intent-classifier-llm-guardrails.html},
note={Model: https://huggingface.co/perfecXion/intentguard-legal}
}Quality Metrics
License
Apache 2.0
Links
- Research Article: IntentGuard: A Production-Grade Vertical Intent Classifier
- Publisher: perfecXion.ai
- Finance Model: perfecXion/intentguard-finance
- Healthcare Model: perfecXion/intentguard-healthcare
- Docker Image:
ghcr.io/perfecxion/intentguard:legal-1.0
