{"id":72,"date":"2026-10-10T18:45:05","date_gmt":"2026-10-10T18:45:05","guid":{"rendered":"https:\/\/ivand.eu\/?page_id=72"},"modified":"2026-10-11T19:16:27","modified_gmt":"2026-10-11T19:16:27","slug":"localmind","status":"publish","type":"page","link":"https:\/\/ivand.eu\/index.php\/localmind\/","title":{"rendered":"LocalMind"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"506\" src=\"https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-49-1024x506.png\" alt=\"\" class=\"wp-image-81\" srcset=\"https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-49-1024x506.png 1024w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-49-300x148.png 300w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-49-766x379.png 766w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-49-1536x760.png 1536w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-49.png 1913w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"506\" src=\"https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-40-1024x506.png\" alt=\"\" class=\"wp-image-82\" srcset=\"https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-40-1024x506.png 1024w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-40-300x148.png 300w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-40-766x379.png 766w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-40-1536x760.png 1536w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-40.png 1913w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"506\" src=\"https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-32-1024x506.png\" alt=\"\" class=\"wp-image-80\" srcset=\"https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-32-1024x506.png 1024w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-32-766x379.png 766w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-32-300x148.png 300w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-32-1536x760.png 1536w, https:\/\/ivand.eu\/wp-content\/uploads\/2026\/10\/\u0421\u043d\u0438\u043c\u043a\u0430-\u043d\u0430-\u0435\u043a\u0440\u0430\u043d\u0430-\u043d\u0430-2026-10-11-21-35-32.png 1913w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Privacy-first Agentic RAG knowledge assistant<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LocalMind answers questions over <strong>your documents<\/strong> and the <strong>web<\/strong>.<br>An agent chooses the right tools, hybrid retrieval finds context, and answers include sources.<br>Weak local matches are blocked by a <strong>retrieval score threshold<\/strong> so the system does not sound confident when the docs do not support the answer.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Local inference uses GGUF models via <code>llama-cpp-python<\/code>, with hardware detection and optional install of CUDA \/ Metal \/ ROCm builds from the Settings UI.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Features<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#features\"><\/a><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><strong>Agentic routing<\/strong><\/td><td>Chooses <code>local_rag<\/code>, <code>web_search<\/code>, <code>both<\/code>, or <code>none<\/code> per query<\/td><\/tr><tr><td><strong>Hybrid retrieval<\/strong><\/td><td>Dense embeddings + BM25, fused with tunable \u03b1<\/td><\/tr><tr><td><strong>Score threshold<\/strong><\/td><td>Rejects weak local hits \u2192 web fallback or refuse<\/td><\/tr><tr><td><strong>Citations<\/strong><\/td><td>Source chips and retrieved context in the UI<\/td><\/tr><tr><td><strong>Document UI<\/strong><\/td><td>Upload \/ delete files and <strong>Build index<\/strong> in the browser<\/td><\/tr><tr><td><strong>Settings UI<\/strong><\/td><td>Model path, GPU backend preference, install GPU <code>llama-cpp-python<\/code><\/td><\/tr><tr><td><strong>Hardware acceleration<\/strong><\/td><td>Detects CUDA, Metal, ROCm; Auto \/ CPU \/ custom GPU layers<\/td><\/tr><tr><td><strong>Local GGUF<\/strong><\/td><td>Inference adapted from <a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalBot\">LocalBot<\/a><\/td><\/tr><tr><td><strong>Easy start<\/strong><\/td><td><code>start.bat<\/code> \/ <code>start.ps1<\/code> \/ <code>start.sh<\/code> \/ <code>python run.py<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Architecture<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#architecture\"><\/a><\/p>\n\n\n<pre class=\"wp-block-code plover-prism prism-github-dark-theme language-clike\"><code>User query\n    &#9474;\n    &#9660;\n&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;\n&#9474;  Agent (router)     &#9474;  propose tool\n&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;\n           &#9474;\n           &#9660;\n    Local hybrid search?\n           &#9474;\n     &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;\n     &#9474; score OK? &#9474;\n     &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;\n        yes&#9474;    no &rarr; web fallback or refuse\n           &#9660;\n    Context (local and\/or web)\n           &#9474;\n           &#9660;\n    Local GGUF LLM\n           &#9474;\n           &#9660;\n    Answer + sources + route metadata\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Retrieval score:<\/strong> after local search, if <code>max_score &lt; retrieval_min_score<\/code>, local chunks are not used for generation.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Project structure<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#project-structure\"><\/a><\/p>\n\n\n<pre class=\"wp-block-code plover-prism prism-github-dark-theme language-clike\"><code>LocalMind\/\n&#9500;&#9472;&#9472; start.bat \/ start.ps1 \/ start.sh \/ run.py   # easy launchers\n&#9500;&#9472;&#9472; requirements.txt\n&#9500;&#9472;&#9472; .env                                        # LLM_MODEL_PATH, GPU settings\n&#9500;&#9472;&#9472; src\/\n&#9474;   &#9500;&#9472;&#9472; config.py\n&#9474;   &#9500;&#9472;&#9472; llm.py\n&#9474;   &#9500;&#9472;&#9472; ingestion\/          # load, chunk, pipeline\n&#9474;   &#9500;&#9472;&#9472; retrieval\/          # embeddings, Chroma, hybrid search\n&#9474;   &#9500;&#9472;&#9472; inference\/          # GGUF runtime, hardware, backends\n&#9474;   &#9500;&#9472;&#9472; agent\/              # router, tools, score gate\n&#9474;   &#9500;&#9472;&#9472; services\/           # ingest, config, acceleration install\n&#9474;   &#9492;&#9472;&#9472; ui\/app.py           # Streamlit UI\n&#9500;&#9472;&#9472; data\/\n&#9474;   &#9500;&#9472;&#9472; raw\/                # your documents\n&#9474;   &#9500;&#9472;&#9472; processed\/          # chunks.jsonl\n&#9474;   &#9492;&#9472;&#9472; vectorstore\/        # Chroma DB\n&#9500;&#9472;&#9472; scripts\/ingest.py       # optional CLI ingest\n&#9492;&#9472;&#9472; docs\/                   # architecture, WBS\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Quick start<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#quick-start\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Windows (easiest)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#windows-easiest\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Double-click <strong><code>start.bat<\/code><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Or in PowerShell:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd path\\to\\LocalMind\n.\\start.ps1<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">macOS \/ Linux<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#macos--linux\"><\/a><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">chmod +x start.sh\n.\/start.sh<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Already in a venv<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#already-in-a-venv\"><\/a><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">python run.py\n# or\nstreamlit run src\/ui\/app.py<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The first run of <code>start.bat<\/code> \/ <code>start.sh<\/code> can create <code>.venv<\/code> and install dependencies.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">First-time setup in the UI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#first-time-setup-in-the-ui\"><\/a><\/p>\n\n\n<ol class=\"wp-block-list is-layout-flex wp-container-core-list-is-layout-c4cf3051 wp-block-list-is-layout-flex\">\n<li>\n<strong>Settings<\/strong><ul class=\"wp-block-list is-layout-flex wp-container-core-list-is-layout-c4cf3051 wp-block-list-is-layout-flex\" style=\"\">\n<li>Set <strong>GGUF model path<\/strong> (use forward slashes on Windows), e.g.<br><code>C:\/Users\/you\/AppData\/Roaming\/LocalBot\/models\/your-model.gguf<\/code>\n<\/li>\n\n\n\n<li><strong>Save model path<\/strong><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\n<strong>Hardware acceleration<\/strong><ul class=\"wp-block-list is-layout-flex wp-container-core-list-is-layout-c4cf3051 wp-block-list-is-layout-flex\" style=\"\">\n<li>Check CUDA \/ Metal \/ ROCm detection<\/li>\n\n\n\n<li>If GPU is present but not used: open <strong>Install matching llama-cpp-python<\/strong>, pick the backend, <strong>Install<\/strong>\n<\/li>\n\n\n\n<li>Preferred backend: <strong>Auto<\/strong>, GPU layers: <strong>-1<\/strong>, <strong>Save<\/strong>, <strong>Reload engine<\/strong>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\n<strong>Documents<\/strong><ul class=\"wp-block-list is-layout-flex wp-container-core-list-is-layout-c4cf3051 wp-block-list-is-layout-flex\" style=\"\">\n<li>Upload PDF \/ DOCX \/ TXT \/ MD &rarr; <strong>Save uploads<\/strong>\n<\/li>\n\n\n\n<li><strong>Build index<\/strong><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\n<strong>Chat<\/strong><ul class=\"wp-block-list is-layout-flex wp-container-core-list-is-layout-c4cf3051 wp-block-list-is-layout-flex\" style=\"\">\n<li>Ask questions<\/li>\n\n\n\n<li>Sidebar: Top-K, hybrid &alpha;, <strong>min retrieval score<\/strong>, weak-local action (web \/ refuse)<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Configuration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#configuration\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><code>.env<\/code> (project root)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#env-project-root\"><\/a><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">LLM_MODEL_PATH=C:\/path\/to\/model.gguf\nLLM_GPU_LAYERS=-1\nLLM_PREFERRED_BACKEND=auto<\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Variable<\/th><th>Default<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td><code>LLM_MODEL_PATH<\/code><\/td><td>empty<\/td><td>Path to GGUF (empty = mock mode)<\/td><\/tr><tr><td><code>LLM_GPU_LAYERS<\/code><\/td><td><code>-1<\/code><\/td><td><code>-1<\/code> auto, <code>0<\/code> CPU, <code>1+<\/code> fixed layers<\/td><\/tr><tr><td><code>LLM_PREFERRED_BACKEND<\/code><\/td><td><code>auto<\/code><\/td><td><code>auto<\/code> \/ <code>cuda<\/code> \/ <code>metal<\/code> \/ <code>rocm<\/code> \/ <code>cpu<\/code><\/td><\/tr><tr><td><code>LLM_CONTEXT_SIZE<\/code><\/td><td><code>4096<\/code><\/td><td>Context window cap<\/td><\/tr><tr><td><code>LLM_TEMPERATURE<\/code><\/td><td><code>0.1<\/code><\/td><td>Generation temperature<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Also configurable in <code>src\/config.py<\/code> and the UI:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Setting<\/th><th>Default<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td><code>top_k<\/code><\/td><td><code>5<\/code><\/td><td>Chunks retrieved<\/td><\/tr><tr><td><code>hybrid_alpha<\/code><\/td><td><code>0.6<\/code><\/td><td>Dense vs BM25 weight<\/td><\/tr><tr><td><code>retrieval_min_score<\/code><\/td><td><code>0.35<\/code><\/td><td>Min score to trust local docs<\/td><\/tr><tr><td><code>weak_local_action<\/code><\/td><td><code>web<\/code><\/td><td><code>web<\/code> fallback or <code>refuse<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">UI overview<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#ui-overview\"><\/a><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tab<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td><strong>Chat<\/strong><\/td><td>Ask questions; see tool badge, scores, overrides, sources<\/td><\/tr><tr><td><strong>Documents<\/strong><\/td><td>Upload \/ delete files; build or rebuild the vector index<\/td><\/tr><tr><td><strong>Settings<\/strong><\/td><td>Model path, hardware status, install GPU <code>llama-cpp-python<\/code>, acceleration mode<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sidebar:<\/strong> retrieval controls, min score, weak-local action, reload engine, clear chat.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Tech stack<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#tech-stack\"><\/a><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Layer<\/th><th>Technology<\/th><\/tr><\/thead><tbody><tr><td>Language<\/td><td>Python 3.10+<\/td><\/tr><tr><td>UI<\/td><td>Streamlit<\/td><\/tr><tr><td>Embeddings<\/td><td><code>sentence-transformers<\/code><\/td><\/tr><tr><td>Vector DB<\/td><td>Chroma<\/td><\/tr><tr><td>Keyword search<\/td><td><code>rank-bm25<\/code><\/td><\/tr><tr><td>LLM<\/td><td><code>llama-cpp-python<\/code> (GGUF)<\/td><\/tr><tr><td>Web search<\/td><td>DuckDuckGo (<code>ddgs<\/code>) \u2014 no API key<\/td><\/tr><tr><td>Documents<\/td><td><code>pypdf<\/code>, <code>python-docx<\/code><\/td><\/tr><tr><td>Config<\/td><td><code>pydantic-settings<\/code> + <code>.env<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">GPU notes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#gpu-notes\"><\/a><\/p>\n\n\n<ul class=\"wp-block-list is-layout-flex wp-container-core-list-is-layout-c4cf3051 wp-block-list-is-layout-flex\" style=\"\">\n<li>\n<strong>Detection<\/strong> shows whether NVIDIA \/ Apple \/ AMD hardware is present.<\/li>\n\n\n\n<li>\n<strong>Inference<\/strong> uses whatever backend your installed <code>llama-cpp-python<\/code> was built with.<\/li>\n\n\n\n<li>Use <strong>Settings &rarr; Install matching llama-cpp-python<\/strong> to install CUDA \/ Metal \/ ROCm \/ CPU builds into the current venv.<\/li>\n\n\n\n<li>After installing a GPU build: Preferred backend <strong>Auto<\/strong>, layers <strong>-1<\/strong>, <strong>Reload engine<\/strong>.<\/li>\n\n\n\n<li>If the UI shows GPU hardware but backend stays <strong>cpu<\/strong>, the wheel\/build likely has no GPU support &mdash; reinstall with the matching backend.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Optional CLI ingest<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#optional-cli-ingest\"><\/a><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">python scripts\/ingest.py<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Same pipeline as <strong>Documents \u2192 Build index<\/strong> (reset collection, embed, upsert).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Roadmap<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#roadmap\"><\/a><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Item<\/th><th>Status<\/th><\/tr><\/thead><tbody><tr><td>Ingestion + hybrid RAG + agent<\/td><td>Done<\/td><\/tr><tr><td>Score threshold + web\/refuse<\/td><td>Done<\/td><\/tr><tr><td>UI: chat, docs, settings<\/td><td>Done<\/td><\/tr><tr><td>Hardware detect + GPU install helper<\/td><td>Done<\/td><\/tr><tr><td>One-click start scripts<\/td><td>Done<\/td><\/tr><tr><td>Golden evaluation set + metrics<\/td><td>Planned<\/td><\/tr><tr><td>Streaming answers<\/td><td>Planned<\/td><\/tr><tr><td>FastAPI API layer<\/td><td>Planned<\/td><\/tr><tr><td>Reranker<\/td><td>Planned<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Related project<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalMind#related-project\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><a href=\"https:\/\/github.com\/Ivan-Dambulov\/LocalBot\">LocalBot<\/a><\/strong> \u2014 private desktop AI assistant (local GGUF, hardware-aware loading, web search, documents).<br>LocalMind reuses that inference approach inside a focused Agentic RAG system.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>Privacy-first Agentic RAG knowledge assistant LocalMind answers questions over your documents and the web.An agent chooses the right tools, hybrid retrieval finds context, and answers include sources.Weak local matches are blocked by a retrieval score threshold so the system does not sound confident when the docs do not support the answer. Local inference uses GGUF [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-72","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/pages\/72","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/comments?post=72"}],"version-history":[{"count":3,"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/pages\/72\/revisions"}],"predecessor-version":[{"id":87,"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/pages\/72\/revisions\/87"}],"wp:attachment":[{"href":"https:\/\/ivand.eu\/index.php\/wp-json\/wp\/v2\/media?parent=72"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}