botnote 0.2.3 → 0.2.5
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/dist/cli.js +20 -0
- package/dist/cli.js.map +1 -1
- package/dist/service/embedding.d.ts +25 -1
- package/dist/service/embedding.js +118 -45
- package/dist/service/embedding.js.map +1 -1
- package/dist/service/search.d.ts +2 -0
- package/dist/service/search.js +101 -51
- package/dist/service/search.js.map +1 -1
- package/package.json +3 -2
package/dist/cli.js
CHANGED
|
@@ -19,6 +19,9 @@ const DEFAULT_TRASH_RETENTION_DAYS = 30;
|
|
|
19
19
|
const DAILY_MS = 24 * 60 * 60 * 1000;
|
|
20
20
|
const TRASH_PURGE_INTERVAL_MS = DAILY_MS;
|
|
21
21
|
const SESSION_PRUNE_INTERVAL_MS = DAILY_MS;
|
|
22
|
+
// Re-queues task/note rows still without a vector: rows left behind by a
|
|
23
|
+
// restart or by a provider outage become searchable without manual backfill.
|
|
24
|
+
const EMBEDDING_SWEEP_INTERVAL_MS = 10 * 60 * 1000;
|
|
22
25
|
function endOfToday() {
|
|
23
26
|
const end = new Date();
|
|
24
27
|
end.setHours(23, 59, 59, 999);
|
|
@@ -38,6 +41,7 @@ async function runRest() {
|
|
|
38
41
|
const auth = authConfigFromEnv();
|
|
39
42
|
const app = await buildServer({ db, embedding, logLevel, auth, defaultScope });
|
|
40
43
|
await app.listen({ port, host });
|
|
44
|
+
embedding.setLogger((msg) => app.log.warn(`embedding: ${msg}`));
|
|
41
45
|
app.log.info(`botnote v${VERSION} listening on http://${host}:${port} (docs: /docs, embeddings ${embedding.isEnabled() ? "ON" : "OFF"})`);
|
|
42
46
|
if (!auth.required && !isLoopback(host) && host !== "localhost") {
|
|
43
47
|
app.log.warn(`listening on ${host} with auth disabled: anyone who can reach port ${port} can read and write everything. Set BOTNOTE_PASSWORD (and create an API token) or BOTNOTE_REQUIRE_AUTH=1.`);
|
|
@@ -99,6 +103,21 @@ async function runRest() {
|
|
|
99
103
|
};
|
|
100
104
|
await pruneSessions();
|
|
101
105
|
const sessionTimer = setInterval(pruneSessions, SESSION_PRUNE_INTERVAL_MS);
|
|
106
|
+
const sweepMissingEmbeddings = async () => {
|
|
107
|
+
if (!embedding.isEnabled())
|
|
108
|
+
return;
|
|
109
|
+
try {
|
|
110
|
+
const queued = await embedding.enqueueMissing();
|
|
111
|
+
if (queued.enqueued > 0) {
|
|
112
|
+
app.log.info(`queued ${queued.enqueued} entit(ies) for embedding backfill (${queued.pendingCount} pending)`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
app.log.error({ err }, "embedding backfill sweep failed");
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
await sweepMissingEmbeddings();
|
|
120
|
+
const embeddingTimer = setInterval(sweepMissingEmbeddings, EMBEDDING_SWEEP_INTERVAL_MS);
|
|
102
121
|
const shutdown = async (sig) => {
|
|
103
122
|
app.log.info(`shutting down on ${sig}`);
|
|
104
123
|
if (recurrenceTimer)
|
|
@@ -106,6 +125,7 @@ async function runRest() {
|
|
|
106
125
|
if (trashTimer)
|
|
107
126
|
clearInterval(trashTimer);
|
|
108
127
|
clearInterval(sessionTimer);
|
|
128
|
+
clearInterval(embeddingTimer);
|
|
109
129
|
await app.close();
|
|
110
130
|
process.exit(0);
|
|
111
131
|
};
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,0CAA0C,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACjE,iFAAiF;AACjF,MAAM,4BAA4B,GAAG,EAAE,CAAC;AACxC,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC,MAAM,uBAAuB,GAAG,QAAQ,CAAC;AACzC,MAAM,yBAAyB,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,12 @@ export declare const EMBED_DIM = 384;
|
|
|
6
6
|
export interface EmbedFn {
|
|
7
7
|
(text: string): Promise<number[]>;
|
|
8
8
|
}
|
|
9
|
+
/** Embeds several texts in one provider round-trip; output order matches input. */
|
|
10
|
+
export interface EmbedBatchFn {
|
|
11
|
+
(texts: string[]): Promise<number[][]>;
|
|
12
|
+
}
|
|
13
|
+
export declare const EMBED_BATCH_MAX_TEXTS = 100;
|
|
14
|
+
export declare const EMBED_BATCH_MAX_CHARS = 200000;
|
|
9
15
|
export interface EmbeddingRuntimeStatus {
|
|
10
16
|
enabled: boolean;
|
|
11
17
|
provider: EmbeddingProvider;
|
|
@@ -17,11 +23,18 @@ export interface EmbeddingRuntimeStatus {
|
|
|
17
23
|
apiKeyPreview: string | null;
|
|
18
24
|
reason: "ready" | "disabled" | "missing_api_key" | "missing_base_url" | "injected" | "not_loaded";
|
|
19
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Embedding worker. The queue is in-memory on purpose (a restart drops it);
|
|
28
|
+
* durability comes from `enqueueMissing`, which the daemon runs at start and on
|
|
29
|
+
* a periodic sweep so rows left with body_vec NULL are always picked up again.
|
|
30
|
+
*/
|
|
20
31
|
export declare class EmbeddingService {
|
|
21
32
|
private db;
|
|
22
|
-
private
|
|
33
|
+
private embedBatch;
|
|
23
34
|
private injected;
|
|
24
35
|
private queue;
|
|
36
|
+
private pending;
|
|
37
|
+
private inFlight;
|
|
25
38
|
private working;
|
|
26
39
|
private envApiKey;
|
|
27
40
|
/** The daemon runs one embedding worker; its provider config is read from
|
|
@@ -31,21 +44,32 @@ export declare class EmbeddingService {
|
|
|
31
44
|
constructor(db: Database["db"], opts?: {
|
|
32
45
|
apiKey?: string | undefined;
|
|
33
46
|
embedFn?: EmbedFn;
|
|
47
|
+
embedBatchFn?: EmbedBatchFn;
|
|
34
48
|
logger?: (msg: string) => void;
|
|
35
49
|
scope?: Scope;
|
|
36
50
|
});
|
|
37
51
|
private log;
|
|
52
|
+
setLogger(logger: (msg: string) => void): void;
|
|
38
53
|
reloadConfig(): Promise<EmbeddingRuntimeStatus>;
|
|
39
54
|
runtimeStatus(): EmbeddingRuntimeStatus;
|
|
40
55
|
isEnabled(): boolean;
|
|
56
|
+
/** Queue one entity; a second call for an id still waiting replaces its text. */
|
|
41
57
|
enqueue(id: string, text: string): void;
|
|
58
|
+
private add;
|
|
42
59
|
embedQuery(text: string): Promise<number[] | null>;
|
|
43
60
|
drain(timeoutMs?: number): Promise<void>;
|
|
44
61
|
pendingCount(): number;
|
|
62
|
+
/**
|
|
63
|
+
* Queue every task/note whose body_vec is still NULL, oldest first, skipping
|
|
64
|
+
* ids already waiting or in flight. Safe to call repeatedly: the daemon runs
|
|
65
|
+
* it at start and on a periodic sweep, which also retries rows the worker
|
|
66
|
+
* gave up on earlier.
|
|
67
|
+
*/
|
|
45
68
|
enqueueMissing(limit?: number): Promise<{
|
|
46
69
|
enqueued: number;
|
|
47
70
|
pendingCount: number;
|
|
48
71
|
}>;
|
|
49
72
|
private tick;
|
|
73
|
+
private takeBatch;
|
|
50
74
|
private process;
|
|
51
75
|
}
|
|
@@ -6,11 +6,31 @@ import { setBodyVec } from "./entities.js";
|
|
|
6
6
|
import { DEFAULT_SCOPE } from "./scope.js";
|
|
7
7
|
export const EMBED_MODEL = DEFAULT_EMBEDDING_MODEL;
|
|
8
8
|
export const EMBED_DIM = VECTOR_DIMENSIONS;
|
|
9
|
+
// OpenAI accepts an input array; a 4k-row backfill becomes ~40 calls instead
|
|
10
|
+
// of 4k. The character cap keeps a batch well under the request token budget.
|
|
11
|
+
export const EMBED_BATCH_MAX_TEXTS = 100;
|
|
12
|
+
export const EMBED_BATCH_MAX_CHARS = 200_000;
|
|
13
|
+
const MAX_ATTEMPTS = 3;
|
|
14
|
+
function assertVector(vec) {
|
|
15
|
+
if (!vec)
|
|
16
|
+
throw new Error("embedding provider returned no embedding");
|
|
17
|
+
if (vec.length !== EMBED_DIM) {
|
|
18
|
+
throw new Error(`embedding provider returned ${vec.length} dimensions; expected ${EMBED_DIM}`);
|
|
19
|
+
}
|
|
20
|
+
return vec;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Embedding worker. The queue is in-memory on purpose (a restart drops it);
|
|
24
|
+
* durability comes from `enqueueMissing`, which the daemon runs at start and on
|
|
25
|
+
* a periodic sweep so rows left with body_vec NULL are always picked up again.
|
|
26
|
+
*/
|
|
9
27
|
export class EmbeddingService {
|
|
10
28
|
db;
|
|
11
|
-
|
|
29
|
+
embedBatch;
|
|
12
30
|
injected = false;
|
|
13
31
|
queue = [];
|
|
32
|
+
pending = new Map();
|
|
33
|
+
inFlight = new Set();
|
|
14
34
|
working = false;
|
|
15
35
|
envApiKey;
|
|
16
36
|
/** The daemon runs one embedding worker; its provider config is read from
|
|
@@ -31,9 +51,12 @@ export class EmbeddingService {
|
|
|
31
51
|
this.db = db;
|
|
32
52
|
this.envApiKey = opts.apiKey;
|
|
33
53
|
this.scope = opts.scope ?? DEFAULT_SCOPE;
|
|
34
|
-
|
|
54
|
+
this.log = opts.logger ?? (() => undefined);
|
|
55
|
+
const single = opts.embedFn;
|
|
56
|
+
if (opts.embedBatchFn || single) {
|
|
35
57
|
this.injected = true;
|
|
36
|
-
this.
|
|
58
|
+
this.embedBatch =
|
|
59
|
+
opts.embedBatchFn ?? ((texts) => Promise.all(texts.map((t) => single(t))));
|
|
37
60
|
this.status = {
|
|
38
61
|
enabled: true,
|
|
39
62
|
provider: DEFAULT_EMBEDDING_PROVIDER,
|
|
@@ -47,11 +70,13 @@ export class EmbeddingService {
|
|
|
47
70
|
};
|
|
48
71
|
}
|
|
49
72
|
else {
|
|
50
|
-
this.
|
|
73
|
+
this.embedBatch = null;
|
|
51
74
|
}
|
|
52
|
-
this.log = opts.logger ?? (() => undefined);
|
|
53
75
|
}
|
|
54
76
|
log;
|
|
77
|
+
setLogger(logger) {
|
|
78
|
+
this.log = logger;
|
|
79
|
+
}
|
|
55
80
|
async reloadConfig() {
|
|
56
81
|
if (this.injected)
|
|
57
82
|
return this.status;
|
|
@@ -64,7 +89,7 @@ export class EmbeddingService {
|
|
|
64
89
|
const model = settings.model.trim() || EMBED_MODEL;
|
|
65
90
|
const baseUrl = settings.baseUrl?.trim() || null;
|
|
66
91
|
if (!settings.enabled) {
|
|
67
|
-
this.
|
|
92
|
+
this.embedBatch = null;
|
|
68
93
|
this.status = {
|
|
69
94
|
enabled: false,
|
|
70
95
|
provider,
|
|
@@ -79,7 +104,7 @@ export class EmbeddingService {
|
|
|
79
104
|
return this.status;
|
|
80
105
|
}
|
|
81
106
|
if (!apiKey) {
|
|
82
|
-
this.
|
|
107
|
+
this.embedBatch = null;
|
|
83
108
|
this.status = {
|
|
84
109
|
enabled: false,
|
|
85
110
|
provider,
|
|
@@ -94,7 +119,7 @@ export class EmbeddingService {
|
|
|
94
119
|
return this.status;
|
|
95
120
|
}
|
|
96
121
|
if (provider === "openai_compatible" && !baseUrl) {
|
|
97
|
-
this.
|
|
122
|
+
this.embedBatch = null;
|
|
98
123
|
this.status = {
|
|
99
124
|
enabled: false,
|
|
100
125
|
provider,
|
|
@@ -112,19 +137,17 @@ export class EmbeddingService {
|
|
|
112
137
|
apiKey,
|
|
113
138
|
...(provider === "openai_compatible" && baseUrl ? { baseURL: baseUrl } : {})
|
|
114
139
|
});
|
|
115
|
-
this.
|
|
140
|
+
this.embedBatch = async (texts) => {
|
|
116
141
|
const res = await client.embeddings.create({
|
|
117
142
|
model,
|
|
118
|
-
input:
|
|
143
|
+
input: texts,
|
|
119
144
|
dimensions: EMBED_DIM
|
|
120
145
|
});
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
throw new Error("embedding provider returned no embedding");
|
|
124
|
-
if (vec.length !== EMBED_DIM) {
|
|
125
|
-
throw new Error(`embedding provider returned ${vec.length} dimensions; expected ${EMBED_DIM}`);
|
|
146
|
+
if (res.data.length !== texts.length) {
|
|
147
|
+
throw new Error(`embedding provider returned ${res.data.length} embeddings for ${texts.length} inputs`);
|
|
126
148
|
}
|
|
127
|
-
|
|
149
|
+
const ordered = [...res.data].sort((a, b) => a.index - b.index);
|
|
150
|
+
return ordered.map((d) => assertVector(d.embedding));
|
|
128
151
|
};
|
|
129
152
|
this.status = {
|
|
130
153
|
enabled: true,
|
|
@@ -143,23 +166,36 @@ export class EmbeddingService {
|
|
|
143
166
|
return this.status;
|
|
144
167
|
}
|
|
145
168
|
isEnabled() {
|
|
146
|
-
return this.
|
|
169
|
+
return this.embedBatch != null;
|
|
147
170
|
}
|
|
171
|
+
/** Queue one entity; a second call for an id still waiting replaces its text. */
|
|
148
172
|
enqueue(id, text) {
|
|
149
|
-
|
|
150
|
-
return;
|
|
151
|
-
if (!text.trim())
|
|
152
|
-
return;
|
|
153
|
-
this.queue.push({ id, text, attempts: 0 });
|
|
173
|
+
this.add(id, text);
|
|
154
174
|
this.tick();
|
|
155
175
|
}
|
|
176
|
+
add(id, text) {
|
|
177
|
+
if (!this.embedBatch)
|
|
178
|
+
return false;
|
|
179
|
+
if (!text.trim())
|
|
180
|
+
return false;
|
|
181
|
+
const waiting = this.pending.get(id);
|
|
182
|
+
if (waiting) {
|
|
183
|
+
waiting.text = text;
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
const job = { id, text, attempts: 0, solo: false };
|
|
187
|
+
this.queue.push(job);
|
|
188
|
+
this.pending.set(id, job);
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
156
191
|
async embedQuery(text) {
|
|
157
|
-
if (!this.
|
|
192
|
+
if (!this.embedBatch)
|
|
158
193
|
return null;
|
|
159
194
|
if (!text.trim())
|
|
160
195
|
return null;
|
|
161
196
|
try {
|
|
162
|
-
|
|
197
|
+
const [vec] = await this.embedBatch([text]);
|
|
198
|
+
return assertVector(vec);
|
|
163
199
|
}
|
|
164
200
|
catch (err) {
|
|
165
201
|
this.log(`query embed failed: ${err}`);
|
|
@@ -176,10 +212,16 @@ export class EmbeddingService {
|
|
|
176
212
|
}
|
|
177
213
|
}
|
|
178
214
|
pendingCount() {
|
|
179
|
-
return this.queue.length +
|
|
215
|
+
return this.queue.length + this.inFlight.size;
|
|
180
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* Queue every task/note whose body_vec is still NULL, oldest first, skipping
|
|
219
|
+
* ids already waiting or in flight. Safe to call repeatedly: the daemon runs
|
|
220
|
+
* it at start and on a periodic sweep, which also retries rows the worker
|
|
221
|
+
* gave up on earlier.
|
|
222
|
+
*/
|
|
181
223
|
async enqueueMissing(limit = 100000) {
|
|
182
|
-
if (!this.
|
|
224
|
+
if (!this.embedBatch)
|
|
183
225
|
return { enqueued: 0, pendingCount: this.pendingCount() };
|
|
184
226
|
const rows = await this.db
|
|
185
227
|
.select({
|
|
@@ -193,12 +235,12 @@ export class EmbeddingService {
|
|
|
193
235
|
.limit(limit);
|
|
194
236
|
let enqueued = 0;
|
|
195
237
|
for (const row of rows) {
|
|
196
|
-
|
|
197
|
-
if (!text)
|
|
238
|
+
if (this.pending.has(row.id) || this.inFlight.has(row.id))
|
|
198
239
|
continue;
|
|
199
|
-
this.
|
|
200
|
-
|
|
240
|
+
if (this.add(row.id, `${row.title ?? ""}\n${row.body}`.trim()))
|
|
241
|
+
enqueued++;
|
|
201
242
|
}
|
|
243
|
+
this.tick();
|
|
202
244
|
return { enqueued, pendingCount: this.pendingCount() };
|
|
203
245
|
}
|
|
204
246
|
tick() {
|
|
@@ -215,28 +257,59 @@ export class EmbeddingService {
|
|
|
215
257
|
setImmediate(() => this.tick());
|
|
216
258
|
});
|
|
217
259
|
}
|
|
260
|
+
takeBatch() {
|
|
261
|
+
const batch = [];
|
|
262
|
+
let chars = 0;
|
|
263
|
+
while (this.queue.length > 0) {
|
|
264
|
+
const next = this.queue[0];
|
|
265
|
+
if (batch.length > 0 && (next.solo || chars + next.text.length > EMBED_BATCH_MAX_CHARS))
|
|
266
|
+
break;
|
|
267
|
+
this.queue.shift();
|
|
268
|
+
this.pending.delete(next.id);
|
|
269
|
+
this.inFlight.add(next.id);
|
|
270
|
+
batch.push(next);
|
|
271
|
+
chars += next.text.length;
|
|
272
|
+
if (next.solo || batch.length >= EMBED_BATCH_MAX_TEXTS)
|
|
273
|
+
break;
|
|
274
|
+
}
|
|
275
|
+
return batch;
|
|
276
|
+
}
|
|
218
277
|
async process() {
|
|
219
|
-
const embedFn = this.embedFn;
|
|
220
|
-
if (!embedFn)
|
|
221
|
-
return;
|
|
222
278
|
while (this.queue.length > 0) {
|
|
223
|
-
const
|
|
224
|
-
if (!
|
|
279
|
+
const embedBatch = this.embedBatch;
|
|
280
|
+
if (!embedBatch)
|
|
281
|
+
return;
|
|
282
|
+
const batch = this.takeBatch();
|
|
283
|
+
if (batch.length === 0)
|
|
225
284
|
break;
|
|
226
285
|
try {
|
|
227
|
-
const
|
|
228
|
-
|
|
286
|
+
const vectors = await embedBatch(batch.map((j) => j.text));
|
|
287
|
+
if (vectors.length !== batch.length) {
|
|
288
|
+
throw new Error(`got ${vectors.length} embeddings for ${batch.length} texts`);
|
|
289
|
+
}
|
|
290
|
+
await Promise.all(batch.map((job, i) => setBodyVec(this.db, job.id, assertVector(vectors[i]))));
|
|
291
|
+
for (const job of batch)
|
|
292
|
+
this.inFlight.delete(job.id);
|
|
229
293
|
}
|
|
230
294
|
catch (err) {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
this.
|
|
295
|
+
let maxAttempts = 0;
|
|
296
|
+
for (const job of batch) {
|
|
297
|
+
this.inFlight.delete(job.id);
|
|
298
|
+
job.attempts += 1;
|
|
299
|
+
maxAttempts = Math.max(maxAttempts, job.attempts);
|
|
300
|
+
if (job.attempts >= MAX_ATTEMPTS) {
|
|
301
|
+
this.log(`giving up on ${job.id} after ${job.attempts} attempts (the periodic sweep retries it): ${err}`);
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
job.solo = true;
|
|
305
|
+
if (!this.pending.has(job.id)) {
|
|
306
|
+
this.queue.push(job);
|
|
307
|
+
this.pending.set(job.id, job);
|
|
308
|
+
}
|
|
234
309
|
}
|
|
235
|
-
|
|
236
|
-
this.log(`retry ${
|
|
237
|
-
|
|
238
|
-
await new Promise((r) => setTimeout(r, backoff));
|
|
239
|
-
this.queue.push(job);
|
|
310
|
+
if (batch.some((j) => j.attempts < MAX_ATTEMPTS)) {
|
|
311
|
+
this.log(`retry ${maxAttempts}/${MAX_ATTEMPTS} for ${batch.length} row(s): ${err}`);
|
|
312
|
+
await new Promise((r) => setTimeout(r, 200 * 2 ** maxAttempts));
|
|
240
313
|
}
|
|
241
314
|
}
|
|
242
315
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../src/service/embedding.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../src/service/embedding.ts"],"names":[],"mappings":"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"}
|
package/dist/service/search.d.ts
CHANGED
|
@@ -14,8 +14,10 @@ export interface SearchHit {
|
|
|
14
14
|
/** True when another entity supersedes this one (score multiplied down). */
|
|
15
15
|
superseded?: boolean;
|
|
16
16
|
}
|
|
17
|
+
export declare function timeDecayFor(createdAt: Date, now?: Date): number;
|
|
17
18
|
export declare function search(scope: Scope, db: Database["db"], input: SearchInput, opts?: {
|
|
18
19
|
queryEmbedding?: number[];
|
|
20
|
+
now?: Date;
|
|
19
21
|
}): Promise<SearchHit[]>;
|
|
20
22
|
/**
|
|
21
23
|
* Near-duplicate candidates for a freshly written note, used by `remember`
|
package/dist/service/search.js
CHANGED
|
@@ -17,11 +17,77 @@ const KIND_WEIGHTS = {
|
|
|
17
17
|
feedback: -0.1,
|
|
18
18
|
log: -0.2
|
|
19
19
|
};
|
|
20
|
+
// Freshness is a tie-breaker, not a relevance signal: the boost decays with
|
|
21
|
+
// the hit's own age and its maximum stays below the RRF gap between rank 1
|
|
22
|
+
// and rank 2 (1/61 - 1/62 ≈ 2.6e-4), so it can never lift a hit over one
|
|
23
|
+
// ranked above it in any modality.
|
|
24
|
+
const TIME_DECAY_MAX = 0.00025;
|
|
25
|
+
const TIME_DECAY_SCALE_DAYS = 90;
|
|
26
|
+
const DAY_MS = 86_400_000;
|
|
27
|
+
export function timeDecayFor(createdAt, now = new Date()) {
|
|
28
|
+
const ageDays = Math.max(0, (now.getTime() - createdAt.getTime()) / DAY_MS);
|
|
29
|
+
return TIME_DECAY_MAX * Math.exp(-ageDays / TIME_DECAY_SCALE_DAYS);
|
|
30
|
+
}
|
|
20
31
|
function rrfScore(rank) {
|
|
21
32
|
if (rank == null)
|
|
22
33
|
return 0;
|
|
23
34
|
return 1 / (RRF_K + rank);
|
|
24
35
|
}
|
|
36
|
+
/** Rows arrive in the sub-query's ORDER BY; position is the modality rank. */
|
|
37
|
+
function rankMap(rows) {
|
|
38
|
+
const m = new Map();
|
|
39
|
+
rows.forEach((r, i) => m.set(r.id, i + 1));
|
|
40
|
+
return m;
|
|
41
|
+
}
|
|
42
|
+
// HNSW evaluates the WHERE clause after the nearest-neighbour walk, so the
|
|
43
|
+
// default ef_search=40 can leave a project-scoped query with almost nothing.
|
|
44
|
+
// Widen the candidate set per query (ef_search caps at 1000) and, where
|
|
45
|
+
// pgvector supports it, keep scanning until LIMIT rows pass the filter.
|
|
46
|
+
const HNSW_EF_SEARCH_MIN = 200;
|
|
47
|
+
const HNSW_EF_SEARCH_MAX = 1000;
|
|
48
|
+
const iterativeScanSupport = new WeakMap();
|
|
49
|
+
function versionAtLeast(version, min) {
|
|
50
|
+
if (!version)
|
|
51
|
+
return false;
|
|
52
|
+
const parts = version.split(".").map((p) => Number.parseInt(p, 10) || 0);
|
|
53
|
+
for (let i = 0; i < 3; i++) {
|
|
54
|
+
const v = parts[i] ?? 0;
|
|
55
|
+
if (v > min[i])
|
|
56
|
+
return true;
|
|
57
|
+
if (v < min[i])
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
function supportsIterativeScan(db) {
|
|
63
|
+
let cached = iterativeScanSupport.get(db);
|
|
64
|
+
if (!cached) {
|
|
65
|
+
cached = db
|
|
66
|
+
.execute(sql `SELECT extversion FROM pg_extension WHERE extname = 'vector'`)
|
|
67
|
+
.then((r) => versionAtLeast(r.rows[0]?.extversion, [0, 8, 0]))
|
|
68
|
+
.catch(() => false);
|
|
69
|
+
iterativeScanSupport.set(db, cached);
|
|
70
|
+
}
|
|
71
|
+
return cached;
|
|
72
|
+
}
|
|
73
|
+
async function nearestRows(db, queryEmbedding, commonFilter, fetchN) {
|
|
74
|
+
const vecLiteral = `[${queryEmbedding.join(",")}]`;
|
|
75
|
+
const efSearch = Math.min(HNSW_EF_SEARCH_MAX, Math.max(HNSW_EF_SEARCH_MIN, fetchN * 4));
|
|
76
|
+
const iterative = await supportsIterativeScan(db);
|
|
77
|
+
return db.transaction(async (tx) => {
|
|
78
|
+
await tx.execute(sql.raw(`SET LOCAL hnsw.ef_search = ${efSearch}`));
|
|
79
|
+
if (iterative)
|
|
80
|
+
await tx.execute(sql `SET LOCAL hnsw.iterative_scan = relaxed_order`);
|
|
81
|
+
const result = await tx.execute(sql `
|
|
82
|
+
SELECT id
|
|
83
|
+
FROM entities
|
|
84
|
+
WHERE body_vec IS NOT NULL ${commonFilter}
|
|
85
|
+
ORDER BY body_vec <=> ${vecLiteral}::vector
|
|
86
|
+
LIMIT ${fetchN}
|
|
87
|
+
`);
|
|
88
|
+
return result.rows;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
25
91
|
export async function search(scope, db, input, opts = {}) {
|
|
26
92
|
const wsFilter = sql `AND workspace_id = ${scope.workspaceId}::uuid`;
|
|
27
93
|
const projectFilter = input.projectId
|
|
@@ -37,67 +103,51 @@ export async function search(scope, db, input, opts = {}) {
|
|
|
37
103
|
const notTrashed = sql `AND deleted_at IS NULL`;
|
|
38
104
|
const commonFilter = sql `${wsFilter} ${projectFilter} ${kindFilter} ${activeProjectFilter} ${notTrashed}`;
|
|
39
105
|
const fetchN = Math.max(input.limit * 4, 40);
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
WHERE (title ILIKE ${`%${input.query}%`} OR body ILIKE ${`%${input.query}%`})
|
|
53
|
-
${commonFilter}
|
|
54
|
-
LIMIT ${fetchN}
|
|
55
|
-
`)).rows
|
|
56
|
-
: [];
|
|
57
|
-
let vecRows = [];
|
|
58
|
-
if (opts.queryEmbedding && opts.queryEmbedding.length > 0) {
|
|
59
|
-
const vecLiteral = `[${opts.queryEmbedding.join(",")}]`;
|
|
60
|
-
vecRows = (await db.execute(sql `
|
|
61
|
-
SELECT id, ROW_NUMBER() OVER (ORDER BY body_vec <=> ${vecLiteral}::vector) AS rank_pos
|
|
106
|
+
const lexicalRows = async () => {
|
|
107
|
+
const bm25 = (await db.execute(sql `
|
|
108
|
+
SELECT id
|
|
109
|
+
FROM entities, websearch_to_tsquery('simple', ${input.query}) q
|
|
110
|
+
WHERE body_tsv @@ q ${commonFilter}
|
|
111
|
+
ORDER BY ts_rank_cd(body_tsv, q) DESC
|
|
112
|
+
LIMIT ${fetchN}
|
|
113
|
+
`)).rows;
|
|
114
|
+
if (bm25.length > 0)
|
|
115
|
+
return bm25;
|
|
116
|
+
return (await db.execute(sql `
|
|
117
|
+
SELECT id
|
|
62
118
|
FROM entities
|
|
63
|
-
WHERE
|
|
64
|
-
|
|
119
|
+
WHERE (title ILIKE ${`%${input.query}%`} OR body ILIKE ${`%${input.query}%`})
|
|
120
|
+
${commonFilter}
|
|
121
|
+
ORDER BY created_at DESC
|
|
65
122
|
LIMIT ${fetchN}
|
|
66
123
|
`)).rows;
|
|
67
|
-
}
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const bm25Map = new Map();
|
|
76
|
-
for (const r of bm25Rows.length > 0 ? bm25Rows : ilikeFallback) {
|
|
77
|
-
bm25Map.set(r.id, Number(r.rank_pos));
|
|
78
|
-
}
|
|
79
|
-
const vecMap = new Map();
|
|
80
|
-
for (const r of vecRows)
|
|
81
|
-
vecMap.set(r.id, Number(r.rank_pos));
|
|
82
|
-
const timeMap = new Map();
|
|
83
|
-
for (const r of timeRows)
|
|
84
|
-
timeMap.set(r.id, Number(r.rank_pos));
|
|
124
|
+
};
|
|
125
|
+
const hasEmbedding = !!opts.queryEmbedding && opts.queryEmbedding.length > 0;
|
|
126
|
+
const [bm25Rows, vecRows] = await Promise.all([
|
|
127
|
+
lexicalRows(),
|
|
128
|
+
hasEmbedding ? nearestRows(db, opts.queryEmbedding, commonFilter, fetchN) : Promise.resolve([])
|
|
129
|
+
]);
|
|
130
|
+
const bm25Map = rankMap(bm25Rows);
|
|
131
|
+
const vecMap = rankMap(vecRows);
|
|
85
132
|
const ids = new Set([...bm25Map.keys(), ...vecMap.keys()]);
|
|
86
133
|
if (ids.size === 0)
|
|
87
134
|
return [];
|
|
88
135
|
const idArr = [...ids];
|
|
89
|
-
const entitiesRows = await
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
136
|
+
const [entitiesRows, supersededRows] = await Promise.all([
|
|
137
|
+
db
|
|
138
|
+
.select()
|
|
139
|
+
.from(entitiesTable)
|
|
140
|
+
.where(and(eq(entitiesTable.workspaceId, scope.workspaceId), inArray(entitiesTable.id, idArr))),
|
|
141
|
+
db
|
|
142
|
+
.select({ toId: edges.toId })
|
|
143
|
+
.from(edges)
|
|
144
|
+
.where(and(eq(edges.kind, "supersedes"), inArray(edges.toId, idArr)))
|
|
145
|
+
]);
|
|
93
146
|
const entityMap = new Map();
|
|
94
147
|
for (const r of entitiesRows)
|
|
95
148
|
entityMap.set(r.id, r);
|
|
96
|
-
const supersededRows = await db
|
|
97
|
-
.select({ toId: edges.toId })
|
|
98
|
-
.from(edges)
|
|
99
|
-
.where(and(eq(edges.kind, "supersedes"), inArray(edges.toId, idArr)));
|
|
100
149
|
const supersededIds = new Set(supersededRows.map((r) => r.toId));
|
|
150
|
+
const now = opts.now ?? new Date();
|
|
101
151
|
const hits = [];
|
|
102
152
|
for (const id of idArr) {
|
|
103
153
|
const entity = entityMap.get(id);
|
|
@@ -105,7 +155,7 @@ export async function search(scope, db, input, opts = {}) {
|
|
|
105
155
|
continue;
|
|
106
156
|
const bm25 = rrfScore(bm25Map.get(id));
|
|
107
157
|
const cosine = rrfScore(vecMap.get(id));
|
|
108
|
-
const timeDecay =
|
|
158
|
+
const timeDecay = timeDecayFor(entity.createdAt, now);
|
|
109
159
|
const kindWeight = KIND_WEIGHTS[entity.kind] ?? 0;
|
|
110
160
|
const accessBoost = accessBoostFor(entity.accessCount);
|
|
111
161
|
const superseded = supersededIds.has(id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/service/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,QAAQ,IAAI,aAAa,EAAe,MAAM,iBAAiB,CAAC;AAiBhF,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB,yEAAyE;AACzE,qEAAqE;AACrE,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,4EAA4E;AAC5E,iFAAiF;AACjF,SAAS,cAAc,CAAC,WAAmB;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AACD,MAAM,YAAY,GAA2B;IAC3C,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,CAAC,GAAG;IACb,QAAQ,EAAE,CAAC,GAAG;IACd,GAAG,EAAE,CAAC,GAAG;CACV,CAAC;AAEF,SAAS,QAAQ,CAAC,IAAwB;IACxC,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;AAC5B,CAAC;AAID,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/service/search.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "botnote",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"description": "Notion for bots. Lightweight project + notes + memory store, agent-first.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@10.33.0",
|
|
@@ -52,7 +52,8 @@
|
|
|
52
52
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
53
53
|
"test": "vitest run --no-file-parallelism",
|
|
54
54
|
"db:generate": "drizzle-kit generate",
|
|
55
|
-
"db:migrate": "tsx src/db/migrate.ts"
|
|
55
|
+
"db:migrate": "tsx src/db/migrate.ts",
|
|
56
|
+
"bench:search": "tsx scripts/bench-search.ts"
|
|
56
57
|
},
|
|
57
58
|
"dependencies": {
|
|
58
59
|
"@fastify/cookie": "^11.0.2",
|