import streamlit as st from transformers import MarianMTModel, MarianTokenizer # Function to load a translation model @st.cache_resource def load_model(src_lang, tgt_lang): model_name = f"Helsinki-NLP/opus-mt-{src_lang}-{tgt_lang}" tokenizer = MarianTokenizer.from_pretrained(model_name) model = MarianMTModel.from_pretrained(model_name) return model, tokenizer def translate_text(text, model, tokenizer): inputs = tokenizer.encode(text, return_tensors="pt", truncation=True) outputs = model.generate(inputs, max_length=512, num_beams=5, early_stopping=True) translated_text = tokenizer.decode(outputs[0], skip_special_tokens=True) return translated_text # Streamlit UI st.title("Multi-Language Translator") st.sidebar.header("Translation Settings") # Input source and target languages src_lang = st.sidebar.text_input("Enter source language code (e.g., 'en' for English):", "en") tgt_lang = st.sidebar.text_input("Enter target language code (e.g., 'ur' for Urdu):", "ur") # Validate language codes if not src_lang.strip() or not tgt_lang.strip(): st.sidebar.error("Please enter valid source and target language codes.") else: # Load the selected model try: st.sidebar.write(f"Model: `{src_lang}-{tgt_lang}`") model, tokenizer = load_model(src_lang.strip(), tgt_lang.strip()) # Input text text_to_translate = st.text_area("Enter text to translate:") # Translate and display output if text_to_translate.strip(): with st.spinner("Translating..."): translated_text = translate_text(text_to_translate, model, tokenizer) st.markdown(f"### Translated Text:\n{translated_text}") except Exception as e: st.error(f"Error loading model for `{src_lang}-{tgt_lang}`: {str(e)}")