Thumbs up /down trigger

Im trying to create a chat engine, i have the thumbs up and down, but after clicking on it, the print statement doesnt activate.

Attaching snippet here -

    for text in response.response_gen:
        full_response += text + " "
        time.sleep(0.05)
        message_placeholder.markdown(full_response + "▌")
    message_placeholder.markdown(full_response)
        
    st.session_state.messages.append({"role": "assistant", "content": full_response})

    torch.cuda.empty_cache()

    col1, col2, col3, col4 = st.columns([3,3,0.5,0.5])
    with col3:
        if st.button(":thumbsup:"):
            print("I have been liked")
    with col4:
        if st.button(":thumbsdown:"):
            print("I have been disliked")

Your code works as expected for me.

i dont know what im doing wrong then, the print statement doesnot print for some reason

There seems to be nothing wrong in the code you posted.

Hi @Jino_R

As you’re using print() this would print the statements to the console. To display the statements in the app, you’re need to use st.write().

im pasting more additional code snippet here - @dataprofessor @Goyo
when the buttons are outside the if condition, it works properly, when inside, it doent activate

if prompt := st.chat_input("What can I help you with?"):

    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.markdown(prompt)
    
    with st.chat_message("assistant"):
        message_placeholder = st.empty()
        full_response = ""

        response = query_engine.query(prompt)

        # print('###################################################')
        # for idx, res in enumerate(response.source_nodes):
        #     print(f'Matched chunk {idx + 1} {response.source_nodes[idx]}')
        # print('###################################################')

        #response.print_response_stream()

        for text in response.response_gen:
            full_response += text + " "
            time.sleep(0.05)
            message_placeholder.markdown(full_response + "▌")
        message_placeholder.markdown(full_response)
            
        st.session_state.messages.append({"role": "assistant", "content": full_response})

        torch.cuda.empty_cache()
    
    col1, col2, col3, col4 = st.columns([3, 3, 0.5, 0.5])
    with col3:
        if st.button(":thumbsup:"):
            print("I have been liked")
    with col4:
        if st.button(":thumbsdown:"):
            print("I have been disliked")

i tried to add this print statement here - it seems like the flow doesnot wait for the button, it just executes and the button prints None instead of the print statements ive triggered

with st.chat_message("assistant"):
    message_placeholder = st.empty()
    full_response = ""

    col1, col2, col3, col4 = st.columns([3, 3, 0.5, 0.5])
    with col3:
        if st.button(":thumbsup:"):
            print("I have been liked")
    with col4:
        if st.button(":thumbsdown:"):
            print("I have been disliked")
    
    print("im done")

Hi @Jino_R

Have you tried using callback functions for the thumbsup/thumbsdown and see if this could resolve the issue?

More info in the Docs:

This doesn’t work because the scripts rerun as soon as you click a button. As the script runs again, prompt is no longer truish and the code in the if block is not executed.

No, it doesn’t. The script runs top to bottom when a session is started. Then it runs again on each significant user interaction.

let me try to add callbacks