import os from dotenv import load_dotenv import streamlit as st import webchat import utils # Default URL of the hosted LLMs default_url = "https://us-south.ml.cloud.ibm.com" def main(): # Initialize session state for credentials and url if 'watsonx_project_id' not in st.session_state: st.session_state['watsonx_project_id'] = "" if 'api_key' not in st.session_state: st.session_state['api_key'] = "" if 'watsonx_url' not in st.session_state: st.session_state['watsonx_url'] = default_url st.set_page_config(layout="wide", page_title="RAG Web Demo", page_icon="") utils.load_css("styles.css") # Streamlit app title with style st.markdown("""

Insert the website you want to chat with and ask your question.

""", unsafe_allow_html=True) # Sidebar for settings st.sidebar.header("Settings") st.sidebar.markdown("Insert your credentials of [IBM Cloud](https://cloud.ibm.com/login) for watsonx.ai \n The data is not saved in the server. Your data is secured.", unsafe_allow_html=True) st.sidebar.markdown("
", unsafe_allow_html=True) # Input fields for API Key, Project ID, and Watsonx URL api_key_input = st.sidebar.text_input("API Key", st.session_state['api_key'], type="password") project_id_input = st.sidebar.text_input("Project ID", st.session_state['watsonx_project_id']) watsonx_url_input = st.sidebar.text_input("Watsonx URL", st.session_state['watsonx_url']) # Update session state with the provided credentials if api_key_input: st.session_state['api_key'] = api_key_input if project_id_input: st.session_state['watsonx_project_id'] = project_id_input if watsonx_url_input: st.session_state['watsonx_url'] = watsonx_url_input # Main input area user_url = st.text_input('Provide a URL') # UI component to enter the question question = st.text_area('Question', height=100) button_clicked = st.button("Answer the question") st.markdown("
", unsafe_allow_html=True) st.subheader("Response") collection_name = "base" client = utils.chromadb_client() if st.session_state['api_key'] and st.session_state['watsonx_project_id'] and st.session_state['watsonx_url']: if button_clicked and user_url: # Invoke the LLM when the button is clicked response = webchat.answer_questions_from_web(st.session_state['api_key'], st.session_state['watsonx_project_id'],st.session_state['watsonx_url'], user_url, question, collection_name, client) st.write(response) else: st.warning("Please provide API Key, Project ID, and Watsonx URL in the sidebar.") # Cleaning Vector Database st.sidebar.markdown("
", unsafe_allow_html=True) st.sidebar.header("Memory") clean_button_clicked = st.sidebar.button("Clean Memory") if clean_button_clicked: if collection_name: utils.clear_collection(collection_name, client) st.sidebar.success("Memory cleared successfully!") print("Memory cleared successfully!") else: st.sidebar.error("Collection name is not defined or empty.") if __name__ == "__main__": main()