chat / app.py
Paul Magee
Comprehensive UI/UX and Architecture Improvements
c05de71
raw
history blame
2.56 kB
"""
Streamlit web interface for the chatbot application.
"""
import streamlit as st
from chatbot import Chatbot
from utils.logging_config import setup_logging
import config
# Setup logging
logger = setup_logging()
# Set page config
st.set_page_config(
page_title="Document Chatbot",
page_icon="πŸ“š",
layout="wide"
)
# Initialize session state for chat history
if "messages" not in st.session_state:
st.session_state.messages = []
# Initialize chatbot
if "chatbot" not in st.session_state:
with st.spinner("Initializing chatbot..."):
# Get configuration from config module
chatbot_config = config.get_chatbot_config()
# Initialize chatbot
logger.info("Initializing chatbot...")
st.session_state.chatbot = Chatbot(chatbot_config)
# Load documents and create index
documents = st.session_state.chatbot.load_documents()
st.session_state.chatbot.create_index(documents)
st.session_state.chatbot.initialize_query_engine()
logger.info("Chatbot initialized successfully")
# Title and description
st.title("πŸ“š Document Chatbot")
st.markdown("""
This chatbot can answer questions about your documents.
Ask any question about the content in your documents!
""")
# Display chat messages
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Chat input
if prompt := st.chat_input("What would you like to know?"):
# Add user message to chat history
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.markdown(prompt)
# Get chatbot response
with st.chat_message("assistant"):
with st.spinner("Thinking..."):
logger.info(f"User query: {prompt}")
response = st.session_state.chatbot.query(prompt)
st.markdown(response)
st.session_state.messages.append({"role": "assistant", "content": response})
logger.info("Response provided to user")
# Sidebar with information
with st.sidebar:
st.title("About")
st.markdown("""
This chatbot uses:
- LlamaIndex for document processing
- Claude 3 Sonnet for answering questions
- Streamlit for the interface
The chatbot has access to your documents in the `data` folder.
""")
# Add a clear chat button
if st.button("Clear Chat History"):
st.session_state.messages = []
logger.info("Chat history cleared")
st.rerun()