Skip to main content

Streamlit custom component that offers chat input box for messages - with files upload widget

Project description

streamlit-chat-input-fileupload

GitHub Actions PyPI version Total PyPI downloads Brought To You By KOLOMOLO Donate PayPal

A Streamlit custom component that extends the standard st.chat_input with file upload capability. Drop-in replacement for building chat interfaces that need document and image attachments.

Attaching a file to the chat input

LLM consuming the message with attached file

Features

  • Combined text input and file upload in a single component
  • Paperclip button for file selection with filename indicator
  • Supports images (PNG, JPG, GIF, WebP) and documents (PDF, CSV, TXT, XLSX, DOCX, MD, HTML)
  • Auto-detects light/dark theme from Streamlit's settings
  • Returns message text and file data (as bytes) in a single dict
  • Built with Streamlit Components v2 API

Installation

pip install streamlit-chat-input-fileupload

Usage

import streamlit as st
from streamlit_chat_input_fileupload import chat_input_with_upload

user_input = chat_input_with_upload(placeholder="Send a message...")

if user_input:
    st.write(f"Message: {user_input['text']}")

    if user_input["file"]:
        st.write(f"File: {user_input['file']['name']}")
        # user_input["file"]["data"] contains raw bytes

API

chat_input_with_upload()

chat_input_with_upload(
    placeholder="Send a message...",  # Input placeholder text
    disabled=False,                   # Disable the input
    key=None,                         # Unique component key
)

Returns None or dict:

  • text (str): Message text
  • file (dict or None): {name, type, size, data} where data is bytes

Sending Files to User

Use Streamlit's built-in st.download_button to send files back to the user:

import streamlit as st

# Text file
st.download_button(
    label="Download Report",
    data="Report content here",
    file_name="report.txt",
    mime="text/plain",
)

# Binary file (e.g., generated image, PDF)
st.download_button(
    label="Download Image",
    data=image_bytes,
    file_name="output.png",
    mime="image/png",
)

# CSV data
import pandas as pd
df = pd.DataFrame({"col1": [1, 2], "col2": [3, 4]})
st.download_button(
    label="Download CSV",
    data=df.to_csv(index=False),
    file_name="data.csv",
    mime="text/csv",
)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file streamlit_chat_input_fileupload-0.6.17-py3-none-any.whl.

File metadata

File hashes

Hashes for streamlit_chat_input_fileupload-0.6.17-py3-none-any.whl
Algorithm Hash digest
SHA256 f3b87e7eb85f18f801c3ff2a5fb497a882881044216ec454974a3b07444f9647
MD5 cd171f9c45c43c8baeea9cc73d6d0911
BLAKE2b-256 f96331afc518da9c644c0f8d6fd7b7f15cf239072b1f103db6353a8c1be48e61

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page