Ammar2k commited on
Commit
960b1cd
·
1 Parent(s): 54f84c8

Upload app.py

Browse files

"made UI GPT-like, added memory"

Files changed (1) hide show
  1. app.py +35 -46
app.py CHANGED
@@ -11,28 +11,16 @@ from langchain.schema import (
11
  )
12
  from langchain.embeddings.openai import OpenAIEmbeddings
13
 
14
- from langchain.text_splitter import CharacterTextSplitter
15
- from langchain.vectorstores import Chroma
16
-
17
  import streamlit as st
18
- from streamlit_chat import message
19
 
20
  load_dotenv()
21
 
22
 
23
  os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
24
- llm = ChatOpenAI(temperature=0.3, model="gpt-3.5-turbo")
25
  embeddings = OpenAIEmbeddings()
26
 
27
 
28
- @st.cache_data
29
- def load_into_chroma(docs):
30
- text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
31
- docs = text_splitter.split_documents(text_splitter)
32
- global db_chroma
33
- db_chroma = Chroma.from_documents(docs, embeddings)
34
-
35
-
36
  def generate_content(query, knowledge_base):
37
  # relevant_docs = db_chroma.similarity_search(query)
38
  system_prompt = f"""You are a professional writer of motivational letters.\
@@ -44,50 +32,51 @@ Make the letter very personal with regards to the knowledge base.
44
 
45
  Knowledge Base: ```{knowledge_base}```
46
  """
47
- system_message = SystemMessage(content=system_prompt)
48
- human_message = HumanMessage(content=query)
49
- message = [system_message, human_message]
50
- response = llm(message)
 
 
 
 
 
 
 
51
  return response.content
52
 
53
 
54
- system_session_prompt = """As a professional writer of motivational letters, \
55
- your task is to write a sales proposal provided to you according to \
56
- the required changes. You will make the recommended changes to the \
57
- sales proposal and return the entire proposal with thse changes. \
58
- Your job depends on the answers you provide so play close attention to \
59
- the queries you recieve.
60
- """
61
-
62
-
63
  def main():
64
- st.title("ChatGPT 🤖 Powered Chatbot")
65
- st.header("Sales Proposal Generator")
66
 
67
  uploaded_file = st.file_uploader("Upload a word file", type="docx")
68
- if "messages" not in st.session_state:
69
- st.session_state.messages = [AIMessage(content="How can I help you?")]
70
  if uploaded_file is not None:
71
  # extract text from word file
72
  knowledge_base = docx2txt.process(uploaded_file)
73
  # load_into_chroma(call_transcript)
74
 
75
- with st.sidebar:
76
- user_input = st.text_area("Enter your query: ", key="user_input")
77
- st.session_state.messages.append(HumanMessage(content=user_input))
78
-
79
- if st.button("Generate content"):
80
- with st.spinner("GPT is thinking..."):
81
- response = generate_content(user_input, knowledge_base)
82
- st.session_state.messages.append(AIMessage(content=response))
83
-
84
- # display message history
85
- messages = st.session_state.get('messages', [])
86
- for i in range(len(messages)):
87
- if i % 2 == 0:
88
- message(messages[i].content, is_user=False, key=str(i) + '_user')
89
- else:
90
- message(messages[i].content, is_user=True, key=str(i) + '_ai')
 
 
 
 
 
91
 
92
 
93
  if __name__ == '__main__':
 
11
  )
12
  from langchain.embeddings.openai import OpenAIEmbeddings
13
 
 
 
 
14
  import streamlit as st
 
15
 
16
  load_dotenv()
17
 
18
 
19
  os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
20
+ llm = ChatOpenAI(temperature=0.3)
21
  embeddings = OpenAIEmbeddings()
22
 
23
 
 
 
 
 
 
 
 
 
24
  def generate_content(query, knowledge_base):
25
  # relevant_docs = db_chroma.similarity_search(query)
26
  system_prompt = f"""You are a professional writer of motivational letters.\
 
32
 
33
  Knowledge Base: ```{knowledge_base}```
34
  """
35
+ # system_message = SystemMessage(content=system_prompt)
36
+ # human_message = HumanMessage(content=query[-1]['content'])
37
+ # message = [system_message, human_message]
38
+ messages = [SystemMessage(content=system_prompt)]
39
+ for i in range(len(query)):
40
+ if i % 2 == 0:
41
+ temp_query = HumanMessage(content=query[i]['content'])
42
+ else:
43
+ temp_query = AIMessage(content=query[i]['content'])
44
+ messages.append(temp_query)
45
+ response = llm(messages)
46
  return response.content
47
 
48
 
 
 
 
 
 
 
 
 
 
49
  def main():
50
+ st.title("GradGPT 🤖")
51
+ st.header("ChatGPT Powered Motivational Letter writer")
52
 
53
  uploaded_file = st.file_uploader("Upload a word file", type="docx")
 
 
54
  if uploaded_file is not None:
55
  # extract text from word file
56
  knowledge_base = docx2txt.process(uploaded_file)
57
  # load_into_chroma(call_transcript)
58
 
59
+ if "messages" not in st.session_state:
60
+ st.session_state.messages = []
61
+
62
+ for message in st.session_state.messages:
63
+ with st.chat_message(message["role"]):
64
+ st.markdown(message["content"])
65
+
66
+ if prompt := st.chat_input("Enter your queries here."):
67
+ st.session_state.messages.append({"role": "user", "content": prompt})
68
+ with st.chat_message("user"):
69
+ st.markdown(prompt)
70
+
71
+ with st.chat_message("assistant"):
72
+ message_placeholder = st.empty()
73
+ content = generate_content(
74
+ st.session_state.messages, knowledge_base
75
+ )
76
+ st.session_state.messages.append(
77
+ {"role": "assistant", "content": content}
78
+ )
79
+ message_placeholder.markdown(content)
80
 
81
 
82
  if __name__ == '__main__':