Commit Graph
29 Commits
Author SHA1 Message Date
Julian lechner a81c67f070 feat(semantic-search): report search cost before retrieval
CI / CI configuration security checks (push) Successful in 4s
CI / Capabilities and shell quality (push) Successful in 15s
CI / Python tests and compilation (push) Successful in 18s
CI / Build and inspect generated packages (push) Successful in 19s
CI / PowerShell tests on Ubuntu (push) Successful in 1m6s
CI / Installed client configuration smoke tests (push) Successful in 38s
CI / Bash integration and installation guards (push) Successful in 1m10s
CI / Qwen retrieval integration (push) Successful in 14m24s
2026-10-01 15:50:29 +02:00
Julian lechnerandClaude Opus 5.5 9d922cd678 fix(retrieval): run in-process when pipes are forbidden
The Codex sandbox on Windows denies the pipes that the daemon and worker
process use, so searches waited 120 seconds and then failed. Detect that and
run the search in-process.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:27:54 +02:00
Julian lechnerandClaude Opus 5.5 739d2f7801 perf(retrieval): use bfloat16 on supporting GPUs
Load both models in bfloat16 when a CUDA GPU supports it and keep float32 on
CPUs. Document the daemon versioning and the indexed file types.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:13:07 +02:00
Julian lechnerandClaude Opus 5.5 f134c50d39 fix(retrieval): match the Qwen query prompt format
Drop the trailing space after "Query:" as in the model card and include the
prompt in the query cache key.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:13:06 +02:00
Julian lechnerandClaude Opus 5.5 d60dd10c45 fix(retrieval): end brace-language symbols at top-level braces
Code after a top-level closing brace belonged to the preceding function, for
example shell loops labeled as quote_toml. Attribute it to the module.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:13:05 +02:00
Julian lechnerandClaude Opus 5.5 e138c0277e feat(retrieval): index markup, style, SQL, and project files
Add HTML, CSS, SCSS, XAML, SQL, XML, project, Razor, Kotlin, Gradle, and
module JavaScript files with SQL and Kotlin symbols, and rebuild the index.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:13:04 +02:00
Julian lechnerandClaude Opus 5.5 2354ce2c2c fix(retrieval): version the daemon by code hash
Derive the daemon address and start lock from a hash of server.py, so an
updated server never reuses a daemon still running older code.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:13:03 +02:00
Julian lechnerandClaude Opus 5.5 4e4a10604d fix(retrieval): keep multi-word arguments on Windows
os.execv does not quote arguments on Windows, so the hand-off to the virtual
environment split every multi-word --query and search always failed. Run the
runtime with subprocess on Windows instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:13:02 +02:00
Julian lechner 29c0e98272 fix(retrieval): normalize vector result IDs 2026-09-30 17:08:22 +02:00
Julian lechner a67c34f78d fix(retrieval): honor ignore rules and scale search
CI / Capabilities and shell quality (push) Successful in 23s
CI / PowerShell tests on Ubuntu (push) Successful in 12s
CI / Python tests and compilation (push) Failing after 35s
CI / Build and inspect generated packages (push) Skipped
CI / Bash integration and installation guards (push) Skipped
CI / Installed client configuration smoke tests (push) Skipped
CI / Qwen retrieval integration (push) Skipped
CI / CI configuration security checks (push) Successful in 3s
2026-09-30 09:56:57 +02:00
fraujulian 0d034f4299 fix(retrieval): invalidate stale model caches 2026-09-24 22:20:30 +02:00
Julian lechner c27e32f5b2 fix(retrieval): secure daemon IPC messages 2026-09-24 17:08:31 +02:00
fraujulian 49be8edbec feat(retrieval): preload Qwen models during setup
CI / Capabilities and shell quality (push) Successful in 11s
CI / Python tests and compilation (push) Successful in 11s
CI / PowerShell tests on Ubuntu (push) Successful in 28s
CI / CI configuration security checks (push) Successful in 3s
CI / Build and inspect generated packages (push) Successful in 6s
CI / Qwen retrieval integration (push) Successful in 14m20s
CI / Bash integration and installation guards (push) Successful in 16s
CI / Installed client configuration smoke tests (push) Successful in 13s
2026-09-18 15:47:42 +02:00
fraujulian ef084f6fef feat(retrieval): offer device benchmark 2026-09-18 11:37:09 +02:00
Julian lechnerandClaude Sonnet 5 9ad793289d feat(retrieval): add a background daemon to avoid reloading models per query
Each server.py search/rebuild invocation was a fresh process that reloaded
the embedding and reranker models from disk before answering a single
query. Add an optional daemon (server.py daemon) that keeps both models
resident in memory and serves repeated queries, across repository roots,
over a local socket/pipe.

search and rebuild now try the daemon first, spawn one on a cache miss
(guarded by an exclusive lock file to avoid duplicate spawns), and fall
back to the original one-shot in-process worker if the daemon cannot be
reached or started, so behavior is unchanged when the daemon is
unavailable. The daemon exits on its own after 30 minutes of inactivity.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-18 09:36:02 +02:00
Julian lechnerandClaude Sonnet 5 208213c1c7 feat(retrieval): pin model revisions and share encoder/reranker instances
Pin the Qwen embedding/reranker models to specific commit revisions (and
sentence-transformers to the exact version already in use) so index
builds are reproducible instead of floating on each model's main branch.

Also move the encoder and reranker instances to module-level singletons
shared by every Index, instead of one pair per instance, so a process
serving multiple repository roots only loads each model once.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-18 09:35:46 +02:00
Julian lechnerandClaude Sonnet 5 96a1175e20 feat(retrieval): make the file-scan limit configurable and warn on it
Repositories with more than 2000 indexable files silently lost the
remainder during indexing. Make the cap configurable via
SEMANTIC_RETRIEVAL_MAX_FILES (default unchanged) and print an explicit
stderr warning naming the repository when it is reached, instead of
truncating without any signal.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-18 09:35:38 +02:00
fraujulian 9b312cd840 fix(retrieval): run search as local CLI
CI / linux (push) Successful in 6s
2026-09-17 19:27:11 +02:00
Julian lechner e5b63965b8 feat(retrieval): prefer CUDA devices 2026-09-17 17:50:33 +02:00
Julian lechner 5ec6d0b6ac perf(retrieval): batch changed embeddings 2026-09-17 17:50:14 +02:00
Julian lechner 0f8aa0a25d feat(qwen): rerank 50 candidates and return five 2026-09-17 15:54:23 +02:00
Julian lechner e97404a0a1 feat(qwen): fuse dense and lexical search with RRF 2026-09-17 15:54:10 +02:00
Julian lechner fd37422de2 feat(qwen): maintain a lexical search index 2026-09-17 15:53:59 +02:00
Julian lechner b76a993c75 feat(qwen): split chunks at symbols and sections 2026-09-17 15:53:48 +02:00
Julian lechner 685dbe61f4 feat(qwen): add token windows and document metadata 2026-09-17 15:53:36 +02:00
Julian lechner 7be729cb22 feat(qwen): enforce 1024-dimensional embeddings 2026-09-17 15:52:43 +02:00
Julian lechner 2079792a74 fix(qwen): isolate and refresh indexes with code-search prompts 2026-09-17 15:27:04 +02:00
Julian lechner 727c499d2c feat(retrieval): rerank semantic search results 2026-09-17 13:07:47 +02:00
Julian lechner 27f1c1ec79 feat(retrieval): add optional Qwen semantic layer 2026-09-17 09:16:53 +02:00