Yara Kyrychenko commited on
Commit
9fd35e2
·
1 Parent(s): e1e090f

upd t and m

Browse files
Files changed (3) hide show
  1. app.py +45 -40
  2. knowledge.txt +1 -1
  3. personalization.txt +5 -5
app.py CHANGED
@@ -57,20 +57,17 @@ if 'inserted' not in st.session_state:
57
 
58
  # user info state
59
  st.session_state.fields = [
60
- 'climate_actions', 'age', 'gender', 'education', 'residence',
61
- 'property', #'income', 'zipcode',
62
  'politics', 'impact_open', 'ev',
63
- 'fossil', 'aerosol', 'diet', 'recycling'
 
64
  ]
65
 
66
  for field in st.session_state.fields:
67
  st.session_state[field] = ''
68
 
69
- st.session_state.user_id = ''
70
-
71
  st.session_state.recycling = 0
72
 
73
-
74
  # timers
75
  st.session_state.start_time = datetime.now()
76
  st.session_state.convo_start_time = ''
@@ -79,7 +76,10 @@ if 'p' not in st.query_params:
79
  st.query_params['p'] = 't'
80
 
81
  def setup_messages():
82
- ### p = personalization ('f' none, otherwise personalization)
 
 
 
83
 
84
  if st.query_params["p"] == "f" or st.query_params["p"] == "n":
85
  st.session_state.system_message = st.session_state.base_text
@@ -88,7 +88,6 @@ def setup_messages():
88
  elif st.query_params["p"] == "t":
89
  st.session_state.system_message = format_personalization(st.session_state.personalization_text)
90
 
91
- print(st.session_state.system_message)
92
  st.session_state.messages = [{ "role": "system", "content": st.session_state.system_message}]
93
  st.session_state.convo_start_time = datetime.now()
94
 
@@ -118,12 +117,14 @@ with st.sidebar:
118
  {"🎉 **All done! Please press *Next* in the survey.**" if st.session_state.inserted > 0 else ""}
