File size: 2,927 Bytes
b887515
 
 
 
 
 
 
 
 
 
 
 
4e0cddf
 
b887515
 
 
4e0cddf
b887515
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4e0cddf
 
b887515
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import gradio as gr
from transformers import pipeline, AutoModelForSeq2SeqLM, AutoTokenizer
import os

# Define model paths
MODEL_PATHS = {
    "Terjman-Nano-v2": "BounharAbdelaziz/Terjman-Nano-v2.0",
    "Terjman-Large-v2": "BounharAbdelaziz/Terjman-Large-v2.0",
    "Terjman-Ultra-v2": "BounharAbdelaziz/Terjman-Ultra-v2.0",
    "Terjman-Supreme-v2": "BounharAbdelaziz/Terjman-Supreme-v2.0"
}

# Load environment token
TOKEN = os.environ['TOKEN']

# Translation function for Nano and Large models
def translate_nano_large(text, model_path):
    translator = pipeline("translation", model=model_path, token=TOKEN)
    translated = translator(
        text, 
        max_length=512,
        num_beams=4,
        no_repeat_ngram_size=3,
        early_stopping=True,
        do_sample=False,
        pad_token_id=translator.tokenizer.pad_token_id,
        bos_token_id=translator.tokenizer.bos_token_id,
        eos_token_id=translator.tokenizer.eos_token_id
    )
    return translated[0]["translation_text"]

# Translation function for Ultra and Supreme models
def translate_ultra_supreme(text, model_path):
    model = AutoModelForSeq2SeqLM.from_pretrained(model_path, token=TOKEN)
    tokenizer = AutoTokenizer.from_pretrained(model_path, src_lang="eng_Latn", tgt_lang="ary_Arab", token=TOKEN)
    translator = pipeline(
        "translation",
        model=model,
        tokenizer=tokenizer,
        max_length=512,
        src_lang="eng_Latn",
        tgt_lang="ary_Arab"
    )
    translation = translator(text)[0]['translation_text']
    return translation

# Main translation function
def translate_text(text, model_choice):
    model_path = MODEL_PATHS[model_choice]
    if model_choice in ["Terjman-Nano-v2", "Terjman-Large-v2"]:
        return translate_nano_large(text, model_path)
    elif model_choice in ["Terjman-Ultra-v2", "Terjman-Supreme-v2"]:
        return translate_ultra_supreme(text, model_path)
    else:
        return "Invalid model selection."

# Gradio app
def gradio_app():
    with gr.Blocks() as app:
        gr.Markdown("# 🇲🇦 Terjman-v2")
        gr.Markdown("Choose a model and enter the English text you want to translate to Moroccan Darija.")

        model_choice = gr.Dropdown(
            label="Select Model",
            choices=["Terjman-Nano-v2", "Terjman-Large-v2", "Terjman-Ultra-v2", "Terjman-Supreme-v2"],
            value="Terjman-Ultra-v2"
        )
        input_text = gr.Textbox(label="Input Text", placeholder="Enter text to translate...", lines=3)
        output_text = gr.Textbox(label="Translated Text", interactive=False, lines=3)
        translate_button = gr.Button("Translate")

        # Link input and output
        translate_button.click(
            fn=translate_text,
            inputs=[input_text, model_choice],
            outputs=output_text
        )

    return app

# Run the app
if __name__ == "__main__":
    app = gradio_app()
    app.launch()