Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from transformers import AutoTokenizer, AutoModelForSeq2SeqLM | |
| import torch | |
| MODELS = { | |
| "Moderate sentences (v1)": "Omarrran/koshur-diacritizer-byt5-small", | |
| "Longer sentences (v2)": "Omarrran/koshur-diacritizer-byt5-small-v2", | |
| } | |
| # Load both models once at startup and cache them | |
| loaded = {} | |
| for label, repo_id in MODELS.items(): | |
| print(f"Loading {label} -> {repo_id} ...") | |
| tok = AutoTokenizer.from_pretrained(repo_id) | |
| mdl = AutoModelForSeq2SeqLM.from_pretrained(repo_id) | |
| mdl.eval() | |
| loaded[label] = (tok, mdl) | |
| print(f" loaded {label}.") | |
| print("All models loaded.") | |
| def diacritize(text: str, model_choice: str, max_tokens: int) -> str: | |
| if not text or not text.strip(): | |
| return "" | |
| tokenizer, model = loaded[model_choice] | |
| inputs = tokenizer(text.strip(), return_tensors="pt", padding=True) | |
| with torch.no_grad(): | |
| out = model.generate(**inputs, max_new_tokens=int(max_tokens)) | |
| return tokenizer.decode(out[0], skip_special_tokens=True) | |
| examples = [ | |
| ["بہ چھس بتہ کھٮوان۔", "Moderate sentences (v1)", 256], | |
| [" تم چھ ٹی وی وچھان۔", "Moderate sentences (v1)", 256], | |
| ["اسۍ چھ کھیل گندان۔", "Moderate sentences (v1)", 256], | |
| ["کاشرۍ پلو چھ اکثر خطہ کس تاریخچ دلیل ونان، یس مختلف ثقافتن ہندۍ اثرات ظاہر کران ", "Longer sentences (v2)", 256], | |
| ["امہ سند مجموعہ چھ خاص تقریبن خاطر اکھ نفیس تہ شوخ شکل پیش کران۔", "Longer sentences (v2)", 256], | |
| ["امۍ سندس مجموعس منز چھ شاندار کپر تہ خوبصورت ڈیزاین شامل، یم خاص موقعن خاطر بہترین چھ۔", "Longer sentences (v2)", 256], | |
| ["انٹر کمیونٹی ڈاییلاگ: خاندرن اندۍ پکہ بین الکمیونٹی مکالمہ چھ مختلف ثقافتی گروپن درمیان تفہیم تہ تعاونس فروغ دیوان۔", "Longer sentences (v2)", 256], | |
| ] | |
| description = """ | |
| ## Koshur Diacritizer — ByT5-Small | |
| This model restores **diacritical marks** (اِعراب) to undiacritized Kashmiri (کٲشُر) text written in Perso-Arabic script. | |
| **Choose a model:** | |
| - **Moderate sentences (v1):** [`Omarrran/koshur-diacritizer-byt5-small`](https://huggingface.co/Omarrran/koshur-diacritizer-byt5-small) | |
| - **Longer sentences (v2):** [`Omarrran/koshur-diacritizer-byt5-small-v2`](https://huggingface.co/Omarrran/koshur-diacritizer-byt5-small-v2) | |
| Enter raw Kashmiri text below or click an example to try instantly. | |
| Note: The Model is about 75.5% Correct. It can make mistakes. Hope To overcome these in next versions. | |
| """ | |
| demo = gr.Interface( | |
| fn=diacritize, | |
| inputs=[ | |
| gr.Textbox( | |
| label="Input Text (undiacritized Kashmiri)", | |
| placeholder="یہاں کٲشُر متن لِکھِو…", | |
| lines=3, | |
| rtl=True, | |
| ), | |
| gr.Radio( | |
| choices=list(MODELS.keys()), | |
| value="Moderate sentences (v1)", | |
| label="Model", | |
| info="Pick v1 for moderate-length sentences, v2 for longer sentences.", | |
| ), | |
| gr.Slider( | |
| minimum=64, | |
| maximum=512, | |
| value=256, | |
| step=32, | |
| label="Max New Tokens", | |
| ), | |
| ], | |
| outputs=gr.Textbox( | |
| label="Diacritized Output", | |
| lines=3, | |
| rtl=True, | |
| ), | |
| examples=examples, | |
| title="کٲشُر ڈایاکرِٹایزر | Koshur Diacritizer", | |
| description=description, | |
| article="Built by [ Haq Nawaz Malik](https://huggingface.co/Omarrran) as part of the Kashmiri language AI infrastructure initiative.", | |
| theme=gr.themes.Soft(), | |
| cache_examples=False, | |
| flagging_mode="never", | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() |