@lacneu/openclaw-knowledge 3.1.2 → 3.2.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.
- package/CHANGELOG.md +264 -1
- package/README.md +131 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.js +26 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +25 -4
- package/dist/index.js +295 -46
- package/dist/index.js.map +1 -1
- package/dist/jina/classifier.d.ts +55 -0
- package/dist/jina/classifier.js +170 -0
- package/dist/jina/classifier.js.map +1 -0
- package/dist/jina/client.d.ts +30 -0
- package/dist/jina/client.js +131 -0
- package/dist/jina/client.js.map +1 -0
- package/dist/jina/errors.d.ts +42 -0
- package/dist/jina/errors.js +113 -0
- package/dist/jina/errors.js.map +1 -0
- package/dist/jina/reranker.d.ts +34 -0
- package/dist/jina/reranker.js +95 -0
- package/dist/jina/reranker.js.map +1 -0
- package/dist/jina/types.d.ts +78 -0
- package/dist/jina/types.js +12 -0
- package/dist/jina/types.js.map +1 -0
- package/dist/pgvector.d.ts +29 -0
- package/dist/pgvector.js +68 -0
- package/dist/pgvector.js.map +1 -1
- package/dist/router/heuristic.d.ts +29 -0
- package/dist/router/heuristic.js +104 -0
- package/dist/router/heuristic.js.map +1 -0
- package/dist/router/index.d.ts +33 -0
- package/dist/router/index.js +94 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/labels.d.ts +33 -0
- package/dist/router/labels.js +67 -0
- package/dist/router/labels.js.map +1 -0
- package/dist/router/types.d.ts +23 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/tracing/events.d.ts +83 -0
- package/dist/tracing/events.js +86 -0
- package/dist/tracing/events.js.map +1 -0
- package/dist/types.d.ts +57 -0
- package/openclaw.plugin.json +97 -4
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -3,67 +3,108 @@
|
|
|
3
3
|
// Queries two knowledge sources in parallel and injects relevant context
|
|
4
4
|
// into the agent's system prompt via `appendSystemContext`:
|
|
5
5
|
// 1. PostgreSQL pgvector — semantic vector search on document embeddings
|
|
6
|
+
// (optionally re-ordered by a Jina cross-encoder reranker)
|
|
6
7
|
// 2. LightRAG — knowledge graph with entity/relation multi-hop search
|
|
7
8
|
//
|
|
8
|
-
//
|
|
9
|
+
// As of v3.2.0:
|
|
10
|
+
// - An optional Jina-powered ROUTER decides which source(s) to call
|
|
11
|
+
// (or to skip retrieval entirely on heartbeats and meta-questions).
|
|
12
|
+
// - An optional Jina RERANKER re-orders pgvector results by relevance.
|
|
13
|
+
// Both features are opt-in via the `jina.*` config block and preserve
|
|
14
|
+
// pre-3.2.0 behavior when omitted.
|
|
15
|
+
//
|
|
16
|
+
// Hook: before_prompt_build (requires OpenClaw >= v2026.5.0)
|
|
9
17
|
// Depends on: pg (node-postgres)
|
|
10
18
|
//
|
|
11
19
|
// This is the canonical entry point for the plugin. Helpers live in sibling
|
|
12
|
-
// modules (`config.ts`, `embeddings.ts`, `pgvector.ts`, `lightrag.ts
|
|
13
|
-
//
|
|
20
|
+
// modules (`config.ts`, `embeddings.ts`, `pgvector.ts`, `lightrag.ts`,
|
|
21
|
+
// `jina/*`, `router/*`, `tracing/*`) so the business logic can be
|
|
22
|
+
// unit-tested without instantiating the full SDK.
|
|
14
23
|
import pg from "pg";
|
|
15
24
|
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
|
|
16
25
|
import { resolveConfig } from "./config.js";
|
|
17
26
|
import { embedQuery } from "./embeddings.js";
|
|
18
|
-
import { searchCollection, formatPgvectorResults } from "./pgvector.js";
|
|
27
|
+
import { searchCollection, formatPgvectorResults, rerankPgvectorResults, } from "./pgvector.js";
|
|
19
28
|
import { queryLightRAG, formatLightRAGResults } from "./lightrag.js";
|
|
29
|
+
import { decideRoute } from "./router/index.js";
|
|
30
|
+
import { JinaError, summarizeJinaError } from "./jina/errors.js";
|
|
31
|
+
import { emitEvent, emitTurnMetadata } from "./tracing/events.js";
|
|
20
32
|
// Re-export helpers so the test suite can import them directly without
|
|
21
33
|
// duplicating imports from every submodule.
|
|
22
34
|
export { resolveEnv, resolveConfig } from "./config.js";
|
|
23
35
|
export { embedQuery } from "./embeddings.js";
|
|
24
|
-
export { searchCollection, formatPgvectorResults } from "./pgvector.js";
|
|
36
|
+
export { searchCollection, formatPgvectorResults, rerankPgvectorResults, } from "./pgvector.js";
|
|
25
37
|
export { queryLightRAG, truncateLightRAG, formatLightRAGResults } from "./lightrag.js";
|
|
38
|
+
export { decideRoute } from "./router/index.js";
|
|
26
39
|
// ---------------------------------------------------------------------------
|
|
27
40
|
// Hook handler factory
|
|
28
|
-
//
|
|
29
|
-
// Extracted from `register` so tests can exercise the handler directly
|
|
30
|
-
// without mocking the full plugin API surface.
|
|
31
41
|
// ---------------------------------------------------------------------------
|
|
32
42
|
const MAX_CONSECUTIVE_ERRORS = 3;
|
|
33
43
|
const COOLDOWN_MS = 5 * 60 * 1000;
|
|
34
44
|
const MIN_QUERY_LENGTH = 3;
|
|
45
|
+
function newCooldown() {
|
|
46
|
+
return { consecutiveErrors: 0, cooldownUntil: 0 };
|
|
47
|
+
}
|
|
35
48
|
/**
|
|
36
49
|
* Build the `before_prompt_build` handler bound to a specific plugin state.
|
|
37
50
|
* Kept as a pure factory so the handler can be unit-tested with fake deps.
|
|
38
51
|
*/
|
|
39
52
|
export function createBeforePromptBuildHandler(deps) {
|
|
40
53
|
const { config, pool, logger } = deps;
|
|
41
|
-
// Per-instance state
|
|
42
|
-
//
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
54
|
+
// Per-instance cooldown state. Closed-over so two registrations of the
|
|
55
|
+
// hook never share counters.
|
|
56
|
+
const cooldowns = {
|
|
57
|
+
global: newCooldown(),
|
|
58
|
+
router: newCooldown(),
|
|
59
|
+
pgvector_reranker: newCooldown(),
|
|
60
|
+
};
|
|
61
|
+
return async function beforePromptBuild(event, ctx) {
|
|
46
62
|
if (!config.enabled)
|
|
47
63
|
return undefined;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (Date.now() < cooldownUntil)
|
|
64
|
+
if (isInCooldown(cooldowns.global)) {
|
|
65
|
+
maybeResetCooldown(cooldowns.global, "global", logger);
|
|
66
|
+
if (isInCooldown(cooldowns.global))
|
|
52
67
|
return undefined;
|
|
53
|
-
consecutiveErrors = 0;
|
|
54
|
-
logger.info("openclaw-knowledge: resuming after cooldown");
|
|
55
68
|
}
|
|
56
69
|
const query = extractQueryFromMessages(event.messages);
|
|
57
70
|
if (!query || query.trim().length < MIN_QUERY_LENGTH)
|
|
58
71
|
return undefined;
|
|
72
|
+
emitTurnMetadata(logger, ctx?.runId, query.length);
|
|
73
|
+
// -----------------------------------------------------------------
|
|
74
|
+
// Router gate — decide which sources (if any) to consult.
|
|
75
|
+
// -----------------------------------------------------------------
|
|
76
|
+
const decision = await runRouterWithCooldown(config, ctx, query, cooldowns.router, logger);
|
|
77
|
+
// Project the abstract router decision onto the sources actually
|
|
78
|
+
// configured in this deployment. Without this projection, an
|
|
79
|
+
// exclusive route (e.g. LIGHTRAG_ONLY) on a single-source deployment
|
|
80
|
+
// (e.g. pgvector only) would produce zero tasks and strip context
|
|
81
|
+
// the deployment could otherwise have provided.
|
|
82
|
+
const effectiveRoute = projectRouteOnEnabledSources(decision.route, config.pgvectorEnabled, config.lightragEnabled);
|
|
83
|
+
emitEvent(logger, {
|
|
84
|
+
type: "router",
|
|
85
|
+
route: effectiveRoute,
|
|
86
|
+
reason: decision.reason,
|
|
87
|
+
score: decision.score,
|
|
88
|
+
queryLength: query.length,
|
|
89
|
+
trigger: ctx?.trigger,
|
|
90
|
+
});
|
|
91
|
+
if (effectiveRoute === "NONE")
|
|
92
|
+
return undefined;
|
|
93
|
+
// -----------------------------------------------------------------
|
|
94
|
+
// Source execution — guided by the route.
|
|
95
|
+
// -----------------------------------------------------------------
|
|
59
96
|
try {
|
|
60
97
|
const tasks = [];
|
|
61
|
-
if (
|
|
62
|
-
|
|
98
|
+
if (shouldUsePgvector(effectiveRoute) &&
|
|
99
|
+
config.pgvectorEnabled &&
|
|
100
|
+
pool) {
|
|
101
|
+
tasks.push(runPgvectorSource(pool, query, config, cooldowns.pgvector_reranker, logger));
|
|
63
102
|
}
|
|
64
|
-
if (config.lightragEnabled) {
|
|
103
|
+
if (shouldUseLightRAG(effectiveRoute) && config.lightragEnabled) {
|
|
65
104
|
tasks.push(runLightRAGSource(query, config));
|
|
66
105
|
}
|
|
106
|
+
if (tasks.length === 0)
|
|
107
|
+
return undefined;
|
|
67
108
|
const settled = await Promise.allSettled(tasks);
|
|
68
109
|
const sections = [];
|
|
69
110
|
let failedSources = 0;
|
|
@@ -82,14 +123,10 @@ export function createBeforePromptBuildHandler(deps) {
|
|
|
82
123
|
// cooldown tracking. A partial failure is fine — the other source's
|
|
83
124
|
// context is better than nothing.
|
|
84
125
|
if (failedSources > 0 && failedSources === tasks.length) {
|
|
85
|
-
|
|
86
|
-
if (consecutiveErrors >= MAX_CONSECUTIVE_ERRORS) {
|
|
87
|
-
cooldownUntil = Date.now() + COOLDOWN_MS;
|
|
88
|
-
logger.error(`openclaw-knowledge: ${consecutiveErrors} consecutive errors — cooling down 5 min`);
|
|
89
|
-
}
|
|
126
|
+
registerError(cooldowns.global, "global", logger);
|
|
90
127
|
return undefined;
|
|
91
128
|
}
|
|
92
|
-
consecutiveErrors = 0;
|
|
129
|
+
cooldowns.global.consecutiveErrors = 0;
|
|
93
130
|
if (sections.length === 0)
|
|
94
131
|
return undefined;
|
|
95
132
|
return {
|
|
@@ -105,19 +142,106 @@ export function createBeforePromptBuildHandler(deps) {
|
|
|
105
142
|
}
|
|
106
143
|
catch (err) {
|
|
107
144
|
// Catch-all: an unexpected crash must never propagate to the agent.
|
|
108
|
-
consecutiveErrors++;
|
|
109
145
|
const message = err instanceof Error ? err.message : String(err);
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
logger.error(`openclaw-knowledge: ${consecutiveErrors} consecutive errors — cooling down 5 min: ${message}`);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
logger.error(`openclaw-knowledge: ${message}`);
|
|
116
|
-
}
|
|
146
|
+
logger.error(`openclaw-knowledge: ${message}`);
|
|
147
|
+
registerError(cooldowns.global, "global", logger);
|
|
117
148
|
return undefined;
|
|
118
149
|
}
|
|
119
150
|
};
|
|
120
151
|
}
|
|
152
|
+
// ---------------------------------------------------------------------------
|
|
153
|
+
// Route gating helpers
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
function shouldUsePgvector(route) {
|
|
156
|
+
return route === "PGVECTOR_ONLY" || route === "ALL";
|
|
157
|
+
}
|
|
158
|
+
function shouldUseLightRAG(route) {
|
|
159
|
+
return route === "LIGHTRAG_ONLY" || route === "ALL";
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Project a router decision onto the set of sources that are actually
|
|
163
|
+
* enabled in this deployment. This prevents "silent empty retrieval"
|
|
164
|
+
* when, for example, a pgvector-only deployment is told to use
|
|
165
|
+
* `LIGHTRAG_ONLY` for a multi-hop question — without this projection the
|
|
166
|
+
* task list would be empty and the agent would lose context that
|
|
167
|
+
* pgvector could have provided.
|
|
168
|
+
*
|
|
169
|
+
* Rules:
|
|
170
|
+
* - `NONE` → `NONE` (the router deliberately wants no retrieval).
|
|
171
|
+
* - `ALL` → `ALL` (downstream `shouldUseX` already skips disabled sources).
|
|
172
|
+
* - `PGVECTOR_ONLY` + pgvector disabled:
|
|
173
|
+
* - LightRAG available → `LIGHTRAG_ONLY` (best effort)
|
|
174
|
+
* - neither available → `NONE` (caller short-circuits)
|
|
175
|
+
* - `LIGHTRAG_ONLY` + LightRAG disabled: symmetric.
|
|
176
|
+
*
|
|
177
|
+
* Exported for unit testing.
|
|
178
|
+
*/
|
|
179
|
+
export function projectRouteOnEnabledSources(route, pgvectorEnabled, lightragEnabled) {
|
|
180
|
+
if (route === "NONE" || route === "ALL")
|
|
181
|
+
return route;
|
|
182
|
+
if (route === "PGVECTOR_ONLY") {
|
|
183
|
+
if (pgvectorEnabled)
|
|
184
|
+
return "PGVECTOR_ONLY";
|
|
185
|
+
return lightragEnabled ? "LIGHTRAG_ONLY" : "NONE";
|
|
186
|
+
}
|
|
187
|
+
// route === "LIGHTRAG_ONLY"
|
|
188
|
+
if (lightragEnabled)
|
|
189
|
+
return "LIGHTRAG_ONLY";
|
|
190
|
+
return pgvectorEnabled ? "PGVECTOR_ONLY" : "NONE";
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Run `decideRoute` with isolated cooldown tracking. The router fails open
|
|
194
|
+
* by contract (returns ALL on any Jina error) — the cooldown here is only
|
|
195
|
+
* meant to suppress repeated log spam during a sustained outage, not to
|
|
196
|
+
* stop retrieval.
|
|
197
|
+
*/
|
|
198
|
+
async function runRouterWithCooldown(config, ctx, query, cooldown, logger) {
|
|
199
|
+
// Reset stale cooldown FIRST so we don't keep the classifier circuit
|
|
200
|
+
// open longer than necessary (the first turn after expiry must be
|
|
201
|
+
// able to attempt the classifier again).
|
|
202
|
+
maybeResetCooldown(cooldown, "router", logger);
|
|
203
|
+
// When the classifier circuit is open, we DOWNGRADE the mode to
|
|
204
|
+
// "heuristic" rather than short-circuiting to `ALL`. The cheap local
|
|
205
|
+
// rules (heartbeat / cron / memory trigger gating, meta-agent regex,
|
|
206
|
+
// CLI-trivial guard, keyword fast-paths) MUST still run during a Jina
|
|
207
|
+
// outage — otherwise a 5-min outage re-enables retrieval for every
|
|
208
|
+
// heartbeat, which is the exact waste the router is meant to prevent.
|
|
209
|
+
const classifierCircuitOpen = isInCooldown(cooldown);
|
|
210
|
+
const effectiveMode = classifierCircuitOpen
|
|
211
|
+
? "heuristic"
|
|
212
|
+
: config.routerMode;
|
|
213
|
+
try {
|
|
214
|
+
const d = await decideRoute({
|
|
215
|
+
enabled: config.routerEnabled,
|
|
216
|
+
mode: effectiveMode,
|
|
217
|
+
jinaApiKey: config.jinaApiKey,
|
|
218
|
+
classifierId: config.routerClassifierId || undefined,
|
|
219
|
+
}, {
|
|
220
|
+
query,
|
|
221
|
+
trigger: ctx?.trigger,
|
|
222
|
+
isCli: ctx?.messageProvider === "cli",
|
|
223
|
+
});
|
|
224
|
+
if (d.reason === "classifier_error") {
|
|
225
|
+
registerError(cooldown, "router", logger);
|
|
226
|
+
}
|
|
227
|
+
else if (!classifierCircuitOpen) {
|
|
228
|
+
// Only reset the error counter when we actually exercised the
|
|
229
|
+
// classifier path. While the circuit is open, heuristic-only
|
|
230
|
+
// successes must NOT prematurely declare the classifier healthy.
|
|
231
|
+
cooldown.consecutiveErrors = 0;
|
|
232
|
+
}
|
|
233
|
+
return d;
|
|
234
|
+
}
|
|
235
|
+
catch (err) {
|
|
236
|
+
// Defense in depth: decideRoute already handles Jina errors internally
|
|
237
|
+
// but a non-Jina exception (programmer error) lands here. Log only
|
|
238
|
+
// the error CLASS, never the message — the message could echo
|
|
239
|
+
// user content for some programmatic errors.
|
|
240
|
+
logger.error(`openclaw-knowledge: router unexpected error — ${summarizeJinaError(err)}`);
|
|
241
|
+
registerError(cooldown, "router", logger);
|
|
242
|
+
return { route: "ALL", reason: "classifier_error", score: null };
|
|
243
|
+
}
|
|
244
|
+
}
|
|
121
245
|
/**
|
|
122
246
|
* Extract the most recent user message text. OpenClaw surfaces two content
|
|
123
247
|
* shapes: a plain string, or an array of typed content parts (multi-modal).
|
|
@@ -142,16 +266,81 @@ function extractQueryFromMessages(messages) {
|
|
|
142
266
|
}
|
|
143
267
|
return "";
|
|
144
268
|
}
|
|
145
|
-
async function runPgvectorSource(pool, query, config) {
|
|
269
|
+
async function runPgvectorSource(pool, query, config, rerankerCooldown, logger) {
|
|
270
|
+
const startedAt = Date.now();
|
|
146
271
|
const vector = await embedQuery(query, config.geminiApiKey);
|
|
147
272
|
const searches = config.collections.map((col) => searchCollection(pool, col, vector, config.topK, config.scoreThreshold));
|
|
148
273
|
const allResults = (await Promise.all(searches)).flat();
|
|
149
274
|
allResults.sort((a, b) => b.score - a.score);
|
|
150
|
-
|
|
275
|
+
// Capture the recall size BEFORE the reranker runs. This is the
|
|
276
|
+
// number that monitors "how many candidates did pgvector find?"
|
|
277
|
+
// post-rerank, `data.length` may be smaller (truncated to topN), so
|
|
278
|
+
// we must not conflate the two in telemetry.
|
|
279
|
+
const rawCount = allResults.length;
|
|
280
|
+
// Optional cross-encoder rerank, gated on its own cooldown so a Jina
|
|
281
|
+
// hiccup doesn't poison the rest of the plugin.
|
|
282
|
+
//
|
|
283
|
+
// IMPORTANT: reset the cooldown BEFORE computing `rerankerActive`.
|
|
284
|
+
// Otherwise the first turn after the 5-min window expires would still
|
|
285
|
+
// see `consecutiveErrors=3`, skip the rerank, and only reset on the
|
|
286
|
+
// way out — leaving the operator with a "resuming" log message but a
|
|
287
|
+
// request that did NOT actually use the reranker.
|
|
288
|
+
maybeResetCooldown(rerankerCooldown, "pgvector_reranker", logger);
|
|
289
|
+
const rerankerActive = config.pgvectorRerankerEnabled &&
|
|
290
|
+
Boolean(config.jinaApiKey) &&
|
|
291
|
+
!isInCooldown(rerankerCooldown);
|
|
292
|
+
if (!rerankerActive) {
|
|
293
|
+
return {
|
|
294
|
+
source: "pgvector",
|
|
295
|
+
data: allResults,
|
|
296
|
+
rawCount,
|
|
297
|
+
reranked: false,
|
|
298
|
+
durationMs: Date.now() - startedAt,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
try {
|
|
302
|
+
const reranked = await rerankPgvectorResults(allResults, {
|
|
303
|
+
apiKey: config.jinaApiKey,
|
|
304
|
+
query,
|
|
305
|
+
model: config.pgvectorRerankerModel,
|
|
306
|
+
topN: config.pgvectorRerankerTopN,
|
|
307
|
+
});
|
|
308
|
+
rerankerCooldown.consecutiveErrors = 0;
|
|
309
|
+
return {
|
|
310
|
+
source: "pgvector",
|
|
311
|
+
data: reranked,
|
|
312
|
+
rawCount,
|
|
313
|
+
reranked: true,
|
|
314
|
+
durationMs: Date.now() - startedAt,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
catch (err) {
|
|
318
|
+
// Jina rerank failed → log a SANITIZED summary and fall back to
|
|
319
|
+
// cosine order. We do NOT log `err.message` because Jina error
|
|
320
|
+
// bodies (truncated to 200 chars in JinaApiError) may echo the
|
|
321
|
+
// query or document chunks — that would leak PHI / sensitive
|
|
322
|
+
// content into log files.
|
|
323
|
+
//
|
|
324
|
+
// We also intentionally DO NOT propagate the rejection to
|
|
325
|
+
// Promise.allSettled: pgvector retrieval itself succeeded, the
|
|
326
|
+
// reranker is bonus.
|
|
327
|
+
const isJina = err instanceof JinaError;
|
|
328
|
+
logger.error(`openclaw-knowledge: pgvector reranker failed — ${summarizeJinaError(err)}`);
|
|
329
|
+
if (isJina)
|
|
330
|
+
registerError(rerankerCooldown, "pgvector_reranker", logger);
|
|
331
|
+
return {
|
|
332
|
+
source: "pgvector",
|
|
333
|
+
data: allResults,
|
|
334
|
+
rawCount,
|
|
335
|
+
reranked: false,
|
|
336
|
+
durationMs: Date.now() - startedAt,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
151
339
|
}
|
|
152
340
|
async function runLightRAGSource(query, config) {
|
|
341
|
+
const startedAt = Date.now();
|
|
153
342
|
const context = await queryLightRAG(config.lightragUrl, config.lightragApiKey, query, config.lightragQueryMode);
|
|
154
|
-
return { source: "lightrag", data: context };
|
|
343
|
+
return { source: "lightrag", data: context, durationMs: Date.now() - startedAt };
|
|
155
344
|
}
|
|
156
345
|
function renderSection(result, config, logger) {
|
|
157
346
|
if (result.source === "pgvector") {
|
|
@@ -159,7 +348,21 @@ function renderSection(result, config, logger) {
|
|
|
159
348
|
if (!formatted)
|
|
160
349
|
return null;
|
|
161
350
|
const topScore = result.data[0]?.score?.toFixed(2) ?? "n/a";
|
|
162
|
-
|
|
351
|
+
const rerankNote = result.reranked ? " [reranked]" : "";
|
|
352
|
+
logger.info(`openclaw-knowledge: pgvector — ${result.data.length} result(s)${rerankNote} (top: ${topScore})`);
|
|
353
|
+
emitEvent(logger, {
|
|
354
|
+
type: "pgvector",
|
|
355
|
+
collections: config.collections,
|
|
356
|
+
// `rawCount` is the recall size out of the vector index, captured
|
|
357
|
+
// BEFORE the reranker truncates to topN. `rerankedCount` is the
|
|
358
|
+
// final size that reaches the LLM (or `null` when the reranker
|
|
359
|
+
// is inactive). This split lets operators monitor recall vs.
|
|
360
|
+
// pruning independently.
|
|
361
|
+
rawCount: result.rawCount,
|
|
362
|
+
rerankedCount: result.reranked ? result.data.length : null,
|
|
363
|
+
topScore: result.data[0]?.score ?? null,
|
|
364
|
+
durationMs: result.durationMs,
|
|
365
|
+
});
|
|
163
366
|
return "### Document Search Results (pgvector)\n" + formatted;
|
|
164
367
|
}
|
|
165
368
|
if (result.source === "lightrag") {
|
|
@@ -167,15 +370,46 @@ function renderSection(result, config, logger) {
|
|
|
167
370
|
if (!formatted)
|
|
168
371
|
return null;
|
|
169
372
|
logger.info(`openclaw-knowledge: LightRAG — ${formatted.truncated.length}/${formatted.originalLength} chars (truncated from ${formatted.originalLength})`);
|
|
373
|
+
emitEvent(logger, {
|
|
374
|
+
type: "lightrag",
|
|
375
|
+
mode: config.lightragQueryMode,
|
|
376
|
+
contextChars: formatted.originalLength,
|
|
377
|
+
truncatedChars: formatted.truncated.length,
|
|
378
|
+
durationMs: result.durationMs,
|
|
379
|
+
});
|
|
170
380
|
return "### Knowledge Graph Context (LightRAG)\n" + formatted.truncated;
|
|
171
381
|
}
|
|
172
382
|
return null;
|
|
173
383
|
}
|
|
174
384
|
// ---------------------------------------------------------------------------
|
|
385
|
+
// Cooldown utilities
|
|
386
|
+
// ---------------------------------------------------------------------------
|
|
387
|
+
function isInCooldown(state) {
|
|
388
|
+
return state.consecutiveErrors >= MAX_CONSECUTIVE_ERRORS;
|
|
389
|
+
}
|
|
390
|
+
function maybeResetCooldown(state, scope, logger) {
|
|
391
|
+
if (!isInCooldown(state))
|
|
392
|
+
return;
|
|
393
|
+
if (Date.now() < state.cooldownUntil)
|
|
394
|
+
return;
|
|
395
|
+
state.consecutiveErrors = 0;
|
|
396
|
+
state.cooldownUntil = 0;
|
|
397
|
+
logger.info(`openclaw-knowledge: ${scope} — resuming after cooldown`);
|
|
398
|
+
}
|
|
399
|
+
function registerError(state, scope, logger) {
|
|
400
|
+
state.consecutiveErrors++;
|
|
401
|
+
if (state.consecutiveErrors >= MAX_CONSECUTIVE_ERRORS) {
|
|
402
|
+
state.cooldownUntil = Date.now() + COOLDOWN_MS;
|
|
403
|
+
logger.error(`openclaw-knowledge: ${state.consecutiveErrors} consecutive errors — ${scope} cooling down 5 min`);
|
|
404
|
+
emitEvent(logger, {
|
|
405
|
+
type: "cooldown",
|
|
406
|
+
scope,
|
|
407
|
+
consecutiveErrors: state.consecutiveErrors,
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
// ---------------------------------------------------------------------------
|
|
175
412
|
// Plugin registration helper
|
|
176
|
-
//
|
|
177
|
-
// Exposed so tests can exercise the full wiring (including api.on) without
|
|
178
|
-
// going through `definePluginEntry`, which is tied to the SDK runtime.
|
|
179
413
|
// ---------------------------------------------------------------------------
|
|
180
414
|
/**
|
|
181
415
|
* Register the plugin against a minimal shape-compatible subset of the
|
|
@@ -189,6 +423,15 @@ export function registerKnowledgePlugin(api) {
|
|
|
189
423
|
api.logger.warn("openclaw-knowledge: neither pgvector nor LightRAG configured — plugin disabled");
|
|
190
424
|
return;
|
|
191
425
|
}
|
|
426
|
+
// Sanity check: when the reranker is on, we want at least ~2× the topN
|
|
427
|
+
// as raw candidates to give the cross-encoder room to re-order.
|
|
428
|
+
if (config.pgvectorRerankerEnabled &&
|
|
429
|
+
config.topK < config.pgvectorRerankerTopN * 2) {
|
|
430
|
+
api.logger.warn(`openclaw-knowledge: topK=${config.topK} is small relative to ` +
|
|
431
|
+
`pgvectorRerankerTopN=${config.pgvectorRerankerTopN}. ` +
|
|
432
|
+
`Recommended: topK ≥ ${config.pgvectorRerankerTopN * 2} for the ` +
|
|
433
|
+
`reranker to meaningfully change ordering.`);
|
|
434
|
+
}
|
|
192
435
|
// Only instantiate the pg pool when pgvector is actually in play. Booting
|
|
193
436
|
// a pool with no valid connection string would keep the plugin disabled
|
|
194
437
|
// anyway and leak sockets on hot-reload.
|
|
@@ -206,12 +449,18 @@ export function registerKnowledgePlugin(api) {
|
|
|
206
449
|
}
|
|
207
450
|
const sources = [];
|
|
208
451
|
if (config.pgvectorEnabled) {
|
|
209
|
-
|
|
452
|
+
const rerankNote = config.pgvectorRerankerEnabled
|
|
453
|
+
? ` + reranker(${config.pgvectorRerankerModel})`
|
|
454
|
+
: "";
|
|
455
|
+
sources.push(`pgvector (${config.collections.join(", ")})${rerankNote}`);
|
|
210
456
|
}
|
|
211
457
|
if (config.lightragEnabled) {
|
|
212
458
|
sources.push(`LightRAG (${config.lightragQueryMode})`);
|
|
213
459
|
}
|
|
214
|
-
|
|
460
|
+
const routerNote = config.routerEnabled
|
|
461
|
+
? ` | router=${config.routerMode}${config.routerClassifierId ? "/few-shot" : "/zero-shot"}`
|
|
462
|
+
: "";
|
|
463
|
+
api.logger.info(`openclaw-knowledge: ready — sources: ${sources.join(" + ")}${routerNote}`);
|
|
215
464
|
const handler = createBeforePromptBuildHandler({
|
|
216
465
|
config,
|
|
217
466
|
pool,
|
|
@@ -231,7 +480,7 @@ export function registerKnowledgePlugin(api) {
|
|
|
231
480
|
export default definePluginEntry({
|
|
232
481
|
id: "openclaw-knowledge",
|
|
233
482
|
name: "Knowledge Base",
|
|
234
|
-
description: "Multi-source knowledge search for OpenClaw (pgvector + LightRAG)",
|
|
483
|
+
description: "Multi-source knowledge search for OpenClaw (pgvector + LightRAG) with optional Jina-powered router & reranker",
|
|
235
484
|
register(api) {
|
|
236
485
|
registerKnowledgePlugin(api);
|
|
237
486
|
},
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { ClassificationOutcome, ClassifierEmbeddingModel } from "./types.js";
|
|
2
|
+
export interface ZeroShotClassifyParams {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
text: string;
|
|
5
|
+
labels: string[];
|
|
6
|
+
model?: ClassifierEmbeddingModel;
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
signal?: AbortSignal;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Classify `text` against a list of semantic labels.
|
|
12
|
+
*
|
|
13
|
+
* Returns `null` when:
|
|
14
|
+
* - the response shape is unexpected (Jina rev mismatch),
|
|
15
|
+
* - the predicted label does not exactly match any provided label (we
|
|
16
|
+
* refuse to invent a class — the router should treat this as "unknown").
|
|
17
|
+
*
|
|
18
|
+
* Throws on network / API errors so the caller's circuit breaker can react.
|
|
19
|
+
*/
|
|
20
|
+
export declare function classifyZeroShot({ apiKey, text, labels, model, timeoutMs, signal, }: ZeroShotClassifyParams): Promise<ClassificationOutcome | null>;
|
|
21
|
+
export interface FewShotClassifyParams {
|
|
22
|
+
apiKey: string;
|
|
23
|
+
text: string;
|
|
24
|
+
classifierId: string;
|
|
25
|
+
/**
|
|
26
|
+
* Optional whitelist used by the defensive parser to verify that the
|
|
27
|
+
* returned label is one the caller expects. When omitted, any non-empty
|
|
28
|
+
* string returned by Jina is accepted (caller knows what was trained).
|
|
29
|
+
*/
|
|
30
|
+
expectedLabels?: string[];
|
|
31
|
+
timeoutMs?: number;
|
|
32
|
+
signal?: AbortSignal;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Classify `text` using a pre-trained few-shot classifier identified by
|
|
36
|
+
* `classifierId`. Same `null`-vs-throw contract as `classifyZeroShot`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function classifyFewShot({ apiKey, text, classifierId, expectedLabels, timeoutMs, signal, }: FewShotClassifyParams): Promise<ClassificationOutcome | null>;
|
|
39
|
+
/**
|
|
40
|
+
* Extract the predicted label + optional score from a Classifier response.
|
|
41
|
+
*
|
|
42
|
+
* Known shapes (in order tried):
|
|
43
|
+
* 1. `{ data: [ { predictions: [ { label, score } ] } ] }`
|
|
44
|
+
* 2. `{ results: [ { label, score } ] }`
|
|
45
|
+
* 3. `{ data: [ { label, score } ] }`
|
|
46
|
+
* 4. `{ data: [ { prediction, confidence } ] }`
|
|
47
|
+
*
|
|
48
|
+
* The first match wins. When `allowedLabels` is provided, the picked label
|
|
49
|
+
* MUST be an exact (case-sensitive) member — otherwise we return `null` and
|
|
50
|
+
* the caller falls back to its safe default (the router treats `null` like
|
|
51
|
+
* an outage).
|
|
52
|
+
*
|
|
53
|
+
* @internal exported only for unit testing
|
|
54
|
+
*/
|
|
55
|
+
export declare function parseClassificationResponse(raw: unknown, allowedLabels?: string[]): ClassificationOutcome | null;
|