Villa Market search, led by an AI model
Search that understands the shopper
Shoppers type a dish, an occasion or a need, not only a product name. The model reads what they mean, together with what the shop knows about them, and chooses the products.
For now, the demo re-ranks the shop's own search with the model. Next comes our own engine (a router, semantic matching and occasions), which will not need the old search. The figures below are the model-led engine's.
01
Today, the right product gets lost after the search
On 53% of 247 test searches with results, the shop's page shows a different first product from the one its search engine ranked first. The storefront re-sorts the results after the search.
- 21.9% not sold at the branch, or alcohol
- 16.6% out of stock, and sorted last
- 14.2% a best-seller or new-arrival badge jumps ahead
- 47.4% the same first product
02
One search, five steps
The first four are the model's judgments. Code only fetches what the model chose, and puts the page in order.
- UnderstandThe search, with the shopper's context: basket, history, likes, allergies, behaviour.
- ShelvesThe model chooses the shelves and sub-shelves worth reading.
- ProductsA quick yes or no for each product on them, up to 1,200.
- GradeEXACT, STRONG, RELATED or NOT. Diet and allergy checks only remove.
- OrderBy grade, then stock, then the model's own score. Every move says why.
03
Every search knows the shopper, within rules
The same search gives different pages to different shoppers, and each product says why it moved. Four rules hold every time:
- Context changes how the search is read, and the order within a grade.
- A product the shopper named is never hidden or pushed down. If it clashes with an allergy, it stays, with a warning.
- On a search that does not name it, a disliked product counts one grade lower for that shopper.
- Diet and allergy rules only ever remove products.
04
Measured, not claimed
261 test searches in Thai and English, each scored on what shoppers see at the Sukhumvit 33 branch: today's shop, against model-led search on the same products.
The first result is relevant
| Measure | Today's shop | Model-led search |
|---|---|---|
| First result relevant (243 judged) | 82.3% | 88.1% |
| First result relevant, Thai (46) | 71.7% | 95.7% |
| First result relevant, English (197) | 84.8% | 86.3% |
| Named product first (37) | 75.7% | 91.9% |
| Relevant share of the first screen (11) | 0.845 | 0.880 |
| Searches with an empty page | 5.4% | 3.1% |
A new search takes about 1.5 s with no shopper profile (up to about 3 s), and 2 to 5 s with a full profile. Repeated searches come from a cache. English gains are small (84.8% to 86.3%); Thai gains most.
05
Try it: each story opens the demo
Synthetic shoppers only. Each link opens the demo on that shopper and search.
Compare it yourself
Each link opens one search twice, side by side: Villa's search today, and the new search.
06
What the demo shows
07
Villa Market's own product data
- Names, brands, sizes, categories and branch availability come from Villa Market's product API, fetched only when a new version is published.
- Stock, promotions and images come from the shop's own feeds, read-only.
- Next: the model places every product on the right shelf. Testing showed why: one brand's oat milk is filed under plain milk, so a search that reads the plant-milk shelf misses it.
08
Costs cents, not a server
The model is paid by the word it reads, and everything else is serverless: when nobody searches, almost nothing runs.
| 1,000 searches | ≈ $0.36 |
| 100,000 searches a month | ≈ $36 |
| An always-on managed search cluster | a few hundred dollars a month, before the first search · AWS pricing |
Model input price: $0.042 per million input tokens (no output price is listed); AWS approximate. Not Villa's bill. On average a search reads about 7,900 tokens (the mix of the 261-query test).
09
What it does not do yet
| Alcohol is hidden | As today's shop hides it from search |
| Recipes come from a library of 28 dishes | Other dishes run as intent searches |
| The Christmas dinner recipe has no whole turkey | The branch sells none online. A search for "turkey" now puts the turkey products first; out-of-stock ones are labelled |
| Pages can shift if the product list's order changes | The scores hold; being measured and fixed |
| Shopper context is not in the evaluation yet | Shown in the demo; test cases come next |
| English gains are small | The English test labels get checked before more tuning |
10
Four decisions for Villa Market
The demo uses synthetic shoppers only. No real customer data is used anywhere, and nothing is written to Villa Market.