Spaces:
Running
Running
import streamlit as st | |
import os | |
from helper import invoke_text_api, invoke_text_image_api | |
import base64 | |
# Set Streamlit page config to wide layout | |
st.set_page_config(page_title="Chatbot", layout="wide") | |
# App Title with Emoji | |
st.title("π€ Chatbot with Image Support πΌοΈ") | |
# Sidebar for Image Upload | |
st.sidebar.header("π Upload an Image (Optional)") | |
uploaded_file = st.sidebar.file_uploader("πΈ Upload an image", type=["png", "jpg", "jpeg"]) | |
# If an image is uploaded, display it in the sidebar | |
if uploaded_file: | |
st.sidebar.image(uploaded_file, caption="πΌοΈ Uploaded Image Preview", use_container_width=True) | |
# Sidebar Parameters for AI Model | |
st.sidebar.header("βοΈ Model Parameters") | |
max_tokens = st.sidebar.slider("π Max Tokens (Response Length)", 100, 2000, 1000) | |
temperature = st.sidebar.slider("π₯ Temperature (Creativity)", 0.0, 1.0, 0.7) | |
top_k = st.sidebar.slider("π― Top K (Diversity Filter)", 1, 500, 150) | |
top_p = st.sidebar.slider("π Top P (Probability Sampling)", 0.0, 1.0, 0.98) | |
# Button to clear chat history | |
if st.sidebar.button("ποΈ Clear Chat History"): | |
st.session_state.messages = [] # Reset conversation history | |
st.rerun() # Corrected method to refresh the app | |
# Initialize chat history | |
if "messages" not in st.session_state: | |
st.session_state.messages = [] | |
# Display chat messages from history | |
for message in st.session_state.messages: | |
with st.chat_message(message["role"]): | |
st.markdown(message["content"]) | |
# Handle user input | |
if prompt := st.chat_input("What would you like to ask? π€"): | |
# Display user message | |
st.chat_message("user").markdown(prompt) | |
st.session_state.messages.append({"role": "user", "content": prompt}) | |
# Call the appropriate API function based on input type | |
with st.spinner("π€ Thinking..."): | |
if uploaded_file: | |
# Convert uploaded image to Base64 | |
image_bytes = uploaded_file.read() | |
base64_image = base64.b64encode(image_bytes).decode("utf-8") | |
response = invoke_text_image_api(base64_image, prompt, max_tokens, temperature, top_k, top_p) | |
else: | |
response = invoke_text_api(prompt, max_tokens, temperature, top_k, top_p) | |
# Display assistant response | |
with st.chat_message("assistant"): | |
st.markdown(response) | |
st.session_state.messages.append({"role": "assistant", "content": response}) | |