Workflows & Automation

Nandi routes every complaint to the right desk with open-source AI for Indian languages.

Nandi is a free Apache-2.0 model routing Indian complaints into 53 categories and P1-P3 urgency. It scores 62.5% on real posts but needs human review.

Nandi routes every complaint to the right desk with open-source AI for Indian languages.

Key Takeaways

  • Nandi is a free Apache-2.0 multilingual model that routes complaints in 13 Indian languages and English into 53 categories with P1-P3 urgency levels, running locally without sending data to an API.
  • Its category system is based on official complaint taxonomies from RBI, IRDAI, CPGRAMS, telecom, and the National Consumer Helpline, but the mapping is unofficial and intended for first-pass triage rather than resolving complaints.
  • The model was trained only on synthetic complaint-like texts generated and labeled by open-weights models, because no openly licensed labeled Indian complaint dataset exists and real customer data was deliberately avoided.
  • On 443 real posts, Nandi scored 62.5% category accuracy, while urgency prediction and confidence calibration failed, so its top-3 outputs should support human review rather than enable fully automatic routing.

Meta description: A free Apache-2.0 Nandi model routes Indian complaints in 13 languages into 53 categories, scoring 62.5% on 443 real posts and failing urgency rules.

Nandi routes every complaint to the right desk with open-source AI for Indian languages.

Tags: Nandi, complaint routing, Indian languages, LLM evaluation

Featured image: Abstract friendly illustration of multilingual complaint messages flowing into 53 routed desk categories, no real people, no logos, no text.

The Nandi complaint routing model, released by Arun Prabhakaran of LatentAILabs, is a free Apache-2.0 tool that reads a complaint in Hindi, Hinglish, 10 other Indian languages or English and returns one of 53 categories, the top three with probabilities, and an urgency level marked P1, P2 or P3. Its categories follow complaint lists from RBI for banking, IRDAI for insurance, CPGRAMS for central government services, telecom and the National Consumer Helpline. For readers who triage Indian-language app reviews, forum posts, emails or support chats, Nandi provides a local first-pass suggestion: it runs on CPU or GPU, sends nothing to an API, and is published as arunp0/nandi-grievance-indic.

Why the routing gap matters

RBI's ombudsman scheme received 13.34 lakh complaints in 2024-25. CPGRAMS, the central government grievance portal, redressed more than 26 lakh complaints in 2024. Behind those official numbers are many more complaints that never reach a regulator: app reviews, tweets, emails and support chats sent to banks, insurers, telecom companies and government offices.

Every message must first land on the right desk. A made-up example used in the source is a Hinglish complaint saying that 2,000 rupees left an account through UPI this morning but never reached the receiver, while the bank helpline was not answering. Before a support agent can act, triage has to decide which desk owns the issue, how urgent it is, and what the fallback categories are if the first guess is wrong.

Nandi does not resolve complaints or judge whether they are valid. It routes each message to the right desk. Its name follows the bull Nandi, who keeps Shiva's gate in temple lore and carries whispered wishes to the right place.

What it returns and how it was trained

Nandi is the third model in a small open set for Indian languages. Yama is a zero-shot classifier, meaning it judges text against labels supplied at run time without task-specific training. Chitragupta keeps records by finding and masking personal data. Nandi exists because, on routing into a fixed set of categories, a fine-tuned 560M-parameter encoder beats a zero-shot generalist of the same size by 25.9 points on real text.

Under the hood, Nandi is an XLM-RoBERTa-large multilingual encoder with mean pooling and two linear heads: a 53-way category head and a 3-way urgency head. The helper route_batch handles lists. For the UPI example, a sample return includes category bank.digital_banking, domain bank, confidence 0.9999, urgency P1, urgency probabilities of 0.868 for P1, 0.0012 for P2 and 0.1307 for P3, and a top3 list containing bank.fraud_unauthorised_txn and con.ecommerce. Praise for a branch returns none.out_of_scope.

Nandi routes every complaint to the right desk with open-source AI for Indian languages.

One warning is central: the confidence number is not calibrated. On real text, Nandi often outputs 0.99 on wrong predictions. The top3 list should be treated as suggestions for a human, never as a threshold for fully automatic routing.

The taxonomy was borrowed rather than invented. There are 14 banking and payments categories, drawn from the complaint form of RBI's Integrated Ombudsman Scheme, including ATM and debit cards, digital banking, credit cards, loans, deposit accounts, KYC and frozen accounts. Some categories are split out because routing or urgency differs, such as fraud and unauthorised debits, and recovery-agent harassment. There are 12 insurance categories from IRDAI's complaint types, including death claims, health claims, motor claims, policy servicing, mis-selling and ULIPs. There are 17 central government service categories from published CPGRAMS categories, including PF and EPFO, pensions, PM-KISAN, income tax and PAN, Aadhaar, passports, post, railways, LPG and corruption by officials. Telecom contributes 4 categories, consumer complaints contribute 5 mostly from National Consumer Helpline sectors such as e-commerce, electronics, travel and coaching, and one category captures messages that are not complaints, including praise, questions, suggestions, news, opinions and chit-chat.

Each category records its origin. Twenty-three are verbatim items on an official complaint form, 17 are CPGRAMS categories, 4 are National Consumer Helpline sectors, 4 are derived from official buckets, and 5 have no published list and were defined by the author: railways, ration cards, two telecom groups and coaching. The category names belong to the regulators, while the mapping is the author's, not an official one.

