|
import os |
|
import time |
|
|
|
import requests |
|
import streamlit as st |
|
|
|
API_URL = "https://api-inference.huggingface.co/models/pere/nb-nn-translation" |
|
|
|
|
|
def translate(text, wait=True): |
|
headers = {"Authorization": f"Bearer {os.environ['BEARER']}"} |
|
payload = { |
|
"inputs": text, |
|
"options": { |
|
"wait_for_model": not wait |
|
} |
|
} |
|
response = requests.post(API_URL, headers=headers, json=payload) |
|
json_response = response.json() |
|
if (isinstance(json_response, dict) |
|
and "error" in json_response |
|
and "estimated_time" in json_response): |
|
st.write(json_response) |
|
if wait: |
|
with st.spinner(json_response["error"]): |
|
bar = st.progress(0) |
|
time_to_load = int(json_response["estimated_time"]) + 1 |
|
for progress in range(time_to_load): |
|
bar.progress(progress / time_to_load) |
|
time.sleep(1) |
|
bar.empty() |
|
return translate(text, wait=False) |
|
else: |
|
return "We could not load the model" |
|
elif (isinstance(json_response, list) |
|
and "translation_text" in json_response[0]): |
|
return json_response[0]["translation_text"] |
|
else: |
|
return f"Oops, something went wrong: {str(json_response)}" |
|
|
|
|
|
st.set_page_config( |
|
page_title='Norwegian Bokmål to Nynorsk', |
|
page_icon='translator-icon.png', |
|
) |
|
st.title("Bokmål ⇔ Nynorsk") |
|
st.sidebar.write(""" |
|
# Sample text: |
|
### Nynorsk |
|
Dette er ei tekst. |
|
### Bokmål |
|
Dette er en tekst. |
|
|
|
|
|
|
|
""") |
|
|
|
masked_texts = [ |
|
"Min tekst", |
|
"Din tekst" |
|
] |
|
input_text = st.sidebar.selectbox("Select a Text", options=masked_texts) |
|
masked_text = st.text_input("Please type a masked sentence to fill", input_text) |
|
|
|
text = st.text_area("Enter text:", |
|
height=None, |
|
max_chars=None, |
|
key=None, |
|
help="Enter your text here", |
|
) |
|
|
|
if st.button('Translate'): |
|
if str(text).strip() == "": |
|
st.warning('Please **enter text** for translation') |
|
else: |
|
st.info(str(translate(text))) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|