chatbot / app.py
Pradeep Kumar
Update app.py
f3e8c29 verified
import subprocess
import sys
# Install required libraries
def install_packages():
required_packages = [
"langchain",
"langchain-community",
"streamlit"
]
for package in required_packages:
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
# Run package installation
install_packages()
import os
import streamlit as st
from langchain.llms import HuggingFaceHub
from langchain.schema import SystemMessage, HumanMessage, AIMessage
import dotenv
# Load environment variables from .env file
dotenv.load_dotenv()
token = os.getenv("HF_TOKEN") # Automatically retrieved from environment variables
if not token:
raise ValueError("HF_TOKEN is not set. Please configure it in your environment variables or a .env file.")
llm = HuggingFaceHub(
repo_id = "mistralai/Mistral-7B-Instruct-v0.2",
model_kwargs={"max_length": 128, "temperature": 0.3},
huggingfacehub_api_token=token,
)
# Streamlit App Functions
def init_page() -> None:
"""Initializes the Streamlit page."""
st.set_page_config(page_title="AI Chatbot")
# Display the header
st.header("AI Chatbot 🤖")
# Display the subheader
st.write("Created by Pradeep Kumar")
st.sidebar.title("Options")
def init_messages() -> None:
"""Initializes the conversation messages."""
clear_button = st.sidebar.button("Clear Conversation", key="clear")
if clear_button or "messages" not in st.session_state:
st.session_state.messages = [
SystemMessage(content="You are a helpful AI assistant. Reply in markdown format.")
]
def get_answer(llm, user_input: str) -> str:
try:
return llm(user_input)
except Exception as e:
return f"An error occurred: {str(e)}"
def main() -> None:
"""Main function for the Streamlit app."""
init_page()
init_messages()
if user_input := st.chat_input("Input your question!"):
st.session_state.messages.append(HumanMessage(content=user_input))
with st.spinner("Bot is typing ..."):
answer = get_answer(llm, user_input)
st.session_state.messages.append(AIMessage(content=answer))
messages = st.session_state.get("messages", [])
for message in messages:
if isinstance(message, AIMessage):
with st.chat_message("assistant"):
st.markdown(message.content)
elif isinstance(message, HumanMessage):
with st.chat_message("user"):
st.markdown(message.content)
if __name__ == "__main__":
main()