Full Code of deepset-ai/haystack for AI

main 7b40f9807d25 cached
5867 files
40.6 MB
4.4M tokens
11 symbols
1 requests
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.

![Successful CI](images/ci-success.png)

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

![Failed CI](images/ci-failure-example.png)

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.

![Logs of failed CI, with instructions for fixing the failure](images/ci-failure-example-instructions.png)

## 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).

![Allow access to your branch to maintainers](images/first_time_contributor_enable_access.png)

## 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   | [![Tests](https://github.com/deepset-ai/haystack/actions/workflows/tests.yml/badge.svg)](https://github.com/deepset-ai/haystack/actions/workflows/tests.yml) [![types - Mypy](https://img.shields.io/badge/types-Mypy-blue.svg)](https://github.com/python/mypy) [![Coverage Status](https://coveralls.io/repos/github/deepset-ai/haystack/badge.svg?branch=main)](https://coveralls.io/github/deepset-ai/haystack?branch=main) [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) |
| Docs    | [![Website](https://img.shields.io/website?label=documentation&up_message=online&url=https%3A%2F%2Fdocs.haystack.deepset.ai)](https://docs.haystack.deepset.ai)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| Package | [![PyPI](https://img.shields.io/pypi/v/haystack-ai)](https://pypi.org/project/haystack-ai/) ![PyPI - Downloads](https://img.shields.io/pypi/dm/haystack-ai?color=blue&logo=pypi&logoColor=gold) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/haystack-ai?logo=python&logoColor=gold) [![Conda Version](https://img.shields.io/conda/vn/conda-forge/haystack-ai.svg)](https://anaconda.org/conda-forge/haystack-ai) [![GitHub](https://img.shields.io/github/license/deepset-ai/haystack?color=blue)](LICENSE) [![License Compliance](https://github.com/deepset-ai/haystack/actions/workflows/license_compliance.yml/badge.svg)](https://github.com/deepset-ai/haystack/actions/workflows/license_compliance.yml) |
| Meta    | [![Discord](https://img.shields.io/discord/993534733298450452?logo=discord)](https://discord.com/invite/xYvH6drSmA) [![Twitter Follow](https://img.shields.io/twitter/follow/haystack_ai)](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
Download .txt
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
Download .txt
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.

Copied to clipboard!