Mirror of khoj from Github
Find a file
Debanjum ecc6fbfeb2
Push Files to Index from Emacs, Obsidian & Desktop Clients using Multi-Part Forms (#499)
### Overview
- Add ability to push data to index from the Emacs, Obsidian client
- Switch to standard mechanism of syncing files via HTTP multi-part/form. Previously we were streaming the data as JSON
  - Benefits of new mechanism
    - No manual parsing of files to send or receive on clients or server is required as most have in-built mechanisms to send multi-part/form requests
    - The whole response is not required to be kept in memory to parse content as JSON. As individual files arrive they're automatically pushed to disk to conserve memory if required
    - Binary files don't need to be encoded on client and decoded on server

### Code Details
### Major
- Use multi-part form to receive files to index on server
- Use multi-part form to send files to index on desktop client
- Send files to index on server from the khoj.el emacs client
  - Send content for indexing on server at a regular interval from khoj.el
- Send files to index on server from the khoj obsidian client
- Update tests to test multi-part/form method of pushing files to index

#### Minor
- Put indexer API endpoint under /api path segment
- Explicitly make GET request to /config/data from khoj.el:khoj-server-configure method
- Improve emoji, message on content index updated via logger
- Don't call khoj server on khoj.el load, only once khoj invoked explicitly by user
- Improve indexing of binary files
  - Let fs_syncer pass PDF files directly as binary before indexing
  - Use encoding of each file set in indexer request to read file 
- Add CORS policy to khoj server. Allow requests from khoj apps, obsidian & localhost
- Update indexer API endpoint URL to` index/update` from `indexer/batch`

Resolves #471 #243
2023-10-17 06:05:15 -07:00
.github/workflows Improve docker builds for local hosting (#476) 2023-09-08 17:07:26 -07:00
config Fix configure openai processor for khoj docker 2023-07-30 02:07:33 -07:00
docs Document system requirements to run offline chat 2023-10-16 19:39:06 -07:00
scripts Sync desktop app package.json with other Khoj clients metadata 2023-10-13 20:43:55 -07:00
src Push Files to Index from Emacs, Obsidian & Desktop Clients using Multi-Part Forms (#499) 2023-10-17 06:05:15 -07:00
tests Push Files to Index from Emacs, Obsidian & Desktop Clients using Multi-Part Forms (#499) 2023-10-17 06:05:15 -07:00
.dockerignore Use pypi khoj to fix docker builds and dockerize github workflow 2023-02-19 01:57:01 -06:00
.gitattributes Exclude tests data file from programming stats on Github 2023-08-28 11:00:52 -07:00
.gitignore Add front-end Electron application for Khoj local file syncing (#473) 2023-09-06 12:04:18 -07:00
.pre-commit-config.yaml Run mypy checks in test workflow and on push (via pre-commit) 2023-02-17 16:08:56 -06:00
docker-compose.yml Improve docker builds for local hosting (#476) 2023-09-08 17:07:26 -07:00
Dockerfile Use jammy for docker base image due to dependency issue with arm64 image 2023-09-18 15:38:18 -07:00
LICENSE Add, configure and run pre-commit locally and in test workflow 2023-02-17 13:31:36 -06:00
manifest.json Release Khoj version 0.12.3 2023-09-26 22:41:11 -07:00
pyproject.toml Push Files to Index from Emacs, Obsidian & Desktop Clients using Multi-Part Forms (#499) 2023-10-17 06:05:15 -07:00
README.md Use 500px png of khoj logo instead svg for much smaller asset size 2023-08-07 18:27:11 -07:00
versions.json Release Khoj version 0.12.3 2023-09-26 22:41:11 -07:00

Khoj Logo

test dockerize pypi

An AI personal assistant for your digital brain


Khoj is a desktop application to search and chat with your notes, documents and images.
It is an offline-first, open source AI personal assistant accessible from your Emacs, Obsidian or Web browser.
It works with jpeg, markdown, notion, org-mode, pdf files and github repositories.


🔎 Search 💬 Chat
Quickly retrieve relevant documents using natural language Get answers and create content from your existing knowledge base
Does not need internet Can be configured to work without internet