|
|
import gradio as gr |
|
|
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline |
|
|
|
|
|
|
|
|
MODEL_OPTIONS = { |
|
|
"Prithivida GEC v1": "prithivida/grammar_error_correcter_v1", |
|
|
"Hassaanik GEC": "hassaanik/grammar-correction-model", |
|
|
"Vennify T5 GEC": "vennify/t5-base-grammar-correction" |
|
|
} |
|
|
|
|
|
|
|
|
loaded_pipelines = {} |
|
|
|
|
|
def get_pipeline(model_id): |
|
|
if model_id not in loaded_pipelines: |
|
|
tokenizer = AutoTokenizer.from_pretrained(model_id) |
|
|
model = AutoModelForSeq2SeqLM.from_pretrained(model_id) |
|
|
loaded_pipelines[model_id] = pipeline("text2text-generation", |
|
|
model=model, |
|
|
tokenizer=tokenizer) |
|
|
return loaded_pipelines[model_id] |
|
|
|
|
|
def oxford_polish(sentence: str, model_choice: str) -> str: |
|
|
model_id = MODEL_OPTIONS[model_choice] |
|
|
polisher = get_pipeline(model_id) |
|
|
prompt = ( |
|
|
"Correct this sentence into formal written English, following the Oxford University Style Guide. " |
|
|
"Ensure tense matches time expressions (e.g. 'tomorrow' → future, 'yesterday' → past), " |
|
|
"use British spelling, apply the Oxford comma, and correct uncountable nouns naturally. " |
|
|
"Sentence: " + sentence |
|
|
) |
|
|
out = polisher(prompt, max_new_tokens=80, do_sample=False) |
|
|
return out[0]["generated_text"].strip() |
|
|
|
|
|
|
|
|
demo = gr.Interface( |
|
|
fn=oxford_polish, |
|
|
inputs=[ |
|
|
gr.Textbox(lines=2, placeholder="Enter a sentence to correct..."), |
|
|
gr.Dropdown(choices=list(MODEL_OPTIONS.keys()), value="Prithivida GEC v1", label="Choose Model") |
|
|
], |
|
|
outputs=gr.Textbox(label="Oxford-style Correction"), |
|
|
title="Oxford Grammar Polisher", |
|
|
description="Test multiple free grammar correction models from Hugging Face Hub with Oxford-grammar rules." |
|
|
) |
|
|
|
|
|
demo.launch() |
|
|
|