Downloads · 30 days
28
14% of all-time downloads
build-small-hackathon/minicpm5-1b-indian-fmcg-normalizer
minicpm5-1b-indian-fmcg-normalizer is a text generation model from build-small-hackathon. Use it when you need the model to write or continue text. The card lists the license as apache-2.0.
Fine-tuned openbmb/MiniCPM5-1B to normalize inconsistent Indian FMCG product names from distributor invoices into canonical SKU names. Part of the Kirana Detective project — an AI system for small Indian grocery store…
Downloads · 30 days
28
14% of all-time downloads
All-time downloads
195
Public
Repo size
688 MB
Likes
0
Public
Click a slice to open those files.
.gguf688 MB · 100%
From the Hugging Face model README
Fine-tuned openbmb/MiniCPM5-1B to normalize inconsistent Indian FMCG product names from distributor invoices into canonical SKU names. Part of the Kirana Detective project — an AI system for small Indian grocery stores to reconcile purchase invoices against a master product catalog.
Indian kirana (grocery) distributors write product names in highly inconsistent shorthand on invoices: abbreviations, typos, mixed case, regional variants, and truncated descriptions. This model maps any such raw string to a clean, canonical product name that can be matched against a standardized catalog.
Example inputs → outputs:
| Raw Invoice Name | Normalized Output |
|---|---|
MAGGI NDL 70GM | Nestle Maggi Masala Noodles 70g |
SURF XL 1K | Surf Excel Washing Powder 1kg |
PARLEG 80 | Parle-G Biscuit 80g |
COLGAT 100G | Colgate Strong Teeth Toothpaste 100g |
AMUL BTR 100 | Amul Butter 100g |
BRIT MARIE LT | Britannia Marie Light Biscuit |
llama-cli --model MiniCPM5-1B.Q4_K_M.gguf \
-p "<|im_start|>system\nYou are an Indian FMCG product name normalizer. Given a raw product name from a distributor invoice, return ONLY the canonical product name. No explanation, no punctuation — just the canonical name.<|im_end|>\n<|im_start|>user\nInvoice product name: \"MAGGI NDL 70GM\"<|im_end|>\n<|im_start|>assistant\n"
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("build-small-hackathon/minicpm5-1b-indian-fmcg-normalizer")
model = AutoModelForCausalLM.from_pretrained("build-small-hackathon/minicpm5-1b-indian-fmcg-normalizer")
messages = [
{"role": "system", "content": "You are an Indian FMCG product name normalizer. Given a raw product name from a distributor invoice, return ONLY the canonical product name. No explanation, no punctuation — just the canonical name."},
{"role": "user", "content": 'Invoice product name: "MAGGI NDL 70GM"'},
]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=32)
print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
# → Nestle Maggi Masala Noodles 70g
| Parameter | Value |
|---|---|
| Method | QLoRA (4-bit base + LoRA adapters) |
| LoRA rank | 16 |
| LoRA alpha | 16 |
| LoRA target modules | q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj |
| Trainable parameters | 11,206,656 / 1,091,839,488 (1.03%) |
| Epochs | 3 |
| Total steps | 339 |
| Batch size per device | 8 |
| Gradient accumulation steps | 2 |
| Effective batch size | 16 |
| Learning rate | 2e-4 |
| LR scheduler | Cosine |
| Max sequence length | 512 |
| Precision | BF16 |
| Field | Value |
|---|---|
| Hardware | NVIDIA A10G (22 GB VRAM) |
| Framework | Unsloth 2026.6.1 |
| Orchestration | Modal |
| Training time | ~3 minutes |
| Train loss | 0.5834 |
| Throughput | 2.14 steps/sec · 34.2 samples/sec |
The published file is MiniCPM5-1B.Q4_K_M.gguf (~688 MB), quantized from BF16 using llama.cpp Q4_K_M.
@misc{kirana-detective-2026,
title = {Kirana Detective: AI Invoice Reconciliation for Indian Grocery Stores},
author = {Syed Naazim hussain},
year = {2026},
url = {https://huggingface.co/build-small-hackathon/minicpm5-1b-indian-fmcg-normalizer}
}