119
  """)
120
  if st.session_state.gotit == False:
 
121
  st.session_state.gotit = st.button("Let's start!", key=None, help=None, use_container_width=True)
122
 
123
 
124
  @st.dialog('Form')
125
  def form():
126
- st.markdown("**Please answer every question to proceed.**")
 
127
  st.session_state.age = st.text_input("How old are you in years?")
128
  st.session_state.gender = st.radio("Do you describe yourself as a man, a woman, or in some other way?",
129
  ['','Man', 'Woman', 'Other'])
@@ -137,12 +138,9 @@ def form():
137
  'Doctorate degree (e.g., PhD, MD)'])
138
  st.session_state.residence = st.radio("What type of a community do you live in?",
139
  ['', 'Urban','Suburban','Rural','Other'])
140
- #st.session_state.zipcode = st.text_input("What is your US Zip Code?")
141
  st.session_state.property = st.radio("Do you own or rent the home in which you live?",
142
  ['', 'Own','Rent','Neither (I live rent-free)',
143
  'Other' ])
144
- #st.session_state.income = st.radio("What was your total household income before taxes during the past 12 months?",
145
- # ['','Less than \$25,000','\$25,000 to \$49,999','\$50,000 to \$74,999','\$75,000 to \$99,999','\$100,000 to \$149,999','\$150,000 or more'])
146
  st.session_state.politics = st.radio('What is your political orientation?', ['', 'Extremely liberal', 'Liberal', 'Slightly liberal', 'Moderate', 'Slightly conservative', 'Conservative', 'Extremely conservative'])
147
  st.session_state.climate_actions = st.text_area('Please describe any actions you are taking to address climate change? Write *None* if you are not taking any.')
148
  st.session_state.impact_open = st.text_area('What do you believe is the single most effective action you can take to reduce carbon emissions that contribute to climate change?')
@@ -156,26 +154,32 @@ def form():
156
  st.session_state.diet = st.radio('Lab-grown meat produces up to 25 times more CO2 than real meat.', ["", "Strongly Disagree", "Disagree", "Neutral", "Agree", "Strongly Agree"])
157
 
158
 
159
- #st.session_state.user_info = st.text_area(
160
- #"Write at least two sentences about yourself. You can write about your job, hobbies, living arrangements or any other information you think might be relevant. **Do not write anything that could identify you, such as your name or address.**",'')
161
-
162
  columns_form = st.columns((1,1,1))
163
  with columns_form[2]:
164
- submitted = st.button("Proceed",use_container_width=True)
 
 
165
 
166
- all_form_completed = all(st.session_state[field] != '' for field in st.session_state.fields) and st.session_state.recycling != 0
167
 
168
- if submitted and all_form_completed:
 
 
 
 
 
 
 
 
 
 
 
 
 
169
  st.session_state.submitted = True
170
  setup_messages()
171
  st.rerun()
172
 
173
- elif submitted and not all_form_completed:
174
- st.warning('Please answer every question and click *Proceed* again to start a conversation.')
175
-
176
-
177
- #st.write(st.session_state.system_message)
178
-
179
  if st.session_state.gotit and st.session_state.submitted == False:
180
  form()
181
 
@@ -187,31 +191,30 @@ for message in st.session_state.messages:
187
  @st.dialog('Submit conversation')
188
  def submit():
189
  st.markdown("You must answer all questions marked with a ❗ to submit.")
190
- st.session_state.user_id = st.text_input(label="❗ Enter your Prolific ID", value=st.session_state.user_id)
191
  if st.query_params["p"] != "n":
192
  st.slider('❗ How would you rate the conversation on a scale from *Terrible* to *Perfect*?', 0, 100, format="", key="score", value=50)
193
  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)
194
  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)
195
  else:
196
- st.session_state.score = 51
197
- st.session_state.personalization_score = 51
198
- st.session_state.knowledge_score = 51
199
 
200
  st.text_area('Any feedback?',key="feedback")
201
- if st.button('Submit', key=None, help=None, use_container_width=True, disabled=st.session_state.user_id=="" or st.session_state.score==50 or st.session_state.personalization_score==50):
202
- #submission_date = datetime.now() #.strftime("%Y-%m-%d %H:%M:%S")
203
-
204
  keys = [
205
- "user_id", "messages", "score", "personalization_score", "knowledge_score", "model",
206
- "feedback",
207
- "age", "gender", "education", "residence", "property", "politics",
208
- "climate_actions", "impact_open",
209
- "recycling", "ev", "fossil", "aerosol", "diet",
210
- "inserted", "start_time", "convo_start_time"
211
- ]
 
 
212
 
213
  user_data = {key: st.session_state[key] for key in keys}
214
- user_data["condition"] = f"p{st.query_params['p']}"
215
  user_data["submission_time"] = datetime.now()
216
 
217
  from pymongo.mongo_client import MongoClient
@@ -224,7 +227,7 @@ def submit():
224
 
225
  st.success('**Your conversation has been submitted! Please proceed with the survey.**', icon="✅")
226
 
227
- time.sleep(5)
228
  setup_messages()
229
  st.rerun()
230
 
@@ -238,6 +241,8 @@ elif st.session_state.submitted == False:
238
 
239
  elif st.query_params["p"] == "n":
240
  st.markdown("""
 
 
241
  ❗ **Please press *End Conversation* to submit your data and proceed with the survey. You have to submit to receive compensation.**
242
  """)
243
  columns = st.columns((1,1,1))
 
57
 
58
  # user info state
59
  st.session_state.fields = [
60
+ 'climate_actions', 'age', 'gender', 'education', 'residence', 'property',
 
61
  'politics', 'impact_open', 'ev',
62
+ 'fossil', 'aerosol', 'diet', 'recycling',
63
+ 'user_id'
64
  ]
65
 
66
  for field in st.session_state.fields:
67
  st.session_state[field] = ''
68
 
 
 
69
  st.session_state.recycling = 0
70
 
 
71
  # timers
72
  st.session_state.start_time = datetime.now()
73
  st.session_state.convo_start_time = ''
 
76
  st.query_params['p'] = 't'
77
 
78
  def setup_messages():
79
+ # t = personalization
80
+ # k = knowledge
81
+ # f = formatting
82
+ # n = no chat
83
 
84
  if st.query_params["p"] == "f" or st.query_params["p"] == "n":
85
  st.session_state.system_message = st.session_state.base_text
 
88
  elif st.query_params["p"] == "t":
89
  st.session_state.system_message = format_personalization(st.session_state.personalization_text)
90
 
 
91
  st.session_state.messages = [{ "role": "system", "content": st.session_state.system_message}]
92
  st.session_state.convo_start_time = datetime.now()
93
 
 
117
  {"🎉 **All done! Please press *Next* in the survey.**" if st.session_state.inserted > 0 else ""}
118
  """)
119
  if st.session_state.gotit == False:
