# Chatbot / Stream | |
# Use this card for chatbot interactions, supports text streaming. | |
# #chatbot #stream | |
# --- | |
from h2o_wave import main, app, Q, ui, data | |
async def serve(q: Q): | |
if not q.client.initialized: | |
# Use list buffer to allow easy streaming. Must have exactly 2 fields - content and from_user. | |
q.page['example'] = ui.chatbot_card(box='1 1 5 5', data=data(fields='content from_user', t='list'), name='chatbot') | |
q.client.initialized = True | |
# A new message arrived. | |
if q.args.chatbot: | |
# Append user message. | |
q.page['example'].data += [q.args.chatbot, True] | |
# Append bot response. | |
q.page['example'].data += ['', False] | |
# Stream bot response. | |
stream = '' | |
for w in 'I am a fake chatbot. Sorry, I cannot help you.'.split(): | |
await q.sleep(0.1) | |
stream += w + ' ' | |
q.page['example'].data[-1] = [stream, False] | |
await q.page.save() | |
await q.page.save() | |