"Hi, I'm Dana Ruiz, call me at 415 555 0134 or dana@example.com."
"Hi, I'm [NAME], call me at [PHONE] or [EMAIL]."
Where personal data redaction usually starts
Most teams redact with patterns for emails and phone numbers, then add a frontier model for names and addresses that patterns miss. Patterns break on new formats, and the model call costs the same on every line of every transcript. A Facet model applies your rules to every text in one call.
How it works
- Describe the task. Paste the prompt you use today, or write it plainly: “Replace names, emails, phone numbers and street addresses with [NAME], [EMAIL], [PHONE] and [ADDRESS]. Keep company and product names.” Add a few real examples if you have them.
- Agree on what good looks like. Facet writes plain statements of a good answer, like “an email address never survives, even when it is written out as dana at example dot com”, each with examples. Edit any that are off.
- Create, then correct. Facet builds the model on its own, in the background, and tests it against every statement before it goes live. When a detail slips through, say what should change. Facet quotes the fix before it spends anything.
Two ways to use it
- From your agent: connect Claude, Cursor, ChatGPT, Codex or VS Code to Facet, then paste:
Use Facet to build a model that replaces names, emails, phone numbers and street
addresses in support transcripts with placeholders like [NAME]. Here are ten real
transcripts: ... Show me the draft and the price before you approve anything.
- In your code: keep your OpenAI SDK and change two lines, the address and the model name.
import os
from openai import OpenAI
client = OpenAI(base_url=os.environ["FACET_BASE_URL"], api_key=os.environ["FACET_API_KEY"])
reply = client.chat.completions.create(model="redact-pii", messages=[{"role": "user", "content": transcript}])
Why Facet for personal data redaction
- Every rule, every line. Your masking rules hold the same way on the millionth line as on the first.
- Text stays out of logs. Facet stores call details such as token counts, never the text your app sends.
- Checked before every update. An update goes live only if it keeps every statement the live version passes, and any update rolls back in one step.
- Yours. Export it any time, free, and run it wherever you like.
Questions
Can I choose which details get masked?
Yes. You list them in plain words, such as "mask names and phone numbers but keep city names", and Facet tests every version of your model against that list before it goes live.
Does Facet store the text I send to redact?
No. Facet keeps only call details such as which version answered and token counts. Our GPU provider holds each call for up to 7 days to run it, then deletes it.
Can it keep the same placeholder for the same person?
Describe it that way, such as "the first person named is [PERSON_1], the second [PERSON_2]", with a few examples, and Facet makes it a rule every version is tested on.
Does it work on PDFs or audio?
Facet reads text today. Turn a PDF or a recording into text first, then send the text to your model.