Lightweight feedback component

You can use streamlit form.

# Define a variable to store feedback object.
if 'fbdata' not in ss:
    ss.fbdata = {'feedback_thumb': 'πŸ‘‰', 'feedback_star': '⭐', 'feedback_comment': ''}


def feedback_cb():
    """Processes feedback."""
    ss.fbdata = {'feedback_thumb': ss.fbthuk, 'feedback_star': ss.fbstark, 'feedback_comment': ss.fbcomk}

    # Save to message history
    ss.msg.append({"role": "user", "content": ss.fbdata})


# user prompt
if prompt := st.chat_input("your message"):
    ss.msg.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.markdown(prompt)

    # Get response.
    with st.chat_message("assistant"):
        response = generate_random_response(prompt)
        st.markdown(response)
        ss.msg.append({"role": "assistant", "content": response})

    # feedback prompt
    with st.form('fb_form'):
        st.radio('feedback thumb', options=['πŸ‘‰', 'πŸ‘', 'πŸ‘Ž'], key='fbthuk', horizontal=True)
        st.radio('feedback star', options=['⭐', '⭐⭐', '⭐⭐⭐', '⭐⭐⭐⭐', '⭐⭐⭐⭐⭐'], key='fbstark', horizontal=True)
        st.text_input('feedback comment', key='fbcomk')
        st.form_submit_button('Send', on_click=feedback_cb)

Used in chat

Complete code

import random
import string

import streamlit as st
from streamlit import session_state as ss


# Define a variable to save message history.
if 'msg' not in ss:
    ss.msg = []

# Define a variable to store feedback object.
if 'fbdata' not in ss:
    ss.fbdata = {'feedback_thumb': 'πŸ‘‰', 'feedback_star': '⭐', 'feedback_comment': ''}


def feedback_cb():
    """Processes feedback."""
    ss.fbdata = {'feedback_thumb': ss.fbthuk, 'feedback_star': ss.fbstark, 'feedback_comment': ss.fbcomk}

    # Save to message history
    ss.msg.append({"role": "user", "content": ss.fbdata})


def generate_random_response(msg):
    letters = string.ascii_lowercase
    return f'my response to {msg} is ' + ''.join(random.choice(letters) for _ in range(6))


# Show message history.
for message in ss.msg:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

# user prompt
if prompt := st.chat_input("your message"):
    ss.msg.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.markdown(prompt)

    # Get response.
    with st.chat_message("assistant"):
        response = generate_random_response(prompt)
        st.markdown(response)
        ss.msg.append({"role": "assistant", "content": response})

    # feedback prompt
    with st.form('fb_form'):
        st.radio('feedback thumb', options=['πŸ‘‰', 'πŸ‘', 'πŸ‘Ž'], key='fbthuk', horizontal=True)
        st.radio('feedback star', options=['⭐', '⭐⭐', '⭐⭐⭐', '⭐⭐⭐⭐', '⭐⭐⭐⭐⭐'], key='fbstark', horizontal=True)
        st.text_input('feedback comment', key='fbcomk')
        st.form_submit_button('Send', on_click=feedback_cb)
2 Likes