File size: 1,983 Bytes
d530258
 
6a8b2c9
d530258
 
 
 
 
 
 
 
 
6a8b2c9
 
d530258
 
 
 
 
 
 
6a8b2c9
 
d530258
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6a8b2c9
 
 
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
import streamlit as st
from transformers import MarianMTModel, MarianTokenizer
import torch

# Title and Description
st.set_page_config(page_title='Language Translation App', layout='centered')
st.title('Language Translation App')
st.write('Translate text between multiple languages using an open-source model.')

# Model Selection
@st.cache_resource
def load_model(src_lang, tgt_lang):
    if not torch.cuda.is_available():
        st.warning('CUDA is not available. The model will run on CPU, which may be slower.')
    model_name = f'Helsinki-NLP/opus-mt-{src_lang}-{tgt_lang}'
    tokenizer = MarianTokenizer.from_pretrained(model_name)
    model = MarianMTModel.from_pretrained(model_name)
    return tokenizer, model

# Sidebar for Language Selection
st.sidebar.header('Language Selection')
src_lang = st.sidebar.selectbox('Select Source Language', ['en', 'fr', 'es', 'de', 'it', 'pt', 'ru', 'zh', 'ja', 'ar'], index=0)
tgt_lang = st.sidebar.selectbox('Select Target Language', ['en', 'fr', 'es', 'de', 'it', 'pt', 'ru', 'zh', 'ja', 'ar'], index=1)

# Main Input Area
st.write('### Enter text to translate:')
text = st.text_area('Text Input', placeholder='Type your text here...')

# Translation Button
if st.button('Translate'):
    if text.strip() == '':
        st.warning('Please enter text to translate.')
    else:
        try:
            tokenizer, model = load_model(src_lang, tgt_lang)
            inputs = tokenizer.encode(text, return_tensors='pt')
            translated = model.generate(inputs, max_length=1000, num_beams=5, early_stopping=True)
            result = tokenizer.decode(translated[0], skip_special_tokens=True)
            st.success('### Translated Text:')
            st.write(result)
        except Exception as e:
            st.error(f'Error: {e}')

# Footer
st.sidebar.write('Powered by Helsinki-NLP/opus-mt')
st.sidebar.write('Built with Streamlit')

# Instructions for Running
st.write('**To run the app:**')
st.code('streamlit run app.py')