nlp1 / code /qa.py
Aakash Goel
tail changes
5dc8391
raw
history blame
3.34 kB
import streamlit as st
from transformers import pipeline
import pandas as pd
import datetime
import base64
import os
@st.cache(allow_output_mutation = True)
def load_model():
question_answerer = pipeline('question-answering')
return question_answerer
#function to convert any dataframe to a csv file
# @st.cache
output_path = "results/df_log_file.csv"
def csv_downloader(df):
# IMPORTANT: Cache the conversion to prevent computation on every rerun
res = df.to_csv(index=False,sep="\t").encode('utf-8')
st.download_button(
label="Download logs data as CSV separated by tab",
data=res,
file_name='df_log_file.csv',
mime='text/csv')
def load_file():
"""Load text from file"""
uploaded_file = st.file_uploader("Upload Files",type=['txt'])
if uploaded_file is not None:
if uploaded_file.type == "text/plain":
raw_text = str(uploaded_file.read(),"utf-8")
return raw_text
st.markdown('![Visitor count](https://shields-io-visitor-counter.herokuapp.com/badge?page=https://share.streamlit.io/https://huggingface.co/spaces/aakashgoel12/nlp1&label=VisitorsCount&labelColor=000000&logo=GitHub&logoColor=FFFFFF&color=1D70B8&style=for-the-badge)')
# Loading Model
question_answerer =load_model()
# App title and description
st.title("Answering questions from text")
st.write("Upload text, pose questions, get answers")
# Load file
st.text("Disclaimer: This app stores user's input for model improvement purposes !!")
raw_text = load_file()
if raw_text != None and raw_text != '':
# Display text
with st.expander("See text"):
st.write(raw_text)
answer = ''
question = st.text_input('Ask a question')
if question != '' and raw_text != '':
answer = question_answerer({
'question': question,
'context': raw_text
})
st.write("Answer: {}".format(answer["answer"]))
st.write("Confidence score: {}".format(round(answer["score"],2)))
res_df = pd.DataFrame({"TimeStamp":[str(datetime.datetime.now())],\
"Question":[question],\
"Input":[str(raw_text)],\
"Answer":[str(answer["answer"])],\
"Score":[str(round(answer["score"],2))]})
res_df.to_csv(output_path, mode='a', index=False, sep="\t", header= not os.path.exists(output_path))
st.dataframe(pd.read_csv(output_path,sep="\t").tail(4))
csv_downloader(pd.read_csv(output_path,sep="\t"))
# def csv_downloader(data):
# csvfile = data.to_csv()
# b64 = base64.b64encode(csvfile.encode()).decode()
# new_filename = "results/df_log_file.csv"
# st.markdown("#### Download File ###")
# href = f'<a href="data:file/tsv;base64,{b64}" download="{new_filename}">Click Here!!</a>'
# st.markdown(href,unsafe_allow_html=True)
# log_file_object = open('../logs/log_file.tsv','a')
# log_file_object.write(str(datetime.datetime.now())+'\t'+str(raw_text)+'\t'+str(answer["answer"])+'\t'+str(answer["score"]))
# log_file_object.write('\n')
# log_file_object.close()
# @st.cache(allow_output_mutation=True)
# def Pageviews():
# return []
# pageviews=Pageviews()
# pageviews.append('dummy')
# try:
# st.markdown('Page viewed = {} times.'.format(len(pageviews)))
# except ValueError:
# st.markdown('Page viewed = {} times.'.format(1))