File size: 2,673 Bytes
19c89c6 |
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 82 83 84 85 |
import streamlit as st
import os
import ragfunctions
st.title("RAG Chatbot")
# Setting the LLM
with st.expander("Setting the LLM"):
st.markdown("This page is used to have a chat with the uploaded documents")
with st.form("setting"):
row_1 = st.columns(3)
with row_1[0]:
token = st.text_input("Hugging Face Token", type="password")
with row_1[1]:
llm_model = st.text_input("LLM model", value="tiiuae/falcon-7b-instruct")
with row_1[2]:
instruct_embeddings = st.text_input("Instruct Embeddings", value="hkunlp/instructor-xl")
row_2 = st.columns(3)
with row_2[0]:
vector_store_list = os.listdir("vector store/")
default_choice = (
vector_store_list.index('naruto_snake')
if 'naruto_snake' in vector_store_list
else 0
)
existing_vector_store = st.selectbox("Vector Store", vector_store_list, default_choice)
with row_2[1]:
temperature = st.number_input("Temperature", value=1.0, step=0.1)
with row_2[2]:
max_length = st.number_input("Maximum character length", value=300, step=1)
create_chatbot = st.form_submit_button("Create chatbot")
# Prepare the LLM model
if "conversation" not in st.session_state:
st.session_state.conversation = None
if token:
st.session_state.conversation = ragfunctions.prepare_rag_llm(
token, llm_model, instruct_embeddings, existing_vector_store, temperature, max_length
)
# Chat history
if "history" not in st.session_state:
st.session_state.history = []
# Source documents
if "source" not in st.session_state:
st.session_state.source = []
# Display chats
for message in st.session_state.history:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Ask a question
if question := st.chat_input("Ask a question"):
# Append user question to history
st.session_state.history.append({"role": "user", "content": question})
# Add user question
with st.chat_message("user"):
st.markdown(question)
# Answer the question
answer, doc_source = ragfunctions.generate_answer(question, token)
with st.chat_message("assistant"):
st.write(answer)
# Append assistant answer to history
st.session_state.history.append({"role": "assistant", "content": answer})
# Append the document sources
st.session_state.source.append({"question": question, "answer": answer, "document": doc_source})
# Source documents
with st.expander("Source documents"):
st.write(st.session_state.source)
|