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")
1 Like

Your code works as expected for me.

1 Like

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

1 Like

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

1 Like

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().

1 Like

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")
1 Like

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")
1 Like

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:

1 Like

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.

1 Like

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

1 Like

let me try to add callbacks

1 Like