Skip to main content

Streamlit Chat Widget

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.

  1. Navigate to the frontend folder:
    cd streamlit_chat_widget/frontend
    
  2. Install dependencies:
    npm install
    
  3. Build the frontend:
    npm run build
    
  4. Run the component locally (for development):
    npm start
    

Step 3: Publish the Package

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.

Release files for streamlit-chat-widget-tiangong 0.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for streamlit-chat-widget-tiangong 0.0.3
File Size Uploaded
streamlit_chat_widget_tiangong-0.0.3.tar.gz 788.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for streamlit-chat-widget-tiangong 0.0.3
File Interpreter ABI Platform
streamlit_chat_widget_tiangong-0.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 1.6 MB

Release files / streamlit_chat_widget_tiangong-0.0.3.tar.gz

Download URL streamlit_chat_widget_tiangong-0.0.3.tar.gz
Size 788.4 kB
Tags Source
SHA-256 checksum
How to use checksums
ffc7aeebedaa3232197e6b2259e3b87584d4b4c03add5493f41717b02b018f43
BLAKE2b-256 checksum
How to use checksums
24ac15ef4f122bcc4f10dbe6dcc13925f04698d0bd1d2280ba5cfa235e3e1942
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.12.3

Release files / streamlit_chat_widget_tiangong-0.0.3-py3-none-any.whl

Download URL streamlit_chat_widget_tiangong-0.0.3-py3-none-any.whl
Size 795.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4963f79e41ced658f3e07514b420b6a8faafddc86b21012801f8bceffa452f89
BLAKE2b-256 checksum
How to use checksums
614880fd6a3ce78c236ed37b1c50589387803b944d29692d8486500f26cdf3be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.0.3 This release

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page