Spaces:
Sleeping
Sleeping
from haystack import Document | |
from haystack.document_stores.in_memory import InMemoryDocumentStore | |
from haystack.components.retrievers.in_memory import InMemoryBM25Retriever | |
from haystack.components.builders import PromptBuilder | |
from haystack.components.generators.hugging_face_local import HuggingFaceLocalGenerator | |
from haystack.pipeline import Pipeline | |
def init_doc_store(path, files): | |
docs = [] | |
for file in files: | |
with open(path + '/' + file, 'r') as f: | |
content = f.read() | |
docs.append(Document(content=content, meta={'name':file})) | |
document_store = InMemoryDocumentStore() | |
document_store.write_documents(docs) | |
return document_store | |
def define_components(document_store): | |
retriever = InMemoryBM25Retriever(document_store, top_k=3) | |
template = """ | |
Given the following information, answer the question. | |
Context: | |
{% for document in documents %} | |
{{ document.content }} | |
{% endfor %} | |
Question: {{question}} | |
Answer: | |
""" | |
prompt_builder = PromptBuilder(template=template) | |
generator = HuggingFaceLocalGenerator(model="gpt2", | |
task="text-generation", | |
# device='cuda', | |
generation_kwargs={ | |
"max_new_tokens": 100, | |
"temperature": 0.9, | |
}) | |
generator.warm_up() | |
return retreiver, prompt_builder, generator | |
def define_pipeline(retreiver, prompt_builder, generator): | |
basic_rag_pipeline = Pipeline() | |
basic_rag_pipeline.add_component("retriever", retriever) | |
basic_rag_pipeline.add_component("prompt_builder", prompt_builder) | |
basic_rag_pipeline.add_component("llm", generator) | |
basic_rag_pipeline.connect("retriever", "prompt_builder.documents") | |
basic_rag_pipeline.connect("prompt_builder", "llm") | |
return basic_rag_pipeline |