from zipfile import ZipFile import os import streamlit as st from lfqa import prepare, answer with ZipFile("doc_store.zip","r") as zip_ref: zip_ref.extractall('.') # Sliders DEFAULT_DOCS_FROM_RETRIEVER = int(os.getenv("DEFAULT_DOCS_FROM_RETRIEVER", "3")) # Adjust to a question that you would like users to see in the search bar when they load the UI: DEFAULT_QUESTION_AT_STARTUP = os.getenv("DEFAULT_QUESTION_AT_STARTUP", "Tell me something about Arya Stark?") def set_state_if_absent(key, value): if key not in st.session_state: st.session_state[key] = value def reset_results(*args): st.session_state.answer = None st.session_state.results = None def main(pipe): st.set_page_config(page_title="Haystack Demo", page_icon="https://haystack.deepset.ai/img/HaystackIcon.png") # Persistent state set_state_if_absent("question", DEFAULT_QUESTION_AT_STARTUP) set_state_if_absent("results", None) st.write("# Long-Form Question Answering") st.markdown(""" This demo takes its data from a selection of Wikipedia pages on the topic of the **Game of Thrones** TV series """) # Sidebar st.sidebar.header("Options") top_k_retriever = st.sidebar.slider( "Max. number of documents from retriever", min_value=1, max_value=10, value=DEFAULT_DOCS_FROM_RETRIEVER, step=1, on_change=reset_results, ) # eval_mode = st.sidebar.checkbox("Evaluation mode") # debug = st.sidebar.checkbox("Show debug info") st.sidebar.markdown( """ """, unsafe_allow_html=True, ) # Search bar question = st.text_input( value=st.session_state.question, max_chars=100, on_change=reset_results, label="question", label_visibility="hidden", ) col1, col2 = st.columns(2) col1.markdown("", unsafe_allow_html=True) # Run button run_pressed = col1.button("Run") run_query = run_pressed or (question != st.session_state.question) if run_query and question: reset_results() st.session_state.question = question with st.spinner( "🧠    Performing neural search on documents... \n "): try: st.session_state.results = answer(pipe, question, top_k_retriever) # except JSONDecodeError as je: # st.error("👓    An error occurred reading the results. Is the document store working?") # return except Exception as e: # logging.exception(e) if "The server is busy processing requests" in str(e) or "503" in str(e): st.error("🧑‍🌾    All our workers are busy! Try again later.") else: st.error("🐞    An error occurred during the request.") return if st.session_state.results: st.session_state.answer = st.session_state.results['answers'][0].answer st.write(st.session_state.answer) st.write('Doc IDs:') st.write(st.session_state.results['answers'][0].meta['doc_ids']) st.write('Doc Scores:') st.write(st.session_state.results['answers'][0].meta['doc_scores']) for i in range(top_k_retriever): st.write(st.session_state.results['answers'][0].meta['content'][i]) st.markdown('---\n') pipe = prepare() main(pipe)