<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Cradicle Explorer</title>
    <link href="/css/bootstrap/bootstrap.min.css" rel="stylesheet">
    <style>
      .form-control-dark::placeholder {
          color: #aaa;
          opacity: 1;
      }
    </style>
    <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
    <link rel="icon" type="image/png" href="/favicon.png">


                <link href="/css/dashboard.css" rel="stylesheet">
                </head>
                <body>
                <header class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0 shadow">
                  <a class="navbar-brand col-md-3 col-lg-2 me-0 px-3 fs-6" href="/">Cradicle Explorer</a>
                  <button class="navbar-toggler position-absolute d-md-none collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#sidebarMenu" aria-controls="sidebarMenu" aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                  </button>
                  <form method="get" action="/cgi-bin/main" style="width:100%;"><input class="form-control form-control-dark w-100 rounded-0 border-0" type="text" name="q" placeholder="Search repos" aria-label="Search"></form>
                  <div class="navbar-nav flex-row">
                    <div class="nav-item text-nowrap">
                      <a class="nav-link px-3 active" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn">ai-llm-frameworks-haystack</a>
                    </div>
                  </div>
                </header>
                <div class="container-fluid">
                  <div class="row">
                    <nav id="sidebarMenu" class="col-md-3 col-lg-2 d-md-block bg-dark sidebar collapse">
                      <div class="position-sticky pt-3 sidebar-sticky">
                        <ul class="nav flex-column">
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn">
                              <i class="align-text-bottom fa-solid fa-info"></i>
                              Info
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&issue=list">
                              <i class="align-text-bottom fa-solid fa-layer-group"></i>
                              Issues
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&patch=list">
                              <i class="align-text-bottom fa-solid fa-vest-patches"></i>
                              Patches
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&wallet=list">
                              <i class="align-text-bottom fa-solid fa-wallet"></i>
                              Wallets
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link active" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=.">
                              <i class="align-text-bottom fa-solid fa-code"></i>
                              Source
                            </a>
                          </li>
                        <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted text-uppercase">
                          <span></span>
                        </h6>
                        <ul class="nav flex-column mb-2">
                        
    <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-1 mb-1 text-muted text-uppercase">
      <span>Source</span>
    </h6>
    <li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=.github"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> .github</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docker"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> docker</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website"><i class="fa-solid fa-folder-open" style="color:#f0c040;"></i> docs-website</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fapi"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> api</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fdocs"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> docs</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fplugins"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> plugins</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Freference"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> reference</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Freference_versioned_docs"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> reference_versioned_docs</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Freference_versioned_sidebars"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> reference_versioned_sidebars</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fscripts"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> scripts</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fsrc"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> src</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fstatic"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> static</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs"><i class="fa-solid fa-folder-open" style="color:#f0c040;"></i> versioned_docs</a></li><li><a class="nav-link py-0" style="padding-left:48px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.18"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> version-2.18</a></li><li><a class="nav-link py-0" style="padding-left:48px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.19"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> version-2.19</a></li><li><a class="nav-link py-0" style="padding-left:48px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.20"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> version-2.20</a></li><li><a class="nav-link py-0" style="padding-left:48px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.21"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> version-2.21</a></li><li><a class="nav-link py-0" style="padding-left:48px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.22"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> version-2.22</a></li><li><a class="nav-link py-0" style="padding-left:48px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.23"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> version-2.23</a></li><li><a class="nav-link py-0" style="padding-left:48px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.24"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> version-2.24</a></li><li><a class="nav-link py-0" style="padding-left:48px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.25"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> version-2.25</a></li><li><a class="nav-link py-0" style="padding-left:48px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.26"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> version-2.26</a></li><li><a class="nav-link py-0" style="padding-left:48px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.27"><i class="fa-solid fa-folder-open" style="color:#f0c040;"></i> version-2.27</a></li><li><a class="nav-link py-0" style="padding-left:64px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.27%2F_templates"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> _templates</a></li><li><a class="nav-link py-0" style="padding-left:64px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.27%2Fconcepts"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> concepts</a></li><li><a class="nav-link py-0" style="padding-left:64px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.27%2Fdevelopment"><i class="fa-solid fa-folder-open" style="color:#f0c040;"></i> development</a></li><li><a class="nav-link py-0" style="padding-left:80px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.27%2Fdevelopment%2Fdeployment"><i class="fa-solid fa-folder-open" style="color:#f0c040;"></i> deployment</a></li><li><a class="nav-link py-0 active" style="padding-left:96px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fversioned_docs%2Fversion-2.27%2Fdevelopment%2Fdeployment%2Fdocker.mdx"><i class="fa-solid fa-file" style="color:#888;"></i> docker.mdx</a></li><li><a class="nav-link py-0" style="padding-left:96px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fversioned_docs%2Fversion-2.27%2Fdevelopment%2Fdeployment%2Fkubernetes.mdx"><i class="fa-solid fa-file" style="color:#888;"></i> kubernetes.mdx</a></li><li><a class="nav-link py-0" style="padding-left:96px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fversioned_docs%2Fversion-2.27%2Fdevelopment%2Fdeployment%2Fopenshift.mdx"><i class="fa-solid fa-file" style="color:#888;"></i> openshift.mdx</a></li><li><a class="nav-link py-0" style="padding-left:80px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fversioned_docs%2Fversion-2.27%2Fdevelopment%2Fdeployment.mdx"><i class="fa-solid fa-file" style="color:#888;"></i> deployment.mdx</a></li><li><a class="nav-link py-0" style="padding-left:80px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fversioned_docs%2Fversion-2.27%2Fdevelopment%2Fenabling-gpu-acceleration.mdx"><i class="fa-solid fa-file" style="color:#888;"></i> enabling-gpu-acceleration.mdx</a></li><li><a class="nav-link py-0" style="padding-left:80px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fversioned_docs%2Fversion-2.27%2Fdevelopment%2Fexternal-integrations-development.mdx"><i class="fa-solid fa-file" style="color:#888;"></i> external-integrations-development.mdx</a></li><li><a class="nav-link py-0" style="padding-left:80px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fversioned_docs%2Fversion-2.27%2Fdevelopment%2Fhayhooks.mdx"><i class="fa-solid fa-file" style="color:#888;"></i> hayhooks.mdx</a></li><li><a class="nav-link py-0" style="padding-left:80px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fversioned_docs%2Fversion-2.27%2Fdevelopment%2Flogging.mdx"><i class="fa-solid fa-file" style="color:#888;"></i> logging.mdx</a></li><li><a class="nav-link py-0" style="padding-left:80px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fversioned_docs%2Fversion-2.27%2Fdevelopment%2Ftracing.mdx"><i class="fa-solid fa-file" style="color:#888;"></i> tracing.mdx</a></li><li><a class="nav-link py-0" style="padding-left:64px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.27%2Fdocument-stores"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> document-stores</a></li><li><a class="nav-link py-0" style="padding-left:64px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.27%2Foptimization"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> optimization</a></li><li><a class="nav-link py-0" style="padding-left:64px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.27%2Foverview"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> overview</a></li><li><a class="nav-link py-0" style="padding-left:64px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.27%2Fpipeline-components"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> pipeline-components</a></li><li><a class="nav-link py-0" style="padding-left:64px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.27%2Ftools"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> tools</a></li><li><a class="nav-link py-0" style="padding-left:64px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fversioned_docs%2Fversion-2.27%2Fintro.mdx"><i class="fa-solid fa-file" style="color:#888;"></i> intro.mdx</a></li><li><a class="nav-link py-0" style="padding-left:48px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.28"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> version-2.28</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_sidebars"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> versioned_sidebars</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2F.gitattributes"><i class="fa-solid fa-file" style="color:#888;"></i> .gitattributes</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2F.gitignore"><i class="fa-solid fa-file" style="color:#888;"></i> .gitignore</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2FCONTRIBUTING.md"><i class="fa-solid fa-file" style="color:#888;"></i> CONTRIBUTING.md</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2FREADME.md"><i class="fa-solid fa-file" style="color:#888;"></i> README.md</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fdocusaurus.config.js"><i class="fa-solid fa-file" style="color:#888;"></i> docusaurus.config.js</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fpackage.json"><i class="fa-solid fa-file" style="color:#888;"></i> package.json</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Freference-sidebars.js"><i class="fa-solid fa-file" style="color:#888;"></i> reference-sidebars.js</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Freference_versions.json"><i class="fa-solid fa-file" style="color:#888;"></i> reference_versions.json</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fsidebars.js"><i class="fa-solid fa-file" style="color:#888;"></i> sidebars.js</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fvercel.json"><i class="fa-solid fa-file" style="color:#888;"></i> vercel.json</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=docs-website%2Fversions.json"><i class="fa-solid fa-file" style="color:#888;"></i> versions.json</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=e2e"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> e2e</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=examples"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> examples</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=haystack"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> haystack</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=images"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> images</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=pydoc"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> pydoc</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=releasenotes"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> releasenotes</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=scripts"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> scripts</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=test"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> test</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=.gitignore"><i class="fa-solid fa-file" style="color:#888;"></i> .gitignore</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=.pre-commit-config.yaml"><i class="fa-solid fa-file" style="color:#888;"></i> .pre-commit-config.yaml</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=AGENTS.md"><i class="fa-solid fa-file" style="color:#888;"></i> AGENTS.md</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=CITATION.cff"><i class="fa-solid fa-file" style="color:#888;"></i> CITATION.cff</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=CLAUDE.md"><i class="fa-solid fa-file" style="color:#888;"></i> CLAUDE.md</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=CONTRIBUTING.md"><i class="fa-solid fa-file" style="color:#888;"></i> CONTRIBUTING.md</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=LICENSE"><i class="fa-solid fa-file" style="color:#888;"></i> LICENSE</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=README.md"><i class="fa-solid fa-file" style="color:#888;"></i> README.md</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=SECURITY.md"><i class="fa-solid fa-file" style="color:#888;"></i> SECURITY.md</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=VERSION.txt"><i class="fa-solid fa-file" style="color:#888;"></i> VERSION.txt</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=code_of_conduct.txt"><i class="fa-solid fa-file" style="color:#888;"></i> code_of_conduct.txt</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=license-header.txt"><i class="fa-solid fa-file" style="color:#888;"></i> license-header.txt</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=licenserc.toml"><i class="fa-solid fa-file" style="color:#888;"></i> licenserc.toml</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&file=pyproject.toml"><i class="fa-solid fa-file" style="color:#888;"></i> pyproject.toml</a></li>
    
                        </ul>
                      </div>
                    </nav>
                <main class="col-md-9 ms-sm-auto col-lg-10">
                  <div class="container px-1 py-3">
        
