I am trying to create a feedback form after a chat question is answered. I cannot get the feedback fields in the form to update and save in a csv. I’ve tried both on_click in the st.form_submit_button (this saves the csv but does not capture the form variables) and if submit_button (but since it inside another if statement, it is not executed). Any ideas how to get radio_feedback and text_feedback to be saved. Here is some sample code:
def save_csv(radio_feedback, text_feedback, question, text):
radio_feedback = st.session_state['radio_feedback']
text_feedback = st.session_state['text_feedback']
feedback = [date.today(), radio_feedback, text_feedback, question, text]
with open('feedback.csv', 'a', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(feedback)
question = st.chat_input("Question")
if question:
new_q = st.chat_message("question", avatar=avatars['user'])
new_q.write(question)
st.session_state['messages'].append({'role': 'user', 'content': question})
with st.spinner(""):
sourcename = 'demo'
modelname = 'chat'
response = answer(st.session_state['messages'], sourcename, modelname, kvalue)
st.session_state['references'] = response['references']
st.session_state['messages'].append({'role': 'bot', 'content': text})
new_a = st.chat_message("answer", avatar=avatars['bot'])
new_a.write(text)
# feedback form that shows up after answer - Option 1: on_click
with st.form(key='my_form'):
r_feedback = st.radio('', ['👍 Thumbs up', '👎 Thumbs down'], horizontal = True, label_visibility = 'collapsed')
if r_feedback == '👍 Thumbs up':
st.session_state['radio_feedback'] = 'thumbs up'
else:
st.session_state['radio_feedback'] = 'thumbs down'
st.session_state['text_feedback'] = st.text_input('Details (optional)')
submit_button = st.form_submit_button(label='Submit Feedback', on_click = save_csv, args = (st.session_state['radio_feedback'], st.session_state['text_feedback'], question, text))
# OR Option 2: if submit_button
with st.form(key='my_form'):
r_feedback = st.radio('', ['👍 Thumbs up', '👎 Thumbs down'], horizontal = True, label_visibility = 'collapsed')
if r_feedback == '👍 Thumbs up':
st.session_state['radio_feedback'] = 'thumbs up'
else:
st.session_state['radio_feedback'] = 'thumbs down'
st.session_state['text_feedback'] = st.text_input('Details (optional)')
submit_button = st.form_submit_button(label='Submit Feedback')
if submit_button:
save_csv(st.session_state['radio_feedback'], st.session_state['text_feedback'], question, text)