from haystack import Pipeline, Document from haystack.document_stores.in_memory import InMemoryDocumentStore from haystack.components.writers import DocumentWriter from haystack.components.embedders import SentenceTransformersDocumentEmbedder from haystack.components.generators import OpenAIGenerator from haystack.utils import Secret from haystack.components.generators.chat import OpenAIChatGenerator from haystack.components.builders import PromptBuilder from haystack.components.embedders import SentenceTransformersTextEmbedder from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever from haystack.dataclasses import ChatMessage import pandas as pd # Load product data from CSV df = pd.read_csv("product_sample.csv") # Initialize an in-memory document store document_store = InMemoryDocumentStore() # Convert the product data into Haystack Document objects documents = [ Document( content=item.product_name, meta={ "id": item.uniq_id, "price": item.selling_price, "url": item.product_url } ) for item in df.itertuples() ] # Create a pipeline for indexing the documents indexing_pipeline = Pipeline() # Add a document embedder to the pipeline using Sentence Transformers model indexing_pipeline.add_component( instance=SentenceTransformersDocumentEmbedder(model="sentence-transformers/all-MiniLM-L6-v2"), name="doc_embedder" ) # Add a document writer to the pipeline to store documents in the document store indexing_pipeline.add_component(instance=DocumentWriter(document_store=document_store), name="doc_writer") # Connect the embedder's output to the writer's input indexing_pipeline.connect("doc_embedder.documents", "doc_writer.documents") # Run the indexing pipeline to process and store the documents indexing_pipeline.run({"doc_embedder": {"documents": documents}})