Haystack / app.py
imranjamal's picture
Create app.py
b82b5a1 verified
# Import necessary libraries
import gradio as gr
from haystack.document_stores import InMemoryDocumentStore
from haystack.nodes import DensePassageRetriever, FARMReader
from haystack.pipelines import ExtractiveQAPipeline
# 1. Initialize Document Store
document_store = InMemoryDocumentStore(embedding_dim=768)
# 2. Add Documents
documents = [
{"content": "Haystack is an open-source NLP framework for search.", "meta": {"source": "Introduction"}},
{"content": "You can use Hugging Face models in Haystack pipelines.", "meta": {"source": "Hugging Face"}},
{"content": "The DensePassageRetriever is a key component of Haystack.", "meta": {"source": "Retrievers"}}
]
document_store.write_documents(documents)
# 3. Set up Retriever
retriever = DensePassageRetriever(
document_store=document_store,
query_embedding_model="facebook/dpr-question_encoder-single-nq-base",
passage_embedding_model="facebook/dpr-ctx_encoder-single-nq-base"
)
document_store.update_embeddings(retriever)
# 4. Set up Reader
reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2", use_gpu=False)
# 5. Create QA Pipeline
qa_pipeline = ExtractiveQAPipeline(reader=reader, retriever=retriever)
# 6. Define Prediction Function
def ask_question(query):
results = qa_pipeline.run(query=query, params={"Retriever": {"top_k": 3}, "Reader": {"top_k": 1}})
if results["answers"]:
answer = results["answers"][0].answer
context = results["answers"][0].context
source = results["answers"][0].meta.get("source", "Unknown Source")
return f"**Answer:** {answer}\n\n**Context:** {context}\n\n**Source:** {source}"
else:
return "No relevant answer found. Please refine your question."
# 7. Set up Gradio Interface
interface = gr.Interface(
fn=ask_question,
inputs=gr.Textbox(lines=2, label="Ask a Question"),
outputs="text",
title="AI Search with Haystack",
description="Ask any question about the content in the document set."
)
# 8. Launch Application
if __name__ == "__main__":
interface.launch()