WhatsApp and chat
How Neo understands Nigerian shopping language
How phrases such as “40k” and “no pass 40k” become clear naira prices.
Why normalization is backend-owned
Nigerian buyers naturally mix English, Pidgin, shorthand, and implied naira values. The planner records interpreted entities for observability, but deterministic parsing of the original message protects price constraints from being dropped or altered before catalogue search.
Supported price forms
| Buyer phrase | Canonical constraint |
|---|---|
30k to 40k | ₦30,000 minimum and ₦40,000 maximum |
30 to 40k | Shared scale produces the same range |
30k reach 40k | Inclusive range |
no pass 40k | ₦40,000 maximum |
my budget na 40k | ₦40,000 maximum |
Bounds become integer minor units before database filtering. The model cannot replace or discard a deterministic budget.
Search and failure behavior
If the model omits the product entity, the original message remains the product-query fallback. A complete request with no matching product in range returns the same truthful any-seller no-stock outcome. Price language never invents availability or seller suitability.
Evidence and tests
src/commerce-language.tssrc/conversation-state.tssrc/whatsapp.tstest/commerce-language.test.tsscripts/conversation-eval-corpus.tsscripts/openai-conversation-smoke.ts
