chatbot / app.py
silentkiller1904's picture
Update app.py
906c141 verified
# from langchain_ollama import ChatOllama
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
from dotenv import load_dotenv
import uuid
import gradio as gr
load_dotenv() # Load environment variables from .env file
store = {}
def get_session_history(session_id):
"""
Function to get the session history.
This function can be modified to retrieve history from a database or any other storage.
"""
if( session_id not in store):
store[session_id] = InMemoryChatMessageHistory()
return store[session_id]
#set up llama3.2:latest model with Ollama
# llm = ChatOllama(model="llama3.2:latest", temperature=2.0)
llm=ChatGoogleGenerativeAI(
model="gemini-2.0-flash"
)
#Create a chat prompt template
prompt = ChatPromptTemplate.from_messages(
messages=[
# ("system", "You are a helpful assistant. Answer the user's questions to the best of your ability."),
("system", "You are a friendly and helpful assistant named Zenbot. Start by greeting the user and then answer their questions."),
MessagesPlaceholder(variable_name="history"),
("human", "{input}")
]
)
#Combine the prompt and the model into a chain. 1st version
# chain = prompt | llm
# response = chain.invoke({"question": "How to install gradio?"})
# print(response.content)
#chain with message history
# This allows the model to remember previous interactions in the session
chain = RunnableWithMessageHistory(
runnable= prompt | llm,
get_session_history=get_session_history,
input_messages_key="input",
history_messages_key="history",
)
#Function to handle user input and generate a response. 1st version
# def chatbot(question):
# if(question.strip() == ""):
# return "Please enter a valid question."
# response = chain.invoke({"question": question})
# return response.content
def chatbot(user_input,history_state,temprature_slider, session_id=str(uuid.uuid4())):
"""
Function to handle user input and generate a response.
It maintains the session history and returns the response.
"""
if(user_input.strip() == ""):
return "Please enter a valid question."
llm.temperature = temprature_slider # Set the temperature for the model
response = chain.invoke(
{"input": user_input},
config={"configurable": {"session_id": session_id}}
).content
if history_state is None:
history_state = []
history_state.append((user_input, response))
return str(store[session_id]) #, "Temprature : " + str(temprature_slider)
def clear(session_id):
print("Clearing conversation history")
store[session_id] = InMemoryChatMessageHistory()
#Create a Gradio interface
with gr.Blocks() as demo:
gr.Markdown("Zensar chatbot")
history_state = gr.State(value=None) # To keep track of the conversation history
session_id = gr.State(value=str(uuid.uuid4())) # Unique session ID for each user
input_box = gr.Textbox(label="Ask a question", placeholder="Type your question here...")
temprature_slider = gr.Slider(
label="Temperature",
minimum=0.0,
maximum=1.0,
value=0.5,
step=0.1,
interactive=True,
)
output_box = gr.Textbox(label="Answer", interactive=False)
submit_button = gr.Button("Submit")
clear_button = gr.ClearButton(components=[input_box, output_box, temprature_slider])
submit_button.click(
fn=chatbot,
inputs=[input_box,history_state,temprature_slider, session_id],
outputs=output_box
)
clear_button.click(
fn=clear,
inputs=[session_id],
)
# Launch the Gradio app
demo.launch()