Spaces:
Sleeping
Sleeping
import pandas as pd | |
df = pd.read_csv('./drugs_side_effects_drugs_com.csv') | |
df = df[['drug_name', 'medical_condition', 'side_effects']] | |
df.dropna(inplace=True) | |
context_data = [] | |
for i in range(len(df)): | |
context = "" | |
for j in range(3): | |
context += df.columns[j] | |
context += ": " | |
context += df.iloc[i][j] | |
context += " " | |
context_data.append(context) | |
import os | |
# Get the secret key from the environment | |
groq_key = os.environ.get('gloq_key') | |
## LLM used for RAG | |
from langchain_groq import ChatGroq | |
llm = ChatGroq(model="llama-3.1-70b-versatile",api_key=groq_key) | |
## Embedding model! | |
from langchain_huggingface import HuggingFaceEmbeddings | |
embed_model = HuggingFaceEmbeddings(model_name="mixedbread-ai/mxbai-embed-large-v1") | |
# create vector store! | |
from langchain_chroma import Chroma | |
vectorstore = Chroma( | |
collection_name="medical_dataset_store", | |
embedding_function=embed_model, | |
persist_directory="./", | |
) | |
# add data to vector nstore | |
vectorstore.add_texts(context_data) | |
retriever = vectorstore.as_retriever() | |
from langchain_core.prompts import PromptTemplate | |
template = ("""You are a pharmacist and medical expert. | |
Use the provided context to answer the question. | |
If you don't know the answer, say so. Explain your answer in detail. | |
Do not discuss the context in your response; just provide the answer directly. | |
Context: {context} | |
Question: {question} | |
Answer:""") | |
rag_prompt = PromptTemplate.from_template(template) | |
from langchain_core.output_parsers import StrOutputParser | |
from langchain_core.runnables import RunnablePassthrough | |
rag_chain = ( | |
{"context": retriever, "question": RunnablePassthrough()} | |
| rag_prompt | |
| llm | |
| StrOutputParser() | |
) | |
import gradio as gr | |
# Function to stream responses | |
def rag_memory_stream(text): | |
partial_text = "" | |
for new_text in rag_chain.stream(text): # Assuming rag_chain is pre-defined | |
partial_text += new_text | |
yield partial_text | |
# Title and description for the app | |
title = "AI Medical Assistant for Drug Information and Side Effects" | |
description = """ | |
This AI-powered chatbot is designed to provide reliable information about drugs, their side effects, and related medical conditions. | |
It utilizes the Groq API and LangChain to deliver real-time, accurate responses. | |
Ask questions like: | |
1. What are the side effects of taking aspirin daily? | |
2. What is the recommended treatment for a common cold? | |
3. What is the disease for constant fatigue and muscle weakness? | |
4. What are the symptoms of diabetes? | |
5. How can hypertension be managed? | |
**Disclaimer:** This chatbot is for informational purposes only and is not a substitute for professional medical advice. | |
""" | |
# Customizing Gradio interface for a better look | |
demo = gr.Interface( | |
fn=rag_memory_stream, | |
inputs=gr.Textbox( | |
lines=2, | |
placeholder="Type your medical question here...", | |
label="Your Medical Question" | |
), | |
outputs=gr.Textbox( | |
lines=10, | |
label="AI Response" | |
), | |
title=title, | |
description=description, | |
theme="compact", # Adding a compact theme for a polished look | |
allow_flagging="never" | |
) | |
# # Launching the app | |
# demo.launch(share=True) | |
# import gradio as gr | |
# def rag_memory_stream(text): | |
# partial_text = "" | |
# for new_text in rag_chain.stream(text): | |
# partial_text += new_text | |
# yield partial_text | |
# examples = ['I feel dizzy', 'what is the possible sickness for fatigue'] | |
# title = "Real-time AI App with Groq API and LangChain to Answer medical questions" | |
# demo = gr.Interface( | |
# title=title, | |
# fn=rag_memory_stream, | |
# inputs="text", | |
# outputs="text", | |
# examples=examples, | |
# allow_flagging="never", | |
# ) | |
if __name__ == "__main__": | |
demo.launch() |