import streamlit as st
from multiprocessing import Process
import json
import requests
import time
import os
def start_server():
'''Helper to start to service through Unicorn '''
os.system("uvicorn InferenceServer:app --port 8080 --host 0.0.0.0 --workers 2")
def load_models():
'''One time loading/ Init of models and starting server as a seperate process'''
if not is_port_in_use(8080):
with st.spinner(text="Loading model, please wait..."):
proc = Process(target=start_server, args=(), daemon=True)
proc.start()
while not is_port_in_use(8080):
time.sleep(1)
st.success("Model server started.")
else:
st.success("Model server already running...")
st.session_state['models_loaded'] = True
def is_port_in_use(port):
'''Helper to check if service already running'''
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
return s.connect_ex(('0.0.0.0', port)) == 0
if 'models_loaded' not in st.session_state:
st.session_state['models_loaded'] = False
def get_correction(input_text):
'''Invokes the inference service'''
st.markdown(f'##### Corrected text:')
st.write('')
correct_request = "http://0.0.0.0:8080/restore?input_sentence="+input_text
with st.spinner('Wait for it...'):
correct_response = requests.get(correct_request)
correct_json = json.loads(correct_response.text)
corrected_sentence = correct_json["corrected_sentence"]
result = diff_strings(corrected_sentence,input_text)
st.markdown(result, unsafe_allow_html=True)
def diff_strings(output_text, input_text):
'''Highlights corrections'''
c_text = ""
for x in output_text.split(" "):
if x in input_text.split(" "):
c_text = c_text + x + " "
else:
c_text = c_text + '' + x + '' + " "
return c_text
if __name__ == "__main__":
st.title('Rpunct Streamlit App')
st.subheader('For Punctuation and Upper Case restoration')
st.markdown("Model by [felflare](https://huggingface.co/felflare/bert-restore-punctuation) and app example by [anuragshas](https://huggingface.co/spaces/anuragshas/restore-punctuation-demo)", unsafe_allow_html=True)
st.markdown("Model restores the following punctuations -- [! ? . , - : ; ' ] and also the upper-casing of words.")
examples = [
"my name is clara and i live in berkeley california",
"in 2018 cornell researchers built a high-powered detector",
"lorem ipsum has been the industrys standard dummy text ever since the 1500s when an unknown printer took a galley of type and scrambled it to make a type specimen book"
]
if not st.session_state['models_loaded']:
load_models()
input_text = st.selectbox(
label="Choose an example",
options=examples
)
st.write("(or)")
input_text = st.text_input(
label="Input sentence",
value=input_text
)
if input_text.strip():
get_correction(input_text)
hide_streamlit_style = """
"""
st.markdown(hide_streamlit_style, unsafe_allow_html=True)