File size: 8,403 Bytes
522071e 2e75e2c 522071e 2e75e2c 522071e 2e75e2c 522071e 2e75e2c 522071e 2e75e2c 522071e b08b384 1e5ab8d 522071e 2e75e2c 522071e b08b384 522071e b08b384 522071e b08b384 2e75e2c 522071e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 |
# import os
# from dotenv import load_dotenv
# import gradio as gr
# from llama_index.core import StorageContext, load_index_from_storage, VectorStoreIndex, SimpleDirectoryReader, ChatPromptTemplate, Settings
# from llama_index.llms.huggingface import HuggingFaceInferenceAPI
# from llama_index.embeddings.huggingface import HuggingFaceEmbedding
# from sentence_transformers import SentenceTransformer
# load_dotenv()
# # Configure the Llama index settings
# Settings.llm = HuggingFaceInferenceAPI(
# model_name="meta-llama/Meta-Llama-3-8B-Instruct",
# tokenizer_name="meta-llama/Meta-Llama-3-8B-Instruct",
# context_window=3000,
# token=os.getenv("HF_TOKEN"),
# max_new_tokens=512,
# generate_kwargs={"temperature": 0.1},
# )
# Settings.embed_model = HuggingFaceEmbedding(
# model_name="BAAI/bge-small-en-v1.5"
# )
# # Define the directory for persistent storage and data
# PERSIST_DIR = "db"
# PDF_DIRECTORY = 'data' # Changed to the directory containing PDFs
# # Ensure directories exist
# os.makedirs(PDF_DIRECTORY, exist_ok=True)
# os.makedirs(PERSIST_DIR, exist_ok=True)
# # Variable to store current chat conversation
# current_chat_history = []
# def data_ingestion_from_directory():
# # Use SimpleDirectoryReader on the directory containing the PDF files
# documents = SimpleDirectoryReader(PDF_DIRECTORY).load_data()
# storage_context = StorageContext.from_defaults()
# index = VectorStoreIndex.from_documents(documents)
# index.storage_context.persist(persist_dir=PERSIST_DIR)
# def handle_query(query):
# chat_text_qa_msgs = [
# (
# "user",
# """
# You are the Respiratory Health Solutions chatbot. Your goal is to provide accurate, evidence-based, and helpful answers to user queries about managing, preventing, and understanding a range of respiratory diseases, including Atelectasis, Consolidation, Infiltration, Pneumothorax, Edema, Emphysema, Fibrosis, Effusion, Pneumonia, Pleural Thickening, Cardiomegaly, Nodule Mass, and Hernia. Ensure your responses are clear, actionable, and tailored to each user's question, focusing on practical guidance, treatment options, and preventive measures based on the latest medical information available.
# Context:
# {context_str}
# Question:
# {query_str}
# """
# )
# ]
# text_qa_template = ChatPromptTemplate.from_messages(chat_text_qa_msgs)
# # Load index from storage
# storage_context = StorageContext.from_defaults(persist_dir=PERSIST_DIR)
# index = load_index_from_storage(storage_context)
# # Use chat history to enhance response
# context_str = ""
# for past_query, response in reversed(current_chat_history):
# if past_query.strip():
# context_str += f"User asked: '{past_query}'\nBot answered: '{response}'\n"
# query_engine = index.as_query_engine(text_qa_template=text_qa_template, context_str=context_str)
# answer = query_engine.query(query)
# if hasattr(answer, 'response'):
# response = answer.response
# elif isinstance(answer, dict) and 'response' in answer:
# response = answer['response']
# else:
# response = "Sorry, as per my current knowledge I am unable to answer this question. Is there anything else I can help you with?"
# # Remove sensitive information and unwanted sections from the response
# sensitive_keywords = [PERSIST_DIR, PDF_DIRECTORY, "/", "\\", ".pdf", ".doc", ".txt"]
# for keyword in sensitive_keywords:
# response = response.replace(keyword, "")
# # Remove sections starting with specific keywords
# unwanted_sections = ["Page Label","Page Label:","page_label","page_label:","file_path:","file_path",]
# for section in unwanted_sections:
# if section in response:
# response = response.split(section)[0]
# # Additional cleanup for any remaining artifacts from replacements
# response = ' '.join(response.split())
# # Update current chat history
# current_chat_history.append((query, response))
# return response
# # Example usage: Process PDF ingestion from directory
# print("Processing PDF ingestion from directory:", PDF_DIRECTORY)
# data_ingestion_from_directory()
# # Define the input and output components for the Gradio interface
# input_component = gr.Textbox(
# show_label=False,
# placeholder="Hey I Am ChestDiseaseCyclopedia, Ask me anything about diseases..."
# )
# output_component = gr.Textbox()
# # Function to handle queries
# def chatbot_handler(query):
# response = handle_query(query)
# return response
# # Create the Gradio interface
# interface = gr.Interface(
# fn=chatbot_handler,
# inputs=input_component,
# outputs=output_component,
# title="Welcome to Disease Solutions",
# description="I am here to assist you with any questions you have about disease Prevention. How can I help you today?"
# )
# # Launch the Gradio interface
# interface.launch()
import gradio as gr
import os
from langchain_groq import ChatGroq
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import create_retrieval_chain
from langchain_community.vectorstores import FAISS
from langchain_community.document_loaders import PyPDFDirectoryLoader
from langchain_huggingface import HuggingFaceEmbeddings
from dotenv import load_dotenv
load_dotenv()
# --- Initialize LLM
groq_api_key = "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"
llm = ChatGroq(groq_api_key=groq_api_key, model_name="meta-llama/llama-4-scout-17b-16e-instruct")
# --- Prompt Template
prompt = ChatPromptTemplate.from_template(
"""
You are the Respiratory Health Solutions chatbot. Your goal is to provide accurate, evidence-based, and helpful answers to user queries about managing, preventing, and understanding a range of respiratory diseases, including Atelectasis, Consolidation, Infiltration, Pneumothorax, Edema, Emphysema, Fibrosis, Effusion, Pneumonia, Pleural Thickening, Cardiomegaly, Nodule Mass, and Hernia. Ensure your responses are clear, actionable, and tailored to each user's question, focusing on practical guidance, treatment options, and preventive measures based on the latest medical information available.
<context>
{context}
<context>
Question:{input}
"""
)
# --- Build the vector DB at startup
def load_embeddings():
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
loader = PyPDFDirectoryLoader("data")
docs = loader.load()
if not docs:
raise ValueError("No PDF documents found in the 'data/' directory.")
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
final_docs = splitter.split_documents(docs[:50])
if not final_docs:
raise ValueError("Text splitting returned no valid document chunks.")
return FAISS.from_documents(final_docs, embeddings)
# --- Prepare retriever and chain
vector_store = load_embeddings()
retriever = vector_store.as_retriever()
document_chain = create_stuff_documents_chain(llm, prompt)
retrieval_chain = create_retrieval_chain(retriever, document_chain)
# --- Gradio inference function
def chat_with_clara(query):
if not query.strip():
return "Please enter a valid question."
response = retrieval_chain.invoke({'input': query})
answer = response['answer']
docs = response.get('context', [])
similar_chunks = "\n\n".join([f"• {doc.page_content[:300]}..." for doc in docs])
return answer, similar_chunks or "No similar document chunks found."
# --- Launch Gradio Interface
iface = gr.Interface(
fn=chat_with_clara,
inputs=gr.Textbox(label="Ask ChestDiseaseCyclopedia ", placeholder="Hey I Am ChestDiseaseCyclopedia, Ask me anything about diseases..."),
outputs=[
gr.Textbox(label="ChestDiseaseCyclopedia's Answer"),
gr.Textbox(label="Similar Document Context (from PDFs)", lines=6)
],
title="Welcome to Disease Solutions",
description="I am here to assist you with any questions you have about disease Prevention. How can I help you today?"
)
iface.launch() |