Linguify / app.py
Asanari's picture
Create app.py
8e3c5bd verified
Raw
History Blame Contribute Delete
2.62 kB
import gradio as gr
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
import os
# Load the model and tokenizer
model_name = "facebook/nllb-200-distilled-600M"
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Get all available language codes
available_languages = list(tokenizer.lang_code_to_id.keys())
def translate_text(text, src_lang, tgt_lang):
try:
inputs = tokenizer(text, return_tensors="pt", src_lang=src_lang)
outputs = model.generate(
**inputs,
forced_bos_token_id=tokenizer.lang_code_to_id[tgt_lang],
max_length=128
)
translated_text = tokenizer.batch_decode(outputs, skip_special_tokens=True)[0]
return translated_text
except Exception as e:
return f"Translation error: {str(e)}"
def translate_file(file, src_lang, tgt_lang):
try:
content = file.read().decode('utf-8')
translated = translate_text(content, src_lang, tgt_lang)
output_path = os.path.join("translated", f"translated_{file.name}")
os.makedirs(os.path.dirname(output_path), exist_ok=True)
with open(output_path, 'w', encoding='utf-8') as f:
f.write(translated)
return f"Translation saved to {output_path}"
except Exception as e:
return f"File translation error: {str(e)}"
with gr.Blocks() as demo:
gr.Markdown("# NLLB Translator")
with gr.Tab("Text Translation"):
with gr.Row():
src_lang = gr.Dropdown(choices=available_languages, label="Source Language")
tgt_lang = gr.Dropdown(choices=available_languages, label="Target Language")
input_text = gr.Textbox(lines=5, label="Input Text")
output_text = gr.Textbox(lines=5, label="Translated Text")
translate_btn = gr.Button("Translate Text")
translate_btn.click(fn=translate_text, inputs=[input_text, src_lang, tgt_lang], outputs=output_text)
with gr.Tab("File Translation"):
file_input = gr.File(label="Upload file to translate")
file_src_lang = gr.Dropdown(choices=available_languages, label="Source Language")
file_tgt_lang = gr.Dropdown(choices=available_languages, label="Target Language")
file_output = gr.Textbox(label="Translation Status")
file_translate_btn = gr.Button("Translate File")
file_translate_btn.click(fn=translate_file, inputs=[file_input, file_src_lang, file_tgt_lang], outputs=file_output)
gr.Markdown(f"Currently using the {model_name} AI translation model")
demo.launch(share=True)