Spaces:
Sleeping
Sleeping
eliujl
commited on
Commit
·
7ee9dd1
1
Parent(s):
310ca3f
Updated app UI
Browse filesAdd a user Submit button, change conversions to markdown and in reverse order, and display all chat records in textarea
app.py
CHANGED
|
@@ -90,6 +90,7 @@ def ingest(_all_texts, use_pinecone, _embeddings, pinecone_index_name, chroma_co
|
|
| 90 |
else:
|
| 91 |
docsearch = Chroma.from_documents(
|
| 92 |
_all_texts, _embeddings, collection_name=chroma_collection_name, persist_directory=persist_directory)
|
|
|
|
| 93 |
return docsearch
|
| 94 |
|
| 95 |
|
|
@@ -121,8 +122,9 @@ def setup_docsearch(use_pinecone, pinecone_index_name, embeddings, chroma_collec
|
|
| 121 |
else:
|
| 122 |
docsearch = Chroma(persist_directory=persist_directory, embedding_function=embeddings,
|
| 123 |
collection_name=chroma_collection_name)
|
| 124 |
-
|
| 125 |
-
|
|
|
|
| 126 |
return docsearch, n_texts
|
| 127 |
|
| 128 |
|
|
@@ -161,6 +163,9 @@ pinecone_index_name, chroma_collection_name, persist_directory, docsearch_ready,
|
|
| 161 |
def main(pinecone_index_name, chroma_collection_name, persist_directory, docsearch_ready, directory_name):
|
| 162 |
docsearch_ready = False
|
| 163 |
chat_history = []
|
|
|
|
|
|
|
|
|
|
| 164 |
# Get user input of whether to use Pinecone or not
|
| 165 |
col1, col2, col3 = st.columns([1, 1, 1])
|
| 166 |
# create the radio buttons and text input fields
|
|
@@ -218,14 +223,19 @@ def main(pinecone_index_name, chroma_collection_name, persist_directory, docsear
|
|
| 218 |
CRqa = ConversationalRetrievalChain.from_llm(
|
| 219 |
llm, retriever=retriever, return_source_documents=True)
|
| 220 |
|
| 221 |
-
st.title('Chatbot')
|
| 222 |
# Get user input
|
| 223 |
query = st.text_area('Enter your question:', height=10,
|
| 224 |
-
placeholder='Summarize the context.
|
| 225 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 226 |
# Generate a reply based on the user input and chat history
|
| 227 |
-
CHAT_HISTORY_FILENAME = f"chat_history/{session_name}_chat_hist.json"
|
| 228 |
-
chat_history = load_chat_history(CHAT_HISTORY_FILENAME)
|
| 229 |
chat_history = [(user, bot)
|
| 230 |
for user, bot in chat_history]
|
| 231 |
reply, source = get_response(query, chat_history, CRqa)
|
|
@@ -233,10 +243,17 @@ def main(pinecone_index_name, chroma_collection_name, persist_directory, docsear
|
|
| 233 |
chat_history.append(('User', query))
|
| 234 |
chat_history.append(('Bot', reply))
|
| 235 |
save_chat_history(chat_history, CHAT_HISTORY_FILENAME)
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
[
|
| 239 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 240 |
# Display sources
|
| 241 |
for i, source_i in enumerate(source):
|
| 242 |
if i < k_sources:
|
|
@@ -246,13 +263,15 @@ def main(pinecone_index_name, chroma_collection_name, persist_directory, docsear
|
|
| 246 |
page_content = source_i.page_content
|
| 247 |
if source_i.metadata:
|
| 248 |
metadata_source = source_i.metadata['source']
|
| 249 |
-
st.
|
| 250 |
-
f"**_Source {i+1}:_** {metadata_source}: {page_content}")
|
| 251 |
-
st.write(source_i.metadata)
|
| 252 |
else:
|
| 253 |
-
st.
|
| 254 |
-
|
| 255 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 256 |
if __name__ == '__main__':
|
| 257 |
main(pinecone_index_name, chroma_collection_name, persist_directory,
|
| 258 |
docsearch_ready, directory_name)
|
|
|
|
| 90 |
else:
|
| 91 |
docsearch = Chroma.from_documents(
|
| 92 |
_all_texts, _embeddings, collection_name=chroma_collection_name, persist_directory=persist_directory)
|
| 93 |
+
|
| 94 |
return docsearch
|
| 95 |
|
| 96 |
|
|
|
|
| 122 |
else:
|
| 123 |
docsearch = Chroma(persist_directory=persist_directory, embedding_function=embeddings,
|
| 124 |
collection_name=chroma_collection_name)
|
| 125 |
+
|
| 126 |
+
n_texts = docsearch._collection.count()
|
| 127 |
+
|
| 128 |
return docsearch, n_texts
|
| 129 |
|
| 130 |
|
|
|
|
| 163 |
def main(pinecone_index_name, chroma_collection_name, persist_directory, docsearch_ready, directory_name):
|
| 164 |
docsearch_ready = False
|
| 165 |
chat_history = []
|
| 166 |
+
latest_chats = []
|
| 167 |
+
reply = ''
|
| 168 |
+
source = ''
|
| 169 |
# Get user input of whether to use Pinecone or not
|
| 170 |
col1, col2, col3 = st.columns([1, 1, 1])
|
| 171 |
# create the radio buttons and text input fields
|
|
|
|
| 223 |
CRqa = ConversationalRetrievalChain.from_llm(
|
| 224 |
llm, retriever=retriever, return_source_documents=True)
|
| 225 |
|
| 226 |
+
st.title(':blue[Chatbot]')
|
| 227 |
# Get user input
|
| 228 |
query = st.text_area('Enter your question:', height=10,
|
| 229 |
+
placeholder='''Summarize the context.
|
| 230 |
+
\nAfter typing your question, click on SUBMIT to send it to the bot.''')
|
| 231 |
+
submitted = st.button('SUBMIT')
|
| 232 |
+
|
| 233 |
+
CHAT_HISTORY_FILENAME = f"chat_history/{session_name}_chat_hist.json"
|
| 234 |
+
chat_history = load_chat_history(CHAT_HISTORY_FILENAME)
|
| 235 |
+
st.markdown('<style>.my_title { font-weight: bold; color: red; }</style>', unsafe_allow_html=True)
|
| 236 |
+
|
| 237 |
+
if query and submitted:
|
| 238 |
# Generate a reply based on the user input and chat history
|
|
|
|
|
|
|
| 239 |
chat_history = [(user, bot)
|
| 240 |
for user, bot in chat_history]
|
| 241 |
reply, source = get_response(query, chat_history, CRqa)
|
|
|
|
| 243 |
chat_history.append(('User', query))
|
| 244 |
chat_history.append(('Bot', reply))
|
| 245 |
save_chat_history(chat_history, CHAT_HISTORY_FILENAME)
|
| 246 |
+
c = chat_history[-4:]
|
| 247 |
+
if len(chat_history) >= 4:
|
| 248 |
+
latest_chats = [c[2],c[3],c[0],c[1]]
|
| 249 |
+
else:
|
| 250 |
+
latest_chats = c
|
| 251 |
+
|
| 252 |
+
if latest_chats:
|
| 253 |
+
chat_history_str1 = '<br>'.join([f'<span class=\"my_title\">{x[0]}:</span> {x[1]}' for x in latest_chats])
|
| 254 |
+
st.markdown(f'<div class=\"chat-record\">{chat_history_str1}</div>', unsafe_allow_html=True)
|
| 255 |
+
|
| 256 |
+
if reply and source:
|
| 257 |
# Display sources
|
| 258 |
for i, source_i in enumerate(source):
|
| 259 |
if i < k_sources:
|
|
|
|
| 263 |
page_content = source_i.page_content
|
| 264 |
if source_i.metadata:
|
| 265 |
metadata_source = source_i.metadata['source']
|
| 266 |
+
st.markdown(f"<h3 class='my_title'>Source {i+1}: {metadata_source}</h3> <br> {page_content}", unsafe_allow_html=True)
|
|
|
|
|
|
|
| 267 |
else:
|
| 268 |
+
st.markdown(f"<h3 class='my_title'>Source {i+1}: </h3> <br> {page_content}", unsafe_allow_html=True)
|
|
|
|
| 269 |
|
| 270 |
+
all_chats = chat_history
|
| 271 |
+
all_chat_history_str = '\n'.join(
|
| 272 |
+
[f'{x[0]}: {x[1]}' for x in all_chats])
|
| 273 |
+
st.title(':blue[All chat records]')
|
| 274 |
+
st.text_area('', value=all_chat_history_str, height=250, label_visibility='collapsed')
|
| 275 |
if __name__ == '__main__':
|
| 276 |
main(pinecone_index_name, chroma_collection_name, persist_directory,
|
| 277 |
docsearch_ready, directory_name)
|