# import streamlit as st # from langchain.prompts import PromptTemplate # from langchain_community.llms import CTransformers # from src.helper import download_hf_embeddings, text_split, download_hf_model # from langchain_community.vectorstores import Pinecone as LangchainPinecone # import os # from dotenv import load_dotenv # from src.prompt import prompt_template # from langchain.chains import RetrievalQA # import time # from pinecone import Pinecone # from tqdm.auto import tqdm # # Load environment variables # load_dotenv() # PINECONE_API_KEY = os.getenv('PINECONE_API_KEY') # index_name = "medicure-chatbot" # # Set page configuration # st.set_page_config(page_title="Medical Chatbot", page_icon="🏥", layout="wide") # # Custom CSS for styling # st.markdown(""" # # """, unsafe_allow_html=True) # # Initialize session state for chat history # if 'chat_history' not in st.session_state: # st.session_state.chat_history = [] # # Header # st.title("🏥 Medicure RAG Chatbot") # # Display welcome message # st.write("Welcome to Medicure Chatbot! Ask any medical question and I'll do my best to help you.") # st.write("#### Built with 🤗 Ctransformers, Langchain, and Pinecone. Powered by Metal-llama2-7b-chat quantized LLM") # # Initialize the chatbot components # @st.cache_resource # def initialize_chatbot(): # embeddings = download_hf_embeddings() # # model_name_or_path = "TheBloke/Llama-2-7B-Chat-GGML" # # model_basename = "llama-2-7b-chat.ggmlv3.q4_0.bin" # # model_path = download_hf_model(model_name_or_path, model_basename) # model_path = "TheBloke/Llama-2-7B-Chat-GGML" # llm = CTransformers(model=model_path, # model_type="llama", # config={'max_new_tokens': 512, # 'temperature': 0.8}) # # initiaize pinecone # pc = Pinecone(api_key=PINECONE_API_KEY) # index = pc.Index(index_name) # PROMPT = PromptTemplate(template=prompt_template, input_variables=["context", "question"]) # chain_type_kwargs = {"prompt": PROMPT} # docsearch = LangchainPinecone(index, embeddings.embed_query, "text") # qa = RetrievalQA.from_chain_type( # llm=llm, # chain_type="stuff", # retriever=docsearch.as_retriever(search_kwargs={'k': 2}), # return_source_documents=True, # chain_type_kwargs=chain_type_kwargs) # return qa # qa = initialize_chatbot() # # Chat interface # user_input = st.text_input("Ask your question:") # if st.button("Send", key="send"): # if user_input: # # Create a placeholder for the progress bar # progress_placeholder = st.empty() # # Simulate progress with tqdm # total_steps = 100 # with tqdm(total=total_steps, file=progress_placeholder, desc="Thinking", bar_format='{l_bar}{bar}') as pbar: # for i in range(total_steps): # time.sleep(0.05) # Adjust this value to control the speed of the progress bar # pbar.update(1) # # Get the actual response # result = qa({"query": user_input}) # response = result["result"] # # Clear the progress bar # progress_placeholder.empty() # st.session_state.chat_history.append(("You", user_input)) # st.session_state.chat_history.append(("Bot", response)) # # Display chat history # st.subheader("Chat History") # for role, message in st.session_state.chat_history: # if role == "You": # st.markdown(f"**You:** {message}") # else: # st.markdown(f"**Bot:** {message}") # # Animated loading for visual appeal # def load_animation(): # with st.empty(): # for i in range(3): # for j in ["⋅", "⋅⋅", "⋅⋅⋅", "⋅⋅⋅⋅"]: # st.write(f"Loading{j}") # time.sleep(0.2) # st.write("") # # Footer with social links # st.markdown(""" # # """, unsafe_allow_html=True) # # Load Font Awesome for icons # st.markdown('', unsafe_allow_html=True) import streamlit as st from langchain.prompts import PromptTemplate from langchain_community.llms import CTransformers from src.helper import download_hf_embeddings, text_split, download_hf_model from langchain_community.vectorstores import Pinecone as LangchainPinecone import os from dotenv import load_dotenv from src.prompt import prompt_template from langchain.chains import RetrievalQA import time from pinecone import Pinecone from tqdm.auto import tqdm # Load environment variables load_dotenv() PINECONE_API_KEY = os.getenv('PINECONE_API_KEY') index_name = "medicure-chatbot" # Set page configuration st.set_page_config(page_title="Medical Chatbot", page_icon="🏥", layout="wide") # Custom CSS for styling st.markdown(""" """, unsafe_allow_html=True) # Initialize session state for chat history if 'chat_history' not in st.session_state: st.session_state.chat_history = [] # Header st.title("🏥 Medicure RAG Chatbot") # Display welcome message st.write("Welcome to Medicure Chatbot! Ask any medical question and I'll do my best to help you.") st.write("#### Built with 🤗 Ctransformers, Langchain, and Pinecone VectorDB. Powered by Metal-llama2-7b-chat quantized LLM") st.write("##### Resource Used 📖 : The Gale Encyclopedia of Medicine ") # Parameters section st.sidebar.header("Parameters") k_value = st.sidebar.slider("Number of relevant documents (k)", min_value=1, max_value=10, value=2) max_new_tokens = st.sidebar.slider("Max new tokens", min_value=64, max_value=1024, value=512) temperature = st.sidebar.slider("Temperature", min_value=0.1, max_value=1.0, value=0.8, step=0.1) # Initialize the chatbot components @st.cache_resource def initialize_chatbot(k, max_tokens, temp): embeddings = download_hf_embeddings() model_path = "TheBloke/Llama-2-7B-Chat-GGML" llm = CTransformers(model=model_path, model_type="llama", config={'max_new_tokens': max_tokens, 'temperature': temp}) # initialize pinecone pc = Pinecone(api_key=PINECONE_API_KEY) index = pc.Index(index_name) PROMPT = PromptTemplate(template=prompt_template, input_variables=["context", "question"]) chain_type_kwargs = {"prompt": PROMPT} docsearch = LangchainPinecone(index, embeddings.embed_query, "text") qa = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=docsearch.as_retriever(search_kwargs={'k': k}), return_source_documents=True, chain_type_kwargs=chain_type_kwargs) return qa qa = initialize_chatbot(k_value, max_new_tokens, temperature) # Chat interface user_input = st.text_input("Ask your question:") if st.button("Send", key="send"): if user_input: # Create a progress bar progress_bar = st.progress(0) total_steps = 100 for i in range(total_steps): time.sleep(0.05) progress_bar.progress((i + 1) / total_steps) # Get the actual response result = qa({"query": user_input}) response = result["result"] # Clear the progress bar progress_bar.empty() st.session_state.chat_history.append(("You", user_input)) st.session_state.chat_history.append(("Bot", response)) # Display chat history st.subheader("Chat History") for role, message in st.session_state.chat_history: if role == "You": st.markdown(f"**You:** {message}") else: st.markdown(f"**Bot:** {message}") # Footer with social links st.markdown(""" """, unsafe_allow_html=True) # Load Font Awesome for icons st.markdown('', unsafe_allow_html=True)