Commit
·
4ecf027
1
Parent(s):
9eaa2b8
Update app.py
Browse files
app.py
CHANGED
@@ -2,7 +2,7 @@ import streamlit as st
|
|
2 |
from utils import *
|
3 |
|
4 |
|
5 |
-
# streamlit
|
6 |
def clear_history():
|
7 |
if 'history' in st.session_state:
|
8 |
del st.session_state['history']
|
@@ -12,32 +12,26 @@ def clear_history():
|
|
12 |
if __name__ == "__main__":
|
13 |
import os
|
14 |
|
15 |
-
#
|
16 |
-
#from dotenv import load_dotenv, find_dotenv
|
17 |
-
|
18 |
-
#load_dotenv(find_dotenv(), override=True)
|
19 |
-
|
20 |
-
# st.image('img.png')
|
21 |
-
|
22 |
st.subheader('Load a Document and Ask a Question')
|
23 |
with st.sidebar:
|
24 |
-
# text_input
|
25 |
api_key = st.text_input('OpenAI API Key:', type='password')
|
26 |
if api_key:
|
27 |
os.environ['OPENAI_API_KEY'] = api_key
|
28 |
|
29 |
-
# file uploader widget
|
30 |
uploaded_file = st.file_uploader('To upload a file drag and drop it on the area below:', type=['pdf', 'docx', 'txt', 'csv'])
|
31 |
|
32 |
-
# chunk size number
|
33 |
chunk_size = st.number_input('Chunk size:', min_value=100, max_value=2048, value=512, on_change=clear_history)
|
34 |
|
35 |
-
# k number
|
36 |
k = st.number_input('k', min_value=1, max_value=20, value=3, on_change=clear_history)
|
37 |
|
38 |
-
#
|
39 |
add_data = st.button('Add Data', on_click=clear_history)
|
40 |
-
|
41 |
if add_data:
|
42 |
if api_key:
|
43 |
if uploaded_file and add_data: # if the user browsed a file
|
@@ -66,10 +60,10 @@ if __name__ == "__main__":
|
|
66 |
else:
|
67 |
st.error("Please provide your OpenAI API key above.....")
|
68 |
|
69 |
-
#
|
70 |
q = st.text_input('Ask a question about the content of your file:')
|
71 |
-
if q: # if the user entered a question and hit enter
|
72 |
-
if 'vs' in st.session_state: # if there's the vector store (user uploaded, split and embedded a file)
|
73 |
vector_store = st.session_state.vs
|
74 |
st.write(f'k: {k}')
|
75 |
answer = ask_and_get_answer(vector_store, q, k)
|
@@ -79,17 +73,16 @@ if __name__ == "__main__":
|
|
79 |
|
80 |
st.divider()
|
81 |
|
82 |
-
# if there's no chat history
|
83 |
if 'history' not in st.session_state:
|
84 |
st.session_state.history = ''
|
85 |
|
86 |
-
#
|
87 |
value = f'Q: {q} \nA: {answer}'
|
88 |
|
89 |
st.session_state.history = f'{value} \n {"-" * 100} \n {st.session_state.history}'
|
90 |
h = st.session_state.history
|
91 |
|
92 |
-
# text area widget
|
93 |
st.text_area(label='Chat History', value=h, key='history', height=400)
|
94 |
|
95 |
-
# run the app: streamlit run ./chat_with_documents.py
|
|
|
2 |
from utils import *
|
3 |
|
4 |
|
5 |
+
# streamlit session state holds history, this mehtods cleas that history
|
6 |
def clear_history():
|
7 |
if 'history' in st.session_state:
|
8 |
del st.session_state['history']
|
|
|
12 |
if __name__ == "__main__":
|
13 |
import os
|
14 |
|
15 |
+
# create your side bar
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
st.subheader('Load a Document and Ask a Question')
|
17 |
with st.sidebar:
|
18 |
+
# use text_input to bring in your OpenAI API key
|
19 |
api_key = st.text_input('OpenAI API Key:', type='password')
|
20 |
if api_key:
|
21 |
os.environ['OPENAI_API_KEY'] = api_key
|
22 |
|
23 |
+
# sidebar - file uploader widget, drag and drop, browse button works on windows not on mac
|
24 |
uploaded_file = st.file_uploader('To upload a file drag and drop it on the area below:', type=['pdf', 'docx', 'txt', 'csv'])
|
25 |
|
26 |
+
# call the chunk size mehtod that sets the number
|
27 |
chunk_size = st.number_input('Chunk size:', min_value=100, max_value=2048, value=512, on_change=clear_history)
|
28 |
|
29 |
+
# input the k number, a hight nuber will increase the search effectiveness, but is more expensive
|
30 |
k = st.number_input('k', min_value=1, max_value=20, value=3, on_change=clear_history)
|
31 |
|
32 |
+
# click this sidebard button to add data
|
33 |
add_data = st.button('Add Data', on_click=clear_history)
|
34 |
+
#chekc if data button has been clicked,if the api key is added and if a data file is available for upload
|
35 |
if add_data:
|
36 |
if api_key:
|
37 |
if uploaded_file and add_data: # if the user browsed a file
|
|
|
60 |
else:
|
61 |
st.error("Please provide your OpenAI API key above.....")
|
62 |
|
63 |
+
# this is the main input widget that allows you to input your query of the uploaded document
|
64 |
q = st.text_input('Ask a question about the content of your file:')
|
65 |
+
if q: # run the query if the user entered a question and hit enter
|
66 |
+
if 'vs' in st.session_state: # for seesion state, if there's the vector store (user uploaded, split and embedded a file)
|
67 |
vector_store = st.session_state.vs
|
68 |
st.write(f'k: {k}')
|
69 |
answer = ask_and_get_answer(vector_store, q, k)
|
|
|
73 |
|
74 |
st.divider()
|
75 |
|
76 |
+
# initialize a chat history if there's no chat history
|
77 |
if 'history' not in st.session_state:
|
78 |
st.session_state.history = ''
|
79 |
|
80 |
+
# your question and answer
|
81 |
value = f'Q: {q} \nA: {answer}'
|
82 |
|
83 |
st.session_state.history = f'{value} \n {"-" * 100} \n {st.session_state.history}'
|
84 |
h = st.session_state.history
|
85 |
|
86 |
+
# chat history text area widget
|
87 |
st.text_area(label='Chat History', value=h, key='history', height=400)
|
88 |
|
|