Development
Introduction¶
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.
For end users¶
- Clean & Minimalistic UI: A user-friendly interface for RAG-based QA.
- Support for Various LLMs: Compatible with LLM API providers (OpenAI, AzureOpenAI, Cohere, etc.) and local LLMs (via
ollama
andllama-cpp-python
). - Easy Installation: Simple scripts to get you started quickly.
For developers¶
- Framework for RAG Pipelines: Tools to build your own RAG-based document QA pipeline.
- Customizable UI: See your RAG pipeline in action with the provided UI, built with Gradio .
- Gradio Theme: If you use Gradio for development, check out our theme here: kotaemon-gradio-theme.
Key Features¶
- Host your own document QA (RAG) web-UI: Support multi-user login, organize your files in private/public collections, collaborate and share your favorite chat with others.
- Organize your LLM & Embedding models: Support both local LLMs & popular API providers (OpenAI, Azure, Ollama, Groq).
- Hybrid RAG pipeline: Sane default RAG pipeline with hybrid (full-text & vector) retriever and re-ranking to ensure best retrieval quality.
- Multi-modal QA support: Perform Question Answering on multiple documents with figures and tables support. Support multi-modal document parsing (selectable options on UI).
- Advanced citations with document preview: By default the system will provide detailed citations to ensure the correctness of LLM answers. View your citations (incl. relevant score) directly in the in-browser PDF viewer with highlights. Warning when retrieval pipeline return low relevant articles.
- Support complex reasoning methods: Use question decomposition to answer your complex/multi-hop question. Support agent-based reasoning with
ReAct
,ReWOO
and other agents.
- Configurable settings UI: You can adjust most important aspects of retrieval & generation process on the UI (incl. prompts).
- Extensible: 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 & retrieval.
GraphRAG
indexing pipeline is provided as an example.
Installation¶
If you are not a developer and just want to use the app, please check out our easy-to-follow User Guide. Download the
.zip
file from the latest release to get all the newest features and bug fixes.
System requirements¶
- Python >= 3.10
- Docker: optional, if you install with Docker
- Unstructured if you want to process files other than
.pdf
,.html
,.mhtml
, and.xlsx
documents. Installation steps differ depending on your operating system. Please visit the link and follow the specific instructions provided there.
With Docker (recommended)¶
-
We support both
lite
&full
version of Docker images. Withfull
, the extra packages ofunstructured
will be installed as well, it can support additional file types (.doc
,.docx
, ...) but the cost is larger docker image size. For most users, thelite
image should work well in most cases.-
To use the
lite
version.
-
To use the
full
version.
-
-
We currently support and test two platforms:
linux/amd64
andlinux/arm64
(for newer Mac). You can specify the platform by passing--platform
in thedocker run
command. For example: -
Once everything is set up correctly, you can go to
http://localhost:7860/
to access the WebUI. -
We use GHCR to store docker images, all images can be found here.
Without Docker¶
-
Clone and install required packages on a fresh python environment.
-
Create a
.env
file in the root of this project. Use.env.example
as a templateThe
.env
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. -
(Optional) To enable in-browser
PDF_JS
viewer, download PDF_JS_DIST then extract it tolibs/ktem/ktem/assets/prebuilt
-
Start the web server:
- The app will be automatically launched in your browser.
- Default username and password are both
admin
. You can set up additional users directly through the UI.
-
Check the
Resources
tab andLLMs and Embeddings
and ensure that yourapi_key
value is set correctly from your.env
file. If it is not set, you can set it there.
Setup GraphRAG¶
[!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.
Setup Nano GRAPHRAG
- 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 && pip install chroma-hnswlib` - Launch Kotaemon with `USE_NANO_GRAPHRAG=true` environment variable. - Set your default LLM & Embedding models in Resources setting and it will be recognized automatically from NanoGraphRAG.Setup LIGHTRAG
- 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 && pip install chroma-hnswlib` - Launch Kotaemon with `USE_LIGHTRAG=true` environment variable. - Set your default LLM & Embedding models in Resources setting and it will be recognized automatically from LightRAG.Setup MS GRAPHRAG
- **Non-Docker Installation**: If you are not using Docker, install GraphRAG with the following command:Setup Local Models (for local/private RAG)¶
See Local model setup.
Setup multimodal document parsing (OCR, table parsing, figure extraction)¶
These options are available:
- Azure Document Intelligence (API)
- Adobe PDF Extract (API)
- Docling (local, open-source)
- To use Docling, first install required dependencies:
pip install docling
- To use Docling, first install required dependencies:
Select corresponding loaders in Settings -> Retrieval Settings -> File loader
Customize your application¶
- By default, all application data is stored in the
./ktem_app_data
folder. You can back up or copy this folder to transfer your installation to a new machine.
-
For advanced users or specific use cases, you can customize these files:
flowsettings.py
.env
flowsettings.py
¶
This file contains the configuration of your application. You can use the example here as the starting point.
Notable settings
.env
¶
This file provides another way to configure your models and credentials.
Configure model via the .env file
- 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.Adding your own RAG pipeline¶
Custom Reasoning Pipeline¶
- Check the default pipeline implementation in here. You can make quick adjustment to how the default QA pipeline work.
- Add new
.py
implementation inlibs/ktem/ktem/reasoning/
and later include it inflowssettings
to enable it on the UI.
Custom Indexing Pipeline¶
- Check sample implementation in
libs/ktem/ktem/index/file/graph
(more instruction WIP).