Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from language_directions import * | |
| from transformers import pipeline | |
| from adibideak import adibide_esaldiak | |
| from PIL import Image | |
| def local_css(file_name): | |
| with open(file_name) as f: | |
| st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True) | |
| st.set_page_config( | |
| page_title="Streamlit iCodeIdoia: Basque (EU) Euskera Multilingual Translator (Basque as the Starting Point)", | |
| ) | |
| st.image("images/banner.jpg") | |
| # ---- LOAD | |
| local_css("styles/style.css") | |
| source_lang_dict = get_all_source_languages() | |
| target_lang_dict = {} | |
| source_languages = source_lang_dict.keys() | |
| def get_auto_detect_source_dropdown(input_text): | |
| source, _ = auto_detect_language_code(input_text) | |
| language_name = get_name_from_iso_code(source) | |
| source_dropdown_text = "Detected - " + language_name | |
| update_source_languages_dict(source_lang_dict, source_dropdown_text) | |
| source_language_dropdown = st.selectbox(choices=source_languages, | |
| value=source_dropdown_text, | |
| label="Input Language") | |
| return source_language_dropdown, language_name | |
| def get_target_dropdown(source_language_name, input_text): | |
| global target_lang_dict | |
| target_lang_dict, source_language = get_target_languages(source_lang_dict[source_language_name], input_text) | |
| target_languages = list(target_lang_dict.keys()) | |
| default_target_value = None | |
| if "English" in target_languages or "english" in target_languages: | |
| default_target_value = "English" | |
| else: | |
| default_target_value = target_languages[0] | |
| target_dropdown = st.selectbox(choices=target_languages, | |
| value=default_target_value, | |
| label="Output Language") | |
| return target_dropdown | |
| def get_dropdown_value(dropdown): | |
| if isinstance(dropdown, st.selectbox): | |
| dropdown_value = dropdown.constructor_args.get('value') | |
| elif isinstance(dropdown, str): | |
| dropdown_value = dropdown | |
| return dropdown_value | |
| def get_dropdowns(source_dropdown, input_text): | |
| source_language_name = get_dropdown_value(source_dropdown) | |
| if input_text and source_language_name == "Detect" or source_language_name.startswith("Detected"): | |
| source_dropdown, source_language_name = get_auto_detect_source_dropdown(input_text) | |
| target_dropdown = get_target_dropdown(source_language_name=source_language_name, | |
| input_text=input_text) | |
| return source_dropdown, target_dropdown | |
| def input_changed(source_language_dropdown, input_text=""): | |
| return get_dropdowns(source_dropdown=source_language_dropdown, | |
| input_text=input_text) | |
| def translate(input_text, source, target): | |
| source_readable = source | |
| if source == "Detect" or source.startswith("Detected"): | |
| source, _ = auto_detect_language_code(input_text) | |
| if source in source_lang_dict.keys(): | |
| source = source_lang_dict[source] | |
| target_lang_dict, _ = get_target_languages(source) | |
| try: | |
| target = target_lang_dict[target] | |
| model = f"Helsinki-NLP/opus-mt-{source}-{target}" | |
| pipe = pipeline("translation", model=model) | |
| translation = pipe(input_text) | |
| return translation[0]['translation_text'] | |
| except KeyError: | |
| return f"Error: Translation from {source_readable} to {target} is not supported by Translation Models" | |
| with st.container(): | |
| st.header("Basque (EU) Euskera Multilingual Translator (Basque as the Starting Point)") | |
| st.caption("This is an AI translator using language models - Hau hizkuntza-ereduak erabiltzen dituen IA itzultzaile bat da. Oraingoz lau hizkuntzetara itzultzen du.") | |
| me = """<div>More about <a href="https://webdevserv.github.io/html_bites/dev/webdev.html" target="_blank">me</a> and some <a href="https://webdevserv-portfolio-idoia-icodeidoia-portfolio-9kblei.streamlit.app" target="_blank">apps</a></div>""" | |
| st.markdown(me, unsafe_allow_html=True) | |
| coffee = """ | |
| <div style="margin: 0.75em 0;"><a href="https://www.buymeacoffee.com/Artgen" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="41" width="174"></a></div> | |
| """ | |
| st.markdown("""<div style="margin: 0.75em 0;"><a href="https://www.buymeacoffee.com/Artgen" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="41" width="174"></a></div> | |
| <div style="margin: 0.75em 0;">But what would really help me is a <strong>PRO subscription</strong> to Google Colab, Kaggle or Hugging Face. Many thanks.</div>""", unsafe_allow_html=True) | |
| col1, col2 = st.columns([1,1], gap="small") | |
| with col1: | |
| #source_language_dropdown.change | |
| slang = ("Detect", "Basque") # Example list of languages | |
| source_language_dropdown = st.selectbox("Language - Hizkuntza", slang, key='source_languages') | |
| # Create a text area widget | |
| input_textbox = st.text_area("Enter text - Idatzi textua", value="", key='input_text') | |
| data_load_state = st.text("") | |
| with col2: | |
| tlang=("","English","German","Russian","Spanish") | |
| target_language_dropdown = st.selectbox("Translation - Itzulpena", tlang, key='target_languages') | |
| if st.button('Itzuli - Translate') and len(input_textbox)> 0: | |
| translated_output = translate(input_textbox,source_language_dropdown,target_language_dropdown) | |
| st.text_area("Itzulpena - Translation", value=translated_output, disabled=True) | |
| def load_data(inputt,inputl,targetl): | |
| data = translate(inputt,inputl,targetl) | |
| data_load_state.text("") | |
| return data | |
| if len(target_language_dropdown)>1 and len(source_language_dropdown)>0 and target_language_dropdown!= "" and source_language_dropdown!="Detect" and len(input_textbox)>0: | |
| data_load_state.text("Itzultzena amaituta...") | |
| data = load_data(input_textbox,source_language_dropdown,target_language_dropdown) |