import streamlit as st from Retrieval import bsic_chain, multiQuery_chain import time from htmlTemplates import css, bot_template, user_template, source_template st.set_page_config(page_title="Chat with ATrad", page_icon=":currency_exchange:") st.write(css, unsafe_allow_html=True) def main(): # Set up the layout -------------------------------------------------------------- st.sidebar.title("Guideline") st.sidebar.markdown(""" 1. Type your message in the chat box on the right. 2. Hit Enter or click the send button to send your message. 3. Chat bot responses will appear below. 4. Source documents will be displayed in the sidebar. """) # Dropdown to select model -------------------------------------------------------- model_selection = st.sidebar.selectbox("Select Model", ["Basic", "MultiQuery"]) print(model_selection) # Button to connect to Google link ------------------------------------------------ st.sidebar.markdown('Sources', unsafe_allow_html=True) st.title("ATrad Chat App") # Chat area ----------------------------------------------------------------------- user_input = st.text_input("", key="user_input",placeholder="Type your question here...") # JavaScript code to submit the form on Enter key press js_submit = f""" document.addEventListener("keydown", function(event) {{ if (event.code === "Enter" && !event.shiftKey) {{ document.querySelector(".stTextInput").dispatchEvent(new Event("submit")); }} }}); """ st.markdown(f'', unsafe_allow_html=True) if st.button("Send"): if user_input: with st.spinner('Waiting for response...'): # Add bot response here (you can replace this with your bot logic) response, metadata, source_documents = generate_bot_response(user_input, model_selection) st.write(user_template.replace("{{MSG}}", user_input), unsafe_allow_html=True) st.write(bot_template.replace("{{MSG}}", response), unsafe_allow_html=True) # Source documents st.sidebar.title("Source Documents") for i, doc in enumerate(source_documents, 1): tit = metadata[i-1]["source"].split("\\")[-1] with st.sidebar.expander(f"{tit}"): st.write(doc) # Assuming the Document object can be directly written to display its content def generate_bot_response(user_input, model): # Simple bot logic (replace with your actual bot logic) start_time = time.time() print(f"User Input: {user_input}") if model == "Basic": res = bsic_chain(user_input) elif model == "MultiQuery": res = multiQuery_chain(user_input) response = res['result'] metadata = [i.metadata for i in res.get("source_documents", [])] end_time = time.time() response_time = end_time - start_time print(f"Response Time: {response_time} seconds") return response, metadata, res.get('source_documents', []) if __name__ == "__main__": main()