74 lines
3.0 KiB
Python
74 lines
3.0 KiB
Python
import os
|
|
from groq import Groq
|
|
|
|
from langchain.chains import ConversationChain, 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
|
|
from langchain.prompts import PromptTemplate
|
|
|
|
|
|
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 = os.environ['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
|
|
)
|
|
|
|
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!")
|
|
|
|
system_prompt = 'You are a friendly conversational chatbot'
|
|
conversational_memory_length = 5 # number of previous messages the chatbot will remember during the conversation
|
|
|
|
memory = ConversationBufferWindowMemory(k=conversational_memory_length, memory_key="chat_history", return_messages=True)
|
|
|
|
|
|
#chat_history = []
|
|
while True:
|
|
user_question = input("Ask a question: ")
|
|
|
|
# If the user has asked 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=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)
|
|
print("Chatbot:", response)
|
|
|
|
if __name__ == "__main__":
|
|
main() |