Mirror of khoj from Github
Find a file
2022-08-05 02:40:03 +03:00
.github/workflows Reorder publish actions by order of importance in publish workflow 2022-08-04 04:43:05 +03:00
config Create khoj_sample file with all configurable fields in one place 2022-08-05 01:08:33 +03:00
docs Move demo video to docs/ directory to keep project root clean 2022-08-01 02:41:54 +03:00
src Use input filter in image search setup. Input filter wasn't used earlier 2022-08-05 02:40:03 +03:00
tests Make config file a positional argument, as it is required 2022-08-05 01:09:40 +03:00
.dockerignore Update Dockerfile to use Pip instead of Conda to install application 2022-08-04 00:14:25 +03:00
.gitignore Update pip package to include icons, exclude docs 2022-08-03 21:49:36 +03:00
docker-compose.yml Rename khoj_sample.yml to more specific khoj_docker.yml 2022-08-04 22:42:05 +03:00
Dockerfile Use published docker image to run khoj service using docker-compose 2022-08-04 02:17:01 +03:00
LICENSE Add Readme, License. Update .gitignore 2021-08-15 22:52:37 -07:00
MANIFEST.in Update Dockerfile to use Pip instead of Conda to install application 2022-08-04 00:14:25 +03:00
Readme.md Update Readme to Install Khoj using Pip by Default 2022-08-05 01:09:40 +03:00
setup.py Bump khoj patch version in setup.py 2022-08-04 04:45:20 +03:00

Khoj 🦅

build test publish

A natural language search engine for your personal notes, transactions and images

Table of Contents

Features

  • Natural: Advanced Natural language understanding using Transformer based ML Models
  • Local: Your personal data stays local. All search, indexing is done on your machine*
  • Incremental: Incremental search for a fast, search-as-you-type experience
  • Pluggable: Modular architecture makes it easy to plug in new data sources, frontends and ML models
  • Multiple Sources: Search your Org-mode and Markdown notes, Beancount transactions and Photos
  • Multiple Interfaces: Search using a Web Browser, Emacs or the API

Demo

https://user-images.githubusercontent.com/6413477/181664862-31565b0a-0e64-47e1-a79a-599dfc486c74.mp4

Description

Analysis

  • The results do not have any words used in the query
    • Based on the top result it seems the re-ranking model understands that Emacs is an editor?
  • The results incrementally update as the query is entered
  • The results are re-ranked, for better accuracy, once user is idle

Architecture

Setup

1. Install

pip install khoj-assistant

2. Configure

  • Set input-files or input-filter in each relevant content-type section of khoj_sample.yml
    • Set input-directories field in content-type.image section
  • Delete content-type sections irrelevant for your use-case

3. Run

khoj config/khoj_sample.yml -vv

Loads ML model, generates embeddings and exposes API to search notes, images, transactions etc specified in config YAML

Use

Upgrade

pip install --upgrade khoj-assistant

Troubleshoot

  • Symptom: Errors out complaining about Tensors mismatch, null etc

    • Mitigation: Delete content-type > image section from khoj_sample.yml
  • Symptom: Errors out with "Killed" in error message in Docker

Miscellaneous

  • The experimental chat API endpoint uses the OpenAI API
    • It is disabled by default
    • To use it add your openai-api-key to config.yml

Development

Setup

Using Docker

  1. Clone
git clone https://github.com/debanjum/khoj && cd khoj
  1. Configure
  • Required: Update docker-compose.yml to mount your images, (org-mode or markdown) notes and beancount directories
  • Optional: Edit application configuration in khoj_docker.yml
  1. Run
docker-compose up -d

Note: The first run will take time. Let it run, it's mostly not hung, just generating embeddings

Using Conda

  1. Install Dependencies

    • Install Conda [Required]
    • Install Exiftool [Optional]
      sudo apt -y install libimage-exiftool-perl
      
  2. Install Khoj

    git clone https://github.com/debanjum/khoj && cd khoj
    conda env create -f config/environment.yml
    conda activate khoj
    
  3. Configure

    • Set input-files or input-filter in each relevant content-type section of khoj_sample.yml
      • Set input-directories field in image content-type section
    • Delete content-type sections irrelevant for your use-case
  4. Run Load ML model, generate embeddings and expose API to query notes, images, transactions etc specified in config YAML

    python3 -m src.main -c=config/khoj_sample.yml -vv
    

Upgrade

Using Docker

docker-compose build --pull

Using Conda

cd khoj
git pull origin master
conda deactivate khoj
conda env update -f config/environment.yml
conda activate khoj

Test

pytest

Performance

Query performance

  • Semantic search using the bi-encoder is fairly fast at <5 ms
  • Reranking using the cross-encoder is slower at <2s on 15 results. Tweak top_k to tradeoff speed for accuracy of results
  • Applying explicit filters is very slow currently at ~6s. This is because the filters are rudimentary. Considerable speed-ups can be achieved using indexes etc

Indexing performance

  • Indexing is more strongly impacted by the size of the source data
  • Indexing 100K+ line corpus of notes takes 6 minutes
  • Indexing 4000+ images takes about 15 minutes and more than 8Gb of RAM
  • Once https://github.com/debanjum/khoj/issues/36 is implemented, it should only take this long on first run

Miscellaneous

  • Testing done on a Mac M1 and a >100K line corpus of notes
  • Search, indexing on a GPU has not been tested yet

Credits