import streamlit as st import os import random, string from langchain.chains import LLMChain from langchain_core.prompts import ( ChatPromptTemplate, HumanMessagePromptTemplate, MessagesPlaceholder, ) from langchain_core.messages import SystemMessage from langchain.chains.conversation.memory import ConversationBufferWindowMemory from langchain_groq import ChatGroq if 'chat_list' not in st.session_state: st.session_state.chat_list = [] def arr(): for c_list in st.session_state.chat_list: with st.chat_message("user"): st.write("Question : " + c_list["ques"]) with st.chat_message("machine"): st.write("Answer : " + c_list["ans"]) def main(): """ This function is the main entry point of the application. It sets up the Groq client, the Streamlit interface, and handles the chat interaction. """ # Get Groq API key groq_api_key = st.secrets["Groq_API_key"] model = 'llama3-8b-8192' # Initialize Groq Langchain chat object and conversation groq_chat = ChatGroq( groq_api_key=groq_api_key, model_name=model ) st.title('Langchain Chatbot With llama3-8b-8192 model') # print("Hello! I'm your friendly Groq chatbot. I can help answer your questions, provide information, or just chat. I'm also super fast! Let's start our conversation!") st.markdown("Hello! I'm your friendly Groq chatbot, dev by GJ. I can help answer your questions, provide information, or just chat. I'm also super fast! Let's start our conversation!") system_prompt = 'You are a friendly conversational chatbot' conversational_memory_length = 5 # number of previous messages the chatbot will remember during the conversation if 'memory' not in st.session_state: st.session_state.memory = ConversationBufferWindowMemory(k=conversational_memory_length, memory_key="chat_history", return_messages=True) # st.write(st.session_state.memory) # user_question = st.text_input("Ask a question: ") user_question = st.chat_input("Ask a question:") if user_question: # Construct a chat prompt template using various components prompt = ChatPromptTemplate.from_messages( [ SystemMessage( content=system_prompt ), # This is the persistent system prompt that is always included at the start of the chat. MessagesPlaceholder( variable_name="chat_history" ), # This placeholder will be replaced by the actual chat history during the conversation. It helps in maintaining context. HumanMessagePromptTemplate.from_template( "{human_input}" ), # This template is where the user's current input will be injected into the prompt. ] ) # Create a conversation chain using the LangChain LLM (Language Learning Model) conversation = LLMChain( llm=groq_chat, # The Groq LangChain chat object initialized earlier. prompt=prompt, # The constructed prompt template. verbose=False, # TRUE Enables verbose output, which can be useful for debugging. memory=st.session_state.memory, # The conversational memory object that stores and manages the conversation history. ) # The chatbot's answer is generated by sending the full prompt to the Groq API. response = conversation.predict(human_input=user_question) # st.text("Question: " + user_question) # st.text("Chatbot: " + response) result = {"ques":user_question, "ans":response} st.session_state.chat_list.append(result) arr() # st.write(st.session_state.memory) if __name__ == "__main__": main()