Spaces:
Running
Running
File size: 3,381 Bytes
35dac1d 120d6fd 2bc1a07 0ae985f 2bc1a07 35dac1d 0ae985f 2bc1a07 0ae985f 2bc1a07 53881d8 120d6fd 2bc1a07 53881d8 2bc1a07 a83407e 2bc1a07 53881d8 2bc1a07 0ae985f 2bc1a07 0ae985f 2bc1a07 a83407e 2bc1a07 a83407e 2bc1a07 0ae985f 53881d8 a83407e 35dac1d a83407e 35dac1d 53881d8 35dac1d 2bc1a07 0ae985f 120d6fd d618db7 120d6fd 0ae985f 120d6fd 2bc1a07 af69422 120d6fd 53881d8 35dac1d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
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("""
<div class="menu-bar">
<h1>IBM watsonx.ai - webchat</h1>
</div>
<div style="margin-top: 20px;"><p>Insert the website you want to chat with and ask your question.</p></div>
""", 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("<hr>", 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("<hr>", 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("<hr>", 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()
|