@functional-systems/srcx 0.1.0-dev.15 → 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 +6 -0
- package/README.md +53 -0
- package/VALIDATION.md +56 -1
- package/dist/cli.js +14 -1
- package/dist/cli.js.map +1 -1
- package/dist/rerank.d.ts +16 -0
- package/dist/rerank.js +68 -0
- package/dist/rerank.js.map +1 -0
- package/dist/search.d.ts +3 -1
- package/dist/search.js +80 -22
- package/dist/search.js.map +1 -1
- package/package.json +4 -2
- package/runtime/qwen.py +97 -0
- package/runtime/requirements.txt +34 -0
- package/src/cli.ts +26 -0
- package/src/rerank.ts +115 -0
- package/src/search.ts +99 -24
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
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
|
+
|
|
8
|
+
- Evaluate fixed-candidate CosQA semantic reranking with local Qwen, shared
|
|
9
|
+
duplicate scores, stable ties and separate official-ID/content metrics.
|
|
10
|
+
|
|
5
11
|
- Cross-check the retained CosQA lexical baseline with an independent offline
|
|
6
12
|
BM25 ranker and the same StandardAnalyzer tokenization.
|
|
7
13
|
|
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
|
@@ -1,6 +1,61 @@
|
|
|
1
1
|
# Validation record
|
|
2
2
|
|
|
3
|
-
Date: 2026-09-
|
|
3
|
+
Date: 2026-09-26 (Asia/Seoul).
|
|
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
|
+
|
|
52
|
+
## Fixed-candidate CosQA reranking
|
|
53
|
+
|
|
54
|
+
The [completed Qwen comparison](eval/COSQA-RERANK-RESULTS.md), run on September 26
|
|
55
|
+
(Asia/Seoul), improved exact-content hit@10 from 57.4% to 64.8% with roughly one
|
|
56
|
+
second of local model computation per query. All 500 original candidate pools
|
|
57
|
+
and duplicate-ID ordering were preserved. The report separates official-ID
|
|
58
|
+
metrics, content-equivalence diagnostics, regressions and local latency.
|
|
4
59
|
|
|
5
60
|
## Independent CosQA BM25 cross-check
|
|
6
61
|
|
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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"}
|
package/dist/rerank.d.ts
ADDED
|
@@ -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
|
-
|
|
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,
|
|
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
|
|
73
|
-
|
|
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
|
-
|
|
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
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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,
|
package/dist/search.js.map
CHANGED
|
@@ -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.
|
|
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": "
|
|
67
|
+
"gitHead": "98be125d45128a9395544b0925df591c0da08b39"
|
|
66
68
|
}
|
package/runtime/qwen.py
ADDED
|
@@ -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
|
-
|
|
125
|
-
|
|
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,
|
|
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
|
|
138
|
-
|
|
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
|
-
|
|
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
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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
|
-
|
|
297
|
-
|
|
298
|
-
|
|
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,
|