-
Notifications
You must be signed in to change notification settings - Fork 0
Configuration
Everything is edited in Settings inside the app and persisted as JSON at:
%APPDATA%\com.virgi.sensetree\settings.json
The file is tolerant in both directions: unknown or missing fields fall back to defaults (an older settings.json keeps working and keeps its old behaviour), and a corrupted file logs a warning and resets to defaults rather than preventing startup.
| Section | Purpose |
|---|---|
embedding |
How text becomes vectors. |
reasoning |
The LLM: chat, plans, qualification, classification. |
vision |
Multimodal model: image captions, PDF OCR. |
transcription |
Speech-to-text for audio/video. |
video |
Visual description of videos. |
indexing |
Roots, chunking, scheduling, qualification toggles. |
retrieval |
Hybrid search and reranking. |
mcp_servers |
External agent tools. |
prompts |
The system prompts driving every AI stage. |
| Field | Type | Default | Meaning |
|---|---|---|---|
mode |
"local" | "openai"
|
"local" |
local = built-in fastembed/ONNX engine. openai = an OpenAI-compatible /v1/embeddings endpoint. |
model |
string | multilingual-e5-small |
fastembed model id (local) or remote model name. |
base_url |
string | http://localhost:11434/v1 |
Server base URL, openai mode only. |
api_key |
string | "" |
Optional bearer token. Empty = no header sent. |
dimensions |
number | 384 |
Vector size — must match the model. Defines the vector table schema. |
use_gpu |
bool | false |
Try CUDA for the local engine, graceful CPU fallback. |
Full model list and behaviour: Embeddings.
Two OpenAI-compatible chat endpoints with an identical shape.
| Field | Type | Meaning |
|---|---|---|
base_url |
string | e.g. http://localhost:11434/v1 (Ollama), http://localhost:1234/v1 (LM Studio), or a LAN address. |
model |
string | Model name as the server expects it. |
api_key |
string | Optional bearer token. |
enabled |
bool | Turn the slot on or off. |
reasoning_effort |
auto | none | low | medium | high
|
Thinking budget requested from the model. auto sends nothing at all, leaving the server's own behaviour untouched — which is why it is the default. |
Defaults: reasoning llama3.1:8b, enabled; vision moondream, disabled (a multimodal model is often absent, so it is opt-in).
The vision slot's reasoning_effort genuinely applies to captions and OCR. It is worth setting: on a real image, 32.5 s with reasoning vs 6.9 s without.
Speech-to-text. Disabled by default. Full guide: Media: Audio & Video.
| Field | Default | Meaning |
|---|---|---|
base_url |
http://localhost:8000/v1 |
speaches' port (whisper.cpp: :8080). Not Ollama — it has no transcription endpoint. |
model |
Systran/faster-whisper-large-v3 |
A locally served model id. |
api_key |
"" |
Optional bearer. |
enabled |
false |
Opt-in. |
endpoint_path |
/audio/transcriptions |
For servers deviating from the convention. A missing leading / is added. |
language |
"" |
ISO-639-1. Empty = auto-detect, and the field is not sent at all. |
response_format |
"" |
Empty = the server's default. text, json, verbose_json, srt… |
extra_fields |
"" |
JSON object of extra multipart fields. Invalid JSON is ignored with a warning. |
max_file_mb |
0 |
0 = unlimited. Uploads are streamed, so size is not bounded by memory. |
timeout_secs |
1800 |
CPU Whisper is often slower than real time. |
Visual description of videos, complementary to transcription. Disabled by default.
| Field | Default | Meaning |
|---|---|---|
base_url |
http://localhost:8000/v1 |
e.g. vLLM. |
model |
Qwen/Qwen2.5-VL-7B-Instruct |
Must actually read video. |
api_key |
"" |
Optional bearer. |
enabled |
false |
Opt-in. |
endpoint_path |
/chat/completions |
|
delivery |
base64 |
base64 (universal, streamed) or file_uri (server reads the file itself — fastest, requires shared filesystem). |
max_file_mb |
0 |
0 = unlimited. |
timeout_secs |
1800 |
| Field | Type | Default | Meaning |
|---|---|---|---|
roots |
string[] | [] |
Folders watched and indexed. |
chunk_size |
number | 1000 |
Target characters per chunk. |
overlap |
number | 200 |
Characters carried over between consecutive chunks. |
batch_size |
number | 32 |
Texts per embedding call (both engines). |
max_file_mb |
number | 50 |
Above this, a file is indexed by context only, not extracted. |
max_chunks_per_file |
number | 0 |
0 = unlimited. A cap makes truncation explicit in the stored extract. Off by default: size says nothing about value. |
block_bias |
number 0–1 | 0.5 |
Folder classification tendency, 0 = very recursive, 1 = very block. See Indexing Pipeline. |
qualify_documents |
bool | true |
LLM qualification of documents/text/code. |
qualify_images |
bool | true |
LLM qualification of vision captions. |
qualify_media |
bool | true |
LLM qualification of transcriptions. Separate because a one-hour transcript is costly to qualify. |
qualify_context |
bool | true |
LLM guess for unreadable files. |
qualify_effort |
reasoning effort | none |
Effort for all indexing qualifications. The only setting whose default disables thinking — measured: 24.4 s vs 0.78 s per folder classification, same answer. |
pipeline_mode |
"sequential" | "batch"
|
sequential |
Stage ordering. See Sequential vs batch. |
batch_files |
number | 64 |
Files per slice in batch mode. |
| Field | Type | Default | Meaning |
|---|---|---|---|
hybrid |
bool | true |
Fuse dense (meaning) and BM25 (exact words) via Reciprocal Rank Fusion. Off = dense only. |
rerank |
bool | true |
Cross-encoder reranking of the shortlist. Off = faster, notably less precise. |
reranker_model |
string | bge-reranker-v2-m3 |
Also bge-reranker-base, jina-reranker-v2-base-multilingual. Local fastembed models. |
Details: Retrieval & RAG.
An array of external tool servers exposed to the chat agent. Empty by default. Fields and security notes: MCP Servers.
Ten overridable system prompts. An empty field means "use the built-in default", so you override only what you want and clear a field to revert. See Prompts for each one's contract.
Eight are editable in Settings → Prompts: folder_classify, folder_describe, file_extract, vision_caption, vision_ocr, video_describe, chat_system, reorganize.
Two more exist in the file and are honoured by the backend, but have no UI field yet — edit settings.json directly to override them: doc_qualify (document qualification) and context_guess (guessing an unreadable file's nature).
| Change | Consequence |
|---|---|
embedding.model or embedding.dimensions
|
Full re-index. Vector dimension updated, vector store cleared, index state reset, all roots re-scanned. Vectors from different models are not comparable. |
indexing.block_bias or prompts.folder_classify
|
Folder classifications forgotten and re-derived on the next scan. Save, then Re-index. |
| Adding a root | Only the new root is scanned. |
| Anything else (reasoning, vision, media, prompts, retrieval, MCP, API keys) | Effective immediately for new calls. No re-index. |
That last row is deliberate: earlier versions re-scanned everything on any Settings save, which made changing an API key a multi-hour affair.
| Runner | Typical base_url
|
Notes |
|---|---|---|
| Ollama | http://localhost:11434/v1 |
ollama pull <name>, or the in-app catalog. Gets the native fast paths (bounded embedding context, VRAM unload, /api/ps). |
| LM Studio | http://localhost:1234/v1 |
Enable its local server. Installs go through the lms CLI. |
| vLLM / LocalAI / llama.cpp | your port + /v1
|
Full OpenAI compatibility; the usual choice for transcription and video. |
| Home server / LAN | http://192.168.x.y:11434/v1 |
Any OpenAI-compatible server on your network. |
| External API | provider URL | Set api_key. This is the one way file content leaves your machine.
|
Per-hardware model picks: Models & Providers. Exact request formats: AI Server Protocol.
Getting started
Using it
- Configuration
- Models & Providers
- Semantic Search
- Image Search
- AI Chat & Agent
- Gardener
- Prompts
- MCP Servers
Under the hood