Spaces:
Runtime error
Runtime error
import gradio as gr | |
from langchain.schema import HumanMessage, AIMessage | |
from langchain.chains import create_retrieval_chain, create_history_aware_retriever | |
from langchain.chains.combine_documents import create_stuff_documents_chain | |
from langchain_community.vectorstores import Chroma | |
from langchain_community.llms import HuggingFacePipeline | |
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder | |
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig, pipeline | |
import os | |
from huggingface_hub import login | |
# Read the Hugging Face token | |
hf_token = os.getenv("SP_7") | |
if hf_token is None: | |
raise ValueError( | |
"Hugging Face token 'SP_7' is not set in the environment variables. " | |
"Ensure it is defined in the .env file." | |
) | |
# Log in to Hugging Face | |
login(token=hf_token) | |
# Load the pre-existing vector store | |
vector_store = Chroma(persist_directory="./bg_data_english") | |
similarity_retriever = vector_store.as_retriever( | |
search_type="similarity_score_threshold", search_kwargs={"k": 5, "score_threshold": 0.2} | |
) | |
# Load the LLM | |
# quantization_config = BitsAndBytesConfig(load_in_8bit=True, device = "cpu") | |
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-9b-it") | |
llm_model = AutoModelForCausalLM.from_pretrained( | |
"google/gemma-2-9b-it" | |
) | |
text_generation_pipeline = pipeline( | |
model=llm_model, | |
tokenizer=tokenizer, | |
task="text-generation", | |
return_full_text=False, | |
max_new_tokens=350, | |
) | |
llm = HuggingFacePipeline(pipeline=text_generation_pipeline) | |
# Reformulating user queries with history context | |
rephrase_system_prompt = """Given a chat history and the latest user question | |
which might reference context in the chat history, formulate a standalone question | |
which can be understood without the chat history. Do NOT answer the question, | |
just reformulate it if needed and otherwise return it as is.""" | |
rephrase_prompt = ChatPromptTemplate.from_messages( | |
[ | |
("system", rephrase_system_prompt), | |
MessagesPlaceholder("chat_history"), | |
("human", "{input}"), | |
] | |
) | |
history_aware_retriever = create_history_aware_retriever(llm, similarity_retriever, rephrase_prompt) | |
# Define the question-answering system prompt | |
qa_system_prompt = """You are a saintly guide inspired by the teachings of the Bhagavad Gita, offering wisdom and moral guidance. Answer questions in a friendly and compassionate tone, drawing insights from the scripture to help users with their life challenges. | |
Use the provided context to craft your response and remain faithful to the philosophy of the Bhagavad Gita. | |
If you don't know the answer, humbly admit it or request the user to clarify or provide more details. | |
Limit your response to 5 lines unless the user explicitly asks for more explanation. | |
Question: | |
{input} | |
Context: | |
{context} | |
Answer: | |
""" | |
qa_prompt = ChatPromptTemplate.from_messages( | |
[ | |
("system", qa_system_prompt), | |
MessagesPlaceholder("chat_history"), | |
("human", "{input}"), | |
] | |
) | |
question_answer_chain = create_stuff_documents_chain(llm, qa_prompt) | |
qa_rag_chain = create_retrieval_chain(history_aware_retriever, question_answer_chain) | |
# Function to generate answers | |
chat_history = [] | |
def chat(question): | |
global chat_history | |
response = qa_rag_chain.invoke({"input": question, "chat_history": chat_history}) | |
answer = response["answer"].strip() | |
if answer.startswith("Saintly Guide:"): | |
answer = answer[len("Saintly Guide:"):].strip() | |
elif answer.startswith("AI:"): | |
answer = answer[len("AI:"):].strip() | |
chat_history.extend([HumanMessage(content=question), AIMessage(content=response["answer"])]) | |
return answer | |
# Create Gradio interface | |
interface = gr.Interface( | |
fn=chat, | |
inputs=gr.Textbox(label="Ask your question", placeholder="What's troubling you?"), | |
outputs=gr.Textbox(label="Answer"), | |
title="Bhagavad Gita Chatbot", | |
description="Ask questions inspired by the teachings of the Bhagavad Gita and receive saintly guidance." | |
) | |
# Launch the app | |
if __name__ == "__main__": | |
interface.launch() | |