Views
No views yet
1import gradio as gr
2from transformers import AutoTokenizer, AutoModelForCausalLM
3from peft import PeftModel
4import torch
5import re
6
7MODEL_PATH = "panchajanya-ai/Sankhaya_Indic_ITN"
8FINETUNED_ADAPTER_PATH = "panchajanya-ai/Sankhaya_Indic_ITN"
9
10# Load model & tokenizer
11tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
12base_model = AutoModelForCausalLM.from_pretrained(
13 MODEL_PATH,
14 torch_dtype=torch.float32,
15 device_map="cpu"
16)
17
18try:
19 model = PeftModel.from_pretrained(base_model, FINETUNED_ADAPTER_PATH)
20except Exception:
21 model = base_model
22
23model.eval()
24
25alpaca_prompt = """### Instruction:
26Convert the Hindi number words to numeric form.
27
28### Input:
29{}
30
31### Response:
32"""
33
34# Define common Hindi number word to digit map
35with open("hindi_number_mappings.txt", "r", encoding="utf-8") as file:
36 file_content = file.read()
37
38# Safely evaluate the string content as a Python dictionary
39STATIC_NUM_WORD_MAP = ast.literal_eval(file_content)
40
41# Extract all the keys (Hindi number words) into HINDI_NUM_WORDS
42HINDI_NUM_WORDS = list(STATIC_NUM_WORD_MAP.keys())
43
44# Extract number word chunks from sentence
45def extract_all_number_chunks(sentence):
46 words = sentence.split()
47 chunks, temp = [], []
48 for word in words:
49 if word in HINDI_NUM_WORDS or re.match(r"^[०-९]+$", word):
50 temp.append(word)
51 else:
52 if temp:
53 chunks.append(" ".join(temp))
54 temp = []
55 if temp:
56 chunks.append(" ".join(temp))
57 return chunks
58
59# Run LLM if not static mapped
60def convert_digit_words_to_number(chunk):
61 # First check static map
62 if chunk in STATIC_NUM_WORD_MAP:
63 return STATIC_NUM_WORD_MAP[chunk]
64
65 # Else ask model
66 prompt = alpaca_prompt.format(chunk)
67 inputs = tokenizer(prompt, return_tensors="pt").to("cpu")
68 outputs = model.generate(
69 **inputs,
70 max_new_tokens=10,
71 use_cache=True,
72 eos_token_id=tokenizer.eos_token_id
73 )
74 decoded = tokenizer.decode(outputs[0], skip_special_tokens=True)
75 match = re.search(r"Response:\s*(\d+)", decoded)
76 return match.group(1) if match else None
77
78# Main replacement function
79def remove_duplicates(s):
80 seen = set()
81 result = []
82 for char in s:
83 if char not in seen:
84 seen.add(char)
85 result.append(char)
86 return ''.join(result)
87def ITN(sentence: str) -> str:
88 chunks = extract_all_number_chunks(sentence)
89 for chunk in chunks:
90 numeric = convert_digit_words_to_number(chunk)
91 if numeric:
92 sentence = sentence.replace(chunk, numeric)
93 return sentence
94
95result = ITN("कृष्ण को पैंतालीस हजार बानवे रुपये भेजें")
96print(result)