import streamlit as st from transformers import AutoModelForSeq2SeqLM, AutoTokenizer # Function to load the translation model @st.cache_resource def load_model(model_name): tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSeq2SeqLM.from_pretrained(model_name) return tokenizer, model # Function to perform translation def translate_text(tokenizer, model, input_text, src_lang, tgt_lang): # Format the input text for the model input_text = f">>{tgt_lang}<< {input_text}" # Add language token inputs = tokenizer(input_text, return_tensors="pt", padding=True, truncation=True, max_length=512) outputs = model.generate(**inputs, max_length=512) translated_text = tokenizer.decode(outputs[0], skip_special_tokens=True) return translated_text # Streamlit app def main(): st.title("Language Translation App") st.markdown("Translate text between multiple languages using open-source models.") # Language options (expand as needed) languages = { "English": "en", "French": "fr", "German": "de", "Spanish": "es", "Chinese": "zh", "Arabic": "ar", "Hindi": "hi", "Urdu": "ur", "Russian": "ru", "Japanese": "ja", } # Sidebar for language selection st.sidebar.header("Settings") src_lang = st.sidebar.selectbox("Select Input Language", options=languages.keys()) tgt_lang = st.sidebar.selectbox("Select Output Language", options=languages.keys()) # Input text text_to_translate = st.text_area("Enter text to translate", height=150) # Load model and tokenizer model_name = "Helsinki-NLP/opus-mt-mul-en" # Multi-lingual to English model tokenizer, model = load_model(model_name) # Translate button if st.button("Translate"): if text_to_translate.strip() == "": st.error("Please enter some text to translate.") elif src_lang == tgt_lang: st.warning("Input and output languages are the same. Please select different languages.") else: # Perform translation st.spinner("Translating...") translated_text = translate_text(tokenizer, model, text_to_translate, languages[src_lang], languages[tgt_lang]) st.success("Translation Complete!") st.text_area("Translated Text", translated_text, height=150) if __name__ == "__main__": main()