@functional-systems/srcx 0.1.0-dev.16 → 0.1.0-dev.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,9 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ - Add opt-in local Qwen search reranking with bounded candidate pools, pinned
6
+ source evidence, separate scores and per-command timing.
7
+
5
8
  - Evaluate fixed-candidate CosQA semantic reranking with local Qwen, shared
6
9
  duplicate scores, stable ties and separate official-ID/content metrics.
7
10
 
package/README.md CHANGED
@@ -130,6 +130,59 @@ Completed reruns preserve the original report and make no service calls; changed
130
130
  runtime inputs require a fresh directory. Failed runs retain journals and reject
131
131
  automatic replay. These are correctness checks, not retrieval-quality measurements.
132
132
 
133
+ ## Optional local Qwen reranker
134
+
135
+ `search --rerank qwen` reranks candidates from any retrieval mode with
136
+ [Qwen3-Reranker-0.6B](https://huggingface.co/Qwen/Qwen3-Reranker-0.6B/blob/e61197ed45024b0ed8a2d74b80b4d909f1255473/README.md).
137
+ It is off by default. Prepare Python 3.12+ and the model separately; npm does not
138
+ install Python dependencies or download model weights. From a checkout:
139
+
140
+ ```sh
141
+ python3.12 -m venv .srcx/qwen-venv
142
+ .srcx/qwen-venv/bin/pip install -r runtime/requirements.txt
143
+ .srcx/qwen-venv/bin/hf download Qwen/Qwen3-Reranker-0.6B \
144
+ --revision e61197ed45024b0ed8a2d74b80b4d909f1255473 \
145
+ config.json generation_config.json model.safetensors tokenizer.json tokenizer_config.json vocab.json merges.txt
146
+ export SRCX_RERANK_PYTHON="$PWD/.srcx/qwen-venv/bin/python"
147
+
148
+ srcx search --repo <collection> --version <commit> \
149
+ --query "retry failed writes" --mode semantic \
150
+ --rerank qwen --candidates 50 --limit 10
151
+ ```
152
+
153
+ For a global npm installation, the requirements file is at
154
+ `$(npm root -g)/@functional-systems/srcx/runtime/requirements.txt`; place the venv
155
+ in a persistent directory of your choice and use its absolute Python path.
156
+ `HF_HUB_CACHE` can select an existing Hugging Face cache for both download and
157
+ search. The worker loads only the pinned revision from that cache, offline.
158
+ `SRCX_RERANK_DEVICE` accepts `auto` (default: CUDA, then MPS, then CPU), `cuda`,
159
+ `mps`, or `cpu`. The current worker uses float32, SDPA and batch size one.
160
+
161
+ `--candidates` defaults to `max(50, limit)` and must be between `--limit` and 100.
162
+ It requires `--rerank qwen`. Both hybrid retrieval legs use this candidate limit;
163
+ path/language filters and the immutable version apply before reranking. The
164
+ worker receives the query and complete, verified source bytes of each chunk,
165
+ without a path prefix or evaluator labels. Identical source text shares a score
166
+ within the query; every candidate remains present and ties retain retrieval order.
167
+ It uses the code-search instruction from the CoSQA evaluation and ranks by the
168
+ raw yes-minus-no logit margin, not a calibrated relevance probability.
169
+
170
+ JSON stdout remains an array of results. `score` retains the retrieval score;
171
+ `rerankScore`, `retrievalRank` (one-based), and `reranker` identify the new order.
172
+ Only the returned results receive persisted evidence handles. Reranked excerpts
173
+ use the exact chunk bytes; normal reads still expand to complete source lines.
174
+ A JSON timing record on stderr reports verified retrieval, worker, search, and
175
+ command-handler times. Worker time includes Python startup, model loading and
176
+ inference. External process timing additionally includes Node startup and output.
177
+
178
+ Each CLI invocation loads a fresh model; this is an opt-in local integration,
179
+ not a warm inference service. The worker has a 120-second timeout, a 4 MiB input
180
+ cap and an 8,192-token limit per query/chunk pair. Missing setup, oversized input,
181
+ invalid scores and inference failures fail the command without silent truncation
182
+ or fallback. Empty candidate pools skip model execution. Existing search defaults
183
+ and managed embedding usage rules remain unchanged; wider pools increase source
184
+ verification work. See the [integration validation](VALIDATION.md#local-reranker-integration).
185
+
133
186
  ## Evaluate retrieval quality
134
187
 
135
188
  The internal [lexical chunking pilot](https://github.com/lambdadb/srcx/blob/develop/eval/README.md) compares syntax-aware and
package/VALIDATION.md CHANGED
@@ -2,6 +2,53 @@
2
2
 
3
3
  Date: 2026-09-26 (Asia/Seoul).
4
4
 
5
+ ## Local reranker integration
6
+
7
+ The opt-in `search --rerank qwen` path was exercised with the cached
8
+ Qwen3-Reranker-0.6B revision `e61197ed45024b0ed8a2d74b80b4d909f1255473`,
9
+ Python 3.12, float32/MPS on the same Apple M5 Pro / 64 GB machine. A local model
10
+ check ranked a sorting function above an unrelated reader and assigned identical
11
+ scores to exact duplicate source. Offline snapshot loading initially rejected the
12
+ selectively downloaded cache; matching the download allowlist fixed this before
13
+ any live search. No model download was required.
14
+
15
+ Three existing repository questions were selected before running, with a fixed
16
+ 20-candidate pool and a first-five result/read limit. The six CLI searches used
17
+ existing immutable Tags for srcx `8c0d1656d4d66a6461a32e9072b2e5f7fda9cec1`
18
+ and lambdadb-cli `513af6e4d262edd380013c86d51a20aad16274d7`. Baselines retrieved
19
+ 20 results so candidate membership could be checked. All 28 selected-result
20
+ reads matched committed Git source, and every reranked result retained its
21
+ baseline candidate, retrieval score and Snapshot identity.
22
+
23
+ | Question / mode | Candidates | Baseline CLI | Qwen CLI | Qwen worker | First-five complete evidence, before → after |
24
+ | ------------------------------------------ | ---------: | -----------: | -------: | ----------: | -------------------------------------------- |
25
+ | `srcx-alias-name` / lexical | 4 | 2.04 s | 4.44 s | 2.46 s | yes → yes |
26
+ | `srcx-read-integrity` / semantic | 20 | 6.73 s | 9.75 s | 5.35 s | no → no |
27
+ | `lambdadb-cli-command-deadline` / semantic | 20 | 3.86 s | 8.58 s | 4.89 s | yes → yes |
28
+
29
+ CLI timings are external process wall times, excluding subsequent `read` checks;
30
+ worker timings include Python startup, fresh model loading and inference.
31
+ Network/cache/order effects are uncontrolled and these are single measurements,
32
+ not latency percentiles or proof of interactive suitability. The baseline prints
33
+ up to 20 hits while the reranked command prints up to five; both verify the same
34
+ candidate pool. Existing assistant-authored evidence labels were reused, with
35
+ no tuning or new independent relevance judgments. This is an integration smoke
36
+ check, not another ranking benchmark. It supports keeping reranking optional;
37
+ no defaults changed and Jev evaluation remains deferred.
38
+
39
+ There were six searches (four managed query embeddings), no new Collections,
40
+ document writes, document embeddings, retries or failed live commands. The
41
+ retained local report is `.srcx/reranker-smoke/live/report.json` in the integration
42
+ worktree (SHA-256 `0b1a406153a751def4106ce4e6dbeca4fd9f2439e02cefd04e5be111a4679568`).
43
+ Raw command outputs, the bounded runner and isolated result handles are retained
44
+ alongside it; credentials were not recorded.
45
+
46
+ Local validation passed 95 Node tests, 13 Python checks, typecheck, formatting,
47
+ version consistency and three installed-package CLI checks. Installed-package
48
+ checks include the bundled worker path and opt-in search/read protocol with a
49
+ synthetic worker; real model inference and LambdaDB searches were local checks,
50
+ not CI inference. See [setup and behavior](README.md#optional-local-qwen-reranker).
51
+
5
52
  ## Fixed-candidate CosQA reranking
6
53
 
7
54
  The [completed Qwen comparison](eval/COSQA-RERANK-RESULTS.md), run on September 26
package/dist/cli.js CHANGED
@@ -13,6 +13,7 @@ import { attachment, destination, discover, register, selectRepository, } from "
13
13
  import { exclusive, lastBuildPath, publish, published, } from "./publish.js";
14
14
  import { resolveVersion, syncTags } from "./releases.js";
15
15
  import { directHandle, loadHandle, readHandle, search } from "./search.js";
16
+ import { candidateLimit } from "./rerank.js";
16
17
  const cli = new Command()
17
18
  .name("srcx")
18
19
  .description("Version-aware code search on LambdaDB")
@@ -244,15 +245,27 @@ cli
244
245
  .addOption(new Option("--mode <mode>", "Retrieval method; semantic/hybrid incur managed query embedding usage")
245
246
  .choices(["lexical", "semantic", "hybrid"])
246
247
  .default("lexical"))
248
+ .addOption(new Option("--rerank <model>", "Opt-in local reranker (requires separate Python/model setup)").choices(["qwen"]))
249
+ .option("--candidates <count>", "Rerank pool size (default: max(50, limit); max: 100)", integer)
247
250
  .option("--path <path>", "Exact path filter")
248
251
  .option("--language <name>")
249
252
  .action(async (o) => {
253
+ const started = performance.now();
254
+ candidateLimit(o.limit, o);
250
255
  const { remote, settings } = await connected();
251
256
  const r = await selectRepository(remote, o.repo), store = remote.store(r.collection), v = await resolveVersion(store, r, o.version);
252
257
  output(await search(store, settings, r, v, o.query, o.limit, {
253
258
  path: o.path,
254
259
  language: o.language,
255
- }, o.mode));
260
+ }, o.mode, {
261
+ rerank: o.rerank,
262
+ candidates: o.candidates,
263
+ onTiming: (timing) => process.stderr.write(JSON.stringify({
264
+ event: "rerank-timing",
265
+ ...timing,
266
+ commandMs: performance.now() - started,
267
+ }) + "\n"),
268
+ }));
256
269
  });
257
270
  cli
258
271
  .command("read")
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export declare const QWEN_MODEL = "Qwen/Qwen3-Reranker-0.6B";
2
+ export declare const QWEN_REVISION = "e61197ed45024b0ed8a2d74b80b4d909f1255473";
3
+ export type Candidate = {
4
+ id: string;
5
+ text: string;
6
+ };
7
+ export type RerankOptions = {
8
+ rerank?: "qwen";
9
+ candidates?: number;
10
+ onTiming?: (timing: Record<string, unknown>) => void;
11
+ };
12
+ export declare function candidateLimit(limit: number, options: RerankOptions): number;
13
+ export declare function qwenScores(query: string, candidates: Candidate[]): Promise<{
14
+ scores: number[];
15
+ elapsedMs: number;
16
+ }>;
package/dist/rerank.js ADDED
@@ -0,0 +1,68 @@
1
+ import { execFile } from "node:child_process";
2
+ import { fileURLToPath } from "node:url";
3
+ import { invariant } from "./common.js";
4
+ export const QWEN_MODEL = "Qwen/Qwen3-Reranker-0.6B";
5
+ export const QWEN_REVISION = "e61197ed45024b0ed8a2d74b80b4d909f1255473";
6
+ export function candidateLimit(limit, options) {
7
+ invariant(Number.isInteger(limit) && limit >= 1 && limit <= 100, "Limit must be an integer from 1 to 100.");
8
+ invariant(options.rerank === undefined || options.rerank === "qwen", "Unknown reranker.");
9
+ invariant(options.rerank || options.candidates === undefined, "--candidates requires --rerank qwen.");
10
+ const count = options.rerank
11
+ ? (options.candidates ?? Math.max(50, limit))
12
+ : limit;
13
+ invariant(Number.isInteger(count) && count >= limit && count <= 100, "Candidates must be an integer between --limit and 100.");
14
+ if (options.rerank)
15
+ invariant(process.env.SRCX_RERANK_PYTHON, "Set SRCX_RERANK_PYTHON to the prepared Python executable; see README reranker setup.");
16
+ return count;
17
+ }
18
+ export async function qwenScores(query, candidates) {
19
+ invariant(candidates.length > 0 &&
20
+ candidates.length <= 100 &&
21
+ new Set(candidates.map((c) => c.id)).size === candidates.length, "Invalid reranker candidates.");
22
+ const input = JSON.stringify({ query, candidates });
23
+ invariant(Buffer.byteLength(input) <= 4 * 1024 * 1024, "Reranker input exceeds 4 MiB.");
24
+ const python = process.env.SRCX_RERANK_PYTHON;
25
+ invariant(python, "Set SRCX_RERANK_PYTHON to the prepared Python executable.");
26
+ const start = performance.now();
27
+ const stdout = await new Promise((resolve, reject) => {
28
+ const child = execFile(python, [fileURLToPath(new URL("../runtime/qwen.py", import.meta.url))], {
29
+ encoding: "utf8",
30
+ timeout: 120_000,
31
+ killSignal: "SIGKILL",
32
+ maxBuffer: 1024 * 1024,
33
+ env: {
34
+ ...process.env,
35
+ HF_HUB_OFFLINE: "1",
36
+ HF_HUB_DISABLE_TELEMETRY: "1",
37
+ TOKENIZERS_PARALLELISM: "false",
38
+ },
39
+ }, (error, output) => {
40
+ if (error)
41
+ reject(new Error("Qwen reranking failed or exceeded 120 seconds. Check Python dependencies, cached model and SRCX_RERANK_DEVICE; no fallback was applied."));
42
+ else
43
+ resolve(output);
44
+ });
45
+ // An early worker exit can close stdin before Node finishes writing.
46
+ child.stdin?.on("error", () => { });
47
+ child.stdin?.end(input);
48
+ });
49
+ let response;
50
+ try {
51
+ response = JSON.parse(stdout);
52
+ }
53
+ catch {
54
+ throw new Error("Invalid Qwen response.");
55
+ }
56
+ invariant(response?.model === QWEN_MODEL &&
57
+ response?.revision === QWEN_REVISION &&
58
+ Array.isArray(response.scores) &&
59
+ response.scores.length === candidates.length, "Qwen response model or candidate count mismatch.");
60
+ const scores = response.scores.map((entry, index) => {
61
+ invariant(entry?.id === candidates[index].id &&
62
+ typeof entry.score === "number" &&
63
+ Number.isFinite(entry.score), "Qwen response candidate identity or score mismatch.");
64
+ return entry.score;
65
+ });
66
+ return { scores, elapsedMs: performance.now() - start };
67
+ }
68
+ //# sourceMappingURL=rerank.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rerank.js","sourceRoot":"","sources":["../src/rerank.ts"],"names":[],"mappings":"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"}
package/dist/search.d.ts CHANGED
@@ -3,6 +3,7 @@ import { type Settings } from "./settings.js";
3
3
  import type { Repository } from "./repository.js";
4
4
  import type { Published } from "./publish.js";
5
5
  import { type InventoryItem } from "./build.js";
6
+ import { type RerankOptions } from "./rerank.js";
6
7
  export type Handle = {
7
8
  id: string;
8
9
  endpoint: string;
@@ -30,13 +31,14 @@ export declare function retrievalQuery(query: string, size: number, filters: {
30
31
  export declare function search(store: CollectionStore, s: Settings, r: Repository, v: Published, query: string, size?: number, filters?: {
31
32
  path?: string;
32
33
  language?: string;
33
- }, mode?: SearchMode): Promise<unknown[]>;
34
+ }, mode?: SearchMode, options?: RerankOptions): Promise<unknown[]>;
34
35
  export declare function loadHandle(id: string): Promise<Handle>;
35
36
  export declare function directHandle(store: CollectionStore, s: Settings, r: Repository, v: Published, path: string): Promise<Handle>;
36
37
  export declare function readHandle(store: CollectionStore, s: Settings, h: Handle, options?: {
37
38
  context?: number;
38
39
  fullFile?: boolean;
39
40
  lines?: [number, number];
41
+ exactChunk?: boolean;
40
42
  }): Promise<{
41
43
  repository: string;
42
44
  commitOid: string;
package/dist/search.js CHANGED
@@ -4,6 +4,7 @@ import { atomic, hash, invariant, json, lineAt } from "./common.js";
4
4
  import { one, tag } from "./remote.js";
5
5
  import { stateRoot } from "./settings.js";
6
6
  import { PRESET, recordHash } from "./build.js";
7
+ import { candidateLimit, qwenScores, QWEN_MODEL, QWEN_REVISION, } from "./rerank.js";
7
8
  export async function inventoryAt(store, r, v) {
8
9
  const current = (await store.tags()).find((t) => t.name === v.tagName);
9
10
  invariant(current?.snapshotId === v.snapshotId, "Pinned Tag was deleted or recreated.");
@@ -63,14 +64,18 @@ export function retrievalQuery(query, size, filters, mode) {
63
64
  };
64
65
  return mode === "semantic" ? semantic : { rrf: [lexical, semantic] };
65
66
  }
66
- export async function search(store, s, r, v, query, size = 10, filters = {}, mode = "lexical") {
67
- invariant(Number.isInteger(size) && size > 0 && size <= 100, "Limit must be an integer from 1 to 100.");
67
+ export async function search(store, s, r, v, query, size = 10, filters = {}, mode = "lexical", options = {}) {
68
+ const started = performance.now();
69
+ const count = candidateLimit(size, options);
68
70
  invariant(mode === "lexical" || r.preset?.embedding?.managed, "Semantic/hybrid search requires a managed embedding Collection; register with --embedding text-embedding-3-small or text-embedding-3-large.");
69
- const request = retrievalQuery(query, size, filters, mode);
71
+ const request = retrievalQuery(query, count, filters, mode);
70
72
  const entries = await inventoryAt(store, r, v);
71
73
  const files = new Map(entries.filter((e) => e.status === "included").map((e) => [e.fileId, e]));
72
- const result = [];
73
- for (const hit of await store.query(v.tagName, request, size)) {
74
+ const candidates = [];
75
+ const hits = await store.query(v.tagName, request, count);
76
+ invariant(hits.length <= count &&
77
+ new Set(hits.map((h) => h.doc.id)).size === hits.length, "Invalid search candidate count or duplicate IDs.");
78
+ for (const hit of hits) {
74
79
  const d = hit.doc, e = files.get(d.fileId);
75
80
  invariant(d.kind === "chunk" &&
76
81
  d.configHash === r.configHash &&
@@ -93,23 +98,67 @@ export async function search(store, s, r, v, query, size = 10, filters = {}, mod
93
98
  endLine: Number(d.endLine),
94
99
  };
95
100
  // Check the exact source/ranges before persisting an evidence handle.
96
- const evidence = await readHandle(store, s, handle);
97
- await atomic(join(stateRoot(), "results", id + ".json"), handle);
101
+ const evidence = await readHandle(store, s, handle, {
102
+ exactChunk: !!options.rerank,
103
+ });
104
+ candidates.push({
105
+ handle,
106
+ text: evidence.sourceText,
107
+ result: {
108
+ resultId: id,
109
+ repository: r.repoKey,
110
+ commitOid: v.commitOid,
111
+ version: v.tagName,
112
+ snapshotId: v.snapshotId,
113
+ path: d.path,
114
+ startLine: d.startLine,
115
+ endLine: d.endLine,
116
+ symbol: d.symbol,
117
+ score: hit.score,
118
+ excerpt: evidence.sourceText.slice(0, 600),
119
+ citation: evidence.citation,
120
+ },
121
+ });
122
+ }
123
+ const retrievalMs = performance.now() - started;
124
+ let rerankMs = 0;
125
+ let ranked = candidates.map((candidate, index) => ({
126
+ ...candidate,
127
+ index,
128
+ rerankScore: 0,
129
+ }));
130
+ if (options.rerank && candidates.length) {
131
+ const response = await qwenScores(query, candidates.map((c) => ({ id: c.handle.chunkId, text: c.text })));
132
+ rerankMs = response.elapsedMs;
133
+ ranked = ranked
134
+ .map((c, index) => ({ ...c, rerankScore: response.scores[index] }))
135
+ .sort((a, b) => b.rerankScore - a.rerankScore || a.index - b.index);
136
+ }
137
+ if (options.rerank)
138
+ invariant((await store.tags()).find((t) => t.name === v.tagName)?.snapshotId ===
139
+ v.snapshotId, "Pinned Tag was deleted or recreated during reranking.");
140
+ const result = [];
141
+ for (const c of ranked.slice(0, size)) {
142
+ await atomic(join(stateRoot(), "results", c.handle.id + ".json"), c.handle);
98
143
  result.push({
99
- resultId: id,
100
- repository: r.repoKey,
101
- commitOid: v.commitOid,
102
- version: v.tagName,
103
- snapshotId: v.snapshotId,
104
- path: d.path,
105
- startLine: d.startLine,
106
- endLine: d.endLine,
107
- symbol: d.symbol,
108
- score: hit.score,
109
- excerpt: evidence.sourceText.slice(0, 600),
110
- citation: evidence.citation,
144
+ ...c.result,
145
+ ...(options.rerank
146
+ ? {
147
+ rerankScore: c.rerankScore,
148
+ retrievalRank: c.index + 1,
149
+ reranker: { model: QWEN_MODEL, revision: QWEN_REVISION },
150
+ }
151
+ : {}),
111
152
  });
112
153
  }
154
+ if (options.rerank)
155
+ options.onTiming?.({
156
+ candidates: candidates.length,
157
+ returned: result.length,
158
+ retrievalMs,
159
+ rerankMs,
160
+ searchMs: performance.now() - started,
161
+ });
113
162
  return result;
114
163
  }
115
164
  export async function loadHandle(id) {
@@ -149,6 +198,7 @@ export async function readHandle(store, s, h, options = {}) {
149
198
  const total = raw.length === 0
150
199
  ? 0
151
200
  : lineAt(raw, raw.length - (raw.at(-1) === 10 ? 1 : 0));
201
+ let chunkSource;
152
202
  if (h.chunkId) {
153
203
  const d = await one(store, tag(v.tagName), h.chunkId);
154
204
  invariant(d &&
@@ -163,6 +213,7 @@ export async function readHandle(store, s, h, options = {}) {
163
213
  z <= raw.length &&
164
214
  lineAt(raw, a) === h.startLine &&
165
215
  lineAt(raw, z - 1) === h.endLine, "Invalid source range.");
216
+ chunkSource = raw.subarray(a, z).toString("utf8");
166
217
  }
167
218
  const context = options.context ?? 0;
168
219
  invariant(Number.isInteger(context) && context >= 0, "Context must be a nonnegative integer.");
@@ -182,9 +233,16 @@ export async function readHandle(store, s, h, options = {}) {
182
233
  end = Math.min(total, end + context);
183
234
  }
184
235
  const lines = file.sourceText.match(/[^\n]*\n|[^\n]+$/g) ?? [];
185
- const sourceText = options.fullFile
186
- ? file.sourceText
187
- : lines.slice(start - 1, end).join("");
236
+ invariant(!options.exactChunk ||
237
+ (chunkSource !== undefined &&
238
+ !options.fullFile &&
239
+ !options.lines &&
240
+ !options.context), "Exact chunk reads require a chunk handle without range overrides.");
241
+ const sourceText = options.exactChunk
242
+ ? chunkSource
243
+ : options.fullFile
244
+ ? file.sourceText
245
+ : lines.slice(start - 1, end).join("");
188
246
  return {
189
247
  repository: h.repository.repoKey,
190
248
  commitOid: v.commitOid,
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@functional-systems/srcx",
3
- "version": "0.1.0-dev.16",
3
+ "version": "0.1.0-dev.17",
4
4
  "private": false,
5
5
  "description": "Version-aware code search on LambdaDB",
6
6
  "type": "module",
@@ -9,6 +9,8 @@
9
9
  },
10
10
  "files": [
11
11
  "dist",
12
+ "runtime/qwen.py",
13
+ "runtime/requirements.txt",
12
14
  "README.md",
13
15
  "DESIGN.md",
14
16
  "VALIDATION.md",
@@ -62,5 +64,5 @@
62
64
  "url": "https://github.com/lambdadb/srcx/issues"
63
65
  },
64
66
  "license": "Apache-2.0",
65
- "gitHead": "1da86320e6ef5446b41f3d7f9d7d92d536a33132"
67
+ "gitHead": "98be125d45128a9395544b0925df591c0da08b39"
66
68
  }
@@ -0,0 +1,97 @@
1
+ """Offline, one-request Qwen worker. Stdout is the versioned score protocol."""
2
+
3
+ import json
4
+ import math
5
+ import os
6
+ import sys
7
+
8
+ MODEL = "Qwen/Qwen3-Reranker-0.6B"
9
+ REVISION = "e61197ed45024b0ed8a2d74b80b4d909f1255473"
10
+ PREFIX = (
11
+ "<|im_start|>system\nJudge whether the Document meets the requirements "
12
+ "based on the Query and the Instruct provided. Note that the answer "
13
+ 'can only be "yes" or "no".<|im_end|>\n<|im_start|>user\n'
14
+ )
15
+ SUFFIX = "<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n"
16
+ INSTRUCTION = "Given a code search query, retrieve code passages that answer the query."
17
+
18
+
19
+ def require(condition, message):
20
+ if not condition:
21
+ raise ValueError(message)
22
+
23
+
24
+ def encode(tokenizer, query, text):
25
+ body = f"<Instruct>: {INSTRUCTION}\n<Query>: {query}\n<Document>: {text}"
26
+ ids = sum((tokenizer.encode(p, add_special_tokens=False)
27
+ for p in (PREFIX, body, SUFFIX)), [])
28
+ require(len(ids) <= 8192, "Pair exceeds 8192 tokens; no truncation")
29
+ return ids
30
+
31
+
32
+ def validate(body):
33
+ require(isinstance(body, dict) and set(body) == {"query", "candidates"}, "Invalid request")
34
+ require(isinstance(body["query"], str) and 0 < len(body["query"]) <= 4096, "Invalid query")
35
+ candidates = body["candidates"]
36
+ require(isinstance(candidates, list) and 0 < len(candidates) <= 100, "Invalid candidates")
37
+ seen = set()
38
+ for c in candidates:
39
+ require(isinstance(c, dict) and set(c) == {"id", "text"} and
40
+ all(isinstance(v, str) and v for v in c.values()), "Invalid candidate")
41
+ require(c["id"] not in seen, "Duplicate candidate ID")
42
+ seen.add(c["id"])
43
+ return body
44
+
45
+
46
+ def score(body):
47
+ os.environ["HF_HUB_OFFLINE"] = "1"
48
+ from huggingface_hub import snapshot_download
49
+ from transformers import AutoTokenizer, AutoModelForCausalLM
50
+ import torch
51
+
52
+ path = snapshot_download(MODEL, revision=REVISION, local_files_only=True,
53
+ allow_patterns=["config.json", "generation_config.json", "model.safetensors",
54
+ "tokenizer.json", "tokenizer_config.json", "vocab.json", "merges.txt"])
55
+ tokenizer = AutoTokenizer.from_pretrained(path, local_files_only=True, trust_remote_code=False)
56
+ # Reuse exact duplicate code within this query, retaining every candidate ID.
57
+ encoded = {c["text"]: None for c in body["candidates"]}
58
+ for text in encoded:
59
+ encoded[text] = encode(tokenizer, body["query"], text)
60
+ device = os.environ.get("SRCX_RERANK_DEVICE", "auto")
61
+ require(device in ("auto", "cpu", "mps", "cuda"), "Invalid device")
62
+ if device == "auto":
63
+ device = "cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu"
64
+ model = AutoModelForCausalLM.from_pretrained(
65
+ path, local_files_only=True, trust_remote_code=False,
66
+ dtype=torch.float32, attn_implementation="sdpa",
67
+ ).to(device).eval()
68
+ yes, no = (tokenizer.convert_tokens_to_ids(label) for label in ("yes", "no"))
69
+ require(tokenizer.encode("yes", add_special_tokens=False) == [yes] and
70
+ tokenizer.encode("no", add_special_tokens=False) == [no], "Invalid label tokens")
71
+ margins = {}
72
+ with torch.inference_mode():
73
+ for text, ids in encoded.items():
74
+ tensor = torch.tensor([ids], dtype=torch.long, device=device)
75
+ logits = model(input_ids=tensor, attention_mask=torch.ones_like(tensor),
76
+ use_cache=False, logits_to_keep=1).logits[0, -1]
77
+ margin = float((logits[yes].float() - logits[no].float()).cpu())
78
+ require(math.isfinite(margin), "Non-finite score")
79
+ margins[text] = margin
80
+ return {"model": MODEL, "revision": REVISION,
81
+ "scores": [{"id": c["id"], "score": margins[c["text"]]} for c in body["candidates"]]}
82
+
83
+
84
+ def main():
85
+ raw = sys.stdin.buffer.read(4 * 1024 * 1024 + 1)
86
+ require(len(raw) <= 4 * 1024 * 1024, "Request exceeds 4 MiB")
87
+ body = validate(json.loads(raw))
88
+ print(json.dumps(score(body), allow_nan=False))
89
+
90
+
91
+ if __name__ == "__main__":
92
+ try:
93
+ main()
94
+ except Exception:
95
+ # Libraries may include source text or environment values in exceptions.
96
+ print("Qwen worker failed; verify setup, device and input size.", file=sys.stderr)
97
+ sys.exit(1)
@@ -0,0 +1,34 @@
1
+ annotated-doc==0.0.5
2
+ anyio==4.15.1
3
+ certifi==2026.7.22
4
+ click==8.5.0
5
+ filelock==4.0.3
6
+ fsspec==2026.9.0
7
+ h11==0.16.0
8
+ hf-xet==1.6.0
9
+ httpcore==1.0.9
10
+ httpx==0.28.1
11
+ huggingface-hub==1.33.0
12
+ idna==3.20
13
+ jinja2==3.1.6
14
+ markdown-it-py==4.2.0
15
+ markupsafe==3.0.3
16
+ mdurl==0.1.2
17
+ mpmath==1.3.0
18
+ networkx==3.7
19
+ numpy==2.5.3
20
+ packaging==26.3
21
+ pygments==2.21.0
22
+ pyyaml==6.0.3
23
+ regex==2026.9.10
24
+ rich==15.0.0
25
+ safetensors==0.8.0
26
+ setuptools==84.0.0
27
+ shellingham==1.5.4
28
+ sympy==1.14.0
29
+ tokenizers==0.23.2
30
+ torch==2.14.0
31
+ tqdm==4.70.1
32
+ transformers==5.17.0
33
+ typer==0.27.2
34
+ typing-extensions==4.16.0
package/src/cli.ts CHANGED
@@ -33,6 +33,7 @@ import {
33
33
  } from "./publish.js";
34
34
  import { resolveVersion, syncTags } from "./releases.js";
35
35
  import { directHandle, loadHandle, readHandle, search } from "./search.js";
36
+ import { candidateLimit } from "./rerank.js";
36
37
  const cli = new Command()
37
38
  .name("srcx")
38
39
  .description("Version-aware code search on LambdaDB")
@@ -335,9 +336,22 @@ cli
335
336
  .choices(["lexical", "semantic", "hybrid"])
336
337
  .default("lexical"),
337
338
  )
339
+ .addOption(
340
+ new Option(
341
+ "--rerank <model>",
342
+ "Opt-in local reranker (requires separate Python/model setup)",
343
+ ).choices(["qwen"]),
344
+ )
345
+ .option(
346
+ "--candidates <count>",
347
+ "Rerank pool size (default: max(50, limit); max: 100)",
348
+ integer,
349
+ )
338
350
  .option("--path <path>", "Exact path filter")
339
351
  .option("--language <name>")
340
352
  .action(async (o) => {
353
+ const started = performance.now();
354
+ candidateLimit(o.limit, o);
341
355
  const { remote, settings } = await connected();
342
356
  const r = await selectRepository(remote, o.repo),
343
357
  store = remote.store(r.collection),
@@ -355,6 +369,18 @@ cli
355
369
  language: o.language,
356
370
  },
357
371
  o.mode,
372
+ {
373
+ rerank: o.rerank,
374
+ candidates: o.candidates,
375
+ onTiming: (timing) =>
376
+ process.stderr.write(
377
+ JSON.stringify({
378
+ event: "rerank-timing",
379
+ ...timing,
380
+ commandMs: performance.now() - started,
381
+ }) + "\n",
382
+ ),
383
+ },
358
384
  ),
359
385
  );
360
386
  });
package/src/rerank.ts ADDED
@@ -0,0 +1,115 @@
1
+ import { execFile } from "node:child_process";
2
+ import { fileURLToPath } from "node:url";
3
+ import { invariant } from "./common.js";
4
+
5
+ export const QWEN_MODEL = "Qwen/Qwen3-Reranker-0.6B";
6
+ export const QWEN_REVISION = "e61197ed45024b0ed8a2d74b80b4d909f1255473";
7
+ export type Candidate = { id: string; text: string };
8
+ export type RerankOptions = {
9
+ rerank?: "qwen";
10
+ candidates?: number;
11
+ onTiming?: (timing: Record<string, unknown>) => void;
12
+ };
13
+
14
+ export function candidateLimit(limit: number, options: RerankOptions): number {
15
+ invariant(
16
+ Number.isInteger(limit) && limit >= 1 && limit <= 100,
17
+ "Limit must be an integer from 1 to 100.",
18
+ );
19
+ invariant(
20
+ options.rerank === undefined || options.rerank === "qwen",
21
+ "Unknown reranker.",
22
+ );
23
+ invariant(
24
+ options.rerank || options.candidates === undefined,
25
+ "--candidates requires --rerank qwen.",
26
+ );
27
+ const count = options.rerank
28
+ ? (options.candidates ?? Math.max(50, limit))
29
+ : limit;
30
+ invariant(
31
+ Number.isInteger(count) && count >= limit && count <= 100,
32
+ "Candidates must be an integer between --limit and 100.",
33
+ );
34
+ if (options.rerank)
35
+ invariant(
36
+ process.env.SRCX_RERANK_PYTHON,
37
+ "Set SRCX_RERANK_PYTHON to the prepared Python executable; see README reranker setup.",
38
+ );
39
+ return count;
40
+ }
41
+
42
+ export async function qwenScores(query: string, candidates: Candidate[]) {
43
+ invariant(
44
+ candidates.length > 0 &&
45
+ candidates.length <= 100 &&
46
+ new Set(candidates.map((c) => c.id)).size === candidates.length,
47
+ "Invalid reranker candidates.",
48
+ );
49
+ const input = JSON.stringify({ query, candidates });
50
+ invariant(
51
+ Buffer.byteLength(input) <= 4 * 1024 * 1024,
52
+ "Reranker input exceeds 4 MiB.",
53
+ );
54
+ const python = process.env.SRCX_RERANK_PYTHON;
55
+ invariant(
56
+ python,
57
+ "Set SRCX_RERANK_PYTHON to the prepared Python executable.",
58
+ );
59
+ const start = performance.now();
60
+ const stdout = await new Promise<string>((resolve, reject) => {
61
+ const child = execFile(
62
+ python,
63
+ [fileURLToPath(new URL("../runtime/qwen.py", import.meta.url))],
64
+ {
65
+ encoding: "utf8",
66
+ timeout: 120_000,
67
+ killSignal: "SIGKILL",
68
+ maxBuffer: 1024 * 1024,
69
+ env: {
70
+ ...process.env,
71
+ HF_HUB_OFFLINE: "1",
72
+ HF_HUB_DISABLE_TELEMETRY: "1",
73
+ TOKENIZERS_PARALLELISM: "false",
74
+ },
75
+ },
76
+ (error, output) => {
77
+ if (error)
78
+ reject(
79
+ new Error(
80
+ "Qwen reranking failed or exceeded 120 seconds. Check Python dependencies, cached model and SRCX_RERANK_DEVICE; no fallback was applied.",
81
+ ),
82
+ );
83
+ else resolve(output);
84
+ },
85
+ );
86
+ // An early worker exit can close stdin before Node finishes writing.
87
+ child.stdin?.on("error", () => {});
88
+ child.stdin?.end(input);
89
+ });
90
+ let response;
91
+ try {
92
+ response = JSON.parse(stdout);
93
+ } catch {
94
+ throw new Error("Invalid Qwen response.");
95
+ }
96
+ invariant(
97
+ response?.model === QWEN_MODEL &&
98
+ response?.revision === QWEN_REVISION &&
99
+ Array.isArray(response.scores) &&
100
+ response.scores.length === candidates.length,
101
+ "Qwen response model or candidate count mismatch.",
102
+ );
103
+ const scores: number[] = response.scores.map(
104
+ (entry: { id?: unknown; score?: unknown }, index: number) => {
105
+ invariant(
106
+ entry?.id === candidates[index]!.id &&
107
+ typeof entry.score === "number" &&
108
+ Number.isFinite(entry.score),
109
+ "Qwen response candidate identity or score mismatch.",
110
+ );
111
+ return entry.score;
112
+ },
113
+ );
114
+ return { scores, elapsedMs: performance.now() - start };
115
+ }
package/src/search.ts CHANGED
@@ -6,6 +6,13 @@ import { stateRoot, type Settings } from "./settings.js";
6
6
  import type { Repository } from "./repository.js";
7
7
  import type { Published } from "./publish.js";
8
8
  import { PRESET, recordHash, type InventoryItem } from "./build.js";
9
+ import {
10
+ candidateLimit,
11
+ qwenScores,
12
+ QWEN_MODEL,
13
+ QWEN_REVISION,
14
+ type RerankOptions,
15
+ } from "./rerank.js";
9
16
  export type Handle = {
10
17
  id: string;
11
18
  endpoint: string;
@@ -120,22 +127,27 @@ export async function search(
120
127
  size = 10,
121
128
  filters: { path?: string; language?: string } = {},
122
129
  mode: SearchMode = "lexical",
130
+ options: RerankOptions = {},
123
131
  ): Promise<unknown[]> {
124
- invariant(
125
- Number.isInteger(size) && size > 0 && size <= 100,
126
- "Limit must be an integer from 1 to 100.",
127
- );
132
+ const started = performance.now();
133
+ const count = candidateLimit(size, options);
128
134
  invariant(
129
135
  mode === "lexical" || r.preset?.embedding?.managed,
130
136
  "Semantic/hybrid search requires a managed embedding Collection; register with --embedding text-embedding-3-small or text-embedding-3-large.",
131
137
  );
132
- const request = retrievalQuery(query, size, filters, mode);
138
+ const request = retrievalQuery(query, count, filters, mode);
133
139
  const entries = await inventoryAt(store, r, v);
134
140
  const files = new Map(
135
141
  entries.filter((e) => e.status === "included").map((e) => [e.fileId, e]),
136
142
  );
137
- const result = [];
138
- for (const hit of await store.query(v.tagName, request, size)) {
143
+ const candidates = [];
144
+ const hits = await store.query(v.tagName, request, count);
145
+ invariant(
146
+ hits.length <= count &&
147
+ new Set(hits.map((h) => h.doc.id)).size === hits.length,
148
+ "Invalid search candidate count or duplicate IDs.",
149
+ );
150
+ for (const hit of hits) {
139
151
  const d = hit.doc,
140
152
  e = files.get(d.fileId as string);
141
153
  invariant(
@@ -162,23 +174,73 @@ export async function search(
162
174
  endLine: Number(d.endLine),
163
175
  };
164
176
  // Check the exact source/ranges before persisting an evidence handle.
165
- const evidence = await readHandle(store, s, handle);
166
- await atomic(join(stateRoot(), "results", id + ".json"), handle);
177
+ const evidence = await readHandle(store, s, handle, {
178
+ exactChunk: !!options.rerank,
179
+ });
180
+ candidates.push({
181
+ handle,
182
+ text: evidence.sourceText,
183
+ result: {
184
+ resultId: id,
185
+ repository: r.repoKey,
186
+ commitOid: v.commitOid,
187
+ version: v.tagName,
188
+ snapshotId: v.snapshotId,
189
+ path: d.path,
190
+ startLine: d.startLine,
191
+ endLine: d.endLine,
192
+ symbol: d.symbol,
193
+ score: hit.score,
194
+ excerpt: evidence.sourceText.slice(0, 600),
195
+ citation: evidence.citation,
196
+ },
197
+ });
198
+ }
199
+ const retrievalMs = performance.now() - started;
200
+ let rerankMs = 0;
201
+ let ranked = candidates.map((candidate, index) => ({
202
+ ...candidate,
203
+ index,
204
+ rerankScore: 0,
205
+ }));
206
+ if (options.rerank && candidates.length) {
207
+ const response = await qwenScores(
208
+ query,
209
+ candidates.map((c) => ({ id: c.handle.chunkId!, text: c.text })),
210
+ );
211
+ rerankMs = response.elapsedMs;
212
+ ranked = ranked
213
+ .map((c, index) => ({ ...c, rerankScore: response.scores[index]! }))
214
+ .sort((a, b) => b.rerankScore - a.rerankScore || a.index - b.index);
215
+ }
216
+ if (options.rerank)
217
+ invariant(
218
+ (await store.tags()).find((t) => t.name === v.tagName)?.snapshotId ===
219
+ v.snapshotId,
220
+ "Pinned Tag was deleted or recreated during reranking.",
221
+ );
222
+ const result = [];
223
+ for (const c of ranked.slice(0, size)) {
224
+ await atomic(join(stateRoot(), "results", c.handle.id + ".json"), c.handle);
167
225
  result.push({
168
- resultId: id,
169
- repository: r.repoKey,
170
- commitOid: v.commitOid,
171
- version: v.tagName,
172
- snapshotId: v.snapshotId,
173
- path: d.path,
174
- startLine: d.startLine,
175
- endLine: d.endLine,
176
- symbol: d.symbol,
177
- score: hit.score,
178
- excerpt: evidence.sourceText.slice(0, 600),
179
- citation: evidence.citation,
226
+ ...c.result,
227
+ ...(options.rerank
228
+ ? {
229
+ rerankScore: c.rerankScore,
230
+ retrievalRank: c.index + 1,
231
+ reranker: { model: QWEN_MODEL, revision: QWEN_REVISION },
232
+ }
233
+ : {}),
180
234
  });
181
235
  }
236
+ if (options.rerank)
237
+ options.onTiming?.({
238
+ candidates: candidates.length,
239
+ returned: result.length,
240
+ retrievalMs,
241
+ rerankMs,
242
+ searchMs: performance.now() - started,
243
+ });
182
244
  return result;
183
245
  }
184
246
  export async function loadHandle(id: string): Promise<Handle> {
@@ -220,6 +282,7 @@ export async function readHandle(
220
282
  context?: number;
221
283
  fullFile?: boolean;
222
284
  lines?: [number, number];
285
+ exactChunk?: boolean;
223
286
  } = {},
224
287
  ) {
225
288
  invariant(
@@ -247,6 +310,7 @@ export async function readHandle(
247
310
  raw.length === 0
248
311
  ? 0
249
312
  : lineAt(raw, raw.length - (raw.at(-1) === 10 ? 1 : 0));
313
+ let chunkSource: string | undefined;
250
314
  if (h.chunkId) {
251
315
  const d = await one(store, tag(v.tagName), h.chunkId);
252
316
  invariant(
@@ -268,6 +332,7 @@ export async function readHandle(
268
332
  lineAt(raw, z - 1) === h.endLine,
269
333
  "Invalid source range.",
270
334
  );
335
+ chunkSource = raw.subarray(a, z).toString("utf8");
271
336
  }
272
337
  const context = options.context ?? 0;
273
338
  invariant(
@@ -293,9 +358,19 @@ export async function readHandle(
293
358
  end = Math.min(total, end + context);
294
359
  }
295
360
  const lines = file.sourceText.match(/[^\n]*\n|[^\n]+$/g) ?? [];
296
- const sourceText = options.fullFile
297
- ? file.sourceText
298
- : lines.slice(start - 1, end).join("");
361
+ invariant(
362
+ !options.exactChunk ||
363
+ (chunkSource !== undefined &&
364
+ !options.fullFile &&
365
+ !options.lines &&
366
+ !options.context),
367
+ "Exact chunk reads require a chunk handle without range overrides.",
368
+ );
369
+ const sourceText = options.exactChunk
370
+ ? chunkSource!
371
+ : options.fullFile
372
+ ? file.sourceText
373
+ : lines.slice(start - 1, end).join("");
299
374
  return {
300
375
  repository: h.repository.repoKey,
301
376
  commitOid: v.commitOid,