1. Data source
  2. Decision schema
  3. Model inference
  4. Structured result
2 Decision schema 3 typed questions
  • matchchoicesame_entitydifferent_entityreview
  • confidencescorelowmediumhigh
  • needs_humannoulprobability 0–1

3 Model inference typesafe/jev-1.13

Waiting for a run.

4 Structured result

Run the demo to see the JSON answers, the highlighted pick and the final action.

Call Jev yourselfSame data and schema, straight to Flatkey. Set FLATKEY_API_KEY and run.
curl -sS https://router.flatkey.ai/api/alpha/decisions \
  -H "Authorization: Bearer $FLATKEY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "typesafe/jev-1.13",
  "state": "Record A (CRM contact):\nname: Jordan Lee\nemail: j.lee@acmecorp.io\ncompany: Acme Corp\ncity: Austin, TX\nrole: Account Executive\n\nRecord B (CRM contact):\nname: Jordan Lee\nemail: jordan.lee@acme-holdings.com\ncompany: Acme Holdings LLC\ncity: Seattle, WA\nrole: Software Engineer\nphone: +1-206-555-0142\n\nBlocking key: last_name=Lee + first_token=Jordan\nTask: match (same_entity / different_entity / review), confidence, needs_human.",
  "questions": {
    "match": {
      "type": "choice",
      "instructions": "Given these two records (or mentions), do they refer to the same real-world entity? Prefer different_entity when evidence conflicts; use review when key fields are missing or ambiguous.",
      "criteria": {
        "same_entity": "Strong evidence they are the same person, company, or object—compatible identifiers, addresses, or roles with no hard conflicts",
        "different_entity": "Hard conflicts (different IDs, incompatible dates/locations, distinct roles) or only superficial name overlap—keep them separate",
        "review": "Ambiguous: sparse fields, nickname/abbreviation risk, or conflicting soft signals that a human or richer context should resolve"
      }
    },
    "confidence": {
      "type": "score",
      "instructions": "How confident are you in the match decision above, based only on the fields provided.",
      "criteria": [
        "low",
        "medium",
        "high"
      ]
    },
    "needs_human": {
      "type": "noul",
      "instructions": "A human reviewer should decide before any merge, link, or delete—because evidence is thin, conflicting, or the write is hard to undo."
    }
  }
}'

No Flatkey key yet? Get one for Jev 1.13 →

Run with real Jev

Sign in and connect a key

  1. Sign in with Google.
  2. Connect your Flatkey or OpenRouter key on the next screen. Get a Flatkey key for Jev 1.13.
  3. Come straight back here and press Run again.

This site is for researching, sharing and cataloguing Jev use cases. Your key is only there to make trying Jev convenient: it is stored encrypted, used only for runs you trigger, never used for anything else, and you can delete it anytime.

About this use case

Use Jev for entity resolution: incoming state, Jev decision, routed outcome

Who / when

Audience

  • data engineers running CRM / MDM dedupe who need more than Levenshtein or embedding similarity
  • knowledge-graph and search teams linking mentions to canonical entities
  • ops teams that escalate ambiguous merges to humans instead of auto-collapsing wrong rows

Triggers

  • fuzzy match or embedding neighbors still merge different people or companies
  • you need a typed same / different / review decision per candidate pair at batch scale
  • string equality fails on nicknames, abbreviations, and formatting noise
  • you want calibrated thresholds before an irreversible merge or link write

The workflow

  1. 01
    Candidate pairTwo records or mentionsInput
  2. 02
    Match decisionsame / different / reviewJev
  3. 03
    ConfidenceScore + needs_human flagJev
  4. 04
    Code gateMerge, keep separate, or queueYour code

Question shape

{
  "match": {
    "type": "choice",
    "instructions": "Given these two records (or mentions), do they refer to the same real-world entity? Prefer different_entity when evidence conflicts; use review when key fields are missing or ambiguous.",
    "criteria": {
      "same_entity": "Strong evidence they are the same person, company, or object—compatible identifiers, addresses, or roles with no hard conflicts",
      "different_entity": "Hard conflicts (different IDs, incompatible dates/locations, distinct roles) or only superficial name overlap—keep them separate",
      "review": "Ambiguous: sparse fields, nickname/abbreviation risk, or conflicting soft signals that a human or richer context should resolve"
    }
  },
  "confidence": {
    "type": "score",
    "instructions": "How confident are you in the match decision above, based only on the fields provided.",
    "criteria": [
      "low",
      "medium",
      "high"
    ]
  },
  "needs_human": {
    "type": "noul",
    "instructions": "A human reviewer should decide before any merge, link, or delete—because evidence is thin, conflicting, or the write is hard to undo."
  }
}

Gate policy

≥ 0.90

Honor match: merge or link only on same_entity with high confidence; keep separate on different_entity; never auto-merge when needs_human is true.

0.65–0.90

Prefer review over merge; store probabilities and route same_entity mid-confidence pairs to a human queue.

< 0.65

Do not merge or link; mark review or keep separate and log the candidate for later enrichment.

Failure modes

Pre-launch checks before you trust auto-routing:

  • Auto-merging on shared name + fuzzy company string and collapsing two different people;
  • Treating embedding neighbors as same_entity without checking conflicting emails, cities, or roles;
  • Skipping review when confidence is medium because "the names match";
  • Asking a chat model for a free-text yes/no and parsing prose that breaks the pipeline type;
  • Letting Jev authorize the irreversible merge write instead of only deciding same vs different;
Keep exact work in code: blocking keys, phonetic indexes, ID equality, date/number compares, and the final merge or link write stay deterministic. Use Jev only for the meaning-level gate—same entity, different, or review—then let your thresholds decide before any irreversible write.

FAQ

How is this different from fuzzy string matching?

Fuzzy match and embeddings rank neighbors; they do not know whether role, city, and email conflicts mean two people. Jev asks atomic same_entity / different_entity / review questions and returns calibrated probabilities you can threshold before a merge.

Should Jev perform the merge itself?

No. Jev should not count, compare dates, perform arithmetic, or authorize irreversible actions by itself. Your code owns blocking, ID equality, and the merge write; Jev only answers the meaning-level match questions.

What does the Flatkey call look like?

POST https://router.flatkey.ai/api/alpha/decisions with Authorization: Bearer …, Content-Type: application/json, and a body of state, model (typesafe/jev-1.13), and questions (choice / score / noul). This is not an OpenAI-compatible /v1 chat endpoint.

Can I bring my own API key?

Yes. Try the free demo above without signing in. To run it live on your own text, sign in with Google and connect a Flatkey or OpenRouter key (a quick test call runs when you save it). Manage or delete it anytime under Dashboard → BYOK. Keys are stored encrypted on the server, used only for runs you trigger, and never sent back to the browser. Need a Flatkey key? Get one for Jev 1.13 on Flatkey.

Is this the official TypeSafe Jev product page?

No. jev-llm.com is an independent research and practice site. Verify pricing, models and terms at the original TypeSafe sources.

Sources

Seen on X
Independent-site note: jev-llm.com is an independent research and practice site. It is not the TypeSafe AI official site. Verify models, pricing and terms at the original source.