Copy disabled (too large)
Download .txt
Showing preview only (17,273K chars total). Download the full file to get everything.
Repository: deepset-ai/haystack
Branch: main
Commit: 7b40f9807d25
Files: 5867
Total size: 40.6 MB
Directory structure:
gitextract_vdzap453/
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── breaking-change-proposal.md
│ │ ├── bug_report.md
│ │ ├── config.yml
│ │ └── feature_request.md
│ ├── dependabot.yml
│ ├── labeler.yml
│ ├── pull_request_template.md
│ ├── utils/
│ │ ├── check_imports.py
│ │ ├── create_unstable_docs_docusaurus.py
│ │ ├── docs_search_sync.py
│ │ ├── docstrings_checksum.py
│ │ ├── parse_validate_version.sh
│ │ ├── prepare_release_notification.sh
│ │ ├── promote_unstable_docs_docusaurus.py
│ │ ├── pyproject_to_requirements.py
│ │ └── wait_for_workflows.sh
│ └── workflows/
│ ├── auto_approve_api_ref_sync.yml
│ ├── branch_off.yml
│ ├── check_api_ref.yml
│ ├── ci_metrics.yml
│ ├── docker_release.yml
│ ├── docs-website-test-docs-snippets.yml
│ ├── docs_search_sync.yml
│ ├── docstring_labeler.yml
│ ├── docusaurus_sync.yml
│ ├── e2e.yml
│ ├── github_release.yml
│ ├── labeler.yml
│ ├── license_compliance.yml
│ ├── nightly_testpypi_release.yml
│ ├── project.yml
│ ├── promote_unstable_docs.yml
│ ├── push_release_notes_to_website.yml
│ ├── pypi_release.yml
│ ├── release.yml
│ ├── release_notes.yml
│ ├── release_notes_skipper.yml
│ ├── slow.yml
│ ├── stale.yml
│ ├── tests.yml
│ └── workflows_linting.yml
├── .gitignore
├── .pre-commit-config.yaml
├── CITATION.cff
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── VERSION.txt
├── code_of_conduct.txt
├── docker/
│ ├── Dockerfile.base
│ ├── README.md
│ └── docker-bake.hcl
├── docs-website/
│ ├── .gitattributes
│ ├── .gitignore
│ ├── CONTRIBUTING.md
│ ├── README.md
│ ├── api/
│ │ ├── search.ts
│ │ └── tsconfig.json
│ ├── docs/
│ │ ├── _templates/
│ │ │ ├── component-template.mdx
│ │ │ └── document-store-template.mdx
│ │ ├── concepts/
│ │ │ ├── agents/
│ │ │ │ └── state.mdx
│ │ │ ├── agents.mdx
│ │ │ ├── components/
│ │ │ │ ├── custom-components.mdx
│ │ │ │ └── supercomponents.mdx
│ │ │ ├── components.mdx
│ │ │ ├── concepts-overview.mdx
│ │ │ ├── data-classes/
│ │ │ │ └── chatmessage.mdx
│ │ │ ├── data-classes.mdx
│ │ │ ├── device-management.mdx
│ │ │ ├── document-store/
│ │ │ │ ├── choosing-a-document-store.mdx
│ │ │ │ └── creating-custom-document-stores.mdx
│ │ │ ├── document-store.mdx
│ │ │ ├── experimental-package.mdx
│ │ │ ├── integrations.mdx
│ │ │ ├── jinja-templates.mdx
│ │ │ ├── metadata-filtering.mdx
│ │ │ ├── pipelines/
│ │ │ │ ├── asyncpipeline.mdx
│ │ │ │ ├── creating-pipelines.mdx
│ │ │ │ ├── debugging-pipelines.mdx
│ │ │ │ ├── pipeline-breakpoints.mdx
│ │ │ │ ├── pipeline-loops.mdx
│ │ │ │ ├── serialization.mdx
│ │ │ │ ├── smart-pipeline-connections.mdx
│ │ │ │ └── visualizing-pipelines.mdx
│ │ │ ├── pipelines.mdx
│ │ │ └── secret-management.mdx
│ │ ├── development/
│ │ │ ├── deployment/
│ │ │ │ ├── docker.mdx
│ │ │ │ ├── kubernetes.mdx
│ │ │ │ └── openshift.mdx
│ │ │ ├── deployment.mdx
│ │ │ ├── enabling-gpu-acceleration.mdx
│ │ │ ├── external-integrations-development.mdx
│ │ │ ├── hayhooks.mdx
│ │ │ ├── logging.mdx
│ │ │ └── tracing.mdx
│ │ ├── document-stores/
│ │ │ ├── arcadedbdocumentstore.mdx
│ │ │ ├── astradocumentstore.mdx
│ │ │ ├── azureaisearchdocumentstore.mdx
│ │ │ ├── chromadocumentstore.mdx
│ │ │ ├── elasticsearch-document-store.mdx
│ │ │ ├── faissdocumentstore.mdx
│ │ │ ├── inmemorydocumentstore.mdx
│ │ │ ├── mongodbatlasdocumentstore.mdx
│ │ │ ├── opensearch-document-store.mdx
│ │ │ ├── pgvectordocumentstore.mdx
│ │ │ ├── pinecone-document-store.mdx
│ │ │ ├── qdrant-document-store.mdx
│ │ │ ├── valkeydocumentstore.mdx
│ │ │ └── weaviatedocumentstore.mdx
│ │ ├── intro.mdx
│ │ ├── optimization/
│ │ │ ├── advanced-rag-techniques/
│ │ │ │ └── hypothetical-document-embeddings-hyde.mdx
│ │ │ ├── advanced-rag-techniques.mdx
│ │ │ ├── evaluation/
│ │ │ │ ├── model-based-evaluation.mdx
│ │ │ │ └── statistical-evaluation.mdx
│ │ │ └── evaluation.mdx
│ │ ├── overview/
│ │ │ ├── breaking-change-policy.mdx
│ │ │ ├── faq.mdx
│ │ │ ├── get-started.mdx
│ │ │ ├── installation.mdx
│ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx
│ │ │ ├── migration.mdx
│ │ │ └── telemetry.mdx
│ │ ├── pipeline-components/
│ │ │ ├── agents-1/
│ │ │ │ └── agent.mdx
│ │ │ ├── audio/
│ │ │ │ ├── external-integrations-audio.mdx
│ │ │ │ ├── localwhispertranscriber.mdx
│ │ │ │ └── remotewhispertranscriber.mdx
│ │ │ ├── audio.mdx
│ │ │ ├── builders/
│ │ │ │ ├── answerbuilder.mdx
│ │ │ │ ├── chatpromptbuilder.mdx
│ │ │ │ └── promptbuilder.mdx
│ │ │ ├── builders.mdx
│ │ │ ├── caching/
│ │ │ │ └── cachechecker.mdx
│ │ │ ├── classifiers/
│ │ │ │ ├── documentlanguageclassifier.mdx
│ │ │ │ └── transformerszeroshotdocumentclassifier.mdx
│ │ │ ├── classifiers.mdx
│ │ │ ├── connectors/
│ │ │ │ ├── external-integrations-connectors.mdx
│ │ │ │ ├── githubfileeditor.mdx
│ │ │ │ ├── githubissuecommenter.mdx
│ │ │ │ ├── githubissueviewer.mdx
│ │ │ │ ├── githubprcreator.mdx
│ │ │ │ ├── githubrepoforker.mdx
│ │ │ │ ├── githubrepoviewer.mdx
│ │ │ │ ├── jinareaderconnector.mdx
│ │ │ │ ├── langfuseconnector.mdx
│ │ │ │ ├── openapiconnector.mdx
│ │ │ │ ├── openapiserviceconnector.mdx
│ │ │ │ └── weaveconnector.mdx
│ │ │ ├── connectors.mdx
│ │ │ ├── converters/
│ │ │ │ ├── azureocrdocumentconverter.mdx
│ │ │ │ ├── csvtodocument.mdx
│ │ │ │ ├── documenttoimagecontent.mdx
│ │ │ │ ├── docxtodocument.mdx
│ │ │ │ ├── external-integrations-converters.mdx
│ │ │ │ ├── filetofilecontent.mdx
│ │ │ │ ├── htmltodocument.mdx
│ │ │ │ ├── imagefiletodocument.mdx
│ │ │ │ ├── imagefiletoimagecontent.mdx
│ │ │ │ ├── jsonconverter.mdx
│ │ │ │ ├── markdowntodocument.mdx
│ │ │ │ ├── mistralocrdocumentconverter.mdx
│ │ │ │ ├── msgtodocument.mdx
│ │ │ │ ├── multifileconverter.mdx
│ │ │ │ ├── openapiservicetofunctions.mdx
│ │ │ │ ├── outputadapter.mdx
│ │ │ │ ├── paddleocrvldocumentconverter.mdx
│ │ │ │ ├── pdfminertodocument.mdx
│ │ │ │ ├── pdftoimagecontent.mdx
│ │ │ │ ├── pptxtodocument.mdx
│ │ │ │ ├── pypdftodocument.mdx
│ │ │ │ ├── textfiletodocument.mdx
│ │ │ │ ├── tikadocumentconverter.mdx
│ │ │ │ ├── unstructuredfileconverter.mdx
│ │ │ │ └── xlsxtodocument.mdx
│ │ │ ├── converters.mdx
│ │ │ ├── downloaders/
│ │ │ │ └── s3downloader.mdx
│ │ │ ├── embedders/
│ │ │ │ ├── amazonbedrockdocumentembedder.mdx
│ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx
│ │ │ │ ├── amazonbedrocktextembedder.mdx
│ │ │ │ ├── azureopenaidocumentembedder.mdx
│ │ │ │ ├── azureopenaitextembedder.mdx
│ │ │ │ ├── choosing-the-right-embedder.mdx
│ │ │ │ ├── coheredocumentembedder.mdx
│ │ │ │ ├── coheredocumentimageembedder.mdx
│ │ │ │ ├── coheretextembedder.mdx
│ │ │ │ ├── external-integrations-embedders.mdx
│ │ │ │ ├── fastembeddocumentembedder.mdx
│ │ │ │ ├── fastembedsparsedocumentembedder.mdx
│ │ │ │ ├── fastembedsparsetextembedder.mdx
│ │ │ │ ├── fastembedtextembedder.mdx
│ │ │ │ ├── googlegenaidocumentembedder.mdx
│ │ │ │ ├── googlegenaimultimodaldocumentembedder.mdx
│ │ │ │ ├── googlegenaitextembedder.mdx
│ │ │ │ ├── huggingfaceapidocumentembedder.mdx
│ │ │ │ ├── huggingfaceapitextembedder.mdx
│ │ │ │ ├── jinadocumentembedder.mdx
│ │ │ │ ├── jinadocumentimageembedder.mdx
│ │ │ │ ├── jinatextembedder.mdx
│ │ │ │ ├── mistraldocumentembedder.mdx
│ │ │ │ ├── mistraltextembedder.mdx
│ │ │ │ ├── nvidiadocumentembedder.mdx
│ │ │ │ ├── nvidiatextembedder.mdx
│ │ │ │ ├── ollamadocumentembedder.mdx
│ │ │ │ ├── ollamatextembedder.mdx
│ │ │ │ ├── openaidocumentembedder.mdx
│ │ │ │ ├── openaitextembedder.mdx
│ │ │ │ ├── optimumdocumentembedder.mdx
│ │ │ │ ├── optimumtextembedder.mdx
│ │ │ │ ├── sentencetransformersdocumentembedder.mdx
│ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx
│ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx
│ │ │ │ ├── sentencetransformerssparsetextembedder.mdx
│ │ │ │ ├── sentencetransformerstextembedder.mdx
│ │ │ │ ├── stackitdocumentembedder.mdx
│ │ │ │ ├── stackittextembedder.mdx
│ │ │ │ ├── vertexaidocumentembedder.mdx
│ │ │ │ ├── vertexaitextembedder.mdx
│ │ │ │ ├── watsonxdocumentembedder.mdx
│ │ │ │ └── watsonxtextembedder.mdx
│ │ │ ├── embedders.mdx
│ │ │ ├── evaluators/
│ │ │ │ ├── answerexactmatchevaluator.mdx
│ │ │ │ ├── contextrelevanceevaluator.mdx
│ │ │ │ ├── deepevalevaluator.mdx
│ │ │ │ ├── documentmapevaluator.mdx
│ │ │ │ ├── documentmrrevaluator.mdx
│ │ │ │ ├── documentndcgevaluator.mdx
│ │ │ │ ├── documentrecallevaluator.mdx
│ │ │ │ ├── external-integrations-evaluators.mdx
│ │ │ │ ├── faithfulnessevaluator.mdx
│ │ │ │ ├── llmevaluator.mdx
│ │ │ │ ├── ragasevaluator.mdx
│ │ │ │ └── sasevaluator.mdx
│ │ │ ├── evaluators.mdx
│ │ │ ├── extractors/
│ │ │ │ ├── llmdocumentcontentextractor.mdx
│ │ │ │ ├── llmmetadataextractor.mdx
│ │ │ │ ├── namedentityextractor.mdx
│ │ │ │ └── regextextextractor.mdx
│ │ │ ├── extractors.mdx
│ │ │ ├── fetchers/
│ │ │ │ ├── external-integrations-fetchers.mdx
│ │ │ │ ├── firecrawlcrawler.mdx
│ │ │ │ └── linkcontentfetcher.mdx
│ │ │ ├── fetchers.mdx
│ │ │ ├── generators/
│ │ │ │ ├── aimllapichatgenerator.mdx
│ │ │ │ ├── amazonbedrockchatgenerator.mdx
│ │ │ │ ├── amazonbedrockgenerator.mdx
│ │ │ │ ├── anthropicchatgenerator.mdx
│ │ │ │ ├── anthropicgenerator.mdx
│ │ │ │ ├── anthropicvertexchatgenerator.mdx
│ │ │ │ ├── azureopenaichatgenerator.mdx
│ │ │ │ ├── azureopenaigenerator.mdx
│ │ │ │ ├── azureopenairesponseschatgenerator.mdx
│ │ │ │ ├── coherechatgenerator.mdx
│ │ │ │ ├── coheregenerator.mdx
│ │ │ │ ├── cometapichatgenerator.mdx
│ │ │ │ ├── dalleimagegenerator.mdx
│ │ │ │ ├── external-integrations-generators.mdx
│ │ │ │ ├── fallbackchatgenerator.mdx
│ │ │ │ ├── googleaigeminichatgenerator.mdx
│ │ │ │ ├── googleaigeminigenerator.mdx
│ │ │ │ ├── googlegenaichatgenerator.mdx
│ │ │ │ ├── guides-to-generators/
│ │ │ │ │ ├── choosing-the-right-generator.mdx
│ │ │ │ │ ├── function-calling.mdx
│ │ │ │ │ └── generators-vs-chat-generators.mdx
│ │ │ │ ├── huggingfaceapichatgenerator.mdx
│ │ │ │ ├── huggingfaceapigenerator.mdx
│ │ │ │ ├── huggingfacelocalchatgenerator.mdx
│ │ │ │ ├── huggingfacelocalgenerator.mdx
│ │ │ │ ├── llamacppchatgenerator.mdx
│ │ │ │ ├── llamacppgenerator.mdx
│ │ │ │ ├── llamastackchatgenerator.mdx
│ │ │ │ ├── metallamachatgenerator.mdx
│ │ │ │ ├── mistralchatgenerator.mdx
│ │ │ │ ├── nvidiachatgenerator.mdx
│ │ │ │ ├── nvidiagenerator.mdx
│ │ │ │ ├── ollamachatgenerator.mdx
│ │ │ │ ├── ollamagenerator.mdx
│ │ │ │ ├── openaichatgenerator.mdx
│ │ │ │ ├── openaigenerator.mdx
│ │ │ │ ├── openairesponseschatgenerator.mdx
│ │ │ │ ├── openrouterchatgenerator.mdx
│ │ │ │ ├── sagemakergenerator.mdx
│ │ │ │ ├── stackitchatgenerator.mdx
│ │ │ │ ├── togetheraichatgenerator.mdx
│ │ │ │ ├── togetheraigenerator.mdx
│ │ │ │ ├── vertexaicodegenerator.mdx
│ │ │ │ ├── vertexaigeminichatgenerator.mdx
│ │ │ │ ├── vertexaigeminigenerator.mdx
│ │ │ │ ├── vertexaiimagecaptioner.mdx
│ │ │ │ ├── vertexaiimagegenerator.mdx
│ │ │ │ ├── vertexaiimageqa.mdx
│ │ │ │ ├── vertexaitextgenerator.mdx
│ │ │ │ ├── watsonxchatgenerator.mdx
│ │ │ │ └── watsonxgenerator.mdx
│ │ │ ├── generators.mdx
│ │ │ ├── joiners/
│ │ │ │ ├── answerjoiner.mdx
│ │ │ │ ├── branchjoiner.mdx
│ │ │ │ ├── documentjoiner.mdx
│ │ │ │ ├── listjoiner.mdx
│ │ │ │ └── stringjoiner.mdx
│ │ │ ├── joiners.mdx
│ │ │ ├── preprocessors/
│ │ │ │ ├── chinesedocumentsplitter.mdx
│ │ │ │ ├── csvdocumentcleaner.mdx
│ │ │ │ ├── csvdocumentsplitter.mdx
│ │ │ │ ├── documentcleaner.mdx
│ │ │ │ ├── documentpreprocessor.mdx
│ │ │ │ ├── documentsplitter.mdx
│ │ │ │ ├── embeddingbaseddocumentsplitter.mdx
│ │ │ │ ├── hierarchicaldocumentsplitter.mdx
│ │ │ │ ├── markdownheadersplitter.mdx
│ │ │ │ ├── recursivesplitter.mdx
│ │ │ │ └── textcleaner.mdx
│ │ │ ├── preprocessors.mdx
│ │ │ ├── query/
│ │ │ │ └── queryexpander.mdx
│ │ │ ├── rankers/
│ │ │ │ ├── amazonbedrockranker.mdx
│ │ │ │ ├── choosing-the-right-ranker.mdx
│ │ │ │ ├── cohereranker.mdx
│ │ │ │ ├── external-integrations-rankers.mdx
│ │ │ │ ├── fastembedranker.mdx
│ │ │ │ ├── huggingfaceteiranker.mdx
│ │ │ │ ├── jinaranker.mdx
│ │ │ │ ├── llmranker.mdx
│ │ │ │ ├── lostinthemiddleranker.mdx
│ │ │ │ ├── metafieldgroupingranker.mdx
│ │ │ │ ├── metafieldranker.mdx
│ │ │ │ ├── nvidiaranker.mdx
│ │ │ │ ├── pyversityranker.mdx
│ │ │ │ ├── sentencetransformersdiversityranker.mdx
│ │ │ │ ├── sentencetransformerssimilarityranker.mdx
│ │ │ │ └── transformerssimilarityranker.mdx
│ │ │ ├── rankers.mdx
│ │ │ ├── readers/
│ │ │ │ └── extractivereader.mdx
│ │ │ ├── readers.mdx
│ │ │ ├── retrievers/
│ │ │ │ ├── arcadedbembeddingretriever.mdx
│ │ │ │ ├── astraretriever.mdx
│ │ │ │ ├── automergingretriever.mdx
│ │ │ │ ├── azureaisearchbm25retriever.mdx
│ │ │ │ ├── azureaisearchembeddingretriever.mdx
│ │ │ │ ├── azureaisearchhybridretriever.mdx
│ │ │ │ ├── chromaembeddingretriever.mdx
│ │ │ │ ├── chromaqueryretriever.mdx
│ │ │ │ ├── elasticsearchbm25retriever.mdx
│ │ │ │ ├── elasticsearchembeddingretriever.mdx
│ │ │ │ ├── faissembeddingretriever.mdx
│ │ │ │ ├── filterretriever.mdx
│ │ │ │ ├── inmemorybm25retriever.mdx
│ │ │ │ ├── inmemoryembeddingretriever.mdx
│ │ │ │ ├── mongodbatlasembeddingretriever.mdx
│ │ │ │ ├── mongodbatlasfulltextretriever.mdx
│ │ │ │ ├── multiqueryembeddingretriever.mdx
│ │ │ │ ├── multiquerytextretriever.mdx
│ │ │ │ ├── opensearchbm25retriever.mdx
│ │ │ │ ├── opensearchembeddingretriever.mdx
│ │ │ │ ├── opensearchhybridretriever.mdx
│ │ │ │ ├── pgvectorembeddingretriever.mdx
│ │ │ │ ├── pgvectorkeywordretriever.mdx
│ │ │ │ ├── pineconedenseretriever.mdx
│ │ │ │ ├── qdrantembeddingretriever.mdx
│ │ │ │ ├── qdranthybridretriever.mdx
│ │ │ │ ├── qdrantsparseembeddingretriever.mdx
│ │ │ │ ├── sentencewindowretrieval.mdx
│ │ │ │ ├── snowflaketableretriever.mdx
│ │ │ │ ├── valkeyembeddingretriever.mdx
│ │ │ │ ├── weaviatebm25retriever.mdx
│ │ │ │ ├── weaviateembeddingretriever.mdx
│ │ │ │ └── weaviatehybridretriever.mdx
│ │ │ ├── retrievers.mdx
│ │ │ ├── routers/
│ │ │ │ ├── conditionalrouter.mdx
│ │ │ │ ├── documentlengthrouter.mdx
│ │ │ │ ├── documenttyperouter.mdx
│ │ │ │ ├── filetyperouter.mdx
│ │ │ │ ├── llmmessagesrouter.mdx
│ │ │ │ ├── metadatarouter.mdx
│ │ │ │ ├── textlanguagerouter.mdx
│ │ │ │ ├── transformerstextrouter.mdx
│ │ │ │ └── transformerszeroshottextrouter.mdx
│ │ │ ├── routers.mdx
│ │ │ ├── samplers/
│ │ │ │ └── toppsampler.mdx
│ │ │ ├── tools/
│ │ │ │ └── toolinvoker.mdx
│ │ │ ├── translators/
│ │ │ │ └── laradocumenttranslator.mdx
│ │ │ ├── validators/
│ │ │ │ └── jsonschemavalidator.mdx
│ │ │ ├── websearch/
│ │ │ │ ├── external-integrations-websearch.mdx
│ │ │ │ ├── firecrawlwebsearch.mdx
│ │ │ │ ├── searchapiwebsearch.mdx
│ │ │ │ └── serperdevwebsearch.mdx
│ │ │ ├── websearch.mdx
│ │ │ └── writers/
│ │ │ └── documentwriter.mdx
│ │ └── tools/
│ │ ├── componenttool.mdx
│ │ ├── mcptool.mdx
│ │ ├── mcptoolset.mdx
│ │ ├── pipelinetool.mdx
│ │ ├── ready-made-tools/
│ │ │ ├── githubfileeditortool.mdx
│ │ │ ├── githubissuecommentertool.mdx
│ │ │ ├── githubissueviewertool.mdx
│ │ │ ├── githubprcreatortool.mdx
│ │ │ └── githubrepoviewertool.mdx
│ │ ├── searchabletoolset.mdx
│ │ ├── tool.mdx
│ │ └── toolset.mdx
│ ├── docusaurus.config.js
│ ├── package.json
│ ├── plugins/
│ │ └── txtLoaderPlugin.js
│ ├── reference/
│ │ ├── experiments-api/
│ │ │ ├── experimental_agents_api.md
│ │ │ ├── experimental_chatmessage_store_api.md
│ │ │ ├── experimental_generators_api.md
│ │ │ ├── experimental_mem0_memory_store_api.md
│ │ │ ├── experimental_preprocessors_api.md
│ │ │ ├── experimental_retrievers_api.md
│ │ │ ├── experimental_summarizer_api.md
│ │ │ └── experimental_writers_api.md
│ │ ├── haystack-api/
│ │ │ ├── agents_api.md
│ │ │ ├── audio_api.md
│ │ │ ├── builders_api.md
│ │ │ ├── cachings_api.md
│ │ │ ├── classifiers_api.md
│ │ │ ├── connectors_api.md
│ │ │ ├── converters_api.md
│ │ │ ├── data_classes_api.md
│ │ │ ├── document_stores_api.md
│ │ │ ├── document_writers_api.md
│ │ │ ├── embedders_api.md
│ │ │ ├── evaluation_api.md
│ │ │ ├── evaluators_api.md
│ │ │ ├── extractors_api.md
│ │ │ ├── fetchers_api.md
│ │ │ ├── generators_api.md
│ │ │ ├── human_in_the_loop_api.md
│ │ │ ├── image_converters_api.md
│ │ │ ├── joiners_api.md
│ │ │ ├── pipeline_api.md
│ │ │ ├── preprocessors_api.md
│ │ │ ├── query_api.md
│ │ │ ├── rankers_api.md
│ │ │ ├── readers_api.md
│ │ │ ├── retrievers_api.md
│ │ │ ├── routers_api.md
│ │ │ ├── samplers_api.md
│ │ │ ├── tool_components_api.md
│ │ │ ├── tools_api.md
│ │ │ ├── utils_api.md
│ │ │ ├── validators_api.md
│ │ │ └── websearch_api.md
│ │ ├── index.mdx
│ │ └── integrations-api/
│ │ ├── aimlapi.md
│ │ ├── amazon_bedrock.md
│ │ ├── amazon_sagemaker.md
│ │ ├── anthropic.md
│ │ ├── arcadedb.md
│ │ ├── astra.md
│ │ ├── azure_ai_search.md
│ │ ├── azure_doc_intelligence.md
│ │ ├── chroma.md
│ │ ├── cohere.md
│ │ ├── cometapi.md
│ │ ├── deepeval.md
│ │ ├── elasticsearch.md
│ │ ├── faiss.md
│ │ ├── fastembed.md
│ │ ├── firecrawl.md
│ │ ├── github.md
│ │ ├── google_ai.md
│ │ ├── google_genai.md
│ │ ├── google_vertex.md
│ │ ├── hanlp.md
│ │ ├── jina.md
│ │ ├── langfuse.md
│ │ ├── lara.md
│ │ ├── llama_cpp.md
│ │ ├── llama_stack.md
│ │ ├── mcp.md
│ │ ├── meta_llama.md
│ │ ├── mistral.md
│ │ ├── mongodb_atlas.md
│ │ ├── nvidia.md
│ │ ├── ollama.md
│ │ ├── openrouter.md
│ │ ├── opensearch.md
│ │ ├── optimum.md
│ │ ├── paddleocr.md
│ │ ├── pgvector.md
│ │ ├── pinecone.md
│ │ ├── pyversity.md
│ │ ├── qdrant.md
│ │ ├── ragas.md
│ │ ├── snowflake.md
│ │ ├── stackit.md
│ │ ├── togetherai.md
│ │ ├── unstructured.md
│ │ ├── valkey.md
│ │ ├── watsonx.md
│ │ ├── weave.md
│ │ └── weaviate.md
│ ├── reference-sidebars.js
│ ├── reference_versioned_docs/
│ │ ├── version-2.18/
│ │ │ ├── experiments-api/
│ │ │ │ ├── experimental_agents_api.md
│ │ │ │ ├── experimental_chatmessage_store_api.md
│ │ │ │ ├── experimental_generators_api.md
│ │ │ │ ├── experimental_mem0_memory_store_api.md
│ │ │ │ ├── experimental_preprocessors_api.md
│ │ │ │ ├── experimental_retrievers_api.md
│ │ │ │ ├── experimental_summarizer_api.md
│ │ │ │ └── experimental_writers_api.md
│ │ │ ├── haystack-api/
│ │ │ │ ├── agents_api.md
│ │ │ │ ├── audio_api.md
│ │ │ │ ├── builders_api.md
│ │ │ │ ├── cachings_api.md
│ │ │ │ ├── classifiers_api.md
│ │ │ │ ├── connectors_api.md
│ │ │ │ ├── converters_api.md
│ │ │ │ ├── data_classes_api.md
│ │ │ │ ├── document_stores_api.md
│ │ │ │ ├── document_writers_api.md
│ │ │ │ ├── embedders_api.md
│ │ │ │ ├── evaluation_api.md
│ │ │ │ ├── evaluators_api.md
│ │ │ │ ├── extractors_api.md
│ │ │ │ ├── fetchers_api.md
│ │ │ │ ├── generators_api.md
│ │ │ │ ├── image_converters_api.md
│ │ │ │ ├── joiners_api.md
│ │ │ │ ├── pipeline_api.md
│ │ │ │ ├── preprocessors_api.md
│ │ │ │ ├── rankers_api.md
│ │ │ │ ├── readers_api.md
│ │ │ │ ├── retrievers_api.md
│ │ │ │ ├── routers_api.md
│ │ │ │ ├── samplers_api.md
│ │ │ │ ├── tool_components_api.md
│ │ │ │ ├── tools_api.md
│ │ │ │ ├── utils_api.md
│ │ │ │ ├── validators_api.md
│ │ │ │ └── websearch_api.md
│ │ │ ├── index.mdx
│ │ │ └── integrations-api/
│ │ │ ├── aimlapi.md
│ │ │ ├── amazon_bedrock.md
│ │ │ ├── amazon_sagemaker.md
│ │ │ ├── anthropic.md
│ │ │ ├── arcadedb.md
│ │ │ ├── astra.md
│ │ │ ├── azure_ai_search.md
│ │ │ ├── azure_doc_intelligence.md
│ │ │ ├── chroma.md
│ │ │ ├── cohere.md
│ │ │ ├── cometapi.md
│ │ │ ├── deepeval.md
│ │ │ ├── elasticsearch.md
│ │ │ ├── faiss.md
│ │ │ ├── fastembed.md
│ │ │ ├── firecrawl.md
│ │ │ ├── github.md
│ │ │ ├── google_ai.md
│ │ │ ├── google_genai.md
│ │ │ ├── google_vertex.md
│ │ │ ├── hanlp.md
│ │ │ ├── jina.md
│ │ │ ├── langfuse.md
│ │ │ ├── lara.md
│ │ │ ├── llama_cpp.md
│ │ │ ├── llama_stack.md
│ │ │ ├── mcp.md
│ │ │ ├── meta_llama.md
│ │ │ ├── mistral.md
│ │ │ ├── mongodb_atlas.md
│ │ │ ├── nvidia.md
│ │ │ ├── ollama.md
│ │ │ ├── openrouter.md
│ │ │ ├── opensearch.md
│ │ │ ├── optimum.md
│ │ │ ├── paddleocr.md
│ │ │ ├── pgvector.md
│ │ │ ├── pinecone.md
│ │ │ ├── pyversity.md
│ │ │ ├── qdrant.md
│ │ │ ├── ragas.md
│ │ │ ├── snowflake.md
│ │ │ ├── stackit.md
│ │ │ ├── togetherai.md
│ │ │ ├── unstructured.md
│ │ │ ├── valkey.md
│ │ │ ├── watsonx.md
│ │ │ ├── weave.md
│ │ │ └── weaviate.md
│ │ ├── version-2.19/
│ │ │ ├── experiments-api/
│ │ │ │ ├── experimental_agents_api.md
│ │ │ │ ├── experimental_chatmessage_store_api.md
│ │ │ │ ├── experimental_generators_api.md
│ │ │ │ ├── experimental_mem0_memory_store_api.md
│ │ │ │ ├── experimental_preprocessors_api.md
│ │ │ │ ├── experimental_retrievers_api.md
│ │ │ │ ├── experimental_summarizer_api.md
│ │ │ │ └── experimental_writers_api.md
│ │ │ ├── haystack-api/
│ │ │ │ ├── agents_api.md
│ │ │ │ ├── audio_api.md
│ │ │ │ ├── builders_api.md
│ │ │ │ ├── cachings_api.md
│ │ │ │ ├── classifiers_api.md
│ │ │ │ ├── connectors_api.md
│ │ │ │ ├── converters_api.md
│ │ │ │ ├── data_classes_api.md
│ │ │ │ ├── document_stores_api.md
│ │ │ │ ├── document_writers_api.md
│ │ │ │ ├── embedders_api.md
│ │ │ │ ├── evaluation_api.md
│ │ │ │ ├── evaluators_api.md
│ │ │ │ ├── extractors_api.md
│ │ │ │ ├── fetchers_api.md
│ │ │ │ ├── generators_api.md
│ │ │ │ ├── image_converters_api.md
│ │ │ │ ├── joiners_api.md
│ │ │ │ ├── pipeline_api.md
│ │ │ │ ├── preprocessors_api.md
│ │ │ │ ├── rankers_api.md
│ │ │ │ ├── readers_api.md
│ │ │ │ ├── retrievers_api.md
│ │ │ │ ├── routers_api.md
│ │ │ │ ├── samplers_api.md
│ │ │ │ ├── tool_components_api.md
│ │ │ │ ├── tools_api.md
│ │ │ │ ├── utils_api.md
│ │ │ │ ├── validators_api.md
│ │ │ │ └── websearch_api.md
│ │ │ ├── index.mdx
│ │ │ └── integrations-api/
│ │ │ ├── aimlapi.md
│ │ │ ├── amazon_bedrock.md
│ │ │ ├── amazon_sagemaker.md
│ │ │ ├── anthropic.md
│ │ │ ├── arcadedb.md
│ │ │ ├── astra.md
│ │ │ ├── azure_ai_search.md
│ │ │ ├── azure_doc_intelligence.md
│ │ │ ├── chroma.md
│ │ │ ├── cohere.md
│ │ │ ├── cometapi.md
│ │ │ ├── deepeval.md
│ │ │ ├── elasticsearch.md
│ │ │ ├── faiss.md
│ │ │ ├── fastembed.md
│ │ │ ├── firecrawl.md
│ │ │ ├── github.md
│ │ │ ├── google_ai.md
│ │ │ ├── google_genai.md
│ │ │ ├── google_vertex.md
│ │ │ ├── hanlp.md
│ │ │ ├── jina.md
│ │ │ ├── langfuse.md
│ │ │ ├── lara.md
│ │ │ ├── llama_cpp.md
│ │ │ ├── llama_stack.md
│ │ │ ├── mcp.md
│ │ │ ├── meta_llama.md
│ │ │ ├── mistral.md
│ │ │ ├── mongodb_atlas.md
│ │ │ ├── nvidia.md
│ │ │ ├── ollama.md
│ │ │ ├── openrouter.md
│ │ │ ├── opensearch.md
│ │ │ ├── optimum.md
│ │ │ ├── paddleocr.md
│ │ │ ├── pgvector.md
│ │ │ ├── pinecone.md
│ │ │ ├── pyversity.md
│ │ │ ├── qdrant.md
│ │ │ ├── ragas.md
│ │ │ ├── snowflake.md
│ │ │ ├── stackit.md
│ │ │ ├── togetherai.md
│ │ │ ├── unstructured.md
│ │ │ ├── valkey.md
│ │ │ ├── watsonx.md
│ │ │ ├── weave.md
│ │ │ └── weaviate.md
│ │ ├── version-2.20/
│ │ │ ├── experiments-api/
│ │ │ │ ├── experimental_agents_api.md
│ │ │ │ ├── experimental_chatmessage_store_api.md
│ │ │ │ ├── experimental_generators_api.md
│ │ │ │ ├── experimental_mem0_memory_store_api.md
│ │ │ │ ├── experimental_preprocessors_api.md
│ │ │ │ ├── experimental_retrievers_api.md
│ │ │ │ ├── experimental_summarizer_api.md
│ │ │ │ └── experimental_writers_api.md
│ │ │ ├── haystack-api/
│ │ │ │ ├── agents_api.md
│ │ │ │ ├── audio_api.md
│ │ │ │ ├── builders_api.md
│ │ │ │ ├── cachings_api.md
│ │ │ │ ├── classifiers_api.md
│ │ │ │ ├── connectors_api.md
│ │ │ │ ├── converters_api.md
│ │ │ │ ├── data_classes_api.md
│ │ │ │ ├── document_stores_api.md
│ │ │ │ ├── document_writers_api.md
│ │ │ │ ├── embedders_api.md
│ │ │ │ ├── evaluation_api.md
│ │ │ │ ├── evaluators_api.md
│ │ │ │ ├── extractors_api.md
│ │ │ │ ├── fetchers_api.md
│ │ │ │ ├── generators_api.md
│ │ │ │ ├── image_converters_api.md
│ │ │ │ ├── joiners_api.md
│ │ │ │ ├── pipeline_api.md
│ │ │ │ ├── preprocessors_api.md
│ │ │ │ ├── rankers_api.md
│ │ │ │ ├── readers_api.md
│ │ │ │ ├── retrievers_api.md
│ │ │ │ ├── routers_api.md
│ │ │ │ ├── samplers_api.md
│ │ │ │ ├── tool_components_api.md
│ │ │ │ ├── tools_api.md
│ │ │ │ ├── utils_api.md
│ │ │ │ ├── validators_api.md
│ │ │ │ └── websearch_api.md
│ │ │ ├── index.mdx
│ │ │ └── integrations-api/
│ │ │ ├── aimlapi.md
│ │ │ ├── amazon_bedrock.md
│ │ │ ├── amazon_sagemaker.md
│ │ │ ├── anthropic.md
│ │ │ ├── arcadedb.md
│ │ │ ├── astra.md
│ │ │ ├── azure_ai_search.md
│ │ │ ├── azure_doc_intelligence.md
│ │ │ ├── chroma.md
│ │ │ ├── cohere.md
│ │ │ ├── cometapi.md
│ │ │ ├── deepeval.md
│ │ │ ├── elasticsearch.md
│ │ │ ├── faiss.md
│ │ │ ├── fastembed.md
│ │ │ ├── firecrawl.md
│ │ │ ├── github.md
│ │ │ ├── google_ai.md
│ │ │ ├── google_genai.md
│ │ │ ├── google_vertex.md
│ │ │ ├── hanlp.md
│ │ │ ├── jina.md
│ │ │ ├── langfuse.md
│ │ │ ├── lara.md
│ │ │ ├── llama_cpp.md
│ │ │ ├── llama_stack.md
│ │ │ ├── mcp.md
│ │ │ ├── meta_llama.md
│ │ │ ├── mistral.md
│ │ │ ├── mongodb_atlas.md
│ │ │ ├── nvidia.md
│ │ │ ├── ollama.md
│ │ │ ├── openrouter.md
│ │ │ ├── opensearch.md
│ │ │ ├── optimum.md
│ │ │ ├── paddleocr.md
│ │ │ ├── pgvector.md
│ │ │ ├── pinecone.md
│ │ │ ├── pyversity.md
│ │ │ ├── qdrant.md
│ │ │ ├── ragas.md
│ │ │ ├── snowflake.md
│ │ │ ├── stackit.md
│ │ │ ├── togetherai.md
│ │ │ ├── unstructured.md
│ │ │ ├── valkey.md
│ │ │ ├── watsonx.md
│ │ │ ├── weave.md
│ │ │ └── weaviate.md
│ │ ├── version-2.21/
│ │ │ ├── experiments-api/
│ │ │ │ ├── experimental_agents_api.md
│ │ │ │ ├── experimental_chatmessage_store_api.md
│ │ │ │ ├── experimental_generators_api.md
│ │ │ │ ├── experimental_mem0_memory_store_api.md
│ │ │ │ ├── experimental_preprocessors_api.md
│ │ │ │ ├── experimental_retrievers_api.md
│ │ │ │ ├── experimental_summarizer_api.md
│ │ │ │ └── experimental_writers_api.md
│ │ │ ├── haystack-api/
│ │ │ │ ├── agents_api.md
│ │ │ │ ├── audio_api.md
│ │ │ │ ├── builders_api.md
│ │ │ │ ├── cachings_api.md
│ │ │ │ ├── classifiers_api.md
│ │ │ │ ├── connectors_api.md
│ │ │ │ ├── converters_api.md
│ │ │ │ ├── data_classes_api.md
│ │ │ │ ├── document_stores_api.md
│ │ │ │ ├── document_writers_api.md
│ │ │ │ ├── embedders_api.md
│ │ │ │ ├── evaluation_api.md
│ │ │ │ ├── evaluators_api.md
│ │ │ │ ├── extractors_api.md
│ │ │ │ ├── fetchers_api.md
│ │ │ │ ├── generators_api.md
│ │ │ │ ├── image_converters_api.md
│ │ │ │ ├── joiners_api.md
│ │ │ │ ├── pipeline_api.md
│ │ │ │ ├── preprocessors_api.md
│ │ │ │ ├── query_api.md
│ │ │ │ ├── rankers_api.md
│ │ │ │ ├── readers_api.md
│ │ │ │ ├── retrievers_api.md
│ │ │ │ ├── routers_api.md
│ │ │ │ ├── samplers_api.md
│ │ │ │ ├── tool_components_api.md
│ │ │ │ ├── tools_api.md
│ │ │ │ ├── utils_api.md
│ │ │ │ ├── validators_api.md
│ │ │ │ └── websearch_api.md
│ │ │ ├── index.mdx
│ │ │ └── integrations-api/
│ │ │ ├── aimlapi.md
│ │ │ ├── amazon_bedrock.md
│ │ │ ├── amazon_sagemaker.md
│ │ │ ├── anthropic.md
│ │ │ ├── arcadedb.md
│ │ │ ├── astra.md
│ │ │ ├── azure_ai_search.md
│ │ │ ├── azure_doc_intelligence.md
│ │ │ ├── chroma.md
│ │ │ ├── cohere.md
│ │ │ ├── cometapi.md
│ │ │ ├── deepeval.md
│ │ │ ├── elasticsearch.md
│ │ │ ├── faiss.md
│ │ │ ├── fastembed.md
│ │ │ ├── firecrawl.md
│ │ │ ├── github.md
│ │ │ ├── google_ai.md
│ │ │ ├── google_genai.md
│ │ │ ├── google_vertex.md
│ │ │ ├── hanlp.md
│ │ │ ├── jina.md
│ │ │ ├── langfuse.md
│ │ │ ├── lara.md
│ │ │ ├── llama_cpp.md
│ │ │ ├── llama_stack.md
│ │ │ ├── mcp.md
│ │ │ ├── meta_llama.md
│ │ │ ├── mistral.md
│ │ │ ├── mongodb_atlas.md
│ │ │ ├── nvidia.md
│ │ │ ├── ollama.md
│ │ │ ├── openrouter.md
│ │ │ ├── opensearch.md
│ │ │ ├── optimum.md
│ │ │ ├── paddleocr.md
│ │ │ ├── pgvector.md
│ │ │ ├── pinecone.md
│ │ │ ├── pyversity.md
│ │ │ ├── qdrant.md
│ │ │ ├── ragas.md
│ │ │ ├── snowflake.md
│ │ │ ├── stackit.md
│ │ │ ├── togetherai.md
│ │ │ ├── unstructured.md
│ │ │ ├── valkey.md
│ │ │ ├── watsonx.md
│ │ │ ├── weave.md
│ │ │ └── weaviate.md
│ │ ├── version-2.22/
│ │ │ ├── experiments-api/
│ │ │ │ ├── experimental_agents_api.md
│ │ │ │ ├── experimental_chatmessage_store_api.md
│ │ │ │ ├── experimental_generators_api.md
│ │ │ │ ├── experimental_mem0_memory_store_api.md
│ │ │ │ ├── experimental_preprocessors_api.md
│ │ │ │ ├── experimental_retrievers_api.md
│ │ │ │ ├── experimental_summarizer_api.md
│ │ │ │ └── experimental_writers_api.md
│ │ │ ├── haystack-api/
│ │ │ │ ├── agents_api.md
│ │ │ │ ├── audio_api.md
│ │ │ │ ├── builders_api.md
│ │ │ │ ├── cachings_api.md
│ │ │ │ ├── classifiers_api.md
│ │ │ │ ├── connectors_api.md
│ │ │ │ ├── converters_api.md
│ │ │ │ ├── data_classes_api.md
│ │ │ │ ├── document_stores_api.md
│ │ │ │ ├── document_writers_api.md
│ │ │ │ ├── embedders_api.md
│ │ │ │ ├── evaluation_api.md
│ │ │ │ ├── evaluators_api.md
│ │ │ │ ├── extractors_api.md
│ │ │ │ ├── fetchers_api.md
│ │ │ │ ├── generators_api.md
│ │ │ │ ├── image_converters_api.md
│ │ │ │ ├── joiners_api.md
│ │ │ │ ├── pipeline_api.md
│ │ │ │ ├── preprocessors_api.md
│ │ │ │ ├── query_api.md
│ │ │ │ ├── rankers_api.md
│ │ │ │ ├── readers_api.md
│ │ │ │ ├── retrievers_api.md
│ │ │ │ ├── routers_api.md
│ │ │ │ ├── samplers_api.md
│ │ │ │ ├── tool_components_api.md
│ │ │ │ ├── tools_api.md
│ │ │ │ ├── utils_api.md
│ │ │ │ ├── validators_api.md
│ │ │ │ └── websearch_api.md
│ │ │ ├── index.mdx
│ │ │ └── integrations-api/
│ │ │ ├── aimlapi.md
│ │ │ ├── amazon_bedrock.md
│ │ │ ├── amazon_sagemaker.md
│ │ │ ├── anthropic.md
│ │ │ ├── arcadedb.md
│ │ │ ├── astra.md
│ │ │ ├── azure_ai_search.md
│ │ │ ├── azure_doc_intelligence.md
│ │ │ ├── chroma.md
│ │ │ ├── cohere.md
│ │ │ ├── cometapi.md
│ │ │ ├── deepeval.md
│ │ │ ├── elasticsearch.md
│ │ │ ├── faiss.md
│ │ │ ├── fastembed.md
│ │ │ ├── firecrawl.md
│ │ │ ├── github.md
│ │ │ ├── google_ai.md
│ │ │ ├── google_genai.md
│ │ │ ├── google_vertex.md
│ │ │ ├── hanlp.md
│ │ │ ├── jina.md
│ │ │ ├── langfuse.md
│ │ │ ├── lara.md
│ │ │ ├── llama_cpp.md
│ │ │ ├── llama_stack.md
│ │ │ ├── mcp.md
│ │ │ ├── meta_llama.md
│ │ │ ├── mistral.md
│ │ │ ├── mongodb_atlas.md
│ │ │ ├── nvidia.md
│ │ │ ├── ollama.md
│ │ │ ├── openrouter.md
│ │ │ ├── opensearch.md
│ │ │ ├── optimum.md
│ │ │ ├── paddleocr.md
│ │ │ ├── pgvector.md
│ │ │ ├── pinecone.md
│ │ │ ├── pyversity.md
│ │ │ ├── qdrant.md
│ │ │ ├── ragas.md
│ │ │ ├── snowflake.md
│ │ │ ├── stackit.md
│ │ │ ├── togetherai.md
│ │ │ ├── unstructured.md
│ │ │ ├── valkey.md
│ │ │ ├── watsonx.md
│ │ │ ├── weave.md
│ │ │ └── weaviate.md
│ │ ├── version-2.23/
│ │ │ ├── experiments-api/
│ │ │ │ ├── experimental_agents_api.md
│ │ │ │ ├── experimental_chatmessage_store_api.md
│ │ │ │ ├── experimental_generators_api.md
│ │ │ │ ├── experimental_mem0_memory_store_api.md
│ │ │ │ ├── experimental_preprocessors_api.md
│ │ │ │ ├── experimental_retrievers_api.md
│ │ │ │ ├── experimental_summarizer_api.md
│ │ │ │ └── experimental_writers_api.md
│ │ │ ├── haystack-api/
│ │ │ │ ├── agents_api.md
│ │ │ │ ├── audio_api.md
│ │ │ │ ├── builders_api.md
│ │ │ │ ├── cachings_api.md
│ │ │ │ ├── classifiers_api.md
│ │ │ │ ├── connectors_api.md
│ │ │ │ ├── converters_api.md
│ │ │ │ ├── data_classes_api.md
│ │ │ │ ├── document_stores_api.md
│ │ │ │ ├── document_writers_api.md
│ │ │ │ ├── embedders_api.md
│ │ │ │ ├── evaluation_api.md
│ │ │ │ ├── evaluators_api.md
│ │ │ │ ├── extractors_api.md
│ │ │ │ ├── fetchers_api.md
│ │ │ │ ├── generators_api.md
│ │ │ │ ├── human_in_the_loop_api.md
│ │ │ │ ├── image_converters_api.md
│ │ │ │ ├── joiners_api.md
│ │ │ │ ├── pipeline_api.md
│ │ │ │ ├── preprocessors_api.md
│ │ │ │ ├── query_api.md
│ │ │ │ ├── rankers_api.md
│ │ │ │ ├── readers_api.md
│ │ │ │ ├── retrievers_api.md
│ │ │ │ ├── routers_api.md
│ │ │ │ ├── samplers_api.md
│ │ │ │ ├── tool_components_api.md
│ │ │ │ ├── tools_api.md
│ │ │ │ ├── utils_api.md
│ │ │ │ ├── validators_api.md
│ │ │ │ └── websearch_api.md
│ │ │ ├── index.mdx
│ │ │ └── integrations-api/
│ │ │ ├── aimlapi.md
│ │ │ ├── amazon_bedrock.md
│ │ │ ├── amazon_sagemaker.md
│ │ │ ├── anthropic.md
│ │ │ ├── arcadedb.md
│ │ │ ├── astra.md
│ │ │ ├── azure_ai_search.md
│ │ │ ├── azure_doc_intelligence.md
│ │ │ ├── chroma.md
│ │ │ ├── cohere.md
│ │ │ ├── cometapi.md
│ │ │ ├── deepeval.md
│ │ │ ├── elasticsearch.md
│ │ │ ├── faiss.md
│ │ │ ├── fastembed.md
│ │ │ ├── firecrawl.md
│ │ │ ├── github.md
│ │ │ ├── google_ai.md
│ │ │ ├── google_genai.md
│ │ │ ├── google_vertex.md
│ │ │ ├── hanlp.md
│ │ │ ├── jina.md
│ │ │ ├── langfuse.md
│ │ │ ├── lara.md
│ │ │ ├── llama_cpp.md
│ │ │ ├── llama_stack.md
│ │ │ ├── mcp.md
│ │ │ ├── meta_llama.md
│ │ │ ├── mistral.md
│ │ │ ├── mongodb_atlas.md
│ │ │ ├── nvidia.md
│ │ │ ├── ollama.md
│ │ │ ├── openrouter.md
│ │ │ ├── opensearch.md
│ │ │ ├── optimum.md
│ │ │ ├── paddleocr.md
│ │ │ ├── pgvector.md
│ │ │ ├── pinecone.md
│ │ │ ├── pyversity.md
│ │ │ ├── qdrant.md
│ │ │ ├── ragas.md
│ │ │ ├── snowflake.md
│ │ │ ├── stackit.md
│ │ │ ├── togetherai.md
│ │ │ ├── unstructured.md
│ │ │ ├── valkey.md
│ │ │ ├── watsonx.md
│ │ │ ├── weave.md
│ │ │ └── weaviate.md
│ │ ├── version-2.24/
│ │ │ ├── experiments-api/
│ │ │ │ ├── experimental_agents_api.md
│ │ │ │ ├── experimental_chatmessage_store_api.md
│ │ │ │ ├── experimental_generators_api.md
│ │ │ │ ├── experimental_mem0_memory_store_api.md
│ │ │ │ ├── experimental_preprocessors_api.md
│ │ │ │ ├── experimental_retrievers_api.md
│ │ │ │ ├── experimental_summarizer_api.md
│ │ │ │ └── experimental_writers_api.md
│ │ │ ├── haystack-api/
│ │ │ │ ├── agents_api.md
│ │ │ │ ├── audio_api.md
│ │ │ │ ├── builders_api.md
│ │ │ │ ├── cachings_api.md
│ │ │ │ ├── classifiers_api.md
│ │ │ │ ├── connectors_api.md
│ │ │ │ ├── converters_api.md
│ │ │ │ ├── data_classes_api.md
│ │ │ │ ├── document_stores_api.md
│ │ │ │ ├── document_writers_api.md
│ │ │ │ ├── embedders_api.md
│ │ │ │ ├── evaluation_api.md
│ │ │ │ ├── evaluators_api.md
│ │ │ │ ├── extractors_api.md
│ │ │ │ ├── fetchers_api.md
│ │ │ │ ├── generators_api.md
│ │ │ │ ├── human_in_the_loop_api.md
│ │ │ │ ├── image_converters_api.md
│ │ │ │ ├── joiners_api.md
│ │ │ │ ├── pipeline_api.md
│ │ │ │ ├── preprocessors_api.md
│ │ │ │ ├── query_api.md
│ │ │ │ ├── rankers_api.md
│ │ │ │ ├── readers_api.md
│ │ │ │ ├── retrievers_api.md
│ │ │ │ ├── routers_api.md
│ │ │ │ ├── samplers_api.md
│ │ │ │ ├── tool_components_api.md
│ │ │ │ ├── tools_api.md
│ │ │ │ ├── utils_api.md
│ │ │ │ ├── validators_api.md
│ │ │ │ └── websearch_api.md
│ │ │ ├── index.mdx
│ │ │ └── integrations-api/
│ │ │ ├── aimlapi.md
│ │ │ ├── amazon_bedrock.md
│ │ │ ├── amazon_sagemaker.md
│ │ │ ├── anthropic.md
│ │ │ ├── arcadedb.md
│ │ │ ├── astra.md
│ │ │ ├── azure_ai_search.md
│ │ │ ├── azure_doc_intelligence.md
│ │ │ ├── chroma.md
│ │ │ ├── cohere.md
│ │ │ ├── cometapi.md
│ │ │ ├── deepeval.md
│ │ │ ├── elasticsearch.md
│ │ │ ├── faiss.md
│ │ │ ├── fastembed.md
│ │ │ ├── firecrawl.md
│ │ │ ├── github.md
│ │ │ ├── google_ai.md
│ │ │ ├── google_genai.md
│ │ │ ├── google_vertex.md
│ │ │ ├── hanlp.md
│ │ │ ├── jina.md
│ │ │ ├── langfuse.md
│ │ │ ├── lara.md
│ │ │ ├── llama_cpp.md
│ │ │ ├── llama_stack.md
│ │ │ ├── mcp.md
│ │ │ ├── meta_llama.md
│ │ │ ├── mistral.md
│ │ │ ├── mongodb_atlas.md
│ │ │ ├── nvidia.md
│ │ │ ├── ollama.md
│ │ │ ├── openrouter.md
│ │ │ ├── opensearch.md
│ │ │ ├── optimum.md
│ │ │ ├── paddleocr.md
│ │ │ ├── pgvector.md
│ │ │ ├── pinecone.md
│ │ │ ├── pyversity.md
│ │ │ ├── qdrant.md
│ │ │ ├── ragas.md
│ │ │ ├── snowflake.md
│ │ │ ├── stackit.md
│ │ │ ├── togetherai.md
│ │ │ ├── unstructured.md
│ │ │ ├── valkey.md
│ │ │ ├── watsonx.md
│ │ │ ├── weave.md
│ │ │ └── weaviate.md
│ │ ├── version-2.25/
│ │ │ ├── experiments-api/
│ │ │ │ ├── experimental_agents_api.md
│ │ │ │ ├── experimental_chatmessage_store_api.md
│ │ │ │ ├── experimental_generators_api.md
│ │ │ │ ├── experimental_mem0_memory_store_api.md
│ │ │ │ ├── experimental_preprocessors_api.md
│ │ │ │ ├── experimental_retrievers_api.md
│ │ │ │ ├── experimental_summarizer_api.md
│ │ │ │ └── experimental_writers_api.md
│ │ │ ├── haystack-api/
│ │ │ │ ├── agents_api.md
│ │ │ │ ├── audio_api.md
│ │ │ │ ├── builders_api.md
│ │ │ │ ├── cachings_api.md
│ │ │ │ ├── classifiers_api.md
│ │ │ │ ├── connectors_api.md
│ │ │ │ ├── converters_api.md
│ │ │ │ ├── data_classes_api.md
│ │ │ │ ├── document_stores_api.md
│ │ │ │ ├── document_writers_api.md
│ │ │ │ ├── embedders_api.md
│ │ │ │ ├── evaluation_api.md
│ │ │ │ ├── evaluators_api.md
│ │ │ │ ├── extractors_api.md
│ │ │ │ ├── fetchers_api.md
│ │ │ │ ├── generators_api.md
│ │ │ │ ├── human_in_the_loop_api.md
│ │ │ │ ├── image_converters_api.md
│ │ │ │ ├── joiners_api.md
│ │ │ │ ├── pipeline_api.md
│ │ │ │ ├── preprocessors_api.md
│ │ │ │ ├── query_api.md
│ │ │ │ ├── rankers_api.md
│ │ │ │ ├── readers_api.md
│ │ │ │ ├── retrievers_api.md
│ │ │ │ ├── routers_api.md
│ │ │ │ ├── samplers_api.md
│ │ │ │ ├── tool_components_api.md
│ │ │ │ ├── tools_api.md
│ │ │ │ ├── utils_api.md
│ │ │ │ ├── validators_api.md
│ │ │ │ └── websearch_api.md
│ │ │ ├── index.mdx
│ │ │ └── integrations-api/
│ │ │ ├── aimlapi.md
│ │ │ ├── amazon_bedrock.md
│ │ │ ├── amazon_sagemaker.md
│ │ │ ├── anthropic.md
│ │ │ ├── arcadedb.md
│ │ │ ├── astra.md
│ │ │ ├── azure_ai_search.md
│ │ │ ├── azure_doc_intelligence.md
│ │ │ ├── chroma.md
│ │ │ ├── cohere.md
│ │ │ ├── cometapi.md
│ │ │ ├── deepeval.md
│ │ │ ├── elasticsearch.md
│ │ │ ├── faiss.md
│ │ │ ├── fastembed.md
│ │ │ ├── firecrawl.md
│ │ │ ├── github.md
│ │ │ ├── google_ai.md
│ │ │ ├── google_genai.md
│ │ │ ├── google_vertex.md
│ │ │ ├── hanlp.md
│ │ │ ├── jina.md
│ │ │ ├── langfuse.md
│ │ │ ├── lara.md
│ │ │ ├── llama_cpp.md
│ │ │ ├── llama_stack.md
│ │ │ ├── mcp.md
│ │ │ ├── meta_llama.md
│ │ │ ├── mistral.md
│ │ │ ├── mongodb_atlas.md
│ │ │ ├── nvidia.md
│ │ │ ├── ollama.md
│ │ │ ├── openrouter.md
│ │ │ ├── opensearch.md
│ │ │ ├── optimum.md
│ │ │ ├── paddleocr.md
│ │ │ ├── pgvector.md
│ │ │ ├── pinecone.md
│ │ │ ├── pyversity.md
│ │ │ ├── qdrant.md
│ │ │ ├── ragas.md
│ │ │ ├── snowflake.md
│ │ │ ├── stackit.md
│ │ │ ├── togetherai.md
│ │ │ ├── unstructured.md
│ │ │ ├── valkey.md
│ │ │ ├── watsonx.md
│ │ │ ├── weave.md
│ │ │ └── weaviate.md
│ │ └── version-2.26/
│ │ ├── experiments-api/
│ │ │ ├── experimental_agents_api.md
│ │ │ ├── experimental_chatmessage_store_api.md
│ │ │ ├── experimental_generators_api.md
│ │ │ ├── experimental_mem0_memory_store_api.md
│ │ │ ├── experimental_preprocessors_api.md
│ │ │ ├── experimental_retrievers_api.md
│ │ │ ├── experimental_summarizer_api.md
│ │ │ └── experimental_writers_api.md
│ │ ├── haystack-api/
│ │ │ ├── agents_api.md
│ │ │ ├── audio_api.md
│ │ │ ├── builders_api.md
│ │ │ ├── cachings_api.md
│ │ │ ├── classifiers_api.md
│ │ │ ├── connectors_api.md
│ │ │ ├── converters_api.md
│ │ │ ├── data_classes_api.md
│ │ │ ├── document_stores_api.md
│ │ │ ├── document_writers_api.md
│ │ │ ├── embedders_api.md
│ │ │ ├── evaluation_api.md
│ │ │ ├── evaluators_api.md
│ │ │ ├── extractors_api.md
│ │ │ ├── fetchers_api.md
│ │ │ ├── generators_api.md
│ │ │ ├── human_in_the_loop_api.md
│ │ │ ├── image_converters_api.md
│ │ │ ├── joiners_api.md
│ │ │ ├── pipeline_api.md
│ │ │ ├── preprocessors_api.md
│ │ │ ├── query_api.md
│ │ │ ├── rankers_api.md
│ │ │ ├── readers_api.md
│ │ │ ├── retrievers_api.md
│ │ │ ├── routers_api.md
│ │ │ ├── samplers_api.md
│ │ │ ├── tool_components_api.md
│ │ │ ├── tools_api.md
│ │ │ ├── utils_api.md
│ │ │ ├── validators_api.md
│ │ │ └── websearch_api.md
│ │ ├── index.mdx
│ │ └── integrations-api/
│ │ ├── aimlapi.md
│ │ ├── amazon_bedrock.md
│ │ ├── amazon_sagemaker.md
│ │ ├── anthropic.md
│ │ ├── arcadedb.md
│ │ ├── astra.md
│ │ ├── azure_ai_search.md
│ │ ├── azure_doc_intelligence.md
│ │ ├── chroma.md
│ │ ├── cohere.md
│ │ ├── cometapi.md
│ │ ├── deepeval.md
│ │ ├── elasticsearch.md
│ │ ├── faiss.md
│ │ ├── fastembed.md
│ │ ├── firecrawl.md
│ │ ├── github.md
│ │ ├── google_ai.md
│ │ ├── google_genai.md
│ │ ├── google_vertex.md
│ │ ├── hanlp.md
│ │ ├── jina.md
│ │ ├── langfuse.md
│ │ ├── lara.md
│ │ ├── llama_cpp.md
│ │ ├── llama_stack.md
│ │ ├── mcp.md
│ │ ├── meta_llama.md
│ │ ├── mistral.md
│ │ ├── mongodb_atlas.md
│ │ ├── nvidia.md
│ │ ├── ollama.md
│ │ ├── openrouter.md
│ │ ├── opensearch.md
│ │ ├── optimum.md
│ │ ├── paddleocr.md
│ │ ├── pgvector.md
│ │ ├── pinecone.md
│ │ ├── pyversity.md
│ │ ├── qdrant.md
│ │ ├── ragas.md
│ │ ├── snowflake.md
│ │ ├── stackit.md
│ │ ├── togetherai.md
│ │ ├── unstructured.md
│ │ ├── valkey.md
│ │ ├── watsonx.md
│ │ ├── weave.md
│ │ └── weaviate.md
│ ├── reference_versioned_sidebars/
│ │ ├── version-2.18-sidebars.json
│ │ ├── version-2.19-sidebars.json
│ │ ├── version-2.20-sidebars.json
│ │ ├── version-2.21-sidebars.json
│ │ ├── version-2.22-sidebars.json
│ │ ├── version-2.23-sidebars.json
│ │ ├── version-2.24-sidebars.json
│ │ ├── version-2.25-sidebars.json
│ │ └── version-2.26-sidebars.json
│ ├── reference_versions.json
│ ├── scripts/
│ │ ├── extract_sidebar.mjs
│ │ ├── generate_requirements.py
│ │ ├── setup-dev.sh
│ │ └── test_python_snippets.py
│ ├── sidebars.js
│ ├── static/
│ │ └── .nojekyll
│ ├── versioned_docs/
│ │ ├── version-2.18/
│ │ │ ├── concepts/
│ │ │ │ ├── agents/
│ │ │ │ │ └── state.mdx
│ │ │ │ ├── agents.mdx
│ │ │ │ ├── components/
│ │ │ │ │ ├── custom-components.mdx
│ │ │ │ │ └── supercomponents.mdx
│ │ │ │ ├── components.mdx
│ │ │ │ ├── concepts-overview.mdx
│ │ │ │ ├── data-classes/
│ │ │ │ │ └── chatmessage.mdx
│ │ │ │ ├── data-classes.mdx
│ │ │ │ ├── device-management.mdx
│ │ │ │ ├── document-store/
│ │ │ │ │ ├── choosing-a-document-store.mdx
│ │ │ │ │ └── creating-custom-document-stores.mdx
│ │ │ │ ├── document-store.mdx
│ │ │ │ ├── experimental-package.mdx
│ │ │ │ ├── integrations.mdx
│ │ │ │ ├── jinja-templates.mdx
│ │ │ │ ├── metadata-filtering.mdx
│ │ │ │ ├── pipelines/
│ │ │ │ │ ├── asyncpipeline.mdx
│ │ │ │ │ ├── creating-pipelines.mdx
│ │ │ │ │ ├── debugging-pipelines.mdx
│ │ │ │ │ ├── pipeline-breakpoints.mdx
│ │ │ │ │ ├── pipeline-templates.mdx
│ │ │ │ │ ├── serialization.mdx
│ │ │ │ │ └── visualizing-pipelines.mdx
│ │ │ │ ├── pipelines.mdx
│ │ │ │ └── secret-management.mdx
│ │ │ ├── development/
│ │ │ │ ├── deployment/
│ │ │ │ │ ├── docker.mdx
│ │ │ │ │ ├── kubernetes.mdx
│ │ │ │ │ └── openshift.mdx
│ │ │ │ ├── deployment.mdx
│ │ │ │ ├── enabling-gpu-acceleration.mdx
│ │ │ │ ├── external-integrations-development.mdx
│ │ │ │ ├── hayhooks.mdx
│ │ │ │ ├── logging.mdx
│ │ │ │ └── tracing.mdx
│ │ │ ├── document-stores/
│ │ │ │ ├── astradocumentstore.mdx
│ │ │ │ ├── azureaisearchdocumentstore.mdx
│ │ │ │ ├── chromadocumentstore.mdx
│ │ │ │ ├── elasticsearch-document-store.mdx
│ │ │ │ ├── inmemorydocumentstore.mdx
│ │ │ │ ├── mongodbatlasdocumentstore.mdx
│ │ │ │ ├── opensearch-document-store.mdx
│ │ │ │ ├── pgvectordocumentstore.mdx
│ │ │ │ ├── pinecone-document-store.mdx
│ │ │ │ ├── qdrant-document-store.mdx
│ │ │ │ └── weaviatedocumentstore.mdx
│ │ │ ├── intro.mdx
│ │ │ ├── optimization/
│ │ │ │ ├── advanced-rag-techniques/
│ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx
│ │ │ │ ├── advanced-rag-techniques.mdx
│ │ │ │ ├── evaluation/
│ │ │ │ │ ├── model-based-evaluation.mdx
│ │ │ │ │ └── statistical-evaluation.mdx
│ │ │ │ └── evaluation.mdx
│ │ │ ├── overview/
│ │ │ │ ├── breaking-change-policy.mdx
│ │ │ │ ├── faq.mdx
│ │ │ │ ├── get-started.mdx
│ │ │ │ ├── installation.mdx
│ │ │ │ ├── migration.mdx
│ │ │ │ └── telemetry.mdx
│ │ │ ├── pipeline-components/
│ │ │ │ ├── agents-1/
│ │ │ │ │ └── agent.mdx
│ │ │ │ ├── audio/
│ │ │ │ │ ├── external-integrations-audio.mdx
│ │ │ │ │ ├── localwhispertranscriber.mdx
│ │ │ │ │ └── remotewhispertranscriber.mdx
│ │ │ │ ├── audio.mdx
│ │ │ │ ├── builders/
│ │ │ │ │ ├── answerbuilder.mdx
│ │ │ │ │ ├── chatpromptbuilder.mdx
│ │ │ │ │ └── promptbuilder.mdx
│ │ │ │ ├── builders.mdx
│ │ │ │ ├── caching/
│ │ │ │ │ └── cachechecker.mdx
│ │ │ │ ├── classifiers/
│ │ │ │ │ ├── documentlanguageclassifier.mdx
│ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx
│ │ │ │ ├── classifiers.mdx
│ │ │ │ ├── connectors/
│ │ │ │ │ ├── external-integrations-connectors.mdx
│ │ │ │ │ ├── githubfileeditor.mdx
│ │ │ │ │ ├── githubissuecommenter.mdx
│ │ │ │ │ ├── githubissueviewer.mdx
│ │ │ │ │ ├── githubprcreator.mdx
│ │ │ │ │ ├── githubrepoforker.mdx
│ │ │ │ │ ├── githubrepoviewer.mdx
│ │ │ │ │ ├── jinareaderconnector.mdx
│ │ │ │ │ ├── langfuseconnector.mdx
│ │ │ │ │ ├── openapiconnector.mdx
│ │ │ │ │ ├── openapiserviceconnector.mdx
│ │ │ │ │ └── weaveconnector.mdx
│ │ │ │ ├── connectors.mdx
│ │ │ │ ├── converters/
│ │ │ │ │ ├── azureocrdocumentconverter.mdx
│ │ │ │ │ ├── csvtodocument.mdx
│ │ │ │ │ ├── documenttoimagecontent.mdx
│ │ │ │ │ ├── docxtodocument.mdx
│ │ │ │ │ ├── external-integrations-converters.mdx
│ │ │ │ │ ├── htmltodocument.mdx
│ │ │ │ │ ├── imagefiletodocument.mdx
│ │ │ │ │ ├── imagefiletoimagecontent.mdx
│ │ │ │ │ ├── jsonconverter.mdx
│ │ │ │ │ ├── markdowntodocument.mdx
│ │ │ │ │ ├── msgtodocument.mdx
│ │ │ │ │ ├── multifileconverter.mdx
│ │ │ │ │ ├── openapiservicetofunctions.mdx
│ │ │ │ │ ├── outputadapter.mdx
│ │ │ │ │ ├── pdfminertodocument.mdx
│ │ │ │ │ ├── pdftoimagecontent.mdx
│ │ │ │ │ ├── pptxtodocument.mdx
│ │ │ │ │ ├── pypdftodocument.mdx
│ │ │ │ │ ├── textfiletodocument.mdx
│ │ │ │ │ ├── tikadocumentconverter.mdx
│ │ │ │ │ ├── unstructuredfileconverter.mdx
│ │ │ │ │ └── xlsxtodocument.mdx
│ │ │ │ ├── converters.mdx
│ │ │ │ ├── downloaders/
│ │ │ │ │ └── s3downloader.mdx
│ │ │ │ ├── embedders/
│ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx
│ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx
│ │ │ │ │ ├── amazonbedrocktextembedder.mdx
│ │ │ │ │ ├── azureopenaidocumentembedder.mdx
│ │ │ │ │ ├── azureopenaitextembedder.mdx
│ │ │ │ │ ├── choosing-the-right-embedder.mdx
│ │ │ │ │ ├── coheredocumentembedder.mdx
│ │ │ │ │ ├── coheredocumentimageembedder.mdx
│ │ │ │ │ ├── coheretextembedder.mdx
│ │ │ │ │ ├── external-integrations-embedders.mdx
│ │ │ │ │ ├── fastembeddocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsetextembedder.mdx
│ │ │ │ │ ├── fastembedtextembedder.mdx
│ │ │ │ │ ├── googlegenaidocumentembedder.mdx
│ │ │ │ │ ├── googlegenaitextembedder.mdx
│ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx
│ │ │ │ │ ├── huggingfaceapitextembedder.mdx
│ │ │ │ │ ├── jinadocumentembedder.mdx
│ │ │ │ │ ├── jinadocumentimageembedder.mdx
│ │ │ │ │ ├── jinatextembedder.mdx
│ │ │ │ │ ├── mistraldocumentembedder.mdx
│ │ │ │ │ ├── mistraltextembedder.mdx
│ │ │ │ │ ├── nvidiadocumentembedder.mdx
│ │ │ │ │ ├── nvidiatextembedder.mdx
│ │ │ │ │ ├── ollamadocumentembedder.mdx
│ │ │ │ │ ├── ollamatextembedder.mdx
│ │ │ │ │ ├── openaidocumentembedder.mdx
│ │ │ │ │ ├── openaitextembedder.mdx
│ │ │ │ │ ├── optimumdocumentembedder.mdx
│ │ │ │ │ ├── optimumtextembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx
│ │ │ │ │ ├── sentencetransformerstextembedder.mdx
│ │ │ │ │ ├── stackitdocumentembedder.mdx
│ │ │ │ │ ├── stackittextembedder.mdx
│ │ │ │ │ ├── vertexaidocumentembedder.mdx
│ │ │ │ │ ├── vertexaitextembedder.mdx
│ │ │ │ │ ├── watsonxdocumentembedder.mdx
│ │ │ │ │ └── watsonxtextembedder.mdx
│ │ │ │ ├── embedders.mdx
│ │ │ │ ├── evaluators/
│ │ │ │ │ ├── answerexactmatchevaluator.mdx
│ │ │ │ │ ├── contextrelevanceevaluator.mdx
│ │ │ │ │ ├── deepevalevaluator.mdx
│ │ │ │ │ ├── documentmapevaluator.mdx
│ │ │ │ │ ├── documentmrrevaluator.mdx
│ │ │ │ │ ├── documentndcgevaluator.mdx
│ │ │ │ │ ├── documentrecallevaluator.mdx
│ │ │ │ │ ├── external-integrations-evaluators.mdx
│ │ │ │ │ ├── faithfulnessevaluator.mdx
│ │ │ │ │ ├── llmevaluator.mdx
│ │ │ │ │ ├── ragasevaluator.mdx
│ │ │ │ │ └── sasevaluator.mdx
│ │ │ │ ├── evaluators.mdx
│ │ │ │ ├── extractors/
│ │ │ │ │ ├── llmdocumentcontentextractor.mdx
│ │ │ │ │ ├── llmmetadataextractor.mdx
│ │ │ │ │ └── namedentityextractor.mdx
│ │ │ │ ├── extractors.mdx
│ │ │ │ ├── fetchers/
│ │ │ │ │ ├── external-integrations-fetchers.mdx
│ │ │ │ │ └── linkcontentfetcher.mdx
│ │ │ │ ├── fetchers.mdx
│ │ │ │ ├── generators/
│ │ │ │ │ ├── amazonbedrockchatgenerator.mdx
│ │ │ │ │ ├── amazonbedrockgenerator.mdx
│ │ │ │ │ ├── anthropicchatgenerator.mdx
│ │ │ │ │ ├── anthropicgenerator.mdx
│ │ │ │ │ ├── anthropicvertexchatgenerator.mdx
│ │ │ │ │ ├── azureopenaichatgenerator.mdx
│ │ │ │ │ ├── azureopenaigenerator.mdx
│ │ │ │ │ ├── coherechatgenerator.mdx
│ │ │ │ │ ├── coheregenerator.mdx
│ │ │ │ │ ├── dalleimagegenerator.mdx
│ │ │ │ │ ├── external-integrations-generators.mdx
│ │ │ │ │ ├── googleaigeminichatgenerator.mdx
│ │ │ │ │ ├── googleaigeminigenerator.mdx
│ │ │ │ │ ├── googlegenaichatgenerator.mdx
│ │ │ │ │ ├── guides-to-generators/
│ │ │ │ │ │ ├── choosing-the-right-generator.mdx
│ │ │ │ │ │ ├── function-calling.mdx
│ │ │ │ │ │ └── generators-vs-chat-generators.mdx
│ │ │ │ │ ├── huggingfaceapichatgenerator.mdx
│ │ │ │ │ ├── huggingfaceapigenerator.mdx
│ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx
│ │ │ │ │ ├── huggingfacelocalgenerator.mdx
│ │ │ │ │ ├── llamacppchatgenerator.mdx
│ │ │ │ │ ├── llamacppgenerator.mdx
│ │ │ │ │ ├── llamastackchatgenerator.mdx
│ │ │ │ │ ├── metallamachatgenerator.mdx
│ │ │ │ │ ├── mistralchatgenerator.mdx
│ │ │ │ │ ├── nvidiachatgenerator.mdx
│ │ │ │ │ ├── nvidiagenerator.mdx
│ │ │ │ │ ├── ollamachatgenerator.mdx
│ │ │ │ │ ├── ollamagenerator.mdx
│ │ │ │ │ ├── openaichatgenerator.mdx
│ │ │ │ │ ├── openaigenerator.mdx
│ │ │ │ │ ├── openrouterchatgenerator.mdx
│ │ │ │ │ ├── sagemakergenerator.mdx
│ │ │ │ │ ├── stackitchatgenerator.mdx
│ │ │ │ │ ├── vertexaicodegenerator.mdx
│ │ │ │ │ ├── vertexaigeminichatgenerator.mdx
│ │ │ │ │ ├── vertexaigeminigenerator.mdx
│ │ │ │ │ ├── vertexaiimagecaptioner.mdx
│ │ │ │ │ ├── vertexaiimagegenerator.mdx
│ │ │ │ │ ├── vertexaiimageqa.mdx
│ │ │ │ │ ├── vertexaitextgenerator.mdx
│ │ │ │ │ ├── watsonxchatgenerator.mdx
│ │ │ │ │ └── watsonxgenerator.mdx
│ │ │ │ ├── generators.mdx
│ │ │ │ ├── joiners/
│ │ │ │ │ ├── answerjoiner.mdx
│ │ │ │ │ ├── branchjoiner.mdx
│ │ │ │ │ ├── documentjoiner.mdx
│ │ │ │ │ ├── listjoiner.mdx
│ │ │ │ │ └── stringjoiner.mdx
│ │ │ │ ├── joiners.mdx
│ │ │ │ ├── preprocessors/
│ │ │ │ │ ├── chinesedocumentsplitter.mdx
│ │ │ │ │ ├── csvdocumentcleaner.mdx
│ │ │ │ │ ├── csvdocumentsplitter.mdx
│ │ │ │ │ ├── documentcleaner.mdx
│ │ │ │ │ ├── documentpreprocessor.mdx
│ │ │ │ │ ├── documentsplitter.mdx
│ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx
│ │ │ │ │ ├── recursivesplitter.mdx
│ │ │ │ │ └── textcleaner.mdx
│ │ │ │ ├── preprocessors.mdx
│ │ │ │ ├── rankers/
│ │ │ │ │ ├── amazonbedrockranker.mdx
│ │ │ │ │ ├── choosing-the-right-ranker.mdx
│ │ │ │ │ ├── cohereranker.mdx
│ │ │ │ │ ├── external-integrations-rankers.mdx
│ │ │ │ │ ├── fastembedranker.mdx
│ │ │ │ │ ├── huggingfaceteiranker.mdx
│ │ │ │ │ ├── jinaranker.mdx
│ │ │ │ │ ├── lostinthemiddleranker.mdx
│ │ │ │ │ ├── metafieldgroupingranker.mdx
│ │ │ │ │ ├── metafieldranker.mdx
│ │ │ │ │ ├── nvidiaranker.mdx
│ │ │ │ │ ├── pyversityranker.mdx
│ │ │ │ │ ├── sentencetransformersdiversityranker.mdx
│ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx
│ │ │ │ │ └── transformerssimilarityranker.mdx
│ │ │ │ ├── rankers.mdx
│ │ │ │ ├── readers/
│ │ │ │ │ └── extractivereader.mdx
│ │ │ │ ├── readers.mdx
│ │ │ │ ├── retrievers/
│ │ │ │ │ ├── astraretriever.mdx
│ │ │ │ │ ├── automergingretriever.mdx
│ │ │ │ │ ├── azureaisearchbm25retriever.mdx
│ │ │ │ │ ├── azureaisearchembeddingretriever.mdx
│ │ │ │ │ ├── azureaisearchhybridretriever.mdx
│ │ │ │ │ ├── chromaembeddingretriever.mdx
│ │ │ │ │ ├── chromaqueryretriever.mdx
│ │ │ │ │ ├── elasticsearchbm25retriever.mdx
│ │ │ │ │ ├── elasticsearchembeddingretriever.mdx
│ │ │ │ │ ├── filterretriever.mdx
│ │ │ │ │ ├── inmemorybm25retriever.mdx
│ │ │ │ │ ├── inmemoryembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx
│ │ │ │ │ ├── opensearchbm25retriever.mdx
│ │ │ │ │ ├── opensearchembeddingretriever.mdx
│ │ │ │ │ ├── opensearchhybridretriever.mdx
│ │ │ │ │ ├── pgvectorembeddingretriever.mdx
│ │ │ │ │ ├── pgvectorkeywordretriever.mdx
│ │ │ │ │ ├── pineconedenseretriever.mdx
│ │ │ │ │ ├── qdrantembeddingretriever.mdx
│ │ │ │ │ ├── qdranthybridretriever.mdx
│ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx
│ │ │ │ │ ├── sentencewindowretrieval.mdx
│ │ │ │ │ ├── snowflaketableretriever.mdx
│ │ │ │ │ ├── weaviatebm25retriever.mdx
│ │ │ │ │ ├── weaviateembeddingretriever.mdx
│ │ │ │ │ └── weaviatehybridretriever.mdx
│ │ │ │ ├── retrievers.mdx
│ │ │ │ ├── routers/
│ │ │ │ │ ├── conditionalrouter.mdx
│ │ │ │ │ ├── documentlengthrouter.mdx
│ │ │ │ │ ├── documenttyperouter.mdx
│ │ │ │ │ ├── filetyperouter.mdx
│ │ │ │ │ ├── llmmessagesrouter.mdx
│ │ │ │ │ ├── metadatarouter.mdx
│ │ │ │ │ ├── textlanguagerouter.mdx
│ │ │ │ │ ├── transformerstextrouter.mdx
│ │ │ │ │ └── transformerszeroshottextrouter.mdx
│ │ │ │ ├── routers.mdx
│ │ │ │ ├── samplers/
│ │ │ │ │ └── toppsampler.mdx
│ │ │ │ ├── tools/
│ │ │ │ │ └── toolinvoker.mdx
│ │ │ │ ├── validators/
│ │ │ │ │ └── jsonschemavalidator.mdx
│ │ │ │ ├── websearch/
│ │ │ │ │ ├── external-integrations-websearch.mdx
│ │ │ │ │ ├── searchapiwebsearch.mdx
│ │ │ │ │ └── serperdevwebsearch.mdx
│ │ │ │ ├── websearch.mdx
│ │ │ │ └── writers/
│ │ │ │ └── documentwriter.mdx
│ │ │ └── tools/
│ │ │ ├── componenttool.mdx
│ │ │ ├── mcptool.mdx
│ │ │ ├── mcptoolset.mdx
│ │ │ ├── pipelinetool.mdx
│ │ │ ├── ready-made-tools/
│ │ │ │ ├── githubfileeditortool.mdx
│ │ │ │ ├── githubissuecommentertool.mdx
│ │ │ │ ├── githubissueviewertool.mdx
│ │ │ │ ├── githubprcreatortool.mdx
│ │ │ │ └── githubrepoviewertool.mdx
│ │ │ ├── tool.mdx
│ │ │ └── toolset.mdx
│ │ ├── version-2.19/
│ │ │ ├── concepts/
│ │ │ │ ├── agents/
│ │ │ │ │ └── state.mdx
│ │ │ │ ├── agents.mdx
│ │ │ │ ├── components/
│ │ │ │ │ ├── custom-components.mdx
│ │ │ │ │ └── supercomponents.mdx
│ │ │ │ ├── components.mdx
│ │ │ │ ├── concepts-overview.mdx
│ │ │ │ ├── data-classes/
│ │ │ │ │ └── chatmessage.mdx
│ │ │ │ ├── data-classes.mdx
│ │ │ │ ├── device-management.mdx
│ │ │ │ ├── document-store/
│ │ │ │ │ ├── choosing-a-document-store.mdx
│ │ │ │ │ └── creating-custom-document-stores.mdx
│ │ │ │ ├── document-store.mdx
│ │ │ │ ├── experimental-package.mdx
│ │ │ │ ├── integrations.mdx
│ │ │ │ ├── jinja-templates.mdx
│ │ │ │ ├── metadata-filtering.mdx
│ │ │ │ ├── pipelines/
│ │ │ │ │ ├── asyncpipeline.mdx
│ │ │ │ │ ├── creating-pipelines.mdx
│ │ │ │ │ ├── debugging-pipelines.mdx
│ │ │ │ │ ├── pipeline-breakpoints.mdx
│ │ │ │ │ ├── pipeline-templates.mdx
│ │ │ │ │ ├── serialization.mdx
│ │ │ │ │ └── visualizing-pipelines.mdx
│ │ │ │ ├── pipelines.mdx
│ │ │ │ └── secret-management.mdx
│ │ │ ├── development/
│ │ │ │ ├── deployment/
│ │ │ │ │ ├── docker.mdx
│ │ │ │ │ ├── kubernetes.mdx
│ │ │ │ │ └── openshift.mdx
│ │ │ │ ├── deployment.mdx
│ │ │ │ ├── enabling-gpu-acceleration.mdx
│ │ │ │ ├── external-integrations-development.mdx
│ │ │ │ ├── hayhooks.mdx
│ │ │ │ ├── logging.mdx
│ │ │ │ └── tracing.mdx
│ │ │ ├── document-stores/
│ │ │ │ ├── astradocumentstore.mdx
│ │ │ │ ├── azureaisearchdocumentstore.mdx
│ │ │ │ ├── chromadocumentstore.mdx
│ │ │ │ ├── elasticsearch-document-store.mdx
│ │ │ │ ├── inmemorydocumentstore.mdx
│ │ │ │ ├── mongodbatlasdocumentstore.mdx
│ │ │ │ ├── opensearch-document-store.mdx
│ │ │ │ ├── pgvectordocumentstore.mdx
│ │ │ │ ├── pinecone-document-store.mdx
│ │ │ │ ├── qdrant-document-store.mdx
│ │ │ │ └── weaviatedocumentstore.mdx
│ │ │ ├── intro.mdx
│ │ │ ├── optimization/
│ │ │ │ ├── advanced-rag-techniques/
│ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx
│ │ │ │ ├── advanced-rag-techniques.mdx
│ │ │ │ ├── evaluation/
│ │ │ │ │ ├── model-based-evaluation.mdx
│ │ │ │ │ └── statistical-evaluation.mdx
│ │ │ │ └── evaluation.mdx
│ │ │ ├── overview/
│ │ │ │ ├── breaking-change-policy.mdx
│ │ │ │ ├── faq.mdx
│ │ │ │ ├── get-started.mdx
│ │ │ │ ├── installation.mdx
│ │ │ │ ├── migration.mdx
│ │ │ │ └── telemetry.mdx
│ │ │ ├── pipeline-components/
│ │ │ │ ├── agents-1/
│ │ │ │ │ └── agent.mdx
│ │ │ │ ├── audio/
│ │ │ │ │ ├── external-integrations-audio.mdx
│ │ │ │ │ ├── localwhispertranscriber.mdx
│ │ │ │ │ └── remotewhispertranscriber.mdx
│ │ │ │ ├── audio.mdx
│ │ │ │ ├── builders/
│ │ │ │ │ ├── answerbuilder.mdx
│ │ │ │ │ ├── chatpromptbuilder.mdx
│ │ │ │ │ └── promptbuilder.mdx
│ │ │ │ ├── builders.mdx
│ │ │ │ ├── caching/
│ │ │ │ │ └── cachechecker.mdx
│ │ │ │ ├── classifiers/
│ │ │ │ │ ├── documentlanguageclassifier.mdx
│ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx
│ │ │ │ ├── classifiers.mdx
│ │ │ │ ├── connectors/
│ │ │ │ │ ├── external-integrations-connectors.mdx
│ │ │ │ │ ├── githubfileeditor.mdx
│ │ │ │ │ ├── githubissuecommenter.mdx
│ │ │ │ │ ├── githubissueviewer.mdx
│ │ │ │ │ ├── githubprcreator.mdx
│ │ │ │ │ ├── githubrepoforker.mdx
│ │ │ │ │ ├── githubrepoviewer.mdx
│ │ │ │ │ ├── jinareaderconnector.mdx
│ │ │ │ │ ├── langfuseconnector.mdx
│ │ │ │ │ ├── openapiconnector.mdx
│ │ │ │ │ ├── openapiserviceconnector.mdx
│ │ │ │ │ └── weaveconnector.mdx
│ │ │ │ ├── connectors.mdx
│ │ │ │ ├── converters/
│ │ │ │ │ ├── azureocrdocumentconverter.mdx
│ │ │ │ │ ├── csvtodocument.mdx
│ │ │ │ │ ├── documenttoimagecontent.mdx
│ │ │ │ │ ├── docxtodocument.mdx
│ │ │ │ │ ├── external-integrations-converters.mdx
│ │ │ │ │ ├── htmltodocument.mdx
│ │ │ │ │ ├── imagefiletodocument.mdx
│ │ │ │ │ ├── imagefiletoimagecontent.mdx
│ │ │ │ │ ├── jsonconverter.mdx
│ │ │ │ │ ├── markdowntodocument.mdx
│ │ │ │ │ ├── mistralocrdocumentconverter.mdx
│ │ │ │ │ ├── msgtodocument.mdx
│ │ │ │ │ ├── multifileconverter.mdx
│ │ │ │ │ ├── openapiservicetofunctions.mdx
│ │ │ │ │ ├── outputadapter.mdx
│ │ │ │ │ ├── pdfminertodocument.mdx
│ │ │ │ │ ├── pdftoimagecontent.mdx
│ │ │ │ │ ├── pptxtodocument.mdx
│ │ │ │ │ ├── pypdftodocument.mdx
│ │ │ │ │ ├── textfiletodocument.mdx
│ │ │ │ │ ├── tikadocumentconverter.mdx
│ │ │ │ │ ├── unstructuredfileconverter.mdx
│ │ │ │ │ └── xlsxtodocument.mdx
│ │ │ │ ├── converters.mdx
│ │ │ │ ├── downloaders/
│ │ │ │ │ └── s3downloader.mdx
│ │ │ │ ├── embedders/
│ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx
│ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx
│ │ │ │ │ ├── amazonbedrocktextembedder.mdx
│ │ │ │ │ ├── azureopenaidocumentembedder.mdx
│ │ │ │ │ ├── azureopenaitextembedder.mdx
│ │ │ │ │ ├── choosing-the-right-embedder.mdx
│ │ │ │ │ ├── coheredocumentembedder.mdx
│ │ │ │ │ ├── coheredocumentimageembedder.mdx
│ │ │ │ │ ├── coheretextembedder.mdx
│ │ │ │ │ ├── external-integrations-embedders.mdx
│ │ │ │ │ ├── fastembeddocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsetextembedder.mdx
│ │ │ │ │ ├── fastembedtextembedder.mdx
│ │ │ │ │ ├── googlegenaidocumentembedder.mdx
│ │ │ │ │ ├── googlegenaitextembedder.mdx
│ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx
│ │ │ │ │ ├── huggingfaceapitextembedder.mdx
│ │ │ │ │ ├── jinadocumentembedder.mdx
│ │ │ │ │ ├── jinadocumentimageembedder.mdx
│ │ │ │ │ ├── jinatextembedder.mdx
│ │ │ │ │ ├── mistraldocumentembedder.mdx
│ │ │ │ │ ├── mistraltextembedder.mdx
│ │ │ │ │ ├── nvidiadocumentembedder.mdx
│ │ │ │ │ ├── nvidiatextembedder.mdx
│ │ │ │ │ ├── ollamadocumentembedder.mdx
│ │ │ │ │ ├── ollamatextembedder.mdx
│ │ │ │ │ ├── openaidocumentembedder.mdx
│ │ │ │ │ ├── openaitextembedder.mdx
│ │ │ │ │ ├── optimumdocumentembedder.mdx
│ │ │ │ │ ├── optimumtextembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx
│ │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx
│ │ │ │ │ ├── sentencetransformerstextembedder.mdx
│ │ │ │ │ ├── stackitdocumentembedder.mdx
│ │ │ │ │ ├── stackittextembedder.mdx
│ │ │ │ │ ├── vertexaidocumentembedder.mdx
│ │ │ │ │ ├── vertexaitextembedder.mdx
│ │ │ │ │ ├── watsonxdocumentembedder.mdx
│ │ │ │ │ └── watsonxtextembedder.mdx
│ │ │ │ ├── embedders.mdx
│ │ │ │ ├── evaluators/
│ │ │ │ │ ├── answerexactmatchevaluator.mdx
│ │ │ │ │ ├── contextrelevanceevaluator.mdx
│ │ │ │ │ ├── deepevalevaluator.mdx
│ │ │ │ │ ├── documentmapevaluator.mdx
│ │ │ │ │ ├── documentmrrevaluator.mdx
│ │ │ │ │ ├── documentndcgevaluator.mdx
│ │ │ │ │ ├── documentrecallevaluator.mdx
│ │ │ │ │ ├── external-integrations-evaluators.mdx
│ │ │ │ │ ├── faithfulnessevaluator.mdx
│ │ │ │ │ ├── llmevaluator.mdx
│ │ │ │ │ ├── ragasevaluator.mdx
│ │ │ │ │ └── sasevaluator.mdx
│ │ │ │ ├── evaluators.mdx
│ │ │ │ ├── extractors/
│ │ │ │ │ ├── llmdocumentcontentextractor.mdx
│ │ │ │ │ ├── llmmetadataextractor.mdx
│ │ │ │ │ └── namedentityextractor.mdx
│ │ │ │ ├── extractors.mdx
│ │ │ │ ├── fetchers/
│ │ │ │ │ ├── external-integrations-fetchers.mdx
│ │ │ │ │ └── linkcontentfetcher.mdx
│ │ │ │ ├── fetchers.mdx
│ │ │ │ ├── generators/
│ │ │ │ │ ├── amazonbedrockchatgenerator.mdx
│ │ │ │ │ ├── amazonbedrockgenerator.mdx
│ │ │ │ │ ├── anthropicchatgenerator.mdx
│ │ │ │ │ ├── anthropicgenerator.mdx
│ │ │ │ │ ├── anthropicvertexchatgenerator.mdx
│ │ │ │ │ ├── azureopenaichatgenerator.mdx
│ │ │ │ │ ├── azureopenaigenerator.mdx
│ │ │ │ │ ├── coherechatgenerator.mdx
│ │ │ │ │ ├── coheregenerator.mdx
│ │ │ │ │ ├── dalleimagegenerator.mdx
│ │ │ │ │ ├── external-integrations-generators.mdx
│ │ │ │ │ ├── fallbackchatgenerator.mdx
│ │ │ │ │ ├── googleaigeminichatgenerator.mdx
│ │ │ │ │ ├── googleaigeminigenerator.mdx
│ │ │ │ │ ├── googlegenaichatgenerator.mdx
│ │ │ │ │ ├── guides-to-generators/
│ │ │ │ │ │ ├── choosing-the-right-generator.mdx
│ │ │ │ │ │ ├── function-calling.mdx
│ │ │ │ │ │ └── generators-vs-chat-generators.mdx
│ │ │ │ │ ├── huggingfaceapichatgenerator.mdx
│ │ │ │ │ ├── huggingfaceapigenerator.mdx
│ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx
│ │ │ │ │ ├── huggingfacelocalgenerator.mdx
│ │ │ │ │ ├── llamacppchatgenerator.mdx
│ │ │ │ │ ├── llamacppgenerator.mdx
│ │ │ │ │ ├── llamastackchatgenerator.mdx
│ │ │ │ │ ├── metallamachatgenerator.mdx
│ │ │ │ │ ├── mistralchatgenerator.mdx
│ │ │ │ │ ├── nvidiachatgenerator.mdx
│ │ │ │ │ ├── nvidiagenerator.mdx
│ │ │ │ │ ├── ollamachatgenerator.mdx
│ │ │ │ │ ├── ollamagenerator.mdx
│ │ │ │ │ ├── openaichatgenerator.mdx
│ │ │ │ │ ├── openaigenerator.mdx
│ │ │ │ │ ├── openrouterchatgenerator.mdx
│ │ │ │ │ ├── sagemakergenerator.mdx
│ │ │ │ │ ├── stackitchatgenerator.mdx
│ │ │ │ │ ├── togetheraichatgenerator.mdx
│ │ │ │ │ ├── togetheraigenerator.mdx
│ │ │ │ │ ├── vertexaicodegenerator.mdx
│ │ │ │ │ ├── vertexaigeminichatgenerator.mdx
│ │ │ │ │ ├── vertexaigeminigenerator.mdx
│ │ │ │ │ ├── vertexaiimagecaptioner.mdx
│ │ │ │ │ ├── vertexaiimagegenerator.mdx
│ │ │ │ │ ├── vertexaiimageqa.mdx
│ │ │ │ │ ├── vertexaitextgenerator.mdx
│ │ │ │ │ ├── watsonxchatgenerator.mdx
│ │ │ │ │ └── watsonxgenerator.mdx
│ │ │ │ ├── generators.mdx
│ │ │ │ ├── joiners/
│ │ │ │ │ ├── answerjoiner.mdx
│ │ │ │ │ ├── branchjoiner.mdx
│ │ │ │ │ ├── documentjoiner.mdx
│ │ │ │ │ ├── listjoiner.mdx
│ │ │ │ │ └── stringjoiner.mdx
│ │ │ │ ├── joiners.mdx
│ │ │ │ ├── preprocessors/
│ │ │ │ │ ├── chinesedocumentsplitter.mdx
│ │ │ │ │ ├── csvdocumentcleaner.mdx
│ │ │ │ │ ├── csvdocumentsplitter.mdx
│ │ │ │ │ ├── documentcleaner.mdx
│ │ │ │ │ ├── documentpreprocessor.mdx
│ │ │ │ │ ├── documentsplitter.mdx
│ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx
│ │ │ │ │ ├── recursivesplitter.mdx
│ │ │ │ │ └── textcleaner.mdx
│ │ │ │ ├── preprocessors.mdx
│ │ │ │ ├── rankers/
│ │ │ │ │ ├── amazonbedrockranker.mdx
│ │ │ │ │ ├── choosing-the-right-ranker.mdx
│ │ │ │ │ ├── cohereranker.mdx
│ │ │ │ │ ├── external-integrations-rankers.mdx
│ │ │ │ │ ├── fastembedranker.mdx
│ │ │ │ │ ├── huggingfaceteiranker.mdx
│ │ │ │ │ ├── jinaranker.mdx
│ │ │ │ │ ├── lostinthemiddleranker.mdx
│ │ │ │ │ ├── metafieldgroupingranker.mdx
│ │ │ │ │ ├── metafieldranker.mdx
│ │ │ │ │ ├── nvidiaranker.mdx
│ │ │ │ │ ├── pyversityranker.mdx
│ │ │ │ │ ├── sentencetransformersdiversityranker.mdx
│ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx
│ │ │ │ │ └── transformerssimilarityranker.mdx
│ │ │ │ ├── rankers.mdx
│ │ │ │ ├── readers/
│ │ │ │ │ └── extractivereader.mdx
│ │ │ │ ├── readers.mdx
│ │ │ │ ├── retrievers/
│ │ │ │ │ ├── astraretriever.mdx
│ │ │ │ │ ├── automergingretriever.mdx
│ │ │ │ │ ├── azureaisearchbm25retriever.mdx
│ │ │ │ │ ├── azureaisearchembeddingretriever.mdx
│ │ │ │ │ ├── azureaisearchhybridretriever.mdx
│ │ │ │ │ ├── chromaembeddingretriever.mdx
│ │ │ │ │ ├── chromaqueryretriever.mdx
│ │ │ │ │ ├── elasticsearchbm25retriever.mdx
│ │ │ │ │ ├── elasticsearchembeddingretriever.mdx
│ │ │ │ │ ├── filterretriever.mdx
│ │ │ │ │ ├── inmemorybm25retriever.mdx
│ │ │ │ │ ├── inmemoryembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx
│ │ │ │ │ ├── opensearchbm25retriever.mdx
│ │ │ │ │ ├── opensearchembeddingretriever.mdx
│ │ │ │ │ ├── opensearchhybridretriever.mdx
│ │ │ │ │ ├── pgvectorembeddingretriever.mdx
│ │ │ │ │ ├── pgvectorkeywordretriever.mdx
│ │ │ │ │ ├── pineconedenseretriever.mdx
│ │ │ │ │ ├── qdrantembeddingretriever.mdx
│ │ │ │ │ ├── qdranthybridretriever.mdx
│ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx
│ │ │ │ │ ├── sentencewindowretrieval.mdx
│ │ │ │ │ ├── snowflaketableretriever.mdx
│ │ │ │ │ ├── weaviatebm25retriever.mdx
│ │ │ │ │ ├── weaviateembeddingretriever.mdx
│ │ │ │ │ └── weaviatehybridretriever.mdx
│ │ │ │ ├── retrievers.mdx
│ │ │ │ ├── routers/
│ │ │ │ │ ├── conditionalrouter.mdx
│ │ │ │ │ ├── documentlengthrouter.mdx
│ │ │ │ │ ├── documenttyperouter.mdx
│ │ │ │ │ ├── filetyperouter.mdx
│ │ │ │ │ ├── llmmessagesrouter.mdx
│ │ │ │ │ ├── metadatarouter.mdx
│ │ │ │ │ ├── textlanguagerouter.mdx
│ │ │ │ │ ├── transformerstextrouter.mdx
│ │ │ │ │ └── transformerszeroshottextrouter.mdx
│ │ │ │ ├── routers.mdx
│ │ │ │ ├── samplers/
│ │ │ │ │ └── toppsampler.mdx
│ │ │ │ ├── tools/
│ │ │ │ │ └── toolinvoker.mdx
│ │ │ │ ├── validators/
│ │ │ │ │ └── jsonschemavalidator.mdx
│ │ │ │ ├── websearch/
│ │ │ │ │ ├── external-integrations-websearch.mdx
│ │ │ │ │ ├── searchapiwebsearch.mdx
│ │ │ │ │ └── serperdevwebsearch.mdx
│ │ │ │ ├── websearch.mdx
│ │ │ │ └── writers/
│ │ │ │ └── documentwriter.mdx
│ │ │ └── tools/
│ │ │ ├── componenttool.mdx
│ │ │ ├── mcptool.mdx
│ │ │ ├── mcptoolset.mdx
│ │ │ ├── pipelinetool.mdx
│ │ │ ├── ready-made-tools/
│ │ │ │ ├── githubfileeditortool.mdx
│ │ │ │ ├── githubissuecommentertool.mdx
│ │ │ │ ├── githubissueviewertool.mdx
│ │ │ │ ├── githubprcreatortool.mdx
│ │ │ │ └── githubrepoviewertool.mdx
│ │ │ ├── tool.mdx
│ │ │ └── toolset.mdx
│ │ ├── version-2.20/
│ │ │ ├── _templates/
│ │ │ │ ├── component-template.mdx
│ │ │ │ └── document-store-template.mdx
│ │ │ ├── concepts/
│ │ │ │ ├── agents/
│ │ │ │ │ └── state.mdx
│ │ │ │ ├── agents.mdx
│ │ │ │ ├── components/
│ │ │ │ │ ├── custom-components.mdx
│ │ │ │ │ └── supercomponents.mdx
│ │ │ │ ├── components.mdx
│ │ │ │ ├── concepts-overview.mdx
│ │ │ │ ├── data-classes/
│ │ │ │ │ └── chatmessage.mdx
│ │ │ │ ├── data-classes.mdx
│ │ │ │ ├── device-management.mdx
│ │ │ │ ├── document-store/
│ │ │ │ │ ├── choosing-a-document-store.mdx
│ │ │ │ │ └── creating-custom-document-stores.mdx
│ │ │ │ ├── document-store.mdx
│ │ │ │ ├── experimental-package.mdx
│ │ │ │ ├── integrations.mdx
│ │ │ │ ├── jinja-templates.mdx
│ │ │ │ ├── metadata-filtering.mdx
│ │ │ │ ├── pipelines/
│ │ │ │ │ ├── asyncpipeline.mdx
│ │ │ │ │ ├── creating-pipelines.mdx
│ │ │ │ │ ├── debugging-pipelines.mdx
│ │ │ │ │ ├── pipeline-breakpoints.mdx
│ │ │ │ │ ├── pipeline-loops.mdx
│ │ │ │ │ ├── pipeline-templates.mdx
│ │ │ │ │ ├── serialization.mdx
│ │ │ │ │ └── visualizing-pipelines.mdx
│ │ │ │ ├── pipelines.mdx
│ │ │ │ └── secret-management.mdx
│ │ │ ├── development/
│ │ │ │ ├── deployment/
│ │ │ │ │ ├── docker.mdx
│ │ │ │ │ ├── kubernetes.mdx
│ │ │ │ │ └── openshift.mdx
│ │ │ │ ├── deployment.mdx
│ │ │ │ ├── enabling-gpu-acceleration.mdx
│ │ │ │ ├── external-integrations-development.mdx
│ │ │ │ ├── hayhooks.mdx
│ │ │ │ ├── logging.mdx
│ │ │ │ └── tracing.mdx
│ │ │ ├── document-stores/
│ │ │ │ ├── astradocumentstore.mdx
│ │ │ │ ├── azureaisearchdocumentstore.mdx
│ │ │ │ ├── chromadocumentstore.mdx
│ │ │ │ ├── elasticsearch-document-store.mdx
│ │ │ │ ├── inmemorydocumentstore.mdx
│ │ │ │ ├── mongodbatlasdocumentstore.mdx
│ │ │ │ ├── opensearch-document-store.mdx
│ │ │ │ ├── pgvectordocumentstore.mdx
│ │ │ │ ├── pinecone-document-store.mdx
│ │ │ │ ├── qdrant-document-store.mdx
│ │ │ │ └── weaviatedocumentstore.mdx
│ │ │ ├── intro.mdx
│ │ │ ├── optimization/
│ │ │ │ ├── advanced-rag-techniques/
│ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx
│ │ │ │ ├── advanced-rag-techniques.mdx
│ │ │ │ ├── evaluation/
│ │ │ │ │ ├── model-based-evaluation.mdx
│ │ │ │ │ └── statistical-evaluation.mdx
│ │ │ │ └── evaluation.mdx
│ │ │ ├── overview/
│ │ │ │ ├── breaking-change-policy.mdx
│ │ │ │ ├── faq.mdx
│ │ │ │ ├── get-started.mdx
│ │ │ │ ├── installation.mdx
│ │ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx
│ │ │ │ ├── migration.mdx
│ │ │ │ └── telemetry.mdx
│ │ │ ├── pipeline-components/
│ │ │ │ ├── agents-1/
│ │ │ │ │ └── agent.mdx
│ │ │ │ ├── audio/
│ │ │ │ │ ├── external-integrations-audio.mdx
│ │ │ │ │ ├── localwhispertranscriber.mdx
│ │ │ │ │ └── remotewhispertranscriber.mdx
│ │ │ │ ├── audio.mdx
│ │ │ │ ├── builders/
│ │ │ │ │ ├── answerbuilder.mdx
│ │ │ │ │ ├── chatpromptbuilder.mdx
│ │ │ │ │ └── promptbuilder.mdx
│ │ │ │ ├── builders.mdx
│ │ │ │ ├── caching/
│ │ │ │ │ └── cachechecker.mdx
│ │ │ │ ├── classifiers/
│ │ │ │ │ ├── documentlanguageclassifier.mdx
│ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx
│ │ │ │ ├── classifiers.mdx
│ │ │ │ ├── connectors/
│ │ │ │ │ ├── external-integrations-connectors.mdx
│ │ │ │ │ ├── githubfileeditor.mdx
│ │ │ │ │ ├── githubissuecommenter.mdx
│ │ │ │ │ ├── githubissueviewer.mdx
│ │ │ │ │ ├── githubprcreator.mdx
│ │ │ │ │ ├── githubrepoforker.mdx
│ │ │ │ │ ├── githubrepoviewer.mdx
│ │ │ │ │ ├── jinareaderconnector.mdx
│ │ │ │ │ ├── langfuseconnector.mdx
│ │ │ │ │ ├── openapiconnector.mdx
│ │ │ │ │ ├── openapiserviceconnector.mdx
│ │ │ │ │ └── weaveconnector.mdx
│ │ │ │ ├── connectors.mdx
│ │ │ │ ├── converters/
│ │ │ │ │ ├── azureocrdocumentconverter.mdx
│ │ │ │ │ ├── csvtodocument.mdx
│ │ │ │ │ ├── documenttoimagecontent.mdx
│ │ │ │ │ ├── docxtodocument.mdx
│ │ │ │ │ ├── external-integrations-converters.mdx
│ │ │ │ │ ├── htmltodocument.mdx
│ │ │ │ │ ├── imagefiletodocument.mdx
│ │ │ │ │ ├── imagefiletoimagecontent.mdx
│ │ │ │ │ ├── jsonconverter.mdx
│ │ │ │ │ ├── markdowntodocument.mdx
│ │ │ │ │ ├── mistralocrdocumentconverter.mdx
│ │ │ │ │ ├── msgtodocument.mdx
│ │ │ │ │ ├── multifileconverter.mdx
│ │ │ │ │ ├── openapiservicetofunctions.mdx
│ │ │ │ │ ├── outputadapter.mdx
│ │ │ │ │ ├── pdfminertodocument.mdx
│ │ │ │ │ ├── pdftoimagecontent.mdx
│ │ │ │ │ ├── pptxtodocument.mdx
│ │ │ │ │ ├── pypdftodocument.mdx
│ │ │ │ │ ├── textfiletodocument.mdx
│ │ │ │ │ ├── tikadocumentconverter.mdx
│ │ │ │ │ ├── unstructuredfileconverter.mdx
│ │ │ │ │ └── xlsxtodocument.mdx
│ │ │ │ ├── converters.mdx
│ │ │ │ ├── downloaders/
│ │ │ │ │ └── s3downloader.mdx
│ │ │ │ ├── embedders/
│ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx
│ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx
│ │ │ │ │ ├── amazonbedrocktextembedder.mdx
│ │ │ │ │ ├── azureopenaidocumentembedder.mdx
│ │ │ │ │ ├── azureopenaitextembedder.mdx
│ │ │ │ │ ├── choosing-the-right-embedder.mdx
│ │ │ │ │ ├── coheredocumentembedder.mdx
│ │ │ │ │ ├── coheredocumentimageembedder.mdx
│ │ │ │ │ ├── coheretextembedder.mdx
│ │ │ │ │ ├── external-integrations-embedders.mdx
│ │ │ │ │ ├── fastembeddocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsetextembedder.mdx
│ │ │ │ │ ├── fastembedtextembedder.mdx
│ │ │ │ │ ├── googlegenaidocumentembedder.mdx
│ │ │ │ │ ├── googlegenaitextembedder.mdx
│ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx
│ │ │ │ │ ├── huggingfaceapitextembedder.mdx
│ │ │ │ │ ├── jinadocumentembedder.mdx
│ │ │ │ │ ├── jinadocumentimageembedder.mdx
│ │ │ │ │ ├── jinatextembedder.mdx
│ │ │ │ │ ├── mistraldocumentembedder.mdx
│ │ │ │ │ ├── mistraltextembedder.mdx
│ │ │ │ │ ├── nvidiadocumentembedder.mdx
│ │ │ │ │ ├── nvidiatextembedder.mdx
│ │ │ │ │ ├── ollamadocumentembedder.mdx
│ │ │ │ │ ├── ollamatextembedder.mdx
│ │ │ │ │ ├── openaidocumentembedder.mdx
│ │ │ │ │ ├── openaitextembedder.mdx
│ │ │ │ │ ├── optimumdocumentembedder.mdx
│ │ │ │ │ ├── optimumtextembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx
│ │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx
│ │ │ │ │ ├── sentencetransformerstextembedder.mdx
│ │ │ │ │ ├── stackitdocumentembedder.mdx
│ │ │ │ │ ├── stackittextembedder.mdx
│ │ │ │ │ ├── vertexaidocumentembedder.mdx
│ │ │ │ │ ├── vertexaitextembedder.mdx
│ │ │ │ │ ├── watsonxdocumentembedder.mdx
│ │ │ │ │ └── watsonxtextembedder.mdx
│ │ │ │ ├── embedders.mdx
│ │ │ │ ├── evaluators/
│ │ │ │ │ ├── answerexactmatchevaluator.mdx
│ │ │ │ │ ├── contextrelevanceevaluator.mdx
│ │ │ │ │ ├── deepevalevaluator.mdx
│ │ │ │ │ ├── documentmapevaluator.mdx
│ │ │ │ │ ├── documentmrrevaluator.mdx
│ │ │ │ │ ├── documentndcgevaluator.mdx
│ │ │ │ │ ├── documentrecallevaluator.mdx
│ │ │ │ │ ├── external-integrations-evaluators.mdx
│ │ │ │ │ ├── faithfulnessevaluator.mdx
│ │ │ │ │ ├── llmevaluator.mdx
│ │ │ │ │ ├── ragasevaluator.mdx
│ │ │ │ │ └── sasevaluator.mdx
│ │ │ │ ├── evaluators.mdx
│ │ │ │ ├── extractors/
│ │ │ │ │ ├── llmdocumentcontentextractor.mdx
│ │ │ │ │ ├── llmmetadataextractor.mdx
│ │ │ │ │ ├── namedentityextractor.mdx
│ │ │ │ │ └── regextextextractor.mdx
│ │ │ │ ├── extractors.mdx
│ │ │ │ ├── fetchers/
│ │ │ │ │ ├── external-integrations-fetchers.mdx
│ │ │ │ │ └── linkcontentfetcher.mdx
│ │ │ │ ├── fetchers.mdx
│ │ │ │ ├── generators/
│ │ │ │ │ ├── aimllapichatgenerator.mdx
│ │ │ │ │ ├── amazonbedrockchatgenerator.mdx
│ │ │ │ │ ├── amazonbedrockgenerator.mdx
│ │ │ │ │ ├── anthropicchatgenerator.mdx
│ │ │ │ │ ├── anthropicgenerator.mdx
│ │ │ │ │ ├── anthropicvertexchatgenerator.mdx
│ │ │ │ │ ├── azureopenaichatgenerator.mdx
│ │ │ │ │ ├── azureopenaigenerator.mdx
│ │ │ │ │ ├── azureopenairesponseschatgenerator.mdx
│ │ │ │ │ ├── coherechatgenerator.mdx
│ │ │ │ │ ├── coheregenerator.mdx
│ │ │ │ │ ├── cometapichatgenerator.mdx
│ │ │ │ │ ├── dalleimagegenerator.mdx
│ │ │ │ │ ├── external-integrations-generators.mdx
│ │ │ │ │ ├── fallbackchatgenerator.mdx
│ │ │ │ │ ├── googleaigeminichatgenerator.mdx
│ │ │ │ │ ├── googleaigeminigenerator.mdx
│ │ │ │ │ ├── googlegenaichatgenerator.mdx
│ │ │ │ │ ├── guides-to-generators/
│ │ │ │ │ │ ├── choosing-the-right-generator.mdx
│ │ │ │ │ │ ├── function-calling.mdx
│ │ │ │ │ │ └── generators-vs-chat-generators.mdx
│ │ │ │ │ ├── huggingfaceapichatgenerator.mdx
│ │ │ │ │ ├── huggingfaceapigenerator.mdx
│ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx
│ │ │ │ │ ├── huggingfacelocalgenerator.mdx
│ │ │ │ │ ├── llamacppchatgenerator.mdx
│ │ │ │ │ ├── llamacppgenerator.mdx
│ │ │ │ │ ├── llamastackchatgenerator.mdx
│ │ │ │ │ ├── metallamachatgenerator.mdx
│ │ │ │ │ ├── mistralchatgenerator.mdx
│ │ │ │ │ ├── nvidiachatgenerator.mdx
│ │ │ │ │ ├── nvidiagenerator.mdx
│ │ │ │ │ ├── ollamachatgenerator.mdx
│ │ │ │ │ ├── ollamagenerator.mdx
│ │ │ │ │ ├── openaichatgenerator.mdx
│ │ │ │ │ ├── openaigenerator.mdx
│ │ │ │ │ ├── openairesponseschatgenerator.mdx
│ │ │ │ │ ├── openrouterchatgenerator.mdx
│ │ │ │ │ ├── sagemakergenerator.mdx
│ │ │ │ │ ├── stackitchatgenerator.mdx
│ │ │ │ │ ├── togetheraichatgenerator.mdx
│ │ │ │ │ ├── togetheraigenerator.mdx
│ │ │ │ │ ├── vertexaicodegenerator.mdx
│ │ │ │ │ ├── vertexaigeminichatgenerator.mdx
│ │ │ │ │ ├── vertexaigeminigenerator.mdx
│ │ │ │ │ ├── vertexaiimagecaptioner.mdx
│ │ │ │ │ ├── vertexaiimagegenerator.mdx
│ │ │ │ │ ├── vertexaiimageqa.mdx
│ │ │ │ │ ├── vertexaitextgenerator.mdx
│ │ │ │ │ ├── watsonxchatgenerator.mdx
│ │ │ │ │ └── watsonxgenerator.mdx
│ │ │ │ ├── generators.mdx
│ │ │ │ ├── joiners/
│ │ │ │ │ ├── answerjoiner.mdx
│ │ │ │ │ ├── branchjoiner.mdx
│ │ │ │ │ ├── documentjoiner.mdx
│ │ │ │ │ ├── listjoiner.mdx
│ │ │ │ │ └── stringjoiner.mdx
│ │ │ │ ├── joiners.mdx
│ │ │ │ ├── preprocessors/
│ │ │ │ │ ├── chinesedocumentsplitter.mdx
│ │ │ │ │ ├── csvdocumentcleaner.mdx
│ │ │ │ │ ├── csvdocumentsplitter.mdx
│ │ │ │ │ ├── documentcleaner.mdx
│ │ │ │ │ ├── documentpreprocessor.mdx
│ │ │ │ │ ├── documentsplitter.mdx
│ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx
│ │ │ │ │ ├── recursivesplitter.mdx
│ │ │ │ │ └── textcleaner.mdx
│ │ │ │ ├── preprocessors.mdx
│ │ │ │ ├── rankers/
│ │ │ │ │ ├── amazonbedrockranker.mdx
│ │ │ │ │ ├── choosing-the-right-ranker.mdx
│ │ │ │ │ ├── cohereranker.mdx
│ │ │ │ │ ├── external-integrations-rankers.mdx
│ │ │ │ │ ├── fastembedranker.mdx
│ │ │ │ │ ├── huggingfaceteiranker.mdx
│ │ │ │ │ ├── jinaranker.mdx
│ │ │ │ │ ├── lostinthemiddleranker.mdx
│ │ │ │ │ ├── metafieldgroupingranker.mdx
│ │ │ │ │ ├── metafieldranker.mdx
│ │ │ │ │ ├── nvidiaranker.mdx
│ │ │ │ │ ├── pyversityranker.mdx
│ │ │ │ │ ├── sentencetransformersdiversityranker.mdx
│ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx
│ │ │ │ │ └── transformerssimilarityranker.mdx
│ │ │ │ ├── rankers.mdx
│ │ │ │ ├── readers/
│ │ │ │ │ └── extractivereader.mdx
│ │ │ │ ├── readers.mdx
│ │ │ │ ├── retrievers/
│ │ │ │ │ ├── astraretriever.mdx
│ │ │ │ │ ├── automergingretriever.mdx
│ │ │ │ │ ├── azureaisearchbm25retriever.mdx
│ │ │ │ │ ├── azureaisearchembeddingretriever.mdx
│ │ │ │ │ ├── azureaisearchhybridretriever.mdx
│ │ │ │ │ ├── chromaembeddingretriever.mdx
│ │ │ │ │ ├── chromaqueryretriever.mdx
│ │ │ │ │ ├── elasticsearchbm25retriever.mdx
│ │ │ │ │ ├── elasticsearchembeddingretriever.mdx
│ │ │ │ │ ├── filterretriever.mdx
│ │ │ │ │ ├── inmemorybm25retriever.mdx
│ │ │ │ │ ├── inmemoryembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx
│ │ │ │ │ ├── opensearchbm25retriever.mdx
│ │ │ │ │ ├── opensearchembeddingretriever.mdx
│ │ │ │ │ ├── opensearchhybridretriever.mdx
│ │ │ │ │ ├── pgvectorembeddingretriever.mdx
│ │ │ │ │ ├── pgvectorkeywordretriever.mdx
│ │ │ │ │ ├── pineconedenseretriever.mdx
│ │ │ │ │ ├── qdrantembeddingretriever.mdx
│ │ │ │ │ ├── qdranthybridretriever.mdx
│ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx
│ │ │ │ │ ├── sentencewindowretrieval.mdx
│ │ │ │ │ ├── snowflaketableretriever.mdx
│ │ │ │ │ ├── weaviatebm25retriever.mdx
│ │ │ │ │ ├── weaviateembeddingretriever.mdx
│ │ │ │ │ └── weaviatehybridretriever.mdx
│ │ │ │ ├── retrievers.mdx
│ │ │ │ ├── routers/
│ │ │ │ │ ├── conditionalrouter.mdx
│ │ │ │ │ ├── documentlengthrouter.mdx
│ │ │ │ │ ├── documenttyperouter.mdx
│ │ │ │ │ ├── filetyperouter.mdx
│ │ │ │ │ ├── llmmessagesrouter.mdx
│ │ │ │ │ ├── metadatarouter.mdx
│ │ │ │ │ ├── textlanguagerouter.mdx
│ │ │ │ │ ├── transformerstextrouter.mdx
│ │ │ │ │ └── transformerszeroshottextrouter.mdx
│ │ │ │ ├── routers.mdx
│ │ │ │ ├── samplers/
│ │ │ │ │ └── toppsampler.mdx
│ │ │ │ ├── tools/
│ │ │ │ │ └── toolinvoker.mdx
│ │ │ │ ├── validators/
│ │ │ │ │ └── jsonschemavalidator.mdx
│ │ │ │ ├── websearch/
│ │ │ │ │ ├── external-integrations-websearch.mdx
│ │ │ │ │ ├── searchapiwebsearch.mdx
│ │ │ │ │ └── serperdevwebsearch.mdx
│ │ │ │ ├── websearch.mdx
│ │ │ │ └── writers/
│ │ │ │ └── documentwriter.mdx
│ │ │ └── tools/
│ │ │ ├── componenttool.mdx
│ │ │ ├── mcptool.mdx
│ │ │ ├── mcptoolset.mdx
│ │ │ ├── pipelinetool.mdx
│ │ │ ├── ready-made-tools/
│ │ │ │ ├── githubfileeditortool.mdx
│ │ │ │ ├── githubissuecommentertool.mdx
│ │ │ │ ├── githubissueviewertool.mdx
│ │ │ │ ├── githubprcreatortool.mdx
│ │ │ │ └── githubrepoviewertool.mdx
│ │ │ ├── tool.mdx
│ │ │ └── toolset.mdx
│ │ ├── version-2.21/
│ │ │ ├── _templates/
│ │ │ │ ├── component-template.mdx
│ │ │ │ └── document-store-template.mdx
│ │ │ ├── concepts/
│ │ │ │ ├── agents/
│ │ │ │ │ └── state.mdx
│ │ │ │ ├── agents.mdx
│ │ │ │ ├── components/
│ │ │ │ │ ├── custom-components.mdx
│ │ │ │ │ └── supercomponents.mdx
│ │ │ │ ├── components.mdx
│ │ │ │ ├── concepts-overview.mdx
│ │ │ │ ├── data-classes/
│ │ │ │ │ └── chatmessage.mdx
│ │ │ │ ├── data-classes.mdx
│ │ │ │ ├── device-management.mdx
│ │ │ │ ├── document-store/
│ │ │ │ │ ├── choosing-a-document-store.mdx
│ │ │ │ │ └── creating-custom-document-stores.mdx
│ │ │ │ ├── document-store.mdx
│ │ │ │ ├── experimental-package.mdx
│ │ │ │ ├── integrations.mdx
│ │ │ │ ├── jinja-templates.mdx
│ │ │ │ ├── metadata-filtering.mdx
│ │ │ │ ├── pipelines/
│ │ │ │ │ ├── asyncpipeline.mdx
│ │ │ │ │ ├── creating-pipelines.mdx
│ │ │ │ │ ├── debugging-pipelines.mdx
│ │ │ │ │ ├── pipeline-breakpoints.mdx
│ │ │ │ │ ├── pipeline-loops.mdx
│ │ │ │ │ ├── pipeline-templates.mdx
│ │ │ │ │ ├── serialization.mdx
│ │ │ │ │ └── visualizing-pipelines.mdx
│ │ │ │ ├── pipelines.mdx
│ │ │ │ └── secret-management.mdx
│ │ │ ├── development/
│ │ │ │ ├── deployment/
│ │ │ │ │ ├── docker.mdx
│ │ │ │ │ ├── kubernetes.mdx
│ │ │ │ │ └── openshift.mdx
│ │ │ │ ├── deployment.mdx
│ │ │ │ ├── enabling-gpu-acceleration.mdx
│ │ │ │ ├── external-integrations-development.mdx
│ │ │ │ ├── hayhooks.mdx
│ │ │ │ ├── logging.mdx
│ │ │ │ └── tracing.mdx
│ │ │ ├── document-stores/
│ │ │ │ ├── astradocumentstore.mdx
│ │ │ │ ├── azureaisearchdocumentstore.mdx
│ │ │ │ ├── chromadocumentstore.mdx
│ │ │ │ ├── elasticsearch-document-store.mdx
│ │ │ │ ├── inmemorydocumentstore.mdx
│ │ │ │ ├── mongodbatlasdocumentstore.mdx
│ │ │ │ ├── opensearch-document-store.mdx
│ │ │ │ ├── pgvectordocumentstore.mdx
│ │ │ │ ├── pinecone-document-store.mdx
│ │ │ │ ├── qdrant-document-store.mdx
│ │ │ │ └── weaviatedocumentstore.mdx
│ │ │ ├── intro.mdx
│ │ │ ├── optimization/
│ │ │ │ ├── advanced-rag-techniques/
│ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx
│ │ │ │ ├── advanced-rag-techniques.mdx
│ │ │ │ ├── evaluation/
│ │ │ │ │ ├── model-based-evaluation.mdx
│ │ │ │ │ └── statistical-evaluation.mdx
│ │ │ │ └── evaluation.mdx
│ │ │ ├── overview/
│ │ │ │ ├── breaking-change-policy.mdx
│ │ │ │ ├── faq.mdx
│ │ │ │ ├── get-started.mdx
│ │ │ │ ├── installation.mdx
│ │ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx
│ │ │ │ ├── migration.mdx
│ │ │ │ └── telemetry.mdx
│ │ │ ├── pipeline-components/
│ │ │ │ ├── agents-1/
│ │ │ │ │ └── agent.mdx
│ │ │ │ ├── audio/
│ │ │ │ │ ├── external-integrations-audio.mdx
│ │ │ │ │ ├── localwhispertranscriber.mdx
│ │ │ │ │ └── remotewhispertranscriber.mdx
│ │ │ │ ├── audio.mdx
│ │ │ │ ├── builders/
│ │ │ │ │ ├── answerbuilder.mdx
│ │ │ │ │ ├── chatpromptbuilder.mdx
│ │ │ │ │ └── promptbuilder.mdx
│ │ │ │ ├── builders.mdx
│ │ │ │ ├── caching/
│ │ │ │ │ └── cachechecker.mdx
│ │ │ │ ├── classifiers/
│ │ │ │ │ ├── documentlanguageclassifier.mdx
│ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx
│ │ │ │ ├── classifiers.mdx
│ │ │ │ ├── connectors/
│ │ │ │ │ ├── external-integrations-connectors.mdx
│ │ │ │ │ ├── githubfileeditor.mdx
│ │ │ │ │ ├── githubissuecommenter.mdx
│ │ │ │ │ ├── githubissueviewer.mdx
│ │ │ │ │ ├── githubprcreator.mdx
│ │ │ │ │ ├── githubrepoforker.mdx
│ │ │ │ │ ├── githubrepoviewer.mdx
│ │ │ │ │ ├── jinareaderconnector.mdx
│ │ │ │ │ ├── langfuseconnector.mdx
│ │ │ │ │ ├── openapiconnector.mdx
│ │ │ │ │ ├── openapiserviceconnector.mdx
│ │ │ │ │ └── weaveconnector.mdx
│ │ │ │ ├── connectors.mdx
│ │ │ │ ├── converters/
│ │ │ │ │ ├── azureocrdocumentconverter.mdx
│ │ │ │ │ ├── csvtodocument.mdx
│ │ │ │ │ ├── documenttoimagecontent.mdx
│ │ │ │ │ ├── docxtodocument.mdx
│ │ │ │ │ ├── external-integrations-converters.mdx
│ │ │ │ │ ├── htmltodocument.mdx
│ │ │ │ │ ├── imagefiletodocument.mdx
│ │ │ │ │ ├── imagefiletoimagecontent.mdx
│ │ │ │ │ ├── jsonconverter.mdx
│ │ │ │ │ ├── markdowntodocument.mdx
│ │ │ │ │ ├── mistralocrdocumentconverter.mdx
│ │ │ │ │ ├── msgtodocument.mdx
│ │ │ │ │ ├── multifileconverter.mdx
│ │ │ │ │ ├── openapiservicetofunctions.mdx
│ │ │ │ │ ├── outputadapter.mdx
│ │ │ │ │ ├── paddleocrvldocumentconverter.mdx
│ │ │ │ │ ├── pdfminertodocument.mdx
│ │ │ │ │ ├── pdftoimagecontent.mdx
│ │ │ │ │ ├── pptxtodocument.mdx
│ │ │ │ │ ├── pypdftodocument.mdx
│ │ │ │ │ ├── textfiletodocument.mdx
│ │ │ │ │ ├── tikadocumentconverter.mdx
│ │ │ │ │ ├── unstructuredfileconverter.mdx
│ │ │ │ │ └── xlsxtodocument.mdx
│ │ │ │ ├── converters.mdx
│ │ │ │ ├── downloaders/
│ │ │ │ │ └── s3downloader.mdx
│ │ │ │ ├── embedders/
│ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx
│ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx
│ │ │ │ │ ├── amazonbedrocktextembedder.mdx
│ │ │ │ │ ├── azureopenaidocumentembedder.mdx
│ │ │ │ │ ├── azureopenaitextembedder.mdx
│ │ │ │ │ ├── choosing-the-right-embedder.mdx
│ │ │ │ │ ├── coheredocumentembedder.mdx
│ │ │ │ │ ├── coheredocumentimageembedder.mdx
│ │ │ │ │ ├── coheretextembedder.mdx
│ │ │ │ │ ├── external-integrations-embedders.mdx
│ │ │ │ │ ├── fastembeddocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsetextembedder.mdx
│ │ │ │ │ ├── fastembedtextembedder.mdx
│ │ │ │ │ ├── googlegenaidocumentembedder.mdx
│ │ │ │ │ ├── googlegenaitextembedder.mdx
│ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx
│ │ │ │ │ ├── huggingfaceapitextembedder.mdx
│ │ │ │ │ ├── jinadocumentembedder.mdx
│ │ │ │ │ ├── jinadocumentimageembedder.mdx
│ │ │ │ │ ├── jinatextembedder.mdx
│ │ │ │ │ ├── mistraldocumentembedder.mdx
│ │ │ │ │ ├── mistraltextembedder.mdx
│ │ │ │ │ ├── nvidiadocumentembedder.mdx
│ │ │ │ │ ├── nvidiatextembedder.mdx
│ │ │ │ │ ├── ollamadocumentembedder.mdx
│ │ │ │ │ ├── ollamatextembedder.mdx
│ │ │ │ │ ├── openaidocumentembedder.mdx
│ │ │ │ │ ├── openaitextembedder.mdx
│ │ │ │ │ ├── optimumdocumentembedder.mdx
│ │ │ │ │ ├── optimumtextembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx
│ │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx
│ │ │ │ │ ├── sentencetransformerstextembedder.mdx
│ │ │ │ │ ├── stackitdocumentembedder.mdx
│ │ │ │ │ ├── stackittextembedder.mdx
│ │ │ │ │ ├── vertexaidocumentembedder.mdx
│ │ │ │ │ ├── vertexaitextembedder.mdx
│ │ │ │ │ ├── watsonxdocumentembedder.mdx
│ │ │ │ │ └── watsonxtextembedder.mdx
│ │ │ │ ├── embedders.mdx
│ │ │ │ ├── evaluators/
│ │ │ │ │ ├── answerexactmatchevaluator.mdx
│ │ │ │ │ ├── contextrelevanceevaluator.mdx
│ │ │ │ │ ├── deepevalevaluator.mdx
│ │ │ │ │ ├── documentmapevaluator.mdx
│ │ │ │ │ ├── documentmrrevaluator.mdx
│ │ │ │ │ ├── documentndcgevaluator.mdx
│ │ │ │ │ ├── documentrecallevaluator.mdx
│ │ │ │ │ ├── external-integrations-evaluators.mdx
│ │ │ │ │ ├── faithfulnessevaluator.mdx
│ │ │ │ │ ├── llmevaluator.mdx
│ │ │ │ │ ├── ragasevaluator.mdx
│ │ │ │ │ └── sasevaluator.mdx
│ │ │ │ ├── evaluators.mdx
│ │ │ │ ├── extractors/
│ │ │ │ │ ├── llmdocumentcontentextractor.mdx
│ │ │ │ │ ├── llmmetadataextractor.mdx
│ │ │ │ │ ├── namedentityextractor.mdx
│ │ │ │ │ └── regextextextractor.mdx
│ │ │ │ ├── extractors.mdx
│ │ │ │ ├── fetchers/
│ │ │ │ │ ├── external-integrations-fetchers.mdx
│ │ │ │ │ └── linkcontentfetcher.mdx
│ │ │ │ ├── fetchers.mdx
│ │ │ │ ├── generators/
│ │ │ │ │ ├── aimllapichatgenerator.mdx
│ │ │ │ │ ├── amazonbedrockchatgenerator.mdx
│ │ │ │ │ ├── amazonbedrockgenerator.mdx
│ │ │ │ │ ├── anthropicchatgenerator.mdx
│ │ │ │ │ ├── anthropicgenerator.mdx
│ │ │ │ │ ├── anthropicvertexchatgenerator.mdx
│ │ │ │ │ ├── azureopenaichatgenerator.mdx
│ │ │ │ │ ├── azureopenaigenerator.mdx
│ │ │ │ │ ├── azureopenairesponseschatgenerator.mdx
│ │ │ │ │ ├── coherechatgenerator.mdx
│ │ │ │ │ ├── coheregenerator.mdx
│ │ │ │ │ ├── cometapichatgenerator.mdx
│ │ │ │ │ ├── dalleimagegenerator.mdx
│ │ │ │ │ ├── external-integrations-generators.mdx
│ │ │ │ │ ├── fallbackchatgenerator.mdx
│ │ │ │ │ ├── googleaigeminichatgenerator.mdx
│ │ │ │ │ ├── googleaigeminigenerator.mdx
│ │ │ │ │ ├── googlegenaichatgenerator.mdx
│ │ │ │ │ ├── guides-to-generators/
│ │ │ │ │ │ ├── choosing-the-right-generator.mdx
│ │ │ │ │ │ ├── function-calling.mdx
│ │ │ │ │ │ └── generators-vs-chat-generators.mdx
│ │ │ │ │ ├── huggingfaceapichatgenerator.mdx
│ │ │ │ │ ├── huggingfaceapigenerator.mdx
│ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx
│ │ │ │ │ ├── huggingfacelocalgenerator.mdx
│ │ │ │ │ ├── llamacppchatgenerator.mdx
│ │ │ │ │ ├── llamacppgenerator.mdx
│ │ │ │ │ ├── llamastackchatgenerator.mdx
│ │ │ │ │ ├── metallamachatgenerator.mdx
│ │ │ │ │ ├── mistralchatgenerator.mdx
│ │ │ │ │ ├── nvidiachatgenerator.mdx
│ │ │ │ │ ├── nvidiagenerator.mdx
│ │ │ │ │ ├── ollamachatgenerator.mdx
│ │ │ │ │ ├── ollamagenerator.mdx
│ │ │ │ │ ├── openaichatgenerator.mdx
│ │ │ │ │ ├── openaigenerator.mdx
│ │ │ │ │ ├── openairesponseschatgenerator.mdx
│ │ │ │ │ ├── openrouterchatgenerator.mdx
│ │ │ │ │ ├── sagemakergenerator.mdx
│ │ │ │ │ ├── stackitchatgenerator.mdx
│ │ │ │ │ ├── togetheraichatgenerator.mdx
│ │ │ │ │ ├── togetheraigenerator.mdx
│ │ │ │ │ ├── vertexaicodegenerator.mdx
│ │ │ │ │ ├── vertexaigeminichatgenerator.mdx
│ │ │ │ │ ├── vertexaigeminigenerator.mdx
│ │ │ │ │ ├── vertexaiimagecaptioner.mdx
│ │ │ │ │ ├── vertexaiimagegenerator.mdx
│ │ │ │ │ ├── vertexaiimageqa.mdx
│ │ │ │ │ ├── vertexaitextgenerator.mdx
│ │ │ │ │ ├── watsonxchatgenerator.mdx
│ │ │ │ │ └── watsonxgenerator.mdx
│ │ │ │ ├── generators.mdx
│ │ │ │ ├── joiners/
│ │ │ │ │ ├── answerjoiner.mdx
│ │ │ │ │ ├── branchjoiner.mdx
│ │ │ │ │ ├── documentjoiner.mdx
│ │ │ │ │ ├── listjoiner.mdx
│ │ │ │ │ └── stringjoiner.mdx
│ │ │ │ ├── joiners.mdx
│ │ │ │ ├── preprocessors/
│ │ │ │ │ ├── chinesedocumentsplitter.mdx
│ │ │ │ │ ├── csvdocumentcleaner.mdx
│ │ │ │ │ ├── csvdocumentsplitter.mdx
│ │ │ │ │ ├── documentcleaner.mdx
│ │ │ │ │ ├── documentpreprocessor.mdx
│ │ │ │ │ ├── documentsplitter.mdx
│ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx
│ │ │ │ │ ├── recursivesplitter.mdx
│ │ │ │ │ └── textcleaner.mdx
│ │ │ │ ├── preprocessors.mdx
│ │ │ │ ├── query/
│ │ │ │ │ └── queryexpander.mdx
│ │ │ │ ├── rankers/
│ │ │ │ │ ├── amazonbedrockranker.mdx
│ │ │ │ │ ├── choosing-the-right-ranker.mdx
│ │ │ │ │ ├── cohereranker.mdx
│ │ │ │ │ ├── external-integrations-rankers.mdx
│ │ │ │ │ ├── fastembedranker.mdx
│ │ │ │ │ ├── huggingfaceteiranker.mdx
│ │ │ │ │ ├── jinaranker.mdx
│ │ │ │ │ ├── lostinthemiddleranker.mdx
│ │ │ │ │ ├── metafieldgroupingranker.mdx
│ │ │ │ │ ├── metafieldranker.mdx
│ │ │ │ │ ├── nvidiaranker.mdx
│ │ │ │ │ ├── pyversityranker.mdx
│ │ │ │ │ ├── sentencetransformersdiversityranker.mdx
│ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx
│ │ │ │ │ └── transformerssimilarityranker.mdx
│ │ │ │ ├── rankers.mdx
│ │ │ │ ├── readers/
│ │ │ │ │ └── extractivereader.mdx
│ │ │ │ ├── readers.mdx
│ │ │ │ ├── retrievers/
│ │ │ │ │ ├── astraretriever.mdx
│ │ │ │ │ ├── automergingretriever.mdx
│ │ │ │ │ ├── azureaisearchbm25retriever.mdx
│ │ │ │ │ ├── azureaisearchembeddingretriever.mdx
│ │ │ │ │ ├── azureaisearchhybridretriever.mdx
│ │ │ │ │ ├── chromaembeddingretriever.mdx
│ │ │ │ │ ├── chromaqueryretriever.mdx
│ │ │ │ │ ├── elasticsearchbm25retriever.mdx
│ │ │ │ │ ├── elasticsearchembeddingretriever.mdx
│ │ │ │ │ ├── filterretriever.mdx
│ │ │ │ │ ├── inmemorybm25retriever.mdx
│ │ │ │ │ ├── inmemoryembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx
│ │ │ │ │ ├── multiqueryembeddingretriever.mdx
│ │ │ │ │ ├── multiquerytextretriever.mdx
│ │ │ │ │ ├── opensearchbm25retriever.mdx
│ │ │ │ │ ├── opensearchembeddingretriever.mdx
│ │ │ │ │ ├── opensearchhybridretriever.mdx
│ │ │ │ │ ├── pgvectorembeddingretriever.mdx
│ │ │ │ │ ├── pgvectorkeywordretriever.mdx
│ │ │ │ │ ├── pineconedenseretriever.mdx
│ │ │ │ │ ├── qdrantembeddingretriever.mdx
│ │ │ │ │ ├── qdranthybridretriever.mdx
│ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx
│ │ │ │ │ ├── sentencewindowretrieval.mdx
│ │ │ │ │ ├── snowflaketableretriever.mdx
│ │ │ │ │ ├── weaviatebm25retriever.mdx
│ │ │ │ │ ├── weaviateembeddingretriever.mdx
│ │ │ │ │ └── weaviatehybridretriever.mdx
│ │ │ │ ├── retrievers.mdx
│ │ │ │ ├── routers/
│ │ │ │ │ ├── conditionalrouter.mdx
│ │ │ │ │ ├── documentlengthrouter.mdx
│ │ │ │ │ ├── documenttyperouter.mdx
│ │ │ │ │ ├── filetyperouter.mdx
│ │ │ │ │ ├── llmmessagesrouter.mdx
│ │ │ │ │ ├── metadatarouter.mdx
│ │ │ │ │ ├── textlanguagerouter.mdx
│ │ │ │ │ ├── transformerstextrouter.mdx
│ │ │ │ │ └── transformerszeroshottextrouter.mdx
│ │ │ │ ├── routers.mdx
│ │ │ │ ├── samplers/
│ │ │ │ │ └── toppsampler.mdx
│ │ │ │ ├── tools/
│ │ │ │ │ └── toolinvoker.mdx
│ │ │ │ ├── validators/
│ │ │ │ │ └── jsonschemavalidator.mdx
│ │ │ │ ├── websearch/
│ │ │ │ │ ├── external-integrations-websearch.mdx
│ │ │ │ │ ├── searchapiwebsearch.mdx
│ │ │ │ │ └── serperdevwebsearch.mdx
│ │ │ │ ├── websearch.mdx
│ │ │ │ └── writers/
│ │ │ │ └── documentwriter.mdx
│ │ │ └── tools/
│ │ │ ├── componenttool.mdx
│ │ │ ├── mcptool.mdx
│ │ │ ├── mcptoolset.mdx
│ │ │ ├── pipelinetool.mdx
│ │ │ ├── ready-made-tools/
│ │ │ │ ├── githubfileeditortool.mdx
│ │ │ │ ├── githubissuecommentertool.mdx
│ │ │ │ ├── githubissueviewertool.mdx
│ │ │ │ ├── githubprcreatortool.mdx
│ │ │ │ └── githubrepoviewertool.mdx
│ │ │ ├── tool.mdx
│ │ │ └── toolset.mdx
│ │ ├── version-2.22/
│ │ │ ├── _templates/
│ │ │ │ ├── component-template.mdx
│ │ │ │ └── document-store-template.mdx
│ │ │ ├── concepts/
│ │ │ │ ├── agents/
│ │ │ │ │ └── state.mdx
│ │ │ │ ├── agents.mdx
│ │ │ │ ├── components/
│ │ │ │ │ ├── custom-components.mdx
│ │ │ │ │ └── supercomponents.mdx
│ │ │ │ ├── components.mdx
│ │ │ │ ├── concepts-overview.mdx
│ │ │ │ ├── data-classes/
│ │ │ │ │ └── chatmessage.mdx
│ │ │ │ ├── data-classes.mdx
│ │ │ │ ├── device-management.mdx
│ │ │ │ ├── document-store/
│ │ │ │ │ ├── choosing-a-document-store.mdx
│ │ │ │ │ └── creating-custom-document-stores.mdx
│ │ │ │ ├── document-store.mdx
│ │ │ │ ├── experimental-package.mdx
│ │ │ │ ├── integrations.mdx
│ │ │ │ ├── jinja-templates.mdx
│ │ │ │ ├── metadata-filtering.mdx
│ │ │ │ ├── pipelines/
│ │ │ │ │ ├── asyncpipeline.mdx
│ │ │ │ │ ├── creating-pipelines.mdx
│ │ │ │ │ ├── debugging-pipelines.mdx
│ │ │ │ │ ├── pipeline-breakpoints.mdx
│ │ │ │ │ ├── pipeline-loops.mdx
│ │ │ │ │ ├── pipeline-templates.mdx
│ │ │ │ │ ├── serialization.mdx
│ │ │ │ │ └── visualizing-pipelines.mdx
│ │ │ │ ├── pipelines.mdx
│ │ │ │ └── secret-management.mdx
│ │ │ ├── development/
│ │ │ │ ├── deployment/
│ │ │ │ │ ├── docker.mdx
│ │ │ │ │ ├── kubernetes.mdx
│ │ │ │ │ └── openshift.mdx
│ │ │ │ ├── deployment.mdx
│ │ │ │ ├── enabling-gpu-acceleration.mdx
│ │ │ │ ├── external-integrations-development.mdx
│ │ │ │ ├── hayhooks.mdx
│ │ │ │ ├── logging.mdx
│ │ │ │ └── tracing.mdx
│ │ │ ├── document-stores/
│ │ │ │ ├── astradocumentstore.mdx
│ │ │ │ ├── azureaisearchdocumentstore.mdx
│ │ │ │ ├── chromadocumentstore.mdx
│ │ │ │ ├── elasticsearch-document-store.mdx
│ │ │ │ ├── inmemorydocumentstore.mdx
│ │ │ │ ├── mongodbatlasdocumentstore.mdx
│ │ │ │ ├── opensearch-document-store.mdx
│ │ │ │ ├── pgvectordocumentstore.mdx
│ │ │ │ ├── pinecone-document-store.mdx
│ │ │ │ ├── qdrant-document-store.mdx
│ │ │ │ └── weaviatedocumentstore.mdx
│ │ │ ├── intro.mdx
│ │ │ ├── optimization/
│ │ │ │ ├── advanced-rag-techniques/
│ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx
│ │ │ │ ├── advanced-rag-techniques.mdx
│ │ │ │ ├── evaluation/
│ │ │ │ │ ├── model-based-evaluation.mdx
│ │ │ │ │ └── statistical-evaluation.mdx
│ │ │ │ └── evaluation.mdx
│ │ │ ├── overview/
│ │ │ │ ├── breaking-change-policy.mdx
│ │ │ │ ├── faq.mdx
│ │ │ │ ├── get-started.mdx
│ │ │ │ ├── installation.mdx
│ │ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx
│ │ │ │ ├── migration.mdx
│ │ │ │ └── telemetry.mdx
│ │ │ ├── pipeline-components/
│ │ │ │ ├── agents-1/
│ │ │ │ │ └── agent.mdx
│ │ │ │ ├── audio/
│ │ │ │ │ ├── external-integrations-audio.mdx
│ │ │ │ │ ├── localwhispertranscriber.mdx
│ │ │ │ │ └── remotewhispertranscriber.mdx
│ │ │ │ ├── audio.mdx
│ │ │ │ ├── builders/
│ │ │ │ │ ├── answerbuilder.mdx
│ │ │ │ │ ├── chatpromptbuilder.mdx
│ │ │ │ │ └── promptbuilder.mdx
│ │ │ │ ├── builders.mdx
│ │ │ │ ├── caching/
│ │ │ │ │ └── cachechecker.mdx
│ │ │ │ ├── classifiers/
│ │ │ │ │ ├── documentlanguageclassifier.mdx
│ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx
│ │ │ │ ├── classifiers.mdx
│ │ │ │ ├── connectors/
│ │ │ │ │ ├── external-integrations-connectors.mdx
│ │ │ │ │ ├── githubfileeditor.mdx
│ │ │ │ │ ├── githubissuecommenter.mdx
│ │ │ │ │ ├── githubissueviewer.mdx
│ │ │ │ │ ├── githubprcreator.mdx
│ │ │ │ │ ├── githubrepoforker.mdx
│ │ │ │ │ ├── githubrepoviewer.mdx
│ │ │ │ │ ├── jinareaderconnector.mdx
│ │ │ │ │ ├── langfuseconnector.mdx
│ │ │ │ │ ├── openapiconnector.mdx
│ │ │ │ │ ├── openapiserviceconnector.mdx
│ │ │ │ │ └── weaveconnector.mdx
│ │ │ │ ├── connectors.mdx
│ │ │ │ ├── converters/
│ │ │ │ │ ├── azureocrdocumentconverter.mdx
│ │ │ │ │ ├── csvtodocument.mdx
│ │ │ │ │ ├── documenttoimagecontent.mdx
│ │ │ │ │ ├── docxtodocument.mdx
│ │ │ │ │ ├── external-integrations-converters.mdx
│ │ │ │ │ ├── htmltodocument.mdx
│ │ │ │ │ ├── imagefiletodocument.mdx
│ │ │ │ │ ├── imagefiletoimagecontent.mdx
│ │ │ │ │ ├── jsonconverter.mdx
│ │ │ │ │ ├── markdowntodocument.mdx
│ │ │ │ │ ├── mistralocrdocumentconverter.mdx
│ │ │ │ │ ├── msgtodocument.mdx
│ │ │ │ │ ├── multifileconverter.mdx
│ │ │ │ │ ├── openapiservicetofunctions.mdx
│ │ │ │ │ ├── outputadapter.mdx
│ │ │ │ │ ├── paddleocrvldocumentconverter.mdx
│ │ │ │ │ ├── pdfminertodocument.mdx
│ │ │ │ │ ├── pdftoimagecontent.mdx
│ │ │ │ │ ├── pptxtodocument.mdx
│ │ │ │ │ ├── pypdftodocument.mdx
│ │ │ │ │ ├── textfiletodocument.mdx
│ │ │ │ │ ├── tikadocumentconverter.mdx
│ │ │ │ │ ├── unstructuredfileconverter.mdx
│ │ │ │ │ └── xlsxtodocument.mdx
│ │ │ │ ├── converters.mdx
│ │ │ │ ├── downloaders/
│ │ │ │ │ └── s3downloader.mdx
│ │ │ │ ├── embedders/
│ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx
│ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx
│ │ │ │ │ ├── amazonbedrocktextembedder.mdx
│ │ │ │ │ ├── azureopenaidocumentembedder.mdx
│ │ │ │ │ ├── azureopenaitextembedder.mdx
│ │ │ │ │ ├── choosing-the-right-embedder.mdx
│ │ │ │ │ ├── coheredocumentembedder.mdx
│ │ │ │ │ ├── coheredocumentimageembedder.mdx
│ │ │ │ │ ├── coheretextembedder.mdx
│ │ │ │ │ ├── external-integrations-embedders.mdx
│ │ │ │ │ ├── fastembeddocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsetextembedder.mdx
│ │ │ │ │ ├── fastembedtextembedder.mdx
│ │ │ │ │ ├── googlegenaidocumentembedder.mdx
│ │ │ │ │ ├── googlegenaitextembedder.mdx
│ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx
│ │ │ │ │ ├── huggingfaceapitextembedder.mdx
│ │ │ │ │ ├── jinadocumentembedder.mdx
│ │ │ │ │ ├── jinadocumentimageembedder.mdx
│ │ │ │ │ ├── jinatextembedder.mdx
│ │ │ │ │ ├── mistraldocumentembedder.mdx
│ │ │ │ │ ├── mistraltextembedder.mdx
│ │ │ │ │ ├── nvidiadocumentembedder.mdx
│ │ │ │ │ ├── nvidiatextembedder.mdx
│ │ │ │ │ ├── ollamadocumentembedder.mdx
│ │ │ │ │ ├── ollamatextembedder.mdx
│ │ │ │ │ ├── openaidocumentembedder.mdx
│ │ │ │ │ ├── openaitextembedder.mdx
│ │ │ │ │ ├── optimumdocumentembedder.mdx
│ │ │ │ │ ├── optimumtextembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx
│ │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx
│ │ │ │ │ ├── sentencetransformerstextembedder.mdx
│ │ │ │ │ ├── stackitdocumentembedder.mdx
│ │ │ │ │ ├── stackittextembedder.mdx
│ │ │ │ │ ├── vertexaidocumentembedder.mdx
│ │ │ │ │ ├── vertexaitextembedder.mdx
│ │ │ │ │ ├── watsonxdocumentembedder.mdx
│ │ │ │ │ └── watsonxtextembedder.mdx
│ │ │ │ ├── embedders.mdx
│ │ │ │ ├── evaluators/
│ │ │ │ │ ├── answerexactmatchevaluator.mdx
│ │ │ │ │ ├── contextrelevanceevaluator.mdx
│ │ │ │ │ ├── deepevalevaluator.mdx
│ │ │ │ │ ├── documentmapevaluator.mdx
│ │ │ │ │ ├── documentmrrevaluator.mdx
│ │ │ │ │ ├── documentndcgevaluator.mdx
│ │ │ │ │ ├── documentrecallevaluator.mdx
│ │ │ │ │ ├── external-integrations-evaluators.mdx
│ │ │ │ │ ├── faithfulnessevaluator.mdx
│ │ │ │ │ ├── llmevaluator.mdx
│ │ │ │ │ ├── ragasevaluator.mdx
│ │ │ │ │ └── sasevaluator.mdx
│ │ │ │ ├── evaluators.mdx
│ │ │ │ ├── extractors/
│ │ │ │ │ ├── llmdocumentcontentextractor.mdx
│ │ │ │ │ ├── llmmetadataextractor.mdx
│ │ │ │ │ ├── namedentityextractor.mdx
│ │ │ │ │ └── regextextextractor.mdx
│ │ │ │ ├── extractors.mdx
│ │ │ │ ├── fetchers/
│ │ │ │ │ ├── external-integrations-fetchers.mdx
│ │ │ │ │ └── linkcontentfetcher.mdx
│ │ │ │ ├── fetchers.mdx
│ │ │ │ ├── generators/
│ │ │ │ │ ├── aimllapichatgenerator.mdx
│ │ │ │ │ ├── amazonbedrockchatgenerator.mdx
│ │ │ │ │ ├── amazonbedrockgenerator.mdx
│ │ │ │ │ ├── anthropicchatgenerator.mdx
│ │ │ │ │ ├── anthropicgenerator.mdx
│ │ │ │ │ ├── anthropicvertexchatgenerator.mdx
│ │ │ │ │ ├── azureopenaichatgenerator.mdx
│ │ │ │ │ ├── azureopenaigenerator.mdx
│ │ │ │ │ ├── azureopenairesponseschatgenerator.mdx
│ │ │ │ │ ├── coherechatgenerator.mdx
│ │ │ │ │ ├── coheregenerator.mdx
│ │ │ │ │ ├── cometapichatgenerator.mdx
│ │ │ │ │ ├── dalleimagegenerator.mdx
│ │ │ │ │ ├── external-integrations-generators.mdx
│ │ │ │ │ ├── fallbackchatgenerator.mdx
│ │ │ │ │ ├── googleaigeminichatgenerator.mdx
│ │ │ │ │ ├── googleaigeminigenerator.mdx
│ │ │ │ │ ├── googlegenaichatgenerator.mdx
│ │ │ │ │ ├── guides-to-generators/
│ │ │ │ │ │ ├── choosing-the-right-generator.mdx
│ │ │ │ │ │ ├── function-calling.mdx
│ │ │ │ │ │ └── generators-vs-chat-generators.mdx
│ │ │ │ │ ├── huggingfaceapichatgenerator.mdx
│ │ │ │ │ ├── huggingfaceapigenerator.mdx
│ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx
│ │ │ │ │ ├── huggingfacelocalgenerator.mdx
│ │ │ │ │ ├── llamacppchatgenerator.mdx
│ │ │ │ │ ├── llamacppgenerator.mdx
│ │ │ │ │ ├── llamastackchatgenerator.mdx
│ │ │ │ │ ├── metallamachatgenerator.mdx
│ │ │ │ │ ├── mistralchatgenerator.mdx
│ │ │ │ │ ├── nvidiachatgenerator.mdx
│ │ │ │ │ ├── nvidiagenerator.mdx
│ │ │ │ │ ├── ollamachatgenerator.mdx
│ │ │ │ │ ├── ollamagenerator.mdx
│ │ │ │ │ ├── openaichatgenerator.mdx
│ │ │ │ │ ├── openaigenerator.mdx
│ │ │ │ │ ├── openairesponseschatgenerator.mdx
│ │ │ │ │ ├── openrouterchatgenerator.mdx
│ │ │ │ │ ├── sagemakergenerator.mdx
│ │ │ │ │ ├── stackitchatgenerator.mdx
│ │ │ │ │ ├── togetheraichatgenerator.mdx
│ │ │ │ │ ├── togetheraigenerator.mdx
│ │ │ │ │ ├── vertexaicodegenerator.mdx
│ │ │ │ │ ├── vertexaigeminichatgenerator.mdx
│ │ │ │ │ ├── vertexaigeminigenerator.mdx
│ │ │ │ │ ├── vertexaiimagecaptioner.mdx
│ │ │ │ │ ├── vertexaiimagegenerator.mdx
│ │ │ │ │ ├── vertexaiimageqa.mdx
│ │ │ │ │ ├── vertexaitextgenerator.mdx
│ │ │ │ │ ├── watsonxchatgenerator.mdx
│ │ │ │ │ └── watsonxgenerator.mdx
│ │ │ │ ├── generators.mdx
│ │ │ │ ├── joiners/
│ │ │ │ │ ├── answerjoiner.mdx
│ │ │ │ │ ├── branchjoiner.mdx
│ │ │ │ │ ├── documentjoiner.mdx
│ │ │ │ │ ├── listjoiner.mdx
│ │ │ │ │ └── stringjoiner.mdx
│ │ │ │ ├── joiners.mdx
│ │ │ │ ├── preprocessors/
│ │ │ │ │ ├── chinesedocumentsplitter.mdx
│ │ │ │ │ ├── csvdocumentcleaner.mdx
│ │ │ │ │ ├── csvdocumentsplitter.mdx
│ │ │ │ │ ├── documentcleaner.mdx
│ │ │ │ │ ├── documentpreprocessor.mdx
│ │ │ │ │ ├── documentsplitter.mdx
│ │ │ │ │ ├── embeddingbaseddocumentsplitter.mdx
│ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx
│ │ │ │ │ ├── recursivesplitter.mdx
│ │ │ │ │ └── textcleaner.mdx
│ │ │ │ ├── preprocessors.mdx
│ │ │ │ ├── query/
│ │ │ │ │ └── queryexpander.mdx
│ │ │ │ ├── rankers/
│ │ │ │ │ ├── amazonbedrockranker.mdx
│ │ │ │ │ ├── choosing-the-right-ranker.mdx
│ │ │ │ │ ├── cohereranker.mdx
│ │ │ │ │ ├── external-integrations-rankers.mdx
│ │ │ │ │ ├── fastembedranker.mdx
│ │ │ │ │ ├── huggingfaceteiranker.mdx
│ │ │ │ │ ├── jinaranker.mdx
│ │ │ │ │ ├── lostinthemiddleranker.mdx
│ │ │ │ │ ├── metafieldgroupingranker.mdx
│ │ │ │ │ ├── metafieldranker.mdx
│ │ │ │ │ ├── nvidiaranker.mdx
│ │ │ │ │ ├── pyversityranker.mdx
│ │ │ │ │ ├── sentencetransformersdiversityranker.mdx
│ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx
│ │ │ │ │ └── transformerssimilarityranker.mdx
│ │ │ │ ├── rankers.mdx
│ │ │ │ ├── readers/
│ │ │ │ │ └── extractivereader.mdx
│ │ │ │ ├── readers.mdx
│ │ │ │ ├── retrievers/
│ │ │ │ │ ├── astraretriever.mdx
│ │ │ │ │ ├── automergingretriever.mdx
│ │ │ │ │ ├── azureaisearchbm25retriever.mdx
│ │ │ │ │ ├── azureaisearchembeddingretriever.mdx
│ │ │ │ │ ├── azureaisearchhybridretriever.mdx
│ │ │ │ │ ├── chromaembeddingretriever.mdx
│ │ │ │ │ ├── chromaqueryretriever.mdx
│ │ │ │ │ ├── elasticsearchbm25retriever.mdx
│ │ │ │ │ ├── elasticsearchembeddingretriever.mdx
│ │ │ │ │ ├── filterretriever.mdx
│ │ │ │ │ ├── inmemorybm25retriever.mdx
│ │ │ │ │ ├── inmemoryembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx
│ │ │ │ │ ├── multiqueryembeddingretriever.mdx
│ │ │ │ │ ├── multiquerytextretriever.mdx
│ │ │ │ │ ├── opensearchbm25retriever.mdx
│ │ │ │ │ ├── opensearchembeddingretriever.mdx
│ │ │ │ │ ├── opensearchhybridretriever.mdx
│ │ │ │ │ ├── pgvectorembeddingretriever.mdx
│ │ │ │ │ ├── pgvectorkeywordretriever.mdx
│ │ │ │ │ ├── pineconedenseretriever.mdx
│ │ │ │ │ ├── qdrantembeddingretriever.mdx
│ │ │ │ │ ├── qdranthybridretriever.mdx
│ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx
│ │ │ │ │ ├── sentencewindowretrieval.mdx
│ │ │ │ │ ├── snowflaketableretriever.mdx
│ │ │ │ │ ├── weaviatebm25retriever.mdx
│ │ │ │ │ ├── weaviateembeddingretriever.mdx
│ │ │ │ │ └── weaviatehybridretriever.mdx
│ │ │ │ ├── retrievers.mdx
│ │ │ │ ├── routers/
│ │ │ │ │ ├── conditionalrouter.mdx
│ │ │ │ │ ├── documentlengthrouter.mdx
│ │ │ │ │ ├── documenttyperouter.mdx
│ │ │ │ │ ├── filetyperouter.mdx
│ │ │ │ │ ├── llmmessagesrouter.mdx
│ │ │ │ │ ├── metadatarouter.mdx
│ │ │ │ │ ├── textlanguagerouter.mdx
│ │ │ │ │ ├── transformerstextrouter.mdx
│ │ │ │ │ └── transformerszeroshottextrouter.mdx
│ │ │ │ ├── routers.mdx
│ │ │ │ ├── samplers/
│ │ │ │ │ └── toppsampler.mdx
│ │ │ │ ├── tools/
│ │ │ │ │ └── toolinvoker.mdx
│ │ │ │ ├── validators/
│ │ │ │ │ └── jsonschemavalidator.mdx
│ │ │ │ ├── websearch/
│ │ │ │ │ ├── external-integrations-websearch.mdx
│ │ │ │ │ ├── searchapiwebsearch.mdx
│ │ │ │ │ └── serperdevwebsearch.mdx
│ │ │ │ ├── websearch.mdx
│ │ │ │ └── writers/
│ │ │ │ └── documentwriter.mdx
│ │ │ └── tools/
│ │ │ ├── componenttool.mdx
│ │ │ ├── mcptool.mdx
│ │ │ ├── mcptoolset.mdx
│ │ │ ├── pipelinetool.mdx
│ │ │ ├── ready-made-tools/
│ │ │ │ ├── githubfileeditortool.mdx
│ │ │ │ ├── githubissuecommentertool.mdx
│ │ │ │ ├── githubissueviewertool.mdx
│ │ │ │ ├── githubprcreatortool.mdx
│ │ │ │ └── githubrepoviewertool.mdx
│ │ │ ├── tool.mdx
│ │ │ └── toolset.mdx
│ │ ├── version-2.23/
│ │ │ ├── _templates/
│ │ │ │ ├── component-template.mdx
│ │ │ │ └── document-store-template.mdx
│ │ │ ├── concepts/
│ │ │ │ ├── agents/
│ │ │ │ │ └── state.mdx
│ │ │ │ ├── agents.mdx
│ │ │ │ ├── components/
│ │ │ │ │ ├── custom-components.mdx
│ │ │ │ │ └── supercomponents.mdx
│ │ │ │ ├── components.mdx
│ │ │ │ ├── concepts-overview.mdx
│ │ │ │ ├── data-classes/
│ │ │ │ │ └── chatmessage.mdx
│ │ │ │ ├── data-classes.mdx
│ │ │ │ ├── device-management.mdx
│ │ │ │ ├── document-store/
│ │ │ │ │ ├── choosing-a-document-store.mdx
│ │ │ │ │ └── creating-custom-document-stores.mdx
│ │ │ │ ├── document-store.mdx
│ │ │ │ ├── experimental-package.mdx
│ │ │ │ ├── integrations.mdx
│ │ │ │ ├── jinja-templates.mdx
│ │ │ │ ├── metadata-filtering.mdx
│ │ │ │ ├── pipelines/
│ │ │ │ │ ├── asyncpipeline.mdx
│ │ │ │ │ ├── creating-pipelines.mdx
│ │ │ │ │ ├── debugging-pipelines.mdx
│ │ │ │ │ ├── pipeline-breakpoints.mdx
│ │ │ │ │ ├── pipeline-loops.mdx
│ │ │ │ │ ├── pipeline-templates.mdx
│ │ │ │ │ ├── serialization.mdx
│ │ │ │ │ └── visualizing-pipelines.mdx
│ │ │ │ ├── pipelines.mdx
│ │ │ │ └── secret-management.mdx
│ │ │ ├── development/
│ │ │ │ ├── deployment/
│ │ │ │ │ ├── docker.mdx
│ │ │ │ │ ├── kubernetes.mdx
│ │ │ │ │ └── openshift.mdx
│ │ │ │ ├── deployment.mdx
│ │ │ │ ├── enabling-gpu-acceleration.mdx
│ │ │ │ ├── external-integrations-development.mdx
│ │ │ │ ├── hayhooks.mdx
│ │ │ │ ├── logging.mdx
│ │ │ │ └── tracing.mdx
│ │ │ ├── document-stores/
│ │ │ │ ├── astradocumentstore.mdx
│ │ │ │ ├── azureaisearchdocumentstore.mdx
│ │ │ │ ├── chromadocumentstore.mdx
│ │ │ │ ├── elasticsearch-document-store.mdx
│ │ │ │ ├── inmemorydocumentstore.mdx
│ │ │ │ ├── mongodbatlasdocumentstore.mdx
│ │ │ │ ├── opensearch-document-store.mdx
│ │ │ │ ├── pgvectordocumentstore.mdx
│ │ │ │ ├── pinecone-document-store.mdx
│ │ │ │ ├── qdrant-document-store.mdx
│ │ │ │ └── weaviatedocumentstore.mdx
│ │ │ ├── intro.mdx
│ │ │ ├── optimization/
│ │ │ │ ├── advanced-rag-techniques/
│ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx
│ │ │ │ ├── advanced-rag-techniques.mdx
│ │ │ │ ├── evaluation/
│ │ │ │ │ ├── model-based-evaluation.mdx
│ │ │ │ │ └── statistical-evaluation.mdx
│ │ │ │ └── evaluation.mdx
│ │ │ ├── overview/
│ │ │ │ ├── breaking-change-policy.mdx
│ │ │ │ ├── faq.mdx
│ │ │ │ ├── get-started.mdx
│ │ │ │ ├── installation.mdx
│ │ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx
│ │ │ │ ├── migration.mdx
│ │ │ │ └── telemetry.mdx
│ │ │ ├── pipeline-components/
│ │ │ │ ├── agents-1/
│ │ │ │ │ └── agent.mdx
│ │ │ │ ├── audio/
│ │ │ │ │ ├── external-integrations-audio.mdx
│ │ │ │ │ ├── localwhispertranscriber.mdx
│ │ │ │ │ └── remotewhispertranscriber.mdx
│ │ │ │ ├── audio.mdx
│ │ │ │ ├── builders/
│ │ │ │ │ ├── answerbuilder.mdx
│ │ │ │ │ ├── chatpromptbuilder.mdx
│ │ │ │ │ └── promptbuilder.mdx
│ │ │ │ ├── builders.mdx
│ │ │ │ ├── caching/
│ │ │ │ │ └── cachechecker.mdx
│ │ │ │ ├── classifiers/
│ │ │ │ │ ├── documentlanguageclassifier.mdx
│ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx
│ │ │ │ ├── classifiers.mdx
│ │ │ │ ├── connectors/
│ │ │ │ │ ├── external-integrations-connectors.mdx
│ │ │ │ │ ├── githubfileeditor.mdx
│ │ │ │ │ ├── githubissuecommenter.mdx
│ │ │ │ │ ├── githubissueviewer.mdx
│ │ │ │ │ ├── githubprcreator.mdx
│ │ │ │ │ ├── githubrepoforker.mdx
│ │ │ │ │ ├── githubrepoviewer.mdx
│ │ │ │ │ ├── jinareaderconnector.mdx
│ │ │ │ │ ├── langfuseconnector.mdx
│ │ │ │ │ ├── openapiconnector.mdx
│ │ │ │ │ ├── openapiserviceconnector.mdx
│ │ │ │ │ └── weaveconnector.mdx
│ │ │ │ ├── connectors.mdx
│ │ │ │ ├── converters/
│ │ │ │ │ ├── azureocrdocumentconverter.mdx
│ │ │ │ │ ├── csvtodocument.mdx
│ │ │ │ │ ├── documenttoimagecontent.mdx
│ │ │ │ │ ├── docxtodocument.mdx
│ │ │ │ │ ├── external-integrations-converters.mdx
│ │ │ │ │ ├── htmltodocument.mdx
│ │ │ │ │ ├── imagefiletodocument.mdx
│ │ │ │ │ ├── imagefiletoimagecontent.mdx
│ │ │ │ │ ├── jsonconverter.mdx
│ │ │ │ │ ├── markdowntodocument.mdx
│ │ │ │ │ ├── mistralocrdocumentconverter.mdx
│ │ │ │ │ ├── msgtodocument.mdx
│ │ │ │ │ ├── multifileconverter.mdx
│ │ │ │ │ ├── openapiservicetofunctions.mdx
│ │ │ │ │ ├── outputadapter.mdx
│ │ │ │ │ ├── paddleocrvldocumentconverter.mdx
│ │ │ │ │ ├── pdfminertodocument.mdx
│ │ │ │ │ ├── pdftoimagecontent.mdx
│ │ │ │ │ ├── pptxtodocument.mdx
│ │ │ │ │ ├── pypdftodocument.mdx
│ │ │ │ │ ├── textfiletodocument.mdx
│ │ │ │ │ ├── tikadocumentconverter.mdx
│ │ │ │ │ ├── unstructuredfileconverter.mdx
│ │ │ │ │ └── xlsxtodocument.mdx
│ │ │ │ ├── converters.mdx
│ │ │ │ ├── downloaders/
│ │ │ │ │ └── s3downloader.mdx
│ │ │ │ ├── embedders/
│ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx
│ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx
│ │ │ │ │ ├── amazonbedrocktextembedder.mdx
│ │ │ │ │ ├── azureopenaidocumentembedder.mdx
│ │ │ │ │ ├── azureopenaitextembedder.mdx
│ │ │ │ │ ├── choosing-the-right-embedder.mdx
│ │ │ │ │ ├── coheredocumentembedder.mdx
│ │ │ │ │ ├── coheredocumentimageembedder.mdx
│ │ │ │ │ ├── coheretextembedder.mdx
│ │ │ │ │ ├── external-integrations-embedders.mdx
│ │ │ │ │ ├── fastembeddocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsetextembedder.mdx
│ │ │ │ │ ├── fastembedtextembedder.mdx
│ │ │ │ │ ├── googlegenaidocumentembedder.mdx
│ │ │ │ │ ├── googlegenaitextembedder.mdx
│ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx
│ │ │ │ │ ├── huggingfaceapitextembedder.mdx
│ │ │ │ │ ├── jinadocumentembedder.mdx
│ │ │ │ │ ├── jinadocumentimageembedder.mdx
│ │ │ │ │ ├── jinatextembedder.mdx
│ │ │ │ │ ├── mistraldocumentembedder.mdx
│ │ │ │ │ ├── mistraltextembedder.mdx
│ │ │ │ │ ├── nvidiadocumentembedder.mdx
│ │ │ │ │ ├── nvidiatextembedder.mdx
│ │ │ │ │ ├── ollamadocumentembedder.mdx
│ │ │ │ │ ├── ollamatextembedder.mdx
│ │ │ │ │ ├── openaidocumentembedder.mdx
│ │ │ │ │ ├── openaitextembedder.mdx
│ │ │ │ │ ├── optimumdocumentembedder.mdx
│ │ │ │ │ ├── optimumtextembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx
│ │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx
│ │ │ │ │ ├── sentencetransformerstextembedder.mdx
│ │ │ │ │ ├── stackitdocumentembedder.mdx
│ │ │ │ │ ├── stackittextembedder.mdx
│ │ │ │ │ ├── vertexaidocumentembedder.mdx
│ │ │ │ │ ├── vertexaitextembedder.mdx
│ │ │ │ │ ├── watsonxdocumentembedder.mdx
│ │ │ │ │ └── watsonxtextembedder.mdx
│ │ │ │ ├── embedders.mdx
│ │ │ │ ├── evaluators/
│ │ │ │ │ ├── answerexactmatchevaluator.mdx
│ │ │ │ │ ├── contextrelevanceevaluator.mdx
│ │ │ │ │ ├── deepevalevaluator.mdx
│ │ │ │ │ ├── documentmapevaluator.mdx
│ │ │ │ │ ├── documentmrrevaluator.mdx
│ │ │ │ │ ├── documentndcgevaluator.mdx
│ │ │ │ │ ├── documentrecallevaluator.mdx
│ │ │ │ │ ├── external-integrations-evaluators.mdx
│ │ │ │ │ ├── faithfulnessevaluator.mdx
│ │ │ │ │ ├── llmevaluator.mdx
│ │ │ │ │ ├── ragasevaluator.mdx
│ │ │ │ │ └── sasevaluator.mdx
│ │ │ │ ├── evaluators.mdx
│ │ │ │ ├── extractors/
│ │ │ │ │ ├── llmdocumentcontentextractor.mdx
│ │ │ │ │ ├── llmmetadataextractor.mdx
│ │ │ │ │ ├── namedentityextractor.mdx
│ │ │ │ │ └── regextextextractor.mdx
│ │ │ │ ├── extractors.mdx
│ │ │ │ ├── fetchers/
│ │ │ │ │ ├── external-integrations-fetchers.mdx
│ │ │ │ │ └── linkcontentfetcher.mdx
│ │ │ │ ├── fetchers.mdx
│ │ │ │ ├── generators/
│ │ │ │ │ ├── aimllapichatgenerator.mdx
│ │ │ │ │ ├── amazonbedrockchatgenerator.mdx
│ │ │ │ │ ├── amazonbedrockgenerator.mdx
│ │ │ │ │ ├── anthropicchatgenerator.mdx
│ │ │ │ │ ├── anthropicgenerator.mdx
│ │ │ │ │ ├── anthropicvertexchatgenerator.mdx
│ │ │ │ │ ├── azureopenaichatgenerator.mdx
│ │ │ │ │ ├── azureopenaigenerator.mdx
│ │ │ │ │ ├── azureopenairesponseschatgenerator.mdx
│ │ │ │ │ ├── coherechatgenerator.mdx
│ │ │ │ │ ├── coheregenerator.mdx
│ │ │ │ │ ├── cometapichatgenerator.mdx
│ │ │ │ │ ├── dalleimagegenerator.mdx
│ │ │ │ │ ├── external-integrations-generators.mdx
│ │ │ │ │ ├── fallbackchatgenerator.mdx
│ │ │ │ │ ├── googleaigeminichatgenerator.mdx
│ │ │ │ │ ├── googleaigeminigenerator.mdx
│ │ │ │ │ ├── googlegenaichatgenerator.mdx
│ │ │ │ │ ├── guides-to-generators/
│ │ │ │ │ │ ├── choosing-the-right-generator.mdx
│ │ │ │ │ │ ├── function-calling.mdx
│ │ │ │ │ │ └── generators-vs-chat-generators.mdx
│ │ │ │ │ ├── huggingfaceapichatgenerator.mdx
│ │ │ │ │ ├── huggingfaceapigenerator.mdx
│ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx
│ │ │ │ │ ├── huggingfacelocalgenerator.mdx
│ │ │ │ │ ├── llamacppchatgenerator.mdx
│ │ │ │ │ ├── llamacppgenerator.mdx
│ │ │ │ │ ├── llamastackchatgenerator.mdx
│ │ │ │ │ ├── metallamachatgenerator.mdx
│ │ │ │ │ ├── mistralchatgenerator.mdx
│ │ │ │ │ ├── nvidiachatgenerator.mdx
│ │ │ │ │ ├── nvidiagenerator.mdx
│ │ │ │ │ ├── ollamachatgenerator.mdx
│ │ │ │ │ ├── ollamagenerator.mdx
│ │ │ │ │ ├── openaichatgenerator.mdx
│ │ │ │ │ ├── openaigenerator.mdx
│ │ │ │ │ ├── openairesponseschatgenerator.mdx
│ │ │ │ │ ├── openrouterchatgenerator.mdx
│ │ │ │ │ ├── sagemakergenerator.mdx
│ │ │ │ │ ├── stackitchatgenerator.mdx
│ │ │ │ │ ├── togetheraichatgenerator.mdx
│ │ │ │ │ ├── togetheraigenerator.mdx
│ │ │ │ │ ├── vertexaicodegenerator.mdx
│ │ │ │ │ ├── vertexaigeminichatgenerator.mdx
│ │ │ │ │ ├── vertexaigeminigenerator.mdx
│ │ │ │ │ ├── vertexaiimagecaptioner.mdx
│ │ │ │ │ ├── vertexaiimagegenerator.mdx
│ │ │ │ │ ├── vertexaiimageqa.mdx
│ │ │ │ │ ├── vertexaitextgenerator.mdx
│ │ │ │ │ ├── watsonxchatgenerator.mdx
│ │ │ │ │ └── watsonxgenerator.mdx
│ │ │ │ ├── generators.mdx
│ │ │ │ ├── joiners/
│ │ │ │ │ ├── answerjoiner.mdx
│ │ │ │ │ ├── branchjoiner.mdx
│ │ │ │ │ ├── documentjoiner.mdx
│ │ │ │ │ ├── listjoiner.mdx
│ │ │ │ │ └── stringjoiner.mdx
│ │ │ │ ├── joiners.mdx
│ │ │ │ ├── preprocessors/
│ │ │ │ │ ├── chinesedocumentsplitter.mdx
│ │ │ │ │ ├── csvdocumentcleaner.mdx
│ │ │ │ │ ├── csvdocumentsplitter.mdx
│ │ │ │ │ ├── documentcleaner.mdx
│ │ │ │ │ ├── documentpreprocessor.mdx
│ │ │ │ │ ├── documentsplitter.mdx
│ │ │ │ │ ├── embeddingbaseddocumentsplitter.mdx
│ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx
│ │ │ │ │ ├── recursivesplitter.mdx
│ │ │ │ │ └── textcleaner.mdx
│ │ │ │ ├── preprocessors.mdx
│ │ │ │ ├── query/
│ │ │ │ │ └── queryexpander.mdx
│ │ │ │ ├── rankers/
│ │ │ │ │ ├── amazonbedrockranker.mdx
│ │ │ │ │ ├── choosing-the-right-ranker.mdx
│ │ │ │ │ ├── cohereranker.mdx
│ │ │ │ │ ├── external-integrations-rankers.mdx
│ │ │ │ │ ├── fastembedranker.mdx
│ │ │ │ │ ├── huggingfaceteiranker.mdx
│ │ │ │ │ ├── jinaranker.mdx
│ │ │ │ │ ├── lostinthemiddleranker.mdx
│ │ │ │ │ ├── metafieldgroupingranker.mdx
│ │ │ │ │ ├── metafieldranker.mdx
│ │ │ │ │ ├── nvidiaranker.mdx
│ │ │ │ │ ├── pyversityranker.mdx
│ │ │ │ │ ├── sentencetransformersdiversityranker.mdx
│ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx
│ │ │ │ │ └── transformerssimilarityranker.mdx
│ │ │ │ ├── rankers.mdx
│ │ │ │ ├── readers/
│ │ │ │ │ └── extractivereader.mdx
│ │ │ │ ├── readers.mdx
│ │ │ │ ├── retrievers/
│ │ │ │ │ ├── astraretriever.mdx
│ │ │ │ │ ├── automergingretriever.mdx
│ │ │ │ │ ├── azureaisearchbm25retriever.mdx
│ │ │ │ │ ├── azureaisearchembeddingretriever.mdx
│ │ │ │ │ ├── azureaisearchhybridretriever.mdx
│ │ │ │ │ ├── chromaembeddingretriever.mdx
│ │ │ │ │ ├── chromaqueryretriever.mdx
│ │ │ │ │ ├── elasticsearchbm25retriever.mdx
│ │ │ │ │ ├── elasticsearchembeddingretriever.mdx
│ │ │ │ │ ├── filterretriever.mdx
│ │ │ │ │ ├── inmemorybm25retriever.mdx
│ │ │ │ │ ├── inmemoryembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx
│ │ │ │ │ ├── multiqueryembeddingretriever.mdx
│ │ │ │ │ ├── multiquerytextretriever.mdx
│ │ │ │ │ ├── opensearchbm25retriever.mdx
│ │ │ │ │ ├── opensearchembeddingretriever.mdx
│ │ │ │ │ ├── opensearchhybridretriever.mdx
│ │ │ │ │ ├── pgvectorembeddingretriever.mdx
│ │ │ │ │ ├── pgvectorkeywordretriever.mdx
│ │ │ │ │ ├── pineconedenseretriever.mdx
│ │ │ │ │ ├── qdrantembeddingretriever.mdx
│ │ │ │ │ ├── qdranthybridretriever.mdx
│ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx
│ │ │ │ │ ├── sentencewindowretrieval.mdx
│ │ │ │ │ ├── snowflaketableretriever.mdx
│ │ │ │ │ ├── weaviatebm25retriever.mdx
│ │ │ │ │ ├── weaviateembeddingretriever.mdx
│ │ │ │ │ └── weaviatehybridretriever.mdx
│ │ │ │ ├── retrievers.mdx
│ │ │ │ ├── routers/
│ │ │ │ │ ├── conditionalrouter.mdx
│ │ │ │ │ ├── documentlengthrouter.mdx
│ │ │ │ │ ├── documenttyperouter.mdx
│ │ │ │ │ ├── filetyperouter.mdx
│ │ │ │ │ ├── llmmessagesrouter.mdx
│ │ │ │ │ ├── metadatarouter.mdx
│ │ │ │ │ ├── textlanguagerouter.mdx
│ │ │ │ │ ├── transformerstextrouter.mdx
│ │ │ │ │ └── transformerszeroshottextrouter.mdx
│ │ │ │ ├── routers.mdx
│ │ │ │ ├── samplers/
│ │ │ │ │ └── toppsampler.mdx
│ │ │ │ ├── tools/
│ │ │ │ │ └── toolinvoker.mdx
│ │ │ │ ├── validators/
│ │ │ │ │ └── jsonschemavalidator.mdx
│ │ │ │ ├── websearch/
│ │ │ │ │ ├── external-integrations-websearch.mdx
│ │ │ │ │ ├── searchapiwebsearch.mdx
│ │ │ │ │ └── serperdevwebsearch.mdx
│ │ │ │ ├── websearch.mdx
│ │ │ │ └── writers/
│ │ │ │ └── documentwriter.mdx
│ │ │ └── tools/
│ │ │ ├── componenttool.mdx
│ │ │ ├── mcptool.mdx
│ │ │ ├── mcptoolset.mdx
│ │ │ ├── pipelinetool.mdx
│ │ │ ├── ready-made-tools/
│ │ │ │ ├── githubfileeditortool.mdx
│ │ │ │ ├── githubissuecommentertool.mdx
│ │ │ │ ├── githubissueviewertool.mdx
│ │ │ │ ├── githubprcreatortool.mdx
│ │ │ │ └── githubrepoviewertool.mdx
│ │ │ ├── tool.mdx
│ │ │ └── toolset.mdx
│ │ ├── version-2.24/
│ │ │ ├── _templates/
│ │ │ │ ├── component-template.mdx
│ │ │ │ └── document-store-template.mdx
│ │ │ ├── concepts/
│ │ │ │ ├── agents/
│ │ │ │ │ └── state.mdx
│ │ │ │ ├── agents.mdx
│ │ │ │ ├── components/
│ │ │ │ │ ├── custom-components.mdx
│ │ │ │ │ └── supercomponents.mdx
│ │ │ │ ├── components.mdx
│ │ │ │ ├── concepts-overview.mdx
│ │ │ │ ├── data-classes/
│ │ │ │ │ └── chatmessage.mdx
│ │ │ │ ├── data-classes.mdx
│ │ │ │ ├── device-management.mdx
│ │ │ │ ├── document-store/
│ │ │ │ │ ├── choosing-a-document-store.mdx
│ │ │ │ │ └── creating-custom-document-stores.mdx
│ │ │ │ ├── document-store.mdx
│ │ │ │ ├── experimental-package.mdx
│ │ │ │ ├── integrations.mdx
│ │ │ │ ├── jinja-templates.mdx
│ │ │ │ ├── metadata-filtering.mdx
│ │ │ │ ├── pipelines/
│ │ │ │ │ ├── asyncpipeline.mdx
│ │ │ │ │ ├── creating-pipelines.mdx
│ │ │ │ │ ├── debugging-pipelines.mdx
│ │ │ │ │ ├── pipeline-breakpoints.mdx
│ │ │ │ │ ├── pipeline-loops.mdx
│ │ │ │ │ ├── pipeline-templates.mdx
│ │ │ │ │ ├── serialization.mdx
│ │ │ │ │ ├── smart-pipeline-connections.mdx
│ │ │ │ │ └── visualizing-pipelines.mdx
│ │ │ │ ├── pipelines.mdx
│ │ │ │ └── secret-management.mdx
│ │ │ ├── development/
│ │ │ │ ├── deployment/
│ │ │ │ │ ├── docker.mdx
│ │ │ │ │ ├── kubernetes.mdx
│ │ │ │ │ └── openshift.mdx
│ │ │ │ ├── deployment.mdx
│ │ │ │ ├── enabling-gpu-acceleration.mdx
│ │ │ │ ├── external-integrations-development.mdx
│ │ │ │ ├── hayhooks.mdx
│ │ │ │ ├── logging.mdx
│ │ │ │ └── tracing.mdx
│ │ │ ├── document-stores/
│ │ │ │ ├── astradocumentstore.mdx
│ │ │ │ ├── azureaisearchdocumentstore.mdx
│ │ │ │ ├── chromadocumentstore.mdx
│ │ │ │ ├── elasticsearch-document-store.mdx
│ │ │ │ ├── inmemorydocumentstore.mdx
│ │ │ │ ├── mongodbatlasdocumentstore.mdx
│ │ │ │ ├── opensearch-document-store.mdx
│ │ │ │ ├── pgvectordocumentstore.mdx
│ │ │ │ ├── pinecone-document-store.mdx
│ │ │ │ ├── qdrant-document-store.mdx
│ │ │ │ ├── valkeydocumentstore.mdx
│ │ │ │ └── weaviatedocumentstore.mdx
│ │ │ ├── intro.mdx
│ │ │ ├── optimization/
│ │ │ │ ├── advanced-rag-techniques/
│ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx
│ │ │ │ ├── advanced-rag-techniques.mdx
│ │ │ │ ├── evaluation/
│ │ │ │ │ ├── model-based-evaluation.mdx
│ │ │ │ │ └── statistical-evaluation.mdx
│ │ │ │ └── evaluation.mdx
│ │ │ ├── overview/
│ │ │ │ ├── breaking-change-policy.mdx
│ │ │ │ ├── faq.mdx
│ │ │ │ ├── get-started.mdx
│ │ │ │ ├── installation.mdx
│ │ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx
│ │ │ │ ├── migration.mdx
│ │ │ │ └── telemetry.mdx
│ │ │ ├── pipeline-components/
│ │ │ │ ├── agents-1/
│ │ │ │ │ └── agent.mdx
│ │ │ │ ├── audio/
│ │ │ │ │ ├── external-integrations-audio.mdx
│ │ │ │ │ ├── localwhispertranscriber.mdx
│ │ │ │ │ └── remotewhispertranscriber.mdx
│ │ │ │ ├── audio.mdx
│ │ │ │ ├── builders/
│ │ │ │ │ ├── answerbuilder.mdx
│ │ │ │ │ ├── chatpromptbuilder.mdx
│ │ │ │ │ └── promptbuilder.mdx
│ │ │ │ ├── builders.mdx
│ │ │ │ ├── caching/
│ │ │ │ │ └── cachechecker.mdx
│ │ │ │ ├── classifiers/
│ │ │ │ │ ├── documentlanguageclassifier.mdx
│ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx
│ │ │ │ ├── classifiers.mdx
│ │ │ │ ├── connectors/
│ │ │ │ │ ├── external-integrations-connectors.mdx
│ │ │ │ │ ├── githubfileeditor.mdx
│ │ │ │ │ ├── githubissuecommenter.mdx
│ │ │ │ │ ├── githubissueviewer.mdx
│ │ │ │ │ ├── githubprcreator.mdx
│ │ │ │ │ ├── githubrepoforker.mdx
│ │ │ │ │ ├── githubrepoviewer.mdx
│ │ │ │ │ ├── jinareaderconnector.mdx
│ │ │ │ │ ├── langfuseconnector.mdx
│ │ │ │ │ ├── openapiconnector.mdx
│ │ │ │ │ ├── openapiserviceconnector.mdx
│ │ │ │ │ └── weaveconnector.mdx
│ │ │ │ ├── connectors.mdx
│ │ │ │ ├── converters/
│ │ │ │ │ ├── azureocrdocumentconverter.mdx
│ │ │ │ │ ├── csvtodocument.mdx
│ │ │ │ │ ├── documenttoimagecontent.mdx
│ │ │ │ │ ├── docxtodocument.mdx
│ │ │ │ │ ├── external-integrations-converters.mdx
│ │ │ │ │ ├── htmltodocument.mdx
│ │ │ │ │ ├── imagefiletodocument.mdx
│ │ │ │ │ ├── imagefiletoimagecontent.mdx
│ │ │ │ │ ├── jsonconverter.mdx
│ │ │ │ │ ├── markdowntodocument.mdx
│ │ │ │ │ ├── mistralocrdocumentconverter.mdx
│ │ │ │ │ ├── msgtodocument.mdx
│ │ │ │ │ ├── multifileconverter.mdx
│ │ │ │ │ ├── openapiservicetofunctions.mdx
│ │ │ │ │ ├── outputadapter.mdx
│ │ │ │ │ ├── paddleocrvldocumentconverter.mdx
│ │ │ │ │ ├── pdfminertodocument.mdx
│ │ │ │ │ ├── pdftoimagecontent.mdx
│ │ │ │ │ ├── pptxtodocument.mdx
│ │ │ │ │ ├── pypdftodocument.mdx
│ │ │ │ │ ├── textfiletodocument.mdx
│ │ │ │ │ ├── tikadocumentconverter.mdx
│ │ │ │ │ ├── unstructuredfileconverter.mdx
│ │ │ │ │ └── xlsxtodocument.mdx
│ │ │ │ ├── converters.mdx
│ │ │ │ ├── downloaders/
│ │ │ │ │ └── s3downloader.mdx
│ │ │ │ ├── embedders/
│ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx
│ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx
│ │ │ │ │ ├── amazonbedrocktextembedder.mdx
│ │ │ │ │ ├── azureopenaidocumentembedder.mdx
│ │ │ │ │ ├── azureopenaitextembedder.mdx
│ │ │ │ │ ├── choosing-the-right-embedder.mdx
│ │ │ │ │ ├── coheredocumentembedder.mdx
│ │ │ │ │ ├── coheredocumentimageembedder.mdx
│ │ │ │ │ ├── coheretextembedder.mdx
│ │ │ │ │ ├── external-integrations-embedders.mdx
│ │ │ │ │ ├── fastembeddocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsetextembedder.mdx
│ │ │ │ │ ├── fastembedtextembedder.mdx
│ │ │ │ │ ├── googlegenaidocumentembedder.mdx
│ │ │ │ │ ├── googlegenaitextembedder.mdx
│ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx
│ │ │ │ │ ├── huggingfaceapitextembedder.mdx
│ │ │ │ │ ├── jinadocumentembedder.mdx
│ │ │ │ │ ├── jinadocumentimageembedder.mdx
│ │ │ │ │ ├── jinatextembedder.mdx
│ │ │ │ │ ├── mistraldocumentembedder.mdx
│ │ │ │ │ ├── mistraltextembedder.mdx
│ │ │ │ │ ├── nvidiadocumentembedder.mdx
│ │ │ │ │ ├── nvidiatextembedder.mdx
│ │ │ │ │ ├── ollamadocumentembedder.mdx
│ │ │ │ │ ├── ollamatextembedder.mdx
│ │ │ │ │ ├── openaidocumentembedder.mdx
│ │ │ │ │ ├── openaitextembedder.mdx
│ │ │ │ │ ├── optimumdocumentembedder.mdx
│ │ │ │ │ ├── optimumtextembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx
│ │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx
│ │ │ │ │ ├── sentencetransformerstextembedder.mdx
│ │ │ │ │ ├── stackitdocumentembedder.mdx
│ │ │ │ │ ├── stackittextembedder.mdx
│ │ │ │ │ ├── vertexaidocumentembedder.mdx
│ │ │ │ │ ├── vertexaitextembedder.mdx
│ │ │ │ │ ├── watsonxdocumentembedder.mdx
│ │ │ │ │ └── watsonxtextembedder.mdx
│ │ │ │ ├── embedders.mdx
│ │ │ │ ├── evaluators/
│ │ │ │ │ ├── answerexactmatchevaluator.mdx
│ │ │ │ │ ├── contextrelevanceevaluator.mdx
│ │ │ │ │ ├── deepevalevaluator.mdx
│ │ │ │ │ ├── documentmapevaluator.mdx
│ │ │ │ │ ├── documentmrrevaluator.mdx
│ │ │ │ │ ├── documentndcgevaluator.mdx
│ │ │ │ │ ├── documentrecallevaluator.mdx
│ │ │ │ │ ├── external-integrations-evaluators.mdx
│ │ │ │ │ ├── faithfulnessevaluator.mdx
│ │ │ │ │ ├── llmevaluator.mdx
│ │ │ │ │ ├── ragasevaluator.mdx
│ │ │ │ │ └── sasevaluator.mdx
│ │ │ │ ├── evaluators.mdx
│ │ │ │ ├── extractors/
│ │ │ │ │ ├── llmdocumentcontentextractor.mdx
│ │ │ │ │ ├── llmmetadataextractor.mdx
│ │ │ │ │ ├── namedentityextractor.mdx
│ │ │ │ │ └── regextextextractor.mdx
│ │ │ │ ├── extractors.mdx
│ │ │ │ ├── fetchers/
│ │ │ │ │ ├── external-integrations-fetchers.mdx
│ │ │ │ │ └── linkcontentfetcher.mdx
│ │ │ │ ├── fetchers.mdx
│ │ │ │ ├── generators/
│ │ │ │ │ ├── aimllapichatgenerator.mdx
│ │ │ │ │ ├── amazonbedrockchatgenerator.mdx
│ │ │ │ │ ├── amazonbedrockgenerator.mdx
│ │ │ │ │ ├── anthropicchatgenerator.mdx
│ │ │ │ │ ├── anthropicgenerator.mdx
│ │ │ │ │ ├── anthropicvertexchatgenerator.mdx
│ │ │ │ │ ├── azureopenaichatgenerator.mdx
│ │ │ │ │ ├── azureopenaigenerator.mdx
│ │ │ │ │ ├── azureopenairesponseschatgenerator.mdx
│ │ │ │ │ ├── coherechatgenerator.mdx
│ │ │ │ │ ├── coheregenerator.mdx
│ │ │ │ │ ├── cometapichatgenerator.mdx
│ │ │ │ │ ├── dalleimagegenerator.mdx
│ │ │ │ │ ├── external-integrations-generators.mdx
│ │ │ │ │ ├── fallbackchatgenerator.mdx
│ │ │ │ │ ├── googleaigeminichatgenerator.mdx
│ │ │ │ │ ├── googleaigeminigenerator.mdx
│ │ │ │ │ ├── googlegenaichatgenerator.mdx
│ │ │ │ │ ├── guides-to-generators/
│ │ │ │ │ │ ├── choosing-the-right-generator.mdx
│ │ │ │ │ │ ├── function-calling.mdx
│ │ │ │ │ │ └── generators-vs-chat-generators.mdx
│ │ │ │ │ ├── huggingfaceapichatgenerator.mdx
│ │ │ │ │ ├── huggingfaceapigenerator.mdx
│ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx
│ │ │ │ │ ├── huggingfacelocalgenerator.mdx
│ │ │ │ │ ├── llamacppchatgenerator.mdx
│ │ │ │ │ ├── llamacppgenerator.mdx
│ │ │ │ │ ├── llamastackchatgenerator.mdx
│ │ │ │ │ ├── metallamachatgenerator.mdx
│ │ │ │ │ ├── mistralchatgenerator.mdx
│ │ │ │ │ ├── nvidiachatgenerator.mdx
│ │ │ │ │ ├── nvidiagenerator.mdx
│ │ │ │ │ ├── ollamachatgenerator.mdx
│ │ │ │ │ ├── ollamagenerator.mdx
│ │ │ │ │ ├── openaichatgenerator.mdx
│ │ │ │ │ ├── openaigenerator.mdx
│ │ │ │ │ ├── openairesponseschatgenerator.mdx
│ │ │ │ │ ├── openrouterchatgenerator.mdx
│ │ │ │ │ ├── sagemakergenerator.mdx
│ │ │ │ │ ├── stackitchatgenerator.mdx
│ │ │ │ │ ├── togetheraichatgenerator.mdx
│ │ │ │ │ ├── togetheraigenerator.mdx
│ │ │ │ │ ├── vertexaicodegenerator.mdx
│ │ │ │ │ ├── vertexaigeminichatgenerator.mdx
│ │ │ │ │ ├── vertexaigeminigenerator.mdx
│ │ │ │ │ ├── vertexaiimagecaptioner.mdx
│ │ │ │ │ ├── vertexaiimagegenerator.mdx
│ │ │ │ │ ├── vertexaiimageqa.mdx
│ │ │ │ │ ├── vertexaitextgenerator.mdx
│ │ │ │ │ ├── watsonxchatgenerator.mdx
│ │ │ │ │ └── watsonxgenerator.mdx
│ │ │ │ ├── generators.mdx
│ │ │ │ ├── joiners/
│ │ │ │ │ ├── answerjoiner.mdx
│ │ │ │ │ ├── branchjoiner.mdx
│ │ │ │ │ ├── documentjoiner.mdx
│ │ │ │ │ ├── listjoiner.mdx
│ │ │ │ │ └── stringjoiner.mdx
│ │ │ │ ├── joiners.mdx
│ │ │ │ ├── preprocessors/
│ │ │ │ │ ├── chinesedocumentsplitter.mdx
│ │ │ │ │ ├── csvdocumentcleaner.mdx
│ │ │ │ │ ├── csvdocumentsplitter.mdx
│ │ │ │ │ ├── documentcleaner.mdx
│ │ │ │ │ ├── documentpreprocessor.mdx
│ │ │ │ │ ├── documentsplitter.mdx
│ │ │ │ │ ├── embeddingbaseddocumentsplitter.mdx
│ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx
│ │ │ │ │ ├── markdownheadersplitter.mdx
│ │ │ │ │ ├── recursivesplitter.mdx
│ │ │ │ │ └── textcleaner.mdx
│ │ │ │ ├── preprocessors.mdx
│ │ │ │ ├── query/
│ │ │ │ │ └── queryexpander.mdx
│ │ │ │ ├── rankers/
│ │ │ │ │ ├── amazonbedrockranker.mdx
│ │ │ │ │ ├── choosing-the-right-ranker.mdx
│ │ │ │ │ ├── cohereranker.mdx
│ │ │ │ │ ├── external-integrations-rankers.mdx
│ │ │ │ │ ├── fastembedranker.mdx
│ │ │ │ │ ├── huggingfaceteiranker.mdx
│ │ │ │ │ ├── jinaranker.mdx
│ │ │ │ │ ├── lostinthemiddleranker.mdx
│ │ │ │ │ ├── metafieldgroupingranker.mdx
│ │ │ │ │ ├── metafieldranker.mdx
│ │ │ │ │ ├── nvidiaranker.mdx
│ │ │ │ │ ├── pyversityranker.mdx
│ │ │ │ │ ├── sentencetransformersdiversityranker.mdx
│ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx
│ │ │ │ │ └── transformerssimilarityranker.mdx
│ │ │ │ ├── rankers.mdx
│ │ │ │ ├── readers/
│ │ │ │ │ └── extractivereader.mdx
│ │ │ │ ├── readers.mdx
│ │ │ │ ├── retrievers/
│ │ │ │ │ ├── astraretriever.mdx
│ │ │ │ │ ├── automergingretriever.mdx
│ │ │ │ │ ├── azureaisearchbm25retriever.mdx
│ │ │ │ │ ├── azureaisearchembeddingretriever.mdx
│ │ │ │ │ ├── azureaisearchhybridretriever.mdx
│ │ │ │ │ ├── chromaembeddingretriever.mdx
│ │ │ │ │ ├── chromaqueryretriever.mdx
│ │ │ │ │ ├── elasticsearchbm25retriever.mdx
│ │ │ │ │ ├── elasticsearchembeddingretriever.mdx
│ │ │ │ │ ├── filterretriever.mdx
│ │ │ │ │ ├── inmemorybm25retriever.mdx
│ │ │ │ │ ├── inmemoryembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx
│ │ │ │ │ ├── multiqueryembeddingretriever.mdx
│ │ │ │ │ ├── multiquerytextretriever.mdx
│ │ │ │ │ ├── opensearchbm25retriever.mdx
│ │ │ │ │ ├── opensearchembeddingretriever.mdx
│ │ │ │ │ ├── opensearchhybridretriever.mdx
│ │ │ │ │ ├── pgvectorembeddingretriever.mdx
│ │ │ │ │ ├── pgvectorkeywordretriever.mdx
│ │ │ │ │ ├── pineconedenseretriever.mdx
│ │ │ │ │ ├── qdrantembeddingretriever.mdx
│ │ │ │ │ ├── qdranthybridretriever.mdx
│ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx
│ │ │ │ │ ├── sentencewindowretrieval.mdx
│ │ │ │ │ ├── snowflaketableretriever.mdx
│ │ │ │ │ ├── valkeyembeddingretriever.mdx
│ │ │ │ │ ├── weaviatebm25retriever.mdx
│ │ │ │ │ ├── weaviateembeddingretriever.mdx
│ │ │ │ │ └── weaviatehybridretriever.mdx
│ │ │ │ ├── retrievers.mdx
│ │ │ │ ├── routers/
│ │ │ │ │ ├── conditionalrouter.mdx
│ │ │ │ │ ├── documentlengthrouter.mdx
│ │ │ │ │ ├── documenttyperouter.mdx
│ │ │ │ │ ├── filetyperouter.mdx
│ │ │ │ │ ├── llmmessagesrouter.mdx
│ │ │ │ │ ├── metadatarouter.mdx
│ │ │ │ │ ├── textlanguagerouter.mdx
│ │ │ │ │ ├── transformerstextrouter.mdx
│ │ │ │ │ └── transformerszeroshottextrouter.mdx
│ │ │ │ ├── routers.mdx
│ │ │ │ ├── samplers/
│ │ │ │ │ └── toppsampler.mdx
│ │ │ │ ├── tools/
│ │ │ │ │ └── toolinvoker.mdx
│ │ │ │ ├── validators/
│ │ │ │ │ └── jsonschemavalidator.mdx
│ │ │ │ ├── websearch/
│ │ │ │ │ ├── external-integrations-websearch.mdx
│ │ │ │ │ ├── searchapiwebsearch.mdx
│ │ │ │ │ └── serperdevwebsearch.mdx
│ │ │ │ ├── websearch.mdx
│ │ │ │ └── writers/
│ │ │ │ └── documentwriter.mdx
│ │ │ └── tools/
│ │ │ ├── componenttool.mdx
│ │ │ ├── mcptool.mdx
│ │ │ ├── mcptoolset.mdx
│ │ │ ├── pipelinetool.mdx
│ │ │ ├── ready-made-tools/
│ │ │ │ ├── githubfileeditortool.mdx
│ │ │ │ ├── githubissuecommentertool.mdx
│ │ │ │ ├── githubissueviewertool.mdx
│ │ │ │ ├── githubprcreatortool.mdx
│ │ │ │ └── githubrepoviewertool.mdx
│ │ │ ├── tool.mdx
│ │ │ └── toolset.mdx
│ │ ├── version-2.25/
│ │ │ ├── _templates/
│ │ │ │ ├── component-template.mdx
│ │ │ │ └── document-store-template.mdx
│ │ │ ├── concepts/
│ │ │ │ ├── agents/
│ │ │ │ │ └── state.mdx
│ │ │ │ ├── agents.mdx
│ │ │ │ ├── components/
│ │ │ │ │ ├── custom-components.mdx
│ │ │ │ │ └── supercomponents.mdx
│ │ │ │ ├── components.mdx
│ │ │ │ ├── concepts-overview.mdx
│ │ │ │ ├── data-classes/
│ │ │ │ │ └── chatmessage.mdx
│ │ │ │ ├── data-classes.mdx
│ │ │ │ ├── device-management.mdx
│ │ │ │ ├── document-store/
│ │ │ │ │ ├── choosing-a-document-store.mdx
│ │ │ │ │ └── creating-custom-document-stores.mdx
│ │ │ │ ├── document-store.mdx
│ │ │ │ ├── experimental-package.mdx
│ │ │ │ ├── integrations.mdx
│ │ │ │ ├── jinja-templates.mdx
│ │ │ │ ├── metadata-filtering.mdx
│ │ │ │ ├── pipelines/
│ │ │ │ │ ├── asyncpipeline.mdx
│ │ │ │ │ ├── creating-pipelines.mdx
│ │ │ │ │ ├── debugging-pipelines.mdx
│ │ │ │ │ ├── pipeline-breakpoints.mdx
│ │ │ │ │ ├── pipeline-loops.mdx
│ │ │ │ │ ├── serialization.mdx
│ │ │ │ │ ├── smart-pipeline-connections.mdx
│ │ │ │ │ └── visualizing-pipelines.mdx
│ │ │ │ ├── pipelines.mdx
│ │ │ │ └── secret-management.mdx
│ │ │ ├── development/
│ │ │ │ ├── deployment/
│ │ │ │ │ ├── docker.mdx
│ │ │ │ │ ├── kubernetes.mdx
│ │ │ │ │ └── openshift.mdx
│ │ │ │ ├── deployment.mdx
│ │ │ │ ├── enabling-gpu-acceleration.mdx
│ │ │ │ ├── external-integrations-development.mdx
│ │ │ │ ├── hayhooks.mdx
│ │ │ │ ├── logging.mdx
│ │ │ │ └── tracing.mdx
│ │ │ ├── document-stores/
│ │ │ │ ├── arcadedbdocumentstore.mdx
│ │ │ │ ├── astradocumentstore.mdx
│ │ │ │ ├── azureaisearchdocumentstore.mdx
│ │ │ │ ├── chromadocumentstore.mdx
│ │ │ │ ├── elasticsearch-document-store.mdx
│ │ │ │ ├── faissdocumentstore.mdx
│ │ │ │ ├── inmemorydocumentstore.mdx
│ │ │ │ ├── mongodbatlasdocumentstore.mdx
│ │ │ │ ├── opensearch-document-store.mdx
│ │ │ │ ├── pgvectordocumentstore.mdx
│ │ │ │ ├── pinecone-document-store.mdx
│ │ │ │ ├── qdrant-document-store.mdx
│ │ │ │ ├── valkeydocumentstore.mdx
│ │ │ │ └── weaviatedocumentstore.mdx
│ │ │ ├── intro.mdx
│ │ │ ├── optimization/
│ │ │ │ ├── advanced-rag-techniques/
│ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx
│ │ │ │ ├── advanced-rag-techniques.mdx
│ │ │ │ ├── evaluation/
│ │ │ │ │ ├── model-based-evaluation.mdx
│ │ │ │ │ └── statistical-evaluation.mdx
│ │ │ │ └── evaluation.mdx
│ │ │ ├── overview/
│ │ │ │ ├── breaking-change-policy.mdx
│ │ │ │ ├── faq.mdx
│ │ │ │ ├── get-started.mdx
│ │ │ │ ├── installation.mdx
│ │ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx
│ │ │ │ ├── migration.mdx
│ │ │ │ └── telemetry.mdx
│ │ │ ├── pipeline-components/
│ │ │ │ ├── agents-1/
│ │ │ │ │ └── agent.mdx
│ │ │ │ ├── audio/
│ │ │ │ │ ├── external-integrations-audio.mdx
│ │ │ │ │ ├── localwhispertranscriber.mdx
│ │ │ │ │ └── remotewhispertranscriber.mdx
│ │ │ │ ├── audio.mdx
│ │ │ │ ├── builders/
│ │ │ │ │ ├── answerbuilder.mdx
│ │ │ │ │ ├── chatpromptbuilder.mdx
│ │ │ │ │ └── promptbuilder.mdx
│ │ │ │ ├── builders.mdx
│ │ │ │ ├── caching/
│ │ │ │ │ └── cachechecker.mdx
│ │ │ │ ├── classifiers/
│ │ │ │ │ ├── documentlanguageclassifier.mdx
│ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx
│ │ │ │ ├── classifiers.mdx
│ │ │ │ ├── connectors/
│ │ │ │ │ ├── external-integrations-connectors.mdx
│ │ │ │ │ ├── githubfileeditor.mdx
│ │ │ │ │ ├── githubissuecommenter.mdx
│ │ │ │ │ ├── githubissueviewer.mdx
│ │ │ │ │ ├── githubprcreator.mdx
│ │ │ │ │ ├── githubrepoforker.mdx
│ │ │ │ │ ├── githubrepoviewer.mdx
│ │ │ │ │ ├── jinareaderconnector.mdx
│ │ │ │ │ ├── langfuseconnector.mdx
│ │ │ │ │ ├── openapiconnector.mdx
│ │ │ │ │ ├── openapiserviceconnector.mdx
│ │ │ │ │ └── weaveconnector.mdx
│ │ │ │ ├── connectors.mdx
│ │ │ │ ├── converters/
│ │ │ │ │ ├── azureocrdocumentconverter.mdx
│ │ │ │ │ ├── csvtodocument.mdx
│ │ │ │ │ ├── documenttoimagecontent.mdx
│ │ │ │ │ ├── docxtodocument.mdx
│ │ │ │ │ ├── external-integrations-converters.mdx
│ │ │ │ │ ├── filetofilecontent.mdx
│ │ │ │ │ ├── htmltodocument.mdx
│ │ │ │ │ ├── imagefiletodocument.mdx
│ │ │ │ │ ├── imagefiletoimagecontent.mdx
│ │ │ │ │ ├── jsonconverter.mdx
│ │ │ │ │ ├── markdowntodocument.mdx
│ │ │ │ │ ├── mistralocrdocumentconverter.mdx
│ │ │ │ │ ├── msgtodocument.mdx
│ │ │ │ │ ├── multifileconverter.mdx
│ │ │ │ │ ├── openapiservicetofunctions.mdx
│ │ │ │ │ ├── outputadapter.mdx
│ │ │ │ │ ├── paddleocrvldocumentconverter.mdx
│ │ │ │ │ ├── pdfminertodocument.mdx
│ │ │ │ │ ├── pdftoimagecontent.mdx
│ │ │ │ │ ├── pptxtodocument.mdx
│ │ │ │ │ ├── pypdftodocument.mdx
│ │ │ │ │ ├── textfiletodocument.mdx
│ │ │ │ │ ├── tikadocumentconverter.mdx
│ │ │ │ │ ├── unstructuredfileconverter.mdx
│ │ │ │ │ └── xlsxtodocument.mdx
│ │ │ │ ├── converters.mdx
│ │ │ │ ├── downloaders/
│ │ │ │ │ └── s3downloader.mdx
│ │ │ │ ├── embedders/
│ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx
│ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx
│ │ │ │ │ ├── amazonbedrocktextembedder.mdx
│ │ │ │ │ ├── azureopenaidocumentembedder.mdx
│ │ │ │ │ ├── azureopenaitextembedder.mdx
│ │ │ │ │ ├── choosing-the-right-embedder.mdx
│ │ │ │ │ ├── coheredocumentembedder.mdx
│ │ │ │ │ ├── coheredocumentimageembedder.mdx
│ │ │ │ │ ├── coheretextembedder.mdx
│ │ │ │ │ ├── external-integrations-embedders.mdx
│ │ │ │ │ ├── fastembeddocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx
│ │ │ │ │ ├── fastembedsparsetextembedder.mdx
│ │ │ │ │ ├── fastembedtextembedder.mdx
│ │ │ │ │ ├── googlegenaidocumentembedder.mdx
│ │ │ │ │ ├── googlegenaimultimodaldocumentembedder.mdx
│ │ │ │ │ ├── googlegenaitextembedder.mdx
│ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx
│ │ │ │ │ ├── huggingfaceapitextembedder.mdx
│ │ │ │ │ ├── jinadocumentembedder.mdx
│ │ │ │ │ ├── jinadocumentimageembedder.mdx
│ │ │ │ │ ├── jinatextembedder.mdx
│ │ │ │ │ ├── mistraldocumentembedder.mdx
│ │ │ │ │ ├── mistraltextembedder.mdx
│ │ │ │ │ ├── nvidiadocumentembedder.mdx
│ │ │ │ │ ├── nvidiatextembedder.mdx
│ │ │ │ │ ├── ollamadocumentembedder.mdx
│ │ │ │ │ ├── ollamatextembedder.mdx
│ │ │ │ │ ├── openaidocumentembedder.mdx
│ │ │ │ │ ├── openaitextembedder.mdx
│ │ │ │ │ ├── optimumdocumentembedder.mdx
│ │ │ │ │ ├── optimumtextembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx
│ │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx
│ │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx
│ │ │ │ │ ├── sentencetransformerstextembedder.mdx
│ │ │ │ │ ├── stackitdocumentembedder.mdx
│ │ │ │ │ ├── stackittextembedder.mdx
│ │ │ │ │ ├── vertexaidocumentembedder.mdx
│ │ │ │ │ ├── vertexaitextembedder.mdx
│ │ │ │ │ ├── watsonxdocumentembedder.mdx
│ │ │ │ │ └── watsonxtextembedder.mdx
│ │ │ │ ├── embedders.mdx
│ │ │ │ ├── evaluators/
│ │ │ │ │ ├── answerexactmatchevaluator.mdx
│ │ │ │ │ ├── contextrelevanceevaluator.mdx
│ │ │ │ │ ├── deepevalevaluator.mdx
│ │ │ │ │ ├── documentmapevaluator.mdx
│ │ │ │ │ ├── documentmrrevaluator.mdx
│ │ │ │ │ ├── documentndcgevaluator.mdx
│ │ │ │ │ ├── documentrecallevaluator.mdx
│ │ │ │ │ ├── external-integrations-evaluators.mdx
│ │ │ │ │ ├── faithfulnessevaluator.mdx
│ │ │ │ │ ├── llmevaluator.mdx
│ │ │ │ │ ├── ragasevaluator.mdx
│ │ │ │ │ └── sasevaluator.mdx
│ │ │ │ ├── evaluators.mdx
│ │ │ │ ├── extractors/
│ │ │ │ │ ├── llmdocumentcontentextractor.mdx
│ │ │ │ │ ├── llmmetadataextractor.mdx
│ │ │ │ │ ├── namedentityextractor.mdx
│ │ │ │ │ └── regextextextractor.mdx
│ │ │ │ ├── extractors.mdx
│ │ │ │ ├── fetchers/
│ │ │ │ │ ├── external-integrations-fetchers.mdx
│ │ │ │ │ ├── firecrawlcrawler.mdx
│ │ │ │ │ └── linkcontentfetcher.mdx
│ │ │ │ ├── fetchers.mdx
│ │ │ │ ├── generators/
│ │ │ │ │ ├── aimllapichatgenerator.mdx
│ │ │ │ │ ├── amazonbedrockchatgenerator.mdx
│ │ │ │ │ ├── amazonbedrockgenerator.mdx
│ │ │ │ │ ├── anthropicchatgenerator.mdx
│ │ │ │ │ ├── anthropicgenerator.mdx
│ │ │ │ │ ├── anthropicvertexchatgenerator.mdx
│ │ │ │ │ ├── azureopenaichatgenerator.mdx
│ │ │ │ │ ├── azureopenaigenerator.mdx
│ │ │ │ │ ├── azureopenairesponseschatgenerator.mdx
│ │ │ │ │ ├── coherechatgenerator.mdx
│ │ │ │ │ ├── coheregenerator.mdx
│ │ │ │ │ ├── cometapichatgenerator.mdx
│ │ │ │ │ ├── dalleimagegenerator.mdx
│ │ │ │ │ ├── external-integrations-generators.mdx
│ │ │ │ │ ├── fallbackchatgenerator.mdx
│ │ │ │ │ ├── googleaigeminichatgenerator.mdx
│ │ │ │ │ ├── googleaigeminigenerator.mdx
│ │ │ │ │ ├── googlegenaichatgenerator.mdx
│ │ │ │ │ ├── guides-to-generators/
│ │ │ │ │ │ ├── choosing-the-right-generator.mdx
│ │ │ │ │ │ ├── function-calling.mdx
│ │ │ │ │ │ └── generators-vs-chat-generators.mdx
│ │ │ │ │ ├── huggingfaceapichatgenerator.mdx
│ │ │ │ │ ├── huggingfaceapigenerator.mdx
│ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx
│ │ │ │ │ ├── huggingfacelocalgenerator.mdx
│ │ │ │ │ ├── llamacppchatgenerator.mdx
│ │ │ │ │ ├── llamacppgenerator.mdx
│ │ │ │ │ ├── llamastackchatgenerator.mdx
│ │ │ │ │ ├── metallamachatgenerator.mdx
│ │ │ │ │ ├── mistralchatgenerator.mdx
│ │ │ │ │ ├── nvidiachatgenerator.mdx
│ │ │ │ │ ├── nvidiagenerator.mdx
│ │ │ │ │ ├── ollamachatgenerator.mdx
│ │ │ │ │ ├── ollamagenerator.mdx
│ │ │ │ │ ├── openaichatgenerator.mdx
│ │ │ │ │ ├── openaigenerator.mdx
│ │ │ │ │ ├── openairesponseschatgenerator.mdx
│ │ │ │ │ ├── openrouterchatgenerator.mdx
│ │ │ │ │ ├── sagemakergenerator.mdx
│ │ │ │ │ ├── stackitchatgenerator.mdx
│ │ │ │ │ ├── togetheraichatgenerator.mdx
│ │ │ │ │ ├── togetheraigenerator.mdx
│ │ │ │ │ ├── vertexaicodegenerator.mdx
│ │ │ │ │ ├── vertexaigeminichatgenerator.mdx
│ │ │ │ │ ├── vertexaigeminigenerator.mdx
│ │ │ │ │ ├── vertexaiimagecaptioner.mdx
│ │ │ │ │ ├── vertexaiimagegenerator.mdx
│ │ │ │ │ ├── vertexaiimageqa.mdx
│ │ │ │ │ ├── vertexaitextgenerator.mdx
│ │ │ │ │ ├── watsonxchatgenerator.mdx
│ │ │ │ │ └── watsonxgenerator.mdx
│ │ │ │ ├── generators.mdx
│ │ │ │ ├── joiners/
│ │ │ │ │ ├── answerjoiner.mdx
│ │ │ │ │ ├── branchjoiner.mdx
│ │ │ │ │ ├── documentjoiner.mdx
│ │ │ │ │ ├── listjoiner.mdx
│ │ │ │ │ └── stringjoiner.mdx
│ │ │ │ ├── joiners.mdx
│ │ │ │ ├── preprocessors/
│ │ │ │ │ ├── chinesedocumentsplitter.mdx
│ │ │ │ │ ├── csvdocumentcleaner.mdx
│ │ │ │ │ ├── csvdocumentsplitter.mdx
│ │ │ │ │ ├── documentcleaner.mdx
│ │ │ │ │ ├── documentpreprocessor.mdx
│ │ │ │ │ ├── documentsplitter.mdx
│ │ │ │ │ ├── embeddingbaseddocumentsplitter.mdx
│ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx
│ │ │ │ │ ├── markdownheadersplitter.mdx
│ │ │ │ │ ├── recursivesplitter.mdx
│ │ │ │ │ └── textcleaner.mdx
│ │ │ │ ├── preprocessors.mdx
│ │ │ │ ├── query/
│ │ │ │ │ └── queryexpander.mdx
│ │ │ │ ├── rankers/
│ │ │ │ │ ├── amazonbedrockranker.mdx
│ │ │ │ │ ├── choosing-the-right-ranker.mdx
│ │ │ │ │ ├── cohereranker.mdx
│ │ │ │ │ ├── external-integrations-rankers.mdx
│ │ │ │ │ ├── fastembedranker.mdx
│ │ │ │ │ ├── huggingfaceteiranker.mdx
│ │ │ │ │ ├── jinaranker.mdx
│ │ │ │ │ ├── lostinthemiddleranker.mdx
│ │ │ │ │ ├── metafieldgroupingranker.mdx
│ │ │ │ │ ├── metafieldranker.mdx
│ │ │ │ │ ├── nvidiaranker.mdx
│ │ │ │ │ ├── pyversityranker.mdx
│ │ │ │ │ ├── sentencetransformersdiversityranker.mdx
│ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx
│ │ │ │ │ └── transformerssimilarityranker.mdx
│ │ │ │ ├── rankers.mdx
│ │ │ │ ├── readers/
│ │ │ │ │ └── extractivereader.mdx
│ │ │ │ ├── readers.mdx
│ │ │ │ ├── retrievers/
│ │ │ │ │ ├── arcadedbembeddingretriever.mdx
│ │ │ │ │ ├── astraretriever.mdx
│ │ │ │ │ ├── automergingretriever.mdx
│ │ │ │ │ ├── azureaisearchbm25retriever.mdx
│ │ │ │ │ ├── azureaisearchembeddingretriever.mdx
│ │ │ │ │ ├── azureaisearchhybridretriever.mdx
│ │ │ │ │ ├── chromaembeddingretriever.mdx
│ │ │ │ │ ├── chromaqueryretriever.mdx
│ │ │ │ │ ├── elasticsearchbm25retriever.mdx
│ │ │ │ │ ├── elasticsearchembeddingretriever.mdx
│ │ │ │ │ ├── faissembeddingretriever.mdx
│ │ │ │ │ ├── filterretriever.mdx
│ │ │ │ │ ├── inmemorybm25retriever.mdx
│ │ │ │ │ ├── inmemoryembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx
│ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx
│ │ │ │ │ ├── multiqueryembeddingretriever.mdx
│ │ │ │ │ ├── multiquerytextretriever.mdx
│ │ │ │ │ ├── opensearchbm25retriever.mdx
│ │ │ │ │ ├── opensearchembeddingretriever.mdx
│ │ │ │ │ ├── opensearchhybridretriever.mdx
│ │ │ │ │ ├── pgvectorembeddingretriever.mdx
│ │ │ │ │ ├── pgvectorkeywordretriever.mdx
│ │ │ │ │ ├── pineconedenseretriever.mdx
│ │ │ │ │ ├── qdrantembeddingretriever.mdx
│ │ │ │ │ ├── qdranthybridretriever.mdx
│ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx
│ │ │ │ │ ├── sentencewindowretrieval.mdx
│ │ │ │ │ ├── snowflaketableretriever.mdx
│ │ │ │ │ ├── valkeyembeddingretriever.mdx
│ │ │ │ │ ├── weaviatebm25retriever.mdx
│ │ │ │ │ ├── weaviateembeddingretriever.mdx
│ │ │ │ │ └── weaviatehybridretriever.mdx
│ │ │ │ ├── retrievers.mdx
│ │ │ │ ├── routers/
│ │ │ │ │ ├── conditionalrouter.mdx
│ │ │ │ │ ├── documentlengthrouter.mdx
│ │ │ │ │ ├── documenttyperouter.mdx
│ │ │ │ │ ├── filetyperouter.mdx
│ │ │ │ │ ├── llmmessagesrouter.mdx
│ │ │ │ │ ├── metadatarouter.mdx
│ │ │ │ │ ├── textlanguagerouter.mdx
│ │ │ │ │ ├── transformerstextrouter.mdx
│ │ │ │ │ └── transformerszeroshottextrouter.mdx
│ │ │ │ ├── routers.mdx
│ │ │ │ ├── samplers/
│ │ │ │ │ └── toppsampler.mdx
│ │ │ │ ├── tools/
│ │ │ │ │ └── toolinvoker.mdx
│ │ │ │ ├── translators/
│ │ │ │ │ └── laradocumenttranslator.mdx
│ │ │ │ ├── validators/
│ │ │ │ │ └── jsonschemavalidator.mdx
│ │ │ │ ├── websearch/
│ │ │ │ │ ├── external-integrations-websearch.mdx
│ │ │ │ │ ├── firecrawlwebsearch.mdx
│ │ │ │ │ ├── searchapiwebsearch.mdx
│ │ │ │ │ └── serperdevwebsearch.mdx
│ │ │ │ ├── websearch.mdx
│ │ │ │ └── writers/
│ │ │ │ └── documentwriter.mdx
│ │ │ └── tools/
│ │ │ ├── componenttool.mdx
│ │ │ ├── mcptool.mdx
│ │ │ ├── mcptoolset.mdx
│ │ │ ├── pipelinetool.mdx
│ │ │ ├── ready-made-tools/
│ │ │ │ ├── githubfileeditortool.mdx
│ │ │ │ ├── githubissuecommentertool.mdx
│ │ │ │ ├── githubissueviewertool.mdx
│ │ │ │ ├── githubprcreatortool.mdx
│ │ │ │ └── githubrepoviewertool.mdx
│ │ │ ├── searchabletoolset.mdx
│ │ │ ├── tool.mdx
│ │ │ └── toolset.mdx
│ │ └── version-2.26/
│ │ ├── _templates/
│ │ │ ├── component-template.mdx
│ │ │ └── document-store-template.mdx
│ │ ├── concepts/
│ │ │ ├── agents/
│ │ │ │ └── state.mdx
│ │ │ ├── agents.mdx
│ │ │ ├── components/
│ │ │ │ ├── custom-components.mdx
│ │ │ │ └── supercomponents.mdx
│ │ │ ├── components.mdx
│ │ │ ├── concepts-overview.mdx
│ │ │ ├── data-classes/
│ │ │ │ └── chatmessage.mdx
│ │ │ ├── data-classes.mdx
│ │ │ ├── device-management.mdx
│ │ │ ├── document-store/
│ │ │ │ ├── choosing-a-document-store.mdx
│ │ │ │ └── creating-custom-document-stores.mdx
│ │ │ ├── document-store.mdx
│ │ │ ├── experimental-package.mdx
│ │ │ ├── integrations.mdx
│ │ │ ├── jinja-templates.mdx
│ │ │ ├── metadata-filtering.mdx
│ │ │ ├── pipelines/
│ │ │ │ ├── asyncpipeline.mdx
│ │ │ │ ├── creating-pipelines.mdx
│ │ │ │ ├── debugging-pipelines.mdx
│ │ │ │ ├── pipeline-breakpoints.mdx
│ │ │ │ ├── pipeline-loops.mdx
│ │ │ │ ├── serialization.mdx
│ │ │ │ ├── smart-pipeline-connections.mdx
│ │ │ │ └── visualizing-pipelines.mdx
│ │ │ ├── pipelines.mdx
│ │ │ └── secret-management.mdx
│ │ ├── development/
│ │ │ ├── deployment/
│ │ │ │ ├── docker.mdx
│ │ │ │ ├── kubernetes.mdx
│ │ │ │ └── openshift.mdx
│ │ │ ├── deployment.mdx
│ │ │ ├── enabling-gpu-acceleration.mdx
│ │ │ ├── external-integrations-development.mdx
│ │ │ ├── hayhooks.mdx
│ │ │ ├── logging.mdx
│ │ │ └── tracing.mdx
│ │ ├── document-stores/
│ │ │ ├── arcadedbdocumentstore.mdx
│ │ │ ├── astradocumentstore.mdx
│ │ │ ├── azureaisearchdocumentstore.mdx
│ │ │ ├── chromadocumentstore.mdx
│ │ │ ├── elasticsearch-document-store.mdx
│ │ │ ├── faissdocumentstore.mdx
│ │ │ ├── inmemorydocumentstore.mdx
│ │ │ ├── mongodbatlasdocumentstore.mdx
│ │ │ ├── opensearch-document-store.mdx
│ │ │ ├── pgvectordocumentstore.mdx
│ │ │ ├── pinecone-document-store.mdx
│ │ │ ├── qdrant-document-store.mdx
│ │ │ ├── valkeydocumentstore.mdx
│ │ │ └── weaviatedocumentstore.mdx
│ │ ├── intro.mdx
│ │ ├── optimization/
│ │ │ ├── advanced-rag-techniques/
│ │ │ │ └── hypothetical-document-embeddings-hyde.mdx
│ │ │ ├── advanced-rag-techniques.mdx
│ │ │ ├── evaluation/
│ │ │ │ ├── model-based-evaluation.mdx
│ │ │ │ └── statistical-evaluation.mdx
│ │ │ └── evaluation.mdx
│ │ ├── overview/
│ │ │ ├── breaking-change-policy.mdx
│ │ │ ├── faq.mdx
│ │ │ ├── get-started.mdx
│ │ │ ├── installation.mdx
│ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx
│ │ │ ├── migration.mdx
│ │ │ └── telemetry.mdx
│ │ ├── pipeline-components/
│ │ │ ├── agents-1/
│ │ │ │ └── agent.mdx
│ │ │ ├── audio/
│ │ │ │ ├── external-integrations-audio.mdx
│ │ │ │ ├── localwhispertranscriber.mdx
│ │ │ │ └── remotewhispertranscriber.mdx
│ │ │ ├── audio.mdx
│ │ │ ├── builders/
│ │ │ │ ├── answerbuilder.mdx
│ │ │ │ ├── chatpromptbuilder.mdx
│ │ │ │ └── promptbuilder.mdx
│ │ │ ├── builders.mdx
│ │ │ ├── caching/
│ │ │ │ └── cachechecker.mdx
│ │ │ ├── classifiers/
│ │ │ │ ├── documentlanguageclassifier.mdx
│ │ │ │ └── transformerszeroshotdocumentclassifier.mdx
│ │ │ ├── classifiers.mdx
│ │ │ ├── connectors/
│ │ │ │ ├── external-integrations-connectors.mdx
│ │ │ │ ├── githubfileeditor.mdx
│ │ │ │ ├── githubissuecommenter.mdx
│ │ │ │ ├── githubissueviewer.mdx
│ │ │ │ ├── githubprcreator.mdx
│ │ │ │ ├── githubrepoforker.mdx
│ │ │ │ ├── githubrepoviewer.mdx
│ │ │ │ ├── jinareaderconnector.mdx
│ │ │ │ ├── langfuseconnector.mdx
│ │ │ │ ├── openapiconnector.mdx
│ │ │ │ ├── openapiserviceconnector.mdx
│ │ │ │ └── weaveconnector.mdx
│ │ │ ├── connectors.mdx
│ │ │ ├── converters/
│ │ │ │ ├── azureocrdocumentconverter.mdx
│ │ │ │ ├── csvtodocument.mdx
│ │ │ │ ├── documenttoimagecontent.mdx
│ │ │ │ ├── docxtodocument.mdx
│ │ │ │ ├── external-integrations-converters.mdx
│ │ │ │ ├── filetofilecontent.mdx
│ │ │ │ ├── htmltodocument.mdx
│ │ │ │ ├── imagefiletodocument.mdx
│ │ │ │ ├── imagefiletoimagecontent.mdx
│ │ │ │ ├── jsonconverter.mdx
│ │ │ │ ├── markdowntodocument.mdx
│ │ │ │ ├── mistralocrdocumentconverter.mdx
│ │ │ │ ├── msgtodocument.mdx
│ │ │ │ ├── multifileconverter.mdx
│ │ │ │ ├── openapiservicetofunctions.mdx
│ │ │ │ ├── outputadapter.mdx
│ │ │ │ ├── paddleocrvldocumentconverter.mdx
│ │ │ │ ├── pdfminertodocument.mdx
│ │ │ │ ├── pdftoimagecontent.mdx
│ │ │ │ ├── pptxtodocument.mdx
│ │ │ │ ├── pypdftodocument.mdx
│ │ │ │ ├── textfiletodocument.mdx
│ │ │ │ ├── tikadocumentconverter.mdx
│ │ │ │ ├── unstructuredfileconverter.mdx
│ │ │ │ └── xlsxtodocument.mdx
│ │ │ ├── converters.mdx
│ │ │ ├── downloaders/
│ │ │ │ └── s3downloader.mdx
│ │ │ ├── embedders/
│ │ │ │ ├── amazonbedrockdocumentembedder.mdx
│ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx
│ │ │ │ ├── amazonbedrocktextembedder.mdx
│ │ │ │ ├── azureopenaidocumentembedder.mdx
│ │ │ │ ├── azureopenaitextembedder.mdx
│ │ │ │ ├── choosing-the-right-embedder.mdx
│ │ │ │ ├── coheredocumentembedder.mdx
│ │ │ │ ├── coheredocumentimageembedder.mdx
│ │ │ │ ├── coheretextembedder.mdx
│ │ │ │ ├── external-integrations-embedders.mdx
│ │ │ │ ├── fastembeddocumentembedder.mdx
│ │ │ │ ├── fastembedsparsedocumentembedder.mdx
│ │ │ │ ├── fastembedsparsetextembedder.mdx
│ │ │ │ ├── fastembedtextembedder.mdx
│ │ │ │ ├── googlegenaidocumentembedder.mdx
│ │ │ │ ├── googlegenaimultimodaldocumentembedder.mdx
│ │ │ │ ├── googlegenaitextembedder.mdx
│ │ │ │ ├── huggingfaceapidocumentembedder.mdx
│ │ │ │ ├── huggingfaceapitextembedder.mdx
│ │ │ │ ├── jinadocumentembedder.mdx
│ │ │ │ ├── jinadocumentimageembedder.mdx
│ │ │ │ ├── jinatextembedder.mdx
│ │ │ │ ├── mistraldocumentembedder.mdx
│ │ │ │ ├── mistraltextembedder.mdx
│ │ │ │ ├── nvidiadocumentembedder.mdx
│ │ │ │ ├── nvidiatextembedder.mdx
│ │ │ │ ├── ollamadocumentembedder.mdx
│ │ │ │ ├── ollamatextembedder.mdx
│ │ │ │ ├── openaidocumentembedder.mdx
│ │ │ │ ├── openaitextembedder.mdx
│ │ │ │ ├── optimumdocumentembedder.mdx
│ │ │ │ ├── optimumtextembedder.mdx
│ │ │ │ ├── sentencetransformersdocumentembedder.mdx
│ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx
│ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx
│ │ │ │ ├── sentencetransformerssparsetextembedder.mdx
│ │ │ │ ├── sentencetransformerstextembedder.mdx
│ │ │ │ ├── stackitdocumentembedder.mdx
│ │ │ │ ├── stackittextembedder.mdx
│ │ │ │ ├── vertexaidocumentembedder.mdx
│ │ │ │ ├── vertexaitextembedder.mdx
│ │ │ │ ├── watsonxdocumentembedder.mdx
│ │ │ │ └── watsonxtextembedder.mdx
│ │ │ ├── embedders.mdx
│ │ │ ├── evaluators/
│ │ │ │ ├── answerexactmatchevaluator.mdx
│ │ │ │ ├── contextrelevanceevaluator.mdx
│ │ │ │ ├── deepevalevaluator.mdx
│ │ │ │ ├── documentmapevaluator.mdx
│ │ │ │ ├── documentmrrevaluator.mdx
│ │ │ │ ├── documentndcgevaluator.mdx
│ │ │ │ ├── documentrecallevaluator.mdx
│ │ │ │ ├── external-integrations-evaluators.mdx
│ │ │ │ ├── faithfulnessevaluator.mdx
│ │ │ │ ├── llmevaluator.mdx
│ │ │ │ ├── ragasevaluator.mdx
│ │ │ │ └── sasevaluator.mdx
│ │ │ ├── evaluators.mdx
│ │ │ ├── extractors/
│ │ │ │ ├── llmdocumentcontentextractor.mdx
│ │ │ │ ├── llmmetadataextractor.mdx
│ │ │ │ ├── namedentityextractor.mdx
│ │ │ │ └── regextextextractor.mdx
│ │ │ ├── extractors.mdx
│ │ │ ├── fetchers/
│ │ │ │ ├── external-integrations-fetchers.mdx
│ │ │ │ ├── firecrawlcrawler.mdx
│ │ │ │ └── linkcontentfetcher.mdx
│ │ │ ├── fetchers.mdx
│ │ │ ├── generators/
│ │ │ │ ├── aimllapichatgenerator.mdx
│ │ │ │ ├── amazonbedrockchatgenerator.mdx
│ │ │ │ ├── amazonbedrockgenerator.mdx
│ │ │ │ ├── anthropicchatgenerator.mdx
│ │ │ │ ├── anthropicgenerator.mdx
│ │ │ │ ├── anthropicvertexchatgenerator.mdx
│ │ │ │ ├── azureopenaichatgenerator.mdx
│ │ │ │ ├── azureopenaigenerator.mdx
│ │ │ │ ├── azureopenairesponseschatgenerator.mdx
│ │ │ │ ├── coherechatgenerator.mdx
│ │ │ │ ├── coheregenerator.mdx
│ │ │ │ ├── cometapichatgenerator.mdx
│ │ │ │ ├── dalleimagegenerator.mdx
│ │ │ │ ├── external-integrations-generators.mdx
│ │ │ │ ├── fallbackchatgenerator.mdx
│ │ │ │ ├── googleaigeminichatgenerator.mdx
│ │ │ │ ├── googleaigeminigenerator.mdx
│ │ │ │ ├── googlegenaichatgenerator.mdx
│ │ │ │ ├── guides-to-generators/
│ │ │ │ │ ├── choosing-the-right-generator.mdx
│ │ │ │ │ ├── function-calling.mdx
│ │ │ │ │ └── generators-vs-chat-generators.mdx
│ │ │ │ ├── huggingfaceapichatgenerator.mdx
│ │ │ │ ├── huggingfaceapigenerator.mdx
│ │ │ │ ├── huggingfacelocalchatgenerator.mdx
│ │ │ │ ├── huggingfacelocalgenerator.mdx
│ │ │ │ ├── llamacppchatgenerator.mdx
│ │ │ │ ├── llamacppgenerator.mdx
│ │ │ │ ├── llamastackchatgenerator.mdx
│ │ │ │ ├── metallamachatgenerator.mdx
│ │ │ │ ├── mistralchatgenerator.mdx
│ │ │ │ ├── nvidiachatgenerator.mdx
│ │ │ │ ├── nvidiagenerator.mdx
│ │ │ │ ├── ollamachatgenerator.mdx
│ │ │ │ ├── ollamagenerator.mdx
│ │ │ │ ├── openaichatgenerator.mdx
│ │ │ │ ├── openaigenerator.mdx
│ │ │ │ ├── openairesponseschatgenerator.mdx
│ │ │ │ ├── openrouterchatgenerator.mdx
│ │ │ │ ├── sagemakergenerator.mdx
│ │ │ │ ├── stackitchatgenerator.mdx
│ │ │ │ ├── togetheraichatgenerator.mdx
│ │ │ │ ├── togetheraigenerator.mdx
│ │ │ │ ├── vertexaicodegenerator.mdx
│ │ │ │ ├── vertexaigeminichatgenerator.mdx
│ │ │ │ ├── vertexaigeminigenerator.mdx
│ │ │ │ ├── vertexaiimagecaptioner.mdx
│ │ │ │ ├── vertexaiimagegenerator.mdx
│ │ │ │ ├── vertexaiimageqa.mdx
│ │ │ │ ├── vertexaitextgenerator.mdx
│ │ │ │ ├── watsonxchatgenerator.mdx
│ │ │ │ └── watsonxgenerator.mdx
│ │ │ ├── generators.mdx
│ │ │ ├── joiners/
│ │ │ │ ├── answerjoiner.mdx
│ │ │ │ ├── branchjoiner.mdx
│ │ │ │ ├── documentjoiner.mdx
│ │ │ │ ├── listjoiner.mdx
│ │ │ │ └── stringjoiner.mdx
│ │ │ ├── joiners.mdx
│ │ │ ├── preprocessors/
│ │ │ │ ├── chinesedocumentsplitter.mdx
│ │ │ │ ├── csvdocumentcleaner.mdx
│ │ │ │ ├── csvdocumentsplitter.mdx
│ │ │ │ ├── documentcleaner.mdx
│ │ │ │ ├── documentpreprocessor.mdx
│ │ │ │ ├── documentsplitter.mdx
│ │ │ │ ├── embeddingbaseddocumentsplitter.mdx
│ │ │ │ ├── hierarchicaldocumentsplitter.mdx
│ │ │ │ ├── markdownheadersplitter.mdx
│ │ │ │ ├── recursivesplitter.mdx
│ │ │ │ └── textcleaner.mdx
│ │ │ ├── preprocessors.mdx
│ │ │ ├── query/
│ │ │ │ └── queryexpander.mdx
│ │ │ ├── rankers/
│ │ │ │ ├── amazonbedrockranker.mdx
│ │ │ │ ├── choosing-the-right-ranker.mdx
│ │ │ │ ├── cohereranker.mdx
│ │ │ │ ├── external-integrations-rankers.mdx
│ │ │ │ ├── fastembedranker.mdx
│ │ │ │ ├── huggingfaceteiranker.mdx
│ │ │ │ ├── jinaranker.mdx
│ │ │ │ ├── llmranker.mdx
│ │ │ │ ├── lostinthemiddleranker.mdx
│ │ │ │ ├── metafieldgroupingranker.mdx
│ │ │ │ ├── metafieldranker.mdx
│ │ │ │ ├── nvidiaranker.mdx
│ │ │ │ ├── pyversityranker.m
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/CODEOWNERS
================================================
# See https://help.github.com/articles/about-codeowners/ for syntax
# Core Engineering will be the default owners for everything
# in the repo. Unless a later match takes precedence,
# @deepset-ai/core-engineering will be requested for review
# when someone opens a pull request.
* @deepset-ai/open-source-engineering
# Documentation
*.md @deepset-ai/documentation @deepset-ai/open-source-engineering
# Auto-synced API reference (no human reviewers needed, auto-approved by GitHub bot)
docs-website/reference/
docs-website/reference_versioned_docs/
================================================
FILE: .github/ISSUE_TEMPLATE/breaking-change-proposal.md
================================================
---
name: Breaking change proposal
about: Track a breaking change in Haystack
title: ''
labels: breaking change
assignees: ''
---
## Summary and motivation
Briefly explain how the change is breaking and why it is needed.
## Checklist
### Tasks
- [ ] The changes are merged in the `main` branch (Code + Docstrings)
- [ ] Release notes have documented the breaking change
- [ ] A new version of `haystack-ai` has been released on PyPI
- [ ] Docs at https://docs.haystack.deepset.ai/ were updated
- [ ] Integrations on [haystack-core-integrations](https://github.com/deepset-ai/haystack-core-integrations) were updated (if needed) - This step might require a [Breaking change proposal](https://github.com/deepset-ai/haystack-core-integrations/issues/new?assignees=&labels=breaking+change&projects=&template=breaking-change-proposal.md&title=) on the repo
- [ ] Notebooks on https://github.com/deepset-ai/haystack-cookbook were updated (if needed)
- [ ] Tutorials on https://github.com/deepset-ai/haystack-tutorials were updated (if needed)
- [ ] Articles on https://github.com/deepset-ai/haystack-home/tree/main/content were updated (if needed)
- [ ] Integration tile on https://github.com/deepset-ai/haystack-integrations was updated (if needed)
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Errors you encountered
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**Error message**
Error that was thrown (if available)
**Expected behavior**
A clear and concise description of what you expected to happen.
**Additional context**
Add any other context about the problem here, like document types / preprocessing steps / settings of reader etc.
**To Reproduce**
Steps to reproduce the behavior
**FAQ Check**
- [ ] Have you had a look at [our new FAQ page](https://docs.haystack.deepset.ai/docs/faq)?
**System:**
- OS:
- GPU/CPU:
- Haystack version (commit or version number):
- DocumentStore:
- Reader:
- Retriever:
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: true
contact_links:
- name: Something unclear? Just ask :)
url: https://github.com/deepset-ai/haystack/discussions/new
about: Start a Github discussion with your question
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'daily'
================================================
FILE: .github/labeler.yml
================================================
# Release lines
1.x:
- base-branch: 'v1.x'
# Proposals
proposal:
- changed-files:
- any-glob-to-any-file: proposals/text/*
# Topics
topic:tests:
- changed-files:
- any-glob-to-any-file: ['test/**/*','test/*']
topic:docker:
- changed-files:
- any-glob-to-any-file: docker/*
topic:CI:
- changed-files:
- any-glob-to-any-file: ['.github/*','.github/**/*']
topic:DX:
- changed-files:
- any-glob-to-any-file: ["CONTRIBUTING.md", ".pre-commit-config.yaml",".gitignore"]
topic:build/distribution:
- changed-files:
- any-glob-to-any-file: pyproject.toml
topic:security:
- changed-files:
- any-glob-to-any-file: SECURITY.md
topic:core:
- changed-files:
- any-glob-to-any-file: haystack/core/**/*
================================================
FILE: .github/pull_request_template.md
================================================
### Related Issues
- fixes #issue-number
### Proposed Changes:
<!--- In case of a bug: Describe what caused the issue and how you solved it -->
<!--- In case of a feature: Describe what did you add and how it works -->
### How did you test it?
<!-- unit tests, integration tests, manual verification, instructions for manual tests -->
### Notes for the reviewer
<!-- E.g. point out section where the reviewer -->
### Checklist
- I have read the [contributors guidelines](https://github.com/deepset-ai/haystack/blob/main/CONTRIBUTING.md) and the [code of conduct](https://github.com/deepset-ai/haystack/blob/main/code_of_conduct.txt).
- I have updated the related issue with new insights and changes.
- I have added unit tests and updated the docstrings.
- I've used one of the [conventional commit types](https://www.conventionalcommits.org/en/v1.0.0/) for my PR title: `fix:`, `feat:`, `build:`, `chore:`, `ci:`, `docs:`, `style:`, `refactor:`, `perf:`, `test:` and added `!` in case the PR includes breaking changes.
- I have documented my code.
- I have added a release note file, following the [contributors guidelines](https://github.com/deepset-ai/haystack/blob/main/CONTRIBUTING.md#release-notes).
- I have run [pre-commit hooks](https://github.com/deepset-ai/haystack/blob/main/CONTRIBUTING.md#installation) and fixed any issue.
================================================
FILE: .github/utils/check_imports.py
================================================
import importlib
import os
import sys
import traceback
from pathlib import Path
from haystack import logging # noqa: F401 # this is needed to avoid circular imports
def validate_module_imports(root_dir: str, exclude_subdirs: list[str] | None = None) -> tuple[list, list]:
"""
Recursively search for all Python modules and attempt to import them.
This includes both packages (directories with __init__.py) and individual Python files.
"""
imported = []
failed = []
exclude_subdirs = (exclude_subdirs or []) + ["__pycache__"]
# Add the root directory to the Python path
sys.path.insert(0, root_dir)
base_path = Path(root_dir)
for root, _, files in os.walk(root_dir):
if any(subdir in root for subdir in exclude_subdirs):
continue
# Convert path to module format
module_path = ".".join(Path(root).relative_to(base_path.parent).parts)
python_files = [f for f in files if f.endswith(".py")]
# Try importing package and individual files
for file in python_files:
try:
if file == "__init__.py":
module_to_import = module_path
else:
module_name = os.path.splitext(file)[0]
module_to_import = f"{module_path}.{module_name}" if module_path else module_name
importlib.import_module(module_to_import)
imported.append(module_to_import)
except Exception:
failed.append({"module": module_to_import, "traceback": traceback.format_exc()})
return imported, failed
def main() -> None:
"""
This script checks that all Haystack modules can be imported successfully.
This includes both packages and individual Python files.
This can detect several issues, such as:
- Syntax errors in Python files
- Missing dependencies
- Circular imports
- Incorrect type hints without forward references
"""
# Add any subdirectories you want to skip during import checks ("__pycache__" is skipped by default)
exclude_subdirs = ["testing"]
print("Checking imports from all Haystack modules...")
imported, failed = validate_module_imports(root_dir="haystack", exclude_subdirs=exclude_subdirs)
if not imported:
print("\nNO MODULES WERE IMPORTED")
sys.exit(1)
print(f"\nSUCCESSFULLY IMPORTED {len(imported)} MODULES")
if failed:
print(f"\nFAILED TO IMPORT {len(failed)} MODULES:")
for fail in failed:
print(f" - {fail['module']}")
print("\nERRORS:")
for fail in failed:
print(f" - {fail['module']}\n")
print(f" {fail['traceback']}\n\n")
sys.exit(1)
if __name__ == "__main__":
main()
================================================
FILE: .github/utils/create_unstable_docs_docusaurus.py
================================================
"""
This script creates an unstable documentation version at the time of branch-off for a new Haystack release.
Between branch-off and the actual release, two unstable doc versions coexist.
If we branch off for 2.20, we have:
1. the target unstable version, 2.20-unstable (lives in docs-website/versioned_docs/version-2.20-unstable)
2. the next unstable version, 2.21-unstable (lives in docs-website/docs)
This script takes care of all the necessary updates to the documentation website.
"""
import argparse
import json
import os
import re
import shutil
import subprocess
import sys
import tempfile
VERSION_VALIDATOR = re.compile(r"^[0-9]+\.[0-9]+$")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"-v", "--new-version", help="The new unstable version that is being created (e.g. 2.20).", required=True
)
args = parser.parse_args()
if VERSION_VALIDATOR.match(args.new_version) is None:
sys.exit("Version must be formatted like so <major>.<minor>")
target_version = f"{args.new_version}" # e.g., "2.20" - the target release version
major, minor = args.new_version.split(".")
target_unstable = f"{target_version}-unstable" # e.g., "2.20-unstable"
next_unstable = f"{major}.{int(minor) + 1}-unstable" # e.g., "2.21-unstable" - next cycle
versions = [
folder.replace("version-", "")
for folder in os.listdir("docs-website/versioned_docs")
if os.path.isdir(os.path.join("docs-website/versioned_docs", folder))
]
# Check if the versions we're about to create already exist in versioned_docs
if target_version in versions:
sys.exit(f"{target_version} already exists (already released). Aborting.")
if target_unstable in versions:
print(f"{target_unstable} already exists. Nothing to do.")
sys.exit(0)
# Create new unstable from the currently existing one.
# The new unstable will be made stable at a later time by another workflow
print(f"Creating new unstable version {target_unstable} from main")
### Docusaurus updates
# copy docs to versioned_docs/version-target_unstable
shutil.copytree("docs-website/docs", f"docs-website/versioned_docs/version-{target_unstable}")
# copy reference to reference_versioned_docs/version-target_unstable
shutil.copytree("docs-website/reference", f"docs-website/reference_versioned_docs/version-{target_unstable}")
# generate versioned_sidebars/version-target_unstable-sidebars.json from the current sidebars.js
with tempfile.NamedTemporaryFile(suffix=".json", delete=False) as tmp:
tmp_path = tmp.name
subprocess.run(
["node", "docs-website/scripts/extract_sidebar.mjs", "docs-website/sidebars.js", tmp_path], check=True
)
docs_sidebar_dest = f"docs-website/versioned_sidebars/version-{target_unstable}-sidebars.json"
shutil.move(tmp_path, docs_sidebar_dest)
# generate reference_versioned_sidebars/version-target_unstable-sidebars.json from the current reference-sidebars.js
ref_sidebar_dest = f"docs-website/reference_versioned_sidebars/version-{target_unstable}-sidebars.json"
with tempfile.NamedTemporaryFile(suffix=".json", delete=False) as tmp:
tmp_path = tmp.name
subprocess.run(
["node", "docs-website/scripts/extract_sidebar.mjs", "docs-website/reference-sidebars.js", tmp_path], check=True
)
shutil.move(tmp_path, ref_sidebar_dest)
# add unstable version to versions.json
with open("docs-website/versions.json") as f:
versions_list = json.load(f)
versions_list.insert(0, target_unstable)
with open("docs-website/versions.json", "w") as f:
json.dump(versions_list, f)
# add unstable version to reference_versions.json
with open("docs-website/reference_versions.json") as f:
reference_versions_list = json.load(f)
reference_versions_list.insert(0, target_unstable)
with open("docs-website/reference_versions.json", "w") as f:
json.dump(reference_versions_list, f)
# in docusaurus.config.js, replace the target unstable version with the next unstable version
with open("docs-website/docusaurus.config.js") as f:
config = f.read()
config = config.replace(f"label: '{target_unstable}'", f"label: '{next_unstable}'")
with open("docs-website/docusaurus.config.js", "w") as f:
f.write(config)
================================================
FILE: .github/utils/docs_search_sync.py
================================================
"""
This script syncs the Haystack docs HTML files to the deepset workspace for search indexing.
It is used in the docs_search_sync.yml workflow.
1. Collects all HTML files from the docs and reference directories for the stable Haystack version.
2. Uploads the HTML files to the deepset workspace.
- A timestamp-based metadata field is used to track document versions in the workspace.
3. Deletes the old HTML files from the deepset workspace.
- Since most files are overwritten during upload, only a small number of deletions is expected.
- In case MAX_DELETIONS_SAFETY_LIMIT is exceeded, we block the deletion.
"""
import os
import sys
import time
from pathlib import Path
import requests
from deepset_cloud_sdk.workflows.sync_client.files import DeepsetCloudFile, WriteMode, list_files, upload_texts
DEEPSET_WORKSPACE_DOCS_SEARCH = os.environ["DEEPSET_WORKSPACE_DOCS_SEARCH"]
DEEPSET_API_KEY_DOCS_SEARCH = os.environ["DEEPSET_API_KEY_DOCS_SEARCH"]
# If there are more files to delete than this limit, it's likely that something went wrong in the upload process.
MAX_DELETIONS_SAFETY_LIMIT = 20
def collect_docs_files(version: int) -> list[DeepsetCloudFile]:
"""
Collect all HTML files from the docs and reference directories.
Returns a list of DeepsetCloudFile objects.
"""
repo_root = Path(__file__).parent.parent.parent
build_dir = repo_root / "docs-website" / "build"
# we want to exclude previous and temporarily unstable versions (2.x) and next version (next)
exclude = ("2.", "next")
files = []
for section in ("docs", "reference"):
for subfolder in (build_dir / section).iterdir():
if subfolder.is_dir() and not any(x in subfolder.name for x in exclude):
for html_file in subfolder.rglob("*.html"):
files.append(
DeepsetCloudFile(
# The build produces files like docs/agents/index.html or reference/agents-api/index.html.
# For file names, we want to use the parent directory name (agents.html or agents-api.html)
name=f"{html_file.parent.name}.html",
text=html_file.read_text(),
meta={
"type": "api-reference" if section == "reference" else "documentation",
"version": version,
},
)
)
return files
def delete_files(file_names: list[str]) -> None:
"""
Delete files from the deepset workspace.
"""
url = f"https://api.cloud.deepset.ai/api/v1/workspaces/{DEEPSET_WORKSPACE_DOCS_SEARCH}/files"
payload = {"names": file_names}
headers = {"Accept": "application/json", "Authorization": f"Bearer {DEEPSET_API_KEY_DOCS_SEARCH}"}
response = requests.delete(url, json=payload, headers=headers, timeout=300)
response.raise_for_status()
if __name__ == "__main__":
version = time.time_ns()
print(f"Docs version: {version}")
print("Collecting docs files from build directory")
dc_files = collect_docs_files(version)
print(f"Collected {len(dc_files)} docs files")
if len(dc_files) == 0:
print("No docs files found. Something is wrong. Exiting.")
sys.exit(1)
print("Uploading docs files to deepset")
summary = upload_texts(
workspace_name=DEEPSET_WORKSPACE_DOCS_SEARCH,
files=dc_files,
api_key=DEEPSET_API_KEY_DOCS_SEARCH,
blocking=True, # Very important to ensure that DC is up to date when we query for deletion
timeout_s=300,
show_progress=True,
write_mode=WriteMode.OVERWRITE,
enable_parallel_processing=True,
)
print(f"Uploaded docs files to deepset\n{summary}")
if summary.failed_upload_count > 0:
print("Failed to upload some docs files. Stopping to prevent risky deletion of old files.")
sys.exit(1)
print("Listing old docs files from deepset")
odata_filter = f"version lt '{version}'"
old_files_names = [
f.name
for batch in list_files(
workspace_name=DEEPSET_WORKSPACE_DOCS_SEARCH, api_key=DEEPSET_API_KEY_DOCS_SEARCH, odata_filter=odata_filter
)
for f in batch
]
print(f"Found {len(old_files_names)} old files to delete")
if len(old_files_names) > MAX_DELETIONS_SAFETY_LIMIT:
print(
f"Found >{MAX_DELETIONS_SAFETY_LIMIT} old files to delete. "
"Stopping because something could have gone wrong in the upload process."
)
sys.exit(1)
if len(old_files_names) > 0:
print("Deleting old docs files from deepset")
delete_files(old_files_names)
print("Deleted old docs files from deepset")
================================================
FILE: .github/utils/docstrings_checksum.py
================================================
import ast
import hashlib
from collections.abc import Iterator
from pathlib import Path
def docstrings_checksum(python_files: Iterator[Path]) -> str:
"""
Calculate the checksum of the docstrings in the given Python files.
"""
files_content = (f.read_text() for f in python_files)
trees = (ast.parse(c) for c in files_content)
# Get all docstrings from async functions, functions,
# classes and modules definitions
docstrings = []
for tree in trees:
for node in ast.walk(tree):
if not isinstance(node, (ast.AsyncFunctionDef, ast.FunctionDef, ast.ClassDef, ast.Module)):
# Skip all node types that can't have docstrings to prevent failures
continue
docstring = ast.get_docstring(node)
if docstring:
docstrings.append(docstring)
# Sort them to be safe, since ast.walk() returns
# nodes in no specified order.
# See https://docs.python.org/3/library/ast.html#ast.walk
docstrings.sort()
return hashlib.md5(str(docstrings).encode("utf-8")).hexdigest()
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--root", help="Haystack root folder", required=True, type=Path)
args = parser.parse_args()
# Get all Haystack and rest_api python files
root: Path = args.root.absolute()
haystack_files = root.glob("haystack/**/*.py")
md5 = docstrings_checksum(haystack_files)
print(md5)
================================================
FILE: .github/utils/parse_validate_version.sh
================================================
#!/bin/bash
# parse_validate_version.sh - Parse and validate version for release
#
# Usage: ./parse_validate_version.sh <version>
# Output: Writes to $GITHUB_OUTPUT if set, otherwise to stdout
#
# Example:
# ./parse_validate_version.sh v2.99.0-rc1
#
# This script is used in the release.yml workflow to parse and validate the version to be released.
# Covers several checks to prevent accidental releases of incorrect versions.
set -euo pipefail
# --- Helpers ---
fail() {
echo ""
echo -e "❌ $1"
echo ""
exit 1
}
ok() {
echo "✅ $1"
}
tag_exists() {
git tag -l "$1" | grep -q "^$1$"
}
branch_exists() {
git ls-remote --heads origin "$1" | grep -q "$1"
}
# --- Parse and validate version ---
VERSION="${1#v}" # Strip 'v' prefix
echo ""
echo "ℹ️ Validating: ${1}"
echo ""
if [[ ! "${VERSION}" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(-rc([0-9]+))?$ ]]; then
fail "Invalid version format: $1\n\n"\
"Expected format: vMAJOR.MINOR.PATCH or vMAJOR.MINOR.PATCH-rcN\n"\
"Examples: v2.99.0-rc1, v2.99.0, v2.99.1-rc1"
fi
ok "Version format is valid"
MAJOR="${BASH_REMATCH[1]}"
MINOR="${BASH_REMATCH[2]}"
PATCH="${BASH_REMATCH[3]}"
RC_NUM="${BASH_REMATCH[5]:-0}"
if [[ "${RC_NUM}" == "0" && "${VERSION}" == *"-rc0" ]]; then
fail "Cannot release rc0\n\n"\
"rc0 is an internal marker created automatically during branch-off.\n"\
"Release candidates start at rc1."
fi
MAJOR_MINOR="${MAJOR}.${MINOR}"
RELEASE_BRANCH="v${MAJOR_MINOR}.x"
TAG="v${VERSION}"
IS_FIRST_RC="false"
if [[ "${PATCH}" == "0" && "${RC_NUM}" == "1" ]]; then
IS_FIRST_RC="true"
fi
# 1. Tag must not already exist
if tag_exists "${TAG}"; then
fail "Version ${TAG} was already released\n\n"\
"Each version can only be released once.\n"\
"To publish changes, release the next RC or patch version."
fi
ok "Tag ${TAG} does not exist"
# 2. Checks based on release type
if [[ "${IS_FIRST_RC}" == "true" ]]; then
# First RC of minor: branch must NOT exist yet
if branch_exists "${RELEASE_BRANCH}"; then
fail "Branch ${RELEASE_BRANCH} already exists\n\n"\
"The first RC of a minor (e.g., v${MAJOR_MINOR}.0-rc1) creates the release branch.\n"\
"Since the branch exists, this minor was likely already started.\n"\
"Did you mean to release the next RC (rc2, rc3...) or a patch (v${MAJOR_MINOR}.1-rc1)?"
fi
ok "Branch ${RELEASE_BRANCH} does not exist"
# First RC of minor: VERSION.txt must contain rc0
EXPECTED="${MAJOR_MINOR}.0-rc0"
ACTUAL=$(cat VERSION.txt)
if [[ "${ACTUAL}" != "${EXPECTED}" ]]; then
ACTUAL_MINOR=$(echo "${ACTUAL}" | cut -d. -f1,2)
fail "Cannot release v${MAJOR_MINOR}.0-rc1 from this branch\n\n"\
"The main branch is prepared for version ${ACTUAL_MINOR}, not ${MAJOR_MINOR}.\n"\
"Check that you're releasing the correct version."
fi
ok "VERSION.txt = ${EXPECTED}"
else
# Not first RC: branch MUST exist
if ! branch_exists "${RELEASE_BRANCH}"; then
if [[ "${PATCH}" == "0" ]]; then
fail "Branch ${RELEASE_BRANCH} does not exist\n\n"\
"For subsequent RCs (rc2, rc3...), the release branch must already exist.\n"\
"Release the first RC (v${MAJOR_MINOR}.0-rc1) first to create the branch."
else
fail "Branch ${RELEASE_BRANCH} does not exist\n\n"\
"For patch releases, the release branch must already exist.\n"\
"The minor version (v${MAJOR_MINOR}.0) must be released before any patches."
fi
fi
ok "Branch ${RELEASE_BRANCH} exists"
# Subsequent RC (rc2, rc3...): previous RC must exist
if [[ "${RC_NUM}" -gt 1 ]]; then
PREV_RC_NUM=$((RC_NUM - 1))
PREV_TAG="v${MAJOR_MINOR}.${PATCH}-rc${PREV_RC_NUM}"
if ! tag_exists "${PREV_TAG}"; then
fail "Cannot release v${MAJOR_MINOR}.${PATCH}-rc${RC_NUM}\n\n"\
"Previous RC (${PREV_TAG}) was not found.\n"\
"RC versions must be sequential. Release rc${PREV_RC_NUM} first."
fi
ok "Previous tag ${PREV_TAG} exists"
fi
# Final release: at least one RC must exist
if [[ "${RC_NUM}" == "0" ]]; then
RC_TAGS=$(git tag -l "v${MAJOR_MINOR}.${PATCH}-rc*" | grep -v "\-rc0$" || true)
if [[ -z "${RC_TAGS}" ]]; then
fail "Cannot release stable version v${MAJOR_MINOR}.${PATCH}\n\n"\
"No release candidate found for this version.\n"\
"Stable releases require at least one RC first (e.g., v${MAJOR_MINOR}.${PATCH}-rc1)."
fi
LAST_RC=$(echo "${RC_TAGS}" | sort -V | tail -n1)
ok "Found RC: ${LAST_RC}"
# Check Tests workflow passed (only if credentials available)
if [[ -n "${GH_TOKEN:-}" && -n "${GITHUB_REPOSITORY:-}" ]]; then
RC_SHA=$(git rev-list -n 1 "${LAST_RC}")
RESULT=$(gh api "/repos/${GITHUB_REPOSITORY}/actions/runs?head_sha=${RC_SHA}&status=success" \
--jq '.workflow_runs[] | select(.name == "Tests") | .conclusion' 2>/dev/null || true)
if [[ -z "${RESULT}" ]]; then
fail "Cannot release stable version v${MAJOR_MINOR}.${PATCH}\n\n"\
"Tests did not pass on the last RC (${LAST_RC}).\n"\
"Wait for tests to complete, or release a new RC with fixes."
fi
ok "Tests passed on ${LAST_RC}"
fi
fi
fi
echo ""
ok "All validations passed!"
echo ""
# --- Output to GITHUB_OUTPUT (or stdout for local testing) ---
OUTPUT_FILE="${GITHUB_OUTPUT:-/dev/stdout}"
{
echo "version=${VERSION}"
echo "major_minor=${MAJOR_MINOR}"
echo "release_branch=${RELEASE_BRANCH}"
echo "is_first_rc=${IS_FIRST_RC}"
} >> "${OUTPUT_FILE}"
================================================
FILE: .github/utils/prepare_release_notification.sh
================================================
#!/bin/bash
# prepare_release_notification.sh - Prepare Slack notification for release outcome
#
# Requires: VERSION, RUN_URL, HAS_FAILURE, GH_TOKEN, GITHUB_REPOSITORY
# Optional: IS_FIRST_RC, MAJOR_MINOR, GITHUB_URL, PYPI_URL, DOCKER_URL, BUMP_VERSION_PR_URL
# Output: text (via GITHUB_OUTPUT or stdout)
#
# This script is used in the release.yml workflow to prepare the notification payload
# sent to Slack after a release completes (success or failure).
# Text uses Slack mrkdwn format: *bold*, <url|label> for links.
set -euo pipefail
OUTPUT_FILE="${GITHUB_OUTPUT:-/dev/stdout}"
IS_RC="false"
[[ "${VERSION}" == *"-rc"* ]] && IS_RC="true"
if [[ "${HAS_FAILURE}" == "true" ]]; then
{
echo "text<<EOF"
echo ":red_circle: Release *${VERSION}* failed"
echo "Check workflow run for details: <${RUN_URL}|View Logs>"
echo "EOF"
} >> "$OUTPUT_FILE"
exit 0
fi
# Success case
TXT=":white_check_mark: Release *${VERSION}* completed successfully"
# Add artifact URLs if available
if [[ -n "${GITHUB_URL:-}" || -n "${PYPI_URL:-}" || -n "${DOCKER_URL:-}" ]]; then
TXT+=$'\n\n:package: *Artifacts:*'
[[ -n "${GITHUB_URL:-}" ]] && TXT+=$'\n'"- <${GITHUB_URL}|Release notes (GitHub)>"
[[ -n "${PYPI_URL:-}" ]] && TXT+=$'\n'"- <${PYPI_URL}|PyPI>"
[[ -n "${DOCKER_URL:-}" ]] && TXT+=$'\n'"- <${DOCKER_URL}|Docker>"
fi
# For RCs, include link to the Tests workflow run
if [[ "${IS_RC}" == "true" ]]; then
COMMIT_SHA=$(gh api "repos/${GITHUB_REPOSITORY}/commits/${VERSION}" --jq '.sha' 2>/dev/null || echo "")
if [[ -n "${COMMIT_SHA}" ]]; then
TESTS_RUN=$(gh api "repos/${GITHUB_REPOSITORY}/actions/runs?head_sha=${COMMIT_SHA}" \
--jq '.workflow_runs[] | select(.name == "Tests") | .html_url' 2>/dev/null | head -1 || echo "")
if [[ -n "${TESTS_RUN}" ]]; then
TXT+=$'\n\n'":test_tube: <${TESTS_RUN}|Tests>"
fi
fi
fi
# For first RC, include the PRs to merge from branch-off
if [[ "${IS_FIRST_RC:-}" == "true" && -n "${BUMP_VERSION_PR_URL:-}" ]]; then
TXT+=$'\n\n'":clipboard: *PRs to merge:*"
TXT+=$'\n'"- <${BUMP_VERSION_PR_URL}|Bump unstable version and create unstable docs>"
fi
# For RCs, request testing from Platform Engineering
if [[ "${IS_RC}" == "true" ]]; then
TXT+=$'\n\n'"This release is marked as a Release Candidate."
TXT+=$'\n'"Comment on this message and tag Platform Engineering to request testing on both Platform and DC custom nodes."
fi
# For final minor releases (vX.Y.0), include the docs promotion PR
if [[ "${VERSION}" =~ ^v[0-9]+\.[0-9]+\.0$ && -n "${MAJOR_MINOR:-}" ]]; then
PROMOTE_DOCS_PR_URL=$(gh pr list --repo "${GITHUB_REPOSITORY}" \
--head "promote-unstable-docs-${MAJOR_MINOR}" --json url --jq '.[0].url' 2>/dev/null || echo "")
if [[ -n "${PROMOTE_DOCS_PR_URL}" ]]; then
TXT+=$'\n\n'":clipboard: *PRs to merge:*"
TXT+=$'\n'"- <${PROMOTE_DOCS_PR_URL}|Promote unstable docs>"
fi
fi
# For final releases (not RCs), include info about pushing release notes to website
if [[ "${IS_RC}" == "false" ]]; then
TXT+=$'\n\n'":memo: After refining and finalizing release notes, push them to Haystack website:"
TXT+=$'\n'"\`gh workflow run push_release_notes_to_website.yml -R deepset-ai/haystack -f version=${VERSION}\`"
fi
{
echo "text<<EOF"
echo "${TXT}"
echo "EOF"
} >> "$OUTPUT_FILE"
================================================
FILE: .github/utils/promote_unstable_docs_docusaurus.py
================================================
"""
This script promotes an unstable documentation version to a stable version at the time of a new Haystack release.
To understand how unstable doc versions are created, see create_unstable_docs_docusaurus.py.
"""
import argparse
import json
import os
import re
import shutil
import sys
VERSION_VALIDATOR = re.compile(r"^[0-9]+\.[0-9]+$")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--version", help="The version to promote to stable (e.g. 2.20).", required=True)
args = parser.parse_args()
if VERSION_VALIDATOR.match(args.version) is None:
sys.exit("Version must be formatted like so <major>.<minor>")
target_version = f"{args.version}" # e.g., "2.20" - the target release version
major, minor = args.version.split(".")
target_unstable = f"{target_version}-unstable" # e.g., "2.20-unstable"
previous_stable = f"{major}.{int(minor) - 1}" # e.g., "2.19" - previous stable release
versions = [
folder.replace("version-", "")
for folder in os.listdir("docs-website/versioned_docs")
if os.path.isdir(os.path.join("docs-website/versioned_docs", folder))
]
if target_version in versions:
sys.exit(f"{target_version} already exists (already released). Aborting.")
if target_unstable not in versions:
sys.exit(f"Can't find version {target_unstable} to promote to {target_version}")
print(f"Promoting unstable version {target_unstable} to stable version {target_version}")
### Docusaurus updates
# move versioned_docs/version-target_unstable to versioned_docs/version-target_version
shutil.move(
f"docs-website/versioned_docs/version-{target_unstable}",
f"docs-website/versioned_docs/version-{target_version}",
)
# move reference_versioned_docs/version-target_unstable to reference_versioned_docs/version-target_version
shutil.move(
f"docs-website/reference_versioned_docs/version-{target_unstable}",
f"docs-website/reference_versioned_docs/version-{target_version}",
)
# move versioned_sidebars/version-target_unstable-sidebars.json
# to versioned_sidebars/version-target_version-sidebars.json
shutil.move(
f"docs-website/versioned_sidebars/version-{target_unstable}-sidebars.json",
f"docs-website/versioned_sidebars/version-{target_version}-sidebars.json",
)
# move reference_versioned_sidebars/version-target_unstable-sidebars.json
# to reference_versioned_sidebars/version-target_version-sidebars.json
shutil.move(
f"docs-website/reference_versioned_sidebars/version-{target_unstable}-sidebars.json",
f"docs-website/reference_versioned_sidebars/version-{target_version}-sidebars.json",
)
# replace unstable version with stable version in versions.json
with open("docs-website/versions.json") as f:
versions_list = json.load(f)
versions_list[versions_list.index(target_unstable)] = target_version
with open("docs-website/versions.json", "w") as f:
json.dump(versions_list, f)
# replace unstable version with stable version in reference_versions.json
with open("docs-website/reference_versions.json") as f:
reference_versions_list = json.load(f)
reference_versions_list[reference_versions_list.index(target_unstable)] = target_version
with open("docs-website/reference_versions.json", "w") as f:
json.dump(reference_versions_list, f)
# in docusaurus.config.js, replace previous stable version with the target version
with open("docs-website/docusaurus.config.js") as f:
config = f.read()
config = config.replace(f"lastVersion: '{previous_stable}'", f"lastVersion: '{target_version}'") # "2.19" -> "2.20"
with open("docs-website/docusaurus.config.js", "w") as f:
f.write(config)
================================================
FILE: .github/utils/pyproject_to_requirements.py
================================================
import argparse
import re
import sys
from pathlib import Path
import toml
matcher = re.compile(r"farm-haystack\[(.+)\]")
parser = argparse.ArgumentParser(
prog="pyproject_to_requirements.py", description="Convert pyproject.toml to requirements.txt"
)
parser.add_argument("pyproject_path")
parser.add_argument("--extra", default="")
def resolve(target: str, extras: dict, results: set) -> None:
"""
Resolve the dependencies for a given target.
"""
if target not in extras:
results.add(target)
return
for t in extras[target]:
m = matcher.match(t)
if m:
for i in m.group(1).split(","):
resolve(i, extras, results)
else:
resolve(t, extras, results)
def main(pyproject_path: Path, extra: str = "") -> None:
"""
Convert a pyproject.toml file to a requirements.txt file.
"""
content = toml.load(pyproject_path)
# basic set of dependencies
deps = set(content["project"]["dependencies"])
if extra:
extras = content["project"]["optional-dependencies"]
resolve(extra, extras, deps)
sys.stdout.write("\n".join(sorted(deps)))
sys.stdout.write("\n")
if __name__ == "__main__":
args = parser.parse_args()
pyproject_path = Path(args.pyproject_path).absolute()
main(pyproject_path, args.extra)
================================================
FILE: .github/utils/wait_for_workflows.sh
================================================
#!/bin/bash
# wait_for_workflows.sh - Wait for tag-triggered workflows to complete
#
# Usage: ./wait_for_workflows.sh <tag> <workflow_name1> [workflow_name2] ...
# Requires: GH_TOKEN and GITHUB_REPOSITORY environment variables
#
# Example:
# ./wait_for_workflows.sh v2.19.0 "Project release on PyPi" "Docker image release"
#
# This script is used in the release.yml workflow to wait for the workflows triggered by a specific release tag to
# successfully complete.
# With the default values, we wait for 20 minutes
MAX_ATTEMPTS="${MAX_ATTEMPTS:-40}"
SLEEP_SECONDS="${SLEEP_SECONDS:-30}"
set -euo pipefail
if [[ -z "${GH_TOKEN:-}" ]] || [[ -z "${GITHUB_REPOSITORY:-}" ]]; then
echo "❌ GH_TOKEN and GITHUB_REPOSITORY must be set"
exit 1
fi
TAG="$1"
shift
WORKFLOWS=("$@")
# Get commit SHA from tag
TAG_SHA=$(git rev-list -n 1 "${TAG}" 2>/dev/null) || {
echo "❌ Tag ${TAG} not found"
exit 1
}
echo "Tag ${TAG} (commit: ${TAG_SHA:0:7})"
echo ""
wait_for_workflow() {
local name="$1"
echo "⏳ Waiting for: $name"
for ((i=1; i<=MAX_ATTEMPTS; i++)); do
jq_filter="[.workflow_runs[] | select(.head_sha == \"${TAG_SHA}\" and .name == \"${name}\")]
| sort_by(.created_at) | last"
result=$(gh api "repos/${GITHUB_REPOSITORY}/actions/runs" \
--jq "$jq_filter" 2>/dev/null || echo "")
if [[ -z "$result" ]]; then
echo " Attempt $i/$MAX_ATTEMPTS: not started yet..."
sleep $SLEEP_SECONDS
continue
fi
status=$(echo "$result" | jq -r '.status')
conclusion=$(echo "$result" | jq -r '.conclusion')
if [[ "$status" == "completed" ]]; then
if [[ "$conclusion" == "success" ]]; then
echo "✅ $name completed"
return 0
else
echo "❌ $name failed: $conclusion"
return 1
fi
fi
echo " Attempt $i/$MAX_ATTEMPTS: $status..."
sleep $SLEEP_SECONDS
done
echo "❌ $name: timeout after $((MAX_ATTEMPTS * SLEEP_SECONDS / 60)) minutes"
return 1
}
for workflow in "${WORKFLOWS[@]}"; do
wait_for_workflow "$workflow" || exit 1
done
echo ""
echo "✅ All workflows completed"
================================================
FILE: .github/workflows/auto_approve_api_ref_sync.yml
================================================
name: Approve and merge API reference sync PRs
# Automatically approve and merge API reference sync PRs from Haystack, Haystack Core Integrations,
# and Haystack Experimental
on:
pull_request:
branches:
- main
paths:
- "docs-website/reference/**"
- "docs-website/reference_versioned_docs/**"
permissions:
pull-requests: write
contents: write
env:
GH_TOKEN: ${{ github.token }}
jobs:
auto-approve-and-merge:
if: |
github.event.pull_request.user.login == 'HaystackBot' &&
startsWith(github.event.pull_request.head.ref, 'sync-docusaurus-api-reference') &&
github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-slim
steps:
- name: Approve PR
run: gh pr review --approve ${{ github.event.pull_request.number }} --repo ${{ github.repository }}
- name: Enable auto-merge
run: gh pr merge --squash --auto ${{ github.event.pull_request.number }} --repo ${{ github.repository }}
================================================
FILE: .github/workflows/branch_off.yml
================================================
name: Branch off
on:
workflow_dispatch:
workflow_call:
outputs:
bump_version_pr_url:
description: 'URL of the bump version PR'
value: ${{ jobs.branch-off.outputs.bump_version_pr_url }}
env:
PYTHON_VERSION: "3.10"
jobs:
branch-off:
runs-on: ubuntu-slim
outputs:
bump_version_pr_url: ${{ steps.create-pr.outputs.pull-request-url }}
steps:
- name: Checkout this repo
uses: actions/checkout@v6
with:
ref: main
- name: Define all versions
id: versions
shell: bash
run: |
# example: 2.20.0-rc0 in VERSION.txt -> 2.20
echo "current_version_major_minor=$(cut -d "." -f 1,2 < VERSION.txt)" >> "$GITHUB_OUTPUT"
# example: 2.20.0-rc0 in VERSION.txt -> 2.21.0-rc0
echo "next_version_rc0=$(awk -F. '/[0-9]+\./{$2++;print}' OFS=. < VERSION.txt)" >> "$GITHUB_OUTPUT"
- name: Create release branch and tag
shell: bash
env:
# We use the HAYSTACK_BOT_TOKEN here so the PR created by the step will
# trigger required workflows and can be merged by anyone
GITHUB_TOKEN: ${{ secrets.HAYSTACK_BOT_TOKEN }}
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
# Create the release branch from main
git checkout -b v${{ steps.versions.outputs.current_version_major_minor }}.x
git push -u origin v${{ steps.versions.outputs.current_version_major_minor }}.x
# Tag the branch-off point with the next version rc0 to mark start of next dev cycle.
# The tag points to this commit (before VERSION.txt is bumped).
# This is intentional for reno to work properly.
git tag "v${{ steps.versions.outputs.next_version_rc0 }}" -m "v${{ steps.versions.outputs.next_version_rc0 }}"
git push --tags
- uses: actions/setup-python@v6
with:
python-version: "${{ env.PYTHON_VERSION }}"
- uses: actions/setup-node@v6
with:
node-version: "22"
- name: Prepare changes for main
shell: bash
run: |
git checkout main
# Bump VERSION.txt to next version rc0
echo "${{ steps.versions.outputs.next_version_rc0 }}" > VERSION.txt
# Generate unstable docs for Docusaurus
python ./.github/utils/create_unstable_docs_docusaurus.py --new-version ${{ steps.versions.outputs.current_version_major_minor }}
- name: Create PR to bump unstable version and create unstable docs
id: create-pr
uses: peter-evans/create-pull-request@v8
with:
token: ${{ secrets.HAYSTACK_BOT_TOKEN }}
commit-message: "Bump unstable version and create unstable docs"
branch: bump-version
base: main
title: "Bump unstable version and create unstable docs"
add-paths: |
VERSION.txt
docs-website
body: |
This PR:
- Bumps the unstable version to `${{ steps.versions.outputs.next_version_rc0 }}`
- Creates the unstable docs for Haystack ${{ steps.versions.outputs.current_version_major_minor }}
You can inspect the docs preview (two unstable versions will be available) and merge it.
labels: "ignore-for-release-notes"
reviewers: "${{ github.actor }}"
================================================
FILE: .github/workflows/check_api_ref.yml
================================================
name: Check API reference changes
on:
pull_request:
paths:
- "haystack/**/*.py"
- "pydoc/*.yml"
jobs:
test-api-reference-build:
runs-on: ubuntu-slim
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.13"
- name: Detect API reference changes
id: changed
shell: python
run: |
import os
import subprocess
from pathlib import Path
import sys
sys.path.insert(0, ".github/utils")
from docstrings_checksum import docstrings_checksum
def git(*args):
result = subprocess.run(["git", *args], capture_output=True, text=True)
return result.stdout.strip(), result.returncode
base_sha, _ = git("rev-parse", "HEAD^1")
diff_output, _ = git("diff", "--name-only", f"{base_sha}...HEAD")
changed_files = set(diff_output.splitlines())
needs_check = False
# If any pydoc config changed, always rebuild
if any(f.startswith("pydoc/") and f.endswith(".yml") for f in changed_files):
needs_check = True
# If Python files changed, compare docstring checksums
if not needs_check and any(f.startswith("haystack/") and f.endswith(".py") for f in changed_files):
runner_temp = os.environ["RUNNER_TEMP"]
base_worktree = os.path.join(runner_temp, "base")
_, rc = git("worktree", "add", base_worktree, base_sha)
pr_checksum = docstrings_checksum(Path(".").glob("haystack/**/*.py"))
base_checksum = ""
if rc == 0:
base_checksum = docstrings_checksum(Path(base_worktree).glob("haystack/**/*.py"))
if pr_checksum != base_checksum:
needs_check = True
print(f"API reference check needed: {needs_check}")
with open(os.environ["GITHUB_OUTPUT"], "a") as f:
f.write(f"needs_check={str(needs_check).lower()}\n")
- name: Install Hatch
if: steps.changed.outputs.needs_check == 'true'
run: pip install hatch
- name: Generate API references
if: steps.changed.outputs.needs_check == 'true'
run: hatch run docs
- name: Set up Node.js
if: steps.changed.outputs.needs_check == 'true'
uses: actions/setup-node@v6
with:
node-version: "22"
- name: Run Docusaurus md/mdx checker
if: steps.changed.outputs.needs_check == 'true'
working-directory: tmp_api_reference
run: |
# docusaurus-mdx-checker is a package that is not frequently updated. Its dependency katex sometimes ships a
# broken ESM build, where a __VERSION__ placeholder is left unresolved, causing a ReferenceError at import time.
# Node 22+ prefers ESM when available. We force CJS (CommonJS) resolution to use the working katex build.
# This should be safe because docusaurus-mdx-checker and its dependencies provide CJS builds.
export NODE_OPTIONS="--conditions=require"
npx docusaurus-mdx-checker -v || {
echo ""
echo "For common MDX problems, see https://docusaurus.io/blog/preparing-your-site-for-docusaurus-v3#common-mdx-problems"
exit 1
}
================================================
FILE: .github/workflows/ci_metrics.yml
================================================
name: CI Metrics
on:
workflow_run:
workflows:
- "end-to-end"
- "Tests"
- "Slow Integration Tests"
types:
- completed
pull_request:
types:
- opened
- closed
jobs:
send:
runs-on: ubuntu-slim
steps:
- uses: int128/datadog-actions-metrics@v1
with:
datadog-api-key: ${{ secrets.DATADOG_API_KEY }}
datadog-site: "datadoghq.eu"
collect-job-metrics: true
================================================
FILE: .github/workflows/docker_release.yml
================================================
name: Docker image release
on:
workflow_dispatch:
push:
branches:
- main
paths:
- '.github/workflows/docker_release.yml'
- 'docker/**'
- 'haystack/**'
- 'pyproject.toml'
- 'VERSION.txt'
tags:
- "v2.[0-9]+.[0-9]+*"
env:
DOCKER_REPO_NAME: deepset/haystack
jobs:
build-and-push:
name: Build base image
runs-on: ubuntu-latest
if: github.repository_owner == 'deepset-ai'
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up QEMU
uses: docker/setup-qemu-action@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Docker meta
id: meta
uses: docker/metadata-action@v6
with:
images: $DOCKER_REPO_NAME
- name: Detect stable version
run: |
if [[ "${{ steps.meta.outputs.version }}" =~ ^v2\.[0-9]+\.[0-9]+$ ]]; then
echo "IS_STABLE=true" >> "$GITHUB_ENV"
echo "Stable version detected"
else
echo "Not a stable version"
fi
- name: Build base images
uses: docker/bake-action@v7
env:
IMAGE_TAG_SUFFIX: ${{ steps.meta.outputs.version }}
HAYSTACK_VERSION: ${{ steps.meta.outputs.version }}
with:
source: ./docker
targets: base
push: true
- name: Test base image
run: |
EXPECTED_VERSION=$(cat VERSION.txt)
if [[ $EXPECTED_VERSION == *"-"* ]]; then
EXPECTED_VERSION=$(cut -d '-' -f 1 < VERSION.txt)$(cut -d '-' -f 2 < VERSION.txt)
fi
TAG="base-${{ steps.meta.outputs.version }}"
PLATFORM="linux/amd64"
VERSION=$(docker run --platform "$PLATFORM" --rm "deepset/haystack:$TAG" python -c"from haystack.version import __version__; print(__version__)")
[[ "$VERSION" = "$EXPECTED_VERSION" ]] || echo "::error 'Haystack version in deepset/haystack:$TAG image for $PLATFORM is different from expected'"
PLATFORM="linux/arm64"
VERSION=$(docker run --platform "$PLATFORM" --rm "deepset/haystack:$TAG" python -c"from haystack.version import __version__; print(__version__)")
[[ "$VERSION" = "$EXPECTED_VERSION" ]] || echo "::error 'Haystack version in deepset/haystack:$TAG image for $PLATFORM is different from expected'"
# Remove image after test to avoid filling the GitHub runner and prevent its failure
docker rmi "deepset/haystack:$TAG"
================================================
FILE: .github/workflows/docs-website-test-docs-snippets.yml
================================================
name: Test Python snippets in docs
on:
schedule:
- cron: '17 3 * * *' # daily at 03:17 UTC
workflow_dispatch:
inputs:
haystack_version:
description: 'Haystack version to test against (e.g., 2.16.1, main)'
required: false
default: 'main'
type: string
# TEMPORARILY DISABLED
# push:
# paths:
# - 'docs-website/docs/**'
# - 'docs-website/versioned_docs/**'
# - 'docs-website/scripts/test_python_snippets.py'
# - 'docs-website/scripts/generate_requirements.py'
# - '.github/workflows/docs-website-test-docs-snippets.yml'
jobs:
test-docs-snippets:
runs-on: ubuntu-latest
timeout-minutes: 20
env:
# TODO: We'll properly set these after migration to core project
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.11'
- name: Install base dependencies
run: |
python -m pip install --upgrade pip
pip install requests toml
- name: Generate requirements.txt
run: |
# Use input version or default to main
if [ "${{ github.event.inputs.haystack_version }}" != "" ]; then
VERSION="${{ github.event.inputs.haystack_version }}"
else
VERSION="main"
fi
echo "Generating requirements.txt for Haystack version: $VERSION"
python docs-website/scripts/generate_requirements.py --version "$VERSION"
- name: Install dependencies
run: |
if [ -f requirements.txt ]; then
echo "Installing dependencies from requirements.txt"
pip install -r requirements.txt
else
echo "Error: requirements.txt was not generated"
exit 1
fi
- name: Run snippet tests (verbose)
run: |
# TEMPORARY: Testing with single file to make CI green
# TODO: Expand to run all docs: --paths docs versioned_docs
python docs-website/scripts/test_python_snippets.py docs-website/reference/haystack-api/agents_api.md
================================================
FILE: .github/workflows/docs_search_sync.yml
================================================
name: Docs Search Sync
on:
workflow_dispatch: # Activate this workflow manually
schedule:
- cron: "0 1 * * *"
# Running this workflow multiple times in parallel can cause issues with files uploads and deletions.
concurrency:
group: docs-search-sync
cancel-in-progress: false
jobs:
docs-search-sync:
runs-on: ubuntu-latest
steps:
- name: Checkout Haystack repo
uses: actions/checkout@v6
- name: Install Node.js
uses: actions/setup-node@v6
with:
node-version: "22"
- name: Install Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Install Docusaurus and build docs-website
working-directory: docs-website
run: |
npm install
npm run build
- name: Install script dependencies
# sniffio is needed because of https://github.com/deepset-ai/deepset-cloud-sdk/issues/286
# we pin pyrate-limiter due to https://github.com/deepset-ai/deepset-cloud-sdk/issues/295
run: pip install deepset-cloud-sdk sniffio requests "pyrate-limiter<4"
- name: Update new docs to Search pipeline and remove outdated docs
env:
DEEPSET_WORKSPACE_DOCS_SEARCH: ${{ secrets.DEEPSET_WORKSPACE_DOCS_SEARCH }}
DEEPSET_API_KEY_DOCS_SEARCH: ${{ secrets.DEEPSET_API_KEY_DOCS_SEARCH }}
run: python ./.github/utils/docs_search_sync.py
- name: Notify Slack on nightly failure
if: failure() && github.event_name == 'schedule'
uses: deepset-ai/notify-slack-action@v1
with:
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL_NOTIFICATIONS }}
================================================
FILE: .github/workflows/docstring_labeler.yml
================================================
name: Add label on docstrings edit
on:
pull_request_target:
paths:
- "haystack/**/*.py"
env:
PYTHON_VERSION: "3.11"
jobs:
label:
runs-on: ubuntu-slim
steps:
- name: Checkout base commit
uses: actions/checkout@v6
with:
ref: ${{ github.base_ref }}
- name: Copy file
# We copy our script after base ref checkout so we keep executing
# the same version even after checking out the HEAD ref.
# This is done to prevent executing malicious code in forks' PRs.
run: cp .github/utils/docstrings_checksum.py "${{ runner.temp }}/docstrings_checksum.py"
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: "${{ env.PYTHON_VERSION }}"
- name: Get docstrings
id: base-docstrings
run: |
CHECKSUM=$(python "${{ runner.temp }}/docstrings_checksum.py" --root "${{ github.workspace }}")
echo "checksum=$CHECKSUM" >> "$GITHUB_OUTPUT"
- name: Checkout HEAD commit
uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.ref }}
# This must be set to correctly checkout a fork
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Get docstrings
id: head-docstrings
run: |
CHECKSUM=$(python "${{ runner.temp }}/docstrings_checksum.py" --root "${{ github.workspace }}")
echo "checksum=$CHECKSUM" >> "$GITHUB_OUTPUT"
- name: Check if we should label
id: run-check
run: echo "should_run=${{ steps.base-docstrings.outputs.checksum != steps.head-docstrings.outputs.checksum }}" >> "$GITHUB_OUTPUT"
- name: Add label
if: ${{ steps.run-check.outputs.should_run == 'true' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh pr edit ${{ github.event.pull_request.html_url }} --add-label "type:documentation"
================================================
FILE: .github/workflows/docusaurus_sync.yml
================================================
name: Sync docs with Docusaurus
on:
workflow_dispatch:
push:
branches:
- main
paths:
- "pydoc/**"
- "haystack/**"
- ".github/workflows/docusaurus_sync.yml"
env:
HATCH_VERSION: "1.16.5"
PYTHON_VERSION: "3.11"
jobs:
sync:
runs-on: ubuntu-slim
permissions:
contents: write
steps:
- name: Checkout Haystack repo
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "${{ env.PYTHON_VERSION }}"
- name: Install Hatch
run: pip install hatch==${{ env.HATCH_VERSION }}
- name: Generate API reference for Docusaurus
run: hatch run docs
- name: Sync generated API reference to docs folder
run: |
SOURCE_PATH="tmp_api_reference"
DEST_PATH="docs-website/reference/haystack-api"
echo "Syncing from $SOURCE_PATH to $DEST_PATH"
mkdir -p $DEST_PATH
# Using rsync to copy files. This will also remove files in dest that are no longer in source.
rsync -av --delete --exclude='.git/' "$SOURCE_PATH/" "$DEST_PATH/"
- name: Create Pull Request
uses: peter-evans/create-pull-request@v8
with:
token: ${{ secrets.HAYSTACK_BOT_TOKEN }}
commit-message: "Sync Haystack API reference on Docusaurus"
branch: sync-docusaurus-api-reference
base: main
title: "docs: sync Haystack API reference on Docusaurus"
add-paths: |
docs-website/reference/haystack-api
body: |
This PR syncs the Haystack API reference on Docusaurus. Just approve and merge it.
================================================
FILE: .github/workflows/e2e.yml
================================================
# If you change this name also do it in ci_metrics.yml
name: end-to-end
on:
workflow_dispatch: # Activate this workflow manually
schedule:
- cron: "0 0 * * *"
pull_request:
types:
- opened
- reopened
- synchronize
paths:
- "e2e/**/*.py"
- ".github/workflows/e2e.yml"
env:
PYTHON_VERSION: "3.10"
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
HATCH_VERSION: "1.16.5"
# we use HF_TOKEN instead of HF_API_TOKEN to work around a Hugging Face bug
# see https://github.com/deepset-ai/haystack/issues/9552
HF_TOKEN: ${{ secrets.HUGGINGFACE_API_KEY }}
jobs:
run:
timeout-minutes: 60
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "${{ env.PYTHON_VERSION }}"
- name: Install Hatch
run: pip install hatch==${{ env.HATCH_VERSION }}
- name: Run tests
run: hatch run e2e:test
- name: Notify Slack on nightly failure
if: failure() && github.event_name == 'schedule'
uses: deepset-ai/notify-slack-action@v1
with:
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL_NOTIFICATIONS }}
================================================
FILE: .github/workflows/github_release.yml
================================================
name: Project release on Github
on:
workflow_dispatch: # this is useful to re-generate the release page without a new tag being pushed
push:
tags:
- "v2.[0-9]+.[0-9]+*"
# Ignore release versions tagged with -rc0 suffix
- "!v2.[0-9]+.[0-9]-rc0"
jobs:
generate-notes:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-tags: true
fetch-depth: 0 # slow but needed by reno
- name: Parse version
id: version
run: |
echo "current_release=$(awk -F \\- '{print $1}' < VERSION.txt)" >> "$GITHUB_OUTPUT"
echo "current_pre_release=$(awk -F \\- '{print $2}' < VERSION.txt)" >> "$GITHUB_OUTPUT"
- name: Install reno
run: |
python -m pip install --upgrade pip
pip install "reno<5"
# Remove next version rc0 tag in the CI environment to prevent reno from assigning notes to future releases.
# This ensures release notes are correctly aggregated for the current version.
# This is a workaround. Can be removed if the release process is fully aligned with reno.
- name: Delete next version rc0 tag in the CI environment
run: |
# Parse version X.Y.Z and increment Y for next minor version
IFS='.' read -r MAJOR MINOR _ <<< "${{ steps.version.outputs.current_release }}"
NEXT_MINOR=$((MINOR + 1))
NEXT_TAG="v${MAJOR}.${NEXT_MINOR}.0-rc0"
if git rev-parse --verify "$NEXT_TAG" >/dev/null 2>&1; then
git tag -d "$NEXT_TAG"
echo "Deleted local tag $NEXT_TAG"
else
echo "Tag $NEXT_TAG does not exist locally"
fi
- name: Generate release notes
env:
EARLIEST_VERSION: v${{ steps.version.outputs.current_release }}-rc1
run: |
reno report --no-show-source --ignore-cache --earliest-version "$EARLIEST_VERSION" -o relnotes.rst
- name: Convert to Markdown
uses: docker://pandoc/core:3.8
with:
args: "--from rst --to gfm --syntax-highlighting=none --wrap=none relnotes.rst -o relnotes.md"
# We copy the relnotes file since the original one cannot be modified due to permissions
- name: Copy relnotes file
run: |
cat relnotes.md > enhanced_relnotes.md
- name: Add contributor list
# only for minor releases and minor release candidates (not bugfix releases)
if: endsWith(steps.version.outputs.current_release, '.0')
env:
GH_TOKEN: ${{ github.token }}
START: v${{ steps.version.outputs.current_release }}-rc0
END: ${{ github.ref_name }}
run: |
JQ_EXPR='[.commits[].author.login]
| map(select(. != null and . != "HaystackBot" and . != "dependabot[bot]" and . != "github-actions[bot]"))
| unique
| sort_by(ascii_downcase)
| map("@\(.)")
| join(", ")'
CONTRIBUTORS=$(gh api "repos/deepset-ai/haystack/compare/$START...$END" \
--jq "$JQ_EXPR") || { echo "Unable to fetch contributors"; exit 1; }
{
echo ""
echo "## 💙 Big thank you to everyone who contributed to this release!"
echo ""
echo "$CONTRIBUTORS"
} >> enhanced_relnotes.md
- name: Debug
run: |
cat enhanced_relnotes.md
- uses: ncipollo/release-action@v1
with:
bodyFile: "enhanced_relnotes.md"
prerelease: ${{ steps.version.outputs.current_pre_release != '' }}
allowUpdates: true
================================================
FILE: .github/workflows/labeler.yml
================================================
name: "Labeler"
on:
- pull_request_target
permissions:
contents: read
pull-requests: write
jobs:
triage:
runs-on: ubuntu-slim
steps:
- uses: actions/labeler@v6
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
================================================
FILE: .github/workflows/license_compliance.yml
================================================
name: License Compliance
on:
pull_request:
paths:
- "**/pyproject.toml"
- ".github/workflows/license_compliance.yml"
# Since we test PRs, there is no need to run the workflow at each
# merge on `main`. Let's use a cron job instead.
schedule:
- cron: "0 0 * * *" # every day at midnight
env:
PYTHON_VERSION: "3.10"
jobs:
license_check_direct:
name: Direct dependencies only
env:
REQUIREMENTS_FILE: requirements_direct.txt
runs-on: ubuntu-latest
steps:
- name: Checkout the code
uses: actions/checkout@v6
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: "${{ env.PYTHON_VERSION }}"
- name: Get direct dependencies
run: |
pip install toml
python .github/utils/pyproject_to_requirements.py pyproject.toml > ${{ env.REQUIREMENTS_FILE }}
- name: Check Licenses
id: license_check_report
uses: pilosus/action-pip-license-checker@v3
with:
github-token: ${{ secrets.GH_ACCESS_TOKEN }}
requirements: ${{ env.REQUIREMENTS_FILE }}
fail: "Copyleft,Other,Error"
# Exclusions in the vanilla distribution must be explicitly motivated
# - tqdm is MLP but there are no better alternatives
# - typing_extensions>=4.13.0 has a Python Software Foundation License 2.0 but pip-license-checker does not recognize it
# (https://github.com/pilosus/pip-license-checker/issues/143)
exclude: "(?i)^(tqdm|typing_extensions).*"
# We keep the license inventory on FOSSA
- name: Send license report to Fossa
uses: fossas/fossa-action@v1.8.0
continue-on-error: true # not critical
with:
api-key: ${{ secrets.FOSSA_LICENSE_SCAN_TOKEN }}
- name: Print report
if: ${{ always() }}
run: echo "${{ steps.license_check_report.outputs.report }}"
- name: Notify Slack on failure
if: failure()
uses: deepset-ai/notify-slack-action@v1
with:
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL_NOTIFICATIONS }}
================================================
FILE: .github/workflows/nightly_testpypi_release.yml
================================================
name: Nightly pre-release on PyPI
on:
schedule:
# Run at midnight UTC every day
- cron: "0 0 * * *"
workflow_dispatch:
env:
HATCH_VERSION: "1.16.5"
jobs:
nightly-release:
runs-on: ubuntu-latest
# Always build from main for consistency (scheduled and manual runs)
steps:
- name: Checkout main
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: main
fetch-depth: 1
# Reads VERSION.txt, strips any -rcN suffix, and appends .devYYYYMMDDHHMMSS
# (e.g. 2.25.0.dev20250217000000) so each run gets a unique, PEP 440–valid pre-release version.
- name: Set nightly version
id: set-version
run: |
BASE_VERSION=$(sed 's/-rc[0-9]*$//' VERSION.txt)
TIMESTAMP=$(date +%Y%m%d%H%M%S)
NIGHTLY_VERSION="${BASE_VERSION}.dev${TIMESTAMP}"
echo "version=${NIGHTLY_VERSION}" >> "$GITHUB_OUTPUT"
echo "${NIGHTLY_VERSION}" > VERSION.txt
echo "Building haystack-ai version: ${NIGHTLY_VERSION}"
- name: Install Hatch
run: pip install hatch==${{ env.HATCH_VERSION }}
- name: Build Haystack
run: hatch build
- name: Publish to PyPI
env:
HATCH_INDEX_USER: __token__
HATCH_INDEX_AUTH: ${{ secrets.HAYSTACK_AI_PYPI_TOKEN }}
run: hatch publish -y
================================================
FILE: .github/workflows/project.yml
================================================
name: Track issues with Github project
on:
issues:
types:
- opened
jobs:
add-to-project:
name: Add new issues to project for triage
runs-on: ubuntu-slim
steps:
- uses: actions/add-to-project@v1.0.2
with:
project-url: https://github.com/orgs/deepset-ai/projects/5
github-token: ${{ secrets.GH_PROJECT_PAT }}
================================================
FILE: .github/workflows/promote_unstable_docs.yml
================================================
name: Release new minor version docs
on:
push:
tags:
# Trigger this only for new minor version tags (e.g. v2.99.0)
- "v[0-9]+.[0-9]+.0"
# Exclude 1.x tags
- "!v1.[0-9]+.[0-9]+"
env:
PYTHON_VERSION: "3.10"
jobs:
promote:
runs-on: ubuntu-slim
steps:
- name: Checkout this repo
uses: actions/checkout@v6
# use VERSION.txt file from main branch
with:
ref: main
- name: Get version to release
id: version
shell: bash
# We only need `major.minor`. At this point, VERSION.txt contains the next version.
# For example, if we are releasing 2.20.0, VERSION.txt contains 2.21.0-rc0.
run: |
MAJOR=$(cut -d "." -f 1 < VERSION.txt)
MINOR=$(cut -d "." -f 2 < VERSION.txt)
MINOR=$((MINOR - 1))
echo "version=${MAJOR}.${MINOR}" >> "$GITHUB_OUTPUT"
- uses: actions/setup-python@v6
with:
python-version: "${{ env.PYTHON_VERSION }}"
- name: Promote unstable docs for Docusaurus
run: |
python ./.github/utils/promote_unstable_docs_docusaurus.py --version ${{ steps.version.outputs.version }}
- name: Create Pull Request with Docusaurus docs updates
uses: peter-evans/create-pull-request@v8
with:
token: ${{ secrets.HAYSTACK_BOT_TOKEN }}
commit-message: "Promote unstable docs for Haystack ${{ steps.version.outputs.version }}"
branch: promote-unstable-docs-${{ steps.version.outputs.version }}
base: main
title: "docs: promote unstable docs for Haystack ${{ steps.version.outputs.version }}"
add-paths: |
docs-website
body: |
This PR promotes the unstable docs for Haystack ${{ steps.version.outputs.version }} to stable.
It is expected to run at the time of the release.
You can inspect the docs preview and merge it. There should now be only one unstable version representing the next (main) branch.
# This workflow is triggered by a tag pushed by the HaystackBot in release.yml > create-release-tag.
# GitHub requires reviewers to be different from the PR author, so setting `github.actor`
# would fail (it would request a review from the HaystackBot itself).
# So we don't set any reviewers and instead notify the Release Manager
# (see .github/utils/prepare_release_notification.sh).
================================================
FILE: .github/workflows/push_release_notes_to_website.yml
================================================
name: Push release notes to website
on:
workflow_dispatch:
inputs:
version:
description: 'Haystack version (vX.Y.Z)'
required: true
type: string
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VERSION: ${{ inputs.version }}
jobs:
push-release-notes-to-website:
runs-on: ubuntu-slim
steps:
- name: Checkout Haystack home repository
uses: actions/checkout@v6
with:
repository: deepset-ai/haystack-home
- name: Get release notes and add frontmatter
id: release_notes
run: |
VERSION_NUMBER="${VERSION:1}"
RELEASE_DATE=$(gh release view "$VERSION" --repo deepset-ai/haystack --json publishedAt --jq '.publishedAt | split("T")[0]')
RELEASE_NOTES_PATH="content/release-notes/$VERSION_NUMBER.md"
{
echo "---"
echo "title: Haystack $VERSION_NUMBER"
echo "description: Release notes for Haystack $VERSION_NUMBER"
echo "toc: True"
echo "date: $RELEASE_DATE"
echo "last_updated: $RELEASE_DATE"
echo 'tags: ["Release Notes"]'
echo "link: https://github.com/deepset-ai/haystack/releases/tag/$VERSION"
echo "---"
echo ""
} > "$RELEASE_NOTES_PATH"
gh release view "$VERSION" --repo deepset-ai/haystack --json body --jq '.body' >> "$RELEASE_NOTES_PATH"
cat "$RELEASE_NOTES_PATH"
- name: Create Pull Request to Haystack Home
uses: peter-evans/create-pull-request@v8
with:
token: ${{ secrets.HAYSTACK_BOT_TOKEN }}
commit-message: "Add release notes for Haystack ${{ env.VERSION }}"
branch: add-release-notes-for-haystack-${{ env.VERSION }}
base: main
title: "docs: add release notes for Haystack ${{ env.VERSION }}"
add-paths: |
content/release-notes
body: |
This PR adds the release notes for Haystack ${{ env.VERSION }} to the website.
reviewers: "${{ github.actor }}"
================================================
FILE: .github/workflows/pypi_release.yml
================================================
name: Project release on PyPi
on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+*"
# We must not release versions tagged with -rc0 suffix
- "!v[0-9]+.[0-9]+.[0-9]-rc0"
env:
HATCH_VERSION: "1.16.5"
jobs:
release-on-pypi:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install Hatch
run: pip install hatch==${{ env.HATCH_VERSION }}
- name: Build Haystack
run: hatch build
- name: Publish on PyPi
env:
HATCH_INDEX_USER: __token__
HATCH_INDEX_AUTH: ${{ secrets.HAYSTACK_AI_PYPI_TOKEN }}
run: hatch publish -y
================================================
FILE: .github/workflows/release.yml
================================================
name: Release
on:
workflow_dispatch:
inputs:
version:
description: 'Version to release (e.g., v2.99.0-rc1 or v2.99.0)'
required: true
type: string
# Only one release workflow runs at a time; additional runs are queued.
concurrency:
group: release
cancel-in-progress: false
jobs:
parse-validate-version:
runs-on: ubuntu-slim
outputs:
version: ${{ steps.parse-validate.outputs.version }}
major_minor: ${{ steps.parse-validate.outputs.major_minor }}
release_branch: ${{ steps.parse-validate.outputs.release_branch }}
is_first_rc: ${{ steps.parse-validate.outputs.is_first_rc }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0 # needed to fetch tags and branches
- name: Parse and validate version
id: parse-validate
env:
GH_TOKEN: ${{ github.token }}
run: .github/utils/parse_validate_version.sh "${{ inputs.version }}"
branch-off:
needs: ["parse-validate-version"]
if: needs.parse-validate-version.outputs.is_first_rc == 'true'
uses: ./.github/workflows/branch_off.yml
# https://docs.github.com/en/actions/how-tos/reuse-automations/reuse-workflows#passing-secrets-to-nested-workflows
secrets: inherit
create-release-tag:
needs: ["parse-validate-version", "branch-off"]
if: always() && needs.parse-validate-version.result == 'success' && needs.branch-off.result != 'failure'
runs-on: ubuntu-slim
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
# needed to fetch tags and branches
fetch-depth: 0
# use this token so the created tag triggers workflows (does not happen with the default github.token)
token: ${{ secrets.HAYSTACK_BOT_TOKEN }}
- name: Update VERSION.txt and create tag
env:
GITHUB_TOKEN: ${{ secrets.HAYSTACK_BOT_TOKEN }}
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git checkout ${{ needs.parse-validate-version.outputs.release_branch }}
git pull origin ${{ needs.parse-validate-version.outputs.release_branch }}
echo "${{ needs.parse-validate-version.outputs.version }}" > VERSION.txt
git add VERSION.txt
git commit -m "bump version to ${{ needs.parse-validate-version.outputs.version }}"
git push origin ${{ needs.parse-validate-version.outputs.release_branch }}
TAG="v${{ needs.parse-validate-version.outputs.version }}"
git tag -m "$TAG" "$TAG"
git push origin "$TAG"
check-artifacts:
needs: ["parse-validate-version", "create-release-tag"]
if: always() && needs.parse-validate-version.result == 'success' && needs.create-release-tag.result == 'success'
runs-on: ubuntu-latest
outputs:
github_url: ${{ steps.set-outputs.outputs.github_url }}
pypi_url: ${{ steps.set-outputs.outputs.pypi_url }}
docker_url: ${{ steps.set-outputs.outputs.docker_url }}
env:
GH_TOKEN: ${{ github.token }}
VERSION: ${{ needs.parse-validate-version.outputs.version }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0 # needed to fetch tags
- name: Wait for release workflows
run: |
.github/utils/wait_for_workflows.sh "v${{ env.VERSION }}" \
"Project release on PyPi" \
"Project release on Github" \
"Docker image release"
- name: Check artifacts
run: |
check() {
for _ in {1..5}; do curl -sf "$2" > /dev/null && echo "✅ $1" && return 0; sleep 30; done
echo "❌ $1 not found" && return 1
}
check "GitHub Release" "https://api.github.com/repos/${{ github.repository }}/releases/tags/v${{ env.VERSION }}"
check "PyPI package" "https://pypi.org/pypi/haystack-ai/${{ env.VERSION }}/json"
check "Docker image" "https://hub.docker.com/v2/repositories/deepset/haystack/tags/base-v${{ env.VERSION }}"
- name: Set artifact URLs
id: set-outputs
run: |
{
echo "github_url=https://github.com/${{ github.repository }}/releases/tag/v${{ env.VERSION }}"
echo "pypi_url=https://pypi.org/project/haystack-ai/${{ env.VERSION }}/"
echo "docker_url=https://hub.docker.com/r/deepset/haystack/tags?name=base-v${{ env.VERSION }}"
} >> "$GITHUB_OUTPUT"
notify:
needs: ["parse-validate-version", "branch-off", "create-release-tag", "check-artifacts"]
if: always()
runs-on: ubuntu-slim
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Prepare release notification
id: prepare-notification
env:
VERSION: ${{ inputs.version }}
GH_TOKEN: ${{ github.token }}
RUN_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
HAS_FAILURE: ${{ contains(needs.*.result, 'failure') }}
IS_FIRST_RC: ${{ needs.parse-validate-version.outputs.is_first_rc }}
MAJOR_MINOR: ${{ needs.parse-validate-version.outputs.major_minor }}
GITHUB_URL: ${{ needs.check-artifacts.outputs.github_url }}
PYPI_URL: ${{ needs.check-artifacts.outputs.pypi_url }}
DOCKER_URL: ${{ needs.check-artifacts.outputs.docker_url }}
BUMP_VERSION_PR_URL: ${{ needs.branch-off.outputs.bump_version_pr_url }}
run: .github/utils/prepare_release_notification.sh
- name: Send release notification to Slack
uses: slackapi/slack-github-action@v3
with:
webhook: ${{ secrets.SLACK_WEBHOOK_URL_RELEASE }}
webhook-type: incoming-webhook
payload: |
text: "${{ steps.prepare-notification.outputs.text }}"
blocks:
- type: "section"
text:
type: "mrkdwn"
text: "${{ steps.prepare-notification.outputs.text }}"
================================================
FILE: .github/workflows/release_notes.yml
================================================
name: Check Release Notes
on:
pull_request:
types:
- opened
- reopened
- synchronize
- ready_for_review
- labeled
- unlabeled
paths:
- "**.py"
- "pyproject.toml"
- "!.github/**/*.py"
- "releasenotes/notes/*.yaml"
jobs:
reno:
runs-on: ubuntu-slim
env:
PYTHON_VERSION: "3.10"
steps:
- name: Checkout
uses: actions/checkout@v6
with:
# With the default value of 1, there are corner cases where tj-actions/changed-files
# fails with a `no merge base` error
fetch-depth: 0
- uses: actions/setup-python@v6
with:
python-version: "${{ env.PYTHON_VERSION }}"
- name: Get release note files
id: changed-files
uses: tj-actions/changed-files@v47
with:
files: releasenotes/notes/*.yaml
- name: Check release notes
if: steps.changed-files.outputs.any_changed == 'false' && !contains( github.event.pull_request.labels.*.name, 'ignore-for-release-notes')
run: |
# Check if any of the commit messages contain tags ci/docs/test
if git log --pretty=%s origin/main..HEAD | grep -E '^(ci:|docs:|test:)' > /dev/null; then
echo "Skipping release note check for commits with 'ci:', 'docs:', or 'test:' tags."
else
echo "::error::The release notes file is missing, please add one or attach the label 'ignore-for-release-notes' to this PR."
exit 1
fi
- name: Verify release notes formatting
if: steps.changed-files.outputs.any_changed == 'true' && !contains( github.event.pull_request.labels.*.name, 'ignore-for-release-notes')
run: |
pip install "reno<5"
reno lint . # it is not possible to pass a list of files to reno lint
- name: Check reStructuredText code formatting
if: steps.changed-files.outputs.any_changed == 'true' && !contains( github.event.pull_request.labels.*.name, 'ignore-for-release-notes')
shell: python
run: |
files = "${{ steps.changed-files.outputs.all_changed_files }}".split()
errors = []
for filepath in files:
with open(filepath) as f:
for line_no, line in enumerate(f, start=1):
# Check for triple backticks (Markdown code blocks)
if "```" in line:
err = (f"Format error in {filepath}:{line_no}: "
"Found triple backticks. Use reStructuredText code block directive instead: .. code:: python")
errors.append(err)
# Check for single backticks (Markdown inline code)
if "`" in line.replace("```", "").replace("``", ""):
err = (f"Format error in {filepath}:{line_no}: "
"Found single backticks. Use double backticks (``code``) for inline code.")
errors.append(err)
if errors:
raise Exception("\n".join(errors))
================================================
FILE: .github/workflows/release_notes_skipper.yml
================================================
name: Check Release Notes
on:
pull_request:
types:
- opened
- reopened
- synchronize
- ready_for_review
- labeled
- unlabeled
paths-ignore:
- "**.py"
- "pyproject.toml"
- "!.github/**/*.py"
- "releasenotes/notes/*.yaml"
jobs:
reno:
runs-on: ubuntu-slim
steps:
- name: Skip mandatory job
run: echo "Skipped!"
================================================
FILE: .github/workflows/slow.yml
================================================
# If you change this name also do it in ci_metrics.yml
name: Slow Integration Tests
# The workflow will always run, but the actual tests will only execute when:
# - The workflow is triggered manually
# - The workflow is scheduled
# - The PR has the "run-slow-tests" label
# - The push is to a release branch
# - There are changes to relevant files.
# Note: If no conditions are met, the workflow will complete successfully without running tests
# to satisfy Branch Protection rules.
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
HF_API_TOKEN: ${{ secrets.HUGGINGFACE_API_KEY }}
PYTHON_VERSION: "3.10"
HATCH_VERSION: "1.16.5"
HAYSTACK_MPS_ENABLED: false
HAYSTACK_XPU_ENABLED: false
on:
workflow_dispatch: # Activate this workflow manually
schedule:
- cron: "0 0 * * *"
push:
branches:
# release branches have the form v1.9.x
- "v[0-9].*[0-9].x"
pull_request:
types:
- opened
- reopened
- synchronize
- labeled
- unlabeled
jobs:
check-if-changed:
# This job checks if the relevant files have been changed.
# We check for changes in the check-if-changed job instead of using paths/paths-ignore at workflow level.
# This ensures the "Slow Integration Tests completed" job always runs, which is required by Branch Protection rules.
name: Check if changed
runs-on: ubuntu-slim
permissions:
pull-requests: read
# Specifying outputs is not needed to make the job work, but only to comply with actionlint
outputs:
changes: ${{ steps.changes.outputs.changes }}
steps:
- uses: actions/checkout@v6
- name: Check for changed code
id: changes
uses: dorny/paths-filter@v4
with:
# List of Python files that trigger slow integration tests when modified
filters: |
changes:
- "haystack/components/audio/whisper_local.py"
- "haystack/components/classifiers/zero_shot_document_classifier.py"
- "haystack/components/converters/tika.py"
- "haystack/components/embedders/hugging_face_api_document_embedder.py"
- "haystack/components/embedders/hugging_face_api_text_embedder.py"
- "haystack/components/embedders/backends/sentence_transformers_backend.py"
- "haystack/components/embedders/backends/sentence_transformers_sparse_backend.py"
- "haystack/components/embedders/image/sentence_transformers_doc_image_embedder.py"
- "haystack/components/embedders/sentence_transformers_text_embedder.py"
- "haystack/components/embedders/sentence_transformers_sparse_document_embedder.py"
- "haystack/components/embedders/sentence_transformers_sparse_text_embedder.py"
- "haystack/components/evaluators/sas_evaluator.py"
- "haystack/components/generators/chat/hugging_face_api.py"
- "haystack/components/generators/chat/hugging_face_local.py"
- "haystack/components/generators/hugging_face_api.py"
- "haystack/components/generators/hugging_face_local_generator.py"
- "haystack/components/preprocessors/embedding_based_document_splitter.py"
- "haystack/components/rankers/sentence_transformers_diversity.py"
- "haystack/components/rankers/sentence_transformers_similarity.py"
- "haystack/components/rankers/transformers_similarity.py"
- "haystack/components/readers/extractive.py"
- "haystack/components/retrievers/multi_query_embedding_retriever.py"
- "haystack/components/routers/transformers_text_router.py"
- "haystack/components/routers/zero_shot_text_router.py"
- "test/components/audio/test_whisper_local.py"
- "test/components/classifiers/test_zero_shot_document_classifier.py"
- "test/components/converters/test_tika_doc_converter.py"
- "test/components/embedders/test_hugging_face_api_document_embedder.py"
- "test/components/embedders/test_hugging_face_api_text_embedder.py"
- "test/components/embedders/image/test_sentence_transformers_doc_image_embedder.py"
- "test/components/embedders/test_sentence_transformers_text_embedder.py"
- "test/components/embedders/test_sentence_transformers_sparse_document_embedder.py"
- "test/components/embedders/test_sentence_transformers_sparse_text_embedder.py"
- "test/components/evaluators/test_sas_evaluator.py"
- "test/components/generators/chat/test_hugging_face_api.py"
- "test/components/generators/chat/test_hugging_face_local.py"
- "test/components/generators/test_hugging_face_api.py"
- "test/components/generators/test_hugging_face_local_generator.py"
- "test/components/preprocessors/test_embedding_based_document_splitter.py"
- "test/components/rankers/test_sentence_transformers_diversity.py"
- "test/components/rankers/test_sentence_transformers_similarity.py"
- "test/components/rankers/test_transformers_similarity.py"
- "test/components/readers/test_extractive.py"
- "test/components/retrievers/test_multi_query_embedding_retriever.py"
- "test/components/routers/test_transformers_text_router.py"
- "test/components/routers/test_zero_shot_text_router.py"
slow-integration-tests:
name: Slow Tests / ${{ matrix.os }}
runs-on: ${{ matrix.os }}
needs: check-if-changed
timeout-minutes: 30
# Run tests if: manual trigger, scheduled, PR has label, release branch, or relevant files changed
if: |
github.event_name == 'workflow_dispatch' ||
github.event_name == 'schedule' ||
(github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'run-slow-tests')) ||
(github.event_name == 'push' && github.ref == 'refs/heads/v[0-9].*[0-9].x') ||
(needs.check-if-changed.outputs.changes == 'true')
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
include:
- os: ubuntu-latest
install_cmd: "sudo apt update && sudo apt install ffmpeg"
- os: macos-latest
install_cmd: "brew install ffmpeg"
- os: windows-latest
install_cmd: "echo 'No additional dependencies needed'"
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "${{ env.PYTHON_VERSION }}"
- name: Install Hatch
id: hatch
shell: bash
run: |
pip install hatch==${{ env.HATCH_VERSION }}
- name: Run Tika
if: matrix.os == 'ubuntu-latest'
run: |
docker run -d -p 9998:9998 apache/tika:2.9.0.0
- name: Install Whisper dependencies
shell: bash
run: ${{ matrix.install_cmd }}
- name: Run tests
run: hatch run test:integration-only-slow
- name: Notify Slack on nightly failure
if: failure() && github.event_name == 'schedule'
uses: deepset-ai/notify-slack-action@v1
with:
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL_NOTIFICATIONS }}
slow-integration-tests-completed:
# This job always runs and succeeds if all tests succeed or are skipped. It is required by Branch Protection rules.
name: Slow Integration Tests completed
runs-on: ubuntu-slim
if: ${{ always() && !cancelled() }}
needs: slow-integration-tests
steps:
- name: Mark tests as completed
run: |
if [ "${{ needs.slow-integration-tests.result }}" = "failure" ]; then
echo "Slow Integration Tests failed!"
exit 1
else
echo "Slow Integration Tests completed!"
fi
================================================
FILE: .github/workflows/stale.yml
================================================
name: 'Stalebot'
on:
schedule:
- cron: '30 1 * * *'
jobs:
makestale:
runs-on: ubuntu-slim
steps:
- uses: actions/stale@v10
with:
any-of-labels: 'proposal,information-needed'
stale-pr-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 10 days.'
days-before-stale: 30
days-before-close: 10
================================================
FILE: .github/workflows/tests.yml
================================================
# If you change this name also do it in ci_metrics.yml
name: Tests
# The workflow will always run, but the actual tests will only execute when:
# - The workflow is triggered manually.
# - The push is to main or a release branch.
# - There are changes to relevant files on a pull request.
# Note: If no conditions are met, the workflow will complete successfully without running tests
# to satisfy Branch Protection rules.
on:
workflow_dispatch: # Activate this workflow manually
push:
branches:
- main
# release branches have the form v1.9.x
- "v[0-9].*[0-9].x"
# when we push, we do not need to satisfy Branch Protection rules, so we can ignore PRs that just change docs
paths-ignore:
- 'docs/**'
- 'docs-website/**'
pull_request:
types:
- opened
- reopened
- synchronize
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
CORE_AZURE_CS_ENDPOINT: ${{ secrets.CORE_AZURE_CS_ENDPOINT }}
CORE_AZURE_CS_API_KEY: ${{ secrets.CORE_AZURE_CS_API_KEY }}
AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }}
AZURE_OPENAI_ENDPOINT: ${{ secrets.AZURE_OPENAI_ENDPOINT }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
HF_API_TOKEN: ${{ secrets.HUGGINGFACE_API_KEY }}
PYTHON_VERSION: "3.10"
HATCH_VERSION: "1.16.5"
jobs:
check-if-changed:
# This job checks if the relevant files have been changed.
# We check for changes in the check-if-changed job instead of using paths/paths-ignore at workflow level.
# This ensures the "Mark tests as completed" job always runs, which is required by Branch Protection rules.
name: Check if changed
runs-on: ubuntu-slim
permissions:
pull-requests: read
# Specifying outputs is not needed to make the job work, but only to comply with actionlint
outputs:
changes: ${{ steps.changes.outputs.changes }}
steps:
- uses: actions/checkout@v6
- name: Check for changed code
id: changes
uses: dorny/paths-filter@v4
with:
filters: |
changes:
- "haystack/**/*.py"
- "test/**/*.py"
- "pyproject.toml"
- ".github/utils/*.py"
- "scripts/*.py"
format:
needs: check-if-changed
# Run tests if: manual trigger, push to main/release, or relevant files changed
if: |
github.event_name == 'workflow_dispatch' ||
github.event_name == 'push' ||
(needs.check-if-changed.outputs.changes == 'true')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "${{ env.PYTHON_VERSION }}"
- name: Install Hatch
run: pip install hatch==${{ env.HATCH_VERSION }}
- name: Ruff - check format and linting
run: hatch run fmt-check
- name: Check presence of license header
run: docker run --rm -v "$(pwd):/github/workspace" ghcr.io/korandoru/hawkeye check
check-imports:
needs: format
runs-on: ubuntu-slim
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "${{ env.PYTHON_VERSION }}"
- name: Install Hatch
run: pip install hatch==${{ env.HATCH_VERSION }}
- name: Check imports
run: hatch run python .github/utils/check_imports.py
unit-tests:
name: Unit / ${{ matrix.os }}
needs: format
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "${{ env.PYTHON_VERSION }}"
- name: Install Hatch
id: hatch
shell: bash
run: |
pip install hatch==${{ env.HATCH_VERSION }}
echo "env=$(hatch env find test)" >> "$GITHUB_OUTPUT"
- name: Run
run: hatch run test:unit
- uses: actions/cache/save@v5
id: cache
if: matrix.os == 'macos-latest'
with:
path: ${{ steps.hatch.outputs.env }}
key: ${{ runner.os }}-${{ github.sha }}
- name: Coveralls
# We upload only coverage for ubuntu as handling both os
# complicates the workflow too much for little to no gain
if: matrix.os == 'ubuntu-latest'
uses: coverallsapp/github-action@v2
continue-on-error: true
with:
path-to-lcov: coverage.xml
mypy:
needs: unit-tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
# With the default value of 1, there are corner cases where tj-actions/changed-files
# fails with a `no merge base` error
fetch-depth: 0
- name: Get changed files
id: files
uses: tj-actions/changed-files@v47
with:
files: |
**/*.py
pyproject.toml
files_ignore: |
test/**
.github/**
scripts/**
- uses: actions/setup-python@v6
if: steps.files.outputs.any_changed == 'true'
with:
python-version: "${{ env.PYTHON_VERSION }}"
- name: Install Hatch
id: hatch
if: steps.files.outputs.any_changed == 'true'
run: |
pip install hatch==${{ env.HATCH_VERSION }}
echo "env=$(hatch env find test)" >> "$GITHUB_OUTPUT"
- name: Mypy
if: steps.files.outputs.any_changed == 'true'
run: |
mkdir .mypy_cache
hatch run test:types
integration-tests-linux:
name: Integration / ubuntu-latest
needs: unit-tests
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "${{ env.PYTHON_VERSION }}"
- name: Install Hatch
id: hatch
shell: bash
run: |
pip install hatch==${{ env.HATCH_VERSION }}
echo "env=$(hatch env find test)" >> "$GITHUB_OUTPUT"
- name: Run
run: hatch run test:integration-only-fast
integration-tests-macos:
name: Integration / macos-latest
needs: unit-tests
runs-on: macos-latest
timeout-minutes: 30
env:
HAYSTACK_MPS_ENABLED: false
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "${{ env.PYTHON_VERSION }}"
- name: Install Hatch
id: hatch
shell: bash
run: |
pip install hatch==${{ env.HATCH_VERSION }}
echo "env=$(hatch env find test)" >> "$GITHUB_OUTPUT"
- uses: actions/cache/restore@v5
id: cache
with:
path: ${{ steps.hatch.outputs.env }}
key: ${{ runner.os }}-${{ github.sha }}
- name: Run
run: hatch run test:integration-only-fast
integration-tests-windows:
name: Integration / windows-latest
needs: unit-tests
runs-on: windows-latest
timeout-minutes: 30
env:
HAYSTACK_XPU_ENABLED: false
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "${{ env.PYTHON_VERSION }}"
- name: Install Hatch
id: hatch
shell: bash
run: |
pip install hatch==${{ env.HATCH_VERSION }}
echo "env=$(hatch env find test)" >> "$GITHUB_OUTPUT"
- name: Run
run: hatch run test:integration-only-fast
notify-slack-on-failure:
if: failure() && github.ref_name == 'main'
needs:
- check-imports
- mypy
- integration-tests-linux
- integration-tests-macos
- integration-tests-windows
runs-on: ubuntu-slim
steps:
- uses: deepset-ai/notify-slack-action@v1
with:
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL_NOTIFICATIONS }}
tests-completed:
# This job always runs and succeeds if all tests succeed or are skipped. It is required by Branch Protection rules.
name: Mark tests as completed
runs-on: ubuntu-slim
if: ${{ always() && !cancelled() }}
needs:
- check-imports
- mypy
- integration-tests-linux
- integration-tests-macos
- integration-tests-windows
steps:
- name: Mark tests as completed
run: |
if [ "${{ needs.check-imports.result }}" = "failure" ] ||
[ "${{ needs.mypy.result }}" = "failure" ] ||
[ "${{ needs.integration-tests-linux.result }}" = "failure" ] ||
[ "${{ needs.integration-tests-macos.result }}" = "failure" ] ||
[ "${{ needs.integration-tests-windows.result }}" = "failure" ]; then
echo "Tests failed!"
exit 1
else
echo "Tests completed!"
fi
================================================
FILE: .github/workflows/workflows_linting.yml
================================================
name: Github workflows linter
on:
pull_request:
paths:
- ".github/workflows/**"
jobs:
lint-workflows:
runs-on: ubuntu-slim
steps:
- name: Checkout
uses: actions/checkout@v6
- uses: actions/setup-go@v6
with:
go-version: ">=1.24.0"
- name: Install actionlint
run: go install github.com/rhysd/actionlint/cmd/actionlint@latest
- name: Run actionlint
env:
SHELLCHECK_OPTS: --exclude=SC2102
run: actionlint
================================================
FILE: .gitignore
================================================
# Local run files
qa.db
**/qa.db
**/*qa*.db
**/test-reports
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Docs website (Docusaurus)
docs-website/.docusaurus/
docs-website/build/
docs-website/node_modules/
docs-website/.cache-loader/
docs-website/.eslintcache
docs-website/.netlify/
docs-website/coverage/
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# API reference
pydoc/temp/
tmp_api_reference/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# PyCharm
.idea
# VSCode
.vscode
# haystack files
haystack/document_store/qa.db
**/mlruns/**
src
!docs-website/src/
models
saved_models
*_build
rest_api/file-upload/*
**/feedback_squad_direct.json
haystack/json-schemas
.haystack_debug
.DS_Store
# http cache (requests-cache)
**/http_cache.sqlite
# ruff
.ruff_cache
# Zed configs
.zed/*
# uv
uv.lock
CLAUDE.md
================================================
FILE: .pre-commit-config.yaml
================================================
fail_fast: true
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0
hooks:
- id: check-ast # checks Python syntax
- id: check-json # checks JSON syntax
- id: check-merge-conflict # checks for no merge conflict strings
- id: check-shebang-scripts-are-executable # checks all shell scripts have executable permissions
- id: check-toml # checks TOML syntax
- id: check-yaml # checks YAML syntax
- id: end-of-file-fixer # checks there is a newline at the end of the file
- id: mixed-line-ending # normalizes line endings
- id: no-commit-to-branch # prevents committing to main
- id: trailing-whitespace # trims trailing whitespace
args: [--markdown-linebreak-ext=md, --markdown-linebreak-ext=mdx]
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.15.2
hooks:
- id: ruff-check
args: [ --fix ]
- id: ruff-format
- repo: local
hooks:
- id: ruff-format-docs
name: ruff-format-docs
language: python
entry: python scripts/ruff_format_docs.py --line-length=88
files: ^docs-website/.*\.mdx$
types: [text]
additional_dependencies:
- ruff
- add-trailing-comma
- repo: https://github.com/codespell-project/codespell
rev: v2.4.1
hooks:
- id: codespell
exclude: "haystack/data/abbreviations"
args: ["--toml", "pyproject.toml"]
additional_dependencies:
- tomli
- repo: https://github.com/rhysd/actionlint
rev: v1.7.10
hooks:
- id: actionlint-docker
args: ["-ignore", "SC2102"]
================================================
FILE: CITATION.cff
================================================
cff-version: 1.2.0
message: "If you use this software, please cite it using these metadata."
title: "Haystack: the end-to-end NLP framework for pragmatic builders"
date-released: 2019-11-14
url: "https://github.com/deepset-ai/haystack"
authors:
- family-names: Pietsch
given-names: Malte
- family-names: Möller
given-names: Timo
- family-names: Kostic
given-names: Bogdan
- family-names: Risch
given-names: Julian
- family-names: Pippi
given-names: Massimiliano
- family-names: Jobanputra
given-names: Mayank
- family-names: Zanzottera
given-names: Sara
- family-names: Cerza
given-names: Silvano
- family-names: Blagojevic
given-names: Vladimir
- family-names: Stadelmann
given-names: Thomas
- family-names: Soni
given-names: Tanay
- family-names: Lee
given-names: Sebastian
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Haystack
First off, thanks for taking the time to contribute! :blue_heart:
All types of contributions are encouraged and valued. See the [Table of Contents](#table-of-contents)
for different ways to help and details about how this project handles them. Please make sure to read
the relevant section before making your contribution. It will make it a lot easier for us maintainers
and smooth out the experience for all involved. The community looks forward to your contributions!
> [!TIP]
> If you like Haystack but just don't have time to contribute, that's fine. There are other easy ways to support the
> project and show your appreciation: star this repository ⭐, mention Haystack at local meetups and tell your
> friends/colleagues, or share what you build and tag [Haystack on X (Twitter)](https://x.com/Haystack_ai) and
> [Haystack on LinkedIn](https://www.linkedin.com/showcase/haystack-ai-framework) — we'd love to see it!
## Your first PR — high-level to-do list
Use this checklist to stay on track for your first code PR:
- **Pick an issue** — Choose one labeled [good first issue](https://github.com/deepset-ai/haystack/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) or [contributions wanted](https://github.com/deepset-ai/haystack/issues?q=is%3Aissue%20state%3Aopen%20label%3A"Contributions%20wanted!"). Avoid issues marked or commented as [handled internally](#issues-not-open-for-external-contributions).
- **Fork and clone** — [Clone the repository](#clone-the-git-repository), run `pre-commit install`, and create a branch.
- **Set up and run** — [Set up your development environment](#setting-up-your-development-environment), run unit tests with `hatch run test:unit` and run quality checks with `hatch run test:types` and `hatch run fmt`.
- **Implement and test** — Make your changes, add or update tests as needed, and ensure tests and pre-commit checks pass locally.
- **Documentation** — If your change adds or alters user-facing behavior, add a new docs page or update the relevant one in `docs-website/` (edit under `docs/` for the next release; add new pages to `sidebars.js`). See the [Documentation Contributing Guide](docs-website/CONTRIBUTING.md) for where to edit, frontmatter, and navigation.
- **Release notes** — Add a release note under `releasenotes/notes` with `hatch run release-note your-change-name` (see [Release notes](#release-notes)); maintainers can add `ignore-for-release-notes` for tests-only or CI-only changes.
- **Open the PR** — Use a [conventional commit](https://www.conventionalcommits.org/en/v1.0.0/) title, fill the [PR template](.github/pull_request_template.md), and if the PR was fully AI-generated, add a [short disclaimer](#using-ai-assistants-to-contribute). Enable "Allow edits and access to secrets by maintainers" on the PR.
- **Sign the CLA** — A [Contributor Licence Agreement (CLA)](https://cla-assistant.io/deepset-ai/haystack) is required for all contributions. Sign when prompted so your PR is ready for review (see [CLA](#contributor-licence-agreement-cla)).
- **Once the PR is open** — Fix any [CI](#ci-continuous-integration) failures and address review feedback.
**Table of Contents**
- [Contributing to Haystack](#contributing-to-haystack)
- [Your first PR — high-level to-do list](#your-first-pr--high-level-to-do-list)
- [Code of Conduct](#code-of-conduct)
- [I Have a Question](#i-have-a-question)
- [Reporting Bugs](#reporting-bugs)
- [Before Submitting a Bug Report](#before-submitting-a-bug-report)
- [How Do I Submit a Good Bug Report?](#how-do-i-submit-a-good-bug-report)
- [Suggesting Enhancements](#suggesting-enhancements)
- [Before Submitting an Enhancement](#before-submitting-an-enhancement)
- [How Do I Submit a Good Enhancement Suggestion?](#how-do-i-submit-a-good-enhancement-suggestion)
- [Contributing to Documentation](#contributing-to-documentation)
- [Contribute code](#contribute-code)
- [Where to start](#where-to-start)
- [Issues not open for external contributions](#issues-not-open-for-external-contributions)
- [Example high-quality contributions](#example-high-quality-contributions)
- [Using AI assistants to contribute](#using-ai-assistants-to-contribute)
- [Setting up your development environment](#setting-up-your-development-environment)
- [Clone the git repository](#clone-the-git-repository)
- [Run the tests locally](#run-the-tests-locally)
- [Requirements for Pull Requests](#requirements-for-pull-requests)
- [Release notes](#release-notes)
- [CI (Continuous Integration)](#ci-continuous-integration)
- [Working from GitHub forks](#working-from-github-forks)
- [Writing tests](#writing-tests)
- [Unit test](#unit-test)
- [Integration test](#integration-test)
- [End to End (e2e) test](#end-to-end-e2e-test)
- [Slow/unstable integration tests (for maintainers)](#slowunstable-integration-tests-for-maintainers)
- [Contributor Licence Agreement (CLA)](#contributor-licence-agreement-cla)
## Code of Conduct
This project and everyone participating in it is governed by our [Code of Conduct](code_of_conduct.txt).
By participating, you are expected to uphold this code. Please report unacceptable behavior to haystack@deepset.ai.
## I Have a Question
Before you ask a question, it is best to search for existing [Issues](https://github.com/deepset-ai/haystack/issues) that might help you. In case you have
found a suitable issue and still need clarification, you can write your question in this issue. It is also advisable to
search the internet for answers first.
If you then still feel the need to ask a question and need clarification, you can use [Haystack's Discord Server](https://discord.com/invite/xYvH6drSmA).
## Reporting Bugs
### Before Submitting a Bug Report
A good bug report shouldn't leave others needing to chase you up for more information. Therefore, we ask you to
investigate carefully, collect information, and describe the issue in detail in your report. Please complete the
following steps in advance to help us fix any potential bugs as fast as possible.
- Make sure that you are using the latest version.
- Determine if your bug is really a bug and not an error on your side, for example, using incompatible versions.
Make sure that you have read the [documentation](https://docs.haystack.deepset.ai/docs/intro). If you are looking
for support, you might want to check [this section](#i-have-a-question).
- To see if other users have experienced (and potentially already solved) the same issue you are having, check if there
is not already a bug report existing for your bug or error in the [bug tracker](https://github.com/deepset-ai/haystack/issues).
- Also make sure to search the internet (including Stack Overflow) to see if users outside of the GitHub community have
discussed the issue.
- Collect information about the bug:
- OS, Platform and Version (Windows, Linux, macOS, x86, ARM)
- Version of Haystack and the integrations you're using
- Possibly your input and the output
- If you can reliably reproduce the issue, a snippet of code we can use
### How Do I Submit a Good Bug Report?
> [!IMPORTANT]
> You must never report security-related issues, vulnerabilities, or bugs, including sensitive information, to the issue tracker, or elsewhere in public. Instead, sensitive bugs must be reported using [this link](https://github.com/deepset-ai/haystack/security/advisories/new).
We use GitHub issues to track bugs and errors. If you run into an issue with the project:
- Open an [Issue of type Bug Report](https://github.com/deepset-ai/haystack/issues/new?assignees=&labels=bug&projects=&template=bug_report.md&title=).
- Explain the behavior you would expect and the actual behavior.
- Please provide as much context as possible and describe the *reproduction steps* that someone else can follow to
recreate the issue on their own. This usually includes your code. For good bug reports, you should isolate the problem
and create a reduced test case.
- Provide the information you collected in the previous section.
Once it's filed:
- The project team will label the issue accordingly.
- A team member will try to reproduce the issue with your provided steps. If there are no reproduction steps or no
obvious way to reproduce the issue, the team will ask you for those steps.
- If the team is able to reproduce it, the issue will be scheduled for a fix or left to be
[picked up by a community contributor](https://github.com/deepset-ai/haystack/issues?q=is%3Aissue%20state%3Aopen%20label%3A"Contributions%20wanted!").
## Suggesting Enhancements
This section guides you through submitting an enhancement suggestion, including new integrations and improvements
to existing ones. Following these guidelines will help maintainers and the community to understand your suggestion and
find related suggestions.
### Before Submitting an Enhancement
- Make sure that you are using the latest version.
- Read the [documentation](https://docs.haystack.deepset.ai/docs/intro) carefully and find out if the functionality
is already covered, possibly via particular configuration parameters.
- Perform a [search](https://github.com/deepset-ai/haystack/issues) to see if the enhancement has already been suggested. If it has, add a comment to the
existing issue instead of opening a new one.
- Find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to
convince the project's developers of the merits of this feature. Keep in mind that we want features that will be
useful to the majority of our users and not just a small subset. If you're just targeting a minority of users,
consider writing and distributing the integration on your own.
### How Do I Submit a Good Enhancement Suggestion?
Enhancement suggestions are tracked as GitHub issues of type [Feature request](https://github.com/deepset-ai/haystack/issues/new?template=feature_request.md).
- Use a **clear and descriptive title** for the issue to identify the suggestion.
- Fill in the issue following the template
## Contributing to Documentation
If you'd like to improve the documentation by fixing errors, clarifying explanations, adding examples, or creating new guides, see the [Documentation Contributing Guide](docs-website/CONTRIBUTING.md).
## Contribute code
> [!IMPORTANT]
> When contributing to this project, you must agree that you have authored or carefully reviewed 100% of the content, that you have the necessary rights to the content and that the content you contribute may be provided under the project license.
### Where to start
If this is your first code contribution, a good starting point is looking for an open issue that's marked with the label
["good first issue"](https://github.com/deepset-ai/haystack/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22).
The core contributors periodically mark certain issues as good for first-time contributors. Those issues are usually
limited in scope, easily fixable and low priority, so there is absolutely no reason why you should not try fixing them.
It's a good excuse to start looking into the project and a safe space to experiment and fail: if you don't get the
grasp of something, pick another one! Once you become comfortable contributing to Haystack, you can have a look at the
list of issues marked as [contributions wanted](https://github.com/orgs/deepset-ai/projects/14/views/1) to look for your
next contribution!
### Issues not open for external contributions
Some issues are handled internally by the core team and are **not open for external contributions**. You may see a
comment on such issues like:
> 👋 Hello there! This issue will be handled internally and isn't open for external contributions. If you'd like to contribute, please take a look at issues labeled **contributions welcome** or **good first issue**. We'd really appreciate it!
> [!WARNING]
> **Please do not open pull requests for issues that are marked or commented as handled internally.** Your work may not be merged. Instead, look for issues labeled [good first issue](https://github.com/deepset-ai/haystack/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) or [contributions wanted](https://github.com/deepset-ai/haystack/issues?q=is%3Aissue%20state%3Aopen%20label%3A"Contributions%20wanted!") — we'd love your help there!
### Example high-quality contributions
Looking at strong pull requests is a great way to learn our standards. Example high-quality PRs: [#9270](https://github.com/deepset-ai/haystack/pull/9270), [#9227](https://github.com/deepset-ai/haystack/pull/9227), [#9271](https://github.com/deepset-ai/haystack/pull/9271), [#8648](https://github.com/deepset-ai/haystack/pull/8648), [#8767](https://github.com/deepset-ai/haystack/pull/8767). Use them as references for structure, testing, documentation, and how to describe changes in the PR description and release notes.
### Using AI assistants to contribute
You may use AI assistants or agents to help you implement a contribution. Please use them wisely:
- **Review and understand** all generated code before submitting. You are responsible for the contribution.
- **Run tests and checks** locally (e.g. `hatch run test:unit`, `hatch run fmt`) so your PR meets our quality bar.
- **If your PR was fully AI-generated**, add a short disclaimer in the PR description, for example: *"This PR was
fully generated with an AI assistant. I have reviewed the changes and run the relevant tests."*
This helps maintainers and keeps the project ready for both human and AI contributors.
### Setting up your development environment
*To run Haystack tests locally, ensure your development environment uses Python >=3.10 and <3.14.*
Haystack makes heavy use of [Hatch](https://hatch.pypa.io/latest/), a Python project manager that we use to set up the
virtual environments, build the project, and publish packages. As you can imagine, the first step towards becoming a
Haystack contributor is installing Hatch. There are a variety of installation methods depending on your operating system
platform, version, and personal taste: please have a look at [this page](https://hatch.pypa.io/latest/install/#installation)
and keep reading once you can run from your terminal:
```console
$ hatch --version
Hatch, version 1.14.1
```
You can create a new virtual environment for Haystack with `hatch` by running:
```console
$ hatch shell
```
### Clone the git repository
You won't be able to make changes directly to this repo, so the first step is to [create a fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo).
Once your fork is ready, you can clone a local copy with:
```console
$ git clone https://github.com/YOUR-USERNAME/haystack
```
If everything worked, you should be able to do something like this (the output might be different):
```console
$ cd haystack
$ hatch version
2.3.0-rc0
```
Last, install the pre-commit hooks with:
```bash
pre-commit install
```
This utility will run some tasks right before all `git commit` operations. From now on, your `git commit` output for
Haystack should look something like this:
```
> git commit -m "test"
check python ast.........................................................Passed
check json...........................................(no files to check)Skipped
check for merge conflicts................................................Passed
check that scripts with shebangs are executable..........................Passed
check toml...........................................(no files to check)Skipped
check yaml...........................................(no files to check)Skipped
fix end of files.........................................................Passed
mixed line ending........................................................Passed
don't commit to branch...................................................Passed
trim trailing whitespace.................................................Passed
ruff.....................................................................Passed
codespell................................................................Passed
Lint GitHub Actions workflow files...................(no files to check)Skipped
[massi/contrib d18a2577] test
2 files changed, 178 insertions(+), 45 deletions(-)
```
### Run the tests locally
Tests will automatically run in our CI for every commit you push to your PR on Github. In order to save precious CI time, we encourage you to run the tests locally before pushing new commits to Github. From the root of the git repository, you can run all the unit tests like this:
```sh
hatch run test:unit
```
Hatch will create a dedicated virtual environment, sync the required dependencies and run all the unit tests from the
project. If you want to run a subset of the tests or even one test in particular, `hatch` will accept all the
options you would normally pass to `pytest`, for example:
```sh
# run one test method from a specific test class in a test file
hatch run test:unit test/test_logging.py::TestSkipLoggingConfiguration::test_skip_logging_configuration
```
### Run code quality checks locally
We also use tools to ensure consistent code style, quality, and static type checking. The quality of your code will be
tested by the CI, but once again, running the checks locally will speed up the review cycle.
To check for static type errors, run:
```sh
hatch run test:types
```
To format your code and perform linting using Ruff (with automatic fixes), run:
```sh
hatch run fmt
```
## Requirements for Pull Requests
To ease the review process, please follow the instructions in this paragraph when creating a Pull Request:
- For the title, use the [conventional commit convention](https://www.conventionalcommits.org/en/v1.0.0/).
- For the body, follow the existing [pull request template](https://github.com/deepset-ai/haystack/blob/main/.github/pull_request_template.md) to describe and document your changes.
- If you used an AI assistant and the PR was **fully AI-generated**, include a brief disclaimer in the PR description
(see [Using AI assistants to contribute](#using-ai-assistants-to-contribute)).
### Release notes
Each PR must include a release notes file under the `releasenotes/notes` path created with `reno`, and a CI check will
fail if that's not the case. Pull requests with changes limited to tests, code comments or docstrings, and changes to
the CI/CD systems can be labeled with `ignore-for-release-notes` by a maintainer in order to bypass the CI check.
For example, if your PR is bumping the `transformers` version in the `pyproject.toml` file, that's something that
requires release notes. To create the corresponding file, from the root of the repo run:
```
$ hatch run release-note bump-transformers-to-4-31
```
A release notes file in YAML format will be created in the appropriate folder, appending a unique id to the name of the
release note you provided (in this case, `bump-transformers-to-4-31`). To add the actual content of the release notes,
you must edit the file that's just been created. In the file, you will find multiple sections along with an explanation
of what they're for. You have to remove all the sections that don't fit your release notes, in this case for example
you would fill in the `enhancements` section to describe the change:
```yaml
enhancements:
- |
Upgrade transformers to the latest version 4.31.0 so that Haystack can support the new LLama2 models.
```
Each section of the YAML file must follow [reStructuredText formatting](https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html).
For inline code, use double backticks to wrap the code.
```
``OpenAIChatGenerator``
```
For code blocks, use the [code block directive](https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-code-block).
```
.. code:: python
from haystack.dataclasses import ChatMessage
message = ChatMessage.from_user("Hello!")
print(message.text)
```
You can now add the file to the same branch containing the code changes. Your release note will be part of your pull
request and reviewed along with any code you changed.
## CI (Continuous Integration)
We use GitHub Action for our Continuous Integration tasks. This means that as soon as you open a PR, GitHub will start
executing some workflows on your changes, like automated tests, linting, formatting, api docs generation, etc.
If all goes well, at the bottom of your PR page you should see something like this, where all checks are green.

If you see some red checks (like the following), then something didn't work, and action is needed on your side.

Click on the failing test and see if there are instructions at the end of the logs of the failed test.
For example, in the case above, the CI will give you instructions on how to fix the issue.

## Working from GitHub forks
To help maintainers, we usually ask contributors to grant us push access to their fork.
To do so, please verify that "Allow edits and access to secrets by maintainers" on the PR preview page is checked
(you can check it later on the PR's sidebar once it's created).

## Writing tests
We formally define three scopes for tests in Haystack with different requirements and purposes:
### Unit test
- Tests a single logical concept
- Execution time is a few milliseconds
- Any external resource is mocked
- Always returns the same result
- Can run in any order
- Runs at every commit in PRs, automated through `hatch run test:unit`
- Can run locally with no additional setup
- **Goal: being confident in merging code**
### Integration test
- Tests a single logical concept
- Execution time is a few seconds
- It uses external resources that must be available before execution
- When using models, cannot use inference
- Always returns the same result or an error
- Can run in any order
- Runs at every commit in PRs, automated through `hatch run test:integration`
- Can run locally with some additional setup (e.g. Docker)
- **Goal: being confident in merging code**
### End to End (e2e) test
- Tests a sequence of multiple logical concepts
- Execution time has no limits (can be always on)
- Can use inference
- Evaluates the results of the execution or the status of the system
- It uses external resources that must be available before execution
- Can return different results
- Can be dependent on the order
- Can be wrapped into any process execution
- Runs outside the development cycle (nightly or on demand)
- Might not be possible to run locally due to system and hardware requirements
- **Goal: being confident in releasing Haystack**
### Slow/unstable Integration Tests (for maintainers)
To keep the CI stable and reasonably fast, we run certain tests in a separate workflow.
We use `@pytest.mark.slow` for tests that clearly meet one or more of the following conditions:
- Unstable (such as call unstable external services)
- Slow (such as model inference on CPU)
- Require special setup (such as installing system dependencies, running Docker containers).
⚠️ The main goal of this separation is to keep the regular integration tests fast and **stable**.
We should try to avoid including too many modules in the Slow Integration Tests workflow: doing so may reduce its effectiveness.
#### How does it work?
These tests are executed by the [Slow Integration Tests workflow](.github/workflows/slow.yml).
The workflow always runs, but the tests only execute when:
- There are changes to relevant files (as listed in the [workflow file](.github/workflows/slow.yml)).
**Important**: If you mark a test but do not include both the test file and the file to be tested in the list, the test won't run automatically.
- The workflow is scheduled (runs nightly).
- The workflow is triggered manually (with the "Run workflow" button on [this page](https://github.com/deepset-ai/haystack/actions/workflows/slow.yml)).
- The PR has the "run-slow-tests" label (you can use this label to trigger the tests even if no relevant files are changed).
- The push is to a release branch.
If none of the above conditions are met, the workflow completes successfully without running tests to satisfy Branch Protection rules.
*Hatch commands for running Integration Tests*:
- `hatch run test:integration` runs all integrations tests (fast + slow).
- `hatch run test:integration-only-fast` skips the slow tests.
- `hatch run test:integration-only-slow` runs only slow tests.
## Contributor Licence Agreement (CLA)
Significant contributions to Haystack require a Contributor License Agreement (CLA). If the contribution requires a CLA,
we will get in contact with you. CLAs are quite common among company-backed open-source frameworks, and our CLA’s wording
is similar to other popular projects, like [Rasa](https://cla-assistant.io/RasaHQ/rasa) or
[Google's Tensorflow](https://cla.developers.google.com/clas/new?domain=DOMAIN_GOOGLE&kind=KIND_INDIVIDUAL)
(retrieved 4th November 2021).
The agreement's main purpose is to protect the continued open use of Haystack. At the same time, it also helps in
\protecting you as a contributor. Contributions under this agreement will ensure that your code will continue to be
open to everyone in the future (“You hereby grant to Deepset **and anyone** [...]”) as well as remove liabilities on
your end (“you provide your Contributions on an AS IS basis, without warranties or conditions of any kind [...]”). You
can find the Contributor Licence Agreement [here](https://cla-assistant.io/deepset-ai/haystack).
If you have further questions about the licensing, feel free to reach out to contributors@deepset.ai.
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2021 deepset GmbH
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
<div align="center">
<a href="https://haystack.deepset.ai/"><img src="https://raw.githubusercontent.com/deepset-ai/haystack/main/images/banner.png" alt="Blue banner with the Haystack logo and the text ‘haystack by deepset – The Open Source AI Framework for Production Ready RAG & Agents’ surrounded by abstract icons representing search, documents, agents, pipelines, and cloud systems."></a>
| | |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| CI/CD | [](https://github.com/deepset-ai/haystack/actions/workflows/tests.yml) [](https://github.com/python/mypy) [](https://coveralls.io/github/deepset-ai/haystack?branch=main) [](https://github.com/astral-sh/ruff) |
| Docs | [](https://docs.haystack.deepset.ai) |
| Package | [](https://pypi.org/project/haystack-ai/)   [](https://anaconda.org/conda-forge/haystack-ai) [](LICENSE) [](https://github.com/deepset-ai/haystack/actions/workflows/license_compliance.yml) |
| Meta | [](https://discord.com/invite/xYvH6drSmA) [](https://twitter.com/haystack_ai) |
</div>
[Haystack](https://haystack.deepset.ai/) is an open-source AI orchestration framework for building production-ready LLM applications in Python.
Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Build scalable RAG systems, multimodal applications, semantic search, question answering, and autonomous agents, all in a transparent architecture that lets you experiment, customize deeply, and deploy with confidence.
## Table of Contents
- [Installation](#installation)
- [Documentation](#documentation)
- [Features](#features)
- [Haystack Enterprise: Support & Platform](#haystack-enterprise-support--platform)
- [Telemetry](#telemetry)
- [🖖 Community](#-community)
- [Contributing to Haystack](#contributing-to-haystack)
- [Organizations using Haystack](#organizations-using-haystack)
## Installation
The simplest way to get Haystack is via pip:
```sh
pip install haystack-ai
```
Install nightly pre-releases to try the newest features:
```sh
pip install --pre haystack-ai
```
Haystack supports multiple installation methods, including Docker images. For a comprehensive guide, please refer
to the [documentation](https://docs.haystack.deepset.ai/docs/installation).
## Documentation
If you're new to the project, check out ["What is Haystack?"](https://haystack.deepset.ai/overview/intro) then go
through the ["Get Started Guide"](https://haystack.deepset.ai/overview/quick-start) and build your first LLM application
in a matter of minutes. Keep learning with the [tutorials](https://haystack.deepset.ai/tutorials). For more advanced
use cases, or just to get some inspiration, you can browse our Haystack recipes in the
[Cookbook](https://haystack.deepset.ai/cookbook).
At any given point, hit the [documentation](https://docs.haystack.deepset.ai/docs/intro) to learn more about Haystack, what it can do for you, and the technology behind.
## Features
**Built for context engineering**
Design flexible systems with explicit control over how information is retrieved, ranked, filtered, combined, structured, and routed before it reaches the model. Define pipelines and agent workflows where retrieval, memory, tools, and generation are transparent and traceable.
**Model- and vendor-agnostic**
Integrate with OpenAI, Mistral, Anthropic, Cohere, Hugging Face, Azure OpenAI, AWS Bedrock, local models, and many others. Swap models or infrastructure components without rewriting your system.
**Modular and customizable**
Use built-in components for retrieval, indexing, tool calling, memory, and evaluation, or create your own. Add loops, branches, and conditional logic to precisely control how context moves through your pipelines and agent workflows.
**Extensible ecosystem**
Build and share custom components through a consistent interface that makes it easy for the community and third parties to extend Haystack and contribute to an open ecosystem.
> [!TIP]
>
> Would you like to deploy and serve Haystack pipelines as **REST APIs** or **MCP servers**? [Hayhooks](https://github.com/deepset-ai/hayhooks) provides a simple way for you to wrap pipelines and agents with custom logic and expose them through HTTP endpoints or MCP. It also supports OpenAI-compatible chat completion endpoints and works with chat UIs like [open-webui](https://openwebui.com/).
## Haystack Enterprise: Support & Platform
Get expert support from the Haystack team, build faster with enterprise-grade templates, and scale securely with deployment guides for cloud and on-prem environments with **Haystack Enterprise Starter**. Read more about it in the [announcement post](https://haystack.deepset.ai/blog/announcing-haystack-enterprise).
👉 [Get Haystack Enterprise Starter](https://www.deepset.ai/products-and-services/haystack-enterprise-starter?utm_source=github.com&utm_medium=referral&utm_campaign=haystack_enterprise)
Need a managed production setup for Haystack? The **Haystack Enterprise Platform** helps you build, test, deploy and operate Haystack pipelines with built-in observability, collaboration, governance, and access controls. It’s available as a managed cloud service or as a self-hosted solution.
👉 Learn more about [Haystack Enterprise Platform](https://www.deepset.ai/products-and-services/haystack-enterprise-platform?utm_campaign=developer-relations&utm_source=haystack&utm_medium=readme) or [try it free](https://www.deepset.ai/haystack-enterprise-platform-trial?utm_campaign=developer-relations&utm_source=haystack&utm_medium=readme)
## Telemetry
Haystack collects **anonymous** usage statistics of pipeline components. We receive an event every time these components are initialized. This way, we know which components are most relevant to our community.
Read more about telemetry in Haystack or how you can opt out in [Haystack docs](https://docs.haystack.deepset.ai/docs/telemetry).
## 🖖 Community
If you have a feature request or a bug report, feel free to open an [issue in GitHub](https://github.com/deepset-ai/haystack/issues). We regularly check these, so you can expect a quick response. If you'd like to discuss a topic or get more general advice on how to make Haystack work for your project, you can start a thread in [Github Discussions](https://github.com/deepset-ai/haystack/discussions) or our [Discord channel](https://discord.com/invite/VBpFzsgRVF). We also check [𝕏 (Twitter)](https://twitter.com/haystack_ai) and [Stack Overflow](https://stackoverflow.com/questions/tagged/haystack).
## Contributing to Haystack
We are very open to the community's contributions - be it a quick fix of a typo, or a completely new feature! You don't need to be a Haystack expert to provide meaningful improvements. To learn how to get started, check out our [Contributor Guidelines](https://github.com/deepset-ai/haystack/blob/main/CONTRIBUTING.md) first.
There are several ways you can contribute to Haystack:
- Contribute to the main Haystack project
- Contribute an integration on [haystack-core-integrations](https://github.com/deepset-ai/haystack-core-integrations)
- Contribute to the documentation in [haystack/docs-website](https://github.com/deepset-ai/haystack/tree/main/docs-website)
> [!TIP]
>👉 **[Check out the full list of issues that are open to contributions](https://github.com/orgs/deepset-ai/projects/14)**
## Organizations using Haystack
Haystack is used by thousands of teams building production AI systems across industries, including:
- **Technology & AI Infrastructure**: [Apple](https://www.apple.com/), [Meta](https://www.meta.com/about), [Databricks](https://www.databricks.com/), [NVIDIA](https://developer.nvidia.com/blog/reducing-development-time-for-intelligent-virtual-assistants-in-contact-centers/), [Intel](https://github.com/intel/open-domain-question-and-answer#readme)
- **Public Sector AI Initiatives**: [European Commission](https://commission.europa.eu/index_en), [German Federal Ministry of Research, Technology, and Space (BMFTR)](https://www.deepset.ai/case-studies/german-federal-ministry-research-technology-space-bmftr), [PD, Baden-Württemberg State](https://www.pd-g.de/)
- **Enterprise & Industrial AI Applications**: [Airbus](https://www.deepset.ai/case-studies/airbus), [Lufthansa Industry Solutions](https://haystack.deepset.ai/blog/lufthansa-user-story), [Infineon](https://www.infineon.com/), [LEGO](https://github.com/larsbaunwall/bricky#readme), [Comcast](https://arxiv.org/html/2405.00801v2), [Accenture](https://www.accenture.com/), [TELUS Agriculture & Consumer Goods](https://www.telus.com/agcg/en)
- **Knowledge & Content Platforms**: [Netflix](https://netflix.com), [ZEIT Online](https://www.deepset.ai/case-studies/zeit-online), [Rakuten](https://www.rakuten.com/), [Oxford University Press](https://corp.oup.com/), [Manz](https://www.deepset.ai/case-studies/manz), [YPulse](https://www.deepset.ai/case-studies/ypulse)
Are you also using Haystack? Open a PR or [tell us your story](https://forms.gle/Mm3G1aEST3GAH2rn8)
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Report a Vulnerability
If you have found a security vulnerability in Haystack, please report via email to
[opensource-security@deepset.ai](mailto:opensource-security@deepset.ai).
In your message, please include:
1. Reproducible steps to trigger the vulnerability.
2. An explanation of what makes you think there is a vulnerability.
3. Any information you may have on active exploitations of the vulnerability (zero-day).
4. An explanation of why you believe the vulnerability is not out of scope. See the Out of Scope section below.
We encourage reports that are meaningful, high-impact, and reviewed by a human before submission. Fully automated or AI-generated reports submitted without human review and validation are unlikely to meet this bar and risk being declined.
## Out of Scope
Haystack is a framework intended to run inside a trusted execution environment. It assumes that the application built with it has already validated and sanitized user-supplied input before passing it to the framework. Validation and sanitization of input, for example URLs, file paths, filter expressions, and queries, are the responsibility of the application, not Haystack.
Any vulnerability that can only be triggered by passing unsanitized, attacker-controlled input to Haystack is considered out of scope. This reflects a conscious design decision after evaluating the trade-offs and risks: as a framework, Haystack cannot and should not enforce input validation on behalf of every application that uses it.
If you are uncertain whether a finding falls within scope, feel free to reach out before submitting a full report.
## Vulnerability Response
We aim to review your report within 5 business days where we do a preliminary analysis
to confirm that the vulnerability is plausible. Otherwise, we'll decline the report.
We won't disclose any information you share with us but we'll use it to get the issue
fixed or to coordinate a vendor response, as needed.
We'll keep you updated of the status of the issue.
Our goal is to disclose bugs as soon as possible once a user mitigation is available.
Once we get a good understanding of the vulnerability, we'll set a disclosure date after
consulting the author of the report and Haystack maintainers.
================================================
FILE: VERSION.txt
================================================
2.27.0-rc0
================================================
FILE: code_of_conduct.txt
================================================
CONTRIBUTOR COVENANT CODE OF CONDUCT
====================================
Our Pledge
----------
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for
everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics,
gender identity and expression, level of experience, education, socioeconomic status, nationality, personal appearance,
race, caste, color, religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
Our Standards
-------------
Examples of behavior that contributes to a positive environment for our community include:
- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
- Focusing on what is best not just for us as individuals, but for the overall community
Examples of unacceptable behavior include:
- The use of sexualized language or imagery, and sexual attention or advances of any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others’ private information, such as a physical or email address, without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting
Enforcement Responsibilities
----------------------------
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take
appropriate and fair corrective action in response to any behavior that they deem inappropriate,
threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits,
issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for
moderation decisions when appropriate.
Scope
-----
This Code of Conduct applies within all community spaces, and also applies when an individual is officially
representing the community in public spaces. Examples of representing our community include using an official
e-mail address, posting via an official social media account, or acting as an appointed representative
at an online or offline event.
Enforcement
-----------
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible
for enforcement at engage@deepset.ai. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
Enforcement Guidelines
----------------------
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action
they deem in violation of this Code of Conduct:
1. Correction
Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation
and an explanation of why the behavior was inappropriate. A public apology may be requested.
2. Warning
Community Impact: A violation through a single incident or series of actions.
Consequence: A warning with consequences for continued behavior. No interaction with the people involved,
including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time.
This includes avoiding interactions in community spaces as well as external channels like social media.
Violating these terms may lead to a temporary or permanent ban.
3. Temporary Ban
Community Impact: A serious violation of community standards, including sustained inappropriate behavior.
Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified
period of time. No public or private interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
4. Permanent Ban
Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
Consequence: A permanent ban from any sort of public interaction within the community.
Attribution
-----------
This Code of Conduct is adapted from the Contributor Covenant, version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by Mozilla’s code of conduct enforcement ladder.
For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq.
Translations are available at https://www.contributor-covenant.org/translations.
================================================
FILE: docker/Dockerfile.base
================================================
ARG build_image
ARG base_image
FROM $build_image AS build-image
ARG DEBIAN_FRONTEND=noninteractive
ARG haystack_version
RUN apt-get update && \
apt-get install -y --no-install-recommends git
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
# Shallow clone Haystack repo, we'll install from the local sources
RUN git clone --depth=1 --branch=${haystack_version} https://github.com/deepset-ai/haystack.git /opt/haystack
WORKDIR /opt/haystack
# Use a virtualenv we can copy over the next build stage
# Note: we use venv and not uv to create the virtualenv to make sure that the created virtualenv is accessible by pip
# and prevent breaking changes in the image. uv can still be used to speed up installation.
RUN python3 -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# Upgrade setuptools due to https://nvd.nist.gov/vuln/detail/CVE-2022-40897
RUN uv pip install --no-cache-dir -U setuptools && \
uv pip install --no-cache-dir .
FROM $base_image AS final
COPY --from=build-image /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
================================================
FILE: docker/README.md
================================================
<p align="center">
<a href="https://haystack.deepset.ai/"><img src="https://raw.githubusercontent.com/deepset-ai/.github/main/haystack-logo-colored.png" alt="Haystack by deepset"></a>
</p>
[Haystack](https://github.com/deepset-ai/haystack) is an end-to-end LLM framework that allows you to build applications powered by LLMs, Transformer models, vector search and more. Whether you want to perform retrieval-augmented generation (RAG), document search, question answering or answer generation, Haystack can orchestrate state-of-the-art embedding models and LLMs into pipelines to build end-to-end NLP applications and solve your use case.
## Haystack 2.x
For the latest version of Haystack there's only one image available:
- `haystack:base-<version>` contains a working Python environment with Haystack preinstalled. This image is expected to
be derived `FROM`.
## Image Development
Images are built with BuildKit and we use `bake` to orchestrate the process.
You can build a specific image by running:
```sh
docker buildx bake base
```
You can override any `variable` defined in the `docker-bake.hcl` file and build custom
images, for example if you want to use a branch from the Haystack repo, run:
```sh
HAYSTACK_VERSION=mybranch_or_tag BASE_IMAGE_TAG_SUFFIX=latest docker buildx bake base --no-cache
```
### Multi-Platform Builds
Haystack images support multiple architectures. But depending on your operating system and Docker
environment, you might not be able to build all of them locally.
You may encounter the following error when trying to build the image:
```
multiple platforms feature is currently not supported for docker driver. Please switch to a different driver
(eg. “docker buildx create --use”)
```
To get around this, you need to override the `platform` option and limit local builds to the same architecture as
your computer's. For example, on an Apple M1 you can limit the builds to ARM only by invoking `bake` like this:
```sh
docker buildx bake base --set "*.platform=linux/arm64"
```
# License
View [license information](https://github.com/deepset-ai/haystack/blob/main/LICENSE) for
the software contained in this image.
As with all Docker images, these likely also contain other software which may be under
other licenses (such as Bash, etc from the base distribution, along with any direct or
indirect dependencies of the primary software being contained).
As for any pre-built image usage, it is the image user's responsibility to ensure that any
use of this image complies with any relevant licenses for all software contained within.
================================================
FILE: docker/docker-bake.hcl
================================================
variable "HAYSTACK_VERSION" {
default = "main"
}
variable "GITHUB_REF" {
default = ""
}
variable "IMAGE_NAME" {
default = "deepset/haystack"
}
variable "IMAGE_TAG_SUFFIX" {
default = "local"
}
variable "BASE_IMAGE_TAG_SUFFIX" {
default = "local"
}
variable "IS_STABLE" {
default = "false"
}
# 2.Y.Z releases are also tagged as "stable"
# Example: 2.99.0 is tagged as base-2.99.0 and stable
target "base" {
dockerfile = "Dockerfile.base"
tags = "${compact([
"${IMAGE_NAME}:base-${IMAGE_TAG_SUFFIX}",
equal("${IS_STABLE}", "true") ? "${IMAGE_NAME}:stable" : ""
])}"
args = {
build_image = "python:3.12-slim"
base_image = "python:3.12-slim"
haystack_version = "${HAYSTACK_VERSION}"
}
platforms = ["linux/amd64", "linux/arm64"]
}
================================================
FILE: docs-website/.gitattributes
================================================
* text=auto
*.md text diff=markdown
*.mdx text diff=markdown
================================================
FILE: docs-website/.gitignore
================================================
.DS_Store
.vscode/*
!.vscode/extensions.json
.idea
*.iml
*.code-workspace
.changelog
.history
node_modules
.yarn
package-lock.json
.eslintcache
yarn-error.log
website/build
coverage
.docusaurus
.cache-loader
types
test-website
test-website-in-workspace
packages/create-docusaurus/lib/
packages/lqip-loader/lib/
packages/docusaurus/lib/
packages/docusaurus-*/lib/*
packages/eslint-plugin/lib/
packages/stylelint-copyright/lib/
website/netlifyDeployPreview/*
website/changelog
!website/netlifyDeployPreview/index.html
!website/netlifyDeployPreview/_redirects
website/_dogfooding/_swizzle_theme_tests
CrowdinTranslations_*.zip
website/.cpu-prof
website/i18n/**/*
.netlify
build/
# Auto-generated requirements files
requirements.txt
requirements-*.txt
# Auto-generated llms.txt
llms.txt
================================================
FILE: docs-website/CONTRIBUTING.md
================================================
# Contributing to Haystack Documentation
Thank you for your interest in contributing to the Haystack documentation! This guide provides everything you need to write, review, and maintain high-quality documentation for the Haystack project.
This guide focuses specifically on documentation contributions. For code contributions, tests, or integrations in the main Haystack codebase, see the [main Haystack contribution guide](https://github.com/deepset-ai/haystack/blob/main/CONTRIBUTING.md).
## TL;DR — Your first docs PR in 10 minutes
1. You won't be able to make changes directly to this repo, so the first step is to [create a fork](../CONTRIBUTING.md#clone-the-git-repository).
2. Once your fork is ready, you can clone a local copy with:
```bash
git clone https://github.com/YOUR_USERNAME/haystack.git
cd haystack/docs-website
```
3. Install and start:
```bash
npm install
npm start
```
**Note:** All subsequent commands in this guide should be run from the `haystack/docs-website` directory unless otherwise specified.
4. Edit under `docs/` for the unstable version, and under `versioned_docs/version-<highest>/` for the latest stable release. If you add a new page, include its ID in `sidebars.js` or the appropriate versioned sidebar.
5. Optional production check:
```bash
npm run build && npm run serve
```
6. Commit and push:
```bash
git checkout -b docs/your-branch
git add .
git commit -m "docs: fix <desc>"
git push -u origin HEAD
```
7. Open a PR and review the [Pull Request Checklist](#pull-request-checklist).
**Table of Contents**
- [TL;DR — Your first docs PR in 10 minutes](#tldr--your-first-docs-pr-in-10-minutes)
- [Authoring New or Updated Pages](#authoring-new-or-updated-pages)
- [Where should I edit?](#where-should-i-edit)
- [Page Frontmatter](#page-frontmatter)
- [Updating Navigation](#updating-navigation)
- [Linking and Anchors](#linking-and-anchors)
- [Admonitions (Callouts)](#admonitions-callouts)
- [Working with Templates](#working-with-templates)
- [Testing](#testing)
- [Build Testing](#build-testing)
- [API Reference Contributions](#api-reference-contributions)
- [Understanding Documentation Versions and Where to Make Changes](#understanding-documentation-versions-and-where-to-make-changes)
- [Preview Deployments](#preview-deployments)
- [Troubleshooting](#troubleshooting)
- [Blank Page on npm start](#blank-page-on-npm-start)
- [Cache Issues](#cache-issues)
- [Build Errors](#build-errors)
- [Moving or Removing Pages](#moving-or-removing-pages)
- [Images and Assets](#images-and-assets)
- [Pull Request Process](#pull-request-process)
- [Pull Request Checklist](#pull-request-checklist)
- [Review Process](#review-process)
- [Accessibility and Inclusivity](#accessibility-and-inclusivity)
- [Getting Help](#getting-help)
## Authoring New or Updated Pages
### Where should I edit?
| Your change | Edit here | Also edit here |
|---|---|---|
| New feature on Haystack `main` | `docs/` | — |
| Fix in current stable docs | `docs/` | `versioned_docs/version-<highest>/` (for example, `version-2.20`) |
| API reference content | Edit Python docstrings in main repo | — |
### Page Frontmatter
Every documentation page requires frontmatter at the top:
```md
---
title: "Page Title"
id: "page-id"
description: "One to two sentences describing the page content for SEO and previews"
slug: "/target-url"
---
```
**Frontmatter fields:**
- `title`: Displayed page title (title case)
- `id`: Unique identifier for the page
- `description`: SEO description (1-2 sentences)
- `slug`: URL path for the page (optional, defaults to file path)
### Updating Navigation
After creating or moving a page, update the sidebar:
**For narrative docs (`docs/`):**
Edit `sidebars.js` and add your page to the appropriate category:
```javascript
{
type: 'category',
label: 'Concepts',
items: [
'concepts/pipelines',
'concepts/your-new-page', // Add here
],
}
```
**For API reference (`reference/`):**
Edit `reference-sidebars.js` if needed (however, most sections are auto-generated).
### Linking and Anchors
**Links within `docs/`:**
Use relative paths for links within the same documentation section:
```md
See the [Pipeline Guide](../concepts/pipelines.mdx)
See the [Components Overview](./components-overview.mdx)
```
**Links between `docs/` and `reference/`:**
Because `docs/` and `reference/` are separate Docusaurus plugin instances, you must use absolute paths when linking between them:
```md
<!-- From docs/ to reference/ -->
See the [Pipeline API Reference](/reference/haystack-api/pipelines/pipeline)
<!-- From reference/ to docs/ -->
See the [Pipeline Concepts Guide](/docs/concepts/pipelines)
```
**Note:** Always use `/docs/` or `/reference/` as the path prefix when linking across sections, not relative paths like `../../reference/`.
**Explicit anchors:**
For stable cross-links, use explicit heading IDs:
```markdown
## Installation {#install-guide}
```
Link to it: `[Install](./page.mdx#install-guide)` or `[Install](/docs/overview/quick-start#install-guide)` from `reference/`
### Admonitions (Callouts)
Use Docusaurus admonitions sparingly for supporting information:
```mdx
:::note
General notes or important information to highlight.
:::
:::tip
Short tip that helps the reader succeed.
:::
:::info
Useful but non-blocking background information.
:::
:::warning
Risky settings or potential pitfalls.
:::
:::danger
Data loss or security-impacting issues.
:::
```
## Working with Templates
Starter templates are available in `docs/_templates/`:
- `component-template.mdx` - For new component documentation
- `document-store-template.mdx` - For new document store guides
**How to use templates:**
1. Copy the appropriate template from `docs/_templates/`
2. Move the copy to its final location under `docs/`
3. Update the frontmatter (title, id, description, slug)
4. Fill in all sections marked with placeholders
5. Update the sidebar to include your new page
**Do not:**
- Commit new documentation under `_templates/`
- Leave template placeholder text in production docs
## Testing
### Build Testing
We strongly recommend building the site locally before opening a PR:
```bash
npm run build
```
This command:
- Builds production-ready static files
- Validates all links and anchors
- Reports broken links, duplicate routes, and errors
**Fix all warnings before submitting your PR.** For minor changes like typo fixes, you may skip the local build and rely on CI feedback, but for substantial changes (new pages, restructuring, multiple edits), a local build helps catch issues early and saves CI time.
## API Reference Contributions
The API reference documentation is automatically generated from Python docstrings in the main Haystack codebase.
**To update API documentation:**
1. Edit docstrings in the [Haystack repository](https://github.com/deepset-ai/haystack)
2. Open a PR in the main Haystack repo
3. After merge, the API reference will be automatically synced through CI
**Do not:**
- Manually edit files in `reference/` or `reference_versioned_docs/`
- Commit changes to auto-generated API documentation
- Any manual changes will be overwritten by the next sync
## Understanding Documentation Versions and Where to Make Changes
The documentation structure supports multiple Haystack versions. Haystack releases new versions monthly, and documentation versioning is handled automatically through GitHub workflows during the release process.
**Documentation directories:**
- `docs/` - Unstable/next version (corresponds to Haystack's `main` branch)
- `versioned_docs/version-X.Y/` - Stable release documentation for version X.Y
**Note:** The highest version number in `versioned_docs/` represents the current stable release. For example, if you see `version-2.20`, `version-2.19`, and `version-2.18`, then version 2.20 is the current stable release, and older versions are for reference.
**When to edit which version:**
**Scenario 1: New feature or change in Haystack main branch**
If you're documenting a new feature or change that exists in Haystack's `main` branch (next release):
✅ Edit files in `docs/` (the unstable version)
Example: A new component was added to Haystack main → document it in `docs/pipeline-components/`
**Scenario 2: Bug fix or correction for current release**
If you're fixing an error in the current release documentation (for example, incorrect information, broken link, typo):
✅ Edit files in BOTH locations:
1. `docs/` (so the fix persists in future versions)
2. `versioned_docs/version-<highest>/` (the highest-numbered version directory)
Example: A code example has a bug in the Pipelines guide → fix it in both `docs/concepts/pipelines.mdx` AND `versioned_docs/version-2.20/concepts/pipelines.mdx` (if 2.20 is the current stable release)
**Pro tip:** When fixing bugs in current release docs, make the change in `docs/` first, then copy it to the highest-numbered versioned directory to ensure consistency.
## Preview Deployments
Pull requests that modify documentation will generate preview deployments once authorized by a maintainer. Once authorized, check your PR for a preview link, which allows you and reviewers to see the changes in a live environment before merging.
Preview deployments include:
- Full site build with your changes
- All versions and navigation
- Identical to production except for the URL
## Troubleshooting
### Blank Page on npm start
If you see a blank page when running `npm start`:
```bash
# Clear Docusaurus cache
npm run clear
npm start
```
If the issue persists, build once to generate route metadata:
```bash
npm run build
npm start
```
This is necessary because Docusaurus needs to generate internal routing metadata for versioned docs on first run.
### Cache Issues
Clear cached data if something looks off:
```bash
npm run clear
```
This removes:
- `.docusaurus/` directory
- Build cache
- Generated metadata
### Build Errors
**Broken links:**
- Check that all internal links use correct relative paths
- Verify file names and paths match exactly (case-sensitive)
- Ensure linked pages have proper frontmatter with `id` field
**Duplicate routes:**
- Check for duplicate `slug` values in frontmatter
- Ensure no two pages map to the same URL path
**Missing images:**
- Verify image paths are correct
- Check that images exist in `static/img/` or local `assets/` directories
- Use relative paths from the markdown file location
## Moving or Removing Pages
**Moving a page:**
1. Keep the existing URL stable by retaining the `slug` in frontmatter
2. Update `sidebars.js` or `reference-sidebars.js` to reflect new file location
3. Update any internal links that reference the moved page
**Removing a page:**
1. Remove the file from `docs/`
2. Remove references from `sidebars.js`
3. Check for and update any links pointing to the removed page
4. Coordinate with maintainers for redirect setup if the URL was public
**If a URL must change:**
- Coordinate with maintainers to set up redirect rules
- Avoid breaking inbound links from external sites
## Images and Assets
Shared images are stored in `static/img/`.
**Best practices:**
- Use descriptive filenames (for example, `pipeline-architecture.png`)
- Optimize images before committing (use tools like ImageOptim, TinyPNG)
- Prefer modern formats (WebP, optimized PNG/JPEG)
- Always include alt text for accessibility
**Adding images:**
Use the `ClickableImage` component for all images. Import it at the top of your MDX file:
```mdx
import ClickableImage from "@site/src/components/ClickableImage";
<ClickableImage
src="/img/pipeline-architecture.png"
alt="Pipeline architecture diagram"
/>
```
**For zoomable images** (diagrams, screenshots that users may want to see in detail), use `size="large"`:
```mdx
<ClickableImage
src="/img/detailed-architecture.png"
alt="Detailed architecture diagram"
size="large"
/>
```
**Images with transparent backgrounds:**
For transparent PNGs that need better visibility in dark mode, add a background class:
```mdx
<!-- White background in dark mode -->
<div className="img-white-bg">
<ClickableImage src="/img/logo.png" alt="Logo" />
</div>
<!-- Light grey background (softer) -->
<div className="img-light-bg">
<ClickableImage src="/img/diagram.png" alt="Diagram" />
</div>
```
## Pull Request Process
### Pull Request Checklist
Before submitting your PR, verify:
- [ ] Content follows writing and style guidelines
- [ ] Navigation updated (`sidebars.js` or `reference-sidebars.js`)
- [ ] Internal links verified (no broken anchors)
- [ ] Code samples tested and include language tags
- [ ] Images optimized and include alt text
- [ ] Local build passes (`npm run build`) - recommended for substantial changes
- [ ] Vercel preview deployment succeeds (fix any deployment errors)
- [ ] Conventional commit message format used in PR title
- [ ] PR description includes context and related issues
**PR title format:**
Use conventional commits in the PR title:
```
docs: add troubleshooting guide for pipelines
docs: fix typo in installation instructions
docs: update API reference links
```
**PR description:**
Include:
- Summary of changes
- Screenshots (if UI changes are visible)
- Related issues (for example, "Fixes #123")
- Testing performed
- Notes for reviewers
## Review Process
1. Open a PR from your branch to `main`
2. Automated checks will run (build validation)
3. Maintainers will review your changes
4. Address any requested changes
5. Once approved and checks pass, a maintainer will merge
6. Your changes will be deployed automatically
## Accessibility and Inclusivity
Ensure your documentation is accessible to all users:
- **Alt text:** Provide descriptive alt text for all images
- **Link text:** Use descriptive link text (not "click here")
- **Language:** Use clear, concise sentences; avoid jargon where possible
- **Examples:** Use inclusive language and diverse examples
- **Headings:** Use proper heading hierarchy (don't skip levels)
- **Code blocks:** Include language tags for proper syntax highlighting
## Getting Help
**Questions about contributing:**
- Review this guide and the [main Haystack contribution guide](../CONTRIBUTING.md)
- Check the [README](./README.md) for documentation site specifics
- Check existing [issues](https://github.com/deepset-ai/haystack/issues) and [discussions](https://github.com/deepset-ai/haystack/discussions)
- Ask in the [Discord community](https://discord.com/invite/haystack)
**Technical issues:**
- Search existing issues first
- Open a new issue with the `documentation` label
- Provide reproduction steps and environment details
**Style or writing questions:**
- Refer to the [Google Developer Documentation Style Guide](https://developers.google.com/style)
- Ask maintainers for clarification in your PR
Thank you for contributing to Haystack documentation! Your efforts help make Haystack more accessible and easier to use for everyone.
================================================
FILE: docs-website/README.md
================================================
# Haystack Documentation Website
This directory contains the Docusaurus-powered documentation website for [Haystack](https://github.com/deepset-ai/haystack), an open-source framework for building production-ready applications with Large Language Models (LLMs).
- **Website URL:** https://docs.haystack.deepset.ai
**Table of Contents**
- [About](#about)
- [Prerequisites](#prerequisites)
- [Quick Start](#quick-start)
- [Common tasks](#common-tasks)
- [Project Structure](#project-structure)
- [Technology Stack](#technology-stack)
- [Available Scripts](#available-scripts)
- [Contributing](#contributing)
- [CI/CD and Automation](#cicd-and-automation)
- [Versioning](#versioning)
- [Deployment](#deployment)
- [llms.txt for AI tools](#llms.txt-for-ai-tools)
## About
This documentation site is built with Docusaurus 3 and provides comprehensive guides, tutorials, API references, and best practices for using Haystack. The site supports multiple versions and automated API reference generation.
## Prerequisites
- **Node.js** 18 or higher
- **npm** (included with Node.js) or Yarn
## Quick Start
> [!NOTE]
> All commands must be run from the `haystack/docs-website` directory.
```bash
# Clone the repository and navigate to docs-website
git clone https://github.com/deepset-ai/haystack.git
cd haystack/docs-website
# Install dependencies
npm install
# Start the development server
npm start
# The site opens at http://localhost:3000 with live reload
```
## Common tasks
- Edit a page: update files under `docs/` or `versioned_docs/` and preview at http://localhost:3000
- Add to sidebar: update `sidebars.js` with your doc ID
- Production check: `npm run build && npm run serve`
- Full guidance: see `CONTRIBUTING.md`
## Project Structure
```
docs-website/
├── docs/ # Main documentation (guides, tutorials, concepts)
│ ├── _templates/ # Authoring templates (excluded from build)
│ ├── concepts/ # Core Haystack concepts
│ ├── pipeline-components/ # Component documentation
│ └── ...
├── reference/ # API reference (auto-generated, do not edit manually)
├── versioned_docs/ # Versioned copies of docs/
├── reference_versioned_docs/ # Versioned copies of reference/
├── src/ # React components and custom code
│ ├── components/ # Custom React components
│ ├── css/ # Global styles
│ ├── pages/ # Custom pages
│ ├── remark/ # Remark plugins
│ └── theme/ # Docusaurus theme customizations
├── static/ # Static assets (images, files)
├── scripts/ # Build and test scripts
│ ├── generate_requirements.py # Generates Python dependencies
│ ├── setup-dev.sh # Development environment setup
│ └── test_python_snippets.py # Tests Python code in docs
├── sidebars.js # Navigation for docs/
├── reference-sidebars.js # Navigation for reference/
├── docusaurus.config.js # Main Docusaurus configuration
├── versions.json # Available docs versions
├── reference_versions.json # Available API reference versions
└── package.json # Node.js dependencies and scripts
```
## Technology Stack
| Technology | Version | Purpose |
|------------|---------|---------|
| [Docusaurus](https://docusaurus.io/) | 3.8.1 | Static site generator |
| [React](https://react.dev/) | 19.0.0 | UI framework |
| [MDX](https://mdxjs.com/) | 3.0.0 | Markdown with JSX |
| [Node.js](https://nodejs.org/) | ≥18.0 | Runtime environment |
**Key Docusaurus Plugins:**
- `@docusaurus/plugin-content-docs` — Two separate instances of this plugin run simultaneously:
1. **Main docs instance** (via the `classic` preset): serves `docs/` at `/docs/`
2. **Reference instance** (explicit plugin): serves `reference/` at `/reference/`
Each instance has its own sidebar, versioning config (`versions.json` vs `reference_versions.json`), and versioned content folders. This allows the API reference and guides to version independently and maintain separate navigation.
- **Custom remark plugin** (`src/remark/versionedReferenceLinks.js`) — Automatically rewrites cross-links between docs and reference to include the correct version prefix. For example, if you're viewing docs version 2.19 and click a link to `/reference/some-api`, the plugin rewrites it to `/reference/2.19/some-api` so readers stay in the same version context.
**When one might need these plugins:**
- **Broken cross-links after a release:** If links between docs and API reference pages break (404s), the remark plugin may need adjustment—especially if version naming conventions change.
- **Version dropdown issues:** If the version selector shows wrong versions or doesn't switch correctly between docs/reference, check the dual `plugin-content-docs` configs in `docusaurus.config.js`.
- **Sidebar mismatches:** If API reference navigation breaks separately from main docs, remember they use different sidebar files (`sidebars.js` vs `reference-sidebars.js`).
## Available Scripts
**Important:** Run these commands from the `haystack/docs-website` directory:
| Command | Description |
|---------|-------------|
| `npm install` | Install all dependencies |
| `npm start` | Start development server with live reload (http://localhost:3000) |
| `npm run build` | Build production-ready static files to `build/` |
| `npm run serve` | Preview production build locally |
| `npm run clear` | Clear Docusaurus cache (use if encountering build issues) |
| `npm run docusaurus` | Run Docusaurus CLI commands directly |
| `npm run swizzle` | Eject and customize Docusaurus theme components |
## Contributing
We welcome contributions to improve the documentation! See [CONTRIBUTING.md](./CONTRIBUTING.md) for:
- Writing and style guidelines
- How to author new documentation pages
- Setting up your development environment
- Testing requirements
- Pull request process
For code contributions to Haystack itself, see the [main repository's contribution guide](https://github.com/deepset-ai/haystack/blob/main/CONTRIBUTING.md).
## CI/CD and Automation
This site uses automated workflows for API reference sync and preview deployments. See [CONTRIBUTING.md](./CONTRIBUTING.md) for details.
### Versioning
Documentation versions are released alongside Haystack releases and are fully automated through GitHub workflows. Contributors do not need to manually create or manage versions.
**Automated Workflows:**
- `promote_unstable_docs.yml` - Automatically triggered during Haystack releases
- `minor_version_release.yml` - Creates new version directories and updates version configuration
These workflows automatically create versioned documentation snapshots and pull requests during the release process.
## Deployment
The documentation site is automatically deployed to **https://docs.haystack.deepset.ai** when changes are merged to the `main` branch.
## llms.txt for AI tools
This docs site exposes a concatenated view of the documentation for AI tools with an `llms.txt` file, generated by the [`docusaurus-plugin-generate-llms-txt`](https://github.com/din0s/docusaurus-plugin-llms-txt) plugin.
- **What it is**: A single, generated text file that concatenates the docs content to make it easier for LLMs and other tools to consume.
- **Where to find it (deployed)**: At the site root `https://docs.haystack.deepset.ai/llms.txt`.
- **How it’s generated**:
- Automatically when you run:
- `npm run start`
- `npm run build`
- Manually with:
```bash
npm run generate-llms-txt
```
- **Configuration**:
- The plugin is wired in `docusaurus.config.js` under the `plugins` array as `'docusaurus-plugin-generate-llms-txt'` with `outputFile: 'llms.txt'`.
- A local plugin (`plugins/txtLoaderPlugin.js`) configures Webpack to treat `.txt` files (including `llms.txt`) as text assets so they don’t cause build-time parse errors.*
================================================
FILE: docs-website/api/search.ts
================================================
import { VercelRequest, VercelResponse } from "@vercel/node";
export default async function handler(req: VercelRequest, res: VercelResponse) {
if (req.method !== "POST") {
res.setHeader("Allow", "POST");
return res.status(405).end("Method Not Allowed");
}
const { query, filter } = req.body;
if (!query) {
return res.status(400).json({ error: "Query is required" });
}
const { SEARCH_API_WORKSPACE, SEARCH_API_PIPELINE, SEARCH_API_TOKEN } =
process.env;
if (!SEARCH_API_WORKSPACE || !SEARCH_API_PIPELINE || !SEARCH_API_TOKEN) {
console.error(
"Search API environment variables are not configured on the server."
);
return res.status(500).json({ error: "Search service is not configured." });
}
try {
// Build the request body with optional filters
const requestBody: any = {
queries: [query],
};
// Add filters if provided (for future backend filtering support)
if (filter && filter !== "all") {
requestBody.debug = true;
requestBody.filters = {
operator: "AND",
conditions: [
{
field: "meta.type",
operator: "==",
value: filter,
},
],
};
}
const apiResponse = await fetch(
`https://api.cloud.deepset.ai/api/v1/workspaces/${SEARCH_API_WORKSPACE}/pipelines/${SEARCH_API_PIPELINE}/search`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Client-Source": "haystack-docs",
Authorization: `Bearer ${SEARCH_API_TOKEN}`,
},
body: JSON.stringify(requestBody),
}
);
if (!apiResponse.ok) {
const errorData = await apiResponse.text();
console.error("Haystack API error:", errorData);
return res
.status(apiResponse.status)
.json({ error: `API error: ${apiResponse.statusText}` });
}
const data = await apiResponse.json();
return res.status(200).json(data);
} catch (error) {
console.error("Internal server error:", error);
return res.status(500).json({ error: "Failed to fetch search results." });
}
}
================================================
FILE: docs-website/api/tsconfig.json
================================================
{
"compilerOptions": {
"target": "ES2021",
"module": "commonjs",
"moduleResolution": "node",
"lib": ["ES2021", "DOM"],
"esModuleInterop": true,
"strict": true,
"skipLibCheck": true,
"resolveJsonModule": true,
"types": ["node"]
},
"include": ["./**/*.ts"]
}
================================================
FILE: docs-website/docs/_templates/component-template.mdx
================================================
---
title: "Component Name"
id: "component-name"
description: "A short description of the component"
slug: "/component-name"
---
# Component Name
<div className="key-value-table">
| | |
| --- | --- |
| **Most common position in a pipeline** | |
| **Mandatory init variables** | |
| **Mandatory run variables** | |
| **Output variables** | |
| **API reference** | |
| **GitHub link** | |
</div>
## Overview
*What does it do in general? For example,..?*
*How does it work more specifically? Are there any pitfalls to pay attention to?*
*(if applicable) How is it different from this other very similar component? Which one do you choose?*
## Usage
*Any mandatory imports?*
### On its own
*Code snippet on how to run a component*
### In a pipeline
*Code snippet of a component being introduced in a pipeline*
*There can be more than one example. Add examples of pipelines where this component would be most useful, for example RAG, doc retrieval, etc.*
================================================
FILE: docs-website/docs/_templates/document-store-template.mdx
================================================
---
title: "Document Store Name"
id: "document-store-name"
description: "A short description of the document store"
slug: "/document-store-name"
---
# Document Store Name
## Description
*What are this Document Store features? When would a user select it, and when not?*
*Are there any limitations?*
*Users are often curious to know if a document store supports metadata filtering and sparse vectors.*
## Initialization
*Describe how to get this Document Store to work, with code samples.*
## Supported Retrievers
*Name of the supported Retriever(s).*
*If several – describe how to choose an appropriate one for user’s goals (perhaps, one is faster and the other is more accurate).*
## Link to GitHub
*for example [https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/gradient](https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/gradient)*
================================================
FILE: docs-website/docs/concepts/agents/state.mdx
================================================
---
title: "State"
id: state
slug: "/state"
description: "`State` is a container for storing shared information during Agent and Tool execution. It provides a structured way to store messages during execution, share data between tools, and store intermediate results throughout an agent's workflow."
---
# State
`State` is a container for storing shared information d
Showing preview only (292K chars total). Download the full file or copy to clipboard to get everything.
gitextract_vdzap453/ ├── .github/ │ ├── CODEOWNERS │ ├── ISSUE_TEMPLATE/ │ │ ├── breaking-change-proposal.md │ │ ├── bug_report.md │ │ ├── config.yml │ │ └── feature_request.md │ ├── dependabot.yml │ ├── labeler.yml │ ├── pull_request_template.md │ ├── utils/ │ │ ├── check_imports.py │ │ ├── create_unstable_docs_docusaurus.py │ │ ├── docs_search_sync.py │ │ ├── docstrings_checksum.py │ │ ├── parse_validate_version.sh │ │ ├── prepare_release_notification.sh │ │ ├── promote_unstable_docs_docusaurus.py │ │ ├── pyproject_to_requirements.py │ │ └── wait_for_workflows.sh │ └── workflows/ │ ├── auto_approve_api_ref_sync.yml │ ├── branch_off.yml │ ├── check_api_ref.yml │ ├── ci_metrics.yml │ ├── docker_release.yml │ ├── docs-website-test-docs-snippets.yml │ ├── docs_search_sync.yml │ ├── docstring_labeler.yml │ ├── docusaurus_sync.yml │ ├── e2e.yml │ ├── github_release.yml │ ├── labeler.yml │ ├── license_compliance.yml │ ├── nightly_testpypi_release.yml │ ├── project.yml │ ├── promote_unstable_docs.yml │ ├── push_release_notes_to_website.yml │ ├── pypi_release.yml │ ├── release.yml │ ├── release_notes.yml │ ├── release_notes_skipper.yml │ ├── slow.yml │ ├── stale.yml │ ├── tests.yml │ └── workflows_linting.yml ├── .gitignore ├── .pre-commit-config.yaml ├── CITATION.cff ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── SECURITY.md ├── VERSION.txt ├── code_of_conduct.txt ├── docker/ │ ├── Dockerfile.base │ ├── README.md │ └── docker-bake.hcl ├── docs-website/ │ ├── .gitattributes │ ├── .gitignore │ ├── CONTRIBUTING.md │ ├── README.md │ ├── api/ │ │ ├── search.ts │ │ └── tsconfig.json │ ├── docs/ │ │ ├── _templates/ │ │ │ ├── component-template.mdx │ │ │ └── document-store-template.mdx │ │ ├── concepts/ │ │ │ ├── agents/ │ │ │ │ └── state.mdx │ │ │ ├── agents.mdx │ │ │ ├── components/ │ │ │ │ ├── custom-components.mdx │ │ │ │ └── supercomponents.mdx │ │ │ ├── components.mdx │ │ │ ├── concepts-overview.mdx │ │ │ ├── data-classes/ │ │ │ │ └── chatmessage.mdx │ │ │ ├── data-classes.mdx │ │ │ ├── device-management.mdx │ │ │ ├── document-store/ │ │ │ │ ├── choosing-a-document-store.mdx │ │ │ │ └── creating-custom-document-stores.mdx │ │ │ ├── document-store.mdx │ │ │ ├── experimental-package.mdx │ │ │ ├── integrations.mdx │ │ │ ├── jinja-templates.mdx │ │ │ ├── metadata-filtering.mdx │ │ │ ├── pipelines/ │ │ │ │ ├── asyncpipeline.mdx │ │ │ │ ├── creating-pipelines.mdx │ │ │ │ ├── debugging-pipelines.mdx │ │ │ │ ├── pipeline-breakpoints.mdx │ │ │ │ ├── pipeline-loops.mdx │ │ │ │ ├── serialization.mdx │ │ │ │ ├── smart-pipeline-connections.mdx │ │ │ │ └── visualizing-pipelines.mdx │ │ │ ├── pipelines.mdx │ │ │ └── secret-management.mdx │ │ ├── development/ │ │ │ ├── deployment/ │ │ │ │ ├── docker.mdx │ │ │ │ ├── kubernetes.mdx │ │ │ │ └── openshift.mdx │ │ │ ├── deployment.mdx │ │ │ ├── enabling-gpu-acceleration.mdx │ │ │ ├── external-integrations-development.mdx │ │ │ ├── hayhooks.mdx │ │ │ ├── logging.mdx │ │ │ └── tracing.mdx │ │ ├── document-stores/ │ │ │ ├── arcadedbdocumentstore.mdx │ │ │ ├── astradocumentstore.mdx │ │ │ ├── azureaisearchdocumentstore.mdx │ │ │ ├── chromadocumentstore.mdx │ │ │ ├── elasticsearch-document-store.mdx │ │ │ ├── faissdocumentstore.mdx │ │ │ ├── inmemorydocumentstore.mdx │ │ │ ├── mongodbatlasdocumentstore.mdx │ │ │ ├── opensearch-document-store.mdx │ │ │ ├── pgvectordocumentstore.mdx │ │ │ ├── pinecone-document-store.mdx │ │ │ ├── qdrant-document-store.mdx │ │ │ ├── valkeydocumentstore.mdx │ │ │ └── weaviatedocumentstore.mdx │ │ ├── intro.mdx │ │ ├── optimization/ │ │ │ ├── advanced-rag-techniques/ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx │ │ │ ├── advanced-rag-techniques.mdx │ │ │ ├── evaluation/ │ │ │ │ ├── model-based-evaluation.mdx │ │ │ │ └── statistical-evaluation.mdx │ │ │ └── evaluation.mdx │ │ ├── overview/ │ │ │ ├── breaking-change-policy.mdx │ │ │ ├── faq.mdx │ │ │ ├── get-started.mdx │ │ │ ├── installation.mdx │ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx │ │ │ ├── migration.mdx │ │ │ └── telemetry.mdx │ │ ├── pipeline-components/ │ │ │ ├── agents-1/ │ │ │ │ └── agent.mdx │ │ │ ├── audio/ │ │ │ │ ├── external-integrations-audio.mdx │ │ │ │ ├── localwhispertranscriber.mdx │ │ │ │ └── remotewhispertranscriber.mdx │ │ │ ├── audio.mdx │ │ │ ├── builders/ │ │ │ │ ├── answerbuilder.mdx │ │ │ │ ├── chatpromptbuilder.mdx │ │ │ │ └── promptbuilder.mdx │ │ │ ├── builders.mdx │ │ │ ├── caching/ │ │ │ │ └── cachechecker.mdx │ │ │ ├── classifiers/ │ │ │ │ ├── documentlanguageclassifier.mdx │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx │ │ │ ├── classifiers.mdx │ │ │ ├── connectors/ │ │ │ │ ├── external-integrations-connectors.mdx │ │ │ │ ├── githubfileeditor.mdx │ │ │ │ ├── githubissuecommenter.mdx │ │ │ │ ├── githubissueviewer.mdx │ │ │ │ ├── githubprcreator.mdx │ │ │ │ ├── githubrepoforker.mdx │ │ │ │ ├── githubrepoviewer.mdx │ │ │ │ ├── jinareaderconnector.mdx │ │ │ │ ├── langfuseconnector.mdx │ │ │ │ ├── openapiconnector.mdx │ │ │ │ ├── openapiserviceconnector.mdx │ │ │ │ └── weaveconnector.mdx │ │ │ ├── connectors.mdx │ │ │ ├── converters/ │ │ │ │ ├── azureocrdocumentconverter.mdx │ │ │ │ ├── csvtodocument.mdx │ │ │ │ ├── documenttoimagecontent.mdx │ │ │ │ ├── docxtodocument.mdx │ │ │ │ ├── external-integrations-converters.mdx │ │ │ │ ├── filetofilecontent.mdx │ │ │ │ ├── htmltodocument.mdx │ │ │ │ ├── imagefiletodocument.mdx │ │ │ │ ├── imagefiletoimagecontent.mdx │ │ │ │ ├── jsonconverter.mdx │ │ │ │ ├── markdowntodocument.mdx │ │ │ │ ├── mistralocrdocumentconverter.mdx │ │ │ │ ├── msgtodocument.mdx │ │ │ │ ├── multifileconverter.mdx │ │ │ │ ├── openapiservicetofunctions.mdx │ │ │ │ ├── outputadapter.mdx │ │ │ │ ├── paddleocrvldocumentconverter.mdx │ │ │ │ ├── pdfminertodocument.mdx │ │ │ │ ├── pdftoimagecontent.mdx │ │ │ │ ├── pptxtodocument.mdx │ │ │ │ ├── pypdftodocument.mdx │ │ │ │ ├── textfiletodocument.mdx │ │ │ │ ├── tikadocumentconverter.mdx │ │ │ │ ├── unstructuredfileconverter.mdx │ │ │ │ └── xlsxtodocument.mdx │ │ │ ├── converters.mdx │ │ │ ├── downloaders/ │ │ │ │ └── s3downloader.mdx │ │ │ ├── embedders/ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx │ │ │ │ ├── amazonbedrocktextembedder.mdx │ │ │ │ ├── azureopenaidocumentembedder.mdx │ │ │ │ ├── azureopenaitextembedder.mdx │ │ │ │ ├── choosing-the-right-embedder.mdx │ │ │ │ ├── coheredocumentembedder.mdx │ │ │ │ ├── coheredocumentimageembedder.mdx │ │ │ │ ├── coheretextembedder.mdx │ │ │ │ ├── external-integrations-embedders.mdx │ │ │ │ ├── fastembeddocumentembedder.mdx │ │ │ │ ├── fastembedsparsedocumentembedder.mdx │ │ │ │ ├── fastembedsparsetextembedder.mdx │ │ │ │ ├── fastembedtextembedder.mdx │ │ │ │ ├── googlegenaidocumentembedder.mdx │ │ │ │ ├── googlegenaimultimodaldocumentembedder.mdx │ │ │ │ ├── googlegenaitextembedder.mdx │ │ │ │ ├── huggingfaceapidocumentembedder.mdx │ │ │ │ ├── huggingfaceapitextembedder.mdx │ │ │ │ ├── jinadocumentembedder.mdx │ │ │ │ ├── jinadocumentimageembedder.mdx │ │ │ │ ├── jinatextembedder.mdx │ │ │ │ ├── mistraldocumentembedder.mdx │ │ │ │ ├── mistraltextembedder.mdx │ │ │ │ ├── nvidiadocumentembedder.mdx │ │ │ │ ├── nvidiatextembedder.mdx │ │ │ │ ├── ollamadocumentembedder.mdx │ │ │ │ ├── ollamatextembedder.mdx │ │ │ │ ├── openaidocumentembedder.mdx │ │ │ │ ├── openaitextembedder.mdx │ │ │ │ ├── optimumdocumentembedder.mdx │ │ │ │ ├── optimumtextembedder.mdx │ │ │ │ ├── sentencetransformersdocumentembedder.mdx │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx │ │ │ │ ├── sentencetransformerstextembedder.mdx │ │ │ │ ├── stackitdocumentembedder.mdx │ │ │ │ ├── stackittextembedder.mdx │ │ │ │ ├── vertexaidocumentembedder.mdx │ │ │ │ ├── vertexaitextembedder.mdx │ │ │ │ ├── watsonxdocumentembedder.mdx │ │ │ │ └── watsonxtextembedder.mdx │ │ │ ├── embedders.mdx │ │ │ ├── evaluators/ │ │ │ │ ├── answerexactmatchevaluator.mdx │ │ │ │ ├── contextrelevanceevaluator.mdx │ │ │ │ ├── deepevalevaluator.mdx │ │ │ │ ├── documentmapevaluator.mdx │ │ │ │ ├── documentmrrevaluator.mdx │ │ │ │ ├── documentndcgevaluator.mdx │ │ │ │ ├── documentrecallevaluator.mdx │ │ │ │ ├── external-integrations-evaluators.mdx │ │ │ │ ├── faithfulnessevaluator.mdx │ │ │ │ ├── llmevaluator.mdx │ │ │ │ ├── ragasevaluator.mdx │ │ │ │ └── sasevaluator.mdx │ │ │ ├── evaluators.mdx │ │ │ ├── extractors/ │ │ │ │ ├── llmdocumentcontentextractor.mdx │ │ │ │ ├── llmmetadataextractor.mdx │ │ │ │ ├── namedentityextractor.mdx │ │ │ │ └── regextextextractor.mdx │ │ │ ├── extractors.mdx │ │ │ ├── fetchers/ │ │ │ │ ├── external-integrations-fetchers.mdx │ │ │ │ ├── firecrawlcrawler.mdx │ │ │ │ └── linkcontentfetcher.mdx │ │ │ ├── fetchers.mdx │ │ │ ├── generators/ │ │ │ │ ├── aimllapichatgenerator.mdx │ │ │ │ ├── amazonbedrockchatgenerator.mdx │ │ │ │ ├── amazonbedrockgenerator.mdx │ │ │ │ ├── anthropicchatgenerator.mdx │ │ │ │ ├── anthropicgenerator.mdx │ │ │ │ ├── anthropicvertexchatgenerator.mdx │ │ │ │ ├── azureopenaichatgenerator.mdx │ │ │ │ ├── azureopenaigenerator.mdx │ │ │ │ ├── azureopenairesponseschatgenerator.mdx │ │ │ │ ├── coherechatgenerator.mdx │ │ │ │ ├── coheregenerator.mdx │ │ │ │ ├── cometapichatgenerator.mdx │ │ │ │ ├── dalleimagegenerator.mdx │ │ │ │ ├── external-integrations-generators.mdx │ │ │ │ ├── fallbackchatgenerator.mdx │ │ │ │ ├── googleaigeminichatgenerator.mdx │ │ │ │ ├── googleaigeminigenerator.mdx │ │ │ │ ├── googlegenaichatgenerator.mdx │ │ │ │ ├── guides-to-generators/ │ │ │ │ │ ├── choosing-the-right-generator.mdx │ │ │ │ │ ├── function-calling.mdx │ │ │ │ │ └── generators-vs-chat-generators.mdx │ │ │ │ ├── huggingfaceapichatgenerator.mdx │ │ │ │ ├── huggingfaceapigenerator.mdx │ │ │ │ ├── huggingfacelocalchatgenerator.mdx │ │ │ │ ├── huggingfacelocalgenerator.mdx │ │ │ │ ├── llamacppchatgenerator.mdx │ │ │ │ ├── llamacppgenerator.mdx │ │ │ │ ├── llamastackchatgenerator.mdx │ │ │ │ ├── metallamachatgenerator.mdx │ │ │ │ ├── mistralchatgenerator.mdx │ │ │ │ ├── nvidiachatgenerator.mdx │ │ │ │ ├── nvidiagenerator.mdx │ │ │ │ ├── ollamachatgenerator.mdx │ │ │ │ ├── ollamagenerator.mdx │ │ │ │ ├── openaichatgenerator.mdx │ │ │ │ ├── openaigenerator.mdx │ │ │ │ ├── openairesponseschatgenerator.mdx │ │ │ │ ├── openrouterchatgenerator.mdx │ │ │ │ ├── sagemakergenerator.mdx │ │ │ │ ├── stackitchatgenerator.mdx │ │ │ │ ├── togetheraichatgenerator.mdx │ │ │ │ ├── togetheraigenerator.mdx │ │ │ │ ├── vertexaicodegenerator.mdx │ │ │ │ ├── vertexaigeminichatgenerator.mdx │ │ │ │ ├── vertexaigeminigenerator.mdx │ │ │ │ ├── vertexaiimagecaptioner.mdx │ │ │ │ ├── vertexaiimagegenerator.mdx │ │ │ │ ├── vertexaiimageqa.mdx │ │ │ │ ├── vertexaitextgenerator.mdx │ │ │ │ ├── watsonxchatgenerator.mdx │ │ │ │ └── watsonxgenerator.mdx │ │ │ ├── generators.mdx │ │ │ ├── joiners/ │ │ │ │ ├── answerjoiner.mdx │ │ │ │ ├── branchjoiner.mdx │ │ │ │ ├── documentjoiner.mdx │ │ │ │ ├── listjoiner.mdx │ │ │ │ └── stringjoiner.mdx │ │ │ ├── joiners.mdx │ │ │ ├── preprocessors/ │ │ │ │ ├── chinesedocumentsplitter.mdx │ │ │ │ ├── csvdocumentcleaner.mdx │ │ │ │ ├── csvdocumentsplitter.mdx │ │ │ │ ├── documentcleaner.mdx │ │ │ │ ├── documentpreprocessor.mdx │ │ │ │ ├── documentsplitter.mdx │ │ │ │ ├── embeddingbaseddocumentsplitter.mdx │ │ │ │ ├── hierarchicaldocumentsplitter.mdx │ │ │ │ ├── markdownheadersplitter.mdx │ │ │ │ ├── recursivesplitter.mdx │ │ │ │ └── textcleaner.mdx │ │ │ ├── preprocessors.mdx │ │ │ ├── query/ │ │ │ │ └── queryexpander.mdx │ │ │ ├── rankers/ │ │ │ │ ├── amazonbedrockranker.mdx │ │ │ │ ├── choosing-the-right-ranker.mdx │ │ │ │ ├── cohereranker.mdx │ │ │ │ ├── external-integrations-rankers.mdx │ │ │ │ ├── fastembedranker.mdx │ │ │ │ ├── huggingfaceteiranker.mdx │ │ │ │ ├── jinaranker.mdx │ │ │ │ ├── llmranker.mdx │ │ │ │ ├── lostinthemiddleranker.mdx │ │ │ │ ├── metafieldgroupingranker.mdx │ │ │ │ ├── metafieldranker.mdx │ │ │ │ ├── nvidiaranker.mdx │ │ │ │ ├── pyversityranker.mdx │ │ │ │ ├── sentencetransformersdiversityranker.mdx │ │ │ │ ├── sentencetransformerssimilarityranker.mdx │ │ │ │ └── transformerssimilarityranker.mdx │ │ │ ├── rankers.mdx │ │ │ ├── readers/ │ │ │ │ └── extractivereader.mdx │ │ │ ├── readers.mdx │ │ │ ├── retrievers/ │ │ │ │ ├── arcadedbembeddingretriever.mdx │ │ │ │ ├── astraretriever.mdx │ │ │ │ ├── automergingretriever.mdx │ │ │ │ ├── azureaisearchbm25retriever.mdx │ │ │ │ ├── azureaisearchembeddingretriever.mdx │ │ │ │ ├── azureaisearchhybridretriever.mdx │ │ │ │ ├── chromaembeddingretriever.mdx │ │ │ │ ├── chromaqueryretriever.mdx │ │ │ │ ├── elasticsearchbm25retriever.mdx │ │ │ │ ├── elasticsearchembeddingretriever.mdx │ │ │ │ ├── faissembeddingretriever.mdx │ │ │ │ ├── filterretriever.mdx │ │ │ │ ├── inmemorybm25retriever.mdx │ │ │ │ ├── inmemoryembeddingretriever.mdx │ │ │ │ ├── mongodbatlasembeddingretriever.mdx │ │ │ │ ├── mongodbatlasfulltextretriever.mdx │ │ │ │ ├── multiqueryembeddingretriever.mdx │ │ │ │ ├── multiquerytextretriever.mdx │ │ │ │ ├── opensearchbm25retriever.mdx │ │ │ │ ├── opensearchembeddingretriever.mdx │ │ │ │ ├── opensearchhybridretriever.mdx │ │ │ │ ├── pgvectorembeddingretriever.mdx │ │ │ │ ├── pgvectorkeywordretriever.mdx │ │ │ │ ├── pineconedenseretriever.mdx │ │ │ │ ├── qdrantembeddingretriever.mdx │ │ │ │ ├── qdranthybridretriever.mdx │ │ │ │ ├── qdrantsparseembeddingretriever.mdx │ │ │ │ ├── sentencewindowretrieval.mdx │ │ │ │ ├── snowflaketableretriever.mdx │ │ │ │ ├── valkeyembeddingretriever.mdx │ │ │ │ ├── weaviatebm25retriever.mdx │ │ │ │ ├── weaviateembeddingretriever.mdx │ │ │ │ └── weaviatehybridretriever.mdx │ │ │ ├── retrievers.mdx │ │ │ ├── routers/ │ │ │ │ ├── conditionalrouter.mdx │ │ │ │ ├── documentlengthrouter.mdx │ │ │ │ ├── documenttyperouter.mdx │ │ │ │ ├── filetyperouter.mdx │ │ │ │ ├── llmmessagesrouter.mdx │ │ │ │ ├── metadatarouter.mdx │ │ │ │ ├── textlanguagerouter.mdx │ │ │ │ ├── transformerstextrouter.mdx │ │ │ │ └── transformerszeroshottextrouter.mdx │ │ │ ├── routers.mdx │ │ │ ├── samplers/ │ │ │ │ └── toppsampler.mdx │ │ │ ├── tools/ │ │ │ │ └── toolinvoker.mdx │ │ │ ├── translators/ │ │ │ │ └── laradocumenttranslator.mdx │ │ │ ├── validators/ │ │ │ │ └── jsonschemavalidator.mdx │ │ │ ├── websearch/ │ │ │ │ ├── external-integrations-websearch.mdx │ │ │ │ ├── firecrawlwebsearch.mdx │ │ │ │ ├── searchapiwebsearch.mdx │ │ │ │ └── serperdevwebsearch.mdx │ │ │ ├── websearch.mdx │ │ │ └── writers/ │ │ │ └── documentwriter.mdx │ │ └── tools/ │ │ ├── componenttool.mdx │ │ ├── mcptool.mdx │ │ ├── mcptoolset.mdx │ │ ├── pipelinetool.mdx │ │ ├── ready-made-tools/ │ │ │ ├── githubfileeditortool.mdx │ │ │ ├── githubissuecommentertool.mdx │ │ │ ├── githubissueviewertool.mdx │ │ │ ├── githubprcreatortool.mdx │ │ │ └── githubrepoviewertool.mdx │ │ ├── searchabletoolset.mdx │ │ ├── tool.mdx │ │ └── toolset.mdx │ ├── docusaurus.config.js │ ├── package.json │ ├── plugins/ │ │ └── txtLoaderPlugin.js │ ├── reference/ │ │ ├── experiments-api/ │ │ │ ├── experimental_agents_api.md │ │ │ ├── experimental_chatmessage_store_api.md │ │ │ ├── experimental_generators_api.md │ │ │ ├── experimental_mem0_memory_store_api.md │ │ │ ├── experimental_preprocessors_api.md │ │ │ ├── experimental_retrievers_api.md │ │ │ ├── experimental_summarizer_api.md │ │ │ └── experimental_writers_api.md │ │ ├── haystack-api/ │ │ │ ├── agents_api.md │ │ │ ├── audio_api.md │ │ │ ├── builders_api.md │ │ │ ├── cachings_api.md │ │ │ ├── classifiers_api.md │ │ │ ├── connectors_api.md │ │ │ ├── converters_api.md │ │ │ ├── data_classes_api.md │ │ │ ├── document_stores_api.md │ │ │ ├── document_writers_api.md │ │ │ ├── embedders_api.md │ │ │ ├── evaluation_api.md │ │ │ ├── evaluators_api.md │ │ │ ├── extractors_api.md │ │ │ ├── fetchers_api.md │ │ │ ├── generators_api.md │ │ │ ├── human_in_the_loop_api.md │ │ │ ├── image_converters_api.md │ │ │ ├── joiners_api.md │ │ │ ├── pipeline_api.md │ │ │ ├── preprocessors_api.md │ │ │ ├── query_api.md │ │ │ ├── rankers_api.md │ │ │ ├── readers_api.md │ │ │ ├── retrievers_api.md │ │ │ ├── routers_api.md │ │ │ ├── samplers_api.md │ │ │ ├── tool_components_api.md │ │ │ ├── tools_api.md │ │ │ ├── utils_api.md │ │ │ ├── validators_api.md │ │ │ └── websearch_api.md │ │ ├── index.mdx │ │ └── integrations-api/ │ │ ├── aimlapi.md │ │ ├── amazon_bedrock.md │ │ ├── amazon_sagemaker.md │ │ ├── anthropic.md │ │ ├── arcadedb.md │ │ ├── astra.md │ │ ├── azure_ai_search.md │ │ ├── azure_doc_intelligence.md │ │ ├── chroma.md │ │ ├── cohere.md │ │ ├── cometapi.md │ │ ├── deepeval.md │ │ ├── elasticsearch.md │ │ ├── faiss.md │ │ ├── fastembed.md │ │ ├── firecrawl.md │ │ ├── github.md │ │ ├── google_ai.md │ │ ├── google_genai.md │ │ ├── google_vertex.md │ │ ├── hanlp.md │ │ ├── jina.md │ │ ├── langfuse.md │ │ ├── lara.md │ │ ├── llama_cpp.md │ │ ├── llama_stack.md │ │ ├── mcp.md │ │ ├── meta_llama.md │ │ ├── mistral.md │ │ ├── mongodb_atlas.md │ │ ├── nvidia.md │ │ ├── ollama.md │ │ ├── openrouter.md │ │ ├── opensearch.md │ │ ├── optimum.md │ │ ├── paddleocr.md │ │ ├── pgvector.md │ │ ├── pinecone.md │ │ ├── pyversity.md │ │ ├── qdrant.md │ │ ├── ragas.md │ │ ├── snowflake.md │ │ ├── stackit.md │ │ ├── togetherai.md │ │ ├── unstructured.md │ │ ├── valkey.md │ │ ├── watsonx.md │ │ ├── weave.md │ │ └── weaviate.md │ ├── reference-sidebars.js │ ├── reference_versioned_docs/ │ │ ├── version-2.18/ │ │ │ ├── experiments-api/ │ │ │ │ ├── experimental_agents_api.md │ │ │ │ ├── experimental_chatmessage_store_api.md │ │ │ │ ├── experimental_generators_api.md │ │ │ │ ├── experimental_mem0_memory_store_api.md │ │ │ │ ├── experimental_preprocessors_api.md │ │ │ │ ├── experimental_retrievers_api.md │ │ │ │ ├── experimental_summarizer_api.md │ │ │ │ └── experimental_writers_api.md │ │ │ ├── haystack-api/ │ │ │ │ ├── agents_api.md │ │ │ │ ├── audio_api.md │ │ │ │ ├── builders_api.md │ │ │ │ ├── cachings_api.md │ │ │ │ ├── classifiers_api.md │ │ │ │ ├── connectors_api.md │ │ │ │ ├── converters_api.md │ │ │ │ ├── data_classes_api.md │ │ │ │ ├── document_stores_api.md │ │ │ │ ├── document_writers_api.md │ │ │ │ ├── embedders_api.md │ │ │ │ ├── evaluation_api.md │ │ │ │ ├── evaluators_api.md │ │ │ │ ├── extractors_api.md │ │ │ │ ├── fetchers_api.md │ │ │ │ ├── generators_api.md │ │ │ │ ├── image_converters_api.md │ │ │ │ ├── joiners_api.md │ │ │ │ ├── pipeline_api.md │ │ │ │ ├── preprocessors_api.md │ │ │ │ ├── rankers_api.md │ │ │ │ ├── readers_api.md │ │ │ │ ├── retrievers_api.md │ │ │ │ ├── routers_api.md │ │ │ │ ├── samplers_api.md │ │ │ │ ├── tool_components_api.md │ │ │ │ ├── tools_api.md │ │ │ │ ├── utils_api.md │ │ │ │ ├── validators_api.md │ │ │ │ └── websearch_api.md │ │ │ ├── index.mdx │ │ │ └── integrations-api/ │ │ │ ├── aimlapi.md │ │ │ ├── amazon_bedrock.md │ │ │ ├── amazon_sagemaker.md │ │ │ ├── anthropic.md │ │ │ ├── arcadedb.md │ │ │ ├── astra.md │ │ │ ├── azure_ai_search.md │ │ │ ├── azure_doc_intelligence.md │ │ │ ├── chroma.md │ │ │ ├── cohere.md │ │ │ ├── cometapi.md │ │ │ ├── deepeval.md │ │ │ ├── elasticsearch.md │ │ │ ├── faiss.md │ │ │ ├── fastembed.md │ │ │ ├── firecrawl.md │ │ │ ├── github.md │ │ │ ├── google_ai.md │ │ │ ├── google_genai.md │ │ │ ├── google_vertex.md │ │ │ ├── hanlp.md │ │ │ ├── jina.md │ │ │ ├── langfuse.md │ │ │ ├── lara.md │ │ │ ├── llama_cpp.md │ │ │ ├── llama_stack.md │ │ │ ├── mcp.md │ │ │ ├── meta_llama.md │ │ │ ├── mistral.md │ │ │ ├── mongodb_atlas.md │ │ │ ├── nvidia.md │ │ │ ├── ollama.md │ │ │ ├── openrouter.md │ │ │ ├── opensearch.md │ │ │ ├── optimum.md │ │ │ ├── paddleocr.md │ │ │ ├── pgvector.md │ │ │ ├── pinecone.md │ │ │ ├── pyversity.md │ │ │ ├── qdrant.md │ │ │ ├── ragas.md │ │ │ ├── snowflake.md │ │ │ ├── stackit.md │ │ │ ├── togetherai.md │ │ │ ├── unstructured.md │ │ │ ├── valkey.md │ │ │ ├── watsonx.md │ │ │ ├── weave.md │ │ │ └── weaviate.md │ │ ├── version-2.19/ │ │ │ ├── experiments-api/ │ │ │ │ ├── experimental_agents_api.md │ │ │ │ ├── experimental_chatmessage_store_api.md │ │ │ │ ├── experimental_generators_api.md │ │ │ │ ├── experimental_mem0_memory_store_api.md │ │ │ │ ├── experimental_preprocessors_api.md │ │ │ │ ├── experimental_retrievers_api.md │ │ │ │ ├── experimental_summarizer_api.md │ │ │ │ └── experimental_writers_api.md │ │ │ ├── haystack-api/ │ │ │ │ ├── agents_api.md │ │ │ │ ├── audio_api.md │ │ │ │ ├── builders_api.md │ │ │ │ ├── cachings_api.md │ │ │ │ ├── classifiers_api.md │ │ │ │ ├── connectors_api.md │ │ │ │ ├── converters_api.md │ │ │ │ ├── data_classes_api.md │ │ │ │ ├── document_stores_api.md │ │ │ │ ├── document_writers_api.md │ │ │ │ ├── embedders_api.md │ │ │ │ ├── evaluation_api.md │ │ │ │ ├── evaluators_api.md │ │ │ │ ├── extractors_api.md │ │ │ │ ├── fetchers_api.md │ │ │ │ ├── generators_api.md │ │ │ │ ├── image_converters_api.md │ │ │ │ ├── joiners_api.md │ │ │ │ ├── pipeline_api.md │ │ │ │ ├── preprocessors_api.md │ │ │ │ ├── rankers_api.md │ │ │ │ ├── readers_api.md │ │ │ │ ├── retrievers_api.md │ │ │ │ ├── routers_api.md │ │ │ │ ├── samplers_api.md │ │ │ │ ├── tool_components_api.md │ │ │ │ ├── tools_api.md │ │ │ │ ├── utils_api.md │ │ │ │ ├── validators_api.md │ │ │ │ └── websearch_api.md │ │ │ ├── index.mdx │ │ │ └── integrations-api/ │ │ │ ├── aimlapi.md │ │ │ ├── amazon_bedrock.md │ │ │ ├── amazon_sagemaker.md │ │ │ ├── anthropic.md │ │ │ ├── arcadedb.md │ │ │ ├── astra.md │ │ │ ├── azure_ai_search.md │ │ │ ├── azure_doc_intelligence.md │ │ │ ├── chroma.md │ │ │ ├── cohere.md │ │ │ ├── cometapi.md │ │ │ ├── deepeval.md │ │ │ ├── elasticsearch.md │ │ │ ├── faiss.md │ │ │ ├── fastembed.md │ │ │ ├── firecrawl.md │ │ │ ├── github.md │ │ │ ├── google_ai.md │ │ │ ├── google_genai.md │ │ │ ├── google_vertex.md │ │ │ ├── hanlp.md │ │ │ ├── jina.md │ │ │ ├── langfuse.md │ │ │ ├── lara.md │ │ │ ├── llama_cpp.md │ │ │ ├── llama_stack.md │ │ │ ├── mcp.md │ │ │ ├── meta_llama.md │ │ │ ├── mistral.md │ │ │ ├── mongodb_atlas.md │ │ │ ├── nvidia.md │ │ │ ├── ollama.md │ │ │ ├── openrouter.md │ │ │ ├── opensearch.md │ │ │ ├── optimum.md │ │ │ ├── paddleocr.md │ │ │ ├── pgvector.md │ │ │ ├── pinecone.md │ │ │ ├── pyversity.md │ │ │ ├── qdrant.md │ │ │ ├── ragas.md │ │ │ ├── snowflake.md │ │ │ ├── stackit.md │ │ │ ├── togetherai.md │ │ │ ├── unstructured.md │ │ │ ├── valkey.md │ │ │ ├── watsonx.md │ │ │ ├── weave.md │ │ │ └── weaviate.md │ │ ├── version-2.20/ │ │ │ ├── experiments-api/ │ │ │ │ ├── experimental_agents_api.md │ │ │ │ ├── experimental_chatmessage_store_api.md │ │ │ │ ├── experimental_generators_api.md │ │ │ │ ├── experimental_mem0_memory_store_api.md │ │ │ │ ├── experimental_preprocessors_api.md │ │ │ │ ├── experimental_retrievers_api.md │ │ │ │ ├── experimental_summarizer_api.md │ │ │ │ └── experimental_writers_api.md │ │ │ ├── haystack-api/ │ │ │ │ ├── agents_api.md │ │ │ │ ├── audio_api.md │ │ │ │ ├── builders_api.md │ │ │ │ ├── cachings_api.md │ │ │ │ ├── classifiers_api.md │ │ │ │ ├── connectors_api.md │ │ │ │ ├── converters_api.md │ │ │ │ ├── data_classes_api.md │ │ │ │ ├── document_stores_api.md │ │ │ │ ├── document_writers_api.md │ │ │ │ ├── embedders_api.md │ │ │ │ ├── evaluation_api.md │ │ │ │ ├── evaluators_api.md │ │ │ │ ├── extractors_api.md │ │ │ │ ├── fetchers_api.md │ │ │ │ ├── generators_api.md │ │ │ │ ├── image_converters_api.md │ │ │ │ ├── joiners_api.md │ │ │ │ ├── pipeline_api.md │ │ │ │ ├── preprocessors_api.md │ │ │ │ ├── rankers_api.md │ │ │ │ ├── readers_api.md │ │ │ │ ├── retrievers_api.md │ │ │ │ ├── routers_api.md │ │ │ │ ├── samplers_api.md │ │ │ │ ├── tool_components_api.md │ │ │ │ ├── tools_api.md │ │ │ │ ├── utils_api.md │ │ │ │ ├── validators_api.md │ │ │ │ └── websearch_api.md │ │ │ ├── index.mdx │ │ │ └── integrations-api/ │ │ │ ├── aimlapi.md │ │ │ ├── amazon_bedrock.md │ │ │ ├── amazon_sagemaker.md │ │ │ ├── anthropic.md │ │ │ ├── arcadedb.md │ │ │ ├── astra.md │ │ │ ├── azure_ai_search.md │ │ │ ├── azure_doc_intelligence.md │ │ │ ├── chroma.md │ │ │ ├── cohere.md │ │ │ ├── cometapi.md │ │ │ ├── deepeval.md │ │ │ ├── elasticsearch.md │ │ │ ├── faiss.md │ │ │ ├── fastembed.md │ │ │ ├── firecrawl.md │ │ │ ├── github.md │ │ │ ├── google_ai.md │ │ │ ├── google_genai.md │ │ │ ├── google_vertex.md │ │ │ ├── hanlp.md │ │ │ ├── jina.md │ │ │ ├── langfuse.md │ │ │ ├── lara.md │ │ │ ├── llama_cpp.md │ │ │ ├── llama_stack.md │ │ │ ├── mcp.md │ │ │ ├── meta_llama.md │ │ │ ├── mistral.md │ │ │ ├── mongodb_atlas.md │ │ │ ├── nvidia.md │ │ │ ├── ollama.md │ │ │ ├── openrouter.md │ │ │ ├── opensearch.md │ │ │ ├── optimum.md │ │ │ ├── paddleocr.md │ │ │ ├── pgvector.md │ │ │ ├── pinecone.md │ │ │ ├── pyversity.md │ │ │ ├── qdrant.md │ │ │ ├── ragas.md │ │ │ ├── snowflake.md │ │ │ ├── stackit.md │ │ │ ├── togetherai.md │ │ │ ├── unstructured.md │ │ │ ├── valkey.md │ │ │ ├── watsonx.md │ │ │ ├── weave.md │ │ │ └── weaviate.md │ │ ├── version-2.21/ │ │ │ ├── experiments-api/ │ │ │ │ ├── experimental_agents_api.md │ │ │ │ ├── experimental_chatmessage_store_api.md │ │ │ │ ├── experimental_generators_api.md │ │ │ │ ├── experimental_mem0_memory_store_api.md │ │ │ │ ├── experimental_preprocessors_api.md │ │ │ │ ├── experimental_retrievers_api.md │ │ │ │ ├── experimental_summarizer_api.md │ │ │ │ └── experimental_writers_api.md │ │ │ ├── haystack-api/ │ │ │ │ ├── agents_api.md │ │ │ │ ├── audio_api.md │ │ │ │ ├── builders_api.md │ │ │ │ ├── cachings_api.md │ │ │ │ ├── classifiers_api.md │ │ │ │ ├── connectors_api.md │ │ │ │ ├── converters_api.md │ │ │ │ ├── data_classes_api.md │ │ │ │ ├── document_stores_api.md │ │ │ │ ├── document_writers_api.md │ │ │ │ ├── embedders_api.md │ │ │ │ ├── evaluation_api.md │ │ │ │ ├── evaluators_api.md │ │ │ │ ├── extractors_api.md │ │ │ │ ├── fetchers_api.md │ │ │ │ ├── generators_api.md │ │ │ │ ├── image_converters_api.md │ │ │ │ ├── joiners_api.md │ │ │ │ ├── pipeline_api.md │ │ │ │ ├── preprocessors_api.md │ │ │ │ ├── query_api.md │ │ │ │ ├── rankers_api.md │ │ │ │ ├── readers_api.md │ │ │ │ ├── retrievers_api.md │ │ │ │ ├── routers_api.md │ │ │ │ ├── samplers_api.md │ │ │ │ ├── tool_components_api.md │ │ │ │ ├── tools_api.md │ │ │ │ ├── utils_api.md │ │ │ │ ├── validators_api.md │ │ │ │ └── websearch_api.md │ │ │ ├── index.mdx │ │ │ └── integrations-api/ │ │ │ ├── aimlapi.md │ │ │ ├── amazon_bedrock.md │ │ │ ├── amazon_sagemaker.md │ │ │ ├── anthropic.md │ │ │ ├── arcadedb.md │ │ │ ├── astra.md │ │ │ ├── azure_ai_search.md │ │ │ ├── azure_doc_intelligence.md │ │ │ ├── chroma.md │ │ │ ├── cohere.md │ │ │ ├── cometapi.md │ │ │ ├── deepeval.md │ │ │ ├── elasticsearch.md │ │ │ ├── faiss.md │ │ │ ├── fastembed.md │ │ │ ├── firecrawl.md │ │ │ ├── github.md │ │ │ ├── google_ai.md │ │ │ ├── google_genai.md │ │ │ ├── google_vertex.md │ │ │ ├── hanlp.md │ │ │ ├── jina.md │ │ │ ├── langfuse.md │ │ │ ├── lara.md │ │ │ ├── llama_cpp.md │ │ │ ├── llama_stack.md │ │ │ ├── mcp.md │ │ │ ├── meta_llama.md │ │ │ ├── mistral.md │ │ │ ├── mongodb_atlas.md │ │ │ ├── nvidia.md │ │ │ ├── ollama.md │ │ │ ├── openrouter.md │ │ │ ├── opensearch.md │ │ │ ├── optimum.md │ │ │ ├── paddleocr.md │ │ │ ├── pgvector.md │ │ │ ├── pinecone.md │ │ │ ├── pyversity.md │ │ │ ├── qdrant.md │ │ │ ├── ragas.md │ │ │ ├── snowflake.md │ │ │ ├── stackit.md │ │ │ ├── togetherai.md │ │ │ ├── unstructured.md │ │ │ ├── valkey.md │ │ │ ├── watsonx.md │ │ │ ├── weave.md │ │ │ └── weaviate.md │ │ ├── version-2.22/ │ │ │ ├── experiments-api/ │ │ │ │ ├── experimental_agents_api.md │ │ │ │ ├── experimental_chatmessage_store_api.md │ │ │ │ ├── experimental_generators_api.md │ │ │ │ ├── experimental_mem0_memory_store_api.md │ │ │ │ ├── experimental_preprocessors_api.md │ │ │ │ ├── experimental_retrievers_api.md │ │ │ │ ├── experimental_summarizer_api.md │ │ │ │ └── experimental_writers_api.md │ │ │ ├── haystack-api/ │ │ │ │ ├── agents_api.md │ │ │ │ ├── audio_api.md │ │ │ │ ├── builders_api.md │ │ │ │ ├── cachings_api.md │ │ │ │ ├── classifiers_api.md │ │ │ │ ├── connectors_api.md │ │ │ │ ├── converters_api.md │ │ │ │ ├── data_classes_api.md │ │ │ │ ├── document_stores_api.md │ │ │ │ ├── document_writers_api.md │ │ │ │ ├── embedders_api.md │ │ │ │ ├── evaluation_api.md │ │ │ │ ├── evaluators_api.md │ │ │ │ ├── extractors_api.md │ │ │ │ ├── fetchers_api.md │ │ │ │ ├── generators_api.md │ │ │ │ ├── image_converters_api.md │ │ │ │ ├── joiners_api.md │ │ │ │ ├── pipeline_api.md │ │ │ │ ├── preprocessors_api.md │ │ │ │ ├── query_api.md │ │ │ │ ├── rankers_api.md │ │ │ │ ├── readers_api.md │ │ │ │ ├── retrievers_api.md │ │ │ │ ├── routers_api.md │ │ │ │ ├── samplers_api.md │ │ │ │ ├── tool_components_api.md │ │ │ │ ├── tools_api.md │ │ │ │ ├── utils_api.md │ │ │ │ ├── validators_api.md │ │ │ │ └── websearch_api.md │ │ │ ├── index.mdx │ │ │ └── integrations-api/ │ │ │ ├── aimlapi.md │ │ │ ├── amazon_bedrock.md │ │ │ ├── amazon_sagemaker.md │ │ │ ├── anthropic.md │ │ │ ├── arcadedb.md │ │ │ ├── astra.md │ │ │ ├── azure_ai_search.md │ │ │ ├── azure_doc_intelligence.md │ │ │ ├── chroma.md │ │ │ ├── cohere.md │ │ │ ├── cometapi.md │ │ │ ├── deepeval.md │ │ │ ├── elasticsearch.md │ │ │ ├── faiss.md │ │ │ ├── fastembed.md │ │ │ ├── firecrawl.md │ │ │ ├── github.md │ │ │ ├── google_ai.md │ │ │ ├── google_genai.md │ │ │ ├── google_vertex.md │ │ │ ├── hanlp.md │ │ │ ├── jina.md │ │ │ ├── langfuse.md │ │ │ ├── lara.md │ │ │ ├── llama_cpp.md │ │ │ ├── llama_stack.md │ │ │ ├── mcp.md │ │ │ ├── meta_llama.md │ │ │ ├── mistral.md │ │ │ ├── mongodb_atlas.md │ │ │ ├── nvidia.md │ │ │ ├── ollama.md │ │ │ ├── openrouter.md │ │ │ ├── opensearch.md │ │ │ ├── optimum.md │ │ │ ├── paddleocr.md │ │ │ ├── pgvector.md │ │ │ ├── pinecone.md │ │ │ ├── pyversity.md │ │ │ ├── qdrant.md │ │ │ ├── ragas.md │ │ │ ├── snowflake.md │ │ │ ├── stackit.md │ │ │ ├── togetherai.md │ │ │ ├── unstructured.md │ │ │ ├── valkey.md │ │ │ ├── watsonx.md │ │ │ ├── weave.md │ │ │ └── weaviate.md │ │ ├── version-2.23/ │ │ │ ├── experiments-api/ │ │ │ │ ├── experimental_agents_api.md │ │ │ │ ├── experimental_chatmessage_store_api.md │ │ │ │ ├── experimental_generators_api.md │ │ │ │ ├── experimental_mem0_memory_store_api.md │ │ │ │ ├── experimental_preprocessors_api.md │ │ │ │ ├── experimental_retrievers_api.md │ │ │ │ ├── experimental_summarizer_api.md │ │ │ │ └── experimental_writers_api.md │ │ │ ├── haystack-api/ │ │ │ │ ├── agents_api.md │ │ │ │ ├── audio_api.md │ │ │ │ ├── builders_api.md │ │ │ │ ├── cachings_api.md │ │ │ │ ├── classifiers_api.md │ │ │ │ ├── connectors_api.md │ │ │ │ ├── converters_api.md │ │ │ │ ├── data_classes_api.md │ │ │ │ ├── document_stores_api.md │ │ │ │ ├── document_writers_api.md │ │ │ │ ├── embedders_api.md │ │ │ │ ├── evaluation_api.md │ │ │ │ ├── evaluators_api.md │ │ │ │ ├── extractors_api.md │ │ │ │ ├── fetchers_api.md │ │ │ │ ├── generators_api.md │ │ │ │ ├── human_in_the_loop_api.md │ │ │ │ ├── image_converters_api.md │ │ │ │ ├── joiners_api.md │ │ │ │ ├── pipeline_api.md │ │ │ │ ├── preprocessors_api.md │ │ │ │ ├── query_api.md │ │ │ │ ├── rankers_api.md │ │ │ │ ├── readers_api.md │ │ │ │ ├── retrievers_api.md │ │ │ │ ├── routers_api.md │ │ │ │ ├── samplers_api.md │ │ │ │ ├── tool_components_api.md │ │ │ │ ├── tools_api.md │ │ │ │ ├── utils_api.md │ │ │ │ ├── validators_api.md │ │ │ │ └── websearch_api.md │ │ │ ├── index.mdx │ │ │ └── integrations-api/ │ │ │ ├── aimlapi.md │ │ │ ├── amazon_bedrock.md │ │ │ ├── amazon_sagemaker.md │ │ │ ├── anthropic.md │ │ │ ├── arcadedb.md │ │ │ ├── astra.md │ │ │ ├── azure_ai_search.md │ │ │ ├── azure_doc_intelligence.md │ │ │ ├── chroma.md │ │ │ ├── cohere.md │ │ │ ├── cometapi.md │ │ │ ├── deepeval.md │ │ │ ├── elasticsearch.md │ │ │ ├── faiss.md │ │ │ ├── fastembed.md │ │ │ ├── firecrawl.md │ │ │ ├── github.md │ │ │ ├── google_ai.md │ │ │ ├── google_genai.md │ │ │ ├── google_vertex.md │ │ │ ├── hanlp.md │ │ │ ├── jina.md │ │ │ ├── langfuse.md │ │ │ ├── lara.md │ │ │ ├── llama_cpp.md │ │ │ ├── llama_stack.md │ │ │ ├── mcp.md │ │ │ ├── meta_llama.md │ │ │ ├── mistral.md │ │ │ ├── mongodb_atlas.md │ │ │ ├── nvidia.md │ │ │ ├── ollama.md │ │ │ ├── openrouter.md │ │ │ ├── opensearch.md │ │ │ ├── optimum.md │ │ │ ├── paddleocr.md │ │ │ ├── pgvector.md │ │ │ ├── pinecone.md │ │ │ ├── pyversity.md │ │ │ ├── qdrant.md │ │ │ ├── ragas.md │ │ │ ├── snowflake.md │ │ │ ├── stackit.md │ │ │ ├── togetherai.md │ │ │ ├── unstructured.md │ │ │ ├── valkey.md │ │ │ ├── watsonx.md │ │ │ ├── weave.md │ │ │ └── weaviate.md │ │ ├── version-2.24/ │ │ │ ├── experiments-api/ │ │ │ │ ├── experimental_agents_api.md │ │ │ │ ├── experimental_chatmessage_store_api.md │ │ │ │ ├── experimental_generators_api.md │ │ │ │ ├── experimental_mem0_memory_store_api.md │ │ │ │ ├── experimental_preprocessors_api.md │ │ │ │ ├── experimental_retrievers_api.md │ │ │ │ ├── experimental_summarizer_api.md │ │ │ │ └── experimental_writers_api.md │ │ │ ├── haystack-api/ │ │ │ │ ├── agents_api.md │ │ │ │ ├── audio_api.md │ │ │ │ ├── builders_api.md │ │ │ │ ├── cachings_api.md │ │ │ │ ├── classifiers_api.md │ │ │ │ ├── connectors_api.md │ │ │ │ ├── converters_api.md │ │ │ │ ├── data_classes_api.md │ │ │ │ ├── document_stores_api.md │ │ │ │ ├── document_writers_api.md │ │ │ │ ├── embedders_api.md │ │ │ │ ├── evaluation_api.md │ │ │ │ ├── evaluators_api.md │ │ │ │ ├── extractors_api.md │ │ │ │ ├── fetchers_api.md │ │ │ │ ├── generators_api.md │ │ │ │ ├── human_in_the_loop_api.md │ │ │ │ ├── image_converters_api.md │ │ │ │ ├── joiners_api.md │ │ │ │ ├── pipeline_api.md │ │ │ │ ├── preprocessors_api.md │ │ │ │ ├── query_api.md │ │ │ │ ├── rankers_api.md │ │ │ │ ├── readers_api.md │ │ │ │ ├── retrievers_api.md │ │ │ │ ├── routers_api.md │ │ │ │ ├── samplers_api.md │ │ │ │ ├── tool_components_api.md │ │ │ │ ├── tools_api.md │ │ │ │ ├── utils_api.md │ │ │ │ ├── validators_api.md │ │ │ │ └── websearch_api.md │ │ │ ├── index.mdx │ │ │ └── integrations-api/ │ │ │ ├── aimlapi.md │ │ │ ├── amazon_bedrock.md │ │ │ ├── amazon_sagemaker.md │ │ │ ├── anthropic.md │ │ │ ├── arcadedb.md │ │ │ ├── astra.md │ │ │ ├── azure_ai_search.md │ │ │ ├── azure_doc_intelligence.md │ │ │ ├── chroma.md │ │ │ ├── cohere.md │ │ │ ├── cometapi.md │ │ │ ├── deepeval.md │ │ │ ├── elasticsearch.md │ │ │ ├── faiss.md │ │ │ ├── fastembed.md │ │ │ ├── firecrawl.md │ │ │ ├── github.md │ │ │ ├── google_ai.md │ │ │ ├── google_genai.md │ │ │ ├── google_vertex.md │ │ │ ├── hanlp.md │ │ │ ├── jina.md │ │ │ ├── langfuse.md │ │ │ ├── lara.md │ │ │ ├── llama_cpp.md │ │ │ ├── llama_stack.md │ │ │ ├── mcp.md │ │ │ ├── meta_llama.md │ │ │ ├── mistral.md │ │ │ ├── mongodb_atlas.md │ │ │ ├── nvidia.md │ │ │ ├── ollama.md │ │ │ ├── openrouter.md │ │ │ ├── opensearch.md │ │ │ ├── optimum.md │ │ │ ├── paddleocr.md │ │ │ ├── pgvector.md │ │ │ ├── pinecone.md │ │ │ ├── pyversity.md │ │ │ ├── qdrant.md │ │ │ ├── ragas.md │ │ │ ├── snowflake.md │ │ │ ├── stackit.md │ │ │ ├── togetherai.md │ │ │ ├── unstructured.md │ │ │ ├── valkey.md │ │ │ ├── watsonx.md │ │ │ ├── weave.md │ │ │ └── weaviate.md │ │ ├── version-2.25/ │ │ │ ├── experiments-api/ │ │ │ │ ├── experimental_agents_api.md │ │ │ │ ├── experimental_chatmessage_store_api.md │ │ │ │ ├── experimental_generators_api.md │ │ │ │ ├── experimental_mem0_memory_store_api.md │ │ │ │ ├── experimental_preprocessors_api.md │ │ │ │ ├── experimental_retrievers_api.md │ │ │ │ ├── experimental_summarizer_api.md │ │ │ │ └── experimental_writers_api.md │ │ │ ├── haystack-api/ │ │ │ │ ├── agents_api.md │ │ │ │ ├── audio_api.md │ │ │ │ ├── builders_api.md │ │ │ │ ├── cachings_api.md │ │ │ │ ├── classifiers_api.md │ │ │ │ ├── connectors_api.md │ │ │ │ ├── converters_api.md │ │ │ │ ├── data_classes_api.md │ │ │ │ ├── document_stores_api.md │ │ │ │ ├── document_writers_api.md │ │ │ │ ├── embedders_api.md │ │ │ │ ├── evaluation_api.md │ │ │ │ ├── evaluators_api.md │ │ │ │ ├── extractors_api.md │ │ │ │ ├── fetchers_api.md │ │ │ │ ├── generators_api.md │ │ │ │ ├── human_in_the_loop_api.md │ │ │ │ ├── image_converters_api.md │ │ │ │ ├── joiners_api.md │ │ │ │ ├── pipeline_api.md │ │ │ │ ├── preprocessors_api.md │ │ │ │ ├── query_api.md │ │ │ │ ├── rankers_api.md │ │ │ │ ├── readers_api.md │ │ │ │ ├── retrievers_api.md │ │ │ │ ├── routers_api.md │ │ │ │ ├── samplers_api.md │ │ │ │ ├── tool_components_api.md │ │ │ │ ├── tools_api.md │ │ │ │ ├── utils_api.md │ │ │ │ ├── validators_api.md │ │ │ │ └── websearch_api.md │ │ │ ├── index.mdx │ │ │ └── integrations-api/ │ │ │ ├── aimlapi.md │ │ │ ├── amazon_bedrock.md │ │ │ ├── amazon_sagemaker.md │ │ │ ├── anthropic.md │ │ │ ├── arcadedb.md │ │ │ ├── astra.md │ │ │ ├── azure_ai_search.md │ │ │ ├── azure_doc_intelligence.md │ │ │ ├── chroma.md │ │ │ ├── cohere.md │ │ │ ├── cometapi.md │ │ │ ├── deepeval.md │ │ │ ├── elasticsearch.md │ │ │ ├── faiss.md │ │ │ ├── fastembed.md │ │ │ ├── firecrawl.md │ │ │ ├── github.md │ │ │ ├── google_ai.md │ │ │ ├── google_genai.md │ │ │ ├── google_vertex.md │ │ │ ├── hanlp.md │ │ │ ├── jina.md │ │ │ ├── langfuse.md │ │ │ ├── lara.md │ │ │ ├── llama_cpp.md │ │ │ ├── llama_stack.md │ │ │ ├── mcp.md │ │ │ ├── meta_llama.md │ │ │ ├── mistral.md │ │ │ ├── mongodb_atlas.md │ │ │ ├── nvidia.md │ │ │ ├── ollama.md │ │ │ ├── openrouter.md │ │ │ ├── opensearch.md │ │ │ ├── optimum.md │ │ │ ├── paddleocr.md │ │ │ ├── pgvector.md │ │ │ ├── pinecone.md │ │ │ ├── pyversity.md │ │ │ ├── qdrant.md │ │ │ ├── ragas.md │ │ │ ├── snowflake.md │ │ │ ├── stackit.md │ │ │ ├── togetherai.md │ │ │ ├── unstructured.md │ │ │ ├── valkey.md │ │ │ ├── watsonx.md │ │ │ ├── weave.md │ │ │ └── weaviate.md │ │ └── version-2.26/ │ │ ├── experiments-api/ │ │ │ ├── experimental_agents_api.md │ │ │ ├── experimental_chatmessage_store_api.md │ │ │ ├── experimental_generators_api.md │ │ │ ├── experimental_mem0_memory_store_api.md │ │ │ ├── experimental_preprocessors_api.md │ │ │ ├── experimental_retrievers_api.md │ │ │ ├── experimental_summarizer_api.md │ │ │ └── experimental_writers_api.md │ │ ├── haystack-api/ │ │ │ ├── agents_api.md │ │ │ ├── audio_api.md │ │ │ ├── builders_api.md │ │ │ ├── cachings_api.md │ │ │ ├── classifiers_api.md │ │ │ ├── connectors_api.md │ │ │ ├── converters_api.md │ │ │ ├── data_classes_api.md │ │ │ ├── document_stores_api.md │ │ │ ├── document_writers_api.md │ │ │ ├── embedders_api.md │ │ │ ├── evaluation_api.md │ │ │ ├── evaluators_api.md │ │ │ ├── extractors_api.md │ │ │ ├── fetchers_api.md │ │ │ ├── generators_api.md │ │ │ ├── human_in_the_loop_api.md │ │ │ ├── image_converters_api.md │ │ │ ├── joiners_api.md │ │ │ ├── pipeline_api.md │ │ │ ├── preprocessors_api.md │ │ │ ├── query_api.md │ │ │ ├── rankers_api.md │ │ │ ├── readers_api.md │ │ │ ├── retrievers_api.md │ │ │ ├── routers_api.md │ │ │ ├── samplers_api.md │ │ │ ├── tool_components_api.md │ │ │ ├── tools_api.md │ │ │ ├── utils_api.md │ │ │ ├── validators_api.md │ │ │ └── websearch_api.md │ │ ├── index.mdx │ │ └── integrations-api/ │ │ ├── aimlapi.md │ │ ├── amazon_bedrock.md │ │ ├── amazon_sagemaker.md │ │ ├── anthropic.md │ │ ├── arcadedb.md │ │ ├── astra.md │ │ ├── azure_ai_search.md │ │ ├── azure_doc_intelligence.md │ │ ├── chroma.md │ │ ├── cohere.md │ │ ├── cometapi.md │ │ ├── deepeval.md │ │ ├── elasticsearch.md │ │ ├── faiss.md │ │ ├── fastembed.md │ │ ├── firecrawl.md │ │ ├── github.md │ │ ├── google_ai.md │ │ ├── google_genai.md │ │ ├── google_vertex.md │ │ ├── hanlp.md │ │ ├── jina.md │ │ ├── langfuse.md │ │ ├── lara.md │ │ ├── llama_cpp.md │ │ ├── llama_stack.md │ │ ├── mcp.md │ │ ├── meta_llama.md │ │ ├── mistral.md │ │ ├── mongodb_atlas.md │ │ ├── nvidia.md │ │ ├── ollama.md │ │ ├── openrouter.md │ │ ├── opensearch.md │ │ ├── optimum.md │ │ ├── paddleocr.md │ │ ├── pgvector.md │ │ ├── pinecone.md │ │ ├── pyversity.md │ │ ├── qdrant.md │ │ ├── ragas.md │ │ ├── snowflake.md │ │ ├── stackit.md │ │ ├── togetherai.md │ │ ├── unstructured.md │ │ ├── valkey.md │ │ ├── watsonx.md │ │ ├── weave.md │ │ └── weaviate.md │ ├── reference_versioned_sidebars/ │ │ ├── version-2.18-sidebars.json │ │ ├── version-2.19-sidebars.json │ │ ├── version-2.20-sidebars.json │ │ ├── version-2.21-sidebars.json │ │ ├── version-2.22-sidebars.json │ │ ├── version-2.23-sidebars.json │ │ ├── version-2.24-sidebars.json │ │ ├── version-2.25-sidebars.json │ │ └── version-2.26-sidebars.json │ ├── reference_versions.json │ ├── scripts/ │ │ ├── extract_sidebar.mjs │ │ ├── generate_requirements.py │ │ ├── setup-dev.sh │ │ └── test_python_snippets.py │ ├── sidebars.js │ ├── static/ │ │ └── .nojekyll │ ├── versioned_docs/ │ │ ├── version-2.18/ │ │ │ ├── concepts/ │ │ │ │ ├── agents/ │ │ │ │ │ └── state.mdx │ │ │ │ ├── agents.mdx │ │ │ │ ├── components/ │ │ │ │ │ ├── custom-components.mdx │ │ │ │ │ └── supercomponents.mdx │ │ │ │ ├── components.mdx │ │ │ │ ├── concepts-overview.mdx │ │ │ │ ├── data-classes/ │ │ │ │ │ └── chatmessage.mdx │ │ │ │ ├── data-classes.mdx │ │ │ │ ├── device-management.mdx │ │ │ │ ├── document-store/ │ │ │ │ │ ├── choosing-a-document-store.mdx │ │ │ │ │ └── creating-custom-document-stores.mdx │ │ │ │ ├── document-store.mdx │ │ │ │ ├── experimental-package.mdx │ │ │ │ ├── integrations.mdx │ │ │ │ ├── jinja-templates.mdx │ │ │ │ ├── metadata-filtering.mdx │ │ │ │ ├── pipelines/ │ │ │ │ │ ├── asyncpipeline.mdx │ │ │ │ │ ├── creating-pipelines.mdx │ │ │ │ │ ├── debugging-pipelines.mdx │ │ │ │ │ ├── pipeline-breakpoints.mdx │ │ │ │ │ ├── pipeline-templates.mdx │ │ │ │ │ ├── serialization.mdx │ │ │ │ │ └── visualizing-pipelines.mdx │ │ │ │ ├── pipelines.mdx │ │ │ │ └── secret-management.mdx │ │ │ ├── development/ │ │ │ │ ├── deployment/ │ │ │ │ │ ├── docker.mdx │ │ │ │ │ ├── kubernetes.mdx │ │ │ │ │ └── openshift.mdx │ │ │ │ ├── deployment.mdx │ │ │ │ ├── enabling-gpu-acceleration.mdx │ │ │ │ ├── external-integrations-development.mdx │ │ │ │ ├── hayhooks.mdx │ │ │ │ ├── logging.mdx │ │ │ │ └── tracing.mdx │ │ │ ├── document-stores/ │ │ │ │ ├── astradocumentstore.mdx │ │ │ │ ├── azureaisearchdocumentstore.mdx │ │ │ │ ├── chromadocumentstore.mdx │ │ │ │ ├── elasticsearch-document-store.mdx │ │ │ │ ├── inmemorydocumentstore.mdx │ │ │ │ ├── mongodbatlasdocumentstore.mdx │ │ │ │ ├── opensearch-document-store.mdx │ │ │ │ ├── pgvectordocumentstore.mdx │ │ │ │ ├── pinecone-document-store.mdx │ │ │ │ ├── qdrant-document-store.mdx │ │ │ │ └── weaviatedocumentstore.mdx │ │ │ ├── intro.mdx │ │ │ ├── optimization/ │ │ │ │ ├── advanced-rag-techniques/ │ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx │ │ │ │ ├── advanced-rag-techniques.mdx │ │ │ │ ├── evaluation/ │ │ │ │ │ ├── model-based-evaluation.mdx │ │ │ │ │ └── statistical-evaluation.mdx │ │ │ │ └── evaluation.mdx │ │ │ ├── overview/ │ │ │ │ ├── breaking-change-policy.mdx │ │ │ │ ├── faq.mdx │ │ │ │ ├── get-started.mdx │ │ │ │ ├── installation.mdx │ │ │ │ ├── migration.mdx │ │ │ │ └── telemetry.mdx │ │ │ ├── pipeline-components/ │ │ │ │ ├── agents-1/ │ │ │ │ │ └── agent.mdx │ │ │ │ ├── audio/ │ │ │ │ │ ├── external-integrations-audio.mdx │ │ │ │ │ ├── localwhispertranscriber.mdx │ │ │ │ │ └── remotewhispertranscriber.mdx │ │ │ │ ├── audio.mdx │ │ │ │ ├── builders/ │ │ │ │ │ ├── answerbuilder.mdx │ │ │ │ │ ├── chatpromptbuilder.mdx │ │ │ │ │ └── promptbuilder.mdx │ │ │ │ ├── builders.mdx │ │ │ │ ├── caching/ │ │ │ │ │ └── cachechecker.mdx │ │ │ │ ├── classifiers/ │ │ │ │ │ ├── documentlanguageclassifier.mdx │ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx │ │ │ │ ├── classifiers.mdx │ │ │ │ ├── connectors/ │ │ │ │ │ ├── external-integrations-connectors.mdx │ │ │ │ │ ├── githubfileeditor.mdx │ │ │ │ │ ├── githubissuecommenter.mdx │ │ │ │ │ ├── githubissueviewer.mdx │ │ │ │ │ ├── githubprcreator.mdx │ │ │ │ │ ├── githubrepoforker.mdx │ │ │ │ │ ├── githubrepoviewer.mdx │ │ │ │ │ ├── jinareaderconnector.mdx │ │ │ │ │ ├── langfuseconnector.mdx │ │ │ │ │ ├── openapiconnector.mdx │ │ │ │ │ ├── openapiserviceconnector.mdx │ │ │ │ │ └── weaveconnector.mdx │ │ │ │ ├── connectors.mdx │ │ │ │ ├── converters/ │ │ │ │ │ ├── azureocrdocumentconverter.mdx │ │ │ │ │ ├── csvtodocument.mdx │ │ │ │ │ ├── documenttoimagecontent.mdx │ │ │ │ │ ├── docxtodocument.mdx │ │ │ │ │ ├── external-integrations-converters.mdx │ │ │ │ │ ├── htmltodocument.mdx │ │ │ │ │ ├── imagefiletodocument.mdx │ │ │ │ │ ├── imagefiletoimagecontent.mdx │ │ │ │ │ ├── jsonconverter.mdx │ │ │ │ │ ├── markdowntodocument.mdx │ │ │ │ │ ├── msgtodocument.mdx │ │ │ │ │ ├── multifileconverter.mdx │ │ │ │ │ ├── openapiservicetofunctions.mdx │ │ │ │ │ ├── outputadapter.mdx │ │ │ │ │ ├── pdfminertodocument.mdx │ │ │ │ │ ├── pdftoimagecontent.mdx │ │ │ │ │ ├── pptxtodocument.mdx │ │ │ │ │ ├── pypdftodocument.mdx │ │ │ │ │ ├── textfiletodocument.mdx │ │ │ │ │ ├── tikadocumentconverter.mdx │ │ │ │ │ ├── unstructuredfileconverter.mdx │ │ │ │ │ └── xlsxtodocument.mdx │ │ │ │ ├── converters.mdx │ │ │ │ ├── downloaders/ │ │ │ │ │ └── s3downloader.mdx │ │ │ │ ├── embedders/ │ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx │ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx │ │ │ │ │ ├── amazonbedrocktextembedder.mdx │ │ │ │ │ ├── azureopenaidocumentembedder.mdx │ │ │ │ │ ├── azureopenaitextembedder.mdx │ │ │ │ │ ├── choosing-the-right-embedder.mdx │ │ │ │ │ ├── coheredocumentembedder.mdx │ │ │ │ │ ├── coheredocumentimageembedder.mdx │ │ │ │ │ ├── coheretextembedder.mdx │ │ │ │ │ ├── external-integrations-embedders.mdx │ │ │ │ │ ├── fastembeddocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsetextembedder.mdx │ │ │ │ │ ├── fastembedtextembedder.mdx │ │ │ │ │ ├── googlegenaidocumentembedder.mdx │ │ │ │ │ ├── googlegenaitextembedder.mdx │ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx │ │ │ │ │ ├── huggingfaceapitextembedder.mdx │ │ │ │ │ ├── jinadocumentembedder.mdx │ │ │ │ │ ├── jinadocumentimageembedder.mdx │ │ │ │ │ ├── jinatextembedder.mdx │ │ │ │ │ ├── mistraldocumentembedder.mdx │ │ │ │ │ ├── mistraltextembedder.mdx │ │ │ │ │ ├── nvidiadocumentembedder.mdx │ │ │ │ │ ├── nvidiatextembedder.mdx │ │ │ │ │ ├── ollamadocumentembedder.mdx │ │ │ │ │ ├── ollamatextembedder.mdx │ │ │ │ │ ├── openaidocumentembedder.mdx │ │ │ │ │ ├── openaitextembedder.mdx │ │ │ │ │ ├── optimumdocumentembedder.mdx │ │ │ │ │ ├── optimumtextembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx │ │ │ │ │ ├── sentencetransformerstextembedder.mdx │ │ │ │ │ ├── stackitdocumentembedder.mdx │ │ │ │ │ ├── stackittextembedder.mdx │ │ │ │ │ ├── vertexaidocumentembedder.mdx │ │ │ │ │ ├── vertexaitextembedder.mdx │ │ │ │ │ ├── watsonxdocumentembedder.mdx │ │ │ │ │ └── watsonxtextembedder.mdx │ │ │ │ ├── embedders.mdx │ │ │ │ ├── evaluators/ │ │ │ │ │ ├── answerexactmatchevaluator.mdx │ │ │ │ │ ├── contextrelevanceevaluator.mdx │ │ │ │ │ ├── deepevalevaluator.mdx │ │ │ │ │ ├── documentmapevaluator.mdx │ │ │ │ │ ├── documentmrrevaluator.mdx │ │ │ │ │ ├── documentndcgevaluator.mdx │ │ │ │ │ ├── documentrecallevaluator.mdx │ │ │ │ │ ├── external-integrations-evaluators.mdx │ │ │ │ │ ├── faithfulnessevaluator.mdx │ │ │ │ │ ├── llmevaluator.mdx │ │ │ │ │ ├── ragasevaluator.mdx │ │ │ │ │ └── sasevaluator.mdx │ │ │ │ ├── evaluators.mdx │ │ │ │ ├── extractors/ │ │ │ │ │ ├── llmdocumentcontentextractor.mdx │ │ │ │ │ ├── llmmetadataextractor.mdx │ │ │ │ │ └── namedentityextractor.mdx │ │ │ │ ├── extractors.mdx │ │ │ │ ├── fetchers/ │ │ │ │ │ ├── external-integrations-fetchers.mdx │ │ │ │ │ └── linkcontentfetcher.mdx │ │ │ │ ├── fetchers.mdx │ │ │ │ ├── generators/ │ │ │ │ │ ├── amazonbedrockchatgenerator.mdx │ │ │ │ │ ├── amazonbedrockgenerator.mdx │ │ │ │ │ ├── anthropicchatgenerator.mdx │ │ │ │ │ ├── anthropicgenerator.mdx │ │ │ │ │ ├── anthropicvertexchatgenerator.mdx │ │ │ │ │ ├── azureopenaichatgenerator.mdx │ │ │ │ │ ├── azureopenaigenerator.mdx │ │ │ │ │ ├── coherechatgenerator.mdx │ │ │ │ │ ├── coheregenerator.mdx │ │ │ │ │ ├── dalleimagegenerator.mdx │ │ │ │ │ ├── external-integrations-generators.mdx │ │ │ │ │ ├── googleaigeminichatgenerator.mdx │ │ │ │ │ ├── googleaigeminigenerator.mdx │ │ │ │ │ ├── googlegenaichatgenerator.mdx │ │ │ │ │ ├── guides-to-generators/ │ │ │ │ │ │ ├── choosing-the-right-generator.mdx │ │ │ │ │ │ ├── function-calling.mdx │ │ │ │ │ │ └── generators-vs-chat-generators.mdx │ │ │ │ │ ├── huggingfaceapichatgenerator.mdx │ │ │ │ │ ├── huggingfaceapigenerator.mdx │ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx │ │ │ │ │ ├── huggingfacelocalgenerator.mdx │ │ │ │ │ ├── llamacppchatgenerator.mdx │ │ │ │ │ ├── llamacppgenerator.mdx │ │ │ │ │ ├── llamastackchatgenerator.mdx │ │ │ │ │ ├── metallamachatgenerator.mdx │ │ │ │ │ ├── mistralchatgenerator.mdx │ │ │ │ │ ├── nvidiachatgenerator.mdx │ │ │ │ │ ├── nvidiagenerator.mdx │ │ │ │ │ ├── ollamachatgenerator.mdx │ │ │ │ │ ├── ollamagenerator.mdx │ │ │ │ │ ├── openaichatgenerator.mdx │ │ │ │ │ ├── openaigenerator.mdx │ │ │ │ │ ├── openrouterchatgenerator.mdx │ │ │ │ │ ├── sagemakergenerator.mdx │ │ │ │ │ ├── stackitchatgenerator.mdx │ │ │ │ │ ├── vertexaicodegenerator.mdx │ │ │ │ │ ├── vertexaigeminichatgenerator.mdx │ │ │ │ │ ├── vertexaigeminigenerator.mdx │ │ │ │ │ ├── vertexaiimagecaptioner.mdx │ │ │ │ │ ├── vertexaiimagegenerator.mdx │ │ │ │ │ ├── vertexaiimageqa.mdx │ │ │ │ │ ├── vertexaitextgenerator.mdx │ │ │ │ │ ├── watsonxchatgenerator.mdx │ │ │ │ │ └── watsonxgenerator.mdx │ │ │ │ ├── generators.mdx │ │ │ │ ├── joiners/ │ │ │ │ │ ├── answerjoiner.mdx │ │ │ │ │ ├── branchjoiner.mdx │ │ │ │ │ ├── documentjoiner.mdx │ │ │ │ │ ├── listjoiner.mdx │ │ │ │ │ └── stringjoiner.mdx │ │ │ │ ├── joiners.mdx │ │ │ │ ├── preprocessors/ │ │ │ │ │ ├── chinesedocumentsplitter.mdx │ │ │ │ │ ├── csvdocumentcleaner.mdx │ │ │ │ │ ├── csvdocumentsplitter.mdx │ │ │ │ │ ├── documentcleaner.mdx │ │ │ │ │ ├── documentpreprocessor.mdx │ │ │ │ │ ├── documentsplitter.mdx │ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx │ │ │ │ │ ├── recursivesplitter.mdx │ │ │ │ │ └── textcleaner.mdx │ │ │ │ ├── preprocessors.mdx │ │ │ │ ├── rankers/ │ │ │ │ │ ├── amazonbedrockranker.mdx │ │ │ │ │ ├── choosing-the-right-ranker.mdx │ │ │ │ │ ├── cohereranker.mdx │ │ │ │ │ ├── external-integrations-rankers.mdx │ │ │ │ │ ├── fastembedranker.mdx │ │ │ │ │ ├── huggingfaceteiranker.mdx │ │ │ │ │ ├── jinaranker.mdx │ │ │ │ │ ├── lostinthemiddleranker.mdx │ │ │ │ │ ├── metafieldgroupingranker.mdx │ │ │ │ │ ├── metafieldranker.mdx │ │ │ │ │ ├── nvidiaranker.mdx │ │ │ │ │ ├── pyversityranker.mdx │ │ │ │ │ ├── sentencetransformersdiversityranker.mdx │ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx │ │ │ │ │ └── transformerssimilarityranker.mdx │ │ │ │ ├── rankers.mdx │ │ │ │ ├── readers/ │ │ │ │ │ └── extractivereader.mdx │ │ │ │ ├── readers.mdx │ │ │ │ ├── retrievers/ │ │ │ │ │ ├── astraretriever.mdx │ │ │ │ │ ├── automergingretriever.mdx │ │ │ │ │ ├── azureaisearchbm25retriever.mdx │ │ │ │ │ ├── azureaisearchembeddingretriever.mdx │ │ │ │ │ ├── azureaisearchhybridretriever.mdx │ │ │ │ │ ├── chromaembeddingretriever.mdx │ │ │ │ │ ├── chromaqueryretriever.mdx │ │ │ │ │ ├── elasticsearchbm25retriever.mdx │ │ │ │ │ ├── elasticsearchembeddingretriever.mdx │ │ │ │ │ ├── filterretriever.mdx │ │ │ │ │ ├── inmemorybm25retriever.mdx │ │ │ │ │ ├── inmemoryembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx │ │ │ │ │ ├── opensearchbm25retriever.mdx │ │ │ │ │ ├── opensearchembeddingretriever.mdx │ │ │ │ │ ├── opensearchhybridretriever.mdx │ │ │ │ │ ├── pgvectorembeddingretriever.mdx │ │ │ │ │ ├── pgvectorkeywordretriever.mdx │ │ │ │ │ ├── pineconedenseretriever.mdx │ │ │ │ │ ├── qdrantembeddingretriever.mdx │ │ │ │ │ ├── qdranthybridretriever.mdx │ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx │ │ │ │ │ ├── sentencewindowretrieval.mdx │ │ │ │ │ ├── snowflaketableretriever.mdx │ │ │ │ │ ├── weaviatebm25retriever.mdx │ │ │ │ │ ├── weaviateembeddingretriever.mdx │ │ │ │ │ └── weaviatehybridretriever.mdx │ │ │ │ ├── retrievers.mdx │ │ │ │ ├── routers/ │ │ │ │ │ ├── conditionalrouter.mdx │ │ │ │ │ ├── documentlengthrouter.mdx │ │ │ │ │ ├── documenttyperouter.mdx │ │ │ │ │ ├── filetyperouter.mdx │ │ │ │ │ ├── llmmessagesrouter.mdx │ │ │ │ │ ├── metadatarouter.mdx │ │ │ │ │ ├── textlanguagerouter.mdx │ │ │ │ │ ├── transformerstextrouter.mdx │ │ │ │ │ └── transformerszeroshottextrouter.mdx │ │ │ │ ├── routers.mdx │ │ │ │ ├── samplers/ │ │ │ │ │ └── toppsampler.mdx │ │ │ │ ├── tools/ │ │ │ │ │ └── toolinvoker.mdx │ │ │ │ ├── validators/ │ │ │ │ │ └── jsonschemavalidator.mdx │ │ │ │ ├── websearch/ │ │ │ │ │ ├── external-integrations-websearch.mdx │ │ │ │ │ ├── searchapiwebsearch.mdx │ │ │ │ │ └── serperdevwebsearch.mdx │ │ │ │ ├── websearch.mdx │ │ │ │ └── writers/ │ │ │ │ └── documentwriter.mdx │ │ │ └── tools/ │ │ │ ├── componenttool.mdx │ │ │ ├── mcptool.mdx │ │ │ ├── mcptoolset.mdx │ │ │ ├── pipelinetool.mdx │ │ │ ├── ready-made-tools/ │ │ │ │ ├── githubfileeditortool.mdx │ │ │ │ ├── githubissuecommentertool.mdx │ │ │ │ ├── githubissueviewertool.mdx │ │ │ │ ├── githubprcreatortool.mdx │ │ │ │ └── githubrepoviewertool.mdx │ │ │ ├── tool.mdx │ │ │ └── toolset.mdx │ │ ├── version-2.19/ │ │ │ ├── concepts/ │ │ │ │ ├── agents/ │ │ │ │ │ └── state.mdx │ │ │ │ ├── agents.mdx │ │ │ │ ├── components/ │ │ │ │ │ ├── custom-components.mdx │ │ │ │ │ └── supercomponents.mdx │ │ │ │ ├── components.mdx │ │ │ │ ├── concepts-overview.mdx │ │ │ │ ├── data-classes/ │ │ │ │ │ └── chatmessage.mdx │ │ │ │ ├── data-classes.mdx │ │ │ │ ├── device-management.mdx │ │ │ │ ├── document-store/ │ │ │ │ │ ├── choosing-a-document-store.mdx │ │ │ │ │ └── creating-custom-document-stores.mdx │ │ │ │ ├── document-store.mdx │ │ │ │ ├── experimental-package.mdx │ │ │ │ ├── integrations.mdx │ │ │ │ ├── jinja-templates.mdx │ │ │ │ ├── metadata-filtering.mdx │ │ │ │ ├── pipelines/ │ │ │ │ │ ├── asyncpipeline.mdx │ │ │ │ │ ├── creating-pipelines.mdx │ │ │ │ │ ├── debugging-pipelines.mdx │ │ │ │ │ ├── pipeline-breakpoints.mdx │ │ │ │ │ ├── pipeline-templates.mdx │ │ │ │ │ ├── serialization.mdx │ │ │ │ │ └── visualizing-pipelines.mdx │ │ │ │ ├── pipelines.mdx │ │ │ │ └── secret-management.mdx │ │ │ ├── development/ │ │ │ │ ├── deployment/ │ │ │ │ │ ├── docker.mdx │ │ │ │ │ ├── kubernetes.mdx │ │ │ │ │ └── openshift.mdx │ │ │ │ ├── deployment.mdx │ │ │ │ ├── enabling-gpu-acceleration.mdx │ │ │ │ ├── external-integrations-development.mdx │ │ │ │ ├── hayhooks.mdx │ │ │ │ ├── logging.mdx │ │ │ │ └── tracing.mdx │ │ │ ├── document-stores/ │ │ │ │ ├── astradocumentstore.mdx │ │ │ │ ├── azureaisearchdocumentstore.mdx │ │ │ │ ├── chromadocumentstore.mdx │ │ │ │ ├── elasticsearch-document-store.mdx │ │ │ │ ├── inmemorydocumentstore.mdx │ │ │ │ ├── mongodbatlasdocumentstore.mdx │ │ │ │ ├── opensearch-document-store.mdx │ │ │ │ ├── pgvectordocumentstore.mdx │ │ │ │ ├── pinecone-document-store.mdx │ │ │ │ ├── qdrant-document-store.mdx │ │ │ │ └── weaviatedocumentstore.mdx │ │ │ ├── intro.mdx │ │ │ ├── optimization/ │ │ │ │ ├── advanced-rag-techniques/ │ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx │ │ │ │ ├── advanced-rag-techniques.mdx │ │ │ │ ├── evaluation/ │ │ │ │ │ ├── model-based-evaluation.mdx │ │ │ │ │ └── statistical-evaluation.mdx │ │ │ │ └── evaluation.mdx │ │ │ ├── overview/ │ │ │ │ ├── breaking-change-policy.mdx │ │ │ │ ├── faq.mdx │ │ │ │ ├── get-started.mdx │ │ │ │ ├── installation.mdx │ │ │ │ ├── migration.mdx │ │ │ │ └── telemetry.mdx │ │ │ ├── pipeline-components/ │ │ │ │ ├── agents-1/ │ │ │ │ │ └── agent.mdx │ │ │ │ ├── audio/ │ │ │ │ │ ├── external-integrations-audio.mdx │ │ │ │ │ ├── localwhispertranscriber.mdx │ │ │ │ │ └── remotewhispertranscriber.mdx │ │ │ │ ├── audio.mdx │ │ │ │ ├── builders/ │ │ │ │ │ ├── answerbuilder.mdx │ │ │ │ │ ├── chatpromptbuilder.mdx │ │ │ │ │ └── promptbuilder.mdx │ │ │ │ ├── builders.mdx │ │ │ │ ├── caching/ │ │ │ │ │ └── cachechecker.mdx │ │ │ │ ├── classifiers/ │ │ │ │ │ ├── documentlanguageclassifier.mdx │ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx │ │ │ │ ├── classifiers.mdx │ │ │ │ ├── connectors/ │ │ │ │ │ ├── external-integrations-connectors.mdx │ │ │ │ │ ├── githubfileeditor.mdx │ │ │ │ │ ├── githubissuecommenter.mdx │ │ │ │ │ ├── githubissueviewer.mdx │ │ │ │ │ ├── githubprcreator.mdx │ │ │ │ │ ├── githubrepoforker.mdx │ │ │ │ │ ├── githubrepoviewer.mdx │ │ │ │ │ ├── jinareaderconnector.mdx │ │ │ │ │ ├── langfuseconnector.mdx │ │ │ │ │ ├── openapiconnector.mdx │ │ │ │ │ ├── openapiserviceconnector.mdx │ │ │ │ │ └── weaveconnector.mdx │ │ │ │ ├── connectors.mdx │ │ │ │ ├── converters/ │ │ │ │ │ ├── azureocrdocumentconverter.mdx │ │ │ │ │ ├── csvtodocument.mdx │ │ │ │ │ ├── documenttoimagecontent.mdx │ │ │ │ │ ├── docxtodocument.mdx │ │ │ │ │ ├── external-integrations-converters.mdx │ │ │ │ │ ├── htmltodocument.mdx │ │ │ │ │ ├── imagefiletodocument.mdx │ │ │ │ │ ├── imagefiletoimagecontent.mdx │ │ │ │ │ ├── jsonconverter.mdx │ │ │ │ │ ├── markdowntodocument.mdx │ │ │ │ │ ├── mistralocrdocumentconverter.mdx │ │ │ │ │ ├── msgtodocument.mdx │ │ │ │ │ ├── multifileconverter.mdx │ │ │ │ │ ├── openapiservicetofunctions.mdx │ │ │ │ │ ├── outputadapter.mdx │ │ │ │ │ ├── pdfminertodocument.mdx │ │ │ │ │ ├── pdftoimagecontent.mdx │ │ │ │ │ ├── pptxtodocument.mdx │ │ │ │ │ ├── pypdftodocument.mdx │ │ │ │ │ ├── textfiletodocument.mdx │ │ │ │ │ ├── tikadocumentconverter.mdx │ │ │ │ │ ├── unstructuredfileconverter.mdx │ │ │ │ │ └── xlsxtodocument.mdx │ │ │ │ ├── converters.mdx │ │ │ │ ├── downloaders/ │ │ │ │ │ └── s3downloader.mdx │ │ │ │ ├── embedders/ │ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx │ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx │ │ │ │ │ ├── amazonbedrocktextembedder.mdx │ │ │ │ │ ├── azureopenaidocumentembedder.mdx │ │ │ │ │ ├── azureopenaitextembedder.mdx │ │ │ │ │ ├── choosing-the-right-embedder.mdx │ │ │ │ │ ├── coheredocumentembedder.mdx │ │ │ │ │ ├── coheredocumentimageembedder.mdx │ │ │ │ │ ├── coheretextembedder.mdx │ │ │ │ │ ├── external-integrations-embedders.mdx │ │ │ │ │ ├── fastembeddocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsetextembedder.mdx │ │ │ │ │ ├── fastembedtextembedder.mdx │ │ │ │ │ ├── googlegenaidocumentembedder.mdx │ │ │ │ │ ├── googlegenaitextembedder.mdx │ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx │ │ │ │ │ ├── huggingfaceapitextembedder.mdx │ │ │ │ │ ├── jinadocumentembedder.mdx │ │ │ │ │ ├── jinadocumentimageembedder.mdx │ │ │ │ │ ├── jinatextembedder.mdx │ │ │ │ │ ├── mistraldocumentembedder.mdx │ │ │ │ │ ├── mistraltextembedder.mdx │ │ │ │ │ ├── nvidiadocumentembedder.mdx │ │ │ │ │ ├── nvidiatextembedder.mdx │ │ │ │ │ ├── ollamadocumentembedder.mdx │ │ │ │ │ ├── ollamatextembedder.mdx │ │ │ │ │ ├── openaidocumentembedder.mdx │ │ │ │ │ ├── openaitextembedder.mdx │ │ │ │ │ ├── optimumdocumentembedder.mdx │ │ │ │ │ ├── optimumtextembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx │ │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx │ │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx │ │ │ │ │ ├── sentencetransformerstextembedder.mdx │ │ │ │ │ ├── stackitdocumentembedder.mdx │ │ │ │ │ ├── stackittextembedder.mdx │ │ │ │ │ ├── vertexaidocumentembedder.mdx │ │ │ │ │ ├── vertexaitextembedder.mdx │ │ │ │ │ ├── watsonxdocumentembedder.mdx │ │ │ │ │ └── watsonxtextembedder.mdx │ │ │ │ ├── embedders.mdx │ │ │ │ ├── evaluators/ │ │ │ │ │ ├── answerexactmatchevaluator.mdx │ │ │ │ │ ├── contextrelevanceevaluator.mdx │ │ │ │ │ ├── deepevalevaluator.mdx │ │ │ │ │ ├── documentmapevaluator.mdx │ │ │ │ │ ├── documentmrrevaluator.mdx │ │ │ │ │ ├── documentndcgevaluator.mdx │ │ │ │ │ ├── documentrecallevaluator.mdx │ │ │ │ │ ├── external-integrations-evaluators.mdx │ │ │ │ │ ├── faithfulnessevaluator.mdx │ │ │ │ │ ├── llmevaluator.mdx │ │ │ │ │ ├── ragasevaluator.mdx │ │ │ │ │ └── sasevaluator.mdx │ │ │ │ ├── evaluators.mdx │ │ │ │ ├── extractors/ │ │ │ │ │ ├── llmdocumentcontentextractor.mdx │ │ │ │ │ ├── llmmetadataextractor.mdx │ │ │ │ │ └── namedentityextractor.mdx │ │ │ │ ├── extractors.mdx │ │ │ │ ├── fetchers/ │ │ │ │ │ ├── external-integrations-fetchers.mdx │ │ │ │ │ └── linkcontentfetcher.mdx │ │ │ │ ├── fetchers.mdx │ │ │ │ ├── generators/ │ │ │ │ │ ├── amazonbedrockchatgenerator.mdx │ │ │ │ │ ├── amazonbedrockgenerator.mdx │ │ │ │ │ ├── anthropicchatgenerator.mdx │ │ │ │ │ ├── anthropicgenerator.mdx │ │ │ │ │ ├── anthropicvertexchatgenerator.mdx │ │ │ │ │ ├── azureopenaichatgenerator.mdx │ │ │ │ │ ├── azureopenaigenerator.mdx │ │ │ │ │ ├── coherechatgenerator.mdx │ │ │ │ │ ├── coheregenerator.mdx │ │ │ │ │ ├── dalleimagegenerator.mdx │ │ │ │ │ ├── external-integrations-generators.mdx │ │ │ │ │ ├── fallbackchatgenerator.mdx │ │ │ │ │ ├── googleaigeminichatgenerator.mdx │ │ │ │ │ ├── googleaigeminigenerator.mdx │ │ │ │ │ ├── googlegenaichatgenerator.mdx │ │ │ │ │ ├── guides-to-generators/ │ │ │ │ │ │ ├── choosing-the-right-generator.mdx │ │ │ │ │ │ ├── function-calling.mdx │ │ │ │ │ │ └── generators-vs-chat-generators.mdx │ │ │ │ │ ├── huggingfaceapichatgenerator.mdx │ │ │ │ │ ├── huggingfaceapigenerator.mdx │ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx │ │ │ │ │ ├── huggingfacelocalgenerator.mdx │ │ │ │ │ ├── llamacppchatgenerator.mdx │ │ │ │ │ ├── llamacppgenerator.mdx │ │ │ │ │ ├── llamastackchatgenerator.mdx │ │ │ │ │ ├── metallamachatgenerator.mdx │ │ │ │ │ ├── mistralchatgenerator.mdx │ │ │ │ │ ├── nvidiachatgenerator.mdx │ │ │ │ │ ├── nvidiagenerator.mdx │ │ │ │ │ ├── ollamachatgenerator.mdx │ │ │ │ │ ├── ollamagenerator.mdx │ │ │ │ │ ├── openaichatgenerator.mdx │ │ │ │ │ ├── openaigenerator.mdx │ │ │ │ │ ├── openrouterchatgenerator.mdx │ │ │ │ │ ├── sagemakergenerator.mdx │ │ │ │ │ ├── stackitchatgenerator.mdx │ │ │ │ │ ├── togetheraichatgenerator.mdx │ │ │ │ │ ├── togetheraigenerator.mdx │ │ │ │ │ ├── vertexaicodegenerator.mdx │ │ │ │ │ ├── vertexaigeminichatgenerator.mdx │ │ │ │ │ ├── vertexaigeminigenerator.mdx │ │ │ │ │ ├── vertexaiimagecaptioner.mdx │ │ │ │ │ ├── vertexaiimagegenerator.mdx │ │ │ │ │ ├── vertexaiimageqa.mdx │ │ │ │ │ ├── vertexaitextgenerator.mdx │ │ │ │ │ ├── watsonxchatgenerator.mdx │ │ │ │ │ └── watsonxgenerator.mdx │ │ │ │ ├── generators.mdx │ │ │ │ ├── joiners/ │ │ │ │ │ ├── answerjoiner.mdx │ │ │ │ │ ├── branchjoiner.mdx │ │ │ │ │ ├── documentjoiner.mdx │ │ │ │ │ ├── listjoiner.mdx │ │ │ │ │ └── stringjoiner.mdx │ │ │ │ ├── joiners.mdx │ │ │ │ ├── preprocessors/ │ │ │ │ │ ├── chinesedocumentsplitter.mdx │ │ │ │ │ ├── csvdocumentcleaner.mdx │ │ │ │ │ ├── csvdocumentsplitter.mdx │ │ │ │ │ ├── documentcleaner.mdx │ │ │ │ │ ├── documentpreprocessor.mdx │ │ │ │ │ ├── documentsplitter.mdx │ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx │ │ │ │ │ ├── recursivesplitter.mdx │ │ │ │ │ └── textcleaner.mdx │ │ │ │ ├── preprocessors.mdx │ │ │ │ ├── rankers/ │ │ │ │ │ ├── amazonbedrockranker.mdx │ │ │ │ │ ├── choosing-the-right-ranker.mdx │ │ │ │ │ ├── cohereranker.mdx │ │ │ │ │ ├── external-integrations-rankers.mdx │ │ │ │ │ ├── fastembedranker.mdx │ │ │ │ │ ├── huggingfaceteiranker.mdx │ │ │ │ │ ├── jinaranker.mdx │ │ │ │ │ ├── lostinthemiddleranker.mdx │ │ │ │ │ ├── metafieldgroupingranker.mdx │ │ │ │ │ ├── metafieldranker.mdx │ │ │ │ │ ├── nvidiaranker.mdx │ │ │ │ │ ├── pyversityranker.mdx │ │ │ │ │ ├── sentencetransformersdiversityranker.mdx │ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx │ │ │ │ │ └── transformerssimilarityranker.mdx │ │ │ │ ├── rankers.mdx │ │ │ │ ├── readers/ │ │ │ │ │ └── extractivereader.mdx │ │ │ │ ├── readers.mdx │ │ │ │ ├── retrievers/ │ │ │ │ │ ├── astraretriever.mdx │ │ │ │ │ ├── automergingretriever.mdx │ │ │ │ │ ├── azureaisearchbm25retriever.mdx │ │ │ │ │ ├── azureaisearchembeddingretriever.mdx │ │ │ │ │ ├── azureaisearchhybridretriever.mdx │ │ │ │ │ ├── chromaembeddingretriever.mdx │ │ │ │ │ ├── chromaqueryretriever.mdx │ │ │ │ │ ├── elasticsearchbm25retriever.mdx │ │ │ │ │ ├── elasticsearchembeddingretriever.mdx │ │ │ │ │ ├── filterretriever.mdx │ │ │ │ │ ├── inmemorybm25retriever.mdx │ │ │ │ │ ├── inmemoryembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx │ │ │ │ │ ├── opensearchbm25retriever.mdx │ │ │ │ │ ├── opensearchembeddingretriever.mdx │ │ │ │ │ ├── opensearchhybridretriever.mdx │ │ │ │ │ ├── pgvectorembeddingretriever.mdx │ │ │ │ │ ├── pgvectorkeywordretriever.mdx │ │ │ │ │ ├── pineconedenseretriever.mdx │ │ │ │ │ ├── qdrantembeddingretriever.mdx │ │ │ │ │ ├── qdranthybridretriever.mdx │ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx │ │ │ │ │ ├── sentencewindowretrieval.mdx │ │ │ │ │ ├── snowflaketableretriever.mdx │ │ │ │ │ ├── weaviatebm25retriever.mdx │ │ │ │ │ ├── weaviateembeddingretriever.mdx │ │ │ │ │ └── weaviatehybridretriever.mdx │ │ │ │ ├── retrievers.mdx │ │ │ │ ├── routers/ │ │ │ │ │ ├── conditionalrouter.mdx │ │ │ │ │ ├── documentlengthrouter.mdx │ │ │ │ │ ├── documenttyperouter.mdx │ │ │ │ │ ├── filetyperouter.mdx │ │ │ │ │ ├── llmmessagesrouter.mdx │ │ │ │ │ ├── metadatarouter.mdx │ │ │ │ │ ├── textlanguagerouter.mdx │ │ │ │ │ ├── transformerstextrouter.mdx │ │ │ │ │ └── transformerszeroshottextrouter.mdx │ │ │ │ ├── routers.mdx │ │ │ │ ├── samplers/ │ │ │ │ │ └── toppsampler.mdx │ │ │ │ ├── tools/ │ │ │ │ │ └── toolinvoker.mdx │ │ │ │ ├── validators/ │ │ │ │ │ └── jsonschemavalidator.mdx │ │ │ │ ├── websearch/ │ │ │ │ │ ├── external-integrations-websearch.mdx │ │ │ │ │ ├── searchapiwebsearch.mdx │ │ │ │ │ └── serperdevwebsearch.mdx │ │ │ │ ├── websearch.mdx │ │ │ │ └── writers/ │ │ │ │ └── documentwriter.mdx │ │ │ └── tools/ │ │ │ ├── componenttool.mdx │ │ │ ├── mcptool.mdx │ │ │ ├── mcptoolset.mdx │ │ │ ├── pipelinetool.mdx │ │ │ ├── ready-made-tools/ │ │ │ │ ├── githubfileeditortool.mdx │ │ │ │ ├── githubissuecommentertool.mdx │ │ │ │ ├── githubissueviewertool.mdx │ │ │ │ ├── githubprcreatortool.mdx │ │ │ │ └── githubrepoviewertool.mdx │ │ │ ├── tool.mdx │ │ │ └── toolset.mdx │ │ ├── version-2.20/ │ │ │ ├── _templates/ │ │ │ │ ├── component-template.mdx │ │ │ │ └── document-store-template.mdx │ │ │ ├── concepts/ │ │ │ │ ├── agents/ │ │ │ │ │ └── state.mdx │ │ │ │ ├── agents.mdx │ │ │ │ ├── components/ │ │ │ │ │ ├── custom-components.mdx │ │ │ │ │ └── supercomponents.mdx │ │ │ │ ├── components.mdx │ │ │ │ ├── concepts-overview.mdx │ │ │ │ ├── data-classes/ │ │ │ │ │ └── chatmessage.mdx │ │ │ │ ├── data-classes.mdx │ │ │ │ ├── device-management.mdx │ │ │ │ ├── document-store/ │ │ │ │ │ ├── choosing-a-document-store.mdx │ │ │ │ │ └── creating-custom-document-stores.mdx │ │ │ │ ├── document-store.mdx │ │ │ │ ├── experimental-package.mdx │ │ │ │ ├── integrations.mdx │ │ │ │ ├── jinja-templates.mdx │ │ │ │ ├── metadata-filtering.mdx │ │ │ │ ├── pipelines/ │ │ │ │ │ ├── asyncpipeline.mdx │ │ │ │ │ ├── creating-pipelines.mdx │ │ │ │ │ ├── debugging-pipelines.mdx │ │ │ │ │ ├── pipeline-breakpoints.mdx │ │ │ │ │ ├── pipeline-loops.mdx │ │ │ │ │ ├── pipeline-templates.mdx │ │ │ │ │ ├── serialization.mdx │ │ │ │ │ └── visualizing-pipelines.mdx │ │ │ │ ├── pipelines.mdx │ │ │ │ └── secret-management.mdx │ │ │ ├── development/ │ │ │ │ ├── deployment/ │ │ │ │ │ ├── docker.mdx │ │ │ │ │ ├── kubernetes.mdx │ │ │ │ │ └── openshift.mdx │ │ │ │ ├── deployment.mdx │ │ │ │ ├── enabling-gpu-acceleration.mdx │ │ │ │ ├── external-integrations-development.mdx │ │ │ │ ├── hayhooks.mdx │ │ │ │ ├── logging.mdx │ │ │ │ └── tracing.mdx │ │ │ ├── document-stores/ │ │ │ │ ├── astradocumentstore.mdx │ │ │ │ ├── azureaisearchdocumentstore.mdx │ │ │ │ ├── chromadocumentstore.mdx │ │ │ │ ├── elasticsearch-document-store.mdx │ │ │ │ ├── inmemorydocumentstore.mdx │ │ │ │ ├── mongodbatlasdocumentstore.mdx │ │ │ │ ├── opensearch-document-store.mdx │ │ │ │ ├── pgvectordocumentstore.mdx │ │ │ │ ├── pinecone-document-store.mdx │ │ │ │ ├── qdrant-document-store.mdx │ │ │ │ └── weaviatedocumentstore.mdx │ │ │ ├── intro.mdx │ │ │ ├── optimization/ │ │ │ │ ├── advanced-rag-techniques/ │ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx │ │ │ │ ├── advanced-rag-techniques.mdx │ │ │ │ ├── evaluation/ │ │ │ │ │ ├── model-based-evaluation.mdx │ │ │ │ │ └── statistical-evaluation.mdx │ │ │ │ └── evaluation.mdx │ │ │ ├── overview/ │ │ │ │ ├── breaking-change-policy.mdx │ │ │ │ ├── faq.mdx │ │ │ │ ├── get-started.mdx │ │ │ │ ├── installation.mdx │ │ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx │ │ │ │ ├── migration.mdx │ │ │ │ └── telemetry.mdx │ │ │ ├── pipeline-components/ │ │ │ │ ├── agents-1/ │ │ │ │ │ └── agent.mdx │ │ │ │ ├── audio/ │ │ │ │ │ ├── external-integrations-audio.mdx │ │ │ │ │ ├── localwhispertranscriber.mdx │ │ │ │ │ └── remotewhispertranscriber.mdx │ │ │ │ ├── audio.mdx │ │ │ │ ├── builders/ │ │ │ │ │ ├── answerbuilder.mdx │ │ │ │ │ ├── chatpromptbuilder.mdx │ │ │ │ │ └── promptbuilder.mdx │ │ │ │ ├── builders.mdx │ │ │ │ ├── caching/ │ │ │ │ │ └── cachechecker.mdx │ │ │ │ ├── classifiers/ │ │ │ │ │ ├── documentlanguageclassifier.mdx │ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx │ │ │ │ ├── classifiers.mdx │ │ │ │ ├── connectors/ │ │ │ │ │ ├── external-integrations-connectors.mdx │ │ │ │ │ ├── githubfileeditor.mdx │ │ │ │ │ ├── githubissuecommenter.mdx │ │ │ │ │ ├── githubissueviewer.mdx │ │ │ │ │ ├── githubprcreator.mdx │ │ │ │ │ ├── githubrepoforker.mdx │ │ │ │ │ ├── githubrepoviewer.mdx │ │ │ │ │ ├── jinareaderconnector.mdx │ │ │ │ │ ├── langfuseconnector.mdx │ │ │ │ │ ├── openapiconnector.mdx │ │ │ │ │ ├── openapiserviceconnector.mdx │ │ │ │ │ └── weaveconnector.mdx │ │ │ │ ├── connectors.mdx │ │ │ │ ├── converters/ │ │ │ │ │ ├── azureocrdocumentconverter.mdx │ │ │ │ │ ├── csvtodocument.mdx │ │ │ │ │ ├── documenttoimagecontent.mdx │ │ │ │ │ ├── docxtodocument.mdx │ │ │ │ │ ├── external-integrations-converters.mdx │ │ │ │ │ ├── htmltodocument.mdx │ │ │ │ │ ├── imagefiletodocument.mdx │ │ │ │ │ ├── imagefiletoimagecontent.mdx │ │ │ │ │ ├── jsonconverter.mdx │ │ │ │ │ ├── markdowntodocument.mdx │ │ │ │ │ ├── mistralocrdocumentconverter.mdx │ │ │ │ │ ├── msgtodocument.mdx │ │ │ │ │ ├── multifileconverter.mdx │ │ │ │ │ ├── openapiservicetofunctions.mdx │ │ │ │ │ ├── outputadapter.mdx │ │ │ │ │ ├── pdfminertodocument.mdx │ │ │ │ │ ├── pdftoimagecontent.mdx │ │ │ │ │ ├── pptxtodocument.mdx │ │ │ │ │ ├── pypdftodocument.mdx │ │ │ │ │ ├── textfiletodocument.mdx │ │ │ │ │ ├── tikadocumentconverter.mdx │ │ │ │ │ ├── unstructuredfileconverter.mdx │ │ │ │ │ └── xlsxtodocument.mdx │ │ │ │ ├── converters.mdx │ │ │ │ ├── downloaders/ │ │ │ │ │ └── s3downloader.mdx │ │ │ │ ├── embedders/ │ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx │ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx │ │ │ │ │ ├── amazonbedrocktextembedder.mdx │ │ │ │ │ ├── azureopenaidocumentembedder.mdx │ │ │ │ │ ├── azureopenaitextembedder.mdx │ │ │ │ │ ├── choosing-the-right-embedder.mdx │ │ │ │ │ ├── coheredocumentembedder.mdx │ │ │ │ │ ├── coheredocumentimageembedder.mdx │ │ │ │ │ ├── coheretextembedder.mdx │ │ │ │ │ ├── external-integrations-embedders.mdx │ │ │ │ │ ├── fastembeddocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsetextembedder.mdx │ │ │ │ │ ├── fastembedtextembedder.mdx │ │ │ │ │ ├── googlegenaidocumentembedder.mdx │ │ │ │ │ ├── googlegenaitextembedder.mdx │ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx │ │ │ │ │ ├── huggingfaceapitextembedder.mdx │ │ │ │ │ ├── jinadocumentembedder.mdx │ │ │ │ │ ├── jinadocumentimageembedder.mdx │ │ │ │ │ ├── jinatextembedder.mdx │ │ │ │ │ ├── mistraldocumentembedder.mdx │ │ │ │ │ ├── mistraltextembedder.mdx │ │ │ │ │ ├── nvidiadocumentembedder.mdx │ │ │ │ │ ├── nvidiatextembedder.mdx │ │ │ │ │ ├── ollamadocumentembedder.mdx │ │ │ │ │ ├── ollamatextembedder.mdx │ │ │ │ │ ├── openaidocumentembedder.mdx │ │ │ │ │ ├── openaitextembedder.mdx │ │ │ │ │ ├── optimumdocumentembedder.mdx │ │ │ │ │ ├── optimumtextembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx │ │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx │ │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx │ │ │ │ │ ├── sentencetransformerstextembedder.mdx │ │ │ │ │ ├── stackitdocumentembedder.mdx │ │ │ │ │ ├── stackittextembedder.mdx │ │ │ │ │ ├── vertexaidocumentembedder.mdx │ │ │ │ │ ├── vertexaitextembedder.mdx │ │ │ │ │ ├── watsonxdocumentembedder.mdx │ │ │ │ │ └── watsonxtextembedder.mdx │ │ │ │ ├── embedders.mdx │ │ │ │ ├── evaluators/ │ │ │ │ │ ├── answerexactmatchevaluator.mdx │ │ │ │ │ ├── contextrelevanceevaluator.mdx │ │ │ │ │ ├── deepevalevaluator.mdx │ │ │ │ │ ├── documentmapevaluator.mdx │ │ │ │ │ ├── documentmrrevaluator.mdx │ │ │ │ │ ├── documentndcgevaluator.mdx │ │ │ │ │ ├── documentrecallevaluator.mdx │ │ │ │ │ ├── external-integrations-evaluators.mdx │ │ │ │ │ ├── faithfulnessevaluator.mdx │ │ │ │ │ ├── llmevaluator.mdx │ │ │ │ │ ├── ragasevaluator.mdx │ │ │ │ │ └── sasevaluator.mdx │ │ │ │ ├── evaluators.mdx │ │ │ │ ├── extractors/ │ │ │ │ │ ├── llmdocumentcontentextractor.mdx │ │ │ │ │ ├── llmmetadataextractor.mdx │ │ │ │ │ ├── namedentityextractor.mdx │ │ │ │ │ └── regextextextractor.mdx │ │ │ │ ├── extractors.mdx │ │ │ │ ├── fetchers/ │ │ │ │ │ ├── external-integrations-fetchers.mdx │ │ │ │ │ └── linkcontentfetcher.mdx │ │ │ │ ├── fetchers.mdx │ │ │ │ ├── generators/ │ │ │ │ │ ├── aimllapichatgenerator.mdx │ │ │ │ │ ├── amazonbedrockchatgenerator.mdx │ │ │ │ │ ├── amazonbedrockgenerator.mdx │ │ │ │ │ ├── anthropicchatgenerator.mdx │ │ │ │ │ ├── anthropicgenerator.mdx │ │ │ │ │ ├── anthropicvertexchatgenerator.mdx │ │ │ │ │ ├── azureopenaichatgenerator.mdx │ │ │ │ │ ├── azureopenaigenerator.mdx │ │ │ │ │ ├── azureopenairesponseschatgenerator.mdx │ │ │ │ │ ├── coherechatgenerator.mdx │ │ │ │ │ ├── coheregenerator.mdx │ │ │ │ │ ├── cometapichatgenerator.mdx │ │ │ │ │ ├── dalleimagegenerator.mdx │ │ │ │ │ ├── external-integrations-generators.mdx │ │ │ │ │ ├── fallbackchatgenerator.mdx │ │ │ │ │ ├── googleaigeminichatgenerator.mdx │ │ │ │ │ ├── googleaigeminigenerator.mdx │ │ │ │ │ ├── googlegenaichatgenerator.mdx │ │ │ │ │ ├── guides-to-generators/ │ │ │ │ │ │ ├── choosing-the-right-generator.mdx │ │ │ │ │ │ ├── function-calling.mdx │ │ │ │ │ │ └── generators-vs-chat-generators.mdx │ │ │ │ │ ├── huggingfaceapichatgenerator.mdx │ │ │ │ │ ├── huggingfaceapigenerator.mdx │ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx │ │ │ │ │ ├── huggingfacelocalgenerator.mdx │ │ │ │ │ ├── llamacppchatgenerator.mdx │ │ │ │ │ ├── llamacppgenerator.mdx │ │ │ │ │ ├── llamastackchatgenerator.mdx │ │ │ │ │ ├── metallamachatgenerator.mdx │ │ │ │ │ ├── mistralchatgenerator.mdx │ │ │ │ │ ├── nvidiachatgenerator.mdx │ │ │ │ │ ├── nvidiagenerator.mdx │ │ │ │ │ ├── ollamachatgenerator.mdx │ │ │ │ │ ├── ollamagenerator.mdx │ │ │ │ │ ├── openaichatgenerator.mdx │ │ │ │ │ ├── openaigenerator.mdx │ │ │ │ │ ├── openairesponseschatgenerator.mdx │ │ │ │ │ ├── openrouterchatgenerator.mdx │ │ │ │ │ ├── sagemakergenerator.mdx │ │ │ │ │ ├── stackitchatgenerator.mdx │ │ │ │ │ ├── togetheraichatgenerator.mdx │ │ │ │ │ ├── togetheraigenerator.mdx │ │ │ │ │ ├── vertexaicodegenerator.mdx │ │ │ │ │ ├── vertexaigeminichatgenerator.mdx │ │ │ │ │ ├── vertexaigeminigenerator.mdx │ │ │ │ │ ├── vertexaiimagecaptioner.mdx │ │ │ │ │ ├── vertexaiimagegenerator.mdx │ │ │ │ │ ├── vertexaiimageqa.mdx │ │ │ │ │ ├── vertexaitextgenerator.mdx │ │ │ │ │ ├── watsonxchatgenerator.mdx │ │ │ │ │ └── watsonxgenerator.mdx │ │ │ │ ├── generators.mdx │ │ │ │ ├── joiners/ │ │ │ │ │ ├── answerjoiner.mdx │ │ │ │ │ ├── branchjoiner.mdx │ │ │ │ │ ├── documentjoiner.mdx │ │ │ │ │ ├── listjoiner.mdx │ │ │ │ │ └── stringjoiner.mdx │ │ │ │ ├── joiners.mdx │ │ │ │ ├── preprocessors/ │ │ │ │ │ ├── chinesedocumentsplitter.mdx │ │ │ │ │ ├── csvdocumentcleaner.mdx │ │ │ │ │ ├── csvdocumentsplitter.mdx │ │ │ │ │ ├── documentcleaner.mdx │ │ │ │ │ ├── documentpreprocessor.mdx │ │ │ │ │ ├── documentsplitter.mdx │ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx │ │ │ │ │ ├── recursivesplitter.mdx │ │ │ │ │ └── textcleaner.mdx │ │ │ │ ├── preprocessors.mdx │ │ │ │ ├── rankers/ │ │ │ │ │ ├── amazonbedrockranker.mdx │ │ │ │ │ ├── choosing-the-right-ranker.mdx │ │ │ │ │ ├── cohereranker.mdx │ │ │ │ │ ├── external-integrations-rankers.mdx │ │ │ │ │ ├── fastembedranker.mdx │ │ │ │ │ ├── huggingfaceteiranker.mdx │ │ │ │ │ ├── jinaranker.mdx │ │ │ │ │ ├── lostinthemiddleranker.mdx │ │ │ │ │ ├── metafieldgroupingranker.mdx │ │ │ │ │ ├── metafieldranker.mdx │ │ │ │ │ ├── nvidiaranker.mdx │ │ │ │ │ ├── pyversityranker.mdx │ │ │ │ │ ├── sentencetransformersdiversityranker.mdx │ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx │ │ │ │ │ └── transformerssimilarityranker.mdx │ │ │ │ ├── rankers.mdx │ │ │ │ ├── readers/ │ │ │ │ │ └── extractivereader.mdx │ │ │ │ ├── readers.mdx │ │ │ │ ├── retrievers/ │ │ │ │ │ ├── astraretriever.mdx │ │ │ │ │ ├── automergingretriever.mdx │ │ │ │ │ ├── azureaisearchbm25retriever.mdx │ │ │ │ │ ├── azureaisearchembeddingretriever.mdx │ │ │ │ │ ├── azureaisearchhybridretriever.mdx │ │ │ │ │ ├── chromaembeddingretriever.mdx │ │ │ │ │ ├── chromaqueryretriever.mdx │ │ │ │ │ ├── elasticsearchbm25retriever.mdx │ │ │ │ │ ├── elasticsearchembeddingretriever.mdx │ │ │ │ │ ├── filterretriever.mdx │ │ │ │ │ ├── inmemorybm25retriever.mdx │ │ │ │ │ ├── inmemoryembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx │ │ │ │ │ ├── opensearchbm25retriever.mdx │ │ │ │ │ ├── opensearchembeddingretriever.mdx │ │ │ │ │ ├── opensearchhybridretriever.mdx │ │ │ │ │ ├── pgvectorembeddingretriever.mdx │ │ │ │ │ ├── pgvectorkeywordretriever.mdx │ │ │ │ │ ├── pineconedenseretriever.mdx │ │ │ │ │ ├── qdrantembeddingretriever.mdx │ │ │ │ │ ├── qdranthybridretriever.mdx │ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx │ │ │ │ │ ├── sentencewindowretrieval.mdx │ │ │ │ │ ├── snowflaketableretriever.mdx │ │ │ │ │ ├── weaviatebm25retriever.mdx │ │ │ │ │ ├── weaviateembeddingretriever.mdx │ │ │ │ │ └── weaviatehybridretriever.mdx │ │ │ │ ├── retrievers.mdx │ │ │ │ ├── routers/ │ │ │ │ │ ├── conditionalrouter.mdx │ │ │ │ │ ├── documentlengthrouter.mdx │ │ │ │ │ ├── documenttyperouter.mdx │ │ │ │ │ ├── filetyperouter.mdx │ │ │ │ │ ├── llmmessagesrouter.mdx │ │ │ │ │ ├── metadatarouter.mdx │ │ │ │ │ ├── textlanguagerouter.mdx │ │ │ │ │ ├── transformerstextrouter.mdx │ │ │ │ │ └── transformerszeroshottextrouter.mdx │ │ │ │ ├── routers.mdx │ │ │ │ ├── samplers/ │ │ │ │ │ └── toppsampler.mdx │ │ │ │ ├── tools/ │ │ │ │ │ └── toolinvoker.mdx │ │ │ │ ├── validators/ │ │ │ │ │ └── jsonschemavalidator.mdx │ │ │ │ ├── websearch/ │ │ │ │ │ ├── external-integrations-websearch.mdx │ │ │ │ │ ├── searchapiwebsearch.mdx │ │ │ │ │ └── serperdevwebsearch.mdx │ │ │ │ ├── websearch.mdx │ │ │ │ └── writers/ │ │ │ │ └── documentwriter.mdx │ │ │ └── tools/ │ │ │ ├── componenttool.mdx │ │ │ ├── mcptool.mdx │ │ │ ├── mcptoolset.mdx │ │ │ ├── pipelinetool.mdx │ │ │ ├── ready-made-tools/ │ │ │ │ ├── githubfileeditortool.mdx │ │ │ │ ├── githubissuecommentertool.mdx │ │ │ │ ├── githubissueviewertool.mdx │ │ │ │ ├── githubprcreatortool.mdx │ │ │ │ └── githubrepoviewertool.mdx │ │ │ ├── tool.mdx │ │ │ └── toolset.mdx │ │ ├── version-2.21/ │ │ │ ├── _templates/ │ │ │ │ ├── component-template.mdx │ │ │ │ └── document-store-template.mdx │ │ │ ├── concepts/ │ │ │ │ ├── agents/ │ │ │ │ │ └── state.mdx │ │ │ │ ├── agents.mdx │ │ │ │ ├── components/ │ │ │ │ │ ├── custom-components.mdx │ │ │ │ │ └── supercomponents.mdx │ │ │ │ ├── components.mdx │ │ │ │ ├── concepts-overview.mdx │ │ │ │ ├── data-classes/ │ │ │ │ │ └── chatmessage.mdx │ │ │ │ ├── data-classes.mdx │ │ │ │ ├── device-management.mdx │ │ │ │ ├── document-store/ │ │ │ │ │ ├── choosing-a-document-store.mdx │ │ │ │ │ └── creating-custom-document-stores.mdx │ │ │ │ ├── document-store.mdx │ │ │ │ ├── experimental-package.mdx │ │ │ │ ├── integrations.mdx │ │ │ │ ├── jinja-templates.mdx │ │ │ │ ├── metadata-filtering.mdx │ │ │ │ ├── pipelines/ │ │ │ │ │ ├── asyncpipeline.mdx │ │ │ │ │ ├── creating-pipelines.mdx │ │ │ │ │ ├── debugging-pipelines.mdx │ │ │ │ │ ├── pipeline-breakpoints.mdx │ │ │ │ │ ├── pipeline-loops.mdx │ │ │ │ │ ├── pipeline-templates.mdx │ │ │ │ │ ├── serialization.mdx │ │ │ │ │ └── visualizing-pipelines.mdx │ │ │ │ ├── pipelines.mdx │ │ │ │ └── secret-management.mdx │ │ │ ├── development/ │ │ │ │ ├── deployment/ │ │ │ │ │ ├── docker.mdx │ │ │ │ │ ├── kubernetes.mdx │ │ │ │ │ └── openshift.mdx │ │ │ │ ├── deployment.mdx │ │ │ │ ├── enabling-gpu-acceleration.mdx │ │ │ │ ├── external-integrations-development.mdx │ │ │ │ ├── hayhooks.mdx │ │ │ │ ├── logging.mdx │ │ │ │ └── tracing.mdx │ │ │ ├── document-stores/ │ │ │ │ ├── astradocumentstore.mdx │ │ │ │ ├── azureaisearchdocumentstore.mdx │ │ │ │ ├── chromadocumentstore.mdx │ │ │ │ ├── elasticsearch-document-store.mdx │ │ │ │ ├── inmemorydocumentstore.mdx │ │ │ │ ├── mongodbatlasdocumentstore.mdx │ │ │ │ ├── opensearch-document-store.mdx │ │ │ │ ├── pgvectordocumentstore.mdx │ │ │ │ ├── pinecone-document-store.mdx │ │ │ │ ├── qdrant-document-store.mdx │ │ │ │ └── weaviatedocumentstore.mdx │ │ │ ├── intro.mdx │ │ │ ├── optimization/ │ │ │ │ ├── advanced-rag-techniques/ │ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx │ │ │ │ ├── advanced-rag-techniques.mdx │ │ │ │ ├── evaluation/ │ │ │ │ │ ├── model-based-evaluation.mdx │ │ │ │ │ └── statistical-evaluation.mdx │ │ │ │ └── evaluation.mdx │ │ │ ├── overview/ │ │ │ │ ├── breaking-change-policy.mdx │ │ │ │ ├── faq.mdx │ │ │ │ ├── get-started.mdx │ │ │ │ ├── installation.mdx │ │ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx │ │ │ │ ├── migration.mdx │ │ │ │ └── telemetry.mdx │ │ │ ├── pipeline-components/ │ │ │ │ ├── agents-1/ │ │ │ │ │ └── agent.mdx │ │ │ │ ├── audio/ │ │ │ │ │ ├── external-integrations-audio.mdx │ │ │ │ │ ├── localwhispertranscriber.mdx │ │ │ │ │ └── remotewhispertranscriber.mdx │ │ │ │ ├── audio.mdx │ │ │ │ ├── builders/ │ │ │ │ │ ├── answerbuilder.mdx │ │ │ │ │ ├── chatpromptbuilder.mdx │ │ │ │ │ └── promptbuilder.mdx │ │ │ │ ├── builders.mdx │ │ │ │ ├── caching/ │ │ │ │ │ └── cachechecker.mdx │ │ │ │ ├── classifiers/ │ │ │ │ │ ├── documentlanguageclassifier.mdx │ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx │ │ │ │ ├── classifiers.mdx │ │ │ │ ├── connectors/ │ │ │ │ │ ├── external-integrations-connectors.mdx │ │ │ │ │ ├── githubfileeditor.mdx │ │ │ │ │ ├── githubissuecommenter.mdx │ │ │ │ │ ├── githubissueviewer.mdx │ │ │ │ │ ├── githubprcreator.mdx │ │ │ │ │ ├── githubrepoforker.mdx │ │ │ │ │ ├── githubrepoviewer.mdx │ │ │ │ │ ├── jinareaderconnector.mdx │ │ │ │ │ ├── langfuseconnector.mdx │ │ │ │ │ ├── openapiconnector.mdx │ │ │ │ │ ├── openapiserviceconnector.mdx │ │ │ │ │ └── weaveconnector.mdx │ │ │ │ ├── connectors.mdx │ │ │ │ ├── converters/ │ │ │ │ │ ├── azureocrdocumentconverter.mdx │ │ │ │ │ ├── csvtodocument.mdx │ │ │ │ │ ├── documenttoimagecontent.mdx │ │ │ │ │ ├── docxtodocument.mdx │ │ │ │ │ ├── external-integrations-converters.mdx │ │ │ │ │ ├── htmltodocument.mdx │ │ │ │ │ ├── imagefiletodocument.mdx │ │ │ │ │ ├── imagefiletoimagecontent.mdx │ │ │ │ │ ├── jsonconverter.mdx │ │ │ │ │ ├── markdowntodocument.mdx │ │ │ │ │ ├── mistralocrdocumentconverter.mdx │ │ │ │ │ ├── msgtodocument.mdx │ │ │ │ │ ├── multifileconverter.mdx │ │ │ │ │ ├── openapiservicetofunctions.mdx │ │ │ │ │ ├── outputadapter.mdx │ │ │ │ │ ├── paddleocrvldocumentconverter.mdx │ │ │ │ │ ├── pdfminertodocument.mdx │ │ │ │ │ ├── pdftoimagecontent.mdx │ │ │ │ │ ├── pptxtodocument.mdx │ │ │ │ │ ├── pypdftodocument.mdx │ │ │ │ │ ├── textfiletodocument.mdx │ │ │ │ │ ├── tikadocumentconverter.mdx │ │ │ │ │ ├── unstructuredfileconverter.mdx │ │ │ │ │ └── xlsxtodocument.mdx │ │ │ │ ├── converters.mdx │ │ │ │ ├── downloaders/ │ │ │ │ │ └── s3downloader.mdx │ │ │ │ ├── embedders/ │ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx │ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx │ │ │ │ │ ├── amazonbedrocktextembedder.mdx │ │ │ │ │ ├── azureopenaidocumentembedder.mdx │ │ │ │ │ ├── azureopenaitextembedder.mdx │ │ │ │ │ ├── choosing-the-right-embedder.mdx │ │ │ │ │ ├── coheredocumentembedder.mdx │ │ │ │ │ ├── coheredocumentimageembedder.mdx │ │ │ │ │ ├── coheretextembedder.mdx │ │ │ │ │ ├── external-integrations-embedders.mdx │ │ │ │ │ ├── fastembeddocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsetextembedder.mdx │ │ │ │ │ ├── fastembedtextembedder.mdx │ │ │ │ │ ├── googlegenaidocumentembedder.mdx │ │ │ │ │ ├── googlegenaitextembedder.mdx │ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx │ │ │ │ │ ├── huggingfaceapitextembedder.mdx │ │ │ │ │ ├── jinadocumentembedder.mdx │ │ │ │ │ ├── jinadocumentimageembedder.mdx │ │ │ │ │ ├── jinatextembedder.mdx │ │ │ │ │ ├── mistraldocumentembedder.mdx │ │ │ │ │ ├── mistraltextembedder.mdx │ │ │ │ │ ├── nvidiadocumentembedder.mdx │ │ │ │ │ ├── nvidiatextembedder.mdx │ │ │ │ │ ├── ollamadocumentembedder.mdx │ │ │ │ │ ├── ollamatextembedder.mdx │ │ │ │ │ ├── openaidocumentembedder.mdx │ │ │ │ │ ├── openaitextembedder.mdx │ │ │ │ │ ├── optimumdocumentembedder.mdx │ │ │ │ │ ├── optimumtextembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx │ │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx │ │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx │ │ │ │ │ ├── sentencetransformerstextembedder.mdx │ │ │ │ │ ├── stackitdocumentembedder.mdx │ │ │ │ │ ├── stackittextembedder.mdx │ │ │ │ │ ├── vertexaidocumentembedder.mdx │ │ │ │ │ ├── vertexaitextembedder.mdx │ │ │ │ │ ├── watsonxdocumentembedder.mdx │ │ │ │ │ └── watsonxtextembedder.mdx │ │ │ │ ├── embedders.mdx │ │ │ │ ├── evaluators/ │ │ │ │ │ ├── answerexactmatchevaluator.mdx │ │ │ │ │ ├── contextrelevanceevaluator.mdx │ │ │ │ │ ├── deepevalevaluator.mdx │ │ │ │ │ ├── documentmapevaluator.mdx │ │ │ │ │ ├── documentmrrevaluator.mdx │ │ │ │ │ ├── documentndcgevaluator.mdx │ │ │ │ │ ├── documentrecallevaluator.mdx │ │ │ │ │ ├── external-integrations-evaluators.mdx │ │ │ │ │ ├── faithfulnessevaluator.mdx │ │ │ │ │ ├── llmevaluator.mdx │ │ │ │ │ ├── ragasevaluator.mdx │ │ │ │ │ └── sasevaluator.mdx │ │ │ │ ├── evaluators.mdx │ │ │ │ ├── extractors/ │ │ │ │ │ ├── llmdocumentcontentextractor.mdx │ │ │ │ │ ├── llmmetadataextractor.mdx │ │ │ │ │ ├── namedentityextractor.mdx │ │ │ │ │ └── regextextextractor.mdx │ │ │ │ ├── extractors.mdx │ │ │ │ ├── fetchers/ │ │ │ │ │ ├── external-integrations-fetchers.mdx │ │ │ │ │ └── linkcontentfetcher.mdx │ │ │ │ ├── fetchers.mdx │ │ │ │ ├── generators/ │ │ │ │ │ ├── aimllapichatgenerator.mdx │ │ │ │ │ ├── amazonbedrockchatgenerator.mdx │ │ │ │ │ ├── amazonbedrockgenerator.mdx │ │ │ │ │ ├── anthropicchatgenerator.mdx │ │ │ │ │ ├── anthropicgenerator.mdx │ │ │ │ │ ├── anthropicvertexchatgenerator.mdx │ │ │ │ │ ├── azureopenaichatgenerator.mdx │ │ │ │ │ ├── azureopenaigenerator.mdx │ │ │ │ │ ├── azureopenairesponseschatgenerator.mdx │ │ │ │ │ ├── coherechatgenerator.mdx │ │ │ │ │ ├── coheregenerator.mdx │ │ │ │ │ ├── cometapichatgenerator.mdx │ │ │ │ │ ├── dalleimagegenerator.mdx │ │ │ │ │ ├── external-integrations-generators.mdx │ │ │ │ │ ├── fallbackchatgenerator.mdx │ │ │ │ │ ├── googleaigeminichatgenerator.mdx │ │ │ │ │ ├── googleaigeminigenerator.mdx │ │ │ │ │ ├── googlegenaichatgenerator.mdx │ │ │ │ │ ├── guides-to-generators/ │ │ │ │ │ │ ├── choosing-the-right-generator.mdx │ │ │ │ │ │ ├── function-calling.mdx │ │ │ │ │ │ └── generators-vs-chat-generators.mdx │ │ │ │ │ ├── huggingfaceapichatgenerator.mdx │ │ │ │ │ ├── huggingfaceapigenerator.mdx │ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx │ │ │ │ │ ├── huggingfacelocalgenerator.mdx │ │ │ │ │ ├── llamacppchatgenerator.mdx │ │ │ │ │ ├── llamacppgenerator.mdx │ │ │ │ │ ├── llamastackchatgenerator.mdx │ │ │ │ │ ├── metallamachatgenerator.mdx │ │ │ │ │ ├── mistralchatgenerator.mdx │ │ │ │ │ ├── nvidiachatgenerator.mdx │ │ │ │ │ ├── nvidiagenerator.mdx │ │ │ │ │ ├── ollamachatgenerator.mdx │ │ │ │ │ ├── ollamagenerator.mdx │ │ │ │ │ ├── openaichatgenerator.mdx │ │ │ │ │ ├── openaigenerator.mdx │ │ │ │ │ ├── openairesponseschatgenerator.mdx │ │ │ │ │ ├── openrouterchatgenerator.mdx │ │ │ │ │ ├── sagemakergenerator.mdx │ │ │ │ │ ├── stackitchatgenerator.mdx │ │ │ │ │ ├── togetheraichatgenerator.mdx │ │ │ │ │ ├── togetheraigenerator.mdx │ │ │ │ │ ├── vertexaicodegenerator.mdx │ │ │ │ │ ├── vertexaigeminichatgenerator.mdx │ │ │ │ │ ├── vertexaigeminigenerator.mdx │ │ │ │ │ ├── vertexaiimagecaptioner.mdx │ │ │ │ │ ├── vertexaiimagegenerator.mdx │ │ │ │ │ ├── vertexaiimageqa.mdx │ │ │ │ │ ├── vertexaitextgenerator.mdx │ │ │ │ │ ├── watsonxchatgenerator.mdx │ │ │ │ │ └── watsonxgenerator.mdx │ │ │ │ ├── generators.mdx │ │ │ │ ├── joiners/ │ │ │ │ │ ├── answerjoiner.mdx │ │ │ │ │ ├── branchjoiner.mdx │ │ │ │ │ ├── documentjoiner.mdx │ │ │ │ │ ├── listjoiner.mdx │ │ │ │ │ └── stringjoiner.mdx │ │ │ │ ├── joiners.mdx │ │ │ │ ├── preprocessors/ │ │ │ │ │ ├── chinesedocumentsplitter.mdx │ │ │ │ │ ├── csvdocumentcleaner.mdx │ │ │ │ │ ├── csvdocumentsplitter.mdx │ │ │ │ │ ├── documentcleaner.mdx │ │ │ │ │ ├── documentpreprocessor.mdx │ │ │ │ │ ├── documentsplitter.mdx │ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx │ │ │ │ │ ├── recursivesplitter.mdx │ │ │ │ │ └── textcleaner.mdx │ │ │ │ ├── preprocessors.mdx │ │ │ │ ├── query/ │ │ │ │ │ └── queryexpander.mdx │ │ │ │ ├── rankers/ │ │ │ │ │ ├── amazonbedrockranker.mdx │ │ │ │ │ ├── choosing-the-right-ranker.mdx │ │ │ │ │ ├── cohereranker.mdx │ │ │ │ │ ├── external-integrations-rankers.mdx │ │ │ │ │ ├── fastembedranker.mdx │ │ │ │ │ ├── huggingfaceteiranker.mdx │ │ │ │ │ ├── jinaranker.mdx │ │ │ │ │ ├── lostinthemiddleranker.mdx │ │ │ │ │ ├── metafieldgroupingranker.mdx │ │ │ │ │ ├── metafieldranker.mdx │ │ │ │ │ ├── nvidiaranker.mdx │ │ │ │ │ ├── pyversityranker.mdx │ │ │ │ │ ├── sentencetransformersdiversityranker.mdx │ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx │ │ │ │ │ └── transformerssimilarityranker.mdx │ │ │ │ ├── rankers.mdx │ │ │ │ ├── readers/ │ │ │ │ │ └── extractivereader.mdx │ │ │ │ ├── readers.mdx │ │ │ │ ├── retrievers/ │ │ │ │ │ ├── astraretriever.mdx │ │ │ │ │ ├── automergingretriever.mdx │ │ │ │ │ ├── azureaisearchbm25retriever.mdx │ │ │ │ │ ├── azureaisearchembeddingretriever.mdx │ │ │ │ │ ├── azureaisearchhybridretriever.mdx │ │ │ │ │ ├── chromaembeddingretriever.mdx │ │ │ │ │ ├── chromaqueryretriever.mdx │ │ │ │ │ ├── elasticsearchbm25retriever.mdx │ │ │ │ │ ├── elasticsearchembeddingretriever.mdx │ │ │ │ │ ├── filterretriever.mdx │ │ │ │ │ ├── inmemorybm25retriever.mdx │ │ │ │ │ ├── inmemoryembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx │ │ │ │ │ ├── multiqueryembeddingretriever.mdx │ │ │ │ │ ├── multiquerytextretriever.mdx │ │ │ │ │ ├── opensearchbm25retriever.mdx │ │ │ │ │ ├── opensearchembeddingretriever.mdx │ │ │ │ │ ├── opensearchhybridretriever.mdx │ │ │ │ │ ├── pgvectorembeddingretriever.mdx │ │ │ │ │ ├── pgvectorkeywordretriever.mdx │ │ │ │ │ ├── pineconedenseretriever.mdx │ │ │ │ │ ├── qdrantembeddingretriever.mdx │ │ │ │ │ ├── qdranthybridretriever.mdx │ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx │ │ │ │ │ ├── sentencewindowretrieval.mdx │ │ │ │ │ ├── snowflaketableretriever.mdx │ │ │ │ │ ├── weaviatebm25retriever.mdx │ │ │ │ │ ├── weaviateembeddingretriever.mdx │ │ │ │ │ └── weaviatehybridretriever.mdx │ │ │ │ ├── retrievers.mdx │ │ │ │ ├── routers/ │ │ │ │ │ ├── conditionalrouter.mdx │ │ │ │ │ ├── documentlengthrouter.mdx │ │ │ │ │ ├── documenttyperouter.mdx │ │ │ │ │ ├── filetyperouter.mdx │ │ │ │ │ ├── llmmessagesrouter.mdx │ │ │ │ │ ├── metadatarouter.mdx │ │ │ │ │ ├── textlanguagerouter.mdx │ │ │ │ │ ├── transformerstextrouter.mdx │ │ │ │ │ └── transformerszeroshottextrouter.mdx │ │ │ │ ├── routers.mdx │ │ │ │ ├── samplers/ │ │ │ │ │ └── toppsampler.mdx │ │ │ │ ├── tools/ │ │ │ │ │ └── toolinvoker.mdx │ │ │ │ ├── validators/ │ │ │ │ │ └── jsonschemavalidator.mdx │ │ │ │ ├── websearch/ │ │ │ │ │ ├── external-integrations-websearch.mdx │ │ │ │ │ ├── searchapiwebsearch.mdx │ │ │ │ │ └── serperdevwebsearch.mdx │ │ │ │ ├── websearch.mdx │ │ │ │ └── writers/ │ │ │ │ └── documentwriter.mdx │ │ │ └── tools/ │ │ │ ├── componenttool.mdx │ │ │ ├── mcptool.mdx │ │ │ ├── mcptoolset.mdx │ │ │ ├── pipelinetool.mdx │ │ │ ├── ready-made-tools/ │ │ │ │ ├── githubfileeditortool.mdx │ │ │ │ ├── githubissuecommentertool.mdx │ │ │ │ ├── githubissueviewertool.mdx │ │ │ │ ├── githubprcreatortool.mdx │ │ │ │ └── githubrepoviewertool.mdx │ │ │ ├── tool.mdx │ │ │ └── toolset.mdx │ │ ├── version-2.22/ │ │ │ ├── _templates/ │ │ │ │ ├── component-template.mdx │ │ │ │ └── document-store-template.mdx │ │ │ ├── concepts/ │ │ │ │ ├── agents/ │ │ │ │ │ └── state.mdx │ │ │ │ ├── agents.mdx │ │ │ │ ├── components/ │ │ │ │ │ ├── custom-components.mdx │ │ │ │ │ └── supercomponents.mdx │ │ │ │ ├── components.mdx │ │ │ │ ├── concepts-overview.mdx │ │ │ │ ├── data-classes/ │ │ │ │ │ └── chatmessage.mdx │ │ │ │ ├── data-classes.mdx │ │ │ │ ├── device-management.mdx │ │ │ │ ├── document-store/ │ │ │ │ │ ├── choosing-a-document-store.mdx │ │ │ │ │ └── creating-custom-document-stores.mdx │ │ │ │ ├── document-store.mdx │ │ │ │ ├── experimental-package.mdx │ │ │ │ ├── integrations.mdx │ │ │ │ ├── jinja-templates.mdx │ │ │ │ ├── metadata-filtering.mdx │ │ │ │ ├── pipelines/ │ │ │ │ │ ├── asyncpipeline.mdx │ │ │ │ │ ├── creating-pipelines.mdx │ │ │ │ │ ├── debugging-pipelines.mdx │ │ │ │ │ ├── pipeline-breakpoints.mdx │ │ │ │ │ ├── pipeline-loops.mdx │ │ │ │ │ ├── pipeline-templates.mdx │ │ │ │ │ ├── serialization.mdx │ │ │ │ │ └── visualizing-pipelines.mdx │ │ │ │ ├── pipelines.mdx │ │ │ │ └── secret-management.mdx │ │ │ ├── development/ │ │ │ │ ├── deployment/ │ │ │ │ │ ├── docker.mdx │ │ │ │ │ ├── kubernetes.mdx │ │ │ │ │ └── openshift.mdx │ │ │ │ ├── deployment.mdx │ │ │ │ ├── enabling-gpu-acceleration.mdx │ │ │ │ ├── external-integrations-development.mdx │ │ │ │ ├── hayhooks.mdx │ │ │ │ ├── logging.mdx │ │ │ │ └── tracing.mdx │ │ │ ├── document-stores/ │ │ │ │ ├── astradocumentstore.mdx │ │ │ │ ├── azureaisearchdocumentstore.mdx │ │ │ │ ├── chromadocumentstore.mdx │ │ │ │ ├── elasticsearch-document-store.mdx │ │ │ │ ├── inmemorydocumentstore.mdx │ │ │ │ ├── mongodbatlasdocumentstore.mdx │ │ │ │ ├── opensearch-document-store.mdx │ │ │ │ ├── pgvectordocumentstore.mdx │ │ │ │ ├── pinecone-document-store.mdx │ │ │ │ ├── qdrant-document-store.mdx │ │ │ │ └── weaviatedocumentstore.mdx │ │ │ ├── intro.mdx │ │ │ ├── optimization/ │ │ │ │ ├── advanced-rag-techniques/ │ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx │ │ │ │ ├── advanced-rag-techniques.mdx │ │ │ │ ├── evaluation/ │ │ │ │ │ ├── model-based-evaluation.mdx │ │ │ │ │ └── statistical-evaluation.mdx │ │ │ │ └── evaluation.mdx │ │ │ ├── overview/ │ │ │ │ ├── breaking-change-policy.mdx │ │ │ │ ├── faq.mdx │ │ │ │ ├── get-started.mdx │ │ │ │ ├── installation.mdx │ │ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx │ │ │ │ ├── migration.mdx │ │ │ │ └── telemetry.mdx │ │ │ ├── pipeline-components/ │ │ │ │ ├── agents-1/ │ │ │ │ │ └── agent.mdx │ │ │ │ ├── audio/ │ │ │ │ │ ├── external-integrations-audio.mdx │ │ │ │ │ ├── localwhispertranscriber.mdx │ │ │ │ │ └── remotewhispertranscriber.mdx │ │ │ │ ├── audio.mdx │ │ │ │ ├── builders/ │ │ │ │ │ ├── answerbuilder.mdx │ │ │ │ │ ├── chatpromptbuilder.mdx │ │ │ │ │ └── promptbuilder.mdx │ │ │ │ ├── builders.mdx │ │ │ │ ├── caching/ │ │ │ │ │ └── cachechecker.mdx │ │ │ │ ├── classifiers/ │ │ │ │ │ ├── documentlanguageclassifier.mdx │ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx │ │ │ │ ├── classifiers.mdx │ │ │ │ ├── connectors/ │ │ │ │ │ ├── external-integrations-connectors.mdx │ │ │ │ │ ├── githubfileeditor.mdx │ │ │ │ │ ├── githubissuecommenter.mdx │ │ │ │ │ ├── githubissueviewer.mdx │ │ │ │ │ ├── githubprcreator.mdx │ │ │ │ │ ├── githubrepoforker.mdx │ │ │ │ │ ├── githubrepoviewer.mdx │ │ │ │ │ ├── jinareaderconnector.mdx │ │ │ │ │ ├── langfuseconnector.mdx │ │ │ │ │ ├── openapiconnector.mdx │ │ │ │ │ ├── openapiserviceconnector.mdx │ │ │ │ │ └── weaveconnector.mdx │ │ │ │ ├── connectors.mdx │ │ │ │ ├── converters/ │ │ │ │ │ ├── azureocrdocumentconverter.mdx │ │ │ │ │ ├── csvtodocument.mdx │ │ │ │ │ ├── documenttoimagecontent.mdx │ │ │ │ │ ├── docxtodocument.mdx │ │ │ │ │ ├── external-integrations-converters.mdx │ │ │ │ │ ├── htmltodocument.mdx │ │ │ │ │ ├── imagefiletodocument.mdx │ │ │ │ │ ├── imagefiletoimagecontent.mdx │ │ │ │ │ ├── jsonconverter.mdx │ │ │ │ │ ├── markdowntodocument.mdx │ │ │ │ │ ├── mistralocrdocumentconverter.mdx │ │ │ │ │ ├── msgtodocument.mdx │ │ │ │ │ ├── multifileconverter.mdx │ │ │ │ │ ├── openapiservicetofunctions.mdx │ │ │ │ │ ├── outputadapter.mdx │ │ │ │ │ ├── paddleocrvldocumentconverter.mdx │ │ │ │ │ ├── pdfminertodocument.mdx │ │ │ │ │ ├── pdftoimagecontent.mdx │ │ │ │ │ ├── pptxtodocument.mdx │ │ │ │ │ ├── pypdftodocument.mdx │ │ │ │ │ ├── textfiletodocument.mdx │ │ │ │ │ ├── tikadocumentconverter.mdx │ │ │ │ │ ├── unstructuredfileconverter.mdx │ │ │ │ │ └── xlsxtodocument.mdx │ │ │ │ ├── converters.mdx │ │ │ │ ├── downloaders/ │ │ │ │ │ └── s3downloader.mdx │ │ │ │ ├── embedders/ │ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx │ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx │ │ │ │ │ ├── amazonbedrocktextembedder.mdx │ │ │ │ │ ├── azureopenaidocumentembedder.mdx │ │ │ │ │ ├── azureopenaitextembedder.mdx │ │ │ │ │ ├── choosing-the-right-embedder.mdx │ │ │ │ │ ├── coheredocumentembedder.mdx │ │ │ │ │ ├── coheredocumentimageembedder.mdx │ │ │ │ │ ├── coheretextembedder.mdx │ │ │ │ │ ├── external-integrations-embedders.mdx │ │ │ │ │ ├── fastembeddocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsetextembedder.mdx │ │ │ │ │ ├── fastembedtextembedder.mdx │ │ │ │ │ ├── googlegenaidocumentembedder.mdx │ │ │ │ │ ├── googlegenaitextembedder.mdx │ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx │ │ │ │ │ ├── huggingfaceapitextembedder.mdx │ │ │ │ │ ├── jinadocumentembedder.mdx │ │ │ │ │ ├── jinadocumentimageembedder.mdx │ │ │ │ │ ├── jinatextembedder.mdx │ │ │ │ │ ├── mistraldocumentembedder.mdx │ │ │ │ │ ├── mistraltextembedder.mdx │ │ │ │ │ ├── nvidiadocumentembedder.mdx │ │ │ │ │ ├── nvidiatextembedder.mdx │ │ │ │ │ ├── ollamadocumentembedder.mdx │ │ │ │ │ ├── ollamatextembedder.mdx │ │ │ │ │ ├── openaidocumentembedder.mdx │ │ │ │ │ ├── openaitextembedder.mdx │ │ │ │ │ ├── optimumdocumentembedder.mdx │ │ │ │ │ ├── optimumtextembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx │ │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx │ │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx │ │ │ │ │ ├── sentencetransformerstextembedder.mdx │ │ │ │ │ ├── stackitdocumentembedder.mdx │ │ │ │ │ ├── stackittextembedder.mdx │ │ │ │ │ ├── vertexaidocumentembedder.mdx │ │ │ │ │ ├── vertexaitextembedder.mdx │ │ │ │ │ ├── watsonxdocumentembedder.mdx │ │ │ │ │ └── watsonxtextembedder.mdx │ │ │ │ ├── embedders.mdx │ │ │ │ ├── evaluators/ │ │ │ │ │ ├── answerexactmatchevaluator.mdx │ │ │ │ │ ├── contextrelevanceevaluator.mdx │ │ │ │ │ ├── deepevalevaluator.mdx │ │ │ │ │ ├── documentmapevaluator.mdx │ │ │ │ │ ├── documentmrrevaluator.mdx │ │ │ │ │ ├── documentndcgevaluator.mdx │ │ │ │ │ ├── documentrecallevaluator.mdx │ │ │ │ │ ├── external-integrations-evaluators.mdx │ │ │ │ │ ├── faithfulnessevaluator.mdx │ │ │ │ │ ├── llmevaluator.mdx │ │ │ │ │ ├── ragasevaluator.mdx │ │ │ │ │ └── sasevaluator.mdx │ │ │ │ ├── evaluators.mdx │ │ │ │ ├── extractors/ │ │ │ │ │ ├── llmdocumentcontentextractor.mdx │ │ │ │ │ ├── llmmetadataextractor.mdx │ │ │ │ │ ├── namedentityextractor.mdx │ │ │ │ │ └── regextextextractor.mdx │ │ │ │ ├── extractors.mdx │ │ │ │ ├── fetchers/ │ │ │ │ │ ├── external-integrations-fetchers.mdx │ │ │ │ │ └── linkcontentfetcher.mdx │ │ │ │ ├── fetchers.mdx │ │ │ │ ├── generators/ │ │ │ │ │ ├── aimllapichatgenerator.mdx │ │ │ │ │ ├── amazonbedrockchatgenerator.mdx │ │ │ │ │ ├── amazonbedrockgenerator.mdx │ │ │ │ │ ├── anthropicchatgenerator.mdx │ │ │ │ │ ├── anthropicgenerator.mdx │ │ │ │ │ ├── anthropicvertexchatgenerator.mdx │ │ │ │ │ ├── azureopenaichatgenerator.mdx │ │ │ │ │ ├── azureopenaigenerator.mdx │ │ │ │ │ ├── azureopenairesponseschatgenerator.mdx │ │ │ │ │ ├── coherechatgenerator.mdx │ │ │ │ │ ├── coheregenerator.mdx │ │ │ │ │ ├── cometapichatgenerator.mdx │ │ │ │ │ ├── dalleimagegenerator.mdx │ │ │ │ │ ├── external-integrations-generators.mdx │ │ │ │ │ ├── fallbackchatgenerator.mdx │ │ │ │ │ ├── googleaigeminichatgenerator.mdx │ │ │ │ │ ├── googleaigeminigenerator.mdx │ │ │ │ │ ├── googlegenaichatgenerator.mdx │ │ │ │ │ ├── guides-to-generators/ │ │ │ │ │ │ ├── choosing-the-right-generator.mdx │ │ │ │ │ │ ├── function-calling.mdx │ │ │ │ │ │ └── generators-vs-chat-generators.mdx │ │ │ │ │ ├── huggingfaceapichatgenerator.mdx │ │ │ │ │ ├── huggingfaceapigenerator.mdx │ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx │ │ │ │ │ ├── huggingfacelocalgenerator.mdx │ │ │ │ │ ├── llamacppchatgenerator.mdx │ │ │ │ │ ├── llamacppgenerator.mdx │ │ │ │ │ ├── llamastackchatgenerator.mdx │ │ │ │ │ ├── metallamachatgenerator.mdx │ │ │ │ │ ├── mistralchatgenerator.mdx │ │ │ │ │ ├── nvidiachatgenerator.mdx │ │ │ │ │ ├── nvidiagenerator.mdx │ │ │ │ │ ├── ollamachatgenerator.mdx │ │ │ │ │ ├── ollamagenerator.mdx │ │ │ │ │ ├── openaichatgenerator.mdx │ │ │ │ │ ├── openaigenerator.mdx │ │ │ │ │ ├── openairesponseschatgenerator.mdx │ │ │ │ │ ├── openrouterchatgenerator.mdx │ │ │ │ │ ├── sagemakergenerator.mdx │ │ │ │ │ ├── stackitchatgenerator.mdx │ │ │ │ │ ├── togetheraichatgenerator.mdx │ │ │ │ │ ├── togetheraigenerator.mdx │ │ │ │ │ ├── vertexaicodegenerator.mdx │ │ │ │ │ ├── vertexaigeminichatgenerator.mdx │ │ │ │ │ ├── vertexaigeminigenerator.mdx │ │ │ │ │ ├── vertexaiimagecaptioner.mdx │ │ │ │ │ ├── vertexaiimagegenerator.mdx │ │ │ │ │ ├── vertexaiimageqa.mdx │ │ │ │ │ ├── vertexaitextgenerator.mdx │ │ │ │ │ ├── watsonxchatgenerator.mdx │ │ │ │ │ └── watsonxgenerator.mdx │ │ │ │ ├── generators.mdx │ │ │ │ ├── joiners/ │ │ │ │ │ ├── answerjoiner.mdx │ │ │ │ │ ├── branchjoiner.mdx │ │ │ │ │ ├── documentjoiner.mdx │ │ │ │ │ ├── listjoiner.mdx │ │ │ │ │ └── stringjoiner.mdx │ │ │ │ ├── joiners.mdx │ │ │ │ ├── preprocessors/ │ │ │ │ │ ├── chinesedocumentsplitter.mdx │ │ │ │ │ ├── csvdocumentcleaner.mdx │ │ │ │ │ ├── csvdocumentsplitter.mdx │ │ │ │ │ ├── documentcleaner.mdx │ │ │ │ │ ├── documentpreprocessor.mdx │ │ │ │ │ ├── documentsplitter.mdx │ │ │ │ │ ├── embeddingbaseddocumentsplitter.mdx │ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx │ │ │ │ │ ├── recursivesplitter.mdx │ │ │ │ │ └── textcleaner.mdx │ │ │ │ ├── preprocessors.mdx │ │ │ │ ├── query/ │ │ │ │ │ └── queryexpander.mdx │ │ │ │ ├── rankers/ │ │ │ │ │ ├── amazonbedrockranker.mdx │ │ │ │ │ ├── choosing-the-right-ranker.mdx │ │ │ │ │ ├── cohereranker.mdx │ │ │ │ │ ├── external-integrations-rankers.mdx │ │ │ │ │ ├── fastembedranker.mdx │ │ │ │ │ ├── huggingfaceteiranker.mdx │ │ │ │ │ ├── jinaranker.mdx │ │ │ │ │ ├── lostinthemiddleranker.mdx │ │ │ │ │ ├── metafieldgroupingranker.mdx │ │ │ │ │ ├── metafieldranker.mdx │ │ │ │ │ ├── nvidiaranker.mdx │ │ │ │ │ ├── pyversityranker.mdx │ │ │ │ │ ├── sentencetransformersdiversityranker.mdx │ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx │ │ │ │ │ └── transformerssimilarityranker.mdx │ │ │ │ ├── rankers.mdx │ │ │ │ ├── readers/ │ │ │ │ │ └── extractivereader.mdx │ │ │ │ ├── readers.mdx │ │ │ │ ├── retrievers/ │ │ │ │ │ ├── astraretriever.mdx │ │ │ │ │ ├── automergingretriever.mdx │ │ │ │ │ ├── azureaisearchbm25retriever.mdx │ │ │ │ │ ├── azureaisearchembeddingretriever.mdx │ │ │ │ │ ├── azureaisearchhybridretriever.mdx │ │ │ │ │ ├── chromaembeddingretriever.mdx │ │ │ │ │ ├── chromaqueryretriever.mdx │ │ │ │ │ ├── elasticsearchbm25retriever.mdx │ │ │ │ │ ├── elasticsearchembeddingretriever.mdx │ │ │ │ │ ├── filterretriever.mdx │ │ │ │ │ ├── inmemorybm25retriever.mdx │ │ │ │ │ ├── inmemoryembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx │ │ │ │ │ ├── multiqueryembeddingretriever.mdx │ │ │ │ │ ├── multiquerytextretriever.mdx │ │ │ │ │ ├── opensearchbm25retriever.mdx │ │ │ │ │ ├── opensearchembeddingretriever.mdx │ │ │ │ │ ├── opensearchhybridretriever.mdx │ │ │ │ │ ├── pgvectorembeddingretriever.mdx │ │ │ │ │ ├── pgvectorkeywordretriever.mdx │ │ │ │ │ ├── pineconedenseretriever.mdx │ │ │ │ │ ├── qdrantembeddingretriever.mdx │ │ │ │ │ ├── qdranthybridretriever.mdx │ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx │ │ │ │ │ ├── sentencewindowretrieval.mdx │ │ │ │ │ ├── snowflaketableretriever.mdx │ │ │ │ │ ├── weaviatebm25retriever.mdx │ │ │ │ │ ├── weaviateembeddingretriever.mdx │ │ │ │ │ └── weaviatehybridretriever.mdx │ │ │ │ ├── retrievers.mdx │ │ │ │ ├── routers/ │ │ │ │ │ ├── conditionalrouter.mdx │ │ │ │ │ ├── documentlengthrouter.mdx │ │ │ │ │ ├── documenttyperouter.mdx │ │ │ │ │ ├── filetyperouter.mdx │ │ │ │ │ ├── llmmessagesrouter.mdx │ │ │ │ │ ├── metadatarouter.mdx │ │ │ │ │ ├── textlanguagerouter.mdx │ │ │ │ │ ├── transformerstextrouter.mdx │ │ │ │ │ └── transformerszeroshottextrouter.mdx │ │ │ │ ├── routers.mdx │ │ │ │ ├── samplers/ │ │ │ │ │ └── toppsampler.mdx │ │ │ │ ├── tools/ │ │ │ │ │ └── toolinvoker.mdx │ │ │ │ ├── validators/ │ │ │ │ │ └── jsonschemavalidator.mdx │ │ │ │ ├── websearch/ │ │ │ │ │ ├── external-integrations-websearch.mdx │ │ │ │ │ ├── searchapiwebsearch.mdx │ │ │ │ │ └── serperdevwebsearch.mdx │ │ │ │ ├── websearch.mdx │ │ │ │ └── writers/ │ │ │ │ └── documentwriter.mdx │ │ │ └── tools/ │ │ │ ├── componenttool.mdx │ │ │ ├── mcptool.mdx │ │ │ ├── mcptoolset.mdx │ │ │ ├── pipelinetool.mdx │ │ │ ├── ready-made-tools/ │ │ │ │ ├── githubfileeditortool.mdx │ │ │ │ ├── githubissuecommentertool.mdx │ │ │ │ ├── githubissueviewertool.mdx │ │ │ │ ├── githubprcreatortool.mdx │ │ │ │ └── githubrepoviewertool.mdx │ │ │ ├── tool.mdx │ │ │ └── toolset.mdx │ │ ├── version-2.23/ │ │ │ ├── _templates/ │ │ │ │ ├── component-template.mdx │ │ │ │ └── document-store-template.mdx │ │ │ ├── concepts/ │ │ │ │ ├── agents/ │ │ │ │ │ └── state.mdx │ │ │ │ ├── agents.mdx │ │ │ │ ├── components/ │ │ │ │ │ ├── custom-components.mdx │ │ │ │ │ └── supercomponents.mdx │ │ │ │ ├── components.mdx │ │ │ │ ├── concepts-overview.mdx │ │ │ │ ├── data-classes/ │ │ │ │ │ └── chatmessage.mdx │ │ │ │ ├── data-classes.mdx │ │ │ │ ├── device-management.mdx │ │ │ │ ├── document-store/ │ │ │ │ │ ├── choosing-a-document-store.mdx │ │ │ │ │ └── creating-custom-document-stores.mdx │ │ │ │ ├── document-store.mdx │ │ │ │ ├── experimental-package.mdx │ │ │ │ ├── integrations.mdx │ │ │ │ ├── jinja-templates.mdx │ │ │ │ ├── metadata-filtering.mdx │ │ │ │ ├── pipelines/ │ │ │ │ │ ├── asyncpipeline.mdx │ │ │ │ │ ├── creating-pipelines.mdx │ │ │ │ │ ├── debugging-pipelines.mdx │ │ │ │ │ ├── pipeline-breakpoints.mdx │ │ │ │ │ ├── pipeline-loops.mdx │ │ │ │ │ ├── pipeline-templates.mdx │ │ │ │ │ ├── serialization.mdx │ │ │ │ │ └── visualizing-pipelines.mdx │ │ │ │ ├── pipelines.mdx │ │ │ │ └── secret-management.mdx │ │ │ ├── development/ │ │ │ │ ├── deployment/ │ │ │ │ │ ├── docker.mdx │ │ │ │ │ ├── kubernetes.mdx │ │ │ │ │ └── openshift.mdx │ │ │ │ ├── deployment.mdx │ │ │ │ ├── enabling-gpu-acceleration.mdx │ │ │ │ ├── external-integrations-development.mdx │ │ │ │ ├── hayhooks.mdx │ │ │ │ ├── logging.mdx │ │ │ │ └── tracing.mdx │ │ │ ├── document-stores/ │ │ │ │ ├── astradocumentstore.mdx │ │ │ │ ├── azureaisearchdocumentstore.mdx │ │ │ │ ├── chromadocumentstore.mdx │ │ │ │ ├── elasticsearch-document-store.mdx │ │ │ │ ├── inmemorydocumentstore.mdx │ │ │ │ ├── mongodbatlasdocumentstore.mdx │ │ │ │ ├── opensearch-document-store.mdx │ │ │ │ ├── pgvectordocumentstore.mdx │ │ │ │ ├── pinecone-document-store.mdx │ │ │ │ ├── qdrant-document-store.mdx │ │ │ │ └── weaviatedocumentstore.mdx │ │ │ ├── intro.mdx │ │ │ ├── optimization/ │ │ │ │ ├── advanced-rag-techniques/ │ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx │ │ │ │ ├── advanced-rag-techniques.mdx │ │ │ │ ├── evaluation/ │ │ │ │ │ ├── model-based-evaluation.mdx │ │ │ │ │ └── statistical-evaluation.mdx │ │ │ │ └── evaluation.mdx │ │ │ ├── overview/ │ │ │ │ ├── breaking-change-policy.mdx │ │ │ │ ├── faq.mdx │ │ │ │ ├── get-started.mdx │ │ │ │ ├── installation.mdx │ │ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx │ │ │ │ ├── migration.mdx │ │ │ │ └── telemetry.mdx │ │ │ ├── pipeline-components/ │ │ │ │ ├── agents-1/ │ │ │ │ │ └── agent.mdx │ │ │ │ ├── audio/ │ │ │ │ │ ├── external-integrations-audio.mdx │ │ │ │ │ ├── localwhispertranscriber.mdx │ │ │ │ │ └── remotewhispertranscriber.mdx │ │ │ │ ├── audio.mdx │ │ │ │ ├── builders/ │ │ │ │ │ ├── answerbuilder.mdx │ │ │ │ │ ├── chatpromptbuilder.mdx │ │ │ │ │ └── promptbuilder.mdx │ │ │ │ ├── builders.mdx │ │ │ │ ├── caching/ │ │ │ │ │ └── cachechecker.mdx │ │ │ │ ├── classifiers/ │ │ │ │ │ ├── documentlanguageclassifier.mdx │ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx │ │ │ │ ├── classifiers.mdx │ │ │ │ ├── connectors/ │ │ │ │ │ ├── external-integrations-connectors.mdx │ │ │ │ │ ├── githubfileeditor.mdx │ │ │ │ │ ├── githubissuecommenter.mdx │ │ │ │ │ ├── githubissueviewer.mdx │ │ │ │ │ ├── githubprcreator.mdx │ │ │ │ │ ├── githubrepoforker.mdx │ │ │ │ │ ├── githubrepoviewer.mdx │ │ │ │ │ ├── jinareaderconnector.mdx │ │ │ │ │ ├── langfuseconnector.mdx │ │ │ │ │ ├── openapiconnector.mdx │ │ │ │ │ ├── openapiserviceconnector.mdx │ │ │ │ │ └── weaveconnector.mdx │ │ │ │ ├── connectors.mdx │ │ │ │ ├── converters/ │ │ │ │ │ ├── azureocrdocumentconverter.mdx │ │ │ │ │ ├── csvtodocument.mdx │ │ │ │ │ ├── documenttoimagecontent.mdx │ │ │ │ │ ├── docxtodocument.mdx │ │ │ │ │ ├── external-integrations-converters.mdx │ │ │ │ │ ├── htmltodocument.mdx │ │ │ │ │ ├── imagefiletodocument.mdx │ │ │ │ │ ├── imagefiletoimagecontent.mdx │ │ │ │ │ ├── jsonconverter.mdx │ │ │ │ │ ├── markdowntodocument.mdx │ │ │ │ │ ├── mistralocrdocumentconverter.mdx │ │ │ │ │ ├── msgtodocument.mdx │ │ │ │ │ ├── multifileconverter.mdx │ │ │ │ │ ├── openapiservicetofunctions.mdx │ │ │ │ │ ├── outputadapter.mdx │ │ │ │ │ ├── paddleocrvldocumentconverter.mdx │ │ │ │ │ ├── pdfminertodocument.mdx │ │ │ │ │ ├── pdftoimagecontent.mdx │ │ │ │ │ ├── pptxtodocument.mdx │ │ │ │ │ ├── pypdftodocument.mdx │ │ │ │ │ ├── textfiletodocument.mdx │ │ │ │ │ ├── tikadocumentconverter.mdx │ │ │ │ │ ├── unstructuredfileconverter.mdx │ │ │ │ │ └── xlsxtodocument.mdx │ │ │ │ ├── converters.mdx │ │ │ │ ├── downloaders/ │ │ │ │ │ └── s3downloader.mdx │ │ │ │ ├── embedders/ │ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx │ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx │ │ │ │ │ ├── amazonbedrocktextembedder.mdx │ │ │ │ │ ├── azureopenaidocumentembedder.mdx │ │ │ │ │ ├── azureopenaitextembedder.mdx │ │ │ │ │ ├── choosing-the-right-embedder.mdx │ │ │ │ │ ├── coheredocumentembedder.mdx │ │ │ │ │ ├── coheredocumentimageembedder.mdx │ │ │ │ │ ├── coheretextembedder.mdx │ │ │ │ │ ├── external-integrations-embedders.mdx │ │ │ │ │ ├── fastembeddocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsetextembedder.mdx │ │ │ │ │ ├── fastembedtextembedder.mdx │ │ │ │ │ ├── googlegenaidocumentembedder.mdx │ │ │ │ │ ├── googlegenaitextembedder.mdx │ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx │ │ │ │ │ ├── huggingfaceapitextembedder.mdx │ │ │ │ │ ├── jinadocumentembedder.mdx │ │ │ │ │ ├── jinadocumentimageembedder.mdx │ │ │ │ │ ├── jinatextembedder.mdx │ │ │ │ │ ├── mistraldocumentembedder.mdx │ │ │ │ │ ├── mistraltextembedder.mdx │ │ │ │ │ ├── nvidiadocumentembedder.mdx │ │ │ │ │ ├── nvidiatextembedder.mdx │ │ │ │ │ ├── ollamadocumentembedder.mdx │ │ │ │ │ ├── ollamatextembedder.mdx │ │ │ │ │ ├── openaidocumentembedder.mdx │ │ │ │ │ ├── openaitextembedder.mdx │ │ │ │ │ ├── optimumdocumentembedder.mdx │ │ │ │ │ ├── optimumtextembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx │ │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx │ │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx │ │ │ │ │ ├── sentencetransformerstextembedder.mdx │ │ │ │ │ ├── stackitdocumentembedder.mdx │ │ │ │ │ ├── stackittextembedder.mdx │ │ │ │ │ ├── vertexaidocumentembedder.mdx │ │ │ │ │ ├── vertexaitextembedder.mdx │ │ │ │ │ ├── watsonxdocumentembedder.mdx │ │ │ │ │ └── watsonxtextembedder.mdx │ │ │ │ ├── embedders.mdx │ │ │ │ ├── evaluators/ │ │ │ │ │ ├── answerexactmatchevaluator.mdx │ │ │ │ │ ├── contextrelevanceevaluator.mdx │ │ │ │ │ ├── deepevalevaluator.mdx │ │ │ │ │ ├── documentmapevaluator.mdx │ │ │ │ │ ├── documentmrrevaluator.mdx │ │ │ │ │ ├── documentndcgevaluator.mdx │ │ │ │ │ ├── documentrecallevaluator.mdx │ │ │ │ │ ├── external-integrations-evaluators.mdx │ │ │ │ │ ├── faithfulnessevaluator.mdx │ │ │ │ │ ├── llmevaluator.mdx │ │ │ │ │ ├── ragasevaluator.mdx │ │ │ │ │ └── sasevaluator.mdx │ │ │ │ ├── evaluators.mdx │ │ │ │ ├── extractors/ │ │ │ │ │ ├── llmdocumentcontentextractor.mdx │ │ │ │ │ ├── llmmetadataextractor.mdx │ │ │ │ │ ├── namedentityextractor.mdx │ │ │ │ │ └── regextextextractor.mdx │ │ │ │ ├── extractors.mdx │ │ │ │ ├── fetchers/ │ │ │ │ │ ├── external-integrations-fetchers.mdx │ │ │ │ │ └── linkcontentfetcher.mdx │ │ │ │ ├── fetchers.mdx │ │ │ │ ├── generators/ │ │ │ │ │ ├── aimllapichatgenerator.mdx │ │ │ │ │ ├── amazonbedrockchatgenerator.mdx │ │ │ │ │ ├── amazonbedrockgenerator.mdx │ │ │ │ │ ├── anthropicchatgenerator.mdx │ │ │ │ │ ├── anthropicgenerator.mdx │ │ │ │ │ ├── anthropicvertexchatgenerator.mdx │ │ │ │ │ ├── azureopenaichatgenerator.mdx │ │ │ │ │ ├── azureopenaigenerator.mdx │ │ │ │ │ ├── azureopenairesponseschatgenerator.mdx │ │ │ │ │ ├── coherechatgenerator.mdx │ │ │ │ │ ├── coheregenerator.mdx │ │ │ │ │ ├── cometapichatgenerator.mdx │ │ │ │ │ ├── dalleimagegenerator.mdx │ │ │ │ │ ├── external-integrations-generators.mdx │ │ │ │ │ ├── fallbackchatgenerator.mdx │ │ │ │ │ ├── googleaigeminichatgenerator.mdx │ │ │ │ │ ├── googleaigeminigenerator.mdx │ │ │ │ │ ├── googlegenaichatgenerator.mdx │ │ │ │ │ ├── guides-to-generators/ │ │ │ │ │ │ ├── choosing-the-right-generator.mdx │ │ │ │ │ │ ├── function-calling.mdx │ │ │ │ │ │ └── generators-vs-chat-generators.mdx │ │ │ │ │ ├── huggingfaceapichatgenerator.mdx │ │ │ │ │ ├── huggingfaceapigenerator.mdx │ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx │ │ │ │ │ ├── huggingfacelocalgenerator.mdx │ │ │ │ │ ├── llamacppchatgenerator.mdx │ │ │ │ │ ├── llamacppgenerator.mdx │ │ │ │ │ ├── llamastackchatgenerator.mdx │ │ │ │ │ ├── metallamachatgenerator.mdx │ │ │ │ │ ├── mistralchatgenerator.mdx │ │ │ │ │ ├── nvidiachatgenerator.mdx │ │ │ │ │ ├── nvidiagenerator.mdx │ │ │ │ │ ├── ollamachatgenerator.mdx │ │ │ │ │ ├── ollamagenerator.mdx │ │ │ │ │ ├── openaichatgenerator.mdx │ │ │ │ │ ├── openaigenerator.mdx │ │ │ │ │ ├── openairesponseschatgenerator.mdx │ │ │ │ │ ├── openrouterchatgenerator.mdx │ │ │ │ │ ├── sagemakergenerator.mdx │ │ │ │ │ ├── stackitchatgenerator.mdx │ │ │ │ │ ├── togetheraichatgenerator.mdx │ │ │ │ │ ├── togetheraigenerator.mdx │ │ │ │ │ ├── vertexaicodegenerator.mdx │ │ │ │ │ ├── vertexaigeminichatgenerator.mdx │ │ │ │ │ ├── vertexaigeminigenerator.mdx │ │ │ │ │ ├── vertexaiimagecaptioner.mdx │ │ │ │ │ ├── vertexaiimagegenerator.mdx │ │ │ │ │ ├── vertexaiimageqa.mdx │ │ │ │ │ ├── vertexaitextgenerator.mdx │ │ │ │ │ ├── watsonxchatgenerator.mdx │ │ │ │ │ └── watsonxgenerator.mdx │ │ │ │ ├── generators.mdx │ │ │ │ ├── joiners/ │ │ │ │ │ ├── answerjoiner.mdx │ │ │ │ │ ├── branchjoiner.mdx │ │ │ │ │ ├── documentjoiner.mdx │ │ │ │ │ ├── listjoiner.mdx │ │ │ │ │ └── stringjoiner.mdx │ │ │ │ ├── joiners.mdx │ │ │ │ ├── preprocessors/ │ │ │ │ │ ├── chinesedocumentsplitter.mdx │ │ │ │ │ ├── csvdocumentcleaner.mdx │ │ │ │ │ ├── csvdocumentsplitter.mdx │ │ │ │ │ ├── documentcleaner.mdx │ │ │ │ │ ├── documentpreprocessor.mdx │ │ │ │ │ ├── documentsplitter.mdx │ │ │ │ │ ├── embeddingbaseddocumentsplitter.mdx │ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx │ │ │ │ │ ├── recursivesplitter.mdx │ │ │ │ │ └── textcleaner.mdx │ │ │ │ ├── preprocessors.mdx │ │ │ │ ├── query/ │ │ │ │ │ └── queryexpander.mdx │ │ │ │ ├── rankers/ │ │ │ │ │ ├── amazonbedrockranker.mdx │ │ │ │ │ ├── choosing-the-right-ranker.mdx │ │ │ │ │ ├── cohereranker.mdx │ │ │ │ │ ├── external-integrations-rankers.mdx │ │ │ │ │ ├── fastembedranker.mdx │ │ │ │ │ ├── huggingfaceteiranker.mdx │ │ │ │ │ ├── jinaranker.mdx │ │ │ │ │ ├── lostinthemiddleranker.mdx │ │ │ │ │ ├── metafieldgroupingranker.mdx │ │ │ │ │ ├── metafieldranker.mdx │ │ │ │ │ ├── nvidiaranker.mdx │ │ │ │ │ ├── pyversityranker.mdx │ │ │ │ │ ├── sentencetransformersdiversityranker.mdx │ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx │ │ │ │ │ └── transformerssimilarityranker.mdx │ │ │ │ ├── rankers.mdx │ │ │ │ ├── readers/ │ │ │ │ │ └── extractivereader.mdx │ │ │ │ ├── readers.mdx │ │ │ │ ├── retrievers/ │ │ │ │ │ ├── astraretriever.mdx │ │ │ │ │ ├── automergingretriever.mdx │ │ │ │ │ ├── azureaisearchbm25retriever.mdx │ │ │ │ │ ├── azureaisearchembeddingretriever.mdx │ │ │ │ │ ├── azureaisearchhybridretriever.mdx │ │ │ │ │ ├── chromaembeddingretriever.mdx │ │ │ │ │ ├── chromaqueryretriever.mdx │ │ │ │ │ ├── elasticsearchbm25retriever.mdx │ │ │ │ │ ├── elasticsearchembeddingretriever.mdx │ │ │ │ │ ├── filterretriever.mdx │ │ │ │ │ ├── inmemorybm25retriever.mdx │ │ │ │ │ ├── inmemoryembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx │ │ │ │ │ ├── multiqueryembeddingretriever.mdx │ │ │ │ │ ├── multiquerytextretriever.mdx │ │ │ │ │ ├── opensearchbm25retriever.mdx │ │ │ │ │ ├── opensearchembeddingretriever.mdx │ │ │ │ │ ├── opensearchhybridretriever.mdx │ │ │ │ │ ├── pgvectorembeddingretriever.mdx │ │ │ │ │ ├── pgvectorkeywordretriever.mdx │ │ │ │ │ ├── pineconedenseretriever.mdx │ │ │ │ │ ├── qdrantembeddingretriever.mdx │ │ │ │ │ ├── qdranthybridretriever.mdx │ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx │ │ │ │ │ ├── sentencewindowretrieval.mdx │ │ │ │ │ ├── snowflaketableretriever.mdx │ │ │ │ │ ├── weaviatebm25retriever.mdx │ │ │ │ │ ├── weaviateembeddingretriever.mdx │ │ │ │ │ └── weaviatehybridretriever.mdx │ │ │ │ ├── retrievers.mdx │ │ │ │ ├── routers/ │ │ │ │ │ ├── conditionalrouter.mdx │ │ │ │ │ ├── documentlengthrouter.mdx │ │ │ │ │ ├── documenttyperouter.mdx │ │ │ │ │ ├── filetyperouter.mdx │ │ │ │ │ ├── llmmessagesrouter.mdx │ │ │ │ │ ├── metadatarouter.mdx │ │ │ │ │ ├── textlanguagerouter.mdx │ │ │ │ │ ├── transformerstextrouter.mdx │ │ │ │ │ └── transformerszeroshottextrouter.mdx │ │ │ │ ├── routers.mdx │ │ │ │ ├── samplers/ │ │ │ │ │ └── toppsampler.mdx │ │ │ │ ├── tools/ │ │ │ │ │ └── toolinvoker.mdx │ │ │ │ ├── validators/ │ │ │ │ │ └── jsonschemavalidator.mdx │ │ │ │ ├── websearch/ │ │ │ │ │ ├── external-integrations-websearch.mdx │ │ │ │ │ ├── searchapiwebsearch.mdx │ │ │ │ │ └── serperdevwebsearch.mdx │ │ │ │ ├── websearch.mdx │ │ │ │ └── writers/ │ │ │ │ └── documentwriter.mdx │ │ │ └── tools/ │ │ │ ├── componenttool.mdx │ │ │ ├── mcptool.mdx │ │ │ ├── mcptoolset.mdx │ │ │ ├── pipelinetool.mdx │ │ │ ├── ready-made-tools/ │ │ │ │ ├── githubfileeditortool.mdx │ │ │ │ ├── githubissuecommentertool.mdx │ │ │ │ ├── githubissueviewertool.mdx │ │ │ │ ├── githubprcreatortool.mdx │ │ │ │ └── githubrepoviewertool.mdx │ │ │ ├── tool.mdx │ │ │ └── toolset.mdx │ │ ├── version-2.24/ │ │ │ ├── _templates/ │ │ │ │ ├── component-template.mdx │ │ │ │ └── document-store-template.mdx │ │ │ ├── concepts/ │ │ │ │ ├── agents/ │ │ │ │ │ └── state.mdx │ │ │ │ ├── agents.mdx │ │ │ │ ├── components/ │ │ │ │ │ ├── custom-components.mdx │ │ │ │ │ └── supercomponents.mdx │ │ │ │ ├── components.mdx │ │ │ │ ├── concepts-overview.mdx │ │ │ │ ├── data-classes/ │ │ │ │ │ └── chatmessage.mdx │ │ │ │ ├── data-classes.mdx │ │ │ │ ├── device-management.mdx │ │ │ │ ├── document-store/ │ │ │ │ │ ├── choosing-a-document-store.mdx │ │ │ │ │ └── creating-custom-document-stores.mdx │ │ │ │ ├── document-store.mdx │ │ │ │ ├── experimental-package.mdx │ │ │ │ ├── integrations.mdx │ │ │ │ ├── jinja-templates.mdx │ │ │ │ ├── metadata-filtering.mdx │ │ │ │ ├── pipelines/ │ │ │ │ │ ├── asyncpipeline.mdx │ │ │ │ │ ├── creating-pipelines.mdx │ │ │ │ │ ├── debugging-pipelines.mdx │ │ │ │ │ ├── pipeline-breakpoints.mdx │ │ │ │ │ ├── pipeline-loops.mdx │ │ │ │ │ ├── pipeline-templates.mdx │ │ │ │ │ ├── serialization.mdx │ │ │ │ │ ├── smart-pipeline-connections.mdx │ │ │ │ │ └── visualizing-pipelines.mdx │ │ │ │ ├── pipelines.mdx │ │ │ │ └── secret-management.mdx │ │ │ ├── development/ │ │ │ │ ├── deployment/ │ │ │ │ │ ├── docker.mdx │ │ │ │ │ ├── kubernetes.mdx │ │ │ │ │ └── openshift.mdx │ │ │ │ ├── deployment.mdx │ │ │ │ ├── enabling-gpu-acceleration.mdx │ │ │ │ ├── external-integrations-development.mdx │ │ │ │ ├── hayhooks.mdx │ │ │ │ ├── logging.mdx │ │ │ │ └── tracing.mdx │ │ │ ├── document-stores/ │ │ │ │ ├── astradocumentstore.mdx │ │ │ │ ├── azureaisearchdocumentstore.mdx │ │ │ │ ├── chromadocumentstore.mdx │ │ │ │ ├── elasticsearch-document-store.mdx │ │ │ │ ├── inmemorydocumentstore.mdx │ │ │ │ ├── mongodbatlasdocumentstore.mdx │ │ │ │ ├── opensearch-document-store.mdx │ │ │ │ ├── pgvectordocumentstore.mdx │ │ │ │ ├── pinecone-document-store.mdx │ │ │ │ ├── qdrant-document-store.mdx │ │ │ │ ├── valkeydocumentstore.mdx │ │ │ │ └── weaviatedocumentstore.mdx │ │ │ ├── intro.mdx │ │ │ ├── optimization/ │ │ │ │ ├── advanced-rag-techniques/ │ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx │ │ │ │ ├── advanced-rag-techniques.mdx │ │ │ │ ├── evaluation/ │ │ │ │ │ ├── model-based-evaluation.mdx │ │ │ │ │ └── statistical-evaluation.mdx │ │ │ │ └── evaluation.mdx │ │ │ ├── overview/ │ │ │ │ ├── breaking-change-policy.mdx │ │ │ │ ├── faq.mdx │ │ │ │ ├── get-started.mdx │ │ │ │ ├── installation.mdx │ │ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx │ │ │ │ ├── migration.mdx │ │ │ │ └── telemetry.mdx │ │ │ ├── pipeline-components/ │ │ │ │ ├── agents-1/ │ │ │ │ │ └── agent.mdx │ │ │ │ ├── audio/ │ │ │ │ │ ├── external-integrations-audio.mdx │ │ │ │ │ ├── localwhispertranscriber.mdx │ │ │ │ │ └── remotewhispertranscriber.mdx │ │ │ │ ├── audio.mdx │ │ │ │ ├── builders/ │ │ │ │ │ ├── answerbuilder.mdx │ │ │ │ │ ├── chatpromptbuilder.mdx │ │ │ │ │ └── promptbuilder.mdx │ │ │ │ ├── builders.mdx │ │ │ │ ├── caching/ │ │ │ │ │ └── cachechecker.mdx │ │ │ │ ├── classifiers/ │ │ │ │ │ ├── documentlanguageclassifier.mdx │ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx │ │ │ │ ├── classifiers.mdx │ │ │ │ ├── connectors/ │ │ │ │ │ ├── external-integrations-connectors.mdx │ │ │ │ │ ├── githubfileeditor.mdx │ │ │ │ │ ├── githubissuecommenter.mdx │ │ │ │ │ ├── githubissueviewer.mdx │ │ │ │ │ ├── githubprcreator.mdx │ │ │ │ │ ├── githubrepoforker.mdx │ │ │ │ │ ├── githubrepoviewer.mdx │ │ │ │ │ ├── jinareaderconnector.mdx │ │ │ │ │ ├── langfuseconnector.mdx │ │ │ │ │ ├── openapiconnector.mdx │ │ │ │ │ ├── openapiserviceconnector.mdx │ │ │ │ │ └── weaveconnector.mdx │ │ │ │ ├── connectors.mdx │ │ │ │ ├── converters/ │ │ │ │ │ ├── azureocrdocumentconverter.mdx │ │ │ │ │ ├── csvtodocument.mdx │ │ │ │ │ ├── documenttoimagecontent.mdx │ │ │ │ │ ├── docxtodocument.mdx │ │ │ │ │ ├── external-integrations-converters.mdx │ │ │ │ │ ├── htmltodocument.mdx │ │ │ │ │ ├── imagefiletodocument.mdx │ │ │ │ │ ├── imagefiletoimagecontent.mdx │ │ │ │ │ ├── jsonconverter.mdx │ │ │ │ │ ├── markdowntodocument.mdx │ │ │ │ │ ├── mistralocrdocumentconverter.mdx │ │ │ │ │ ├── msgtodocument.mdx │ │ │ │ │ ├── multifileconverter.mdx │ │ │ │ │ ├── openapiservicetofunctions.mdx │ │ │ │ │ ├── outputadapter.mdx │ │ │ │ │ ├── paddleocrvldocumentconverter.mdx │ │ │ │ │ ├── pdfminertodocument.mdx │ │ │ │ │ ├── pdftoimagecontent.mdx │ │ │ │ │ ├── pptxtodocument.mdx │ │ │ │ │ ├── pypdftodocument.mdx │ │ │ │ │ ├── textfiletodocument.mdx │ │ │ │ │ ├── tikadocumentconverter.mdx │ │ │ │ │ ├── unstructuredfileconverter.mdx │ │ │ │ │ └── xlsxtodocument.mdx │ │ │ │ ├── converters.mdx │ │ │ │ ├── downloaders/ │ │ │ │ │ └── s3downloader.mdx │ │ │ │ ├── embedders/ │ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx │ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx │ │ │ │ │ ├── amazonbedrocktextembedder.mdx │ │ │ │ │ ├── azureopenaidocumentembedder.mdx │ │ │ │ │ ├── azureopenaitextembedder.mdx │ │ │ │ │ ├── choosing-the-right-embedder.mdx │ │ │ │ │ ├── coheredocumentembedder.mdx │ │ │ │ │ ├── coheredocumentimageembedder.mdx │ │ │ │ │ ├── coheretextembedder.mdx │ │ │ │ │ ├── external-integrations-embedders.mdx │ │ │ │ │ ├── fastembeddocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsetextembedder.mdx │ │ │ │ │ ├── fastembedtextembedder.mdx │ │ │ │ │ ├── googlegenaidocumentembedder.mdx │ │ │ │ │ ├── googlegenaitextembedder.mdx │ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx │ │ │ │ │ ├── huggingfaceapitextembedder.mdx │ │ │ │ │ ├── jinadocumentembedder.mdx │ │ │ │ │ ├── jinadocumentimageembedder.mdx │ │ │ │ │ ├── jinatextembedder.mdx │ │ │ │ │ ├── mistraldocumentembedder.mdx │ │ │ │ │ ├── mistraltextembedder.mdx │ │ │ │ │ ├── nvidiadocumentembedder.mdx │ │ │ │ │ ├── nvidiatextembedder.mdx │ │ │ │ │ ├── ollamadocumentembedder.mdx │ │ │ │ │ ├── ollamatextembedder.mdx │ │ │ │ │ ├── openaidocumentembedder.mdx │ │ │ │ │ ├── openaitextembedder.mdx │ │ │ │ │ ├── optimumdocumentembedder.mdx │ │ │ │ │ ├── optimumtextembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx │ │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx │ │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx │ │ │ │ │ ├── sentencetransformerstextembedder.mdx │ │ │ │ │ ├── stackitdocumentembedder.mdx │ │ │ │ │ ├── stackittextembedder.mdx │ │ │ │ │ ├── vertexaidocumentembedder.mdx │ │ │ │ │ ├── vertexaitextembedder.mdx │ │ │ │ │ ├── watsonxdocumentembedder.mdx │ │ │ │ │ └── watsonxtextembedder.mdx │ │ │ │ ├── embedders.mdx │ │ │ │ ├── evaluators/ │ │ │ │ │ ├── answerexactmatchevaluator.mdx │ │ │ │ │ ├── contextrelevanceevaluator.mdx │ │ │ │ │ ├── deepevalevaluator.mdx │ │ │ │ │ ├── documentmapevaluator.mdx │ │ │ │ │ ├── documentmrrevaluator.mdx │ │ │ │ │ ├── documentndcgevaluator.mdx │ │ │ │ │ ├── documentrecallevaluator.mdx │ │ │ │ │ ├── external-integrations-evaluators.mdx │ │ │ │ │ ├── faithfulnessevaluator.mdx │ │ │ │ │ ├── llmevaluator.mdx │ │ │ │ │ ├── ragasevaluator.mdx │ │ │ │ │ └── sasevaluator.mdx │ │ │ │ ├── evaluators.mdx │ │ │ │ ├── extractors/ │ │ │ │ │ ├── llmdocumentcontentextractor.mdx │ │ │ │ │ ├── llmmetadataextractor.mdx │ │ │ │ │ ├── namedentityextractor.mdx │ │ │ │ │ └── regextextextractor.mdx │ │ │ │ ├── extractors.mdx │ │ │ │ ├── fetchers/ │ │ │ │ │ ├── external-integrations-fetchers.mdx │ │ │ │ │ └── linkcontentfetcher.mdx │ │ │ │ ├── fetchers.mdx │ │ │ │ ├── generators/ │ │ │ │ │ ├── aimllapichatgenerator.mdx │ │ │ │ │ ├── amazonbedrockchatgenerator.mdx │ │ │ │ │ ├── amazonbedrockgenerator.mdx │ │ │ │ │ ├── anthropicchatgenerator.mdx │ │ │ │ │ ├── anthropicgenerator.mdx │ │ │ │ │ ├── anthropicvertexchatgenerator.mdx │ │ │ │ │ ├── azureopenaichatgenerator.mdx │ │ │ │ │ ├── azureopenaigenerator.mdx │ │ │ │ │ ├── azureopenairesponseschatgenerator.mdx │ │ │ │ │ ├── coherechatgenerator.mdx │ │ │ │ │ ├── coheregenerator.mdx │ │ │ │ │ ├── cometapichatgenerator.mdx │ │ │ │ │ ├── dalleimagegenerator.mdx │ │ │ │ │ ├── external-integrations-generators.mdx │ │ │ │ │ ├── fallbackchatgenerator.mdx │ │ │ │ │ ├── googleaigeminichatgenerator.mdx │ │ │ │ │ ├── googleaigeminigenerator.mdx │ │ │ │ │ ├── googlegenaichatgenerator.mdx │ │ │ │ │ ├── guides-to-generators/ │ │ │ │ │ │ ├── choosing-the-right-generator.mdx │ │ │ │ │ │ ├── function-calling.mdx │ │ │ │ │ │ └── generators-vs-chat-generators.mdx │ │ │ │ │ ├── huggingfaceapichatgenerator.mdx │ │ │ │ │ ├── huggingfaceapigenerator.mdx │ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx │ │ │ │ │ ├── huggingfacelocalgenerator.mdx │ │ │ │ │ ├── llamacppchatgenerator.mdx │ │ │ │ │ ├── llamacppgenerator.mdx │ │ │ │ │ ├── llamastackchatgenerator.mdx │ │ │ │ │ ├── metallamachatgenerator.mdx │ │ │ │ │ ├── mistralchatgenerator.mdx │ │ │ │ │ ├── nvidiachatgenerator.mdx │ │ │ │ │ ├── nvidiagenerator.mdx │ │ │ │ │ ├── ollamachatgenerator.mdx │ │ │ │ │ ├── ollamagenerator.mdx │ │ │ │ │ ├── openaichatgenerator.mdx │ │ │ │ │ ├── openaigenerator.mdx │ │ │ │ │ ├── openairesponseschatgenerator.mdx │ │ │ │ │ ├── openrouterchatgenerator.mdx │ │ │ │ │ ├── sagemakergenerator.mdx │ │ │ │ │ ├── stackitchatgenerator.mdx │ │ │ │ │ ├── togetheraichatgenerator.mdx │ │ │ │ │ ├── togetheraigenerator.mdx │ │ │ │ │ ├── vertexaicodegenerator.mdx │ │ │ │ │ ├── vertexaigeminichatgenerator.mdx │ │ │ │ │ ├── vertexaigeminigenerator.mdx │ │ │ │ │ ├── vertexaiimagecaptioner.mdx │ │ │ │ │ ├── vertexaiimagegenerator.mdx │ │ │ │ │ ├── vertexaiimageqa.mdx │ │ │ │ │ ├── vertexaitextgenerator.mdx │ │ │ │ │ ├── watsonxchatgenerator.mdx │ │ │ │ │ └── watsonxgenerator.mdx │ │ │ │ ├── generators.mdx │ │ │ │ ├── joiners/ │ │ │ │ │ ├── answerjoiner.mdx │ │ │ │ │ ├── branchjoiner.mdx │ │ │ │ │ ├── documentjoiner.mdx │ │ │ │ │ ├── listjoiner.mdx │ │ │ │ │ └── stringjoiner.mdx │ │ │ │ ├── joiners.mdx │ │ │ │ ├── preprocessors/ │ │ │ │ │ ├── chinesedocumentsplitter.mdx │ │ │ │ │ ├── csvdocumentcleaner.mdx │ │ │ │ │ ├── csvdocumentsplitter.mdx │ │ │ │ │ ├── documentcleaner.mdx │ │ │ │ │ ├── documentpreprocessor.mdx │ │ │ │ │ ├── documentsplitter.mdx │ │ │ │ │ ├── embeddingbaseddocumentsplitter.mdx │ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx │ │ │ │ │ ├── markdownheadersplitter.mdx │ │ │ │ │ ├── recursivesplitter.mdx │ │ │ │ │ └── textcleaner.mdx │ │ │ │ ├── preprocessors.mdx │ │ │ │ ├── query/ │ │ │ │ │ └── queryexpander.mdx │ │ │ │ ├── rankers/ │ │ │ │ │ ├── amazonbedrockranker.mdx │ │ │ │ │ ├── choosing-the-right-ranker.mdx │ │ │ │ │ ├── cohereranker.mdx │ │ │ │ │ ├── external-integrations-rankers.mdx │ │ │ │ │ ├── fastembedranker.mdx │ │ │ │ │ ├── huggingfaceteiranker.mdx │ │ │ │ │ ├── jinaranker.mdx │ │ │ │ │ ├── lostinthemiddleranker.mdx │ │ │ │ │ ├── metafieldgroupingranker.mdx │ │ │ │ │ ├── metafieldranker.mdx │ │ │ │ │ ├── nvidiaranker.mdx │ │ │ │ │ ├── pyversityranker.mdx │ │ │ │ │ ├── sentencetransformersdiversityranker.mdx │ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx │ │ │ │ │ └── transformerssimilarityranker.mdx │ │ │ │ ├── rankers.mdx │ │ │ │ ├── readers/ │ │ │ │ │ └── extractivereader.mdx │ │ │ │ ├── readers.mdx │ │ │ │ ├── retrievers/ │ │ │ │ │ ├── astraretriever.mdx │ │ │ │ │ ├── automergingretriever.mdx │ │ │ │ │ ├── azureaisearchbm25retriever.mdx │ │ │ │ │ ├── azureaisearchembeddingretriever.mdx │ │ │ │ │ ├── azureaisearchhybridretriever.mdx │ │ │ │ │ ├── chromaembeddingretriever.mdx │ │ │ │ │ ├── chromaqueryretriever.mdx │ │ │ │ │ ├── elasticsearchbm25retriever.mdx │ │ │ │ │ ├── elasticsearchembeddingretriever.mdx │ │ │ │ │ ├── filterretriever.mdx │ │ │ │ │ ├── inmemorybm25retriever.mdx │ │ │ │ │ ├── inmemoryembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx │ │ │ │ │ ├── multiqueryembeddingretriever.mdx │ │ │ │ │ ├── multiquerytextretriever.mdx │ │ │ │ │ ├── opensearchbm25retriever.mdx │ │ │ │ │ ├── opensearchembeddingretriever.mdx │ │ │ │ │ ├── opensearchhybridretriever.mdx │ │ │ │ │ ├── pgvectorembeddingretriever.mdx │ │ │ │ │ ├── pgvectorkeywordretriever.mdx │ │ │ │ │ ├── pineconedenseretriever.mdx │ │ │ │ │ ├── qdrantembeddingretriever.mdx │ │ │ │ │ ├── qdranthybridretriever.mdx │ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx │ │ │ │ │ ├── sentencewindowretrieval.mdx │ │ │ │ │ ├── snowflaketableretriever.mdx │ │ │ │ │ ├── valkeyembeddingretriever.mdx │ │ │ │ │ ├── weaviatebm25retriever.mdx │ │ │ │ │ ├── weaviateembeddingretriever.mdx │ │ │ │ │ └── weaviatehybridretriever.mdx │ │ │ │ ├── retrievers.mdx │ │ │ │ ├── routers/ │ │ │ │ │ ├── conditionalrouter.mdx │ │ │ │ │ ├── documentlengthrouter.mdx │ │ │ │ │ ├── documenttyperouter.mdx │ │ │ │ │ ├── filetyperouter.mdx │ │ │ │ │ ├── llmmessagesrouter.mdx │ │ │ │ │ ├── metadatarouter.mdx │ │ │ │ │ ├── textlanguagerouter.mdx │ │ │ │ │ ├── transformerstextrouter.mdx │ │ │ │ │ └── transformerszeroshottextrouter.mdx │ │ │ │ ├── routers.mdx │ │ │ │ ├── samplers/ │ │ │ │ │ └── toppsampler.mdx │ │ │ │ ├── tools/ │ │ │ │ │ └── toolinvoker.mdx │ │ │ │ ├── validators/ │ │ │ │ │ └── jsonschemavalidator.mdx │ │ │ │ ├── websearch/ │ │ │ │ │ ├── external-integrations-websearch.mdx │ │ │ │ │ ├── searchapiwebsearch.mdx │ │ │ │ │ └── serperdevwebsearch.mdx │ │ │ │ ├── websearch.mdx │ │ │ │ └── writers/ │ │ │ │ └── documentwriter.mdx │ │ │ └── tools/ │ │ │ ├── componenttool.mdx │ │ │ ├── mcptool.mdx │ │ │ ├── mcptoolset.mdx │ │ │ ├── pipelinetool.mdx │ │ │ ├── ready-made-tools/ │ │ │ │ ├── githubfileeditortool.mdx │ │ │ │ ├── githubissuecommentertool.mdx │ │ │ │ ├── githubissueviewertool.mdx │ │ │ │ ├── githubprcreatortool.mdx │ │ │ │ └── githubrepoviewertool.mdx │ │ │ ├── tool.mdx │ │ │ └── toolset.mdx │ │ ├── version-2.25/ │ │ │ ├── _templates/ │ │ │ │ ├── component-template.mdx │ │ │ │ └── document-store-template.mdx │ │ │ ├── concepts/ │ │ │ │ ├── agents/ │ │ │ │ │ └── state.mdx │ │ │ │ ├── agents.mdx │ │ │ │ ├── components/ │ │ │ │ │ ├── custom-components.mdx │ │ │ │ │ └── supercomponents.mdx │ │ │ │ ├── components.mdx │ │ │ │ ├── concepts-overview.mdx │ │ │ │ ├── data-classes/ │ │ │ │ │ └── chatmessage.mdx │ │ │ │ ├── data-classes.mdx │ │ │ │ ├── device-management.mdx │ │ │ │ ├── document-store/ │ │ │ │ │ ├── choosing-a-document-store.mdx │ │ │ │ │ └── creating-custom-document-stores.mdx │ │ │ │ ├── document-store.mdx │ │ │ │ ├── experimental-package.mdx │ │ │ │ ├── integrations.mdx │ │ │ │ ├── jinja-templates.mdx │ │ │ │ ├── metadata-filtering.mdx │ │ │ │ ├── pipelines/ │ │ │ │ │ ├── asyncpipeline.mdx │ │ │ │ │ ├── creating-pipelines.mdx │ │ │ │ │ ├── debugging-pipelines.mdx │ │ │ │ │ ├── pipeline-breakpoints.mdx │ │ │ │ │ ├── pipeline-loops.mdx │ │ │ │ │ ├── serialization.mdx │ │ │ │ │ ├── smart-pipeline-connections.mdx │ │ │ │ │ └── visualizing-pipelines.mdx │ │ │ │ ├── pipelines.mdx │ │ │ │ └── secret-management.mdx │ │ │ ├── development/ │ │ │ │ ├── deployment/ │ │ │ │ │ ├── docker.mdx │ │ │ │ │ ├── kubernetes.mdx │ │ │ │ │ └── openshift.mdx │ │ │ │ ├── deployment.mdx │ │ │ │ ├── enabling-gpu-acceleration.mdx │ │ │ │ ├── external-integrations-development.mdx │ │ │ │ ├── hayhooks.mdx │ │ │ │ ├── logging.mdx │ │ │ │ └── tracing.mdx │ │ │ ├── document-stores/ │ │ │ │ ├── arcadedbdocumentstore.mdx │ │ │ │ ├── astradocumentstore.mdx │ │ │ │ ├── azureaisearchdocumentstore.mdx │ │ │ │ ├── chromadocumentstore.mdx │ │ │ │ ├── elasticsearch-document-store.mdx │ │ │ │ ├── faissdocumentstore.mdx │ │ │ │ ├── inmemorydocumentstore.mdx │ │ │ │ ├── mongodbatlasdocumentstore.mdx │ │ │ │ ├── opensearch-document-store.mdx │ │ │ │ ├── pgvectordocumentstore.mdx │ │ │ │ ├── pinecone-document-store.mdx │ │ │ │ ├── qdrant-document-store.mdx │ │ │ │ ├── valkeydocumentstore.mdx │ │ │ │ └── weaviatedocumentstore.mdx │ │ │ ├── intro.mdx │ │ │ ├── optimization/ │ │ │ │ ├── advanced-rag-techniques/ │ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx │ │ │ │ ├── advanced-rag-techniques.mdx │ │ │ │ ├── evaluation/ │ │ │ │ │ ├── model-based-evaluation.mdx │ │ │ │ │ └── statistical-evaluation.mdx │ │ │ │ └── evaluation.mdx │ │ │ ├── overview/ │ │ │ │ ├── breaking-change-policy.mdx │ │ │ │ ├── faq.mdx │ │ │ │ ├── get-started.mdx │ │ │ │ ├── installation.mdx │ │ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx │ │ │ │ ├── migration.mdx │ │ │ │ └── telemetry.mdx │ │ │ ├── pipeline-components/ │ │ │ │ ├── agents-1/ │ │ │ │ │ └── agent.mdx │ │ │ │ ├── audio/ │ │ │ │ │ ├── external-integrations-audio.mdx │ │ │ │ │ ├── localwhispertranscriber.mdx │ │ │ │ │ └── remotewhispertranscriber.mdx │ │ │ │ ├── audio.mdx │ │ │ │ ├── builders/ │ │ │ │ │ ├── answerbuilder.mdx │ │ │ │ │ ├── chatpromptbuilder.mdx │ │ │ │ │ └── promptbuilder.mdx │ │ │ │ ├── builders.mdx │ │ │ │ ├── caching/ │ │ │ │ │ └── cachechecker.mdx │ │ │ │ ├── classifiers/ │ │ │ │ │ ├── documentlanguageclassifier.mdx │ │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx │ │ │ │ ├── classifiers.mdx │ │ │ │ ├── connectors/ │ │ │ │ │ ├── external-integrations-connectors.mdx │ │ │ │ │ ├── githubfileeditor.mdx │ │ │ │ │ ├── githubissuecommenter.mdx │ │ │ │ │ ├── githubissueviewer.mdx │ │ │ │ │ ├── githubprcreator.mdx │ │ │ │ │ ├── githubrepoforker.mdx │ │ │ │ │ ├── githubrepoviewer.mdx │ │ │ │ │ ├── jinareaderconnector.mdx │ │ │ │ │ ├── langfuseconnector.mdx │ │ │ │ │ ├── openapiconnector.mdx │ │ │ │ │ ├── openapiserviceconnector.mdx │ │ │ │ │ └── weaveconnector.mdx │ │ │ │ ├── connectors.mdx │ │ │ │ ├── converters/ │ │ │ │ │ ├── azureocrdocumentconverter.mdx │ │ │ │ │ ├── csvtodocument.mdx │ │ │ │ │ ├── documenttoimagecontent.mdx │ │ │ │ │ ├── docxtodocument.mdx │ │ │ │ │ ├── external-integrations-converters.mdx │ │ │ │ │ ├── filetofilecontent.mdx │ │ │ │ │ ├── htmltodocument.mdx │ │ │ │ │ ├── imagefiletodocument.mdx │ │ │ │ │ ├── imagefiletoimagecontent.mdx │ │ │ │ │ ├── jsonconverter.mdx │ │ │ │ │ ├── markdowntodocument.mdx │ │ │ │ │ ├── mistralocrdocumentconverter.mdx │ │ │ │ │ ├── msgtodocument.mdx │ │ │ │ │ ├── multifileconverter.mdx │ │ │ │ │ ├── openapiservicetofunctions.mdx │ │ │ │ │ ├── outputadapter.mdx │ │ │ │ │ ├── paddleocrvldocumentconverter.mdx │ │ │ │ │ ├── pdfminertodocument.mdx │ │ │ │ │ ├── pdftoimagecontent.mdx │ │ │ │ │ ├── pptxtodocument.mdx │ │ │ │ │ ├── pypdftodocument.mdx │ │ │ │ │ ├── textfiletodocument.mdx │ │ │ │ │ ├── tikadocumentconverter.mdx │ │ │ │ │ ├── unstructuredfileconverter.mdx │ │ │ │ │ └── xlsxtodocument.mdx │ │ │ │ ├── converters.mdx │ │ │ │ ├── downloaders/ │ │ │ │ │ └── s3downloader.mdx │ │ │ │ ├── embedders/ │ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx │ │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx │ │ │ │ │ ├── amazonbedrocktextembedder.mdx │ │ │ │ │ ├── azureopenaidocumentembedder.mdx │ │ │ │ │ ├── azureopenaitextembedder.mdx │ │ │ │ │ ├── choosing-the-right-embedder.mdx │ │ │ │ │ ├── coheredocumentembedder.mdx │ │ │ │ │ ├── coheredocumentimageembedder.mdx │ │ │ │ │ ├── coheretextembedder.mdx │ │ │ │ │ ├── external-integrations-embedders.mdx │ │ │ │ │ ├── fastembeddocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsedocumentembedder.mdx │ │ │ │ │ ├── fastembedsparsetextembedder.mdx │ │ │ │ │ ├── fastembedtextembedder.mdx │ │ │ │ │ ├── googlegenaidocumentembedder.mdx │ │ │ │ │ ├── googlegenaimultimodaldocumentembedder.mdx │ │ │ │ │ ├── googlegenaitextembedder.mdx │ │ │ │ │ ├── huggingfaceapidocumentembedder.mdx │ │ │ │ │ ├── huggingfaceapitextembedder.mdx │ │ │ │ │ ├── jinadocumentembedder.mdx │ │ │ │ │ ├── jinadocumentimageembedder.mdx │ │ │ │ │ ├── jinatextembedder.mdx │ │ │ │ │ ├── mistraldocumentembedder.mdx │ │ │ │ │ ├── mistraltextembedder.mdx │ │ │ │ │ ├── nvidiadocumentembedder.mdx │ │ │ │ │ ├── nvidiatextembedder.mdx │ │ │ │ │ ├── ollamadocumentembedder.mdx │ │ │ │ │ ├── ollamatextembedder.mdx │ │ │ │ │ ├── openaidocumentembedder.mdx │ │ │ │ │ ├── openaitextembedder.mdx │ │ │ │ │ ├── optimumdocumentembedder.mdx │ │ │ │ │ ├── optimumtextembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentembedder.mdx │ │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx │ │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx │ │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx │ │ │ │ │ ├── sentencetransformerstextembedder.mdx │ │ │ │ │ ├── stackitdocumentembedder.mdx │ │ │ │ │ ├── stackittextembedder.mdx │ │ │ │ │ ├── vertexaidocumentembedder.mdx │ │ │ │ │ ├── vertexaitextembedder.mdx │ │ │ │ │ ├── watsonxdocumentembedder.mdx │ │ │ │ │ └── watsonxtextembedder.mdx │ │ │ │ ├── embedders.mdx │ │ │ │ ├── evaluators/ │ │ │ │ │ ├── answerexactmatchevaluator.mdx │ │ │ │ │ ├── contextrelevanceevaluator.mdx │ │ │ │ │ ├── deepevalevaluator.mdx │ │ │ │ │ ├── documentmapevaluator.mdx │ │ │ │ │ ├── documentmrrevaluator.mdx │ │ │ │ │ ├── documentndcgevaluator.mdx │ │ │ │ │ ├── documentrecallevaluator.mdx │ │ │ │ │ ├── external-integrations-evaluators.mdx │ │ │ │ │ ├── faithfulnessevaluator.mdx │ │ │ │ │ ├── llmevaluator.mdx │ │ │ │ │ ├── ragasevaluator.mdx │ │ │ │ │ └── sasevaluator.mdx │ │ │ │ ├── evaluators.mdx │ │ │ │ ├── extractors/ │ │ │ │ │ ├── llmdocumentcontentextractor.mdx │ │ │ │ │ ├── llmmetadataextractor.mdx │ │ │ │ │ ├── namedentityextractor.mdx │ │ │ │ │ └── regextextextractor.mdx │ │ │ │ ├── extractors.mdx │ │ │ │ ├── fetchers/ │ │ │ │ │ ├── external-integrations-fetchers.mdx │ │ │ │ │ ├── firecrawlcrawler.mdx │ │ │ │ │ └── linkcontentfetcher.mdx │ │ │ │ ├── fetchers.mdx │ │ │ │ ├── generators/ │ │ │ │ │ ├── aimllapichatgenerator.mdx │ │ │ │ │ ├── amazonbedrockchatgenerator.mdx │ │ │ │ │ ├── amazonbedrockgenerator.mdx │ │ │ │ │ ├── anthropicchatgenerator.mdx │ │ │ │ │ ├── anthropicgenerator.mdx │ │ │ │ │ ├── anthropicvertexchatgenerator.mdx │ │ │ │ │ ├── azureopenaichatgenerator.mdx │ │ │ │ │ ├── azureopenaigenerator.mdx │ │ │ │ │ ├── azureopenairesponseschatgenerator.mdx │ │ │ │ │ ├── coherechatgenerator.mdx │ │ │ │ │ ├── coheregenerator.mdx │ │ │ │ │ ├── cometapichatgenerator.mdx │ │ │ │ │ ├── dalleimagegenerator.mdx │ │ │ │ │ ├── external-integrations-generators.mdx │ │ │ │ │ ├── fallbackchatgenerator.mdx │ │ │ │ │ ├── googleaigeminichatgenerator.mdx │ │ │ │ │ ├── googleaigeminigenerator.mdx │ │ │ │ │ ├── googlegenaichatgenerator.mdx │ │ │ │ │ ├── guides-to-generators/ │ │ │ │ │ │ ├── choosing-the-right-generator.mdx │ │ │ │ │ │ ├── function-calling.mdx │ │ │ │ │ │ └── generators-vs-chat-generators.mdx │ │ │ │ │ ├── huggingfaceapichatgenerator.mdx │ │ │ │ │ ├── huggingfaceapigenerator.mdx │ │ │ │ │ ├── huggingfacelocalchatgenerator.mdx │ │ │ │ │ ├── huggingfacelocalgenerator.mdx │ │ │ │ │ ├── llamacppchatgenerator.mdx │ │ │ │ │ ├── llamacppgenerator.mdx │ │ │ │ │ ├── llamastackchatgenerator.mdx │ │ │ │ │ ├── metallamachatgenerator.mdx │ │ │ │ │ ├── mistralchatgenerator.mdx │ │ │ │ │ ├── nvidiachatgenerator.mdx │ │ │ │ │ ├── nvidiagenerator.mdx │ │ │ │ │ ├── ollamachatgenerator.mdx │ │ │ │ │ ├── ollamagenerator.mdx │ │ │ │ │ ├── openaichatgenerator.mdx │ │ │ │ │ ├── openaigenerator.mdx │ │ │ │ │ ├── openairesponseschatgenerator.mdx │ │ │ │ │ ├── openrouterchatgenerator.mdx │ │ │ │ │ ├── sagemakergenerator.mdx │ │ │ │ │ ├── stackitchatgenerator.mdx │ │ │ │ │ ├── togetheraichatgenerator.mdx │ │ │ │ │ ├── togetheraigenerator.mdx │ │ │ │ │ ├── vertexaicodegenerator.mdx │ │ │ │ │ ├── vertexaigeminichatgenerator.mdx │ │ │ │ │ ├── vertexaigeminigenerator.mdx │ │ │ │ │ ├── vertexaiimagecaptioner.mdx │ │ │ │ │ ├── vertexaiimagegenerator.mdx │ │ │ │ │ ├── vertexaiimageqa.mdx │ │ │ │ │ ├── vertexaitextgenerator.mdx │ │ │ │ │ ├── watsonxchatgenerator.mdx │ │ │ │ │ └── watsonxgenerator.mdx │ │ │ │ ├── generators.mdx │ │ │ │ ├── joiners/ │ │ │ │ │ ├── answerjoiner.mdx │ │ │ │ │ ├── branchjoiner.mdx │ │ │ │ │ ├── documentjoiner.mdx │ │ │ │ │ ├── listjoiner.mdx │ │ │ │ │ └── stringjoiner.mdx │ │ │ │ ├── joiners.mdx │ │ │ │ ├── preprocessors/ │ │ │ │ │ ├── chinesedocumentsplitter.mdx │ │ │ │ │ ├── csvdocumentcleaner.mdx │ │ │ │ │ ├── csvdocumentsplitter.mdx │ │ │ │ │ ├── documentcleaner.mdx │ │ │ │ │ ├── documentpreprocessor.mdx │ │ │ │ │ ├── documentsplitter.mdx │ │ │ │ │ ├── embeddingbaseddocumentsplitter.mdx │ │ │ │ │ ├── hierarchicaldocumentsplitter.mdx │ │ │ │ │ ├── markdownheadersplitter.mdx │ │ │ │ │ ├── recursivesplitter.mdx │ │ │ │ │ └── textcleaner.mdx │ │ │ │ ├── preprocessors.mdx │ │ │ │ ├── query/ │ │ │ │ │ └── queryexpander.mdx │ │ │ │ ├── rankers/ │ │ │ │ │ ├── amazonbedrockranker.mdx │ │ │ │ │ ├── choosing-the-right-ranker.mdx │ │ │ │ │ ├── cohereranker.mdx │ │ │ │ │ ├── external-integrations-rankers.mdx │ │ │ │ │ ├── fastembedranker.mdx │ │ │ │ │ ├── huggingfaceteiranker.mdx │ │ │ │ │ ├── jinaranker.mdx │ │ │ │ │ ├── lostinthemiddleranker.mdx │ │ │ │ │ ├── metafieldgroupingranker.mdx │ │ │ │ │ ├── metafieldranker.mdx │ │ │ │ │ ├── nvidiaranker.mdx │ │ │ │ │ ├── pyversityranker.mdx │ │ │ │ │ ├── sentencetransformersdiversityranker.mdx │ │ │ │ │ ├── sentencetransformerssimilarityranker.mdx │ │ │ │ │ └── transformerssimilarityranker.mdx │ │ │ │ ├── rankers.mdx │ │ │ │ ├── readers/ │ │ │ │ │ └── extractivereader.mdx │ │ │ │ ├── readers.mdx │ │ │ │ ├── retrievers/ │ │ │ │ │ ├── arcadedbembeddingretriever.mdx │ │ │ │ │ ├── astraretriever.mdx │ │ │ │ │ ├── automergingretriever.mdx │ │ │ │ │ ├── azureaisearchbm25retriever.mdx │ │ │ │ │ ├── azureaisearchembeddingretriever.mdx │ │ │ │ │ ├── azureaisearchhybridretriever.mdx │ │ │ │ │ ├── chromaembeddingretriever.mdx │ │ │ │ │ ├── chromaqueryretriever.mdx │ │ │ │ │ ├── elasticsearchbm25retriever.mdx │ │ │ │ │ ├── elasticsearchembeddingretriever.mdx │ │ │ │ │ ├── faissembeddingretriever.mdx │ │ │ │ │ ├── filterretriever.mdx │ │ │ │ │ ├── inmemorybm25retriever.mdx │ │ │ │ │ ├── inmemoryembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasembeddingretriever.mdx │ │ │ │ │ ├── mongodbatlasfulltextretriever.mdx │ │ │ │ │ ├── multiqueryembeddingretriever.mdx │ │ │ │ │ ├── multiquerytextretriever.mdx │ │ │ │ │ ├── opensearchbm25retriever.mdx │ │ │ │ │ ├── opensearchembeddingretriever.mdx │ │ │ │ │ ├── opensearchhybridretriever.mdx │ │ │ │ │ ├── pgvectorembeddingretriever.mdx │ │ │ │ │ ├── pgvectorkeywordretriever.mdx │ │ │ │ │ ├── pineconedenseretriever.mdx │ │ │ │ │ ├── qdrantembeddingretriever.mdx │ │ │ │ │ ├── qdranthybridretriever.mdx │ │ │ │ │ ├── qdrantsparseembeddingretriever.mdx │ │ │ │ │ ├── sentencewindowretrieval.mdx │ │ │ │ │ ├── snowflaketableretriever.mdx │ │ │ │ │ ├── valkeyembeddingretriever.mdx │ │ │ │ │ ├── weaviatebm25retriever.mdx │ │ │ │ │ ├── weaviateembeddingretriever.mdx │ │ │ │ │ └── weaviatehybridretriever.mdx │ │ │ │ ├── retrievers.mdx │ │ │ │ ├── routers/ │ │ │ │ │ ├── conditionalrouter.mdx │ │ │ │ │ ├── documentlengthrouter.mdx │ │ │ │ │ ├── documenttyperouter.mdx │ │ │ │ │ ├── filetyperouter.mdx │ │ │ │ │ ├── llmmessagesrouter.mdx │ │ │ │ │ ├── metadatarouter.mdx │ │ │ │ │ ├── textlanguagerouter.mdx │ │ │ │ │ ├── transformerstextrouter.mdx │ │ │ │ │ └── transformerszeroshottextrouter.mdx │ │ │ │ ├── routers.mdx │ │ │ │ ├── samplers/ │ │ │ │ │ └── toppsampler.mdx │ │ │ │ ├── tools/ │ │ │ │ │ └── toolinvoker.mdx │ │ │ │ ├── translators/ │ │ │ │ │ └── laradocumenttranslator.mdx │ │ │ │ ├── validators/ │ │ │ │ │ └── jsonschemavalidator.mdx │ │ │ │ ├── websearch/ │ │ │ │ │ ├── external-integrations-websearch.mdx │ │ │ │ │ ├── firecrawlwebsearch.mdx │ │ │ │ │ ├── searchapiwebsearch.mdx │ │ │ │ │ └── serperdevwebsearch.mdx │ │ │ │ ├── websearch.mdx │ │ │ │ └── writers/ │ │ │ │ └── documentwriter.mdx │ │ │ └── tools/ │ │ │ ├── componenttool.mdx │ │ │ ├── mcptool.mdx │ │ │ ├── mcptoolset.mdx │ │ │ ├── pipelinetool.mdx │ │ │ ├── ready-made-tools/ │ │ │ │ ├── githubfileeditortool.mdx │ │ │ │ ├── githubissuecommentertool.mdx │ │ │ │ ├── githubissueviewertool.mdx │ │ │ │ ├── githubprcreatortool.mdx │ │ │ │ └── githubrepoviewertool.mdx │ │ │ ├── searchabletoolset.mdx │ │ │ ├── tool.mdx │ │ │ └── toolset.mdx │ │ └── version-2.26/ │ │ ├── _templates/ │ │ │ ├── component-template.mdx │ │ │ └── document-store-template.mdx │ │ ├── concepts/ │ │ │ ├── agents/ │ │ │ │ └── state.mdx │ │ │ ├── agents.mdx │ │ │ ├── components/ │ │ │ │ ├── custom-components.mdx │ │ │ │ └── supercomponents.mdx │ │ │ ├── components.mdx │ │ │ ├── concepts-overview.mdx │ │ │ ├── data-classes/ │ │ │ │ └── chatmessage.mdx │ │ │ ├── data-classes.mdx │ │ │ ├── device-management.mdx │ │ │ ├── document-store/ │ │ │ │ ├── choosing-a-document-store.mdx │ │ │ │ └── creating-custom-document-stores.mdx │ │ │ ├── document-store.mdx │ │ │ ├── experimental-package.mdx │ │ │ ├── integrations.mdx │ │ │ ├── jinja-templates.mdx │ │ │ ├── metadata-filtering.mdx │ │ │ ├── pipelines/ │ │ │ │ ├── asyncpipeline.mdx │ │ │ │ ├── creating-pipelines.mdx │ │ │ │ ├── debugging-pipelines.mdx │ │ │ │ ├── pipeline-breakpoints.mdx │ │ │ │ ├── pipeline-loops.mdx │ │ │ │ ├── serialization.mdx │ │ │ │ ├── smart-pipeline-connections.mdx │ │ │ │ └── visualizing-pipelines.mdx │ │ │ ├── pipelines.mdx │ │ │ └── secret-management.mdx │ │ ├── development/ │ │ │ ├── deployment/ │ │ │ │ ├── docker.mdx │ │ │ │ ├── kubernetes.mdx │ │ │ │ └── openshift.mdx │ │ │ ├── deployment.mdx │ │ │ ├── enabling-gpu-acceleration.mdx │ │ │ ├── external-integrations-development.mdx │ │ │ ├── hayhooks.mdx │ │ │ ├── logging.mdx │ │ │ └── tracing.mdx │ │ ├── document-stores/ │ │ │ ├── arcadedbdocumentstore.mdx │ │ │ ├── astradocumentstore.mdx │ │ │ ├── azureaisearchdocumentstore.mdx │ │ │ ├── chromadocumentstore.mdx │ │ │ ├── elasticsearch-document-store.mdx │ │ │ ├── faissdocumentstore.mdx │ │ │ ├── inmemorydocumentstore.mdx │ │ │ ├── mongodbatlasdocumentstore.mdx │ │ │ ├── opensearch-document-store.mdx │ │ │ ├── pgvectordocumentstore.mdx │ │ │ ├── pinecone-document-store.mdx │ │ │ ├── qdrant-document-store.mdx │ │ │ ├── valkeydocumentstore.mdx │ │ │ └── weaviatedocumentstore.mdx │ │ ├── intro.mdx │ │ ├── optimization/ │ │ │ ├── advanced-rag-techniques/ │ │ │ │ └── hypothetical-document-embeddings-hyde.mdx │ │ │ ├── advanced-rag-techniques.mdx │ │ │ ├── evaluation/ │ │ │ │ ├── model-based-evaluation.mdx │ │ │ │ └── statistical-evaluation.mdx │ │ │ └── evaluation.mdx │ │ ├── overview/ │ │ │ ├── breaking-change-policy.mdx │ │ │ ├── faq.mdx │ │ │ ├── get-started.mdx │ │ │ ├── installation.mdx │ │ │ ├── migrating-from-langgraphlangchain-to-haystack.mdx │ │ │ ├── migration.mdx │ │ │ └── telemetry.mdx │ │ ├── pipeline-components/ │ │ │ ├── agents-1/ │ │ │ │ └── agent.mdx │ │ │ ├── audio/ │ │ │ │ ├── external-integrations-audio.mdx │ │ │ │ ├── localwhispertranscriber.mdx │ │ │ │ └── remotewhispertranscriber.mdx │ │ │ ├── audio.mdx │ │ │ ├── builders/ │ │ │ │ ├── answerbuilder.mdx │ │ │ │ ├── chatpromptbuilder.mdx │ │ │ │ └── promptbuilder.mdx │ │ │ ├── builders.mdx │ │ │ ├── caching/ │ │ │ │ └── cachechecker.mdx │ │ │ ├── classifiers/ │ │ │ │ ├── documentlanguageclassifier.mdx │ │ │ │ └── transformerszeroshotdocumentclassifier.mdx │ │ │ ├── classifiers.mdx │ │ │ ├── connectors/ │ │ │ │ ├── external-integrations-connectors.mdx │ │ │ │ ├── githubfileeditor.mdx │ │ │ │ ├── githubissuecommenter.mdx │ │ │ │ ├── githubissueviewer.mdx │ │ │ │ ├── githubprcreator.mdx │ │ │ │ ├── githubrepoforker.mdx │ │ │ │ ├── githubrepoviewer.mdx │ │ │ │ ├── jinareaderconnector.mdx │ │ │ │ ├── langfuseconnector.mdx │ │ │ │ ├── openapiconnector.mdx │ │ │ │ ├── openapiserviceconnector.mdx │ │ │ │ └── weaveconnector.mdx │ │ │ ├── connectors.mdx │ │ │ ├── converters/ │ │ │ │ ├── azureocrdocumentconverter.mdx │ │ │ │ ├── csvtodocument.mdx │ │ │ │ ├── documenttoimagecontent.mdx │ │ │ │ ├── docxtodocument.mdx │ │ │ │ ├── external-integrations-converters.mdx │ │ │ │ ├── filetofilecontent.mdx │ │ │ │ ├── htmltodocument.mdx │ │ │ │ ├── imagefiletodocument.mdx │ │ │ │ ├── imagefiletoimagecontent.mdx │ │ │ │ ├── jsonconverter.mdx │ │ │ │ ├── markdowntodocument.mdx │ │ │ │ ├── mistralocrdocumentconverter.mdx │ │ │ │ ├── msgtodocument.mdx │ │ │ │ ├── multifileconverter.mdx │ │ │ │ ├── openapiservicetofunctions.mdx │ │ │ │ ├── outputadapter.mdx │ │ │ │ ├── paddleocrvldocumentconverter.mdx │ │ │ │ ├── pdfminertodocument.mdx │ │ │ │ ├── pdftoimagecontent.mdx │ │ │ │ ├── pptxtodocument.mdx │ │ │ │ ├── pypdftodocument.mdx │ │ │ │ ├── textfiletodocument.mdx │ │ │ │ ├── tikadocumentconverter.mdx │ │ │ │ ├── unstructuredfileconverter.mdx │ │ │ │ └── xlsxtodocument.mdx │ │ │ ├── converters.mdx │ │ │ ├── downloaders/ │ │ │ │ └── s3downloader.mdx │ │ │ ├── embedders/ │ │ │ │ ├── amazonbedrockdocumentembedder.mdx │ │ │ │ ├── amazonbedrockdocumentimageembedder.mdx │ │ │ │ ├── amazonbedrocktextembedder.mdx │ │ │ │ ├── azureopenaidocumentembedder.mdx │ │ │ │ ├── azureopenaitextembedder.mdx │ │ │ │ ├── choosing-the-right-embedder.mdx │ │ │ │ ├── coheredocumentembedder.mdx │ │ │ │ ├── coheredocumentimageembedder.mdx │ │ │ │ ├── coheretextembedder.mdx │ │ │ │ ├── external-integrations-embedders.mdx │ │ │ │ ├── fastembeddocumentembedder.mdx │ │ │ │ ├── fastembedsparsedocumentembedder.mdx │ │ │ │ ├── fastembedsparsetextembedder.mdx │ │ │ │ ├── fastembedtextembedder.mdx │ │ │ │ ├── googlegenaidocumentembedder.mdx │ │ │ │ ├── googlegenaimultimodaldocumentembedder.mdx │ │ │ │ ├── googlegenaitextembedder.mdx │ │ │ │ ├── huggingfaceapidocumentembedder.mdx │ │ │ │ ├── huggingfaceapitextembedder.mdx │ │ │ │ ├── jinadocumentembedder.mdx │ │ │ │ ├── jinadocumentimageembedder.mdx │ │ │ │ ├── jinatextembedder.mdx │ │ │ │ ├── mistraldocumentembedder.mdx │ │ │ │ ├── mistraltextembedder.mdx │ │ │ │ ├── nvidiadocumentembedder.mdx │ │ │ │ ├── nvidiatextembedder.mdx │ │ │ │ ├── ollamadocumentembedder.mdx │ │ │ │ ├── ollamatextembedder.mdx │ │ │ │ ├── openaidocumentembedder.mdx │ │ │ │ ├── openaitextembedder.mdx │ │ │ │ ├── optimumdocumentembedder.mdx │ │ │ │ ├── optimumtextembedder.mdx │ │ │ │ ├── sentencetransformersdocumentembedder.mdx │ │ │ │ ├── sentencetransformersdocumentimageembedder.mdx │ │ │ │ ├── sentencetransformerssparsedocumentembedder.mdx │ │ │ │ ├── sentencetransformerssparsetextembedder.mdx │ │ │ │ ├── sentencetransformerstextembedder.mdx │ │ │ │ ├── stackitdocumentembedder.mdx │ │ │ │ ├── stackittextembedder.mdx │ │ │ │ ├── vertexaidocumentembedder.mdx │ │ │ │ ├── vertexaitextembedder.mdx │ │ │ │ ├── watsonxdocumentembedder.mdx │ │ │ │ └── watsonxtextembedder.mdx │ │ │ ├── embedders.mdx │ │ │ ├── evaluators/ │ │ │ │ ├── answerexactmatchevaluator.mdx │ │ │ │ ├── contextrelevanceevaluator.mdx │ │ │ │ ├── deepevalevaluator.mdx │ │ │ │ ├── documentmapevaluator.mdx │ │ │ │ ├── documentmrrevaluator.mdx │ │ │ │ ├── documentndcgevaluator.mdx │ │ │ │ ├── documentrecallevaluator.mdx │ │ │ │ ├── external-integrations-evaluators.mdx │ │ │ │ ├── faithfulnessevaluator.mdx │ │ │ │ ├── llmevaluator.mdx │ │ │ │ ├── ragasevaluator.mdx │ │ │ │ └── sasevaluator.mdx │ │ │ ├── evaluators.mdx │ │ │ ├── extractors/ │ │ │ │ ├── llmdocumentcontentextractor.mdx │ │ │ │ ├── llmmetadataextractor.mdx │ │ │ │ ├── namedentityextractor.mdx │ │ │ │ └── regextextextractor.mdx │ │ │ ├── extractors.mdx │ │ │ ├── fetchers/ │ │ │ │ ├── external-integrations-fetchers.mdx │ │ │ │ ├── firecrawlcrawler.mdx │ │ │ │ └── linkcontentfetcher.mdx │ │ │ ├── fetchers.mdx │ │ │ ├── generators/ │ │ │ │ ├── aimllapichatgenerator.mdx │ │ │ │ ├── amazonbedrockchatgenerator.mdx │ │ │ │ ├── amazonbedrockgenerator.mdx │ │ │ │ ├── anthropicchatgenerator.mdx │ │ │ │ ├── anthropicgenerator.mdx │ │ │ │ ├── anthropicvertexchatgenerator.mdx │ │ │ │ ├── azureopenaichatgenerator.mdx │ │ │ │ ├── azureopenaigenerator.mdx │ │ │ │ ├── azureopenairesponseschatgenerator.mdx │ │ │ │ ├── coherechatgenerator.mdx │ │ │ │ ├── coheregenerator.mdx │ │ │ │ ├── cometapichatgenerator.mdx │ │ │ │ ├── dalleimagegenerator.mdx │ │ │ │ ├── external-integrations-generators.mdx │ │ │ │ ├── fallbackchatgenerator.mdx │ │ │ │ ├── googleaigeminichatgenerator.mdx │ │ │ │ ├── googleaigeminigenerator.mdx │ │ │ │ ├── googlegenaichatgenerator.mdx │ │ │ │ ├── guides-to-generators/ │ │ │ │ │ ├── choosing-the-right-generator.mdx │ │ │ │ │ ├── function-calling.mdx │ │ │ │ │ └── generators-vs-chat-generators.mdx │ │ │ │ ├── huggingfaceapichatgenerator.mdx │ │ │ │ ├── huggingfaceapigenerator.mdx │ │ │ │ ├── huggingfacelocalchatgenerator.mdx │ │ │ │ ├── huggingfacelocalgenerator.mdx │ │ │ │ ├── llamacppchatgenerator.mdx │ │ │ │ ├── llamacppgenerator.mdx │ │ │ │ ├── llamastackchatgenerator.mdx │ │ │ │ ├── metallamachatgenerator.mdx │ │ │ │ ├── mistralchatgenerator.mdx │ │ │ │ ├── nvidiachatgenerator.mdx │ │ │ │ ├── nvidiagenerator.mdx │ │ │ │ ├── ollamachatgenerator.mdx │ │ │ │ ├── ollamagenerator.mdx │ │ │ │ ├── openaichatgenerator.mdx │ │ │ │ ├── openaigenerator.mdx │ │ │ │ ├── openairesponseschatgenerator.mdx │ │ │ │ ├── openrouterchatgenerator.mdx │ │ │ │ ├── sagemakergenerator.mdx │ │ │ │ ├── stackitchatgenerator.mdx │ │ │ │ ├── togetheraichatgenerator.mdx │ │ │ │ ├── togetheraigenerator.mdx │ │ │ │ ├── vertexaicodegenerator.mdx │ │ │ │ ├── vertexaigeminichatgenerator.mdx │ │ │ │ ├── vertexaigeminigenerator.mdx │ │ │ │ ├── vertexaiimagecaptioner.mdx │ │ │ │ ├── vertexaiimagegenerator.mdx │ │ │ │ ├── vertexaiimageqa.mdx │ │ │ │ ├── vertexaitextgenerator.mdx │ │ │ │ ├── watsonxchatgenerator.mdx │ │ │ │ └── watsonxgenerator.mdx │ │ │ ├── generators.mdx │ │ │ ├── joiners/ │ │ │ │ ├── answerjoiner.mdx │ │ │ │ ├── branchjoiner.mdx │ │ │ │ ├── documentjoiner.mdx │ │ │ │ ├── listjoiner.mdx │ │ │ │ └── stringjoiner.mdx │ │ │ ├── joiners.mdx │ │ │ ├── preprocessors/ │ │ │ │ ├── chinesedocumentsplitter.mdx │ │ │ │ ├── csvdocumentcleaner.mdx │ │ │ │ ├── csvdocumentsplitter.mdx │ │ │ │ ├── documentcleaner.mdx │ │ │ │ ├── documentpreprocessor.mdx │ │ │ │ ├── documentsplitter.mdx │ │ │ │ ├── embeddingbaseddocumentsplitter.mdx │ │ │ │ ├── hierarchicaldocumentsplitter.mdx │ │ │ │ ├── markdownheadersplitter.mdx │ │ │ │ ├── recursivesplitter.mdx │ │ │ │ └── textcleaner.mdx │ │ │ ├── preprocessors.mdx │ │ │ ├── query/ │ │ │ │ └── queryexpander.mdx │ │ │ ├── rankers/ │ │ │ │ ├── amazonbedrockranker.mdx │ │ │ │ ├── choosing-the-right-ranker.mdx │ │ │ │ ├── cohereranker.mdx │ │ │ │ ├── external-integrations-rankers.mdx │ │ │ │ ├── fastembedranker.mdx │ │ │ │ ├── huggingfaceteiranker.mdx │ │ │ │ ├── jinaranker.mdx │ │ │ │ ├── llmranker.mdx │ │ │ │ ├── lostinthemiddleranker.mdx │ │ │ │ ├── metafieldgroupingranker.mdx │ │ │ │ ├── metafieldranker.mdx │ │ │ │ ├── nvidiaranker.mdx │ │ │ │ ├── pyversityranker.mdx │ │ │ │ ├── sentencetransformersdiversityranker.mdx │ │ │ │ ├── sentencetransformerssimilarit
SYMBOL INDEX (11 symbols across 7 files)
FILE: .github/utils/check_imports.py
function validate_module_imports (line 10) | def validate_module_imports(root_dir: str, exclude_subdirs: list[str] | ...
function main (line 49) | def main() -> None:
FILE: .github/utils/docs_search_sync.py
function collect_docs_files (line 29) | def collect_docs_files(version: int) -> list[DeepsetCloudFile]:
function delete_files (line 60) | def delete_files(file_names: list[str]) -> None:
FILE: .github/utils/docstrings_checksum.py
function docstrings_checksum (line 7) | def docstrings_checksum(python_files: Iterator[Path]) -> str:
FILE: .github/utils/pyproject_to_requirements.py
function resolve (line 16) | def resolve(target: str, extras: dict, results: set) -> None:
function main (line 33) | def main(pyproject_path: Path, extra: str = "") -> None:
FILE: docs-website/api/search.ts
function handler (line 3) | async function handler(req: VercelRequest, res: VercelResponse) {
FILE: docs-website/docusaurus.config.js
constant MAX_STABLE_VERSIONS (line 12) | const MAX_STABLE_VERSIONS = 5;
method injectHtmlTags (line 97) | injectHtmlTags() {
FILE: docs-website/plugins/txtLoaderPlugin.js
function txtLoaderPlugin (line 1) | function txtLoaderPlugin() {
Copy disabled (too large)
Download .json
Condensed preview — 5867 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,468K chars).
[
{
"path": ".github/CODEOWNERS",
"chars": 593,
"preview": "# See https://help.github.com/articles/about-codeowners/ for syntax\n\n# Core Engineering will be the default owners for e"
},
{
"path": ".github/ISSUE_TEMPLATE/breaking-change-proposal.md",
"chars": 1249,
"preview": "---\nname: Breaking change proposal\nabout: Track a breaking change in Haystack\ntitle: ''\nlabels: breaking change\nassignee"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 726,
"preview": "---\nname: Bug report\nabout: Errors you encountered\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 203,
"preview": "blank_issues_enabled: true\ncontact_links:\n - name: Something unclear? Just ask :)\n url: https://github.com/deepset-a"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 595,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your fea"
},
{
"path": ".github/dependabot.yml",
"chars": 117,
"preview": "version: 2\nupdates:\n - package-ecosystem: 'github-actions'\n directory: '/'\n schedule:\n interval: 'daily'\n"
},
{
"path": ".github/labeler.yml",
"chars": 712,
"preview": "# Release lines\n1.x:\n - base-branch: 'v1.x'\n\n# Proposals\nproposal:\n- changed-files:\n - any-glob-to-any-file: proposals/"
},
{
"path": ".github/pull_request_template.md",
"chars": 1349,
"preview": "### Related Issues\n\n- fixes #issue-number\n\n### Proposed Changes:\n\n <!--- In case of a bug: Describe what caused the issu"
},
{
"path": ".github/utils/check_imports.py",
"chars": 2800,
"preview": "import importlib\nimport os\nimport sys\nimport traceback\nfrom pathlib import Path\n\nfrom haystack import logging # noqa: F"
},
{
"path": ".github/utils/create_unstable_docs_docusaurus.py",
"chars": 4411,
"preview": "\"\"\"\nThis script creates an unstable documentation version at the time of branch-off for a new Haystack release.\n\nBetween"
},
{
"path": ".github/utils/docs_search_sync.py",
"chars": 4837,
"preview": "\"\"\"\nThis script syncs the Haystack docs HTML files to the deepset workspace for search indexing.\n\nIt is used in the docs"
},
{
"path": ".github/utils/docstrings_checksum.py",
"chars": 1509,
"preview": "import ast\nimport hashlib\nfrom collections.abc import Iterator\nfrom pathlib import Path\n\n\ndef docstrings_checksum(python"
},
{
"path": ".github/utils/parse_validate_version.sh",
"chars": 5553,
"preview": "#!/bin/bash\n# parse_validate_version.sh - Parse and validate version for release\n#\n# Usage: ./parse_validate_version.sh "
},
{
"path": ".github/utils/prepare_release_notification.sh",
"chars": 3302,
"preview": "#!/bin/bash\n# prepare_release_notification.sh - Prepare Slack notification for release outcome\n#\n# Requires: VERSION, RU"
},
{
"path": ".github/utils/promote_unstable_docs_docusaurus.py",
"chars": 3860,
"preview": "\"\"\"\nThis script promotes an unstable documentation version to a stable version at the time of a new Haystack release.\n\nT"
},
{
"path": ".github/utils/pyproject_to_requirements.py",
"chars": 1357,
"preview": "import argparse\nimport re\nimport sys\nfrom pathlib import Path\n\nimport toml\n\nmatcher = re.compile(r\"farm-haystack\\[(.+)\\]"
},
{
"path": ".github/utils/wait_for_workflows.sh",
"chars": 2241,
"preview": "#!/bin/bash\n# wait_for_workflows.sh - Wait for tag-triggered workflows to complete\n#\n# Usage: ./wait_for_workflows.sh <t"
},
{
"path": ".github/workflows/auto_approve_api_ref_sync.yml",
"chars": 998,
"preview": "name: Approve and merge API reference sync PRs\n\n# Automatically approve and merge API reference sync PRs from Haystack, "
},
{
"path": ".github/workflows/branch_off.yml",
"chars": 3481,
"preview": "name: Branch off\n\non:\n workflow_dispatch:\n workflow_call:\n outputs:\n bump_version_pr_url:\n description:"
},
{
"path": ".github/workflows/check_api_ref.yml",
"chars": 3455,
"preview": "name: Check API reference changes\n\non:\n pull_request:\n paths:\n - \"haystack/**/*.py\"\n - \"pydoc/*.yml\"\n\njobs"
},
{
"path": ".github/workflows/ci_metrics.yml",
"chars": 454,
"preview": "name: CI Metrics\n\non:\n workflow_run:\n workflows:\n - \"end-to-end\"\n - \"Tests\"\n - \"Slow Integration Test"
},
{
"path": ".github/workflows/docker_release.yml",
"chars": 2716,
"preview": "name: Docker image release\n\non:\n workflow_dispatch:\n push:\n branches:\n - main\n paths:\n - '.github/work"
},
{
"path": ".github/workflows/docs-website-test-docs-snippets.yml",
"chars": 2216,
"preview": "name: Test Python snippets in docs\n\non:\n schedule:\n - cron: '17 3 * * *' # daily at 03:17 UTC\n workflow_dispatch:\n"
},
{
"path": ".github/workflows/docs_search_sync.yml",
"chars": 1682,
"preview": "name: Docs Search Sync\n\non:\n workflow_dispatch: # Activate this workflow manually\n schedule:\n - cron: \"0 1 * * *\"\n\n"
},
{
"path": ".github/workflows/docstring_labeler.yml",
"chars": 1973,
"preview": "name: Add label on docstrings edit\n\non:\n pull_request_target:\n paths:\n - \"haystack/**/*.py\"\n\nenv:\n PYTHON_VERS"
},
{
"path": ".github/workflows/docusaurus_sync.yml",
"chars": 1697,
"preview": "name: Sync docs with Docusaurus\n\non:\n workflow_dispatch:\n push:\n branches:\n - main\n paths:\n - \"pydoc/*"
},
{
"path": ".github/workflows/e2e.yml",
"chars": 1181,
"preview": "# If you change this name also do it in ci_metrics.yml\nname: end-to-end\n\non:\n workflow_dispatch: # Activate this workfl"
},
{
"path": ".github/workflows/github_release.yml",
"chars": 3646,
"preview": "name: Project release on Github\n\non:\n workflow_dispatch: # this is useful to re-generate the release page without a ne"
},
{
"path": ".github/workflows/labeler.yml",
"chars": 242,
"preview": "name: \"Labeler\"\non:\n- pull_request_target\n\npermissions:\n contents: read\n pull-requests: write\n\njobs:\n triage:\n run"
},
{
"path": ".github/workflows/license_compliance.yml",
"chars": 2147,
"preview": "name: License Compliance\n\non:\n pull_request:\n paths:\n - \"**/pyproject.toml\"\n - \".github/workflows/license_"
},
{
"path": ".github/workflows/nightly_testpypi_release.yml",
"chars": 1388,
"preview": "name: Nightly pre-release on PyPI\n\non:\n schedule:\n # Run at midnight UTC every day\n - cron: \"0 0 * * *\"\n workflo"
},
{
"path": ".github/workflows/project.yml",
"chars": 369,
"preview": "name: Track issues with Github project\n\non:\n issues:\n types:\n - opened\n\njobs:\n add-to-project:\n name: Add n"
},
{
"path": ".github/workflows/promote_unstable_docs.yml",
"chars": 2481,
"preview": "name: Release new minor version docs\n\non:\n push:\n tags:\n # Trigger this only for new minor version tags (e.g. v"
},
{
"path": ".github/workflows/push_release_notes_to_website.yml",
"chars": 2081,
"preview": "name: Push release notes to website\n\non:\n workflow_dispatch:\n inputs:\n version:\n description: 'Haystack "
},
{
"path": ".github/workflows/pypi_release.yml",
"chars": 656,
"preview": "name: Project release on PyPi\n\non:\n push:\n tags:\n - \"v[0-9]+.[0-9]+.[0-9]+*\"\n # We must not release versio"
},
{
"path": ".github/workflows/release.yml",
"chars": 6205,
"preview": "name: Release\n\non:\n workflow_dispatch:\n inputs:\n version:\n description: 'Version to release (e.g., v2.99"
},
{
"path": ".github/workflows/release_notes.yml",
"chars": 3060,
"preview": "name: Check Release Notes\n\non:\n pull_request:\n types:\n - opened\n - reopened\n - synchronize\n - re"
},
{
"path": ".github/workflows/release_notes_skipper.yml",
"chars": 404,
"preview": "name: Check Release Notes\n\non:\n pull_request:\n types:\n - opened\n - reopened\n - synchronize\n - re"
},
{
"path": ".github/workflows/slow.yml",
"chars": 7962,
"preview": "# If you change this name also do it in ci_metrics.yml\nname: Slow Integration Tests\n\n# The workflow will always run, but"
},
{
"path": ".github/workflows/stale.yml",
"chars": 445,
"preview": "name: 'Stalebot'\non:\n schedule:\n - cron: '30 1 * * *'\n\njobs:\n makestale:\n runs-on: ubuntu-slim\n steps:\n "
},
{
"path": ".github/workflows/tests.yml",
"chars": 8916,
"preview": "# If you change this name also do it in ci_metrics.yml\nname: Tests\n\n# The workflow will always run, but the actual tests"
},
{
"path": ".github/workflows/workflows_linting.yml",
"chars": 512,
"preview": "name: Github workflows linter\n\non:\n pull_request:\n paths:\n - \".github/workflows/**\"\n\njobs:\n lint-workflows:\n "
},
{
"path": ".gitignore",
"chars": 2394,
"preview": "# Local run files\nqa.db\n**/qa.db\n**/*qa*.db\n**/test-reports\n\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[c"
},
{
"path": ".pre-commit-config.yaml",
"chars": 1653,
"preview": "fail_fast: true\n\nrepos:\n - repo: https://github.com/pre-commit/pre-commit-hooks\n rev: v6.0.0\n hooks:\n - id: "
},
{
"path": "CITATION.cff",
"chars": 800,
"preview": "cff-version: 1.2.0\nmessage: \"If you use this software, please cite it using these metadata.\"\ntitle: \"Haystack: the end-t"
},
{
"path": "CONTRIBUTING.md",
"chars": 26062,
"preview": "# Contributing to Haystack\n\nFirst off, thanks for taking the time to contribute! :blue_heart:\n\nAll types of contribution"
},
{
"path": "LICENSE",
"chars": 11343,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 12617,
"preview": "<div align=\"center\">\n <a href=\"https://haystack.deepset.ai/\"><img src=\"https://raw.githubusercontent.com/deepset-ai/hay"
},
{
"path": "SECURITY.md",
"chars": 2276,
"preview": "# Security Policy\n\n## Report a Vulnerability\n\nIf you have found a security vulnerability in Haystack, please report via "
},
{
"path": "VERSION.txt",
"chars": 11,
"preview": "2.27.0-rc0\n"
},
{
"path": "code_of_conduct.txt",
"chars": 5282,
"preview": "CONTRIBUTOR COVENANT CODE OF CONDUCT\n====================================\n\nOur Pledge\n----------\n\nWe as members, contrib"
},
{
"path": "docker/Dockerfile.base",
"chars": 1054,
"preview": "ARG build_image\nARG base_image\n\nFROM $build_image AS build-image\n\nARG DEBIAN_FRONTEND=noninteractive\nARG haystack_versio"
},
{
"path": "docker/README.md",
"chars": 2587,
"preview": "<p align=\"center\">\n <a href=\"https://haystack.deepset.ai/\"><img src=\"https://raw.githubusercontent.com/deepset-ai/.gith"
},
{
"path": "docker/docker-bake.hcl",
"chars": 777,
"preview": "variable \"HAYSTACK_VERSION\" {\n default = \"main\"\n}\n\nvariable \"GITHUB_REF\" {\n default = \"\"\n}\n\nvariable \"IMAGE_NAME\" {\n "
},
{
"path": "docs-website/.gitattributes",
"chars": 61,
"preview": "* text=auto\n*.md text diff=markdown\n*.mdx text diff=markdown\n"
},
{
"path": "docs-website/.gitignore",
"chars": 794,
"preview": ".DS_Store\n.vscode/*\n!.vscode/extensions.json\n.idea\n*.iml\n*.code-workspace\n.changelog\n.history\n\nnode_modules\n.yarn\npackag"
},
{
"path": "docs-website/CONTRIBUTING.md",
"chars": 15003,
"preview": "# Contributing to Haystack Documentation\n\nThank you for your interest in contributing to the Haystack documentation! Thi"
},
{
"path": "docs-website/README.md",
"chars": 8068,
"preview": "# Haystack Documentation Website\n\nThis directory contains the Docusaurus-powered documentation website for [Haystack](ht"
},
{
"path": "docs-website/api/search.ts",
"chars": 2151,
"preview": "import { VercelRequest, VercelResponse } from \"@vercel/node\";\n\nexport default async function handler(req: VercelRequest,"
},
{
"path": "docs-website/api/tsconfig.json",
"chars": 299,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2021\",\n \"module\": \"commonjs\",\n \"moduleResolution\": \"node\",\n \"lib\": [\""
},
{
"path": "docs-website/docs/_templates/component-template.mdx",
"chars": 973,
"preview": "---\ntitle: \"Component Name\"\nid: \"component-name\"\ndescription: \"A short description of the component\"\nslug: \"/component-n"
},
{
"path": "docs-website/docs/_templates/document-store-template.mdx",
"chars": 907,
"preview": "---\ntitle: \"Document Store Name\"\nid: \"document-store-name\"\ndescription: \"A short description of the document store\"\nslug"
},
{
"path": "docs-website/docs/concepts/agents/state.mdx",
"chars": 15249,
"preview": "---\ntitle: \"State\"\nid: state\nslug: \"/state\"\ndescription: \"`State` is a container for storing shared information during A"
},
{
"path": "docs-website/docs/concepts/agents.mdx",
"chars": 10074,
"preview": "---\ntitle: \"Agents\"\nid: agents\nslug: \"/agents\"\ndescription: \"This page explains how to create an AI agent in Haystack ca"
},
{
"path": "docs-website/docs/concepts/components/custom-components.mdx",
"chars": 7434,
"preview": "---\ntitle: \"Creating Custom Components\"\nid: custom-components\nslug: \"/custom-components\"\ndescription: \"Create your own c"
},
{
"path": "docs-website/docs/concepts/components/supercomponents.mdx",
"chars": 7219,
"preview": "---\ntitle: \"SuperComponents\"\nid: supercomponents\nslug: \"/supercomponents\"\ndescription: \"`SuperComponent` lets you wrap a"
},
{
"path": "docs-website/docs/concepts/components.mdx",
"chars": 3941,
"preview": "---\ntitle: \"Components\"\nid: components\nslug: \"/components\"\ndescription: \"Components are the building blocks of a pipelin"
},
{
"path": "docs-website/docs/concepts/concepts-overview.mdx",
"chars": 4952,
"preview": "---\ntitle: \"Haystack Concepts Overview\"\nid: concepts-overview\nslug: \"/concepts-overview\"\ndescription: \"Haystack provides"
},
{
"path": "docs-website/docs/concepts/data-classes/chatmessage.mdx",
"chars": 12288,
"preview": "---\ntitle: \"ChatMessage\"\nid: chatmessage\nslug: \"/chatmessage\"\ndescription: \"`ChatMessage` is the central abstraction to "
},
{
"path": "docs-website/docs/concepts/data-classes.mdx",
"chars": 8791,
"preview": "---\ntitle: \"Data Classes\"\nid: data-classes\nslug: \"/data-classes\"\ndescription: \"In Haystack, there are a handful of core "
},
{
"path": "docs-website/docs/concepts/device-management.mdx",
"chars": 6433,
"preview": "---\ntitle: \"Device Management\"\nid: device-management\nslug: \"/device-management\"\ndescription: \"This page discusses the co"
},
{
"path": "docs-website/docs/concepts/document-store/choosing-a-document-store.mdx",
"chars": 8778,
"preview": "---\ntitle: \"Choosing a Document Store\"\nid: choosing-a-document-store\nslug: \"/choosing-a-document-store\"\ndescription: \"Th"
},
{
"path": "docs-website/docs/concepts/document-store/creating-custom-document-stores.mdx",
"chars": 11650,
"preview": "---\ntitle: \"Creating Custom Document Stores\"\nid: creating-custom-document-stores\nslug: \"/creating-custom-document-stores"
},
{
"path": "docs-website/docs/concepts/document-store.mdx",
"chars": 5268,
"preview": "---\ntitle: \"Document Store\"\nid: document-store\nslug: \"/document-store\"\ndescription: \"You can think of the Document Store"
},
{
"path": "docs-website/docs/concepts/experimental-package.mdx",
"chars": 2624,
"preview": "---\ntitle: \"Experimental Package\"\nid: experimental-package\nslug: \"/experimental-package\"\ndescription: \"Try out new exper"
},
{
"path": "docs-website/docs/concepts/integrations.mdx",
"chars": 4870,
"preview": "---\ntitle: \"Introduction to Integrations\"\nid: integrations\nslug: \"/integrations\"\ndescription: \"The Haystack ecosystem in"
},
{
"path": "docs-website/docs/concepts/jinja-templates.mdx",
"chars": 2988,
"preview": "---\ntitle: \"Jinja Templates\"\nid: jinja-templates\nslug: \"/jinja-templates\"\ndescription: \"Learn how Jinja templates work w"
},
{
"path": "docs-website/docs/concepts/metadata-filtering.mdx",
"chars": 5901,
"preview": "---\ntitle: \"Metadata Filtering\"\nid: metadata-filtering\nslug: \"/metadata-filtering\"\ndescription: \"This page provides a de"
},
{
"path": "docs-website/docs/concepts/pipelines/asyncpipeline.mdx",
"chars": 6192,
"preview": "---\ntitle: \"AsyncPipeline\"\nid: asyncpipeline\nslug: \"/asyncpipeline\"\ndescription: \"Use AsyncPipeline to run multiple Hays"
},
{
"path": "docs-website/docs/concepts/pipelines/creating-pipelines.mdx",
"chars": 10528,
"preview": "---\ntitle: \"Creating Pipelines\"\nid: creating-pipelines\nslug: \"/creating-pipelines\"\ndescription: \"Learn the general princ"
},
{
"path": "docs-website/docs/concepts/pipelines/debugging-pipelines.mdx",
"chars": 4318,
"preview": "---\ntitle: \"Debugging Pipelines\"\nid: debugging-pipelines\nslug: \"/debugging-pipelines\"\ndescription: \"Learn how to debug a"
},
{
"path": "docs-website/docs/concepts/pipelines/pipeline-breakpoints.mdx",
"chars": 9641,
"preview": "---\ntitle: \"Pipeline Breakpoints\"\nid: pipeline-breakpoints\nslug: \"/pipeline-breakpoints\"\ndescription: \"Learn how to paus"
},
{
"path": "docs-website/docs/concepts/pipelines/pipeline-loops.mdx",
"chars": 12539,
"preview": "---\ntitle: \"Pipeline Loops\"\nid: pipeline-loops\nslug: \"/pipeline-loops\"\ndescription: \"Understand how loops work in Haysta"
},
{
"path": "docs-website/docs/concepts/pipelines/serialization.mdx",
"chars": 8100,
"preview": "---\ntitle: \"Serializing Pipelines\"\nid: serialization\nslug: \"/serialization\"\ndescription: \"Save your pipelines into a cus"
},
{
"path": "docs-website/docs/concepts/pipelines/smart-pipeline-connections.mdx",
"chars": 6187,
"preview": "---\ntitle: \"Smart Pipeline Connections\"\nid: smart-pipeline-connections\nslug: \"/smart-pipeline-connections\"\ndescription: "
},
{
"path": "docs-website/docs/concepts/pipelines/visualizing-pipelines.mdx",
"chars": 3303,
"preview": "---\ntitle: \"Visualizing Haystack Pipelines\"\nid: visualizing-pipelines\nslug: \"/visualizing-pipelines\"\ndescription: \"You c"
},
{
"path": "docs-website/docs/concepts/pipelines.mdx",
"chars": 9754,
"preview": "---\ntitle: \"Pipelines\"\nid: pipelines\nslug: \"/pipelines\"\ndescription: \"To build modern search pipelines with LLMs, you ne"
},
{
"path": "docs-website/docs/concepts/secret-management.mdx",
"chars": 8352,
"preview": "---\ntitle: \"Secret Management\"\nid: secret-management\nslug: \"/secret-management\"\ndescription: \"This page emphasizes secre"
},
{
"path": "docs-website/docs/development/deployment/docker.mdx",
"chars": 4983,
"preview": "---\ntitle: \"Docker\"\nid: docker\nslug: \"/docker\"\ndescription: \"Learn how to deploy your Haystack pipelines through Docker "
},
{
"path": "docs-website/docs/development/deployment/kubernetes.mdx",
"chars": 9302,
"preview": "---\ntitle: \"Kubernetes\"\nid: kubernetes\nslug: \"/kubernetes\"\ndescription: \"Learn how to deploy your Haystack pipelines thr"
},
{
"path": "docs-website/docs/development/deployment/openshift.mdx",
"chars": 3843,
"preview": "---\ntitle: \"OpenShift\"\nid: openshift\nslug: \"/openshift\"\ndescription: \"Learn how to deploy your applications running Hays"
},
{
"path": "docs-website/docs/development/deployment.mdx",
"chars": 2206,
"preview": "---\ntitle: \"Deployment\"\nid: deployment\nslug: \"/deployment\"\ndescription: \"Deploy your Haystack pipelines through various "
},
{
"path": "docs-website/docs/development/enabling-gpu-acceleration.mdx",
"chars": 2128,
"preview": "---\ntitle: \"Enabling GPU Acceleration\"\nid: enabling-gpu-acceleration\nslug: \"/enabling-gpu-acceleration\"\ndescription: \"Sp"
},
{
"path": "docs-website/docs/development/external-integrations-development.mdx",
"chars": 1044,
"preview": "---\ntitle: \"External Integrations\"\nid: external-integrations-development\nslug: \"/external-integrations-development\"\ndesc"
},
{
"path": "docs-website/docs/development/hayhooks.mdx",
"chars": 9825,
"preview": "---\ntitle: \"Hayhooks\"\nid: hayhooks\nslug: \"/hayhooks\"\ndescription: \"Hayhooks is a web application you can use to serve Ha"
},
{
"path": "docs-website/docs/development/logging.mdx",
"chars": 4892,
"preview": "---\ntitle: \"Logging\"\nid: logging\nslug: \"/logging\"\ndescription: \"Logging is crucial for monitoring and debugging LLM appl"
},
{
"path": "docs-website/docs/development/tracing.mdx",
"chars": 13356,
"preview": "---\ntitle: \"Tracing\"\nid: tracing\nslug: \"/tracing\"\ndescription: \"This page explains how to use tracing in Haystack. It de"
},
{
"path": "docs-website/docs/document-stores/arcadedbdocumentstore.mdx",
"chars": 2351,
"preview": "---\ntitle: \"ArcadeDBDocumentStore\"\nid: arcadedbdocumentstore\nslug: \"/arcadedbdocumentstore\"\n---\n\n# ArcadeDBDocumentStore"
},
{
"path": "docs-website/docs/document-stores/astradocumentstore.mdx",
"chars": 4390,
"preview": "---\ntitle: \"AstraDocumentStore\"\nid: astradocumentstore\nslug: \"/astradocumentstore\"\n---\n\n# AstraDocumentStore\n\n<div class"
},
{
"path": "docs-website/docs/document-stores/azureaisearchdocumentstore.mdx",
"chars": 4653,
"preview": "---\ntitle: \"AzureAISearchDocumentStore\"\nid: azureaisearchdocumentstore\nslug: \"/azureaisearchdocumentstore\"\ndescription: "
},
{
"path": "docs-website/docs/document-stores/chromadocumentstore.mdx",
"chars": 4558,
"preview": "---\ntitle: \"ChromaDocumentStore\"\nid: chromadocumentstore\nslug: \"/chromadocumentstore\"\n---\n\n# ChromaDocumentStore\n\n<div c"
},
{
"path": "docs-website/docs/document-stores/elasticsearch-document-store.mdx",
"chars": 2770,
"preview": "---\ntitle: \"ElasticsearchDocumentStore\"\nid: elasticsearch-document-store\nslug: \"/elasticsearch-document-store\"\ndescripti"
},
{
"path": "docs-website/docs/document-stores/faissdocumentstore.mdx",
"chars": 4886,
"preview": "---\ntitle: \"FAISSDocumentStore\"\nid: faissdocumentstore\nslug: \"/faissdocumentstore\"\n---\n\n# FAISSDocumentStore\n\n<div class"
},
{
"path": "docs-website/docs/document-stores/inmemorydocumentstore.mdx",
"chars": 956,
"preview": "---\ntitle: \"InMemoryDocumentStore\"\nid: inmemorydocumentstore\nslug: \"/inmemorydocumentstore\"\n---\n\n# InMemoryDocumentStore"
},
{
"path": "docs-website/docs/document-stores/mongodbatlasdocumentstore.mdx",
"chars": 2748,
"preview": "---\ntitle: \"MongoDBAtlasDocumentStore\"\nid: mongodbatlasdocumentstore\nslug: \"/mongodbatlasdocumentstore\"\n---\n\n# MongoDBAt"
},
{
"path": "docs-website/docs/document-stores/opensearch-document-store.mdx",
"chars": 3100,
"preview": "---\ntitle: \"OpenSearchDocumentStore\"\nid: opensearch-document-store\nslug: \"/opensearch-document-store\"\ndescription: \"A Do"
},
{
"path": "docs-website/docs/document-stores/pgvectordocumentstore.mdx",
"chars": 4066,
"preview": "---\ntitle: \"PgvectorDocumentStore\"\nid: pgvectordocumentstore\nslug: \"/pgvectordocumentstore\"\n---\n\n# PgvectorDocumentStore"
},
{
"path": "docs-website/docs/document-stores/pinecone-document-store.mdx",
"chars": 2878,
"preview": "---\ntitle: \"PineconeDocumentStore\"\nid: pinecone-document-store\nslug: \"/pinecone-document-store\"\ndescription: \"Use a Pine"
},
{
"path": "docs-website/docs/document-stores/qdrant-document-store.mdx",
"chars": 4219,
"preview": "---\ntitle: \"QdrantDocumentStore\"\nid: qdrant-document-store\nslug: \"/qdrant-document-store\"\ndescription: \"Use the Qdrant v"
},
{
"path": "docs-website/docs/document-stores/valkeydocumentstore.mdx",
"chars": 6221,
"preview": "---\ntitle: \"ValkeyDocumentStore\"\nid: valkeydocumentstore\nslug: \"/valkeydocumentstore\"\ndescription: \"Use a Valkey databas"
},
{
"path": "docs-website/docs/document-stores/weaviatedocumentstore.mdx",
"chars": 4716,
"preview": "---\ntitle: \"WeaviateDocumentStore\"\nid: weaviatedocumentstore\nslug: \"/weaviatedocumentstore\"\n---\n\n# WeaviateDocumentStore"
},
{
"path": "docs-website/docs/intro.mdx",
"chars": 2349,
"preview": "---\ntitle: \"Introduction to Haystack\"\nid: intro\ndescription: \"Haystack is an open-source AI framework to build productio"
},
{
"path": "docs-website/docs/optimization/advanced-rag-techniques/hypothetical-document-embeddings-hyde.mdx",
"chars": 5618,
"preview": "---\ntitle: \"Hypothetical Document Embeddings (HyDE)\"\nid: hypothetical-document-embeddings-hyde\nslug: \"/hypothetical-docu"
},
{
"path": "docs-website/docs/optimization/advanced-rag-techniques.mdx",
"chars": 947,
"preview": "---\ntitle: \"Advanced RAG Techniques\"\nid: advanced-rag-techniques\nslug: \"/advanced-rag-techniques\"\n---\n\n# Advanced RAG Te"
},
{
"path": "docs-website/docs/optimization/evaluation/model-based-evaluation.mdx",
"chars": 7614,
"preview": "---\ntitle: \"Model-Based Evaluation\"\nid: model-based-evaluation\nslug: \"/model-based-evaluation\"\ndescription: \"Haystack su"
},
{
"path": "docs-website/docs/optimization/evaluation/statistical-evaluation.mdx",
"chars": 5083,
"preview": "---\ntitle: \"Statistical Evaluation\"\nid: statistical-evaluation\nslug: \"/statistical-evaluation\"\ndescription: \"Haystack su"
},
{
"path": "docs-website/docs/optimization/evaluation.mdx",
"chars": 4392,
"preview": "---\ntitle: \"Evaluation\"\nid: evaluation\nslug: \"/evaluation\"\ndescription: \"Learn all about pipeline or component evaluatio"
},
{
"path": "docs-website/docs/overview/breaking-change-policy.mdx",
"chars": 6377,
"preview": "---\ntitle: \"Breaking Change Policy\"\nid: breaking-change-policy\nslug: \"/breaking-change-policy\"\ndescription: \"This docume"
},
{
"path": "docs-website/docs/overview/faq.mdx",
"chars": 2912,
"preview": "---\ntitle: \"FAQ\"\nid: faq\nslug: \"/faq\"\ndescription: \"Here are the answers to the questions people frequently ask about Ha"
},
{
"path": "docs-website/docs/overview/get-started.mdx",
"chars": 19090,
"preview": "---\ntitle: \"Get Started\"\nid: get-started\nslug: \"/get-started\"\ndescription: \"Learn how to quickly get up and running with"
},
{
"path": "docs-website/docs/overview/installation.mdx",
"chars": 2523,
"preview": "---\ntitle: \"Installation\"\nid: installation\nslug: \"/installation\"\ndescription: \"See how to quickly install Haystack with "
},
{
"path": "docs-website/docs/overview/migrating-from-langgraphlangchain-to-haystack.mdx",
"chars": 20657,
"preview": "---\ntitle: \"Migrating from LangGraph/LangChain to Haystack\"\nid: migrating-from-langgraphlangchain-to-haystack\nslug: \"/mi"
},
{
"path": "docs-website/docs/overview/migration.mdx",
"chars": 31056,
"preview": "---\ntitle: \"Migration Guide\"\nid: migration\nslug: \"/migration\"\ndescription: \"Learn how to make the move to Haystack 2.x f"
},
{
"path": "docs-website/docs/overview/telemetry.mdx",
"chars": 3474,
"preview": "---\ntitle: \"Telemetry\"\nid: telemetry\nslug: \"/telemetry\"\ndescription: \"Haystack relies on anonymous usage statistics to c"
},
{
"path": "docs-website/docs/pipeline-components/agents-1/agent.mdx",
"chars": 10121,
"preview": "---\ntitle: \"Agent\"\nid: agent\nslug: \"/agent\"\ndescription: \"The `Agent` component is a tool-using agent that interacts wit"
},
{
"path": "docs-website/docs/pipeline-components/audio/external-integrations-audio.mdx",
"chars": 697,
"preview": "---\ntitle: \"External Integrations\"\nid: external-integrations-audio\nslug: \"/external-integrations-audio\"\ndescription: \"Ex"
},
{
"path": "docs-website/docs/pipeline-components/audio/localwhispertranscriber.mdx",
"chars": 3573,
"preview": "---\ntitle: \"LocalWhisperTranscriber\"\nid: localwhispertranscriber\nslug: \"/localwhispertranscriber\"\ndescription: \"Use `Loc"
},
{
"path": "docs-website/docs/pipeline-components/audio/remotewhispertranscriber.mdx",
"chars": 4106,
"preview": "---\ntitle: \"RemoteWhisperTranscriber\"\nid: remotewhispertranscriber\nslug: \"/remotewhispertranscriber\"\ndescription: \"Use `"
},
{
"path": "docs-website/docs/pipeline-components/audio.mdx",
"chars": 778,
"preview": "---\ntitle: \"Audio\"\nid: audio\nslug: \"/audio\"\ndescription: \"Use these components to work with audio in Haystack by transcr"
},
{
"path": "docs-website/docs/pipeline-components/builders/answerbuilder.mdx",
"chars": 5057,
"preview": "---\ntitle: \"AnswerBuilder\"\nid: answerbuilder\nslug: \"/answerbuilder\"\ndescription: \"Use this component in pipelines that c"
},
{
"path": "docs-website/docs/pipeline-components/builders/chatpromptbuilder.mdx",
"chars": 14402,
"preview": "---\ntitle: \"ChatPromptBuilder\"\nid: chatpromptbuilder\nslug: \"/chatpromptbuilder\"\ndescription: \"This component constructs "
},
{
"path": "docs-website/docs/pipeline-components/builders/promptbuilder.mdx",
"chars": 9749,
"preview": "---\ntitle: \"PromptBuilder\"\nid: promptbuilder\nslug: \"/promptbuilder\"\ndescription: \"Use this component in pipelines before"
},
{
"path": "docs-website/docs/pipeline-components/builders.mdx",
"chars": 705,
"preview": "---\ntitle: \"Builders\"\nid: builders\nslug: \"/builders\"\n---\n\n# Builders\n\n| Component "
},
{
"path": "docs-website/docs/pipeline-components/caching/cachechecker.mdx",
"chars": 4148,
"preview": "---\ntitle: \"CacheChecker\"\nid: cachechecker\nslug: \"/cachechecker\"\ndescription: \"This component checks for the presence of"
},
{
"path": "docs-website/docs/pipeline-components/classifiers/documentlanguageclassifier.mdx",
"chars": 5168,
"preview": "---\ntitle: \"DocumentLanguageClassifier\"\nid: documentlanguageclassifier\nslug: \"/documentlanguageclassifier\"\ndescription: "
},
{
"path": "docs-website/docs/pipeline-components/classifiers/transformerszeroshotdocumentclassifier.mdx",
"chars": 4382,
"preview": "---\ntitle: \"TransformersZeroShotDocumentClassifier\"\nid: transformerszeroshotdocumentclassifier\nslug: \"/transformerszeros"
},
{
"path": "docs-website/docs/pipeline-components/classifiers.mdx",
"chars": 742,
"preview": "---\ntitle: \"Classifiers\"\nid: classifiers\nslug: \"/classifiers\"\ndescription: \"Use Classifiers to classify your documents b"
},
{
"path": "docs-website/docs/pipeline-components/connectors/external-integrations-connectors.mdx",
"chars": 1072,
"preview": "---\ntitle: \"External Integrations\"\nid: external-integrations-connectors\nslug: \"/external-integrations-connectors\"\ndescri"
},
{
"path": "docs-website/docs/pipeline-components/connectors/githubfileeditor.mdx",
"chars": 3072,
"preview": "---\ntitle: \"GitHubFileEditor\"\nid: githubfileeditor\nslug: \"/githubfileeditor\"\ndescription: \"This is a component for editi"
},
{
"path": "docs-website/docs/pipeline-components/connectors/githubissuecommenter.mdx",
"chars": 4305,
"preview": "---\ntitle: \"GitHubIssueCommenter\"\nid: githubissuecommenter\nslug: \"/githubissuecommenter\"\ndescription: \"This component po"
},
{
"path": "docs-website/docs/pipeline-components/connectors/githubissueviewer.mdx",
"chars": 5267,
"preview": "---\ntitle: \"GitHubIssueViewer\"\nid: githubissueviewer\nslug: \"/githubissueviewer\"\ndescription: \"This component fetches and"
},
{
"path": "docs-website/docs/pipeline-components/connectors/githubprcreator.mdx",
"chars": 3193,
"preview": "---\ntitle: \"GitHubPRCreator\"\nid: githubprcreator\nslug: \"/githubprcreator\"\ndescription: \"This component creates pull requ"
},
{
"path": "docs-website/docs/pipeline-components/connectors/githubrepoforker.mdx",
"chars": 2668,
"preview": "---\ntitle: \"GitHubRepoForker\"\nid: githubrepoforker\nslug: \"/githubrepoforker\"\ndescription: \"This component forks a GitHub"
},
{
"path": "docs-website/docs/pipeline-components/connectors/githubrepoviewer.mdx",
"chars": 3064,
"preview": "---\ntitle: \"GitHubRepoViewer\"\nid: githubrepoviewer\nslug: \"/githubrepoviewer\"\ndescription: \"This component navigates and "
},
{
"path": "docs-website/docs/pipeline-components/connectors/jinareaderconnector.mdx",
"chars": 6547,
"preview": "---\ntitle: \"JinaReaderConnector\"\nid: jinareaderconnector\nslug: \"/jinareaderconnector\"\ndescription: \"Use Jina AI’s Reader"
},
{
"path": "docs-website/docs/pipeline-components/connectors/langfuseconnector.mdx",
"chars": 8500,
"preview": "---\ntitle: \"LangfuseConnector\"\nid: langfuseconnector\nslug: \"/langfuseconnector\"\ndescription: \"Learn how to work with Lan"
},
{
"path": "docs-website/docs/pipeline-components/connectors/openapiconnector.mdx",
"chars": 3786,
"preview": "---\ntitle: \"OpenAPIConnector\"\nid: openapiconnector\nslug: \"/openapiconnector\"\ndescription: \"`OpenAPIConnector` is a compo"
},
{
"path": "docs-website/docs/pipeline-components/connectors/openapiserviceconnector.mdx",
"chars": 6549,
"preview": "---\ntitle: \"OpenAPIServiceConnector\"\nid: openapiserviceconnector\nslug: \"/openapiserviceconnector\"\ndescription: \"`OpenAPI"
},
{
"path": "docs-website/docs/pipeline-components/connectors/weaveconnector.mdx",
"chars": 6523,
"preview": "---\ntitle: \"WeaveConnector\"\nid: weaveconnector\nslug: \"/weaveconnector\"\ndescription: \"Learn how to use Weights & Biases W"
},
{
"path": "docs-website/docs/pipeline-components/connectors.mdx",
"chars": 2442,
"preview": "---\ntitle: \"Connectors\"\nid: connectors\nslug: \"/connectors\"\ndescription: \"These are Haystack integrations that connect yo"
},
{
"path": "docs-website/docs/pipeline-components/converters/azureocrdocumentconverter.mdx",
"chars": 4283,
"preview": "---\ntitle: \"AzureOCRDocumentConverter\"\nid: azureocrdocumentconverter\nslug: \"/azureocrdocumentconverter\"\ndescription: \"`A"
},
{
"path": "docs-website/docs/pipeline-components/converters/csvtodocument.mdx",
"chars": 2503,
"preview": "---\ntitle: \"CSVToDocument\"\nid: csvtodocument\nslug: \"/csvtodocument\"\ndescription: \"Converts CSV files to documents.\"\n---\n"
},
{
"path": "docs-website/docs/pipeline-components/converters/documenttoimagecontent.mdx",
"chars": 5921,
"preview": "---\ntitle: \"DocumentToImageContent\"\nid: documenttoimagecontent\nslug: \"/documenttoimagecontent\"\ndescription: \"`DocumentTo"
},
{
"path": "docs-website/docs/pipeline-components/converters/docxtodocument.mdx",
"chars": 2874,
"preview": "---\ntitle: \"DOCXToDocument\"\nid: docxtodocument\nslug: \"/docxtodocument\"\ndescription: \"Convert DOCX files to documents.\"\n-"
},
{
"path": "docs-website/docs/pipeline-components/converters/external-integrations-converters.mdx",
"chars": 1137,
"preview": "---\ntitle: \"External Integrations\"\nid: external-integrations-converters\nslug: \"/external-integrations-converters\"\ndescri"
},
{
"path": "docs-website/docs/pipeline-components/converters/filetofilecontent.mdx",
"chars": 3857,
"preview": "---\ntitle: \"FileToFileContent\"\nid: filetofilecontent\nslug: \"/filetofilecontent\"\ndescription: \"`FileToFileContent` reads "
},
{
"path": "docs-website/docs/pipeline-components/converters/htmltodocument.mdx",
"chars": 3167,
"preview": "---\ntitle: \"HTMLToDocument\"\nid: htmltodocument\nslug: \"/htmltodocument\"\ndescription: \"A component that converts HTML file"
},
{
"path": "docs-website/docs/pipeline-components/converters/imagefiletodocument.mdx",
"chars": 3997,
"preview": "---\ntitle: \"ImageFileToDocument\"\nid: imagefiletodocument\nslug: \"/imagefiletodocument\"\ndescription: \"Converts image file "
},
{
"path": "docs-website/docs/pipeline-components/converters/imagefiletoimagecontent.mdx",
"chars": 4386,
"preview": "---\ntitle: \"ImageFileToImageContent\"\nid: imagefiletoimagecontent\nslug: \"/imagefiletoimagecontent\"\ndescription: \"`ImageFi"
},
{
"path": "docs-website/docs/pipeline-components/converters/jsonconverter.mdx",
"chars": 4003,
"preview": "---\ntitle: \"JSONConverter\"\nid: jsonconverter\nslug: \"/jsonconverter\"\ndescription: \"Converts JSON files to text documents."
},
{
"path": "docs-website/docs/pipeline-components/converters/markdowntodocument.mdx",
"chars": 3136,
"preview": "---\ntitle: \"MarkdownToDocument\"\nid: markdowntodocument\nslug: \"/markdowntodocument\"\ndescription: \"A component that conver"
},
{
"path": "docs-website/docs/pipeline-components/converters/mistralocrdocumentconverter.mdx",
"chars": 8372,
"preview": "---\ntitle: \"MistralOCRDocumentConverter\"\nid: mistralocrdocumentconverter\nslug: \"/mistralocrdocumentconverter\"\ndescriptio"
},
{
"path": "docs-website/docs/pipeline-components/converters/msgtodocument.mdx",
"chars": 2625,
"preview": "---\ntitle: \"MSGToDocument\"\nid: msgtodocument\nslug: \"/msgtodocument\"\ndescription: \"Converts Microsoft Outlook .msg files "
},
{
"path": "docs-website/docs/pipeline-components/converters/multifileconverter.mdx",
"chars": 3265,
"preview": "---\ntitle: \"MultiFileConverter\"\nid: multifileconverter\nslug: \"/multifileconverter\"\ndescription: \"Converts CSV, DOCX, HTM"
},
{
"path": "docs-website/docs/pipeline-components/converters/openapiservicetofunctions.mdx",
"chars": 6177,
"preview": "---\ntitle: \"OpenAPIServiceToFunctions\"\nid: openapiservicetofunctions\nslug: \"/openapiservicetofunctions\"\ndescription: \"`O"
},
{
"path": "docs-website/docs/pipeline-components/converters/outputadapter.mdx",
"chars": 5017,
"preview": "---\ntitle: \"OutputAdapter\"\nid: outputadapter\nslug: \"/outputadapter\"\ndescription: \"This component helps the output of one"
},
{
"path": "docs-website/docs/pipeline-components/converters/paddleocrvldocumentconverter.mdx",
"chars": 4424,
"preview": "---\ntitle: \"PaddleOCRVLDocumentConverter\"\nid: paddleocrvldocumentconverter\nslug: \"/paddleocrvldocumentconverter\"\ndescrip"
},
{
"path": "docs-website/docs/pipeline-components/converters/pdfminertodocument.mdx",
"chars": 3159,
"preview": "---\ntitle: \"PDFMinerToDocument\"\nid: pdfminertodocument\nslug: \"/pdfminertodocument\"\ndescription: \"A component that conver"
},
{
"path": "docs-website/docs/pipeline-components/converters/pdftoimagecontent.mdx",
"chars": 4475,
"preview": "---\ntitle: \"PDFToImageContent\"\nid: pdftoimagecontent\nslug: \"/pdftoimagecontent\"\ndescription: \"`PDFToImageContent` reads "
},
{
"path": "docs-website/docs/pipeline-components/converters/pptxtodocument.mdx",
"chars": 2647,
"preview": "---\ntitle: \"PPTXToDocument\"\nid: pptxtodocument\nslug: \"/pptxtodocument\"\ndescription: \"Convert PPTX files to documents.\"\n-"
},
{
"path": "docs-website/docs/pipeline-components/converters/pypdftodocument.mdx",
"chars": 2963,
"preview": "---\ntitle: \"PyPDFToDocument\"\nid: pypdftodocument\nslug: \"/pypdftodocument\"\ndescription: \"A component that converts PDF fi"
},
{
"path": "docs-website/docs/pipeline-components/converters/textfiletodocument.mdx",
"chars": 3015,
"preview": "---\ntitle: \"TextFileToDocument\"\nid: textfiletodocument\nslug: \"/textfiletodocument\"\ndescription: \"Converts text files to "
},
{
"path": "docs-website/docs/pipeline-components/converters/tikadocumentconverter.mdx",
"chars": 3399,
"preview": "---\ntitle: \"TikaDocumentConverter\"\nid: tikadocumentconverter\nslug: \"/tikadocumentconverter\"\ndescription: \"An integration"
},
{
"path": "docs-website/docs/pipeline-components/converters/unstructuredfileconverter.mdx",
"chars": 4390,
"preview": "---\ntitle: \"UnstructuredFileConverter\"\nid: unstructuredfileconverter\nslug: \"/unstructuredfileconverter\"\ndescription: \"Us"
},
{
"path": "docs-website/docs/pipeline-components/converters/xlsxtodocument.mdx",
"chars": 2898,
"preview": "---\ntitle: \"XLSXToDocument\"\nid: xlsxtodocument\nslug: \"/xlsxtodocument\"\ndescription: \"Converts Excel files into documents"
},
{
"path": "docs-website/docs/pipeline-components/converters.mdx",
"chars": 5187,
"preview": "---\ntitle: \"Converters\"\nid: converters\nslug: \"/converters\"\ndescription: \"Use various Converters to extract data from fil"
},
{
"path": "docs-website/docs/pipeline-components/downloaders/s3downloader.mdx",
"chars": 9554,
"preview": "---\ntitle: \"S3Downloader\"\nid: s3downloader\nslug: \"/s3downloader\"\ndescription: \"`S3Downloader` downloads files from AWS S"
},
{
"path": "docs-website/docs/pipeline-components/embedders/amazonbedrockdocumentembedder.mdx",
"chars": 6629,
"preview": "---\ntitle: \"AmazonBedrockDocumentEmbedder\"\nid: amazonbedrockdocumentembedder\nslug: \"/amazonbedrockdocumentembedder\"\ndesc"
},
{
"path": "docs-website/docs/pipeline-components/embedders/amazonbedrockdocumentimageembedder.mdx",
"chars": 7255,
"preview": "---\ntitle: \"AmazonBedrockDocumentImageEmbedder\"\nid: amazonbedrockdocumentimageembedder\nslug: \"/amazonbedrockdocumentimag"
},
{
"path": "docs-website/docs/pipeline-components/embedders/amazonbedrocktextembedder.mdx",
"chars": 5565,
"preview": "---\ntitle: \"AmazonBedrockTextEmbedder\"\nid: amazonbedrocktextembedder\nslug: \"/amazonbedrocktextembedder\"\ndescription: \"Th"
},
{
"path": "docs-website/docs/pipeline-components/embedders/azureopenaidocumentembedder.mdx",
"chars": 5249,
"preview": "---\ntitle: \"AzureOpenAIDocumentEmbedder\"\nid: azureopenaidocumentembedder\nslug: \"/azureopenaidocumentembedder\"\ndescriptio"
},
{
"path": "docs-website/docs/pipeline-components/embedders/azureopenaitextembedder.mdx",
"chars": 4497,
"preview": "---\ntitle: \"AzureOpenAITextEmbedder\"\nid: azureopenaitextembedder\nslug: \"/azureopenaitextembedder\"\ndescription: \"When you"
},
{
"path": "docs-website/docs/pipeline-components/embedders/choosing-the-right-embedder.mdx",
"chars": 5046,
"preview": "---\ntitle: \"Choosing the Right Embedder\"\nid: choosing-the-right-embedder\nslug: \"/choosing-the-right-embedder\"\ndescriptio"
},
{
"path": "docs-website/docs/pipeline-components/embedders/coheredocumentembedder.mdx",
"chars": 5224,
"preview": "---\ntitle: \"CohereDocumentEmbedder\"\nid: coheredocumentembedder\nslug: \"/coheredocumentembedder\"\ndescription: \"This compon"
},
{
"path": "docs-website/docs/pipeline-components/embedders/coheredocumentimageembedder.mdx",
"chars": 6209,
"preview": "---\ntitle: \"CohereDocumentImageEmbedder\"\nid: coheredocumentimageembedder\nslug: \"/coheredocumentimageembedder\"\ndescriptio"
},
{
"path": "docs-website/docs/pipeline-components/embedders/coheretextembedder.mdx",
"chars": 4597,
"preview": "---\ntitle: \"CohereTextEmbedder\"\nid: coheretextembedder\nslug: \"/coheretextembedder\"\ndescription: \"This component transfor"
},
{
"path": "docs-website/docs/pipeline-components/embedders/external-integrations-embedders.mdx",
"chars": 903,
"preview": "---\ntitle: \"External Integrations\"\nid: external-integrations-embedders\nslug: \"/external-integrations-embedders\"\ndescript"
},
{
"path": "docs-website/docs/pipeline-components/embedders/fastembeddocumentembedder.mdx",
"chars": 6335,
"preview": "---\ntitle: \"FastembedDocumentEmbedder\"\nid: fastembeddocumentembedder\nslug: \"/fastembeddocumentembedder\"\ndescription: \"Th"
},
{
"path": "docs-website/docs/pipeline-components/embedders/fastembedsparsedocumentembedder.mdx",
"chars": 6976,
"preview": "---\ntitle: \"FastembedSparseDocumentEmbedder\"\nid: fastembedsparsedocumentembedder\nslug: \"/fastembedsparsedocumentembedder"
},
{
"path": "docs-website/docs/pipeline-components/embedders/fastembedsparsetextembedder.mdx",
"chars": 5801,
"preview": "---\ntitle: \"FastembedSparseTextEmbedder\"\nid: fastembedsparsetextembedder\nslug: \"/fastembedsparsetextembedder\"\ndescriptio"
},
{
"path": "docs-website/docs/pipeline-components/embedders/fastembedtextembedder.mdx",
"chars": 5660,
"preview": "---\ntitle: \"FastembedTextEmbedder\"\nid: fastembedtextembedder\nslug: \"/fastembedtextembedder\"\ndescription: \"This component"
},
{
"path": "docs-website/docs/pipeline-components/embedders/googlegenaidocumentembedder.mdx",
"chars": 6523,
"preview": "---\ntitle: \"GoogleGenAIDocumentEmbedder\"\nid: googlegenaidocumentembedder\nslug: \"/googlegenaidocumentembedder\"\ndescriptio"
},
{
"path": "docs-website/docs/pipeline-components/embedders/googlegenaimultimodaldocumentembedder.mdx",
"chars": 7834,
"preview": "---\ntitle: \"GoogleGenAIMultimodalDocumentEmbedder\"\nid: googlegenaimultimodaldocumentembedder\nslug: \"/googlegenaimultimod"
},
{
"path": "docs-website/docs/pipeline-components/embedders/googlegenaitextembedder.mdx",
"chars": 5701,
"preview": "---\ntitle: \"GoogleGenAITextEmbedder\"\nid: googlegenaitextembedder\nslug: \"/googlegenaitextembedder\"\ndescription: \"This com"
},
{
"path": "docs-website/docs/pipeline-components/embedders/huggingfaceapidocumentembedder.mdx",
"chars": 7686,
"preview": "---\ntitle: \"HuggingFaceAPIDocumentEmbedder\"\nid: huggingfaceapidocumentembedder\nslug: \"/huggingfaceapidocumentembedder\"\nd"
},
{
"path": "docs-website/docs/pipeline-components/embedders/huggingfaceapitextembedder.mdx",
"chars": 6899,
"preview": "---\ntitle: \"HuggingFaceAPITextEmbedder\"\nid: huggingfaceapitextembedder\nslug: \"/huggingfaceapitextembedder\"\ndescription: "
},
{
"path": "docs-website/docs/pipeline-components/embedders/jinadocumentembedder.mdx",
"chars": 5504,
"preview": "---\ntitle: \"JinaDocumentEmbedder\"\nid: jinadocumentembedder\nslug: \"/jinadocumentembedder\"\ndescription: \"This component co"
},
{
"path": "docs-website/docs/pipeline-components/embedders/jinadocumentimageembedder.mdx",
"chars": 6824,
"preview": "---\ntitle: \"JinaDocumentImageEmbedder\"\nid: jinadocumentimageembedder\nslug: \"/jinadocumentimageembedder\"\ndescription: \"`J"
},
{
"path": "docs-website/docs/pipeline-components/embedders/jinatextembedder.mdx",
"chars": 4458,
"preview": "---\ntitle: \"JinaTextEmbedder\"\nid: jinatextembedder\nslug: \"/jinatextembedder\"\ndescription: \"This component transforms a s"
},
{
"path": "docs-website/docs/pipeline-components/embedders/mistraldocumentembedder.mdx",
"chars": 4075,
"preview": "---\ntitle: \"MistralDocumentEmbedder\"\nid: mistraldocumentembedder\nslug: \"/mistraldocumentembedder\"\ndescription: \"This com"
}
]
// ... and 5667 more files (download for full content)
About this extraction
This page contains the full source code of the deepset-ai/haystack GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 5867 files (40.6 MB), approximately 4.4M tokens, and a symbol index with 11 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.