Yara Kyrychenko commited on
Commit
36be270
Β·
1 Parent(s): a6e50c0
Files changed (1) hide show
  1. app.py +54 -64
app.py CHANGED
@@ -1,11 +1,8 @@
1
  import streamlit as st
2
- import streamlit.components.v1 as components
3
  from openai import OpenAI
4
- import requests
5
  from pymongo.mongo_client import MongoClient
6
  from pymongo.server_api import ServerApi
7
  from datetime import datetime
8
- import time
9
  import random
10
 
11
  st.set_page_config(
@@ -25,6 +22,7 @@ st.markdown(
25
  )
26
 
27
  ### Setting up the session state
 
28
  def generate_tokens(response):
29
  # for deepseek
30
  for token in response:
@@ -103,28 +101,26 @@ else:
103
  with st.sidebar:
104
  st.markdown("# Let's talk climate action!")
105
  st.markdown(f"""
106
- {"β˜‘" if st.session_state.submitted else "☐"} **Step 1. Complete a form.**
107
 
108
- {"β˜‘" if len(st.session_state.messages) > 0 else "☐"} **Step 2. Type in the chat box to start a conversation.**
109
 
110
  🌱 You should ask a climate change related question like:
111
  - *What are the most effective actions to reduce my carbon emissions?*
112
  - *What's better for the environment: a year of vegetarianism or skipping one transatlantic flight?*
113
  - *How do the emissions saved by switching to an EV compare to recycling for a year in terms of trees planted?*
114
 
115
- 🧠 If you're unsure about a metric or number, simply ask the chatbot for an explanation.
116
-
117
- ❗ **Do not share any personal information (e.g., name or address) in the chat.**
118
 
119
- ⚠️ You must respond **at least 5 times** before you can submit the conversation. An *End Conversation* button will appear then. You can continue before submitting, but **you must submit the conversation to receive compensation**.
120
 
121
- {"β˜‘" if st.session_state.inserted > 1 else "☐"} **Step 3. Use the *End Conversation* button to submit your response.**
122
 
123
- **Do not forget to copy & paste your completion code!**
124
 
125
- β†Ί *You can always return to this panel by clicking the arrow on the top left.*
126
 
127
- {"πŸŽ‰ **All done! Please press *Next* in the survey.**" if st.session_state.inserted > 1 else ""}
128
  """)
129
  if st.session_state.gotit == False or st.session_state.submitted == False:
130
  st.session_state.gotit = st.button("Let's start!", key=None, help=None, use_container_width=True)
@@ -178,12 +174,13 @@ def form():
178
  st.session_state.user_data["inserted"] = st.session_state.inserted
179
  st.session_state.user_data["submission_time"] = datetime.now()
180
 
181
- with MongoClient(st.secrets["mongo"],server_api=ServerApi('1')) as client:
182
- db = client.chat
183
- collection = db.app
184
- user_data = st.session_state.user_data
185
- collection.insert_one(user_data)
186
- st.session_state.inserted += 1
 
187
  st.session_state.submitted = True
188
  setup_messages()
189
  st.rerun()
@@ -196,43 +193,6 @@ for message in st.session_state.messages:
196
  with st.chat_message(message["role"]):
197
  st.markdown(message["content"])
198
 
199
- @st.dialog('Submit conversation', width="large")
200
- def submit():
201
- done = False
202
- if not done:
203
- st.markdown("You must answer all questions marked with a ❗ to submit.")
204
- if st.query_params["p"] != "n":
205
- st.slider('❗ How would you rate the conversation on a scale from *Terrible* to *Perfect*?', 0, 100, format="", key="score", value=50)
206
- st.slider('❗ How personalized did the conversation feel, on a scale from *Not at all* to *Extremely personalized*?', 0, 100, format="", key="personalization_score", value=50)
207
- st.slider('❗ How knowledgeable do you feel the chatbot was, on a scale from *Not at all* to *Extremely knowledgeable*?', 0, 100, format="", key="knowledge_score", value=50)
208
- else:
209
- st.session_state.score = 0
210
- st.session_state.personalization_score = 0
211
- st.session_state.knowledge_score = 0
212
-
213
- st.text_area('Any feedback?',key="feedback")
214
- if st.button('Submit', key=None, help=None, use_container_width=True, disabled=st.session_state.score==50 or st.session_state.personalization_score==50):
215
- keys = ["score", "personalization_score", "knowledge_score",
216
- "feedback",
217
- "inserted", "messages", "convo_start_time"]
218
-
219
- st.session_state.user_data.update({key: st.session_state[key] for key in keys})
220
-
221
- st.session_state.user_data["convo_end_time"] = datetime.now()
222
-
223
- with MongoClient(st.secrets["mongo"],server_api=ServerApi('1')) as client:
224
- db = client.chat
225
- collection = db.app
226
- user_data = st.session_state.user_data
227
- del user_data['_id']
228
-
229
- collection.insert_one(user_data)
230
- st.session_state.inserted += 1
231
- done = True
232
-
233
- setup_messages()
234
- st.rerun()
235
-
236
  if len(st.session_state.messages) >= st.session_state.max_messages:
237
  st.info(
238
  "You have reached the limit of messages for this conversation. Please end and submit the conversation."
@@ -248,15 +208,29 @@ elif st.session_state.inserted > 1:
248
  st.markdown('**Please copy the code and enter it into the survey field below.**')
249
 
250
  elif st.query_params["p"] == "n":
251
- st.markdown("""
252
- You have not been selected to have a conversation with the chatbot.
253
-
254
- ❗ **Please press *End Conversation* to submit your data and proceed with the survey. You have to submit to receive compensation.**
255
  """)
256
  columns = st.columns((1,1,1))
257
  with columns[2]:
258
- if st.button("End Conversation",use_container_width=True):
259
- submit()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
260
 
261
  elif prompt := st.chat_input("Ask a question about climate action..."):
262
 
@@ -297,6 +271,22 @@ elif prompt := st.chat_input("Ask a question about climate action..."):
297
  if len(st.session_state.messages) > 10 or st.session_state.max_messages == len(st.session_state.messages):
298
  columns = st.columns((1,1,1))
299
  with columns[2]:
300
- if st.button("End Conversation",use_container_width=True):
301
- submit()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
302
 
 
1
  import streamlit as st
 
2
  from openai import OpenAI
 
3
  from pymongo.mongo_client import MongoClient
4
  from pymongo.server_api import ServerApi
5
  from datetime import datetime
 
6
  import random
7
 
8
  st.set_page_config(
 
22
  )
23
 
24
  ### Setting up the session state
25
+
26
  def generate_tokens(response):
27
  # for deepseek
28
  for token in response:
 
101
  with st.sidebar:
102
  st.markdown("# Let's talk climate action!")
103
  st.markdown(f"""
104
+ {"β˜‘" if st.session_state.submitted else "☐"} **Step 1. Complete a form**
105
 
106
+ {"β˜‘" if len(st.session_state.messages) > 0 else "☐"} **Step 2. Type in the chat box to start a conversation**
107
 
108
  🌱 You should ask a climate change related question like:
109
  - *What are the most effective actions to reduce my carbon emissions?*
110
  - *What's better for the environment: a year of vegetarianism or skipping one transatlantic flight?*
111
  - *How do the emissions saved by switching to an EV compare to recycling for a year in terms of trees planted?*
112
 
113
+ ❗ Do not share any personal information (e.g., name or address).
 
 
114
 
115
+ ⚠️ You must respond **at least 5 times** before you will see a *Finish* button. You can continue before submitting, but **you must finish and enter your completion code into the survey to recieve compensation**.
116
 
117
+ {"β˜‘" if st.session_state.inserted > 1 else "☐"} **Step 3. Use the *Finish* button to get your completion code**
118
 
119
+ ⚠️ Do not forget to copy & paste your completion code!
120
 
121
+ β†Ί You can always return to this panel by clicking the arrow on the top left.
122
 
123
+ {"πŸŽ‰ **All done! Please enter your code in the survye and press *Next*.**" if st.session_state.inserted > 1 else ""}
124
  """)
125
  if st.session_state.gotit == False or st.session_state.submitted == False:
126
  st.session_state.gotit = st.button("Let's start!", key=None, help=None, use_container_width=True)
 
174
  st.session_state.user_data["inserted"] = st.session_state.inserted
175
  st.session_state.user_data["submission_time"] = datetime.now()
176
 
177
+ #with MongoClient(st.secrets["mongo"],server_api=ServerApi('1')) as client:
178
+ # db = client.chat
179
+ # collection = db.app
180
+ # user_data = st.session_state.user_data
181
+ # collection.insert_one(user_data)
182
+
183
+ st.session_state.inserted += 1
184
  st.session_state.submitted = True
185
  setup_messages()
186
  st.rerun()
 
193
  with st.chat_message(message["role"]):
194
  st.markdown(message["content"])
195
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
  if len(st.session_state.messages) >= st.session_state.max_messages:
197
  st.info(
198
  "You have reached the limit of messages for this conversation. Please end and submit the conversation."
 
208
  st.markdown('**Please copy the code and enter it into the survey field below.**')
209
 
210
  elif st.query_params["p"] == "n":
211
+ st.markdown("""**You have not been selected to have a conversation with the chatbot.**
212
+ Please press *Finish* to get your completion code.
 
 
213
  """)
214
  columns = st.columns((1,1,1))
215
  with columns[2]:
216
+ if st.button("Finish",use_container_width=True):
217
+ keys = ["inserted", "messages", "convo_start_time"]
218
+
219
+ st.session_state.user_data.update({key: st.session_state[key] for key in keys})
220
+
221
+ st.session_state.user_data["convo_end_time"] = datetime.now()
222
+
223
+ with MongoClient(st.secrets["mongo"],server_api=ServerApi('1')) as client:
224
+ db = client.chat
225
+ collection = db.app
226
+ user_data = st.session_state.user_data
227
+
228
+ collection.insert_one(user_data)
229
+ st.session_state.inserted += 1
230
+ done = True
231
+
232
+ setup_messages()
233
+ st.rerun()
234
 
235
  elif prompt := st.chat_input("Ask a question about climate action..."):
236
 
 
271
  if len(st.session_state.messages) > 10 or st.session_state.max_messages == len(st.session_state.messages):
272
  columns = st.columns((1,1,1))
273
  with columns[2]:
274
+ if st.button("Finish",use_container_width=True):
275
+ keys = ["inserted", "messages", "convo_start_time"]
276
+
277
+ st.session_state.user_data.update({key: st.session_state[key] for key in keys})
278
+
279
+ st.session_state.user_data["convo_end_time"] = datetime.now()
280
+
281
+ with MongoClient(st.secrets["mongo"],server_api=ServerApi('1')) as client:
282
+ db = client.chat
283
+ collection = db.app
284
+ user_data = st.session_state.user_data
285
+
286
+ collection.insert_one(user_data)
287
+ st.session_state.inserted += 1
288
+ done = True
289
+
290
+ setup_messages()
291
+ st.rerun()
292