Product
Parallel Signals, Deterministic Policy: Vettly Now Runs on Jev
Content moderation APIs typically work like this: you send content, one model scores it, you get a verdict. The score is a black box — you don't see the reasoning, you can't ask follow-up questions, and the policy logic is whatever the vendor decided.
We just shipped a different architecture. The vettly.dev playground now runs on Jev — TypeSafe's System One decision model that launched this week — and the difference is structural, not just a model swap.
One call, eleven judgments
Jev answers many typed questions against a state in a single request. Instead of asking "is this bad?", Vettly asks eleven questions in parallel — nine categories (hate speech, harassment, violence, self-harm, sexual content, spam, profanity, scams, illegal activity) plus named context signals like minor_context and sexual_solicitation — and gets back a calibrated probability for each.
{"provider": "jev","latency": 148,"action": "flag","signals": {"harassment": 0.96,"hate_speech": 0.07,"spam": 0.03,"scam": 0.01,"self_harm": 0.03,"sexual": 0.01,"violence": 0.03,"profanity": 0.02,"illegal": 0.01,"minor_context": 0.01,"sexual_solicitation": 0.02}}
Every signal ships in the API response. That's the audit story: a decision isn't just BLOCK — it's the complete set of probabilities that produced it, pinned to the policy version that evaluated them.
Your policy is the decision layer
Jev provides probabilistic judgment. Vettly's policy engine turns it into deterministic enforcement. Rules now support compound conditions and confidence bands:
rules:- category: sexualthreshold: 0.8provider: jevaction: blockconditions:- signal: sexual_solicitationgte: 0.6- signal: minor_contextgte: 0.5bands:- gte: 0.6action: flag
Compound conditions let a rule fire only when multiple signals agree — sexual > .8 AND sexual_solicitation > .6 AND minor_context > .5. Jev emits named signals beyond the fixed categories on every call, so rules can express intent like "solicitation in a minor context" instead of one generic score. Confidence bands route uncertain scores to weaker actions instead of forcing a binary call: above .8 blocks, .6–.8 flags for review.
Try it without writing code
The playground now shows the signal bars live — edit the text, run Analyze, and watch all eleven probabilities come back in ~150ms. The policy.yaml in the middle panel is editable too: change a threshold, hit "Test policy against live signals," and the response re-evaluates through the dry-run endpoint without another model call.
What this costs
Measured: ~$0.00004 per check for all eleven signals, ~150–290ms end to end. Jev is opt-in per rule — existing policies are untouched until you choose it, and it's available on Growth tier and above for text content.
The free tier (15,000 decisions/month, no credit card) is enough to try the whole flow. Get a key from the dashboard, point your policy at provider: jev, and dry-run it first.
This is the architecture we think moderation should be: fast probabilistic judgment underneath, deterministic policy on top, humans only for the genuinely ambiguous cases.
Frequently asked questions
What is Jev?
Jev is TypeSafe AI's System One model — a decision model that answers many typed questions (probabilities, scores, choices) against structured state in a single call, instead of generating prose. It launched in early access in September 2026.
Does switching providers change my existing policies?
No. Providers are opt-in per rule. Existing policies keep their current behavior until a rule explicitly sets provider: jev. You can test with /v1/check/dry-run before changing anything.
How much does a Jev-powered decision cost?
Measured at roughly $0.00004 per check — eleven signals in one call at ~150–300ms end to end. Vettly's free tier includes 15,000 decisions per month.
What happens if Jev is unavailable?
Policies can declare a fallback provider. On timeout or provider error, Vettly falls back automatically — including to the fully deterministic fallback provider.