Get variables in form to update in chatbot

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)

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.