Turn every resume into clean fields

Name the fields your hiring tool needs. Facet builds a model that reads the text of each resume and returns those fields in your shape, and checks it against your rules before any update goes live.

Resume text

Priya Shah. Senior Engineer, Northwind, 2021 to now. Engineer, Contoso, 2018 to 2021. Go, Postgres, Kafka.

{ "name": "Priya Shah", "roles": 2, "current": "Northwind", "skills": ["Go", "Postgres", "Kafka"] }

Where resume parsing usually starts

Most teams parse resumes with a template parser that breaks on unusual layouts, or a frontier model asked for JSON on every upload. The parser misses fields, and the model costs too much per resume at scale. A Facet model returns your fields, in your shape, on every resume.

How it works

  1. Describe the task. Paste the prompt you use today, or write it plainly: “From each resume’s text, return name, each role with company and dates, and skills as a list.” Add a few real examples if you have them.
  2. Agree on what good looks like. Facet writes plain statements of a good answer, like “a current role has no end date, and is never marked as ended”, each with examples. Edit any that are off.
  3. 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 field comes back wrong, say what it should have been. Facet quotes the fix before it spends anything.

Two ways to use it

Use Facet to build a model that reads resume text and returns name, each role
with company and dates, and skills as JSON. Here are fifteen real resumes as text:
... Show me the draft and the price before you approve anything.
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="resume-fields", messages=[{"role": "user", "content": resume_text}])

Why Facet for resume parsing

Questions

Can Facet read a resume PDF?

Facet reads text today. Turn the PDF into text with any text extraction tool first, then send the text to your model.

Do resumes I send get stored?

Facet keeps only call details such as token counts, never the text. Our GPU provider holds each call for up to 7 days to run it, then deletes it. Resumes you add as examples stay in your workspace until you delete them.

Can it leave out details we must not use in hiring?

Yes. Make it a rule, such as "never return age, photo or marital status", and Facet tests every version against it before it goes live.