File size: 2,478 Bytes
fd89216
 
10fe3cf
ea5da31
10fe3cf
ec21afd
09d6a1f
10fe3cf
 
 
 
09d6a1f
10fe3cf
 
 
 
 
 
 
 
 
 
09d6a1f
 
10fe3cf
 
 
 
09d6a1f
10fe3cf
 
 
 
 
 
 
 
 
 
 
ea5da31
10fe3cf
 
ea5da31
10fe3cf
09d6a1f
 
10fe3cf
 
 
e66e316
09d6a1f
10fe3cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b08e390
10fe3cf
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
import os
import gradio as gr
from transformers import pipeline

# === Load Hugging Face token (only needed if Space is private) ===
auth_token = os.getenv("HF_API_TOKEN")

# === Choose your model (pick one that works best for you) ===
MODEL_NAME = "Helsinki-NLP/opus-mt-en-bn"   # English β†’ Bengali
# MODEL_NAME = "shhossain/opus-mt-en-to-bn"  # Alternate
# MODEL_NAME = "facebook/nllb-200-distilled-600M"  # Multi-language

# === Load translation pipeline ===
try:
    translator = pipeline(
        "translation",
        model=MODEL_NAME,
        token=auth_token  # Works for private Spaces
    )
except Exception as e:
    translator = None
    print("❌ Error loading model:", e)


# === Define translation function ===
def translate_text(text, direction):
    if not translator:
        return "⚠️ Model not loaded. Check HF_API_TOKEN for private Spaces."

    try:
        if direction == "English β†’ Bengali":
            result = translator(text, src="en", tgt="bn")
        elif direction == "Bengali β†’ English":
            # For reverse, swap model if needed
            rev_translator = pipeline(
                "translation",
                model="Helsinki-NLP/opus-mt-bn-en",
                token=auth_token
            )
            result = rev_translator(text)
        else:
            return "⚠️ Unknown direction."
        return result[0]['translation_text']
    except Exception as e:
        return f"⚠️ Translation failed: {str(e)}"


# === Gradio UI ===
with gr.Blocks(title="Private English ↔ Bengali Translator") as demo:
    gr.Markdown("## 🌐 English ↔ Bengali Translator (Private Space Ready)")

    with gr.Row():
        with gr.Column():
            input_text = gr.Textbox(
                label="Enter text",
                placeholder="Type here...",
                lines=5
            )
            direction = gr.Radio(
                ["English β†’ Bengali", "Bengali β†’ English"],
                value="English β†’ Bengali",
                label="Select Translation Direction"
            )
            translate_btn = gr.Button("Translate", variant="primary")

        with gr.Column():
            output_text = gr.Textbox(
                label="Translation Result",
                lines=5
            )

    translate_btn.click(
        fn=translate_text,
        inputs=[input_text, direction],
        outputs=[output_text]
    )

# === Launch app ===
if __name__ == "__main__":
    demo.launch()