A custom chat input widget for Streamlit based on Mohammed Bahageel's Chat Input Widget
Project description
Streamlit Chat Widget
The streamlit_chat_widget is a custom chat input component designed for Streamlit applications, allowing users to send text and audio messages seamlessly. This widget can be integrated into Streamlit apps, making it ideal for building conversational AI interfaces, voice assistants, or any chat-based applications the component was developed by Mohammed Bahageel artificial Intelligence developer.
Features
- Text Input: Users can type text messages and send them.
- Audio Recording: Built-in microphone functionality to capture audio messages.
- Fixed Positioning: The widget remains fixed at the bottom of the Streamlit app, similar to Streamlit's
st.chat_input.
Installation
Install the package directly from PyPI:
pip install streamlit-chat-widget
Setup
Step 1: Import and Initialize the Component
To use the component, import it into your Streamlit app. The widget will display at the bottom of the screen by default.
Step 2: Set Up the Frontend Component
If you want to modify or rebuild the React component, you can find the source code in the frontend directory.
- Navigate to the
frontendfolder:cd streamlit_chat_widget/frontend
- Install dependencies:
npm install - Build the frontend:
npm run build
- Run the component locally (for development):
npm start
Step 3: Publish the Package
With reference to: https://github.com/linancn/Chat_input_widget/
pip install twine setuptools
python setup.py sdist bdist_wheel
twine upload dist/*
Usage
Here’s a sample code to get you started with streamlit_chat_widget:
import streamlit as st
from streamlit_chat_widget import chat_input_widget
def main():
st.title("My Custom Chat Application")
# Initialize chat history in Streamlit session state
if "chat_history" not in st.session_state:
st.session_state.chat_history = []
# Display the chat history
for message in st.session_state.chat_history:
st.write(message)
# Display the chat input widget at the bottom
user_input = chat_input_widget()
# Process the user's input from the widget
if user_input:
if "text" in user_input:
user_text =user_input["text"]
st.session_state.chat_history.append(f"You: {user_text}")
elif "audioFile" in user_input:
audio_bytes = bytes(user_input["audioFile"])
st.audio(audio_bytes)
if __name__ == "__main__":
main()
Example
To create a simple app with the chat widget:
import streamlit as st
from streamlit_chat_widget import chat_input_widget
from streamlit_extras.bottom_container import bottom #pip install streamlit_extras
def main():
st.title("My Custom Chat Application")
# Initialize chat history in Streamlit session state
if "chat_history" not in st.session_state:
st.session_state.chat_history = []
# Display the chat history
for message in st.session_state.chat_history:
st.write(message)
# Display the chat input widget at the bottom
with bottom():
user_input = chat_input_widget()
# Process the user's input from the widget
if user_input:
if "text" in user_input:
user_text =user_input["text"]
st.session_state.chat_history.append(f"You: {user_text}")
elif "audioFile" in user_input:
audio_bytes = bytes(user_input["audioFile"])
st.audio(audio_bytes)
if __name__ == "__main__":
main()
CSS Customization
To style the widget or customize its appearance, add custom CSS in your Streamlit app. Here’s a basic example:
st.markdown("""
<style>
.chat-container {
position: fixed;
bottom: 0;
width: 100%;
max-width: 600px;
margin: 0 auto;
}
</style>
""", unsafe_allow_html=True)
Additional Customization:
To postion the chat input widget in a fixed postion at the bottom of streamlit application use streamlit floating containers
import streamlit as st
from streamlit_float import *
from streamlit_chat_widget import chat_input_widget
def app():
float_init()
footer_container = st.container()
with footer_container:
user_input = chat_input_widget()
footer_container.float(
"display:flex; align-items:center;justify-content:center; overflow:hidden visible;flex-direction:column; position:fixed;bottom:15px;"
)
if __name__ == "__main__":
app()
License
This project is licensed under the MIT License. See the LICENSE file for more information.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file streamlit_chat_widget_franklu-0.3.0.tar.gz.
File metadata
- Download URL: streamlit_chat_widget_franklu-0.3.0.tar.gz
- Upload date:
- Size: 4.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cdf5e046175975dc6ad90e034bba1cf4e2015ee82d165baced25ae4947c59410
|
|
| MD5 |
0be0e3459860bbda681f5551dabaa1ff
|
|
| BLAKE2b-256 |
1d3217b724f139aeedfde8cacb0fcd87352972c22d32b96bf1f93c0ffc237e54
|
File details
Details for the file streamlit_chat_widget_franklu-0.3.0-py3-none-any.whl.
File metadata
- Download URL: streamlit_chat_widget_franklu-0.3.0-py3-none-any.whl
- Upload date:
- Size: 4.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7402814e150768bb0c6fd6df058a4efd4f7d0d2ac60e36b4e13e1202ef3ff513
|
|
| MD5 |
6cfbddbdd5f8710d172d7708dc92d82d
|
|
| BLAKE2b-256 |
890f59a36ee368e572305dd14734a5df1c445b733a53e8297c8a9bb8e1d33ceb
|