Skip to content
Jev Hub

[ Use case · Data ]

Can Jev tell whether two records are the same thing?

Decide which records to merge, which to keep apart and which a person should check.

Published By Jev Hub

[ TLDR ]Good fit
  • Yes. For each candidate pair, one Score question with three levels (different, possibly related, same) decides whether to leave the records apart, ask a person or merge them, and a few yes/no questions in the same request show which fields disagree.
  • In TypeSafe's cookbook on 450 beer-catalogue pairs, 360 were left unlinked, 40 merged and 50 sent to a curator.

Is Jev a fit for pairs?

Use Jev when:

  • Two sources describe the same things in different words: catalogues, CRMs, supplier lists.
  • A wrong merge is expensive, so you want a middle option that goes to a person.
  • A cheap first pass has already picked the pairs worth checking.

Skip it when:

  • Records share a reliable ID. Match on the ID in code.
  • You need every pair in two large lists compared. Narrow the candidates first, then let Jev judge.

Which questions does Jev answer?

One request per pair, 4 questions. Jev answers them in parallel.

  • Do these two records describe the same product? (score. Scale: Different product → Related, but possibly not the same → Same product)
  • Do the two records name the same brewery? (yes or no. Options: Yes, No)
  • Do the two records describe the same style? (yes or no. Options: Yes, No)
  • Do the two records give the same alcohol content? (yes or no. Options: Yes, No)
ONE PAIRJEV ANSWERSSame product?Which fields differ?YOUR CODEMergeAsk a curatorKeep apart
One pair, 4 questions, then your code. Jev answers the questions about each pair in one request. Your own code reads the answers and their probabilities and decides what happens next.

What does it cost?

About 59¢ a month for 50,000 pairs of about 90 words each: 1.2¢ per 1,000 at list price, billed by TypeSafe AI. Adjust the numbers in the calculator.

What does TypeSafe's worked example show?

TypeSafe's cookbook takes 450 candidate pairs from two beer catalogues scraped from different sites (the Magellan benchmark set), with the text left messy as published. One Score decides each pair, with three yes/no questions on the fields riding along.

  • 360 pairs scored below the lower cut point and stayed unlinked; 40 scored above the upper one and were merged; 50 went to a curator.
  • No threshold was fitted to the data: the cut points follow from how the three levels are worded.
PAIRSLeft unlinked360Sent to a curator50Merged40
Where 450 candidate pairs went. From TypeSafe's own cookbook on two beer catalogues. Only the middle group needed a person.

Source: TypeSafe's cookbook Knowledge graph entity alignment (opens in a new tab), numbers from jev-1.12 on 11 August 2026. These are the maker's own results on its chosen data; test on yours.

How do you get started?

  1. Test it in the playground. No code needed. Paste a real pair into TypeSafe's playground and ask: “Do these two records describe the same product?” with the options Different product, Related, but possibly not the same, Same product. You'll see the answer and its probability. Open the playground (opens in a new tab).
  2. Use an existing tool. We haven't found a ready-made tool for this workload yet. Browse what people have built with Jev.
  3. Integrate it. To run it on every pair automatically, call Jev from the system where your pairs live. The developer details below include the full request.

Common questions

How do developers set it up?

The request

One request per pair with all 4 questions batched over the same state, so Jev reads the state once. Keys below are the names you'll see in the response.

POST api.typesafe.ai/v1/systemone
{
  "model": "jev-latest",
  "state": "Record A: Harbour Amber Ale · Northgate Brewing · American Amber · 5.5%\nRecord B: Northgate Harbour Amber - Pomegranate Edition · Northgate Brewing Co. · Fruit Beer · 5.5%",
  "questions": {
    "same": {
      "type": "score",
      "instructions": "Do these two records describe the same product?",
      "criteria": [
        "Different product",
        "Related, but possibly not the same",
        "Same product"
      ]
    },
    "brewery_matches": {
      "type": "noul",
      "instructions": "Do the two records name the same brewery?"
    },
    "style_matches": {
      "type": "noul",
      "instructions": "Do the two records describe the same style?"
    },
    "strength_matches": {
      "type": "noul",
      "instructions": "Do the two records give the same alcohol content?"
    }
  }
}

How to wire it up

  1. Use a cheap first pass (shared words, blocking keys) to pick candidate pairs.
  2. Send each pair with one three-level Score and a yes/no question per field you care about.
  3. Merge only at the top level, leave the bottom level apart, and send the middle to a person with the field answers attached.
  4. Write the middle level carefully: it decides which pairs reach a person.

Watch out for

  • Variants and special editions are the hard cases. Name them in the middle level so they reach a person instead of being merged.
  • A wrong merge spreads: every fact about either record now describes both. Lean toward review when unsure.

New to writing Jev questions? Read the question design guide.