<div class="mb-2" style="font-size:1.1rem;"><a href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=.">/</a> <a href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website">docs-website</a> / <a href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs">versioned_docs</a> / <a href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.27">version-2.27</a> / <a href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.27%2Fdevelopment">development</a> / <a href="/cgi-bin/repo?id=zTi14k6zGh5QJwhnY6uZk3xfNTvn&source=docs-website%2Fversioned_docs%2Fversion-2.27%2Fdevelopment%2Fdeployment">deployment</a> / docker.mdx</div>
        <div class="list-group">
        <div class="list-group-item">
        <div class="mb-2" style="font-weight:bold;"><i class="fa-solid fa-file"></i> docker.mdx</div>
        <pre style="margin:0; font-size:0.85rem; overflow-x:auto; color:#fafafa;"><span style="color:#666; user-select:none;">  1</span>  ---
<span style="color:#666; user-select:none;">  2</span>  title: &quot;Docker&quot;
<span style="color:#666; user-select:none;">  3</span>  id: docker
<span style="color:#666; user-select:none;">  4</span>  slug: &quot;/docker&quot;
<span style="color:#666; user-select:none;">  5</span>  description: &quot;Learn how to deploy your Haystack pipelines through Docker starting from the basic Docker container to a complex application using Hayhooks.&quot;
<span style="color:#666; user-select:none;">  6</span>  ---
<span style="color:#666; user-select:none;">  7</span>  
<span style="color:#666; user-select:none;">  8</span>  # Docker
<span style="color:#666; user-select:none;">  9</span>  
<span style="color:#666; user-select:none;"> 10</span>  Learn how to deploy your Haystack pipelines through Docker starting from the basic Docker container to a complex application using Hayhooks.
<span style="color:#666; user-select:none;"> 11</span>  
<span style="color:#666; user-select:none;"> 12</span>  ## Running Haystack in Docker
<span style="color:#666; user-select:none;"> 13</span>  
<span style="color:#666; user-select:none;"> 14</span>  The most basic form of Haystack deployment happens through Docker containers. Becoming familiar with running and customizing Haystack Docker images is useful as they form the basis for more advanced deployment.
<span style="color:#666; user-select:none;"> 15</span>  
<span style="color:#666; user-select:none;"> 16</span>  Haystack releases are officially distributed through the [`deepset/haystack`](https://hub.docker.com/r/deepset/haystack) Docker image. Haystack images come in different flavors depending on the specific components they ship and the Haystack version.
<span style="color:#666; user-select:none;"> 17</span>  
<span style="color:#666; user-select:none;"> 18</span>  :::info
<span style="color:#666; user-select:none;"> 19</span>  At the moment, the only flavor available for Haystack is `base`, which ships exactly what you would get by installing Haystack locally with `pip install haystack-ai`.
<span style="color:#666; user-select:none;"> 20</span>  :::
<span style="color:#666; user-select:none;"> 21</span>  
<span style="color:#666; user-select:none;"> 22</span>  You can pull a specific Haystack flavor using Docker tags: for example, to pull the image containing Haystack `2.12.1`, you can run the command:
<span style="color:#666; user-select:none;"> 23</span>  
<span style="color:#666; user-select:none;"> 24</span>  ```shell
<span style="color:#666; user-select:none;"> 25</span>  docker pull deepset/haystack:base-v2.12.1
<span style="color:#666; user-select:none;"> 26</span>  ```
<span style="color:#666; user-select:none;"> 27</span>  
<span style="color:#666; user-select:none;"> 28</span>  Although the `base` flavor is meant to be customized, it can also be used to quickly run Haystack scripts locally without the need to set up a Python environment and its dependencies. For example, this is how you would print Haystack’s version running a Docker container:
<span style="color:#666; user-select:none;"> 29</span>  
<span style="color:#666; user-select:none;"> 30</span>  ```shell
<span style="color:#666; user-select:none;"> 31</span>  docker run -it --rm deepset/haystack:base-v2.12.1 python -c&quot;from haystack.version import __version__; print(__version__)&quot;
<span style="color:#666; user-select:none;"> 32</span>  ```
<span style="color:#666; user-select:none;"> 33</span>  
<span style="color:#666; user-select:none;"> 34</span>  ## Customizing the Haystack Docker Image
<span style="color:#666; user-select:none;"> 35</span>  
<span style="color:#666; user-select:none;"> 36</span>  Chances are your application will be more complex than a simple script, and you’ll need to install additional dependencies inside the Docker image along with Haystack.
<span style="color:#666; user-select:none;"> 37</span>  
<span style="color:#666; user-select:none;"> 38</span>  For example, you might want to run a simple indexing pipeline using [Chroma](../../document-stores/chromadocumentstore.mdx) as your Document Store using a Docker container. The `base` image only contains a basic install of Haystack, but you need to install the Chroma integration (`chroma-haystack`) package additionally. The best approach would be to create a custom Docker image shipping the extra dependency.
<span style="color:#666; user-select:none;"> 39</span>  
<span style="color:#666; user-select:none;"> 40</span>  Assuming you have a `main.py` script in your current folder, the Dockerfile would look like this:
<span style="color:#666; user-select:none;"> 41</span>  
<span style="color:#666; user-select:none;"> 42</span>  ```shell
<span style="color:#666; user-select:none;"> 43</span>  FROM deepset/haystack:base-v2.12.1
<span style="color:#666; user-select:none;"> 44</span>  
<span style="color:#666; user-select:none;"> 45</span>  RUN pip install chroma-haystack
<span style="color:#666; user-select:none;"> 46</span>  
<span style="color:#666; user-select:none;"> 47</span>  COPY ./main.py /usr/src/myapp/main.py
<span style="color:#666; user-select:none;"> 48</span>  
<span style="color:#666; user-select:none;"> 49</span>  ENTRYPOINT [&quot;python&quot;, &quot;/usr/src/myapp/main.py&quot;]
<span style="color:#666; user-select:none;"> 50</span>  ```
<span style="color:#666; user-select:none;"> 51</span>  
<span style="color:#666; user-select:none;"> 52</span>  Then you can create your custom Haystack image with:
<span style="color:#666; user-select:none;"> 53</span>  
<span style="color:#666; user-select:none;"> 54</span>  ```shell
<span style="color:#666; user-select:none;"> 55</span>  docker build . -t my-haystack-image
<span style="color:#666; user-select:none;"> 56</span>  ```
<span style="color:#666; user-select:none;"> 57</span>  
<span style="color:#666; user-select:none;"> 58</span>  ## Complex Application with Docker Compose
<span style="color:#666; user-select:none;"> 59</span>  
<span style="color:#666; user-select:none;"> 60</span>  A Haystack application running in Docker can go pretty far: with an internet connection, the container can reach external services providing vector databases, inference endpoints, and observability features.
<span style="color:#666; user-select:none;"> 61</span>  
<span style="color:#666; user-select:none;"> 62</span>  Still, you might want to orchestrate additional services for your Haystack container locally, for example, to reduce costs or increase performance. When your application runtime depends on more than one Docker container, [Docker Compose](https://docs.docker.com/compose/) is a great tool to keep everything together.
<span style="color:#666; user-select:none;"> 63</span>  
<span style="color:#666; user-select:none;"> 64</span>  As an example, let’s say your application wraps two pipelines: one to _index_ documents into a Qdrant instance and the other to _query_ those documents at a later time. This setup would require two Docker containers: one to run the pipelines as REST APIs using [Hayhooks](../hayhooks.mdx) and a second to run a Qdrant instance. For more information on configuring Hayhooks using Docker Compose, see the [official Hayhooks documentation](https://deepset-ai.github.io/hayhooks/getting-started/quick-start-docker/).
<span style="color:#666; user-select:none;"> 65</span>  
<span style="color:#666; user-select:none;"> 66</span>  For building the Hayhooks image, we can easily customize the base image of one of the latest versions of Hayhooks, adding required dependencies required by [`QdrantDocumentStore`](../../document-stores/qdrant-document-store.mdx). The Dockerfile would look like this:
<span style="color:#666; user-select:none;"> 67</span>  
<span style="color:#666; user-select:none;"> 68</span>  ```dockerfile Dockerfile
<span style="color:#666; user-select:none;"> 69</span>  FROM deepset/hayhooks:v1.16.0
<span style="color:#666; user-select:none;"> 70</span>  
<span style="color:#666; user-select:none;"> 71</span>  RUN pip install qdrant-haystack sentence-transformers
<span style="color:#666; user-select:none;"> 72</span>  
<span style="color:#666; user-select:none;"> 73</span>  CMD [&quot;hayhooks&quot;, &quot;run&quot;, &quot;--host&quot;, &quot;0.0.0.0&quot;]
<span style="color:#666; user-select:none;"> 74</span>  
<span style="color:#666; user-select:none;"> 75</span>  ```
<span style="color:#666; user-select:none;"> 76</span>  
<span style="color:#666; user-select:none;"> 77</span>  We wouldn’t need to customize Qdrant, so their official Docker image would work perfectly. The `docker-compose.yml` file would then look like this:
<span style="color:#666; user-select:none;"> 78</span>  
<span style="color:#666; user-select:none;"> 79</span>  ```yaml
<span style="color:#666; user-select:none;"> 80</span>  services:
<span style="color:#666; user-select:none;"> 81</span>    qdrant:
<span style="color:#666; user-select:none;"> 82</span>      image: qdrant/qdrant:latest
<span style="color:#666; user-select:none;"> 83</span>      restart: always
<span style="color:#666; user-select:none;"> 84</span>      container_name: qdrant
<span style="color:#666; user-select:none;"> 85</span>      ports:
<span style="color:#666; user-select:none;"> 86</span>        - 6333:6333
<span style="color:#666; user-select:none;"> 87</span>        - 6334:6334
<span style="color:#666; user-select:none;"> 88</span>      expose:
<span style="color:#666; user-select:none;"> 89</span>        - 6333
<span style="color:#666; user-select:none;"> 90</span>        - 6334
<span style="color:#666; user-select:none;"> 91</span>        - 6335
<span style="color:#666; user-select:none;"> 92</span>      configs:
<span style="color:#666; user-select:none;"> 93</span>        - source: qdrant_config
<span style="color:#666; user-select:none;"> 94</span>          target: /qdrant/config/production.yaml
<span style="color:#666; user-select:none;"> 95</span>      volumes:
<span style="color:#666; user-select:none;"> 96</span>        - ./qdrant_data:/qdrant_data
<span style="color:#666; user-select:none;"> 97</span>  
<span style="color:#666; user-select:none;"> 98</span>    hayhooks:
<span style="color:#666; user-select:none;"> 99</span>      build: . # Build from local Dockerfile
<span style="color:#666; user-select:none;">100</span>      container_name: hayhooks
<span style="color:#666; user-select:none;">101</span>      ports:
<span style="color:#666; user-select:none;">102</span>        - &quot;1416:1416&quot;
<span style="color:#666; user-select:none;">103</span>      volumes:
<span style="color:#666; user-select:none;">104</span>        - ./pipelines:/pipelines
<span style="color:#666; user-select:none;">105</span>      environment:
<span style="color:#666; user-select:none;">106</span>        - HAYHOOKS_PIPELINES_DIR=/pipelines
<span style="color:#666; user-select:none;">107</span>        - LOG=DEBUG
<span style="color:#666; user-select:none;">108</span>      depends_on:
<span style="color:#666; user-select:none;">109</span>        - qdrant
<span style="color:#666; user-select:none;">110</span>  
<span style="color:#666; user-select:none;">111</span>  configs:
<span style="color:#666; user-select:none;">112</span>    qdrant_config:
<span style="color:#666; user-select:none;">113</span>      content: |
<span style="color:#666; user-select:none;">114</span>        log_level: INFO
<span style="color:#666; user-select:none;">115</span>  ```
<span style="color:#666; user-select:none;">116</span>  
<span style="color:#666; user-select:none;">117</span>  For a functional example of a Docker Compose deployment, check out the [“RAG indexing and querying with Elasticsearch”](https://github.com/deepset-ai/hayhooks/tree/main/examples/rag_indexing_query) example from GitHub.
</pre>
        </div>
        </div>

</div>
</main>
</div>
</div>


</body>
</html>

