A chat box and some helpful tools used to build chatbot app with streamlit
Project description
Attention!
Since version 1.24.0 streamlit provides official elements to build conversational apps.
The new elements are more flexible, extensible and better supported, I would suggest to use them.
However, streamlit>=1.23 requires protobuf>=4 when some package requires protobuf<=3. In this condition you can use this package(<1.0.0) with streamlit<=1.22 as alternative. They are all simple to render text messages.
This package(>=1.0.0) will focus on wrapper of official chat elements to make chat with LLMs more convenient.
Chatbox component for streamlit
A Streamlit component to show chat messages. It's basiclly a wrapper of streamlit officeial elements including the chat elemnts.
Features
- support streaming output.
- support markdown/image/video/audio messages, and all streamlit elements could be supported by customized
OutputElement
. - output multiple messages at once, and make them collapsable.
This make it easy to chat with langchain LLMs in streamlit.
Install
just pip install -U streamlit-chatbox
Usage examples
import streamlit as st
from streamlit_chatbox import *
import time
llm = FakeLLM()
chat_box = ChatBox()
with st.sidebar:
st.subheader('start to chat using streamlit')
streaming = st.checkbox('streaming', True)
in_expander = st.checkbox('show messages in expander', True)
show_history = st.checkbox('show history', False)
chat_box.output_messages()
if query := st.chat_input('input your question here'):
chat_box.user_say(query)
if streaming:
generator = llm.chat_stream(query)
elements = chat_box.ai_say(
[
# you can use string for Markdown output if no other parameters provided
Markdown("thinking", in_expander=in_expander,
expanded=True, title="answer"),
Markdown("", in_expander=in_expander, title="references"),
]
)
time.sleep(1)
text = ""
for x, docs in generator:
text += x
chat_box.update_msg(text, 0, streaming=True)
chat_box.update_msg("\n\n".join(docs), 1, streaming=False)
# update the element without focus
chat_box.update_msg(text, 0, streaming=False)
else:
text, docs = llm.chat(query)
chat_box.ai_say(
[
Markdown(text, in_expander=in_expander,
expanded=True, title="answer"),
Markdown("\n\n".join(docs), in_expander=in_expander,
title="references"),
]
)
if st.button('show me the multimedia'):
chat_box.ai_say(Image(
'https://tse4-mm.cn.bing.net/th/id/OIP-C.cy76ifbr2oQPMEs2H82D-QHaEv?w=284&h=181&c=7&r=0&o=5&dpr=1.5&pid=1.7'))
time.sleep(0.5)
chat_box.ai_say(
Video('https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4'))
time.sleep(0.5)
chat_box.ai_say(
Audio('https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4'))
if show_history:
st.write(chat_box.history)
Todos
-
wrapper of official chat elements
-
input messages: (this depends on the official st.chat_input improvement by #7069)
- TEXT
- IMAGE
- file upload
- paste from clipboard(streamlit_bokeh_events)
- VIDEO
- file upload
- AUDIO
- file upload
- audio-recorder-streamlit
-
output message types:
- Text/Markdown/Image/Audio/Video
- any other output types supported by streamlit
-
improve output performance
- streaming output message
- show message in expander
- style the output message
-
custom run flow
- customizable node
- flow chart by graphviz
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for streamlit_chatbox-1.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2bef9674133347ea7b441fddb17a28f9dc2409f4a7de430cbccf444982a301bb |
|
MD5 | ea86cafd4f1635fb5e36651e3cb04a2d |
|
BLAKE2b-256 | 677423e2084488e28f794190b98f373e2f5f1805612ac7b686bc9e78a303580b |