pubmedsearch / app.py
soham07ml's picture
Update app.py
d8ee03e verified
raw
history blame
No virus
4.49 kB
from pymed import PubMed
from typing import List
from haystack import component
from haystack import Document
from haystack.components.generators import HuggingFaceTGIGenerator #in between this we will use mixtral 7 xb model from text generation interface
from dotenv import load_dotenv
import os
from haystack import Pipeline #other names for chains
from haystack. components.builders.prompt_builder import PromptBuilder
import gradio as gr
import time
load_dotenv
# Attempt to get the 'HUGGINGFACE_API_KEY' from the environment variables
api_key = os.getenv('HUGGINGFACE_API_KEY')
# Check if the 'HUGGINGFACE_API_KEY' is set
if api_key is not None:
# Set the 'HUGGINGFACE_API_KEY' in the environment variables
os.environ['HUGGINGFACE_API_KEY'] = api_key
else:
# Handle the case when 'HUGGINGFACE_API_KEY' is not set
print("HUGGINGFACE_API_KEY is not set. Please set it in your environment variables.")
pubmed = PubMed(tool="Haystack2.0Prototype", email="dummyemail@gmail.com")
def documentize(article):
return Document(content=article.abstract, meta={'title': article.title, 'keywords': article.keywords})
@component
class PubMedFetcher():
@component.output_types(articles=List[Document])
def run(self, queries: list[str]):
cleaned_queries = queries[0].strip().split('\n')
articles = []
try:
for query in cleaned_queries:
response = pubmed.query(query, max_results = 1)
documents = [documentize(article) for article in response]
articles.extend(documents)
except Exception as e:
print(e)
print(f"Couldn't fetch articles for queries: {queries}" )
results = {'articles': articles}
return results
keyword_llm = HuggingFaceTGIGenerator("mistralai/Mixtral-8x7B-Instruct-v0.1")
keyword_llm.warm_up()
llm = HuggingFaceTGIGenerator("mistralai/Mixtral-8x7B-Instruct-v0.1")
llm.warm_up()
keyword_prompt_template = """
Your task is to convert the following question into 3 keywords that can be used to find relevant medical research papers on PubMed.
Here is an examples:
question: "What are the latest treatments for major depressive disorder?"
keywords:
Antidepressive Agents
Depressive Disorder, Major
Treatment-Resistant depression
---
question: {{ question }}
keywords:
"""
prompt_template = """
Answer the question truthfully based on the given documents.
If the documents don't contain an answer, use your existing knowledge base.
q: {{ question }}
Articles:
{% for article in articles %}
{{article.content}}
keywords: {{article.meta['keywords']}}
title: {{article.meta['title']}}
{% endfor %}
"""
keyword_prompt_builder = PromptBuilder(template=keyword_prompt_template)
prompt_builder = PromptBuilder(template=prompt_template)
fetcher = PubMedFetcher()
pipe = Pipeline()
pipe.add_component("keyword_prompt_builder", keyword_prompt_builder)
pipe.add_component("keyword_llm", keyword_llm)
pipe.add_component("pubmed_fetcher", fetcher)
pipe.add_component("prompt_builder", prompt_builder)
pipe.add_component("llm", llm)
pipe.connect("keyword_prompt_builder.prompt", "keyword_llm.prompt")
pipe.connect("keyword_llm.replies", "pubmed_fetcher.queries")
pipe.connect("pubmed_fetcher.articles", "prompt_builder.articles")
pipe.connect("prompt_builder.prompt", "llm.prompt")
def ask(question):
output = pipe.run(data={"keyword_prompt_builder":{"question":question},
"prompt_builder":{"question": question},
"llm":{"generation_kwargs": {"max_new_tokens": 500}}})
print(question)
print(output['llm']['replies'][0])
return output['llm']['replies'][0]
# result = ask("How are mRNA vaccines being used for cancer treatment?")
# print(result)
iface = gr.Interface(fn=ask, inputs=gr.Textbox(
value="How are mRNA vaccines being used for cancer treatment?"),
outputs="markdown",
title="MEDIZEN (ITerative Bytes)",
description="Ask a question about BioMedical and get an answer from a friendly AI assistant which will fetch answer from LLM Augmented Q&A over PubMed Search Engine",
examples=[["How are mRNA vaccines being used for cancer treatment?"],
["Suggest me some Case Studies related to Pneumonia."],
["Tell me about HIV AIDS."],["Suggest some case studies related to Auto Immune Disorders."],
["How to treat a COVID infected Patient?"]],
theme=gr.themes.Soft(),
allow_flagging="never",)
iface.launch(debug=True,share=True)