qmaruf commited on
Commit
7f10664
1 Parent(s): d8d797a

application file

Browse files
Files changed (1) hide show
  1. app.py +78 -0
app.py ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import os
4
+ import time
5
+ from pathlib import Path
6
+
7
+ import openai
8
+ import streamlit as st
9
+ from dotenv import load_dotenv
10
+ from loguru import logger
11
+
12
+ from config import Config
13
+ from utils import create_vectordb
14
+ from utils import get_qa_chain
15
+ load_dotenv()
16
+
17
+ openai.api_key = os.environ['OPENAI_API_KEY']
18
+ Path('docs').mkdir(parents=True, exist_ok=True)
19
+
20
+ if 'messages' not in st.session_state:
21
+ st.session_state.messages = []
22
+
23
+ for message in st.session_state.messages:
24
+ with st.chat_message(message['role']):
25
+ st.markdown(message['content'])
26
+
27
+ uploaded_file = st.sidebar.file_uploader('Upload a file', type=['pdf', 'txt'])
28
+
29
+
30
+ def set_status():
31
+ if uploaded_file is None:
32
+ Path(Config.vectorstore_path).unlink(missing_ok=True)
33
+ st.sidebar.info('Upoad a file to start a conversation')
34
+ else:
35
+ st.sidebar.info(f'Let"s talk to {Path(uploaded_file.name)}')
36
+
37
+
38
+ def process_uploaded_file(uploaded_file):
39
+ if 'context' not in st.session_state:
40
+ logger.info(f'file uploaded {uploaded_file}')
41
+ upath = f'uploads/{uploaded_file.name}'
42
+ logger.info(f'file saved to {upath}')
43
+
44
+ with open(upath, 'wb') as hndl:
45
+ hndl.write(uploaded_file.getbuffer())
46
+
47
+ create_vectordb(upath)
48
+ st.session_state['context'] = True
49
+
50
+
51
+ set_status()
52
+
53
+
54
+ if uploaded_file is not None:
55
+ process_uploaded_file(uploaded_file)
56
+ qr_chain = get_qa_chain()
57
+
58
+ if prompt := st.chat_input('Send a message'):
59
+ st.session_state.messages.append({'role': 'user', 'content': prompt})
60
+ with st.chat_message('user'):
61
+ st.markdown(prompt)
62
+
63
+ with st.chat_message('assistant'):
64
+ message_placeholder = st.empty()
65
+ full_response = ''
66
+ assistant_response = qr_chain({'question': prompt})['answer']
67
+ logger.info(f'assistant response {assistant_response}')
68
+
69
+ for chunk in assistant_response.split():
70
+ full_response += chunk + ' '
71
+ time.sleep(0.01)
72
+
73
+ message_placeholder.markdown(full_response + '▌')
74
+ message_placeholder.markdown(full_response)
75
+
76
+ st.session_state.messages.append(
77
+ {'role': 'assistant', 'content': full_response},
78
+ )