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)