|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
os.environ["OPENAI_API_KEY"] = "" |
|
|
|
|
|
@st.cache_resource |
|
def init_chatbot(): |
|
memory = ConversationBufferMemory() |
|
chatbot = ConversationChain( |
|
llm=ChatOpenAI(model="gpt-4o-mini"), |
|
memory=memory, |
|
verbose=False |
|
) |
|
return chatbot |
|
|
|
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: |
|
chatbot.llm = ChatOpenAI(model=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 = chatbot.run(user_input) |
|
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") |
|
|