Which mode should I use: fast, balanced or thorough? Balanced, the default, unless a text must never reach a model; then fast for one request or an Edge-only project for all of them. Fast answers with the rules alone; balanced also asks the model about every text the rules do not block outright; thorough asks it about every text. On the held-back judged set, balanced caught 89.0% of 2,672 toxic texts and flagged 7.0% of 3,528 clean ones; the rules alone caught 53.4%. Every mode costs the same per check.
What each mode does#
| Mode | Who answers | Text sent to the model | Toxic text caught | Time on the bench |
|---|---|---|---|---|
fast | The rules alone, at the edge | Never | 53.4% of toxic text | under 1 ms typical, 3 ms at the 99th percentile |
balanced | The rules, then the model on every text they do not block outright | Every text but a certain block: on mostly clean traffic, nearly every check | 89.0% of toxic text | 310 ms typical, 546 ms at the 99th percentile |
thorough | The rules, then the model on every text | Every text | Not measured | Not measured |
Set it per request with mode; without it, a check runs in balanced. The response says who answered in engine.route (rules, model or cache) and in the Unprofane-Route header. A check costs the same in every mode.
{ "text": "…", "context": "comment", "mode": "fast" }What each was measured to catch#
On the same held-back judged texts and the standard policy, the model is what reads rudeness, insults made of ordinary words, threats that name no listed word and abuse quoted or argued against. The rules alone catch less and flag less clean text.
Thorough differs from balanced only on the texts the rules block outright, which it asks the model about as well, and it has not been measured on the judged sets. The head-to-head has fast and balanced on usernames and disguised spellings as well.
Time#
The times above were measured on the bench, not at the edge, on the judged development set on : the rules in Node for fast, and for balanced the rules in Node plus the model's recorded latency on the 91% of rows it is asked about. In production the model has 800 ms; past that, or when it fails, the check returns the rules' answer with engine.degraded: true, never an error, and a certain block is never turned into an allow.
Privacy#
Fast keeps the text on the rules, so it never leaves Cloudflare and is never kept. Balanced and thorough send the text the model reads to the model provider, with the questions and nothing about who sent it, and that text is kept for 90 days to improve the engine, with no account, key or sender's address, then deleted. Sexual content involving a minor and the writer’s own self-harm are never kept, and neither is a text the model did not read. Growth, Scale and Enterprise can turn keeping off, project by project. No log, trace, analytics row or cache holds a text. To keep every text off the model for a whole project, whatever a request asks, use an Edge-only project: it ignores mode, never constructs the model client and keeps no text. Privacy for developers has the rest.
Before you choose#
- Rudeness (the
rudecategory) is read only by the model: in fast mode it is never scored. See policies. - The judged sets sample hard clean text on purpose, so the share of clean text flagged on your traffic may be lower or higher. Run a sample of texts you have already decided through both modes with a test key before you choose.
- Fast mode still reads the disguises and the word lists of every covered language; what it gives up is the reading of text with no listed word.
Next#
- Try both on your own text in the playground, then send a first check with the quickstart.
- What each number means and where it comes from: what the numbers mean.