fracapuano commited on
Commit
7a7c4d5
1 Parent(s): 0489db2

add: streaming of answers

Browse files
Files changed (1) hide show
  1. qa/qa.py +20 -9
qa/qa.py CHANGED
@@ -1,8 +1,6 @@
1
  import streamlit as st
2
- from streamlit_chat import message
3
  from openai.error import OpenAIError
4
  from .utils import *
5
- from uuid import uuid4
6
  from typing import Text, Union
7
 
8
  multiple_files = False
@@ -13,14 +11,19 @@ def clear_submit():
13
  """
14
  st.session_state["file_submitted"] = False
15
 
16
- def set_openai_api_key(api_key:Text):
17
  """Sets the internal OpenAI API key to the given value.
18
 
19
  Args:
20
  api_key (Text): OpenAI API key
21
  """
 
 
 
 
22
  st.session_state["OPENAI_API_KEY"] = api_key
23
  st.session_state["api_key_configured"] = True
 
24
 
25
  def file_to_doc(file:Union[PDFFile, DocxFile, TxtFile, CodeFile]) -> None:
26
  """Converts a file to a document using specialized parsers."""
@@ -48,6 +51,7 @@ def qa_main():
48
 
49
  # OpenAI API Key - TODO: consider adding a key valid for everyone
50
  st.header("Configure OpenAI API Key")
 
51
  user_secret = st.text_input(
52
  "Insert your OpenAI API key here ([get your API key](https://platform.openai.com/account/api-keys)).",
53
  type="password",
@@ -56,8 +60,9 @@ def qa_main():
56
  value=st.session_state.get("OPENAI_API_KEY", ""),
57
  )
58
  if user_secret:
59
- set_openai_api_key(user_secret)
60
-
 
61
  # File that needs to be queried
62
  st.header("Upload a file")
63
  uploaded_file = st.file_uploader(
@@ -101,9 +106,15 @@ def qa_main():
101
  # retrieving the most relevant sources
102
  sources = search_docs(index, prompt)
103
  # producing the answer, live
104
- answer = get_answer(sources, prompt)
105
- # retrieving the answer
106
- message_placeholder.markdown(answer["output_text"])
 
 
 
 
 
107
 
108
- st.session_state.messages.append({"role": "assistant", "content": answer["output_text"]})
 
109
 
 
1
  import streamlit as st
 
2
  from openai.error import OpenAIError
3
  from .utils import *
 
4
  from typing import Text, Union
5
 
6
  multiple_files = False
 
11
  """
12
  st.session_state["file_submitted"] = False
13
 
14
+ def set_openai_api_key(api_key:Text)->bool:
15
  """Sets the internal OpenAI API key to the given value.
16
 
17
  Args:
18
  api_key (Text): OpenAI API key
19
  """
20
+ if not (api_key.startswith('sk-') and len(api_key)==51):
21
+ st.error("Invalid OpenAI API key! Please provide a valid key.")
22
+ return False
23
+
24
  st.session_state["OPENAI_API_KEY"] = api_key
25
  st.session_state["api_key_configured"] = True
26
+ return True
27
 
28
  def file_to_doc(file:Union[PDFFile, DocxFile, TxtFile, CodeFile]) -> None:
29
  """Converts a file to a document using specialized parsers."""
 
51
 
52
  # OpenAI API Key - TODO: consider adding a key valid for everyone
53
  st.header("Configure OpenAI API Key")
54
+ st.warning('Please enter your OpenAI API Key!', icon='⚠️')
55
  user_secret = st.text_input(
56
  "Insert your OpenAI API key here ([get your API key](https://platform.openai.com/account/api-keys)).",
57
  type="password",
 
60
  value=st.session_state.get("OPENAI_API_KEY", ""),
61
  )
62
  if user_secret:
63
+ if set_openai_api_key(user_secret):
64
+ st.success('OpenAI API key successfully provided!', icon='✅')
65
+
66
  # File that needs to be queried
67
  st.header("Upload a file")
68
  uploaded_file = st.file_uploader(
 
106
  # retrieving the most relevant sources
107
  sources = search_docs(index, prompt)
108
  # producing the answer, live
109
+ full_response = ""
110
+ for answer_bit in get_answer(sources, prompt)["output_text"]:
111
+ full_response += answer_bit
112
+ message_placeholder.markdown(full_response + "▌")
113
+
114
+ message_placeholder.markdown(full_response)
115
+ # answer = get_answer(sources, prompt)
116
+ # message_placeholder.markdown(answer["output_text"])
117
 
118
+ # st.session_state.messages.append({"role": "assistant", "content": answer["output_text"]})
119
+ st.session_state.messages.append({"role": "assistant", "content": full_response})
120