Another version inspired by Marc’s
import panel as pn
import param
pn.extension()
class PreferenceInput(pn.widgets.CompositeWidget):
value = param.Parameter()
def __init__(self, **params):
super().__init__(**params)
self._preference_widget = pn.widgets.RadioBoxGroup(
options=["", "blue", "red", "green"], name="preference"
)
pn.bind(self._update_value, self._preference_widget, watch=True)
self._composite[:] = [
"What is your preference?",
self._preference_widget,
]
def _update_value(self, preference):
self.value = f"My preference is {preference}."
chat.stream(f"I like {preference} too")
chat.widgets = [pn.chat.ChatAreaInput()]
def choose_a_color(contents, user, instance):
if "color" in contents:
instance.widgets = [preference_input]
return "What is your preference?"
return contents
preference_input = PreferenceInput()
chat = pn.chat.ChatInterface(callback=choose_a_color)
chat.show()