From 4a7237beb17363f976e5b082485d008c5d9d635e Mon Sep 17 00:00:00 2001 From: Marek Mihok Date: Wed, 8 Nov 2023 15:29:10 +0100 Subject: [PATCH] feat: Add feedback events on chatbot responses #2165 (#2178) --- py/examples/chatbot_events_feedback.py | 35 +++++++ py/examples/tour.conf | 1 + py/h2o_lightwave/h2o_lightwave/types.py | 2 +- py/h2o_lightwave/h2o_lightwave/ui.py | 2 +- py/h2o_wave/h2o_wave/types.py | 2 +- py/h2o_wave/h2o_wave/ui.py | 2 +- r/R/ui.R | 2 +- ui/src/chatbot.test.tsx | 96 ++++++++++++++++++ ui/src/chatbot.tsx | 39 +++++-- .../assets/chatbot-events-feedback.png | Bin 0 -> 97450 bytes website/widgets/ai/chatbot.md | 18 ++++ 11 files changed, 188 insertions(+), 11 deletions(-) create mode 100644 py/examples/chatbot_events_feedback.py create mode 100644 website/docs/examples/assets/chatbot-events-feedback.png diff --git a/py/examples/chatbot_events_feedback.py b/py/examples/chatbot_events_feedback.py new file mode 100644 index 0000000000..df8057d398 --- /dev/null +++ b/py/examples/chatbot_events_feedback.py @@ -0,0 +1,35 @@ +# Chatbot / Events/ Feedback +# Use thumbs up/down to provide feedback on the chatbot response. +# #chatbot #events #feedback +# --- +from h2o_wave import main, app, Q, ui, data + +@app('/demo') +async def serve(q: Q): + if not q.client.initialized: + q.page['example'] = ui.chatbot_card( + box='1 1 5 5', + data=data(fields='content from_user', t='list'), + name='chatbot', + events=['feedback'] + ) + q.page['feedback'] = ui.form_card( + box='1 6 5 2', + items=[ + ui.text_xl('Feedback'), + ui.text(name='text', content='No feedback yet.'), + ] + ) + q.client.initialized = True + + if q.args.chatbot: + # Append user message. + q.page['example'].data += [q.args.chatbot, True] + # Append bot response. + q.page['example'].data += ['I am a fake chatbot. Sorry, I cannot help you.', False] + # Handle feedback event. + elif q.events.chatbot and q.events.chatbot.feedback: + # Process the feedback. + q.page['feedback'].text.content = f'{q.events.chatbot.feedback}' + + await q.page.save() diff --git a/py/examples/tour.conf b/py/examples/tour.conf index 9441134bea..a0bfc3992b 100644 --- a/py/examples/tour.conf +++ b/py/examples/tour.conf @@ -35,6 +35,7 @@ chatbot.py chatbot_stream.py chatbot_events_stop.py chatbot_events_scroll.py +chatbot_events_feedback.py form.py form_visibility.py text.py diff --git a/py/h2o_lightwave/h2o_lightwave/types.py b/py/h2o_lightwave/h2o_lightwave/types.py index aea7fa964b..6cad85112c 100644 --- a/py/h2o_lightwave/h2o_lightwave/types.py +++ b/py/h2o_lightwave/h2o_lightwave/types.py @@ -8234,7 +8234,7 @@ def __init__( self.placeholder = placeholder """Chat input box placeholder. Use for prompt examples.""" self.events = events - """The events to capture on this chatbot. One of 'stop'.""" + """The events to capture on this chatbot. One of 'stop' | 'scroll_up' | 'feedback'.""" self.generating = generating """True to show a button to stop the text generation. Defaults to False.""" self.commands = commands diff --git a/py/h2o_lightwave/h2o_lightwave/ui.py b/py/h2o_lightwave/h2o_lightwave/ui.py index ed0db0823d..122b580b32 100644 --- a/py/h2o_lightwave/h2o_lightwave/ui.py +++ b/py/h2o_lightwave/h2o_lightwave/ui.py @@ -2885,7 +2885,7 @@ def chatbot_card( name: An identifying name for this component. data: Chat messages data. Requires cyclic buffer. placeholder: Chat input box placeholder. Use for prompt examples. - events: The events to capture on this chatbot. One of 'stop'. + events: The events to capture on this chatbot. One of 'stop' | 'scroll_up' | 'feedback'. generating: True to show a button to stop the text generation. Defaults to False. commands: Contextual menu commands for this component. Returns: diff --git a/py/h2o_wave/h2o_wave/types.py b/py/h2o_wave/h2o_wave/types.py index aea7fa964b..6cad85112c 100644 --- a/py/h2o_wave/h2o_wave/types.py +++ b/py/h2o_wave/h2o_wave/types.py @@ -8234,7 +8234,7 @@ def __init__( self.placeholder = placeholder """Chat input box placeholder. Use for prompt examples.""" self.events = events - """The events to capture on this chatbot. One of 'stop'.""" + """The events to capture on this chatbot. One of 'stop' | 'scroll_up' | 'feedback'.""" self.generating = generating """True to show a button to stop the text generation. Defaults to False.""" self.commands = commands diff --git a/py/h2o_wave/h2o_wave/ui.py b/py/h2o_wave/h2o_wave/ui.py index ed0db0823d..122b580b32 100644 --- a/py/h2o_wave/h2o_wave/ui.py +++ b/py/h2o_wave/h2o_wave/ui.py @@ -2885,7 +2885,7 @@ def chatbot_card( name: An identifying name for this component. data: Chat messages data. Requires cyclic buffer. placeholder: Chat input box placeholder. Use for prompt examples. - events: The events to capture on this chatbot. One of 'stop'. + events: The events to capture on this chatbot. One of 'stop' | 'scroll_up' | 'feedback'. generating: True to show a button to stop the text generation. Defaults to False. commands: Contextual menu commands for this component. Returns: diff --git a/r/R/ui.R b/r/R/ui.R index 7d81a35fb3..ac25e8c291 100644 --- a/r/R/ui.R +++ b/r/R/ui.R @@ -3332,7 +3332,7 @@ ui_chat_card <- function( #' @param name An identifying name for this component. #' @param data Chat messages data. Requires cyclic buffer. #' @param placeholder Chat input box placeholder. Use for prompt examples. -#' @param events The events to capture on this chatbot. One of 'stop'. +#' @param events The events to capture on this chatbot. One of 'stop' | 'scroll_up' | 'feedback'. #' @param generating True to show a button to stop the text generation. Defaults to False. #' @param commands Contextual menu commands for this component. #' @return A ChatbotCard instance. diff --git a/ui/src/chatbot.test.tsx b/ui/src/chatbot.test.tsx index 5e8696792e..30a1c5fbcb 100644 --- a/ui/src/chatbot.test.tsx +++ b/ui/src/chatbot.test.tsx @@ -159,4 +159,100 @@ describe('XChatbot', () => { expect(emitMock).toHaveBeenCalledTimes(1) expect(emitMock).toHaveBeenCalledWith(model.name, 'scroll_up', true) }) + + it('Renders thumbs up/down buttons', () => { + const { container } = render() + const likeButton = container.querySelector("i[data-icon-name='Like']") as HTMLLIElement + const dislikeButton = container.querySelector("i[data-icon-name='Dislike']") as HTMLLIElement + expect(likeButton).toBeInTheDocument() + expect(dislikeButton).toBeInTheDocument() + }) + + it('Fires a like feedback event when clicked on the thumbs up button', () => { + const { container } = render() + const likeButton = container.querySelector("i[data-icon-name='Like']") as HTMLLIElement + + fireEvent.click(likeButton) + expect(emitMock).toHaveBeenCalledTimes(1) + expect(emitMock).toHaveBeenCalledWith(model.name, 'feedback', { message: data[1].content, positive: true }) + + const likeSolidButton = container.querySelector("i[data-icon-name='LikeSolid']") as HTMLLIElement + expect(likeSolidButton).toBeInTheDocument() + }) + + it('Fires a dislike feedback event when clicked on the thumbs down button', () => { + const { container } = render() + const dislikeButton = container.querySelector("i[data-icon-name='Dislike']") as HTMLLIElement + + fireEvent.click(dislikeButton) + expect(emitMock).toHaveBeenCalledTimes(1) + expect(emitMock).toHaveBeenCalledWith(model.name, 'feedback', { message: data[1].content, positive: false }) + + const dislikeSolidButton = container.querySelector("i[data-icon-name='DislikeSolid']") as HTMLLIElement + expect(dislikeSolidButton).toBeInTheDocument() + }) + + it('Fires a dislike feedback event when changing from thumbs up to thumbs down', () => { + const + { container } = render(), + likeButton = container.querySelector("i[data-icon-name='Like']") as HTMLLIElement, + dislikeButton = container.querySelector("i[data-icon-name='Dislike']") as HTMLLIElement + + fireEvent.click(likeButton) + expect(emitMock).toHaveBeenCalledTimes(1) + expect(emitMock).toHaveBeenCalledWith(model.name, 'feedback', { message: data[1].content, positive: true }) + + const likeSolidButton = container.querySelector("i[data-icon-name='LikeSolid']") as HTMLLIElement + expect(likeSolidButton).toBeInTheDocument() + + fireEvent.click(dislikeButton) + expect(emitMock).toHaveBeenCalledTimes(2) + expect(emitMock).toHaveBeenCalledWith(model.name, 'feedback', { message: data[1].content, positive: false }) + expect(container.querySelector("i[data-icon-name='DislikeSolid']") as HTMLLIElement).toBeInTheDocument() + expect(container.querySelector("i[data-icon-name='LikeSolid']") as HTMLLIElement).not.toBeInTheDocument() + }) + + it('Fires a like feedback event when changing from thumbs down to thumbs up', () => { + const + { container } = render(), + dislikeButton = container.querySelector("i[data-icon-name='Dislike']") as HTMLLIElement, + likeButton = container.querySelector("i[data-icon-name='Like']") as HTMLLIElement + + fireEvent.click(dislikeButton) + expect(emitMock).toHaveBeenCalledTimes(1) + expect(emitMock).toHaveBeenCalledWith(model.name, 'feedback', { message: data[1].content, positive: false }) + + const dislikeSolidButton = container.querySelector("i[data-icon-name='DislikeSolid']") as HTMLLIElement + expect(dislikeSolidButton).toBeInTheDocument() + + fireEvent.click(likeButton) + expect(emitMock).toHaveBeenCalledTimes(2) + expect(emitMock).toHaveBeenCalledWith(model.name, 'feedback', { message: data[1].content, positive: true }) + expect(container.querySelector("i[data-icon-name='LikeSolid']") as HTMLLIElement).toBeInTheDocument() + expect(container.querySelector("i[data-icon-name='DislikeSolid']") as HTMLLIElement).not.toBeInTheDocument() + }) + + it('Does not fire event when clicked on the thumbs up button twice', () => { + const { container } = render() + const likeButton = container.querySelector("i[data-icon-name='Like']") as HTMLLIElement + + fireEvent.click(likeButton) + expect(emitMock).toHaveBeenCalledTimes(1) + expect(emitMock).toHaveBeenCalledWith(model.name, 'feedback', { message: data[1].content, positive: true }) + + fireEvent.click(likeButton) + expect(emitMock).toHaveBeenCalledTimes(1) + }) + + it('Does not fire event when clicked on the thumbs down button twice', () => { + const { container } = render() + const dislikeButton = container.querySelector("i[data-icon-name='Dislike']") as HTMLLIElement + + fireEvent.click(dislikeButton) + expect(emitMock).toHaveBeenCalledTimes(1) + expect(emitMock).toHaveBeenCalledWith(model.name, 'feedback', { message: data[1].content, positive: false }) + + fireEvent.click(dislikeButton) + expect(emitMock).toHaveBeenCalledTimes(1) + }) }) diff --git a/ui/src/chatbot.tsx b/ui/src/chatbot.tsx index f165e6003c..83bd0b7f9a 100644 --- a/ui/src/chatbot.tsx +++ b/ui/src/chatbot.tsx @@ -13,7 +13,7 @@ // limitations under the License. import * as Fluent from '@fluentui/react' -import { B, Id, Model, Rec, S, isBuf, unpack, xid } from './core' +import { B, I, Id, Model, Rec, S, isBuf, unpack, xid } from './core' import React from 'react' import { cards } from './layout' import { Markdown } from './markdown' @@ -45,6 +45,7 @@ const justifyContent: 'center', }, msg: { + position: 'relative', maxWidth: '65ch', flexGrow: 1, overflowWrap: 'break-word', @@ -70,10 +71,14 @@ const marginBottom: 7.5, transform: 'translateX(-50%)', width: 180 + }, + feedback: { + display: 'flex', + justifyContent: 'flex-end', } }) -type Message = ChatbotMessage & { id?: S } +type Message = ChatbotMessage & { id?: S, positive?: B } /* Chatbot message entity. */ interface ChatbotMessage { @@ -91,7 +96,7 @@ export interface Chatbot { data: Rec /** Chat input box placeholder. Use for prompt examples. */ placeholder?: S - /** The events to capture on this chatbot. One of 'stop' | 'scroll_up'. */ + /** The events to capture on this chatbot. One of 'stop' | 'scroll_up' | 'feedback'. */ events?: S[] /** True to show a button to stop the text generation. Defaults to False. */ generating?: B @@ -134,7 +139,23 @@ export const XChatbot = (props: Chatbot) => { setIsInfiniteLoading(true) } }, [props.events, props.name]), - onDataChange = React.useCallback(() => { if (props.data) setMsgs(processData(props.data)) }, [props.data]) + onDataChange = React.useCallback(() => { if (props.data) setMsgs(processData(props.data)) }, [props.data]), + handlePositive = (id: I) => { + setMsgs(messages => { + if (messages[id]?.positive) return messages + messages[id].positive = true + wave.emit(props.name, 'feedback', { message: messages[id].content, positive: true }) + return [...messages] + }) + }, + handleNegative = (id: I) => { + setMsgs(messages => { + if (messages[id]?.positive !== undefined && !messages[id].positive) return messages + messages[id].positive = false + wave.emit(props.name, 'feedback', { message: messages[id].content, positive: false }) + return [...messages] + }) + } React.useEffect(() => { if (isBuf(props.data)) props.data.registerOnChange(onDataChange) @@ -171,7 +192,7 @@ export const XChatbot = (props: Chatbot) => { onInfiniteLoad={onLoad} isInfiniteLoading={isInfiniteLoading} > - {msgs.map(({ from_user, content, id }, idx) => ( + {msgs.map(({ from_user, content, id, positive }, idx) => (
{ }} > + {props.events?.includes('feedback') && !from_user && +
+ handlePositive(idx)} iconProps={{ iconName: positive ? 'LikeSolid' : 'Like' }} /> + handleNegative(idx)} iconProps={{ iconName: (positive !== undefined && !positive) ? 'DislikeSolid' : 'Dislike' }} /> +
+ }
))} @@ -237,7 +264,7 @@ interface State { data: Rec /** Chat input box placeholder. Use for prompt examples. */ placeholder?: S - /** The events to capture on this chatbot. One of 'stop'. */ + /** The events to capture on this chatbot. One of 'stop' | 'scroll_up' | 'feedback'. */ events?: S[] /** True to show a button to stop the text generation. Defaults to False. */ generating?: B diff --git a/website/docs/examples/assets/chatbot-events-feedback.png b/website/docs/examples/assets/chatbot-events-feedback.png new file mode 100644 index 0000000000000000000000000000000000000000..d883d98a2565d5a3cfcdd033b25d37f74a64a542 GIT binary patch literal 97450 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

9jze7Rb{Ad0HS( z3*^5FWaDwAS9o<~^TTToN69mHXw>xe!ZQ9T^Y1JzkhsQ@0y=DDd&T$12War$06Ck#2OVa5hc*6s9gf z?*$i|Z4Nqp>=%v8>-IB>ubE4)9AVmq{*;V(?^6Cm@mG+#v6qt>Zd)H3|V)u)UK!G#*P?B_fl=|SJ?`Dp+L{J zWTYq;c5c~XzybbNBpuvJX7bU(;(GqQ$Nye=C;w>>(7M04n>jQlxiyPLL(L^7&ahi- zIG!D?b9}9{#HJY-{Zr@K#KKNc?T~$p$-xeHX+ie_(Ow8`BRD!wC}CflFi5T(l1D;u z$dx|@wO+ch(L(k?r848VCr!F1BW1C_%?F)PXNIV}-9xs~>hoqiKqFs3GpOCp%w1gOl<%OgbN%7Q2?7OAGE}t>-$}j9=@p+b37r{s5CP#e zJ)(bBL&39r8`oGgU$?imxlf})ap7~w!@h#8axuxB9|m=8dV$rI1wQ}VCk~{@?vt+Q z|FsO2`?cETo8#HF+)W?UJ|gkbRj!{+GpzjsM-0JCfFNh%{{lZrwdp72My`_%L4)s^ z9S2Dr_Yb={$@Vs+V>--mtU$KQpB9tE-;FohlkZPh?Xr!U4u0FFpwBTKdL3$g76kmM N{H5`@@X?Eq{{j!bF46!1 literal 0 HcmV?d00001 diff --git a/website/widgets/ai/chatbot.md b/website/widgets/ai/chatbot.md index 49965354cc..78592e0488 100644 --- a/website/widgets/ai/chatbot.md +++ b/website/widgets/ai/chatbot.md @@ -63,3 +63,21 @@ q.page['example'] = ui.chatbot_card( events=['scroll'] ) ``` + +## Collect feedback + +Add the thumbs up and thumbs down buttons below the chatbot response to capture user feedback by configuring the `feedback` event. See [full example](/docs/examples/chatbot-events-feedback) to learn more. + +```py {10} +from h2o_wave import data + +q.page['example'] = ui.chatbot_card( + box='1 1 5 5', + name='chatbot', + data=data(fields='content from_user', t='list', rows=[ + ['Hello, buddy. Can you help me?', True], + ['Sure, what you need?', False], + ]), + events=['feedback'] +) +```