greprag 5.19.2 → 5.20.0
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.
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
exports.searchCmd = searchCmd;
|
|
9
9
|
const client_1 = require("./client");
|
|
10
|
-
const SEARCH_VALUE_FLAGS = new Set(['--limit', '--section', '--shape', '--store', '--kind']);
|
|
10
|
+
const SEARCH_VALUE_FLAGS = new Set(['--limit', '--section', '--shape', '--store', '--kind', '--rerank-model']);
|
|
11
11
|
async function searchCmd(args) {
|
|
12
12
|
const cfg = (0, client_1.getConfig)();
|
|
13
13
|
if (!cfg.apiKey)
|
|
@@ -19,13 +19,17 @@ async function searchCmd(args) {
|
|
|
19
19
|
const limit = parseInt((0, client_1.getFlag)(args, '--limit') || (multistore ? '8' : '5'), 10);
|
|
20
20
|
const section = (0, client_1.getFlag)(args, '--section');
|
|
21
21
|
const shape = (0, client_1.getFlag)(args, '--shape');
|
|
22
|
+
// --rerank: opt-in LLM relevance rerank (premium). Default off keeps the
|
|
23
|
+
// $0/deterministic lexical contract. --rerank-model overrides the model.
|
|
24
|
+
const rerank = args.includes('--rerank');
|
|
25
|
+
const rerankModel = (0, client_1.getFlag)(args, '--rerank-model');
|
|
22
26
|
const positionals = (0, client_1.extractPositionals)(args, SEARCH_VALUE_FLAGS);
|
|
23
27
|
// Multistore: --all (every tenant store) or one/more --store <ref>. The lone
|
|
24
28
|
// positional is the query (no positional store in this mode).
|
|
25
29
|
if (multistore) {
|
|
26
30
|
const queryText = positionals[0];
|
|
27
31
|
if (!queryText) {
|
|
28
|
-
console.error('Usage: greprag corpus search "<lexical query>" (--all | --store <ref> [--store <ref>]...) [--kind K] [--limit 8] [--section "<heading>"]');
|
|
32
|
+
console.error('Usage: greprag corpus search "<lexical query>" (--all | --store <ref> [--store <ref>]...) [--kind K] [--limit 8] [--section "<heading>"] [--rerank]');
|
|
29
33
|
process.exit(1);
|
|
30
34
|
}
|
|
31
35
|
let storeIds;
|
|
@@ -43,14 +47,14 @@ async function searchCmd(args) {
|
|
|
43
47
|
}
|
|
44
48
|
}
|
|
45
49
|
// else: storeIds undefined → search every store under the tenant.
|
|
46
|
-
await runMultiSearch(cfg, queryText, storeIds, limit, section);
|
|
50
|
+
await runMultiSearch(cfg, queryText, storeIds, limit, section, rerank, rerankModel);
|
|
47
51
|
return;
|
|
48
52
|
}
|
|
49
53
|
// Single-store: positional store + query.
|
|
50
54
|
const storeRef = positionals[0];
|
|
51
55
|
const queryText = positionals[1];
|
|
52
56
|
if (!storeRef || !queryText) {
|
|
53
|
-
console.error('Usage: greprag corpus search <storeIdOrName> "<lexical query>" [--limit 5] [--section "<heading>"] [--shape dialogue]\n or: greprag corpus search "<query>" --all | --store <ref>... (multistore)');
|
|
57
|
+
console.error('Usage: greprag corpus search <storeIdOrName> "<lexical query>" [--limit 5] [--section "<heading>"] [--shape dialogue] [--rerank [--rerank-model <model>]]\n or: greprag corpus search "<query>" --all | --store <ref>... (multistore)');
|
|
54
58
|
process.exit(1);
|
|
55
59
|
}
|
|
56
60
|
const store = await (0, client_1.resolveStore)(storeRef, cfg.apiUrl, cfg.apiKey);
|
|
@@ -62,12 +66,14 @@ async function searchCmd(args) {
|
|
|
62
66
|
const t0 = Date.now();
|
|
63
67
|
const result = await (0, client_1.apiCall)(`${cfg.apiUrl}/v1/stores/${store.id}/query`, cfg.apiKey, {
|
|
64
68
|
query: queryText, limit,
|
|
69
|
+
...(rerank ? { rerank: true, ...(rerankModel ? { rerankModel } : {}) } : {}),
|
|
65
70
|
...(Object.keys(filters).length > 0 ? { filters } : {}),
|
|
66
71
|
});
|
|
67
72
|
if (!result.ok || !result.nodes)
|
|
68
73
|
throw new Error(result.error || 'query failed');
|
|
69
74
|
const ms = Date.now() - t0;
|
|
70
|
-
|
|
75
|
+
const rerankTag = result.reranked ? ' · reranked' : (rerank ? ' · rerank-fallback(lexical)' : '');
|
|
76
|
+
console.log(`\n${store.name} (${store.kind}, ${store.nodeCount} nodes) ← "${queryText}"${rerankTag}`);
|
|
71
77
|
console.log(` ${result.nodes.length} hits in ${ms}ms (server ${result.latencyMs ?? '?'}ms)\n`);
|
|
72
78
|
for (const n of result.nodes) {
|
|
73
79
|
const heading = n.headingPath?.length ? ` · ${n.headingPath.join(' / ')}` : '';
|
|
@@ -81,7 +87,7 @@ async function searchCmd(args) {
|
|
|
81
87
|
}
|
|
82
88
|
/** Cross-store search via POST /v1/search. storeIds omitted = all tenant stores;
|
|
83
89
|
* RRF fuses across (store × query). Hits are labeled with their store name. */
|
|
84
|
-
async function runMultiSearch(cfg, queryText, storeIds, limit, section) {
|
|
90
|
+
async function runMultiSearch(cfg, queryText, storeIds, limit, section, rerank, rerankModel) {
|
|
85
91
|
const list = await (0, client_1.apiGet)(`${cfg.apiUrl}/v1/stores`, cfg.apiKey);
|
|
86
92
|
const nameById = new Map(list.stores.map(s => [s.id, s.name]));
|
|
87
93
|
const body = {
|
|
@@ -91,13 +97,19 @@ async function runMultiSearch(cfg, queryText, storeIds, limit, section) {
|
|
|
91
97
|
body.storeIds = storeIds;
|
|
92
98
|
if (section)
|
|
93
99
|
body.filters = { section };
|
|
100
|
+
if (rerank) {
|
|
101
|
+
body.rerank = true;
|
|
102
|
+
if (rerankModel)
|
|
103
|
+
body.rerankModel = rerankModel;
|
|
104
|
+
}
|
|
94
105
|
const t0 = Date.now();
|
|
95
106
|
const result = await (0, client_1.apiCall)(`${cfg.apiUrl}/v1/search`, cfg.apiKey, body);
|
|
96
107
|
if (!result.ok || !result.nodes)
|
|
97
108
|
throw new Error(result.error || 'search failed');
|
|
98
109
|
const ms = Date.now() - t0;
|
|
99
110
|
const scope = storeIds ? `${storeIds.length} store${storeIds.length === 1 ? '' : 's'}` : 'all stores';
|
|
100
|
-
|
|
111
|
+
const rerankTag = result.reranked ? ' · reranked' : (rerank ? ' · rerank-fallback(lexical)' : '');
|
|
112
|
+
console.log(`\nMultistore search (${scope}) ← "${queryText}"${rerankTag}`);
|
|
101
113
|
console.log(` ${result.nodes.length} hits in ${ms}ms\n`);
|
|
102
114
|
for (const n of result.nodes) {
|
|
103
115
|
const store = nameById.get(n.storeId) || n.storeId.slice(0, 8);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/corpus/search.ts"],"names":[],"mappings":";AAAA;;;;qEAIqE;;AAUrE,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/corpus/search.ts"],"names":[],"mappings":"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"}
|