Latimal Menu Intelligence
A model that only understands food
Food-domain AI for search, classification, cart upsell, matching, and dedup. The model reads dish names the same way across spellings, transliterations, and 100+ languages, treating “Margherita Pizza”, “Pizza Margherita”, “마르게리타 피자”, and “マルゲリータピザ” as one dish. The dedup demo below runs live; the rest of the toolkit is in the gallery further down.
Trained for food. Here is the proof.
Full benchmarksDedup F1 on the food benchmark suite. Latimal vs an off-the-shelf open-source stack (bge-m3 + bge-reranker-v2-m3).
Latimal: current production stack, benchmarked on 2026-05-22. Competitor: bge-m3 + off-the-shelf bge-reranker-v2-m3. Both run on the identical 26-benchmark snapshot.
Cross-script deduplication
Cluster duplicate menu items across spellings, transliterations, languages, and writing systems.
Paste your own menu above. The playground runs the first 30 items; the API itself handles up to 2,000 per call.
Nothing you paste in the playground is stored.
Verification is not set up here, so live runs are paused. You can still browse the examples.
- 6 scriptsCanonicalENMargherita Pizza
- ENPizza Margherita0.969
- ENMargherita Pizza (Large)1.000portion tag
- EN**NEW** Margherita Pizza1.000promo stripped
- ENMargerita Pizza0.838typo / spelling
- ENMargherita Pizza 50% OFF0.916promo stripped
- 日マルゲリータピザ0.565transliteration
- 한마르게리타 피자0.567transliteration
- عبيتزا مارغريتا0.620transliteration
- ??Пицца Маргарита0.597
- 中玛格丽特披萨0.536transliteration
- ไทพิซซ่ามาร์เกอริต้า0.568transliteration
How other tools cluster the same menu
The exact items you just ran, clustered three ways. Latimal pulls the variants into one dish; the others do not.
- ENPizza Margherita
- ENMargherita Pizza (Large)
- EN**NEW** Margherita Pizza
- ENMargerita Pizza
- ENMargherita Pizza 50% OFF
- 日マルゲリータピザ
- 한마르게리타 피자
- عبيتزا مارغريتا
- ??Пицца Маргарита
- 中玛格丽特披萨
- ไทพิซซ่ามาร์เกอริต้า
3 items left unmerged
- ENPizza Margherita
- ENMargerita Pizza
12 items left unmerged
- ENMargherita Pizza (Large)
- EN**NEW** Margherita Pizza
- ENMargherita Pizza 50% OFF
11 items left unmerged
Methodology
- Latimal. The live result from this playground run: Latimal's food-domain dedup, union-find clustering at cosine 0.85.
- bge-m3 + bge-reranker-v2-m3. Off-the-shelf open-source stack: bge-m3 embeddings re-scored by bge-reranker-v2-m3, then union-find clustering at cosine 0.85 (the same threshold Latimal uses). Computed offline on these exact items.
- Keyword search (SQL ILIKE). Two items group only when one is a case-insensitive substring of the other, the SQL `ILIKE '%term%'` pattern. No model, no embeddings. This is what menu deduplication looks like without semantic understanding.
- The comparison is shown on curated examples only. The baseline columns are pre-computed; the Latimal column is the live result from your run above.
Precision check
Merging duplicates is only half the job. The model also has to refuse to merge dishes that merely look alike. These three pairs run live against the match endpoint.
- Spelling variantENSpaghetti BologneseENSpaghetti BolognaiseSame dishas expected
- cosine
- 1.000
- reranker
- 0.970
Merged as one dish: two accepted spellings of the same Italian classic.
- Similar but distinctENPad ThaiENPad See EwDifferentas expected
- cosine
- 0.703
- reranker
- 0.099
Kept apart: two different Thai stir-fried noodle dishes, not duplicates.
- Different cuisinesENMargherita PizzaENChicken ShawarmaDifferentas expected
- cosine
- 0.131
- reranker
- n/a
Kept apart: an Italian pizza and a Middle Eastern wrap share nothing.
Use this in your app
The snippet below carries the exact menu you just ran. Public Latimal API, swap in your key.
curl -X POST https://dish-embed.latimal.com/dedup \
-H "X-API-Key: $LATIMAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [
"Margherita Pizza",
"Pizza Margherita",
"Margherita Pizza (Large)",
"**NEW** Margherita Pizza",
"Margerita Pizza",
"Margherita Pizza 50% OFF",
"マルゲリータピザ",
"마르게리타 피자",
"بيتزا مارغريتا",
"Пицца Маргарита",
"玛格丽特披萨",
"พิซซ่ามาร์เกอริต้า",
"Greek Salad",
"Buffalo Chicken Wings",
"Chocolate Brownie"
],
"cosine_threshold": 0.85
}'Run this on your full catalog
What you saw is a 15-item demo. The API clusters 2,000 items per call. Get a free key with 5,000 credits, or send the founder your messiest menu.
The full menu intelligence toolkit
Semantic search, cuisine classification, cart upsell, and menu health, all powered by the same food-domain intelligence behind the dedup demo above. Open any tool to run it live.
Customers search by intent, not your exact menu wording.
Tagging cuisine by hand does not scale across a global catalog.
Messy menus leak revenue through noise, dupes, and stray SKUs.
- 2 promo-noise items
- 4 duplicate clusters
- 2 non-food SKUs
Generic add-on prompts ignore what is already in the cart.