Boundary rules shape the output. Fraud beats the payment method, so a fraudulent UPI debit goes to fraud, not digital banking. A review criticising an app counts as a complaint even if it asks for nothing. Reports of a crime by someone else are not complaints here, because none of the grievance systems handles crime and there is no police category. Bribery or misconduct by an official is a complaint. If a message contains several problems, the most time-critical one wins.

The training data was synthetic. No openly licensed dataset of labelled Indian complaints exists, and the author used a hard rule against training on real complaints, production data or customer data. All texts were written and filtered only by open-weights models, Gemma 4 and Qwen3.6, both Apache-2.0. Code selected the scenario, including the category, timing facts and history. Gemma 4 then wrote the message in a chosen language, channel and persona, such as tweets, app reviews, emails, chat messages, ombudsman forms, formal letters and helpline call transcripts. Qwen3.6 labelled each text blind, without seeing the scenario. Texts where the label disagreed with the scenario were dropped. Later rounds produced freer text that looked more like real reviews and tweets, and two teachers, Gemma 4 31B and Qwen3.6, labelled it. Only texts where both agreed were kept.

The result is 116,199 texts in 13 languages, including 15,902 non-complaints and 24,638 urgent P1 examples. Every name, account, phone and policy number is a dummy value, and no output of a proprietary model is in the training data.

Synthetic scores versus real public posts

The ship rules were written before any data was generated. On a synthetic test, Nandi had to beat Yama by at least 0.10 in macro-F1, a balanced score across categories, reach at least 0.90 urgent recall, and route no more than 10% of non-complaints to a category. The test was written by Qwen3.6 rather than Gemma, with channels and personas held out from training.

Nandi routes every complaint to the right desk with open-source AI for Indian languages.

Nandi passed easily. It scored 0.929 category accuracy and 0.909 macro-F1, compared with Qwen3.6 zero-shot at 0.888, Yama at 0.536 and TF-IDF with logistic regression at 0.604. Top-3 accuracy was 0.971. Urgent recall was 0.955 on rows confirmed as urgent by a blind checker. Only 7.3% of non-complaints were routed to a category. Every language scored between 0.87 for Urdu and 0.98 for English.

That synthetic result hid a 30-point drop on real text. The real decision was made on 443 public posts collected only after the model was frozen: Play Store and App Store reviews from India and posts from a public forum. About 38% were not in English, mostly Hindi and Hinglish. Apps and companies from two earlier real sets were excluded. Three Claude agents, not humans, labelled each post from the text alone using the same written definitions the training teachers used, and a 2-of-3 vote decided the label. The labels are LLM-reviewed, not human-verified. Because all three labellers are the same model, their 91% agreement measures one model's consistency, not true agreement between independent annotators, and overstates how reliable the labels are.

On real posts, Nandi picks the right category 62.5% of the time and has it in its top 3 81.3% of the time. The 35B-parameter LLM Qwen3.6 is more accurate at 66.4%. The 3.9-point accuracy gap is not statistically clear on 443 posts, with McNemar p about 0.15. The macro-F1 gap is real: Nandi scores 0.43 versus Qwen3.6 at 0.62, showing weakness on rare categories. About 1 in 5 real non-complaints still gets a category, almost exactly as many as Qwen3.6 routes. Against Yama, the generalist of the same size, Nandi wins clearly, 0.625 versus 0.366.

Real complaints are shorter, vaguer and messier than anything an LLM writes when asked to generate a complaint. A one-line review such as app is fraud, money gone carries less signal than three tidy sentences about a failed UPI transfer.

A correction is disclosed. After scoring, the author found a mistake in the labelling guide. It told labellers to put recovery-agent threats under loans instead of the taxonomy's own recovery-harassment category, so models that picked the correct category were marked wrong. On those 35 posts, either label is now accepted. Before the correction, Nandi scored 0.571 accuracy and 0.397 macro-F1, while Qwen3.6 scored 0.607 accuracy and 0.593 macro-F1, and Yama scored 0.352 accuracy and 0.256 macro-F1. Urgency numbers did not change, and neither did any pass-or-fail decision.

Urgency failed the reliability bar

Before collecting the real set, the author set a bar for calling urgency reliable: the lower end of the 95% interval for urgent P1 recall had to reach 0.50. While the set was being labelled, a review of the plan noted that about 40% of its urgent posts were loan-app harassment, which might be easy to spot. Before scoring, a second condition was added: the bar also had to hold without the loan-app posts.

The rule failed. Nandi catches about 1 in 4 real urgent posts, and only 1 in 10 once loan-app harassment is left out. The 35B-parameter LLM does no better. Yama catches more because it calls far more posts urgent, but its precision is 0.32 against Nandi's 0.70. The synthetic test had said 0.955 for urgent recall, but real urgent posts rarely spell out timing the way the synthetic scenarios did. Because of this, urgency ships marked experimental.

Who should use it / who should skip it

Use Nandi if you need a free, local first-pass router for Indian-language complaint streams and can keep a human in the loop for top3 suggestions. It is useful for fixed RBI, IRDAI, CPGRAMS, telecom and National Consumer Helpline style routing, and it sends nothing to an API. Skip it for fully automatic routing, rare-category handling, calibrated confidence thresholds, or urgency decisions that require reliable P1 recall. The author notes that parts of the source article were drafted with AI assistants, and that every number was checked against the model card and evaluation logs.

Comments (0)

  1. No comments yet. Be the first to share what worked for you.

Leave a comment

Comments are reviewed before they appear. Your email address is not published.