Text Generation
Transformers
Safetensors
English
qwen2
finance
banking
indian
upi
transaction-classification
qwen
fine-tuned
conversational
text-generation-inference
Instructions to use SahilGoel/indian-txn-classifier with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use SahilGoel/indian-txn-classifier with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="SahilGoel/indian-txn-classifier") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("SahilGoel/indian-txn-classifier") model = AutoModelForCausalLM.from_pretrained("SahilGoel/indian-txn-classifier", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use SahilGoel/indian-txn-classifier with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "SahilGoel/indian-txn-classifier" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "SahilGoel/indian-txn-classifier", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/SahilGoel/indian-txn-classifier
- SGLang
How to use SahilGoel/indian-txn-classifier with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "SahilGoel/indian-txn-classifier" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "SahilGoel/indian-txn-classifier", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "SahilGoel/indian-txn-classifier" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "SahilGoel/indian-txn-classifier", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use SahilGoel/indian-txn-classifier with Docker Model Runner:
docker model run hf.co/SahilGoel/indian-txn-classifier
Upload README.md with huggingface_hub
Browse files
README.md
CHANGED
|
@@ -11,15 +11,37 @@ tags:
|
|
| 11 |
- qwen
|
| 12 |
- fine-tuned
|
| 13 |
base_model: Qwen/Qwen2.5-0.5B
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
---
|
| 15 |
|
| 16 |
# Indian Transaction Classifier
|
| 17 |
|
| 18 |
Fine-tuned Qwen2.5-0.5B for classifying Indian bank transactions (UPI, NEFT, IMPS, RTGS) into 30+ categories with merchant identification.
|
| 19 |
|
| 20 |
-
##
|
| 21 |
|
| 22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
## Categories
|
| 25 |
|
|
@@ -29,7 +51,17 @@ This model is fine-tuned on 1,700 privacy-sanitized Indian bank transaction desc
|
|
| 29 |
|
| 30 |
**Special:** friends, family, flat_deposit, trading_fees, vehicle_purchase, staff_salary, health_fitness, transfer, unclassified
|
| 31 |
|
| 32 |
-
##
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
|
| 34 |
```python
|
| 35 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
|
@@ -38,24 +70,17 @@ model = AutoModelForCausalLM.from_pretrained("SahilGoel/indian-txn-classifier")
|
|
| 38 |
tokenizer = AutoTokenizer.from_pretrained("SahilGoel/indian-txn-classifier")
|
| 39 |
|
| 40 |
system_prompt = "You are a bank transaction classifier for Indian bank statements..."
|
| 41 |
-
|
| 42 |
-
input_text = "UPI/zerodhabroking@/HDFC BANK LTD"
|
| 43 |
prompt = f"### System:\n{system_prompt}\n\n### Input:\n{input_text}\n\n### Output:\n"
|
| 44 |
|
| 45 |
inputs = tokenizer(prompt, return_tensors="pt")
|
| 46 |
-
outputs = model.generate(**inputs, max_new_tokens=100)
|
| 47 |
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
|
| 48 |
```
|
| 49 |
|
| 50 |
-
##
|
| 51 |
-
|
| 52 |
-
1,700 privacy-sanitized transaction descriptions. PII (phone numbers, personal UPI handles, reference numbers) has been redacted.
|
| 53 |
-
|
| 54 |
-
## Pipeline Architecture
|
| 55 |
|
| 56 |
-
|
| 57 |
-
2. **Recurring pattern detector** (10% more) - identifies repeating transactions
|
| 58 |
-
3. **Fine-tuned Qwen 0.5B** (remaining) - LLM fallback for uncertain transactions
|
| 59 |
|
| 60 |
## Supported Banks
|
| 61 |
|
|
|
|
| 11 |
- qwen
|
| 12 |
- fine-tuned
|
| 13 |
base_model: Qwen/Qwen2.5-0.5B
|
| 14 |
+
widget:
|
| 15 |
+
- text: "### System:\nYou are a bank transaction classifier for Indian bank statements. Given a raw transaction description, infer both its category and the actual company when evidence exists. Respond with ONLY a JSON object: {\"category\": \"<category>\", \"company_name\": \"<company_or_null>\", \"is_income\": false, \"confidence\": 0.0}.\n\n### Input:\nUPI/zerodhabroking@/HDFC BANK LTD\n\n### Output:\n"
|
| 16 |
+
example_title: "UPI — Zerodha"
|
| 17 |
+
- text: "### System:\nYou are a bank transaction classifier for Indian bank statements. Given a raw transaction description, infer both its category and the actual company when evidence exists. Respond with ONLY a JSON object: {\"category\": \"<category>\", \"company_name\": \"<company_or_null>\", \"is_income\": false, \"confidence\": 0.0}.\n\n### Input:\nNEFT/SALARY/ACME CORP\n\n### Output:\n"
|
| 18 |
+
example_title: "NEFT — Salary"
|
| 19 |
---
|
| 20 |
|
| 21 |
# Indian Transaction Classifier
|
| 22 |
|
| 23 |
Fine-tuned Qwen2.5-0.5B for classifying Indian bank transactions (UPI, NEFT, IMPS, RTGS) into 30+ categories with merchant identification.
|
| 24 |
|
| 25 |
+
## ⚡ Try it now (Inference API — free, no setup)
|
| 26 |
|
| 27 |
+
Use the **Inference API** widget on the right side of this page. Type a transaction description in the text box and click Compute.
|
| 28 |
+
|
| 29 |
+
Or call it programmatically:
|
| 30 |
+
|
| 31 |
+
```python
|
| 32 |
+
from huggingface_hub import InferenceClient
|
| 33 |
+
|
| 34 |
+
client = InferenceClient(model="SahilGoel/indian-txn-classifier")
|
| 35 |
+
|
| 36 |
+
system_prompt = 'You are a bank transaction classifier for Indian bank statements. Given a raw transaction description, infer both its category and the actual company when evidence exists. Respond with ONLY a JSON object: {"category": "<category>", "company_name": "<company_or_null>", "is_income": false, "confidence": 0.0}.'
|
| 37 |
+
|
| 38 |
+
tx = "UPI/zerodhabroking@/HDFC BANK LTD"
|
| 39 |
+
prompt = f"### System:\n{system_prompt}\n\n### Input:\n{tx}\n\n### Output:\n"
|
| 40 |
+
|
| 41 |
+
result = client.text_generation(prompt, max_new_tokens=100, temperature=0.1)
|
| 42 |
+
print(result)
|
| 43 |
+
# {"category": "trading_deposit", "company_name": "Zerodha", "is_income": false, "confidence": 0.95}
|
| 44 |
+
```
|
| 45 |
|
| 46 |
## Categories
|
| 47 |
|
|
|
|
| 51 |
|
| 52 |
**Special:** friends, family, flat_deposit, trading_fees, vehicle_purchase, staff_salary, health_fitness, transfer, unclassified
|
| 53 |
|
| 54 |
+
## Pipeline Architecture
|
| 55 |
+
|
| 56 |
+
1. **Rule engine** (70-80% coverage) — regex patterns for known merchants and UPI handles
|
| 57 |
+
2. **Recurring pattern detector** (10% more) — identifies repeating transactions
|
| 58 |
+
3. **Fine-tuned Qwen 0.5B** (remaining) — LLM fallback for uncertain transactions
|
| 59 |
+
|
| 60 |
+
## Run locally
|
| 61 |
+
|
| 62 |
+
```bash
|
| 63 |
+
pip install transformers torch
|
| 64 |
+
```
|
| 65 |
|
| 66 |
```python
|
| 67 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
|
|
|
| 70 |
tokenizer = AutoTokenizer.from_pretrained("SahilGoel/indian-txn-classifier")
|
| 71 |
|
| 72 |
system_prompt = "You are a bank transaction classifier for Indian bank statements..."
|
| 73 |
+
input_text = "UPI/swiggybengaluru@/HDFC BANK LTD"
|
|
|
|
| 74 |
prompt = f"### System:\n{system_prompt}\n\n### Input:\n{input_text}\n\n### Output:\n"
|
| 75 |
|
| 76 |
inputs = tokenizer(prompt, return_tensors="pt")
|
| 77 |
+
outputs = model.generate(**inputs, max_new_tokens=100, temperature=0.1, do_sample=False)
|
| 78 |
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
|
| 79 |
```
|
| 80 |
|
| 81 |
+
## Run on Google Colab (free GPU)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
|
| 83 |
+
Open `app.py` from the GitHub repo in a Colab notebook — it works as a Gradio app with a public share link.
|
|
|
|
|
|
|
| 84 |
|
| 85 |
## Supported Banks
|
| 86 |
|