Text normalisation (Hinglish)
The engine never sees your raw text. Every request (unless "raw": true) goes through a deterministic Hinglish normaliser, the same
one that was applied to every training transcript, so what the model learned to say and what it is asked to say have the same shape.
This page is the contract: the rules, and the 66 canonical cases the server's test suite checks byte for byte against the Python original.
Preview any text without synthesising with POST /v1/normalize, or type into the portal playground and watch the
"what the engine will say" panel.
The rules, in order
- Unicode clean-up. NFC; zero-width characters removed; decomposed nukta forms (क़ ज़ ड़ ढ़ फ़ …) folded to their precomposed code points;
Devanagari digits
०-९ → ASCII; |, ॥ → ।; curly quotes straightened; “ ” " dropped; – — … become pauses.
- Abbreviations expanded (exact case, word-bounded):
A/c → account, Rs. → Rs, No. → number, Dr./Mr./Mrs./Ms., e.g. → for example,
hrs/mins/km/kg, T&C → T and C, 24x7/24/7 → चौबीस सात, & → and, @ → at, # → number.
- Numbers → Hindi words with Indian grouping (सौ · हज़ार · लाख · करोड़). Specific shapes are recognised first:
- Money:
₹, Rs, INR, rupees, /-, k; lakh/crore/लाख/करोड़ scales; decimals become the
spoken fractions (डेढ़ · ढाई · साढ़े · सवा · पौने · आधा) where people use them, else दशमलव digit by digit; paise.
- Percentages:
10.5% → साढ़े दस percent; 0.75% → शून्य दशमलव सात पाँच percent.
- Codes: OTPs, masked accounts (
XXXX4821 → the four digits), card tails, reference/ticket/loan numbers, 10-digit mobiles and
+91 numbers, toll-free numbers: digit by digit, grouped with commas where a human would pause (98765 43210 → two groups).
With "en_digits": true the digits are English words (four eight two nine) instead of Hindi.
- Dates:
15/11/2026, 2026-11-05, 7th December, 2026, 5th alone → पाँच तारीख़; years → दो हज़ार छब्बीस.
- Times:
9:30 → साढ़े नौ बजे, 4 pm → शाम चार बजे, 18:45 → शाम पौने सात बजे, 7:05 pm →
शाम सात बजकर पाँच मिनट, 00:30 → रात साढ़े बारह बजे; the part of day is inferred.
- Ordinals:
3rd EMI → तीसरी E M I, 5th payment → पाँचवाँ payment, 3rd floor → तीसरे floor.
- Measures with decimals become fractions:
1.5 घंटे → डेढ़ घंटे, 2.5 years → ढाई years.
+ between words → plus; ; and : → commas; a lone dash is a pause; / between words is a space (हाँ/ना → हाँ ना).
- Latin words. English stays in Latin script and is lower-cased (one token sequence for Help and help). ALL-CAPS words of 2–6 letters are
spelled letter by letter (
EMI → E M I, KYC → K Y C, CKYC works too), plural EMIs → E M Is, pre-EMI → pre E M I. Acronyms people say as
words stay words: PIN, PAN, SIM, NACH, CIBIL, NEFT, NAV, ON, OFF, OK, NO, YES. A single capital letter being spelled (Plan B) is kept.
URLs and e-mails are spelled out: www.saralfinserv.com → w w w dot saralfinserv dot com, help@saral.in → help at saral dot in.
- Punctuation. Only
. , ? ! ' - survive; 'quoted' words lose their quotes but don't keeps its apostrophe; । → .; runs of punctuation collapse
to one mark (? or ! win); every utterance ends with ., ? or !, so the model always sees a sentence boundary (that is what lets
long replies split into ≤ 50-token chunks and end cleanly).
Why । becomes .
The chunker only knows . ! … ? as sentence boundaries. With । a long reply would never be split and would end in a token sequence the model
never saw in training. Normalising to . keeps chunking and end-of-speech exact. The spoken result is identical.
Idempotence
Normalising already-normalised text changes nothing, so you may pre-normalise on your side (or cache /v1/normalize output) and send it
through the normal path. The server's tests check this for every case below.
Skipping it
Send "raw": true to bypass the normaliser (your text must already be in the normalised form above). Use it only when you run the normaliser
yourself; raw text with digits, % or ₹ will be mispronounced because the model never trained on those characters.
The 66 canonical cases
Input on the left, exactly what the engine says on the right. These come from the training repository's test_normalize_hinglish.py
(64 cases plus 2 with en_digits) and are regenerated into the server's test suite; a server build fails if any of them changes.
Money
| Input |
Spoken |
| आपकी EMI ₹12,450 है, जो 5 नवंबर को due है. |
आपकी E M I बारह हज़ार चार सौ पचास रुपये है, जो पाँच नवंबर को due है. |
| आपका loan amount ₹2.5 lakh है और interest rate 10.5% है। |
आपका loan amount ढाई लाख रुपये है और interest rate साढ़े दस percent है. |
| Rs. 5,000/- का late fee लगेगा। |
पाँच हज़ार रुपये का late fee लगेगा. |
| आपके account में ₹1,25,000.50 जमा हैं। |
आपके account में एक लाख पच्चीस हज़ार रुपये पचास पैसे जमा हैं. |
| UPI से ₹499 pay करें। |
U P I से चार सौ निन्यानवे रुपये pay करें. |
| ₹5k cashback मिलेगा। |
पाँच हज़ार रुपये cashback मिलेगा. |
| 1 crore का cover है। |
एक करोड़ का cover है. |
| INR 1.25 crore का sanction हुआ है। |
सवा करोड़ रुपये का sanction हुआ है. |
| 500 rupees का charge लगेगा। |
पाँच सौ रुपये का charge लगेगा. |
| आपका outstanding 3.75 लाख है। |
आपका outstanding पौने चार लाख है. |
| Interest 0.75% per month है। |
interest शून्य दशमलव सात पाँच percent per month है. |
Codes, phone numbers, masked accounts
| Input |
Spoken |
| आपका OTP 482913 है। इसे किसी के साथ share मत कीजिए. |
आपका O T P चार आठ दो नौ एक तीन है. इसे किसी के साथ share मत कीजिए. |
| Account number XXXX4821 से ₹2,500 debit हुए हैं. |
account number चार आठ दो एक से दो हज़ार पाँच सौ रुपये debit हुए हैं. |
| आपका card ending in 4567 block कर दिया गया है। |
आपका card ending in चार पाँच छह सात block कर दिया गया है. |
| आपकी reference ID REF-4521A है. |
आपकी reference I D R E F, चार पाँच दो एक, A है. |
| Ticket number 784512 पर update मिलेगा। |
ticket number सात आठ चार पाँच एक दो पर update मिलेगा. |
| आप हमें 1800-209-4567 पर call कर सकते हैं. |
आप हमें एक आठ शून्य शून्य, दो शून्य नौ, चार पाँच छह सात पर call कर सकते हैं. |
| मेरा number 98765 43210 है। |
मेरा number नौ आठ सात छह पाँच, चार तीन दो एक शून्य है. |
| +91 98111 22334 पर WhatsApp कीजिए। |
नौ आठ एक एक एक, दो दो तीन तीन चार पर whatsapp कीजिए. |
| Loan account number 0012345678 है। |
loan account number शून्य शून्य एक दो तीन चार पाँच छह सात आठ है. |
| क्या आपके account के last four digits 2556 हैं? |
क्या आपके account के last four digits दो पाँच पाँच छह हैं? |
Dates and times
| Input |
Spoken |
| Payment 15/11/2026 तक करना होगा। |
payment पंद्रह नवंबर दो हज़ार छब्बीस तक करना होगा. |
| आपकी EMI 2026-11-05 को due है। |
आपकी E M I पाँच नवंबर दो हज़ार छब्बीस को due है. |
| आपकी EMI 7th December, 2026 को है. |
आपकी E M I सात दिसंबर दो हज़ार छब्बीस को है. |
| आपकी due date 5th है। |
आपकी due date पाँच तारीख़ है. |
| Loan 2019 में लिया गया था। |
loan दो हज़ार उन्नीस में लिया गया था. |
| हमारी branch सुबह 9:30 बजे खुलती है। |
हमारी branch सुबह साढ़े नौ बजे खुलती है. |
| Call back 4 pm पर schedule कर दिया है। |
call back शाम चार बजे पर schedule कर दिया है. |
| Office 18:45 तक खुला है। |
office शाम पौने सात बजे तक खुला है. |
| आपका ticket 1.5 घंटे में resolve हो जाएगा। |
आपका ticket डेढ़ घंटे में resolve हो जाएगा. |
| Tenure 2.5 years का है। |
tenure ढाई years का है. |
| 1:15 बजे मिलते हैं। |
सवा एक बजे मिलते हैं. |
| 11:30 am पर call करेंगे। |
सुबह साढ़े ग्यारह बजे पर call करेंगे. |
| 7:05 pm तक |
शाम सात बजकर पाँच मिनट तक. |
| 00:30 पर system update होगा। |
रात साढ़े बारह बजे पर system update होगा. |
| principal + interest दोनों |
principal plus interest दोनों. |
Ordinals (gender from the possessive)
| Input |
Spoken |
| आपकी 3rd EMI bounce हो गई थी। |
आपकी तीसरी E M I bounce हो गई थी. |
| आपका 5th payment pending है |
आपका पाँचवाँ payment pending है. |
| 3rd floor पर आइए |
तीसरे floor पर आइए. |
Acronyms and English kept in Latin
| Input |
Spoken |
| Please अपना KYC complete कीजिए, और PAN card upload कीजिए. |
please अपना K Y C complete कीजिए, और pan card upload कीजिए. |
| NACH mandate और CIBIL score दोनों check कर लीजिए. |
nach mandate और cibil score दोनों check कर लीजिए. |
| कुल 3 EMIs बाकी हैं। |
कुल तीन E M Is बाकी हैं. |
| pre-EMI interest देना होगा |
pre E M I interest देना होगा. |
| IT support team आपको call करेगी। |
I T support team आपको call करेगी. |
| Visit www.saralfinserv.com या mail करें help@saral.in पर. |
visit w w w dot saralfinserv dot com या mail करें help at saral dot in पर. |
| I understand, आपकी problem मैं समझ सकती हूँ. |
i understand, आपकी problem मैं समझ सकती हूँ. |
| Thank you for calling Saral Finserv. How can I help you today? |
thank you for calling saral finserv. how can i help you today? |
| Plan B के बारे में बताइए। |
plan B के बारे में बताइए. |
| status 'pending' दिख रहा है, don't worry. |
status pending दिख रहा है, don't worry. |
| A/c holder का नाम बताइए। |
account holder का नाम बताइए. |
| T&C पढ़ लीजिए। |
T and C पढ़ लीजिए. |
Punctuation, terminal mark, short utterances
| Input |
Spoken |
| हाँ |
हाँ. |
| ठीक है |
ठीक है. |
| Okay sir |
okay sir. |
| जी, बिल्कुल! |
जी, बिल्कुल! |
| — जी, बिल्कुल! |
जी, बिल्कुल! |
| “Help” section में जाइए… |
help section में जाइए. |
| क्या आप अभी payment करना चाहेंगे? |
क्या आप अभी payment करना चाहेंगे? |
| Payment हो गया. Thank you. |
payment हो गया. thank you. |
| आपका नाम; पता: और number बताइए। |
आपका नाम, पता, और number बताइए. |
| हाँ/ना में जवाब दीजिए। |
हाँ ना में जवाब दीजिए. |
| धन्यवाद।। |
धन्यवाद. |
Unicode: Devanagari digits and nukta
| Input |
Spoken |
| आपका २५०० रुपये का payment |
आपका दो हज़ार पाँच सौ रुपये का payment. |
| ज़रूर, क़िस्त की तारीख़ बदल दूँगी |
ज़रूर, क़िस्त की तारीख़ बदल दूँगी. |
With en_digits: true
| Input |
Spoken |
| आपका OTP 4829 है |
आपका O T P four eight two nine है. |
| Account XXXX0921 से debit हुआ |
account zero nine two one से debit हुआ. |