# MindMap
[![Latest version](https://img.shields.io/badge/crates.io-v0.1.2-orange)](https://crates.io/crates/mindmap)
[![Documentation](https://img.shields.io/badge/docs-passing-green)](https://docs.rs/mindmap)
![License](https://img.shields.io/badge/License-MIT-blue)
A fast and efficient semantic search engine built in Rust to generate and search embeddings for your notes
## Showcase
### Note watching
### Server querying
```
curl -G --data-urlencode "q=poison" http://127.0.0.1:5001/
curl -G --data-urlencode "q=poison" --data-urlencode "format=json" http://127.0.0.1:5001/
```
### Pure CLI usage
## Installation
```bash
cargo install mindmap
```
## Usage
```
$ mindmap --help
Search your notes at the speed of thought
Usage: mindmap
Commands:
setup Initial config setup
watch Watches your MindMap directory for changes
recompute-all Recomputes your entire MindMap
recompute-file Recomputes a specific file
query Queries the MindMap for items
server Starts the MindMap server
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version
```
## Setup (Advanced)
MindMap will choose a sane default for the configuration file, but you can also
create it manually. We've created a utility command to help you with that. Just
run `mindmap setup` and it will create the configuration file for you.
```bash
$ mindmap setup
```
Feel free to hit `enter` to select the default values for the config options
that you aren't sure about.
## Models
There are a few models to choose from. The models are:
- AllDistilrobertaV1
- AllMiniLmL12V2
- AllMiniLmL6V2
- BertBaseNliMeanTokens
- DistiluseBaseMultilingualCased
- ParaphraseAlbertSmallV2
- SentenceT5Base
## Server
Despite supporting individual queries with `midnmap query`, MindMap also supports a server mode. The server mode is useful for integrating MindMap with other tools, and it's
also much faster than the CLI mode since it will load the model only once and keep it in memory. To use the server, simply run `mindmap server` and it will start listening on
the address specified in the configuration file:
```
$ mindmap server
Starting server at: 127.0.0.1:5001
```
Then, to communicate with the server just make a GET request to the root path with a query parameter `q`:
```
$ curl -G --data-urlencode "q=are boats cool?" http://127.0.0.1:5001/
~/mindmap/test.md:5:5
~/mindmap/test.md:3:3
~/mindmap/test.md:1:1
~/mindmap/other_data.md:16:17
~/mindmap/other_data.md:48:48
~/mindmap/other_data.md:59:64
~/mindmap/other_data.md:43:43
~/mindmap/other_data.md:31:32
~/mindmap/other_data.md:41:41
~/mindmap/other_data.md:57:57
```
The list of files returned will be in the format `file_path:line_number:column_number`.
## Recommended additional tools
[mindmap.nvim](https://github.com/danimelchor/mindmap.nvim) is a Neovim plugin that allows you to quickly search and edit your MindMap notes.