medicalbot / app.py
Manasa1's picture
Update app.py
949c40f verified
raw
history blame
2.32 kB
from langchain import PromptTemplate
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.llms import CTransformers
from langchain.chains import RetrievalQA
import gradio as gr
DB_FAISS_PATH = "vectorstores/db_faiss"
custom_prompt_template = """Use the following pieces of information to answer the user's question.
If you don't know the answer, just say that you don't know, don't try to make up an answer.
Context: {context}
Question: {question}
only return the helpful answer below and nothing else.
Helpful answer:
"""
def set_custom_prompt():
prompt = PromptTemplate(template=custom_prompt_template, input_variables=['context', 'question'])
return prompt
def load_llm():
llm = CTransformers(
model="llama-2-7b-chat.ggmlv3.q8_0.bin",
model_type="llama",
max_new_tokens=512,
temperature=0.5
)
return llm
def retrieval_QA_chain(llm, prompt, db):
qachain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=db.as_retriever(search_kwargs={'k': 2}),
return_source_documents=True,
chain_type_kwargs={'prompt': prompt}
)
return qachain
def qa_bot():
embeddings = HuggingFaceEmbeddings(model_name='sentence-transformers/all-miniLM-L6-V2', model_kwargs={'device': 'cpu'})
db = FAISS.load_local(DB_FAISS_PATH, embeddings, allow_dangerous_deserialization=True)
llm = load_llm()
qa_prompt = set_custom_prompt()
qa = retrieval_QA_chain(llm, qa_prompt, db)
return qa
def chatbot_response(query):
try:
qa = qa_bot()
response = qa({'query': query})
answer = response["result"]
sources = response["source_documents"]
if sources:
answer += f"\nSources:" + str(sources)
else:
answer += "\nNo sources found"
return answer
except Exception as e:
return f"An error occurred: {str(e)}"
# Create a Gradio interface with updated API
iface = gr.Interface(
fn=chatbot_response,
inputs=gr.Textbox(lines=2, placeholder="Enter your question..."),
outputs="text",
title="Medical Chatbot",
description="Ask a medical question and get answers based on the provided context."
)
# Launch the Gradio app
iface.launch()