Repository navigation
Releases: etreby/intel-npu-tools
Releases · etreby/intel-npu-tools
Release list
Intel NPU Tools 0.3.0
0.3.0 - 2026-08-09
Added
intel-npu-panel, a control panel with tabs for voice, screen reading, search, configuration and diagnostics. The two focused applications are unchanged: they exist to do one thing immediately from a keyboard shortcut, and a tabbed window behind those shortcuts would make dictation slower for no gain. Every NPU operation runs on a worker thread, because compiling a model takes seconds and doing that on the interface thread freezes the window.- Settings persist in
settings.jsonunder the data directory, so the speech model, compiled-model caching and turbo can be changed from the panel rather than only by environment variable. Variables still win, so a one-off override on the command line keeps working; the panel names any variable currently masking a setting, because a control that silently does nothing is worse than one that explains. - Screenshots and the clipboard work beyond KDE. Both were hard-coded to spectacle and wl-copy, so OCR failed outright on GNOME, COSMIC, sway and X11. Capture now picks from spectacle, cosmic-screenshot, gnome-screenshot, grim, maim, scrot and ImageMagick, and the clipboard from wl-copy, xclip and xsel, preferring whichever matches the running desktop and falling through when an installed tool fails.
- An application icon, drawn twice: the detailed version is correct from 48 pixels up, and a simplified one without package pins is used at 32 and below, where the pins dissolve into a fringe that eats the silhouette and the waveform bars merge into a block.
- Native packages for Debian, Arch and RPM distributions, all built from one staging script so they install the same tree. Only the .deb has been built and unpacked; the PKGBUILD and RPM spec are authored and linted but were written on a Debian derivative with neither makepkg nor rpmbuild, and the RPM's openSUSE dependency names in particular are unverified. They contain no models and no inference stack, and no maintainer script touches the network;
intel-npu-tools-setupbuilds each user's environment instead. context_filterreturns only the parts of a large local text file that answer a question, copied verbatim with the line numbers they came from. It exists to keep bulk text out of an AI agent's context window: on a 100 KB build log it returned four spans in place of 2,547 lines, an estimated 95 percent token reduction, and located a linker failure at line 1,400. Nothing is generated, so quoted lines can be cited; the reply also reports how many chunks were dropped and how close the best dropped chunk scored, because silent truncation otherwise reads as full coverage. Files under 4 KB are refused, since reading them outright costs fewer tokens than describing them, and files over 256 KB are refused because embedding them exceeds the tool timeout of several MCP clients. It reuses the embedding model already installed and needs no new download.- Optional cross-encoder reranking for semantic search, behind
intel-npu-search search --rerankand thererankparameter of thesemantic_searchtool. Reranked hits gain arerank_score, which is an unbounded logit and must not be compared against the cosinescore. The model is a separate ~300 MB download viascripts/download-models.py --with-reranker; requesting reranking without it raises an error naming that flag rather than silently falling back. - The Whisper model is selectable through
INTEL_NPU_TOOLS_WHISPER_MODEL, naming a directory under the models directory.scripts/download-models.py --with-whisper-smallfetcheswhisper-small-int8-ov(~250 MB), which compiles on the NPU and is more robust in noise: measured over eight recorded clips mixed with noise, it transcribed 8/8 correctly at 10 dB signal-to-noise where base managed 6/8, and 6/8 against 5/8 at 5 dB. The two are indistinguishable on clean audio and both fail equally at 0 dB. Base stays the default because small costs 2.6 times the latency, 237 ms per clip against 90 ms. English-onlymediumconversions were not adopted, since this project's speech support is multilingual. screen_to_textrenders a screenshot as compact structured text rather than an image: reading order, a bounding box per line, and per-word boxes on request. A screenshot costs a vision model roughly 1,600 to 4,800 tokens; measured on a 1080p application window this returned the same screen at 33.7× less intextmode, 8.3× in the defaultlinesmode, and 2.8× inwordsmode.wordsis not the default precisely because on a dense screen it can cost more than the screenshot did, and the reply says so when it has. Reading order comes from Tesseract's page segmentation rather than the(y // 30, x)row-banding heuristic used elsewhere inocr.py, which stitches columns together — on a window with a sidebar, that heuristic returns a file name and an unrelated line of code as one line. Multi-page input is handled:.tifis an accepted type and Tesseract restarts its block, paragraph, and line numbering on each page, so lines carry apagenumber, bounding boxes are documented as page-local, and the reported image size is the first page's. This tool leaves the NPU idle. Its text comes from Tesseract, because the bundled NPU recognizer is a CTC model over a hardcoded 37-symbol lowercase alphabet and cannot emit capitals, punctuation, or non-Latin script. Replacing that model is the change that would make it an NPU feature;docs/ROADMAP.mdrecords what is unknown about doing so.scripts/benchmark.pymeasures model load and inference times repeatably, so the figures in the documentation can be re-checked after a driver, firmware, or OpenVINO upgrade instead of being trusted indefinitely. Each measurement runs in a fresh subprocess, because every loader caches its compiled model per process; warm latency is a median so a single scheduler hiccup does not move it; and a provenance header records the driver, compiler, and OpenVINO versions it ran against. It deliberately does not clear the Level Zero driver's blob cache to obtain a cold-compile number, because doing so would slow the user's next session for every model they own.docs/ROADMAP.mdrecords what is worth building on this hardware and what measurement ruled out.
Fixed
Meta+F9andMeta+Alt+Onow actually work.install.shregisters them inkglobalshortcutsrc, which is the only thing KDE reads. Speech moved offMeta+Alt+S: KDE's accessibility component binds that combination to "Toggle Screen Reader On and Off" on a stock install, so kglobalaccel discarded this project's binding at every login, leaving_launch=,Meta+Alt+S,…with an empty active field — registered in appearance, dead in practice. The installer now refuses to write an accelerator another component already holds and names the owner, rather than writing one that will be silently dropped. TheX-KDE-Shortcutsline in each desktop file never did this: KDE honours that field for applications installed system-wide, but ignores it for a desktop file in~/.local/share/applications, so the documented shortcuts silently did not exist and the applications could only be started from the menu. Registration skips any application the user has already bound to a key of their own, anduninstall.shreleases both shortcuts so they do not stay bound to applications that are gone. The keys begin working at the next login, because KDE's shortcut daemon reads that file only at session start and restarting it mid-session would drop every other global shortcut.
Changed
- OCR compiles its two models once per process instead of on every call, which made repeat calls 4.9 times faster (0.176 s to 0.036 s). A single screenshot previously paid full driver compilation twice before reading a pixel. Inference is now serialised behind the same lock, because a compiled model reuses one implicit infer request and concurrent MCP calls would otherwise race; this costs nothing, as the device already runs one inference at a time.
- Missing OCR models now raise a
FileNotFoundErrornamingscripts/download-models.py, matching the speech and embedding paths, instead of surfacing a raw OpenVINO read error. - Plugin properties for every NPU model now come from one place,
intel_npu_tools.runtime.npu_properties.
Not changed, and why
- Reranking is off unless asked for. Having the model installed does not enable it. Measured against this repository, the cross-encoder promoted the correct passage with a +4.95 score on a query it recognised, but on a query where every score fell near -6.5 it discarded the correct passage that plain cosine similarity had ranked first. It appears trustworthy only when confident, and presence of the model is not evidence the user wants that trade on every search.
- Compiled-model caching is off by default, available through
INTEL_NPU_TOOLS_MODEL_CACHE. The Level Zero driver already caches compiled blobs, so an OpenVINO cache duplicates them, and while that driver cache is warm it saves almost nothing: embedding load went from 0.98 s to 0.89 s and Whisper from 0.50 s to 0.79 s. Its real benefit is avoiding the occasional cold recompile, which is expensive — one such run measured Whisper at 4.69 s — because the driver's cache is shared and evictable while a cache under the toolkit's data directory is not. The cost is roughly 340 MB for Whisper and 1.2 GB for the embedding model, plus a one-off 10.4 s first run, which is why it is a switch rather than a default. That first-run figure closely matches the "approximately 10.7 seconds" quoted in the semantic-search guide, which suggests that number described a cold compile rather than steady state. NPU_TURBOis off by default and is not expected to help. It measured 241.2 ms against 240.1 ms with it disabled; the compiled model was confirmed to report the property as enabled, so this is a real result rather than an ignored setting. The switch remains because the effect is ...
Intel Arrow Lake NPU Tools 0.2.0 — Private Semantic Search
Intel Arrow Lake NPU Tools 0.2.0
This release turns Intel AI Boost on Arrow Lake Linux systems into a private local retrieval engine for AI agents, while preserving the existing speech and OCR workflows.
Highlights
- Semantic indexing and meaning-based search run on the Intel NPU with Qwen3-Embedding 0.6B INT8.
- A local SQLite index avoids external vector databases and network services.
- Ten MCP tools are available to Codex, Claude, Gemini CLI, AGY, Hermes, Antigravity IDE, OpenCode, and compatible clients.
- The
intel-npu-searchCLI supports incremental indexing, ranked search, root filters, and status inspection. - A validated example agent skill demonstrates safe, source-cited local retrieval.
- New guides cover setup, usage, privacy, debugging, customization, and skill development.
Quick start
git clone https://github.com/etreby/intel-arrow-lake-npu-tools.git
cd intel-arrow-lake-npu-tools
./install.sh --with-driverLog out and back in after the first driver installation, then:
intel-npu-search index ~/Projects/my-project
intel-npu-search search "Where is authentication configured?"The project is unofficial and community maintained. Confirm supported hardware and read the driver safety notes before installation.
Verified reference system
The release was validated on an Intel Arrow Lake NPU 3720 (8086:ad1d) running Pop!_OS/Ubuntu 24.04-compatible userspace and OpenVINO 2026.2.1. Real NPU tests covered model compilation, document/query embeddings, incremental indexing, ranked retrieval, and discovery/calling through a real MCP client.
See the README and docs/ directory for full details.