120
+ st.markdown("*You can always return to this panel by clicking the arrow on the top left.*")
121
  st.session_state.gotit = st.button("Let's start!", key=None, help=None, use_container_width=True)
122
 
123
 
124
  @st.dialog('Form')
125
  def form():
126
+ st.markdown("**❗ Please answer every question to proceed.**")
127
+ st.session_state.user_id = st.text_input(label="Enter your Prolific ID", value=st.session_state.user_id)
128
  st.session_state.age = st.text_input("How old are you in years?")
129
  st.session_state.gender = st.radio("Do you describe yourself as a man, a woman, or in some other way?",
130
  ['','Man', 'Woman', 'Other'])
 
138
  'Doctorate degree (e.g., PhD, MD)'])
139
  st.session_state.residence = st.radio("What type of a community do you live in?",
140
  ['', 'Urban','Suburban','Rural','Other'])
 
141
  st.session_state.property = st.radio("Do you own or rent the home in which you live?",
142
  ['', 'Own','Rent','Neither (I live rent-free)',
143
  'Other' ])
 
 
144
  st.session_state.politics = st.radio('What is your political orientation?', ['', 'Extremely liberal', 'Liberal', 'Slightly liberal', 'Moderate', 'Slightly conservative', 'Conservative', 'Extremely conservative'])
145
  st.session_state.climate_actions = st.text_area('Please describe any actions you are taking to address climate change? Write *None* if you are not taking any.')
146
  st.session_state.impact_open = st.text_area('What do you believe is the single most effective action you can take to reduce carbon emissions that contribute to climate change?')
 
154
  st.session_state.diet = st.radio('Lab-grown meat produces up to 25 times more CO2 than real meat.', ["", "Strongly Disagree", "Disagree", "Neutral", "Agree", "Strongly Agree"])
155
 
156
 
 
 
 
157
  columns_form = st.columns((1,1,1))
158
  with columns_form[2]:
159
+ submitted = st.button("Proceed",use_container_width=True,
160
+ help = 'Please answer every question and click *Proceed* to start a conversation.',
161
+ disabled = not (all(st.session_state[field] != '' for field in st.session_state.fields) and st.session_state.recycling != 0))
162
 
163
+ if submitted:
164
 
165
+ user_data = {key: st.session_state[key] for key in st.session_state.fields}
166
+ user_data["model"] = st.session_state["model"]
167
+ user_data["condition"] = st.query_params['p']
168
+ user_data["start_time"] = st.session_state.start_time
169
+ user_data["inserted"] = st.session_state.inserted
170
+ user_data["submission_time"] = datetime.now()
171
+
172
+ from pymongo.mongo_client import MongoClient
173
+ from pymongo.server_api import ServerApi
174
+ with MongoClient(st.secrets["mongo"],server_api=ServerApi('1')) as client:
175
+ db = client.chat
176
+ collection = db.app
177
+ collection.insert_one(user_data)
178
+ st.session_state.inserted += 1
179
  st.session_state.submitted = True
180
  setup_messages()
181
  st.rerun()
182
 
 
 
 
 
 
 
183
  if st.session_state.gotit and st.session_state.submitted == False:
184
  form()
185
 
 
191
  @st.dialog('Submit conversation')
192
  def submit():
193
  st.markdown("You must answer all questions marked with a ❗ to submit.")
 
194
  if st.query_params["p"] != "n":
195
  st.slider('❗ How would you rate the conversation on a scale from *Terrible* to *Perfect*?', 0, 100, format="", key="score", value=50)
196
  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)
197
  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)
198
  else:
199
+ st.session_state.score = 0
200
+ st.session_state.personalization_score = 0
201
+ st.session_state.knowledge_score = 0
202
 
203
  st.text_area('Any feedback?',key="feedback")
204
+ 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):
 
 
205
  keys = [
206
+ "user_id", "messages",
207
+ "score", "personalization_score", "knowledge_score",
208
+ "model", "feedback",
209
+ "age", "gender", "education", "residence", "property", "politics",
210
+ "climate_actions", "impact_open",
211
+ "recycling", "ev", "fossil", "aerosol", "diet",
212
+ "inserted", "start_time",
213
+ "convo_start_time"
214
+ ]
215
 
216
  user_data = {key: st.session_state[key] for key in keys}
217
+ user_data["condition"] = {st.query_params['p']}
218
  user_data["submission_time"] = datetime.now()
219
 
220
  from pymongo.mongo_client import MongoClient
 
227
 
228
  st.success('**Your conversation has been submitted! Please proceed with the survey.**', icon="✅")
