Files
kotaemon/development/index.html

4707 lines
114 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="prev" href="../usage/">
<link rel="next" href="../pages/app/customize-flows/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.40">
<title>Development - kotaemon Docs</title>
<link rel="stylesheet" href="../assets/stylesheets/main.8c3ca2c6.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
<script src="../assets/pymdownx-extras/material-extra-theme-TVq-kNRT.js" type="text/javascript"></script>
<script src="../assets/pymdownx-extras/material-extra-3rdparty-E-i8w1WA.js" type="text/javascript"></script>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../css/timeago.css">
<link rel="stylesheet" href="../assets/_mkdocstrings.css">
<link rel="stylesheet" href="../extra/css/code_select.css">
<link rel="stylesheet" href="../assets/pymdownx-extras/extra-fb5a2a1c86.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="dracula" data-md-color-primary="deep-purple" data-md-color-accent="deep-purple">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#introduction" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav
class="md-header__inner md-grid"
aria-label="header.title"
>
<a
href=".."
title="kotaemon Docs"
class="md-header__button md-logo"
aria-label="kotaemon Docs"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
kotaemon Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Development
</span>
</div>
</div>
</div>
<div class="md-header__options">
<div class="md-header-nav__scheme md-header-nav__button md-source__icon md-icon">
<a
href="javascript:toggleScheme();"
title="Light mode"
class="light-mode"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5s-1.65.15-2.39.42zM3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29zm.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14zM20.65 7l-1.77 3.79a7.02 7.02 0 0 0-2.38-4.15zm-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29zM12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44z"/></svg>
</a>
<a
href="javascript:toggleScheme();"
title="Dark mode"
class="dark-mode"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3zm3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95zm-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31"/></svg>
</a>
<a
href="javascript:toggleScheme();"
title="System preference"
class="system-mode"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.5 2c-1.79 1.15-3 3.18-3 5.5s1.21 4.35 3.03 5.5C4.46 13 2 10.54 2 7.5A5.5 5.5 0 0 1 7.5 2m11.57 1.5 1.43 1.43L4.93 20.5 3.5 19.07zm-6.18 2.43L11.41 5 9.97 6l.42-1.7L9 3.24l1.75-.12.58-1.65L12 3.1l1.73.03-1.35 1.13zm-3.3 3.61-1.16-.73-1.12.78.34-1.32-1.09-.83 1.36-.09.45-1.29.51 1.27 1.36.03-1.05.87zM19 13.5a5.5 5.5 0 0 1-5.5 5.5c-1.22 0-2.35-.4-3.26-1.07l7.69-7.69c.67.91 1.07 2.04 1.07 3.26m-4.4 6.58 2.77-1.15-.24 3.35zm4.33-2.7 1.15-2.77 2.2 2.54zm1.15-4.96-1.14-2.78 3.34.24zM9.63 18.93l2.77 1.15-2.53 2.19z"/></svg>
</a>
<!-- <a
href="javascript:toggleScheme();"
title="Unknown scheme"
class="unknown-mode"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m15.07 11.25-.9.92C13.45 12.89 13 13.5 13 15h-2v-.5c0-1.11.45-2.11 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41a2 2 0 0 0-2-2 2 2 0 0 0-2 2H8a4 4 0 0 1 4-4 4 4 0 0 1 4 4 3.2 3.2 0 0 1-.93 2.25M13 19h-2v-2h2M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10c0-5.53-4.5-10-10-10"/></svg>
</a> -->
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/Cinnamon/kotaemon" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</div>
<div class="md-source__repository">
Cinnamon/kotaemon
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href=".." class="md-tabs__link">
Getting Started
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="./" class="md-tabs__link">
Development
</a>
</li>
<li class="md-tabs__item">
<a href="../reference/agents/" class="md-tabs__link">
API Reference
</a>
</li>
<li class="md-tabs__item">
<a href="https://github.com/Cinnamon/kotaemon/releases" class="md-tabs__link">
Changelogs
</a>
</li>
<li class="md-tabs__item">
<a href="https://github.com/Cinnamon/kotaemon/issues" class="md-tabs__link">
Issue Tracker
</a>
</li>
<li class="md-tabs__item">
<a href="https://huggingface.co/spaces/cin-model/kotaemon-demo" class="md-tabs__link">
Live Demo
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="kotaemon Docs" class="md-nav__button md-logo" aria-label="kotaemon Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
kotaemon Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/Cinnamon/kotaemon" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</div>
<div class="md-source__repository">
Cinnamon/kotaemon
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" >
<div class="md-nav__link md-nav__container">
<a href=".." class="md-nav__link ">
<span class="md-ellipsis">
Getting Started
</span>
</a>
<label class="md-nav__link " for="__nav_1" id="__nav_1_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_1">
<span class="md-nav__icon md-icon"></span>
Getting Started
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../usage/" class="md-nav__link">
<span class="md-ellipsis">
Basic Usage
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
<div class="md-nav__link md-nav__container">
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Development
</span>
</a>
<label class="md-nav__link md-nav__link--active" for="__nav_2" id="__nav_2_label" tabindex="">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Development
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../pages/app/customize-flows/" class="md-nav__link">
<span class="md-ellipsis">
Customize flow logic
</span>
</a>
</li>
<li class="md-nav__item">
<a href="create-a-component/" class="md-nav__link">
<span class="md-ellipsis">
Creating a Component
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3" >
<label class="md-nav__link" for="__nav_2_3" id="__nav_2_3_label" tabindex="0">
<span class="md-ellipsis">
Components
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_3">
<span class="md-nav__icon md-icon"></span>
Components
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_1" >
<label class="md-nav__link" for="__nav_2_3_1" id="__nav_2_3_1_label" tabindex="0">
<span class="md-ellipsis">
Index
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_3_1">
<span class="md-nav__icon md-icon"></span>
Index
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../pages/app/index/file/" class="md-nav__link">
<span class="md-ellipsis">
File index
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_2" >
<div class="md-nav__link md-nav__container">
<a href="../pages/app/settings/overview/" class="md-nav__link ">
<span class="md-ellipsis">
Settings
</span>
</a>
<label class="md-nav__link " for="__nav_2_3_2" id="__nav_2_3_2_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_3_2">
<span class="md-nav__icon md-icon"></span>
Settings
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../pages/app/settings/user-settings/" class="md-nav__link">
<span class="md-ellipsis">
User settings
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_3" >
<label class="md-nav__link" for="__nav_2_3_3" id="__nav_2_3_3_label" tabindex="0">
<span class="md-ellipsis">
Extension
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_3_3">
<span class="md-nav__icon md-icon"></span>
Extension
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../pages/app/ext/user-management/" class="md-nav__link">
<span class="md-ellipsis">
User management
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="contributing/" class="md-nav__link">
<span class="md-ellipsis">
Contributing
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<div class="md-nav__link md-nav__container">
<a href="../reference/agents/" class="md-nav__link ">
<span class="md-ellipsis">
API Reference
</span>
</a>
<label class="md-nav__link " for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
API Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2" >
<div class="md-nav__link md-nav__container">
<a href="../reference/base/" class="md-nav__link ">
<span class="md-ellipsis">
Base
</span>
</a>
<label class="md-nav__link " for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_2">
<span class="md-nav__icon md-icon"></span>
Base
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/base/component/" class="md-nav__link">
<span class="md-ellipsis">
Component
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/base/schema/" class="md-nav__link">
<span class="md-ellipsis">
Schema
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3" >
<div class="md-nav__link md-nav__container">
<a href="../reference/chatbot/" class="md-nav__link ">
<span class="md-ellipsis">
Chatbot
</span>
</a>
<label class="md-nav__link " for="__nav_3_3" id="__nav_3_3_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3">
<span class="md-nav__icon md-icon"></span>
Chatbot
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/chatbot/base/" class="md-nav__link">
<span class="md-ellipsis">
Base
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/chatbot/simple_respondent/" class="md-nav__link">
<span class="md-ellipsis">
Simple Respondent
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../reference/cli/" class="md-nav__link">
<span class="md-ellipsis">
CLI
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_5" >
<div class="md-nav__link md-nav__container">
<a href="../reference/embeddings/" class="md-nav__link ">
<span class="md-ellipsis">
Embeddings
</span>
</a>
<label class="md-nav__link " for="__nav_3_5" id="__nav_3_5_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_5">
<span class="md-nav__icon md-icon"></span>
Embeddings
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/embeddings/base/" class="md-nav__link">
<span class="md-ellipsis">
Base
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/embeddings/endpoint_based/" class="md-nav__link">
<span class="md-ellipsis">
Endpoint Based
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/embeddings/fastembed/" class="md-nav__link">
<span class="md-ellipsis">
Fastembed
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/embeddings/langchain_based/" class="md-nav__link">
<span class="md-ellipsis">
Langchain Based
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/embeddings/openai/" class="md-nav__link">
<span class="md-ellipsis">
Openai
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/embeddings/tei_endpoint_embed/" class="md-nav__link">
<span class="md-ellipsis">
Tei Endpoint Embed
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_6" >
<div class="md-nav__link md-nav__container">
<a href="../reference/indices/" class="md-nav__link ">
<span class="md-ellipsis">
Indices
</span>
</a>
<label class="md-nav__link " for="__nav_3_6" id="__nav_3_6_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_6">
<span class="md-nav__icon md-icon"></span>
Indices
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/indices/base/" class="md-nav__link">
<span class="md-ellipsis">
Base
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_6_2" >
<div class="md-nav__link md-nav__container">
<a href="../reference/indices/extractors/" class="md-nav__link ">
<span class="md-ellipsis">
Extractors
</span>
</a>
<label class="md-nav__link " for="__nav_3_6_2" id="__nav_3_6_2_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_6_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_6_2">
<span class="md-nav__icon md-icon"></span>
Extractors
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/indices/extractors/doc_parsers/" class="md-nav__link">
<span class="md-ellipsis">
Doc Parsers
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_6_3" >
<div class="md-nav__link md-nav__container">
<a href="../reference/indices/ingests/" class="md-nav__link ">
<span class="md-ellipsis">
Ingests
</span>
</a>
<label class="md-nav__link " for="__nav_3_6_3" id="__nav_3_6_3_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_6_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_6_3">
<span class="md-nav__icon md-icon"></span>
Ingests
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/indices/ingests/files/" class="md-nav__link">
<span class="md-ellipsis">
Files
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_6_4" >
<div class="md-nav__link md-nav__container">
<a href="../reference/indices/qa/" class="md-nav__link ">
<span class="md-ellipsis">
Qa
</span>
</a>
<label class="md-nav__link " for="__nav_3_6_4" id="__nav_3_6_4_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_6_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_6_4">
<span class="md-nav__icon md-icon"></span>
Qa
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/indices/qa/citation/" class="md-nav__link">
<span class="md-ellipsis">
Citation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/indices/qa/citation_qa/" class="md-nav__link">
<span class="md-ellipsis">
Citation Qa
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/indices/qa/citation_qa_inline/" class="md-nav__link">
<span class="md-ellipsis">
Citation Qa Inline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/indices/qa/format_context/" class="md-nav__link">
<span class="md-ellipsis">
Format Context
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/indices/qa/utils/" class="md-nav__link">
<span class="md-ellipsis">
Utils
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_6_5" >
<div class="md-nav__link md-nav__container">
<a href="../reference/indices/rankings/" class="md-nav__link ">
<span class="md-ellipsis">
Rankings
</span>
</a>
<label class="md-nav__link " for="__nav_3_6_5" id="__nav_3_6_5_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_6_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_6_5">
<span class="md-nav__icon md-icon"></span>
Rankings
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/indices/rankings/base/" class="md-nav__link">
<span class="md-ellipsis">
Base
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/indices/rankings/cohere/" class="md-nav__link">
<span class="md-ellipsis">
Cohere
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/indices/rankings/llm/" class="md-nav__link">
<span class="md-ellipsis">
Llm
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/indices/rankings/llm_scoring/" class="md-nav__link">
<span class="md-ellipsis">
Llm Scoring
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/indices/rankings/llm_trulens/" class="md-nav__link">
<span class="md-ellipsis">
Llm Trulens
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_6_6" >
<div class="md-nav__link md-nav__container">
<a href="../reference/indices/retrievers/" class="md-nav__link ">
<span class="md-ellipsis">
Retrievers
</span>
</a>
<label class="md-nav__link " for="__nav_3_6_6" id="__nav_3_6_6_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_6_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_6_6">
<span class="md-nav__icon md-icon"></span>
Retrievers
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/indices/retrievers/jina_web_search/" class="md-nav__link">
<span class="md-ellipsis">
Jina Web Search
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/indices/retrievers/tavily_web_search/" class="md-nav__link">
<span class="md-ellipsis">
Tavily Web Search
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../reference/indices/splitters/" class="md-nav__link">
<span class="md-ellipsis">
Splitters
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/indices/vectorindex/" class="md-nav__link">
<span class="md-ellipsis">
Vectorindex
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_7" >
<div class="md-nav__link md-nav__container">
<a href="../reference/llms/" class="md-nav__link ">
<span class="md-ellipsis">
LLMs
</span>
</a>
<label class="md-nav__link " for="__nav_3_7" id="__nav_3_7_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_7">
<span class="md-nav__icon md-icon"></span>
LLMs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/llms/base/" class="md-nav__link">
<span class="md-ellipsis">
Base
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/llms/branching/" class="md-nav__link">
<span class="md-ellipsis">
Branching
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_7_3" >
<div class="md-nav__link md-nav__container">
<a href="../reference/llms/chats/" class="md-nav__link ">
<span class="md-ellipsis">
Chats
</span>
</a>
<label class="md-nav__link " for="__nav_3_7_3" id="__nav_3_7_3_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_7_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_7_3">
<span class="md-nav__icon md-icon"></span>
Chats
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/llms/chats/base/" class="md-nav__link">
<span class="md-ellipsis">
Base
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/llms/chats/endpoint_based/" class="md-nav__link">
<span class="md-ellipsis">
Endpoint Based
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/llms/chats/langchain_based/" class="md-nav__link">
<span class="md-ellipsis">
Langchain Based
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/llms/chats/llamacpp/" class="md-nav__link">
<span class="md-ellipsis">
Llamacpp
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/llms/chats/openai/" class="md-nav__link">
<span class="md-ellipsis">
Openai
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_7_4" >
<div class="md-nav__link md-nav__container">
<a href="../reference/llms/completions/" class="md-nav__link ">
<span class="md-ellipsis">
Completions
</span>
</a>
<label class="md-nav__link " for="__nav_3_7_4" id="__nav_3_7_4_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_7_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_7_4">
<span class="md-nav__icon md-icon"></span>
Completions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/llms/completions/base/" class="md-nav__link">
<span class="md-ellipsis">
Base
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/llms/completions/langchain_based/" class="md-nav__link">
<span class="md-ellipsis">
Langchain Based
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../reference/llms/cot/" class="md-nav__link">
<span class="md-ellipsis">
Cot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/llms/linear/" class="md-nav__link">
<span class="md-ellipsis">
Linear
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_7_7" >
<div class="md-nav__link md-nav__container">
<a href="../reference/llms/prompts/" class="md-nav__link ">
<span class="md-ellipsis">
Prompts
</span>
</a>
<label class="md-nav__link " for="__nav_3_7_7" id="__nav_3_7_7_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_7_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_7_7">
<span class="md-nav__icon md-icon"></span>
Prompts
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/llms/prompts/base/" class="md-nav__link">
<span class="md-ellipsis">
Base
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/llms/prompts/template/" class="md-nav__link">
<span class="md-ellipsis">
Template
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_8" >
<div class="md-nav__link md-nav__container">
<a href="../reference/loaders/" class="md-nav__link ">
<span class="md-ellipsis">
Loaders
</span>
</a>
<label class="md-nav__link " for="__nav_3_8" id="__nav_3_8_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_8">
<span class="md-nav__icon md-icon"></span>
Loaders
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/loaders/adobe_loader/" class="md-nav__link">
<span class="md-ellipsis">
Adobe Loader
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/azureai_document_intelligence_loader/" class="md-nav__link">
<span class="md-ellipsis">
Azureai Document Intelligence Loader
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/base/" class="md-nav__link">
<span class="md-ellipsis">
Base
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/composite_loader/" class="md-nav__link">
<span class="md-ellipsis">
Composite Loader
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/docling_loader/" class="md-nav__link">
<span class="md-ellipsis">
Docling Loader
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/docx_loader/" class="md-nav__link">
<span class="md-ellipsis">
Docx Loader
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/excel_loader/" class="md-nav__link">
<span class="md-ellipsis">
Excel Loader
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/html_loader/" class="md-nav__link">
<span class="md-ellipsis">
Html Loader
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/mathpix_loader/" class="md-nav__link">
<span class="md-ellipsis">
Mathpix Loader
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/ocr_loader/" class="md-nav__link">
<span class="md-ellipsis">
Ocr Loader
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/pdf_loader/" class="md-nav__link">
<span class="md-ellipsis">
Pdf Loader
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/txt_loader/" class="md-nav__link">
<span class="md-ellipsis">
Txt Loader
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/unstructured_loader/" class="md-nav__link">
<span class="md-ellipsis">
Unstructured Loader
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_8_14" >
<div class="md-nav__link md-nav__container">
<a href="../reference/loaders/utils/" class="md-nav__link ">
<span class="md-ellipsis">
Utils
</span>
</a>
<label class="md-nav__link " for="__nav_3_8_14" id="__nav_3_8_14_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_8_14_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_8_14">
<span class="md-nav__icon md-icon"></span>
Utils
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/loaders/utils/adobe/" class="md-nav__link">
<span class="md-ellipsis">
Adobe
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/utils/box/" class="md-nav__link">
<span class="md-ellipsis">
Box
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/utils/gpt4v/" class="md-nav__link">
<span class="md-ellipsis">
Gpt4V
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/utils/pdf_ocr/" class="md-nav__link">
<span class="md-ellipsis">
Pdf Ocr
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/utils/table/" class="md-nav__link">
<span class="md-ellipsis">
Table
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../reference/loaders/web_loader/" class="md-nav__link">
<span class="md-ellipsis">
Web Loader
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_9" >
<div class="md-nav__link md-nav__container">
<a href="../reference/parsers/" class="md-nav__link ">
<span class="md-ellipsis">
Parsers
</span>
</a>
<label class="md-nav__link " for="__nav_3_9" id="__nav_3_9_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_9">
<span class="md-nav__icon md-icon"></span>
Parsers
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/parsers/regex_extractor/" class="md-nav__link">
<span class="md-ellipsis">
Regex Extractor
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_10" >
<div class="md-nav__link md-nav__container">
<a href="../reference/rerankings/" class="md-nav__link ">
<span class="md-ellipsis">
Rerankings
</span>
</a>
<label class="md-nav__link " for="__nav_3_10" id="__nav_3_10_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_10_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_10">
<span class="md-nav__icon md-icon"></span>
Rerankings
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/rerankings/base/" class="md-nav__link">
<span class="md-ellipsis">
Base
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/rerankings/cohere/" class="md-nav__link">
<span class="md-ellipsis">
Cohere
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/rerankings/tei_fast_rerank/" class="md-nav__link">
<span class="md-ellipsis">
Tei Fast Rerank
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_11" >
<div class="md-nav__link md-nav__container">
<a href="../reference/storages/" class="md-nav__link ">
<span class="md-ellipsis">
Storages
</span>
</a>
<label class="md-nav__link " for="__nav_3_11" id="__nav_3_11_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_11_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_11">
<span class="md-nav__icon md-icon"></span>
Storages
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_11_1" >
<div class="md-nav__link md-nav__container">
<a href="../reference/storages/docstores/" class="md-nav__link ">
<span class="md-ellipsis">
Docstores
</span>
</a>
<label class="md-nav__link " for="__nav_3_11_1" id="__nav_3_11_1_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_11_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_11_1">
<span class="md-nav__icon md-icon"></span>
Docstores
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/storages/docstores/base/" class="md-nav__link">
<span class="md-ellipsis">
Base
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/storages/docstores/elasticsearch/" class="md-nav__link">
<span class="md-ellipsis">
Elasticsearch
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/storages/docstores/in_memory/" class="md-nav__link">
<span class="md-ellipsis">
In Memory
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/storages/docstores/lancedb/" class="md-nav__link">
<span class="md-ellipsis">
Lancedb
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/storages/docstores/simple_file/" class="md-nav__link">
<span class="md-ellipsis">
Simple File
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_11_2" >
<div class="md-nav__link md-nav__container">
<a href="../reference/storages/vectorstores/" class="md-nav__link ">
<span class="md-ellipsis">
Vectorstores
</span>
</a>
<label class="md-nav__link " for="__nav_3_11_2" id="__nav_3_11_2_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_11_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_11_2">
<span class="md-nav__icon md-icon"></span>
Vectorstores
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/storages/vectorstores/base/" class="md-nav__link">
<span class="md-ellipsis">
Base
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/storages/vectorstores/chroma/" class="md-nav__link">
<span class="md-ellipsis">
Chroma
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/storages/vectorstores/in_memory/" class="md-nav__link">
<span class="md-ellipsis">
In Memory
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/storages/vectorstores/lancedb/" class="md-nav__link">
<span class="md-ellipsis">
Lancedb
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/storages/vectorstores/milvus/" class="md-nav__link">
<span class="md-ellipsis">
Milvus
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/storages/vectorstores/qdrant/" class="md-nav__link">
<span class="md-ellipsis">
Qdrant
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../reference/storages/vectorstores/simple_file/" class="md-nav__link">
<span class="md-ellipsis">
Simple File
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="https://github.com/Cinnamon/kotaemon/releases" class="md-nav__link">
<span class="md-ellipsis">
Changelogs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://github.com/Cinnamon/kotaemon/issues" class="md-nav__link">
<span class="md-ellipsis">
Issue Tracker
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://huggingface.co/spaces/cin-model/kotaemon-demo" class="md-nav__link">
<span class="md-ellipsis">
Live Demo
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Page contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Page contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#introduction" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
<nav class="md-nav" aria-label="Introduction">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#for-end-users" class="md-nav__link">
<span class="md-ellipsis">
For end users
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#for-developers" class="md-nav__link">
<span class="md-ellipsis">
For developers
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#key-features" class="md-nav__link">
<span class="md-ellipsis">
Key Features
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#installation" class="md-nav__link">
<span class="md-ellipsis">
Installation
</span>
</a>
<nav class="md-nav" aria-label="Installation">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#system-requirements" class="md-nav__link">
<span class="md-ellipsis">
System requirements
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#with-docker-recommended" class="md-nav__link">
<span class="md-ellipsis">
With Docker (recommended)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#without-docker" class="md-nav__link">
<span class="md-ellipsis">
Without Docker
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#setup-graphrag" class="md-nav__link">
<span class="md-ellipsis">
Setup GraphRAG
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#setup-local-models-for-localprivate-rag" class="md-nav__link">
<span class="md-ellipsis">
Setup Local Models (for local/private RAG)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#setup-multimodal-document-parsing-ocr-table-parsing-figure-extraction" class="md-nav__link">
<span class="md-ellipsis">
Setup multimodal document parsing (OCR, table parsing, figure extraction)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#customize-your-application" class="md-nav__link">
<span class="md-ellipsis">
Customize your application
</span>
</a>
<nav class="md-nav" aria-label="Customize your application">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#flowsettingspy" class="md-nav__link">
<span class="md-ellipsis">
flowsettings.py
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#env" class="md-nav__link">
<span class="md-ellipsis">
.env
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#adding-your-own-rag-pipeline" class="md-nav__link">
<span class="md-ellipsis">
Adding your own RAG pipeline
</span>
</a>
<nav class="md-nav" aria-label="Adding your own RAG pipeline">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#custom-reasoning-pipeline" class="md-nav__link">
<span class="md-ellipsis">
Custom Reasoning Pipeline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#custom-indexing-pipeline" class="md-nav__link">
<span class="md-ellipsis">
Custom Indexing Pipeline
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/Cinnamon/kotaemon/edit/main/docs/development/index.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75z"/></svg>
</a>
<h1>Development</h1>
<div><h2 id="introduction">Introduction<a class="headerlink" href="#introduction" title="Permanent link"></a></h2>
<p>This project serves as a functional RAG UI for both end users who want to do QA on their
documents and developers who want to build their own RAG pipeline.
<br></p>
<div class="language-text highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-0-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-0-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-0-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-0-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-0-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-0-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-0-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-0-10">10</a></span>
<span class="normal"><a href="#__codelineno-0-11">11</a></span>
<span class="normal"><a href="#__codelineno-0-12">12</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a>+----------------------------------------------------------------------------+
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a>| End users: Those who use apps built with `kotaemon`. |
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a>| (You use an app like the one in the demo above) |
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a>| +----------------------------------------------------------------+ |
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a>| | Developers: Those who built with `kotaemon`. | |
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6"></a>| | (You have `import kotaemon` somewhere in your project) | |
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7"></a>| | +----------------------------------------------------+ | |
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8"></a>| | | Contributors: Those who make `kotaemon` better. | | |
</span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9"></a>| | | (You make PR to this repo) | | |
</span><span id="__span-0-10"><a id="__codelineno-0-10" name="__codelineno-0-10"></a>| | +----------------------------------------------------+ | |
</span><span id="__span-0-11"><a id="__codelineno-0-11" name="__codelineno-0-11"></a>| +----------------------------------------------------------------+ |
</span><span id="__span-0-12"><a id="__codelineno-0-12" name="__codelineno-0-12"></a>+----------------------------------------------------------------------------+
</span></code></pre></div></td></tr></table></div>
<h3 id="for-end-users">For end users<a class="headerlink" href="#for-end-users" title="Permanent link"></a></h3>
<ul>
<li><strong>Clean &amp; Minimalistic UI</strong>: A user-friendly interface for RAG-based QA.</li>
<li><strong>Support for Various LLMs</strong>: Compatible with LLM API providers (OpenAI, AzureOpenAI, Cohere, etc.) and local LLMs (via <code>ollama</code> and <code>llama-cpp-python</code>).</li>
<li><strong>Easy Installation</strong>: Simple scripts to get you started quickly.</li>
</ul>
<h3 id="for-developers">For developers<a class="headerlink" href="#for-developers" title="Permanent link"></a></h3>
<ul>
<li><strong>Framework for RAG Pipelines</strong>: Tools to build your own RAG-based document QA pipeline.</li>
<li><strong>Customizable UI</strong>: See your RAG pipeline in action with the provided UI, built with <a href="https://github.com/gradio-app/gradio">Gradio <img src="https://img.shields.io/github/stars/gradio-app/gradio"></a>.</li>
<li><strong>Gradio Theme</strong>: If you use Gradio for development, check out our theme here: <a href="https://github.com/lone17/kotaemon-gradio-theme">kotaemon-gradio-theme</a>.</li>
</ul>
<h2 id="key-features">Key Features<a class="headerlink" href="#key-features" title="Permanent link"></a></h2>
<ul>
<li><strong>Host your own document QA (RAG) web-UI</strong>: Support multi-user login, organize your files in private/public collections, collaborate and share your favorite chat with others.</li>
</ul>
<ul>
<li><strong>Organize your LLM &amp; Embedding models</strong>: Support both local LLMs &amp; popular API providers (OpenAI, Azure, Ollama, Groq).</li>
</ul>
<ul>
<li><strong>Hybrid RAG pipeline</strong>: Sane default RAG pipeline with hybrid (full-text &amp; vector) retriever and re-ranking to ensure best retrieval quality.</li>
</ul>
<ul>
<li><strong>Multi-modal QA support</strong>: Perform Question Answering on multiple documents with figures and tables support. Support multi-modal document parsing (selectable options on UI).</li>
</ul>
<ul>
<li><strong>Advanced citations with document preview</strong>: By default the system will provide detailed citations to ensure the correctness of LLM answers. View your citations (incl. relevant score) directly in the <em>in-browser PDF viewer</em> with highlights. Warning when retrieval pipeline return low relevant articles.</li>
</ul>
<ul>
<li><strong>Support complex reasoning methods</strong>: Use question decomposition to answer your complex/multi-hop question. Support agent-based reasoning with <code>ReAct</code>, <code>ReWOO</code> and other agents.</li>
</ul>
<ul>
<li><strong>Configurable settings UI</strong>: You can adjust most important aspects of retrieval &amp; generation process on the UI (incl. prompts).</li>
</ul>
<ul>
<li><strong>Extensible</strong>: Being built on Gradio, you are free to customize or add any UI elements as you like. Also, we aim to support multiple strategies for document indexing &amp; retrieval. <code>GraphRAG</code> indexing pipeline is provided as an example.</li>
</ul>
<p><img alt="Preview" src="https://raw.githubusercontent.com/Cinnamon/kotaemon/main/docs/images/preview.png"></p>
<h2 id="installation">Installation<a class="headerlink" href="#installation" title="Permanent link"></a></h2>
<blockquote>
<p>If you are not a developer and just want to use the app, please check out our easy-to-follow <a href="https://cinnamon.github.io/kotaemon/">User Guide</a>. Download the <code>.zip</code> file from the <a href="https://github.com/Cinnamon/kotaemon/releases/latest">latest release</a> to get all the newest features and bug fixes.</p>
</blockquote>
<h3 id="system-requirements">System requirements<a class="headerlink" href="#system-requirements" title="Permanent link"></a></h3>
<ol>
<li><a href="https://www.python.org/downloads/">Python</a> &gt;= 3.10</li>
<li><a href="https://www.docker.com/">Docker</a>: optional, if you <a href="../..#with-docker-recommended">install with Docker</a></li>
<li><a href="https://docs.unstructured.io/open-source/installation/full-installation#full-installation">Unstructured</a> if you want to process files other than <code>.pdf</code>, <code>.html</code>, <code>.mhtml</code>, and <code>.xlsx</code> documents. Installation steps differ depending on your operating system. Please visit the link and follow the specific instructions provided there.</li>
</ol>
<h3 id="with-docker-recommended">With Docker (recommended)<a class="headerlink" href="#with-docker-recommended" title="Permanent link"></a></h3>
<ol>
<li>
<p>We support both <code>lite</code> &amp; <code>full</code> version of Docker images. With <code>full</code> version, the extra packages of <code>unstructured</code> will be installed, which can support additional file types (<code>.doc</code>, <code>.docx</code>, ...) but the cost is larger docker image size. For most users, the <code>lite</code> image should work well in most cases.</p>
<ul>
<li>
<p>To use the <code>full</code> version.</p>
<div class="language-bash highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-1-1">1</a></span>
<span class="normal"><a href="#__codelineno-1-2">2</a></span>
<span class="normal"><a href="#__codelineno-1-3">3</a></span>
<span class="normal"><a href="#__codelineno-1-4">4</a></span>
<span class="normal"><a href="#__codelineno-1-5">5</a></span>
<span class="normal"><a href="#__codelineno-1-6">6</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1"></a>docker<span class="w"> </span>run<span class="w"> </span><span class="se">\</span>
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2"></a>-e<span class="w"> </span><span class="nv">GRADIO_SERVER_NAME</span><span class="o">=</span><span class="m">0</span>.0.0.0<span class="w"> </span><span class="se">\</span>
</span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3"></a>-e<span class="w"> </span><span class="nv">GRADIO_SERVER_PORT</span><span class="o">=</span><span class="m">7860</span><span class="w"> </span><span class="se">\</span>
</span><span id="__span-1-4"><a id="__codelineno-1-4" name="__codelineno-1-4"></a>-v<span class="w"> </span>./ktem_app_data:/app/ktem_app_data<span class="w"> </span><span class="se">\</span>
</span><span id="__span-1-5"><a id="__codelineno-1-5" name="__codelineno-1-5"></a>-p<span class="w"> </span><span class="m">7860</span>:7860<span class="w"> </span>-it<span class="w"> </span>--rm<span class="w"> </span><span class="se">\</span>
</span><span id="__span-1-6"><a id="__codelineno-1-6" name="__codelineno-1-6"></a>ghcr.io/cinnamon/kotaemon:main-full
</span></code></pre></div></td></tr></table></div>
</li>
</ul>
<ul>
<li>
<p>To use the <code>full</code> version with bundled <strong>Ollama</strong> for <em>local / private RAG</em>.</p>
<div class="language-bash highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-2-1">1</a></span>
<span class="normal"><a href="#__codelineno-2-2">2</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1"></a><span class="c1"># change image name to</span>
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2"></a>docker<span class="w"> </span>run<span class="w"> </span>&lt;...&gt;<span class="w"> </span>ghcr.io/cinnamon/kotaemon:main-ollama
</span></code></pre></div></td></tr></table></div>
</li>
</ul>
<ul>
<li>To use the <code>lite</code> version.</li>
</ul>
<div class="language-bash highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-3-1">1</a></span>
<span class="normal"><a href="#__codelineno-3-2">2</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1"></a><span class="w"> </span><span class="c1"># change image name to</span>
</span><span id="__span-3-2"><a id="__codelineno-3-2" name="__codelineno-3-2"></a><span class="w"> </span>docker<span class="w"> </span>run<span class="w"> </span>&lt;...&gt;<span class="w"> </span>ghcr.io/cinnamon/kotaemon:main-lite
</span></code></pre></div></td></tr></table></div>
</li>
<li>
<p>We currently support and test two platforms: <code>linux/amd64</code> and <code>linux/arm64</code> (for newer Mac). You can specify the platform by passing <code>--platform</code> in the <code>docker run</code> command. For example:</p>
<div class="language-bash highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-4-1">1</a></span>
<span class="normal"><a href="#__codelineno-4-2">2</a></span>
<span class="normal"><a href="#__codelineno-4-3">3</a></span>
<span class="normal"><a href="#__codelineno-4-4">4</a></span>
<span class="normal"><a href="#__codelineno-4-5">5</a></span>
<span class="normal"><a href="#__codelineno-4-6">6</a></span>
<span class="normal"><a href="#__codelineno-4-7">7</a></span>
<span class="normal"><a href="#__codelineno-4-8">8</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1"></a><span class="c1"># To run docker with platform linux/arm64</span>
</span><span id="__span-4-2"><a id="__codelineno-4-2" name="__codelineno-4-2"></a>docker<span class="w"> </span>run<span class="w"> </span><span class="se">\</span>
</span><span id="__span-4-3"><a id="__codelineno-4-3" name="__codelineno-4-3"></a>-e<span class="w"> </span><span class="nv">GRADIO_SERVER_NAME</span><span class="o">=</span><span class="m">0</span>.0.0.0<span class="w"> </span><span class="se">\</span>
</span><span id="__span-4-4"><a id="__codelineno-4-4" name="__codelineno-4-4"></a>-e<span class="w"> </span><span class="nv">GRADIO_SERVER_PORT</span><span class="o">=</span><span class="m">7860</span><span class="w"> </span><span class="se">\</span>
</span><span id="__span-4-5"><a id="__codelineno-4-5" name="__codelineno-4-5"></a>-v<span class="w"> </span>./ktem_app_data:/app/ktem_app_data<span class="w"> </span><span class="se">\</span>
</span><span id="__span-4-6"><a id="__codelineno-4-6" name="__codelineno-4-6"></a>-p<span class="w"> </span><span class="m">7860</span>:7860<span class="w"> </span>-it<span class="w"> </span>--rm<span class="w"> </span><span class="se">\</span>
</span><span id="__span-4-7"><a id="__codelineno-4-7" name="__codelineno-4-7"></a>--platform<span class="w"> </span>linux/arm64<span class="w"> </span><span class="se">\</span>
</span><span id="__span-4-8"><a id="__codelineno-4-8" name="__codelineno-4-8"></a>ghcr.io/cinnamon/kotaemon:main-lite
</span></code></pre></div></td></tr></table></div>
</li>
<li>
<p>Once everything is set up correctly, you can go to <code>http://localhost:7860/</code> to access the WebUI.</p>
</li>
<li>
<p>We use <a href="https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry">GHCR</a> to store docker images, all images can be found <a href="https://github.com/Cinnamon/kotaemon/pkgs/container/kotaemon">here.</a></p>
</li>
</ol>
<h3 id="without-docker">Without Docker<a class="headerlink" href="#without-docker" title="Permanent link"></a></h3>
<ol>
<li>
<p>Clone and install required packages on a fresh python environment.</p>
<div class="language-shell highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-5-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-5-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-5-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-5-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-5-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-5-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-5-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-5-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-5-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-5-10">10</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1"></a><span class="c1"># optional (setup env)</span>
</span><span id="__span-5-2"><a id="__codelineno-5-2" name="__codelineno-5-2"></a>conda<span class="w"> </span>create<span class="w"> </span>-n<span class="w"> </span>kotaemon<span class="w"> </span><span class="nv">python</span><span class="o">=</span><span class="m">3</span>.10
</span><span id="__span-5-3"><a id="__codelineno-5-3" name="__codelineno-5-3"></a>conda<span class="w"> </span>activate<span class="w"> </span>kotaemon
</span><span id="__span-5-4"><a id="__codelineno-5-4" name="__codelineno-5-4"></a>
</span><span id="__span-5-5"><a id="__codelineno-5-5" name="__codelineno-5-5"></a><span class="c1"># clone this repo</span>
</span><span id="__span-5-6"><a id="__codelineno-5-6" name="__codelineno-5-6"></a>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/Cinnamon/kotaemon
</span><span id="__span-5-7"><a id="__codelineno-5-7" name="__codelineno-5-7"></a><span class="nb">cd</span><span class="w"> </span>kotaemon
</span><span id="__span-5-8"><a id="__codelineno-5-8" name="__codelineno-5-8"></a>
</span><span id="__span-5-9"><a id="__codelineno-5-9" name="__codelineno-5-9"></a>pip<span class="w"> </span>install<span class="w"> </span>-e<span class="w"> </span><span class="s2">"libs/kotaemon[all]"</span>
</span><span id="__span-5-10"><a id="__codelineno-5-10" name="__codelineno-5-10"></a>pip<span class="w"> </span>install<span class="w"> </span>-e<span class="w"> </span><span class="s2">"libs/ktem"</span>
</span></code></pre></div></td></tr></table></div>
</li>
<li>
<p>Create a <code>.env</code> file in the root of this project. Use <code>.env.example</code> as a template</p>
<p>The <code>.env</code> file is there to serve use cases where users want to pre-config the models before starting up the app (e.g. deploy the app on HF hub). The file will only be used to populate the db once upon the first run, it will no longer be used in consequent runs.</p>
</li>
<li>
<p>(Optional) To enable in-browser <code>PDF_JS</code> viewer, download <a href="https://github.com/mozilla/pdf.js/releases/download/v4.0.379/pdfjs-4.0.379-dist.zip">PDF_JS_DIST</a> then extract it to <code>libs/ktem/ktem/assets/prebuilt</code></p>
</li>
</ol>
<p><img src="https://raw.githubusercontent.com/Cinnamon/kotaemon/main/docs/images/pdf-viewer-setup.png" alt="pdf-setup" width="300"></p>
<ol>
<li>
<p>Start the web server:</p>
<div class="language-shell highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-6-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1"></a>python<span class="w"> </span>app.py
</span></code></pre></div></td></tr></table></div>
<ul>
<li>The app will be automatically launched in your browser.</li>
<li>Default username and password are both <code>admin</code>. You can set up additional users directly through the UI.</li>
</ul>
<p><img alt="Chat tab" src="https://raw.githubusercontent.com/Cinnamon/kotaemon/main/docs/images/chat-tab.png"></p>
</li>
<li>
<p>Check the <code>Resources</code> tab and <code>LLMs and Embeddings</code> and ensure that your <code>api_key</code> value is set correctly from your <code>.env</code> file. If it is not set, you can set it there.</p>
</li>
</ol>
<h3 id="setup-graphrag">Setup GraphRAG<a class="headerlink" href="#setup-graphrag" title="Permanent link"></a></h3>
<blockquote>
<p>[!NOTE]
Official MS GraphRAG indexing only works with OpenAI or Ollama API.
We recommend most users to use NanoGraphRAG implementation for straightforward integration with Kotaemon.</p>
</blockquote>
<details>
<summary>Setup Nano GRAPHRAG</summary>
- Install nano-GraphRAG: `pip install nano-graphrag`
- `nano-graphrag` install might introduce version conflicts, see [this issue](https://github.com/Cinnamon/kotaemon/issues/440)
- To quickly fix: `pip uninstall hnswlib chroma-hnswlib &amp;&amp; pip install chroma-hnswlib`
- Launch Kotaemon with `USE_NANO_GRAPHRAG=true` environment variable.
- Set your default LLM &amp; Embedding models in Resources setting and it will be recognized automatically from NanoGraphRAG.
</details>
<details>
<summary>Setup LIGHTRAG</summary>
- Install LightRAG: `pip install git+https://github.com/HKUDS/LightRAG.git`
- `LightRAG` install might introduce version conflicts, see [this issue](https://github.com/Cinnamon/kotaemon/issues/440)
- To quickly fix: `pip uninstall hnswlib chroma-hnswlib &amp;&amp; pip install chroma-hnswlib`
- Launch Kotaemon with `USE_LIGHTRAG=true` environment variable.
- Set your default LLM &amp; Embedding models in Resources setting and it will be recognized automatically from LightRAG.
</details>
<details>
<summary>Setup MS GRAPHRAG</summary>
- **Non-Docker Installation**: If you are not using Docker, install GraphRAG with the following command:
<div class="language-shell highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-7-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1"></a>pip<span class="w"> </span>install<span class="w"> </span><span class="s2">"graphrag&lt;=0.3.6"</span><span class="w"> </span>future
</span></code></pre></div></td></tr></table></div>
- **Setting Up API KEY**: To use the GraphRAG retriever feature, ensure you set the `GRAPHRAG_API_KEY` environment variable. You can do this directly in your environment or by adding it to a `.env` file.
- **Using Local Models and Custom Settings**: If you want to use GraphRAG with local models (like `Ollama`) or customize the default LLM and other configurations, set the `USE_CUSTOMIZED_GRAPHRAG_SETTING` environment variable to true. Then, adjust your settings in the `settings.yaml.example` file.
</details>
<h3 id="setup-local-models-for-localprivate-rag">Setup Local Models (for local/private RAG)<a class="headerlink" href="#setup-local-models-for-localprivate-rag" title="Permanent link"></a></h3>
<p>See <a href="../local_model/">Local model setup</a>.</p>
<h3 id="setup-multimodal-document-parsing-ocr-table-parsing-figure-extraction">Setup multimodal document parsing (OCR, table parsing, figure extraction)<a class="headerlink" href="#setup-multimodal-document-parsing-ocr-table-parsing-figure-extraction" title="Permanent link"></a></h3>
<p>These options are available:</p>
<ul>
<li><a href="https://azure.microsoft.com/en-us/products/ai-services/ai-document-intelligence">Azure Document Intelligence (API)</a></li>
<li><a href="https://developer.adobe.com/document-services/docs/overview/pdf-extract-api/">Adobe PDF Extract (API)</a></li>
<li><a href="https://github.com/DS4SD/docling">Docling (local, open-source)</a><ul>
<li>To use Docling, first install required dependencies: <code>pip install docling</code></li>
</ul>
</li>
</ul>
<p>Select corresponding loaders in <code>Settings -&gt; Retrieval Settings -&gt; File loader</code></p>
<h3 id="customize-your-application">Customize your application<a class="headerlink" href="#customize-your-application" title="Permanent link"></a></h3>
<ul>
<li>By default, all application data is stored in the <code>./ktem_app_data</code> folder. You can back up or copy this folder to transfer your installation to a new machine.</li>
</ul>
<ul>
<li>
<p>For advanced users or specific use cases, you can customize these files:</p>
<ul>
<li><code>flowsettings.py</code></li>
<li><code>.env</code></li>
</ul>
</li>
</ul>
<h4 id="flowsettingspy"><code>flowsettings.py</code><a class="headerlink" href="#flowsettingspy" title="Permanent link"></a></h4>
<p>This file contains the configuration of your application. You can use the example
<a href="../../flowsettings.py">here</a> as the starting point.</p>
<details>
<summary>Notable settings</summary>
<div class="language-python highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-8-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-8-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-8-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-8-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-8-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-8-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-8-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-8-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-8-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-8-10">10</a></span>
<span class="normal"><a href="#__codelineno-8-11">11</a></span>
<span class="normal"><a href="#__codelineno-8-12">12</a></span>
<span class="normal"><a href="#__codelineno-8-13">13</a></span>
<span class="normal"><a href="#__codelineno-8-14">14</a></span>
<span class="normal"><a href="#__codelineno-8-15">15</a></span>
<span class="normal"><a href="#__codelineno-8-16">16</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1"></a><span class="c1"># setup your preferred document store (with full-text search capabilities)</span>
</span><span id="__span-8-2"><a id="__codelineno-8-2" name="__codelineno-8-2"></a><span class="n">KH_DOCSTORE</span><span class="o">=</span><span class="p">(</span><span class="n">Elasticsearch</span> <span class="o">|</span> <span class="n">LanceDB</span> <span class="o">|</span> <span class="n">SimpleFileDocumentStore</span><span class="p">)</span>
</span><span id="__span-8-3"><a id="__codelineno-8-3" name="__codelineno-8-3"></a>
</span><span id="__span-8-4"><a id="__codelineno-8-4" name="__codelineno-8-4"></a><span class="c1"># setup your preferred vectorstore (for vector-based search)</span>
</span><span id="__span-8-5"><a id="__codelineno-8-5" name="__codelineno-8-5"></a><span class="n">KH_VECTORSTORE</span><span class="o">=</span><span class="p">(</span><span class="n">ChromaDB</span> <span class="o">|</span> <span class="n">LanceDB</span> <span class="o">|</span> <span class="n">InMemory</span> <span class="o">|</span> <span class="n">Milvus</span> <span class="o">|</span> <span class="n">Qdrant</span><span class="p">)</span>
</span><span id="__span-8-6"><a id="__codelineno-8-6" name="__codelineno-8-6"></a>
</span><span id="__span-8-7"><a id="__codelineno-8-7" name="__codelineno-8-7"></a><span class="c1"># Enable / disable multimodal QA</span>
</span><span id="__span-8-8"><a id="__codelineno-8-8" name="__codelineno-8-8"></a><span class="n">KH_REASONINGS_USE_MULTIMODAL</span><span class="o">=</span><span class="kc">True</span>
</span><span id="__span-8-9"><a id="__codelineno-8-9" name="__codelineno-8-9"></a>
</span><span id="__span-8-10"><a id="__codelineno-8-10" name="__codelineno-8-10"></a><span class="c1"># Setup your new reasoning pipeline or modify existing one.</span>
</span><span id="__span-8-11"><a id="__codelineno-8-11" name="__codelineno-8-11"></a><span class="n">KH_REASONINGS</span> <span class="o">=</span> <span class="p">[</span>
</span><span id="__span-8-12"><a id="__codelineno-8-12" name="__codelineno-8-12"></a> <span class="s2">"ktem.reasoning.simple.FullQAPipeline"</span><span class="p">,</span>
</span><span id="__span-8-13"><a id="__codelineno-8-13" name="__codelineno-8-13"></a> <span class="s2">"ktem.reasoning.simple.FullDecomposeQAPipeline"</span><span class="p">,</span>
</span><span id="__span-8-14"><a id="__codelineno-8-14" name="__codelineno-8-14"></a> <span class="s2">"ktem.reasoning.react.ReactAgentPipeline"</span><span class="p">,</span>
</span><span id="__span-8-15"><a id="__codelineno-8-15" name="__codelineno-8-15"></a> <span class="s2">"ktem.reasoning.rewoo.RewooAgentPipeline"</span><span class="p">,</span>
</span><span id="__span-8-16"><a id="__codelineno-8-16" name="__codelineno-8-16"></a><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
</details>
<h4 id="env"><code>.env</code><a class="headerlink" href="#env" title="Permanent link"></a></h4>
<p>This file provides another way to configure your models and credentials.</p>
<details>
<summary>Configure model via the .env file</summary>
- Alternatively, you can configure the models via the `.env` file with the information needed to connect to the LLMs. This file is located in the folder of the application. If you don't see it, you can create one.
- Currently, the following providers are supported:
- **OpenAI**
In the `.env` file, set the `OPENAI_API_KEY` variable with your OpenAI API key in order
to enable access to OpenAI's models. There are other variables that can be modified,
please feel free to edit them to fit your case. Otherwise, the default parameter should
work for most people.
<div class="language-shell highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-9-1">1</a></span>
<span class="normal"><a href="#__codelineno-9-2">2</a></span>
<span class="normal"><a href="#__codelineno-9-3">3</a></span>
<span class="normal"><a href="#__codelineno-9-4">4</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-9-1"><a id="__codelineno-9-1" name="__codelineno-9-1"></a><span class="nv">OPENAI_API_BASE</span><span class="o">=</span>https://api.openai.com/v1
</span><span id="__span-9-2"><a id="__codelineno-9-2" name="__codelineno-9-2"></a><span class="nv">OPENAI_API_KEY</span><span class="o">=</span>&lt;your<span class="w"> </span>OpenAI<span class="w"> </span>API<span class="w"> </span>key<span class="w"> </span>here&gt;
</span><span id="__span-9-3"><a id="__codelineno-9-3" name="__codelineno-9-3"></a><span class="nv">OPENAI_CHAT_MODEL</span><span class="o">=</span>gpt-3.5-turbo
</span><span id="__span-9-4"><a id="__codelineno-9-4" name="__codelineno-9-4"></a><span class="nv">OPENAI_EMBEDDINGS_MODEL</span><span class="o">=</span>text-embedding-ada-002
</span></code></pre></div></td></tr></table></div>
- **Azure OpenAI**
For OpenAI models via Azure platform, you need to provide your Azure endpoint and API
key. Your might also need to provide your developments' name for the chat model and the
embedding model depending on how you set up Azure development.
<div class="language-shell highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-10-1">1</a></span>
<span class="normal"><a href="#__codelineno-10-2">2</a></span>
<span class="normal"><a href="#__codelineno-10-3">3</a></span>
<span class="normal"><a href="#__codelineno-10-4">4</a></span>
<span class="normal"><a href="#__codelineno-10-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-10-1"><a id="__codelineno-10-1" name="__codelineno-10-1"></a><span class="nv">AZURE_OPENAI_ENDPOINT</span><span class="o">=</span>
</span><span id="__span-10-2"><a id="__codelineno-10-2" name="__codelineno-10-2"></a><span class="nv">AZURE_OPENAI_API_KEY</span><span class="o">=</span>
</span><span id="__span-10-3"><a id="__codelineno-10-3" name="__codelineno-10-3"></a><span class="nv">OPENAI_API_VERSION</span><span class="o">=</span><span class="m">2024</span>-02-15-preview
</span><span id="__span-10-4"><a id="__codelineno-10-4" name="__codelineno-10-4"></a><span class="nv">AZURE_OPENAI_CHAT_DEPLOYMENT</span><span class="o">=</span>gpt-35-turbo
</span><span id="__span-10-5"><a id="__codelineno-10-5" name="__codelineno-10-5"></a><span class="nv">AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT</span><span class="o">=</span>text-embedding-ada-002
</span></code></pre></div></td></tr></table></div>
- **Local Models**
- Using `ollama` OpenAI compatible server:
- Install [ollama](https://github.com/ollama/ollama) and start the application.
- Pull your model, for example:
<div class="language-shell highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-11-1">1</a></span>
<span class="normal"><a href="#__codelineno-11-2">2</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-11-1"><a id="__codelineno-11-1" name="__codelineno-11-1"></a>ollama<span class="w"> </span>pull<span class="w"> </span>llama3.1:8b
</span><span id="__span-11-2"><a id="__codelineno-11-2" name="__codelineno-11-2"></a>ollama<span class="w"> </span>pull<span class="w"> </span>nomic-embed-text
</span></code></pre></div></td></tr></table></div>
- Set the model names on web UI and make it as default:
![Models](https://raw.githubusercontent.com/Cinnamon/kotaemon/main/docs/images/models.png)
- Using `GGUF` with `llama-cpp-python`
You can search and download a LLM to be ran locally from the [Hugging Face Hub](https://huggingface.co/models). Currently, these model formats are supported:
- GGUF
You should choose a model whose size is less than your device's memory and should leave
about 2 GB. For example, if you have 16 GB of RAM in total, of which 12 GB is available,
then you should choose a model that takes up at most 10 GB of RAM. Bigger models tend to
give better generation but also take more processing time.
Here are some recommendations and their size in memory:
- [Qwen1.5-1.8B-Chat-GGUF](https://huggingface.co/Qwen/Qwen1.5-1.8B-Chat-GGUF/resolve/main/qwen1_5-1_8b-chat-q8_0.gguf?download=true): around 2 GB
Add a new LlamaCpp model with the provided model name on the web UI.
</details>
<h3 id="adding-your-own-rag-pipeline">Adding your own RAG pipeline<a class="headerlink" href="#adding-your-own-rag-pipeline" title="Permanent link"></a></h3>
<h4 id="custom-reasoning-pipeline">Custom Reasoning Pipeline<a class="headerlink" href="#custom-reasoning-pipeline" title="Permanent link"></a></h4>
<ol>
<li>Check the default pipeline implementation in <a href="../../libs/ktem/ktem/reasoning/simple.py">here</a>. You can make quick adjustment to how the default QA pipeline work.</li>
<li>Add new <code>.py</code> implementation in <code>libs/ktem/ktem/reasoning/</code> and later include it in <code>flowssettings</code> to enable it on the UI.</li>
</ol>
<h4 id="custom-indexing-pipeline">Custom Indexing Pipeline<a class="headerlink" href="#custom-indexing-pipeline" title="Permanent link"></a></h4>
<ul>
<li>Check sample implementation in <code>libs/ktem/ktem/index/file/graph</code></li>
</ul>
<blockquote>
<p>(more instruction WIP).</p>
</blockquote></div>
<aside class="md-source-file">
<span class="md-source-file__fact">
<span class="md-icon" title="Last update">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg>
</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class="timeago" datetime="2024-11-16T04:09:23+00:00" locale="en"></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2024-11-16</span>
</span>
<span class="md-source-file__fact">
<span class="md-icon" title="Created">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/></svg>
</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago"><span class="timeago" datetime="2023-12-20T04:30:25+00:00" locale="en"></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date">2023-12-20</span>
</span>
</aside>
</article>
</div>
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<nav
class="md-footer__inner md-grid"
aria-label="footer.title"
>
<a
href="../usage/"
class="md-footer__link md-footer__link--prev"
rel="prev"
>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
Basic Usage
</div>
</div>
</a>
<a
href="../pages/app/customize-flows/"
class="md-footer__link md-footer__link--next"
rel="next"
>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
Customize flow logic
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["content.action.edit", "content.tabs.link", "content.code.annotate", "content.code.annotations", "content.code.copy", "navigation.tabs", "navigation.top", "navigation.instant", "navigation.indexes", "toc.follow", "search.share", "search.highlight", "search.suggest"], "search": "../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../assets/javascripts/bundle.525ec568.min.js"></script>
<script src="../js/timeago.min.js"></script>
<script src="../js/timeago_mkdocs_material.js"></script>
<script src="../assets/pymdownx-extras/extra-loader-MCFnu0Wd.js"></script>
</body>
</html>