Spaces:
Sleeping
Sleeping
File size: 4,443 Bytes
68413f4 f69a536 68413f4 9bff18f 3233728 68413f4 9c5d9f8 68413f4 9d9d0be 68413f4 9bff18f 950fd59 aca16a6 68413f4 adfaace 68413f4 f69a536 68413f4 f69a536 68413f4 f69a536 68413f4 f187321 9bff18f 68413f4 c5da2fe 9bff18f 68413f4 c26a009 f69a536 dd0a8c5 f69a536 8f6f5c6 0a887ab f69a536 68413f4 be0ef7a 68413f4 |
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 |
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.prompts import PromptTemplate
from langchain_together import Together
import os
from langchain.memory import ConversationBufferWindowMemory
from langchain.chains import ConversationalRetrievalChain
import streamlit as st
import time
st.set_page_config(page_title="MedChat", page_icon="favicon.png")
col1, col2, col3 = st.columns([1,4,1])
with col2:
st.image("https://github.com/harshitv804/MedChat/assets/100853494/95962c34-029b-4f19-97d0-18146dd1e1f3")
st.markdown(
"""
<style>
div.stButton > button:first-child {
background-color: #ffd0d0;
}
div.stButton > button:active {
background-color: #ff6262;
}
div[data-testid="stStatusWidget"] div button {
display: none;
}
.reportview-container {
margin-top: -2em;
}
#MainMenu {visibility: hidden;}
.stDeployButton {display:none;}
footer {visibility: hidden;}
#stDecoration {display:none;}
button[title="View fullscreen"]{
visibility: hidden;}
</style>
""",
unsafe_allow_html=True,
)
def reset_conversation():
st.session_state.messages = []
st.session_state.memory.clear()
if "messages" not in st.session_state:
st.session_state.messages = []
if "memory" not in st.session_state:
st.session_state.memory = ConversationBufferWindowMemory(k=2, memory_key="chat_history",return_messages=True)
embeddings = HuggingFaceEmbeddings(model_name="nomic-ai/nomic-embed-text-v1",model_kwargs={"trust_remote_code":True, "revision":"289f532e14dbbbd5a04753fa58739e9ba766f3c7"})
db = FAISS.load_local("medchat_db", embeddings)
db_retriever = db.as_retriever(search_type="similarity",search_kwargs={"k": 4})
prompt_template = """<s>[INST]Follow these instructions carefully: You are a medical practitioner chatbot providing accurate medical information, adopting a doctor's perspective in your responses. Utilize the provided context, chat history, and question, choosing only the necessary information based on the user's query. Avoid generating your own questions and answers. Do not reference chat history if irrelevant to the current question; only use it for similar-related queries. Prioritize the given context when searching for relevant information, emphasizing clarity and conciseness in your responses. If multiple medicines share the same name but have different strengths, ensure to mention them. Exclude any mention of medicine costs. Stick to context directly related to the user's question, and use your knowledge base to answer inquiries outside the given context. Abstract and concise responses are key; do not repeat the chat template in your answers. If you lack information, simply state that you don't know.
CONTEXT: {context}
CHAT HISTORY: {chat_history}
QUESTION: {question}
ANSWER:
</s>[INST]
"""
prompt = PromptTemplate(template=prompt_template,
input_variables=['context', 'question', 'chat_history'])
TOGETHER_AI_API= os.environ['TOGETHER_AI']
llm = Together(
model="mistralai/Mixtral-8x7B-Instruct-v0.1",
temperature=0.7,
max_tokens=512,
together_api_key=f"{TOGETHER_AI_API}"
)
qa = ConversationalRetrievalChain.from_llm(
llm=llm,
memory=st.session_state.memory,
retriever=db_retriever,
combine_docs_chain_kwargs={'prompt': prompt}
)
for message in st.session_state.messages:
with st.chat_message(message.get("role")):
st.write(message.get("content"))
input_prompt = st.chat_input("Say something")
if input_prompt:
with st.chat_message("user"):
st.write(input_prompt)
st.session_state.messages.append({"role":"user","content":input_prompt})
with st.chat_message("assistant"):
with st.status("Thinking 💡...",expanded=True):
result = qa.invoke(input=input_prompt)
message_placeholder = st.empty()
full_response = "⚠️ **_Note: Information provided may be inaccurate. Consult a qualified doctor for accurate advice._** \n\n\n"
for chunk in result["answer"]:
full_response+=chunk
time.sleep(0.02)
message_placeholder.markdown(full_response+" ▌")
st.button('Reset All Chat 🗑️', on_click=reset_conversation)
st.session_state.messages.append({"role":"assistant","content":result["answer"]})
|