229
 
230
+ time.sleep(10)
231
  setup_messages()
232
  st.rerun()
233
 
 
241
 
242
  elif st.query_params["p"] == "n":
243
  st.markdown("""
244
+ You have not been selected to have a conversation with the chatbot.
245
+
246
  ❗ **Please press *End Conversation* to submit your data and proceed with the survey. You have to submit to receive compensation.**
247
  """)
248
  columns = st.columns((1,1,1))
knowledge.txt CHANGED
@@ -21,7 +21,7 @@ Ordered from highest impact (mitigation potential close to 1.5 tCO2eq/cap) to lo
21
  14. Recycling
22
 
23
  This knowledge come from a study conducted by Ivanova et al.:
24
- Ivanova, D., Barrett, J., Wiedenhofer, D., Macura, B., Callaghan, M., & Creutzig, F. (2020). Quantifying the potential for climate change mitigation of consumption options. Environmental Research Letters, 15(9), 093001.
25
 
26
  Study Abstract:
27
 
 
21
  14. Recycling
22
 
23
  This knowledge come from a study conducted by Ivanova et al.:
24
+ Ivanova, D., Barrett, J., Wiedenhofer, D., Macura, B., Callaghan, M., & Creutzig, F. (2020). Quantifying the potential for climate change mitigation of consumption options. Environmental Research Letters, 15(9), 093001. doi.org/10.1088/1748-9326/ab8589
25
 
26
  Study Abstract:
27
 
personalization.txt CHANGED
@@ -21,6 +21,9 @@ Most Effective Climate Action:
21
  Current Climate Actions:
22
  - Question: 'Do you take any actions with the aim of reducing your carbon emissions and reducing your contribution to climate change?'
23
  - User Response: [CLIMATE_ACTIONS]
 
 
 
24
  Electric Vehicles:
25
  - Statement: 'Electric vehicles don’t have enough range to handle daily travel demands.'
26
  - User Response: [EV]
@@ -30,11 +33,8 @@ Diet:
30
  Fossil Fuel Industry:
31
  - Statement: 'The fossil fuel industry is trying to shift the blame away from themselves by emphasizing the importance of individual climate action.'
32
  - User Response: [FOSSIL]
33
- Recycling:
34
- - Question: What percentage of plastic produced gets recycled?
35
- - User Response: [RECYCLING]%
36
  Aerosols:
37
- - Question: 'Is the use of aerosol spray cans a major cause of climate change, to the best of your knowledge?'
38
  - User Response: [AEROSOL]
39
 
40
  # Your Expertise
@@ -58,7 +58,7 @@ Ordered from highest impact (mitigation potential close to 1.5 tCO2eq/cap) to lo
58
  14. Recycling
59
 
60
  This knowledge come from a study conducted by Ivanova et al.:
61
- Ivanova, D., Barrett, J., Wiedenhofer, D., Macura, B., Callaghan, M., & Creutzig, F. (2020). Quantifying the potential for climate change mitigation of consumption options. Environmental Research Letters, 15(9), 093001.
62
 
63
  Study Abstract:
64
 
 
21
  Current Climate Actions:
22
  - Question: 'Do you take any actions with the aim of reducing your carbon emissions and reducing your contribution to climate change?'
23
  - User Response: [CLIMATE_ACTIONS]
24
+ Recycling:
25
+ - Question: 'What percentage of plastic produced gets recycled globally?'
26
+ - User Response: [RECYCLING]%
27
  Electric Vehicles:
28
  - Statement: 'Electric vehicles don’t have enough range to handle daily travel demands.'
29
  - User Response: [EV]
 
33
  Fossil Fuel Industry:
34
  - Statement: 'The fossil fuel industry is trying to shift the blame away from themselves by emphasizing the importance of individual climate action.'
35
  - User Response: [FOSSIL]
 
 
 
36
  Aerosols:
37
+ - Statement: 'The use of aerosol spray cans is a major cause of climate change.'
38
  - User Response: [AEROSOL]
39
 
40
  # Your Expertise
 
58
  14. Recycling
59
 
60
  This knowledge come from a study conducted by Ivanova et al.:
61
+ Ivanova, D., Barrett, J., Wiedenhofer, D., Macura, B., Callaghan, M., & Creutzig, F. (2020). Quantifying the potential for climate change mitigation of consumption options. Environmental Research Letters, 15(9), 093001. doi.org/10.1088/1748-9326/ab8589
62
 
63
  Study Abstract:
64