Tuana's picture
correcting reply index
3e8bc94
import streamlit as st
from haystack import Pipeline
from utils.pubmed_fetcher import PubMedFetcher
from haystack.components.generators import HuggingFaceTGIGenerator
from haystack.components.builders.prompt_builder import PromptBuilder
# def start_keyword_pipeline(llm):
# keyword_prompt_template = """
# Your task is to convert the follwing 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:
# """
# keyword_prompt_builder = PromptBuilder(template=keyword_prompt_template)
# keyword_pipeline = Pipeline()
# keyword_pipeline.add_component("keyword_prompt_builder", keyword_prompt_builder)
# keyword_pipeline.add_component("keyword_llm", llm)
# return keyword_pipeline
# def start_qa_pipeline(llm):
# return qa_pipeline
def start_haystack(huggingface_token):
#Use this function to contruct a pipeline
keyword_llm = HuggingFaceTGIGenerator("mistralai/Mixtral-8x7B-Instruct-v0.1", token=huggingface_token)
keyword_llm.warm_up()
llm = HuggingFaceTGIGenerator("mistralai/Mixtral-8x7B-Instruct-v0.1", token=huggingface_token)
llm.warm_up()
keyword_prompt_template = """
Your task is to convert the follwing 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")
return pipe
@st.cache_data(show_spinner=True)
def query(query, _pipeline):
try:
replies = _pipeline.run(data={"keyword_prompt_builder":{"question":query},
"prompt_builder":{"question": query},
"answer_llm":{"generation_kwargs": {"max_new_tokens": 500}}})
result = replies['llm']['replies']
except Exception as e:
result = ["Please make sure you are providing a correct, public Mastodon account"]
return result