Skip to main content

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

Project description

Khoj 🦅

build test publish release

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/184735169-92c78bf1-d827-4663-9087-a1ea194b8f4b.mp4

Description

  • Install Khoj via pip
  • Start Khoj app
  • Add this readme and khoj.el readme as org-mode for Khoj to index
  • Search "Setup editor" on the Web and Emacs. Re-rank the results for better accuracy
  • Top result is what we are looking for, the section to Install Khoj.el on Emacs

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 hits enter

Interfaces

Architecture

Setup

1. Install

pip install khoj-assistant

2. Start App

khoj

3. Configure

  1. Enable content types and point to files to search in the First Run Screen that pops up on app start
  2. Click configure and wait. The app will load ML model, generates embeddings and expose the search API

Use

Upgrade

pip install --upgrade khoj-assistant

Troubleshoot

  • Symptom: Errors out complaining about Tensors mismatch, null etc
    • Mitigation: Disable image search on the desktop GUI
  • Symptom: Errors out with "Killed" in error message in Docker

Miscellaneous

  • The beta chat and search API endpoints use OpenAI API
    • It is disabled by default
    • To use it add your openai-api-key via the app configure screen
    • Warning: If you use the above beta APIs, your query and top result(s) will be sent to OpenAI for processing

Performance

Query performance

  • Semantic search using the bi-encoder is fairly fast at <50 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

Development

Setup

Using Pip

1. Install
git clone https://github.com/debanjum/khoj && cd khoj
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
2. Configure
  • Copy the config/khoj_sample.yml to ~/.khoj/khoj.yml
  • Set input-files or input-filter in each relevant content-type section of ~/.khoj/khoj.yml
    • Set input-directories field in image content-type section
  • Delete content-type and processor sub-section(s) irrelevant for your use-case
3. Run
khoj -vv

Load ML model, generate embeddings and expose API to query notes, images, transactions etc specified in config YAML

4. Upgrade
# To Upgrade To Latest Stable Release
# Maps to the latest tagged version of khoj on master branch
pip install --upgrade khoj-assistant

# To Upgrade To Latest Pre-Release
# Maps to the latest commit on the master branch
pip install --upgrade --pre khoj-assistant

# To Upgrade To Specific Development Release.
# Useful to test, review a PR.
# Note: khoj-assistant is published to test PyPi on creating a PR
pip install -i https://test.pypi.org/simple/ khoj-assistant==0.1.5.dev57166025766

Using Docker

1. Clone
git clone https://github.com/debanjum/khoj && cd khoj
2. 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
3. Run
docker-compose up -d

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

4. Upgrade
docker-compose build --pull

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
  • Copy the config/khoj_sample.yml to ~/.khoj/khoj.yml
  • Set input-files or input-filter in each relevant content-type section of ~/.khoj/khoj.yml
    • Set input-directories field in image content-type section
  • Delete content-type, processor sub-sections irrelevant for your use-case
4. Run
python3 -m src.main -vv

Load ML model, generate embeddings and expose API to query notes, images, transactions etc specified in config YAML

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

Test

pytest

Credits

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

khoj-assistant-0.1.6a1660931515.tar.gz (417.6 kB view details)

Uploaded Source

Built Distribution

khoj_assistant-0.1.6a1660931515-py3-none-any.whl (429.5 kB view details)

Uploaded Python 3

File details

Details for the file khoj-assistant-0.1.6a1660931515.tar.gz.

File metadata

File hashes

Hashes for khoj-assistant-0.1.6a1660931515.tar.gz
Algorithm Hash digest
SHA256 1edc35e1b2b51a7f30fbf8227ae50dcc092a339434b0603375e992f6930231ed
MD5 a49be13e9515969833cd6151700815db
BLAKE2b-256 8857cb900b22b1f9ee638654a7e64a4e94d8775e20dd6f3aa3adda4471ac0540

See more details on using hashes here.

File details

Details for the file khoj_assistant-0.1.6a1660931515-py3-none-any.whl.

File metadata

File hashes

Hashes for khoj_assistant-0.1.6a1660931515-py3-none-any.whl
Algorithm Hash digest
SHA256 76fcadb5ef5fd11328c4bfaa7bbfdb59155d56741c73cb6588f429844b0a826f
MD5 b396c0ea32cd6c066ca9229536c17a5c
BLAKE2b-256 8846ef4ec49bfbdb70f22be2579f3a59d6266847c854982c926662a8d99b029e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page