simple-chatbot / app.py
tejoess
Updated app.py
ca39bef
import streamlit as st
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, AIMessage
# Load environment variables
load_dotenv()
# Initialize the ChatOpenAI model
@st.cache_resource
def init_llm():
return ChatOpenAI(
model="gpt-4o-mini",
temperature=0.1,
max_tokens=300 # Increased for better context explanations
)
# Initialize chat history
if "messages" not in st.session_state:
st.session_state.messages = []
# Streamlit UI
st.title("🤖 Simple Chatbot using openai")
st.write("Ask me anything and I'll give you a short, simple answer!")
# Display chat history
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})
# Display user message
with st.chat_message("user"):
st.markdown(prompt)
# Get bot response
with st.chat_message("assistant"):
try:
llm = init_llm()
# Create a system message to ensure short responses and context awareness
system_prompt = "You are a helpful assistant. Always give short, simple, and direct answers. Keep responses under 100 words. Pay attention to the conversation history to maintain context."
# Prepare messages for the model including recent chat history
messages = [HumanMessage(content=system_prompt)]
# Add recent chat history (last 10 messages) to provide context
recent_messages = st.session_state.messages[-10:] if len(st.session_state.messages) > 10 else st.session_state.messages
for msg in recent_messages:
if msg["role"] == "user":
messages.append(HumanMessage(content=msg["content"]))
else:
messages.append(AIMessage(content=msg["content"]))
# Add the current user message
messages.append(HumanMessage(content=prompt))
# Get response from the model
response = llm.invoke(messages)
bot_response = response.content
# Display response
st.markdown(bot_response)
# Add assistant response to chat history
st.session_state.messages.append({"role": "assistant", "content": bot_response})
except Exception as e:
error_msg = f"Error: {str(e)}"
st.error(error_msg)
st.session_state.messages.append({"role": "assistant", "content": error_msg})
# Sidebar with clear chat button
with st.sidebar:
st.header("Chat Controls")
if st.button("Clear Chat History"):
st.session_state.messages = []
st.rerun()
st.markdown("---")
st.markdown("**Instructions:**")
st.markdown("1. Make sure you have your OpenAI API key in a `.env` file")
st.markdown("2. The format should be: `OPENAI_API_KEY=your_api_key_here`")
st.markdown("3. Install required packages: `pip install streamlit langchain-openai python-dotenv`")