|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import os |
|
import streamlit as st |
|
from langchain.chains import ConversationChain |
|
from langchain_openai import ChatOpenAI |
|
from langchain.memory import ConversationBufferMemory |
|
from streamlit_extras.add_vertical_space import add_vertical_space |
|
from streamlit_extras.chat_elements import message |
|
|
|
|
|
if "openai_api_key" in st.secrets: |
|
os.environ["OPENAI_API_KEY"] = st.secrets["openai_api_key"] |
|
else: |
|
st.error("π OpenAI API Key is missing! Please add it to Streamlit secrets.") |
|
st.stop() |
|
|
|
|
|
def init_chatbot(model="gpt-4o-mini"): |
|
memory = ConversationBufferMemory() |
|
return ConversationChain(llm=ChatOpenAI(model=model), memory=memory, verbose=False) |
|
|
|
if "chatbot" not in st.session_state: |
|
st.session_state.chatbot = init_chatbot() |
|
|
|
|
|
st.markdown(""" |
|
<style> |
|
body { |
|
background-color: #f5f5f5; |
|
} |
|
.chat-container { |
|
background-color: #ffffff; |
|
padding: 20px; |
|
border-radius: 10px; |
|
box-shadow: 0px 4px 6px rgba(0,0,0,0.1); |
|
} |
|
</style> |
|
""", unsafe_allow_html=True) |
|
|
|
|
|
st.sidebar.title("βοΈ Settings") |
|
model_choice = st.sidebar.radio("Select Model", ("gpt-4o-mini", "gpt-4", "gpt-3.5-turbo")) |
|
|
|
|
|
if model_choice != st.session_state.chatbot.llm.model_name: |
|
st.session_state.chatbot = init_chatbot(model_choice) |
|
|
|
|
|
st.title("π¬ LangChain AI Chatbot") |
|
st.write("### Hi, I'm a chatbot built with LangChain powered by GPT. How can I assist you today?") |
|
|
|
|
|
if "chat_history" not in st.session_state: |
|
st.session_state.chat_history = [] |
|
|
|
|
|
user_input = st.text_input("You:", placeholder="Ask me anything...") |
|
|
|
|
|
if user_input: |
|
with st.spinner("Thinking..."): |
|
response = st.session_state.chatbot.run(user_input) |
|
if response: |
|
st.session_state.chat_history.append(("user", user_input)) |
|
st.session_state.chat_history.append(("bot", response)) |
|
|
|
|
|
st.write("### π¨οΈ Conversation") |
|
chat_container = st.container() |
|
|
|
with chat_container: |
|
for role, text in st.session_state.chat_history: |
|
if role == "user": |
|
message(text, is_user=True, avatar_style="thumbs") |
|
else: |
|
message(text, is_user=False, avatar_style="bottts") |
|
|
|
|
|
add_vertical_space(2) |
|
|
|
|
|
with st.expander("π Chat History"): |
|
for role, text in st.session_state.chat_history: |
|
st.write(f"**{role.capitalize()}**: {text}") |
|
|
|
|
|
st.markdown("---") |
|
st.markdown("Developed with β€οΈ using Streamlit & LangChain") |
|
|