File size: 1,714 Bytes
e0f9996
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
import torch
from gtts import gTTS
import tempfile
import os

models = {
    "English to Hindi": "Helsinki-NLP/opus-mt-en-hi",
    "Hindi to English": "Helsinki-NLP/opus-mt-hi-en",
    "Hindi to Sanskrit": "ai4bharat/indictrans-hin-san",
    "English to Sanskrit": "ai4bharat/indictrans-en-san"
}

loaded_models = {}

def load_model(direction):
    if direction not in loaded_models:
        tokenizer = AutoTokenizer.from_pretrained(models[direction])
        model = AutoModelForSeq2SeqLM.from_pretrained(models[direction])
        loaded_models[direction] = (tokenizer, model)
    return loaded_models[direction]

chat_history = []

def translate(text, direction):
    tokenizer, model = load_model(direction)
    inputs = tokenizer(text, return_tensors="pt", padding=True)
    outputs = model.generate(**inputs)
    translated = tokenizer.decode(outputs[0], skip_special_tokens=True)

    # memory
    chat_history.append((text, translated))
    return translated

def text_to_speech(text):
    tts = gTTS(text)
    temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
    tts.save(temp_file.name)
    return temp_file.name

with gr.Blocks() as demo:
    gr.Markdown("## 🌐 Translator Chatbot with Voice")

    with gr.Row():
        input_text = gr.Textbox(label="Enter Text", lines=2)
        direction = gr.Dropdown(list(models.keys()), label="Translate Direction")
        output_text = gr.Textbox(label="Translated Text", lines=2)
    
    translate_btn = gr.Button("🔁 Translate")
    tts_btn = gr.Button("🔊 Play Voice")
    audio_output = gr.Audio()

    translate_btn.click(fn=translate, inputs=[