@lacneu/openclaw-knowledge 3.2.3 → 3.2.4
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 +162 -0
- package/dist/config.js +22 -0
- package/dist/config.js.map +1 -1
- package/dist/index.js +46 -4
- package/dist/index.js.map +1 -1
- package/dist/jina/classifier.d.ts +7 -2
- package/dist/jina/classifier.js +4 -2
- package/dist/jina/classifier.js.map +1 -1
- package/dist/jina/client.d.ts +11 -1
- package/dist/jina/client.js +5 -1
- package/dist/jina/client.js.map +1 -1
- package/dist/jina/rate-limit.d.ts +62 -0
- package/dist/jina/rate-limit.js +100 -0
- package/dist/jina/rate-limit.js.map +1 -0
- package/dist/jina/reranker.d.ts +4 -1
- package/dist/jina/reranker.js +2 -1
- package/dist/jina/reranker.js.map +1 -1
- package/dist/pgvector.d.ts +43 -0
- package/dist/pgvector.js +25 -2
- package/dist/pgvector.js.map +1 -1
- package/dist/router/index.d.ts +15 -0
- package/dist/router/index.js +9 -0
- package/dist/router/index.js.map +1 -1
- package/dist/tracing/events.d.ts +13 -1
- package/dist/tracing/events.js.map +1 -1
- package/dist/types.d.ts +53 -0
- package/openclaw.plugin.json +37 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,168 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [3.2.4] - 2026-05-24
|
|
11
|
+
|
|
12
|
+
### Added — payload-size guards for the pgvector reranker
|
|
13
|
+
|
|
14
|
+
Production observation on jerome's Jina dashboard (2026-05-17 →
|
|
15
|
+
2026-05-24): rerank calls averaged **~66 600 tokens** each — way over
|
|
16
|
+
the model's 8 K context window. Almost all of that came from LightRAG-
|
|
17
|
+
side reranker chunking, but the plugin-side reranker would face the
|
|
18
|
+
same risk once `knowledge_jerome` is alimented. v3.2.4 ships two
|
|
19
|
+
preventive knobs to keep the plugin-side spend bounded:
|
|
20
|
+
|
|
21
|
+
- **`jina.pgvectorReranker.candidatePoolMax`** (default `20`). Caps the
|
|
22
|
+
number of cosine-ranked candidates sent to Jina /v1/rerank. Pgvector
|
|
23
|
+
recall is typically 20-50 hits; only the top 10-15 are worth
|
|
24
|
+
reranking. Setting to `0` disables the cap (legacy v3.2.3 behavior).
|
|
25
|
+
|
|
26
|
+
- **`jina.pgvectorReranker.maxCharsPerDoc`** (default `2000`). Pre-
|
|
27
|
+
truncates each candidate text BEFORE submission. Long chunks
|
|
28
|
+
(transcripts, books) carry most of their relevance signal in the
|
|
29
|
+
first ~2000 chars; the tail wastes Jina tokens without adding signal.
|
|
30
|
+
Setting to `0` disables truncation.
|
|
31
|
+
|
|
32
|
+
Both guards are pure pre-filters — they do not alter the reranker's
|
|
33
|
+
output ordering, only the input size.
|
|
34
|
+
|
|
35
|
+
### Added — `jina` usage events
|
|
36
|
+
|
|
37
|
+
The `JinaUsageEvent` shape (already exported since v3.2.0) is now
|
|
38
|
+
actually emitted on every successful Jina API call:
|
|
39
|
+
|
|
40
|
+
- **`/v1/classify`** — emitted from `decideRoute` via the new
|
|
41
|
+
`RouterConfig.onClassifierUsage` callback. `inputCount: 1` (one
|
|
42
|
+
query per call), `model: "zero-shot" | "few-shot"`.
|
|
43
|
+
- **`/v1/rerank`** — emitted from `rerankPgvectorResults` via the new
|
|
44
|
+
`RerankPgvectorParams.onUsage` callback. `inputCount: N` (post-trim
|
|
45
|
+
document count).
|
|
46
|
+
|
|
47
|
+
Dashboards can now graph Jina conso per turn AND per endpoint without
|
|
48
|
+
re-deriving from log timestamps.
|
|
49
|
+
|
|
50
|
+
### Added — soft RPM monitor
|
|
51
|
+
|
|
52
|
+
A lightweight sliding-window counter (`src/jina/rate-limit.ts`)
|
|
53
|
+
observes outbound Jina request rate across the whole plugin. When the
|
|
54
|
+
configured `jina.rpmBudget` is exceeded within any 60-second window,
|
|
55
|
+
the plugin:
|
|
56
|
+
|
|
57
|
+
- emits a single `{type: "jina_rpm_exceeded", count, budget}` event
|
|
58
|
+
for that window,
|
|
59
|
+
- logs a warning naming the budget and the observed count.
|
|
60
|
+
|
|
61
|
+
**The call is never blocked.** The existing 429 cooldown breaker
|
|
62
|
+
remains the hard backstop; the monitor only adds visibility so the
|
|
63
|
+
operator can alert BEFORE billing surprises hit — especially relevant
|
|
64
|
+
when the API key is shared with another service (e.g. Hindsight).
|
|
65
|
+
Default budget: `60` RPM (well below the Jina free-tier 100 RPM
|
|
66
|
+
ceiling). `0` disables the monitor.
|
|
67
|
+
|
|
68
|
+
### LightRAG companion changes (operator action)
|
|
69
|
+
|
|
70
|
+
A non-trivial share of Jina-token saving sits in the LightRAG `.env`
|
|
71
|
+
config, NOT the plugin. The companion
|
|
72
|
+
`openclaw-notes/lightrag/.env.template` is updated in the same patch
|
|
73
|
+
to recommend:
|
|
74
|
+
|
|
75
|
+
- `RERANK_MAX_TOKENS_PER_DOC=600` (was `480`): each candidate splits
|
|
76
|
+
into 2 sub-rerank calls instead of 3 (1200/600=2 vs 1200/480=3).
|
|
77
|
+
Cuts the per-rerank Jina spend by **~33%** at no quality cost
|
|
78
|
+
(sub-chunks remain complete; payload fits cleanly in v2's 8K
|
|
79
|
+
context window with no server-side truncation).
|
|
80
|
+
- `MIN_RERANK_SCORE=0.05` (was `0.0`): drops pure-noise reranked
|
|
81
|
+
chunks. Cleaner injected context, ~10% fewer chars on the
|
|
82
|
+
downstream LLM prompt.
|
|
83
|
+
- `RERANK_ENABLE_CHUNKING` stays `true` — disabling it would push
|
|
84
|
+
the cumulative payload (10 docs × 1200 tokens ≈ 12 K) over the
|
|
85
|
+
8 K v2-multilingual context window, triggering silent server-side
|
|
86
|
+
truncation (Jina's `truncate:true` policy) and lossy ranking. See
|
|
87
|
+
the `.env.template` block for the full operating-point comparison
|
|
88
|
+
(chunking-ON vs TOP_K=5 vs jina-reranker-v3).
|
|
89
|
+
|
|
90
|
+
Apply on the NAS:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
sudo vi /volume3/openclaw/lightrag/.env.jerome
|
|
94
|
+
# Change: RERANK_MAX_TOKENS_PER_DOC=600
|
|
95
|
+
# Change: MIN_RERANK_SCORE=0.05
|
|
96
|
+
sudo docker restart openclaw-lightrag-jerome
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Expected saving on jerome's observed rate: ~8.4 M → ~5.6 M tokens
|
|
100
|
+
per 7 days (-33%), no quality regression.
|
|
101
|
+
|
|
102
|
+
### Migration
|
|
103
|
+
|
|
104
|
+
Drop-in plugin patch. Defaults preserve the v3.2.3 behavior on
|
|
105
|
+
runtimes that don't set the new fields. To activate the new caps on
|
|
106
|
+
both instances:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
sudo docker exec openclaw-jerome openclaw plugins update @lacneu/openclaw-knowledge
|
|
110
|
+
sudo docker exec openclaw-olivier openclaw plugins update @lacneu/openclaw-knowledge
|
|
111
|
+
sudo docker restart openclaw-jerome openclaw-olivier
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Verify post-restart:
|
|
115
|
+
- `[knowledge.event] {"type":"jina","endpoint":"classify",...}` lines
|
|
116
|
+
appear on every classifier call.
|
|
117
|
+
- `[knowledge.event] {"type":"jina","endpoint":"rerank","inputCount":N,...}`
|
|
118
|
+
lines appear on every rerank call. `inputCount` is now bounded by
|
|
119
|
+
`candidatePoolMax`.
|
|
120
|
+
- `[knowledge.event] {"type":"jina_rpm_exceeded",...}` appears ONLY
|
|
121
|
+
during real overshoots (typically silent on single-user workloads).
|
|
122
|
+
|
|
123
|
+
### Codex pass #33 correction (P2)
|
|
124
|
+
|
|
125
|
+
`rpmBudget: 0` is documented as "disables the monitor entirely" on
|
|
126
|
+
both `JinaPluginConfig.rpmBudget` and the `openclaw.plugin.json`
|
|
127
|
+
schema. The initial implementation contradicted that promise: the
|
|
128
|
+
overshoot check `count > this.budget` evaluated to `true` on the very
|
|
129
|
+
first record (`1 > 0`), firing a spurious `jina_rpm_exceeded` event
|
|
130
|
+
on every plugin turn.
|
|
131
|
+
|
|
132
|
+
Fixed with defense-in-depth:
|
|
133
|
+
|
|
134
|
+
- **`RpmMonitor.record()` / `RpmMonitor.peek()`** short-circuit to
|
|
135
|
+
`0` when `budget <= 0`. No timestamp tracked, no `onExceeded`
|
|
136
|
+
callback ever fires. Negative budgets get the same treatment.
|
|
137
|
+
- **`src/index.ts`** skips constructing the monitor entirely when
|
|
138
|
+
`config.jinaRpmBudget === 0` — `rpmMonitor` becomes `undefined`
|
|
139
|
+
and every `rpmMonitor?.record()` callsite becomes a free no-op.
|
|
140
|
+
|
|
141
|
+
### Codex pass #34 correction (P3)
|
|
142
|
+
|
|
143
|
+
`RpmMonitor.lastExceededNotice` was initialized to `0`. The dedup
|
|
144
|
+
check `t - lastExceededNotice >= 60_000` was unsatisfiable until
|
|
145
|
+
simulated time reached 60s when a test clock started at `now=0` — a
|
|
146
|
+
documented use case for `RpmMonitorOptions.now`. The first alert was
|
|
147
|
+
silently suppressed during the first minute of any such test.
|
|
148
|
+
|
|
149
|
+
Initialized to `Number.NEGATIVE_INFINITY` so the first overshoot
|
|
150
|
+
fires regardless of clock origin. Production `Date.now()` was always
|
|
151
|
+
well above 60_000, so this is a test-correctness fix with no behavior
|
|
152
|
+
change in production.
|
|
153
|
+
|
|
154
|
+
### Test coverage
|
|
155
|
+
|
|
156
|
+
- Total: 271 tests, all green (was 250 in 3.2.3; +21 new).
|
|
157
|
+
- New file `test/jina/rate-limit.test.ts` (12 tests) — sliding-window
|
|
158
|
+
count, 60s expiry, one-notice-per-window deduplication,
|
|
159
|
+
`DEFAULT_RPM_BUDGET` constant, **Codex #33 regression: budget=0
|
|
160
|
+
AND negative-budget disable the monitor completely**,
|
|
161
|
+
**Codex #34 regression: first overshoot fires even with a test
|
|
162
|
+
clock starting at `now=0`**.
|
|
163
|
+
- 5 new tests in `test/pgvector.test.ts` — `candidatePoolMax` cap,
|
|
164
|
+
`maxCharsPerDoc` truncation, `onUsage` callback fires on success,
|
|
165
|
+
`onUsage` NOT fired on failure, legacy `undefined` keeps no-trim
|
|
166
|
+
behavior.
|
|
167
|
+
- 4 new tests in `test/config.test.ts` — default values, override,
|
|
168
|
+
`[0, ∞)` clamping on the three new numeric fields.
|
|
169
|
+
- 1 fixture update in `test/tracing/events.test.ts` for the new
|
|
170
|
+
`JinaRpmExceededEvent` shape.
|
|
171
|
+
|
|
10
172
|
## [3.2.3] - 2026-05-23
|
|
11
173
|
|
|
12
174
|
### Added — observability for "ran and matched nothing" (P1)
|
package/dist/config.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
//
|
|
3
3
|
// These helpers are the only place that touches `process.env`, keeping the
|
|
4
4
|
// rest of the plugin easy to test with deterministic values.
|
|
5
|
+
import { DEFAULT_RPM_BUDGET } from "./jina/rate-limit.js";
|
|
5
6
|
import { DEFAULT_MIN_CONFIDENCE } from "./router/index.js";
|
|
6
7
|
/**
|
|
7
8
|
* Expand `${VAR_NAME}` patterns in a config string against `process.env`.
|
|
@@ -45,6 +46,12 @@ const DEFAULT_ROUTER_MODE = "heuristic";
|
|
|
45
46
|
// staying below typical hit scores (≈ 0.40-0.65).
|
|
46
47
|
const DEFAULT_RERANKER_MODEL = "jina-reranker-v2-base-multilingual";
|
|
47
48
|
const DEFAULT_RERANKER_TOP_N = 5;
|
|
49
|
+
// 3.2.4 — payload-trimming defaults. Empirically calibrated on jerome's
|
|
50
|
+
// Jina dashboard (2026-05-17 → 2026-05-24): 20 candidates × 2000 chars
|
|
51
|
+
// fits in ~10K tokens (well below jina-reranker-v2's 8K context window
|
|
52
|
+
// once the query is added) while preserving the top-precision band.
|
|
53
|
+
const DEFAULT_RERANKER_CANDIDATE_POOL_MAX = 20;
|
|
54
|
+
const DEFAULT_RERANKER_MAX_CHARS_PER_DOC = 2000;
|
|
48
55
|
/**
|
|
49
56
|
* Apply defaults and env substitution to the raw plugin config. A source is
|
|
50
57
|
* enabled when its credentials are present, unless the user explicitly toggles
|
|
@@ -80,6 +87,8 @@ export function resolveConfig(cfg = {}) {
|
|
|
80
87
|
lightragEnabled: cfg.lightragEnabled !== false && Boolean(lightragUrl),
|
|
81
88
|
// Jina shared key (used by router and/or reranker)
|
|
82
89
|
jinaApiKey,
|
|
90
|
+
// 3.2.4 — soft RPM budget. 0 disables the monitor entirely.
|
|
91
|
+
jinaRpmBudget: clampNonNegInt(jina.rpmBudget ?? DEFAULT_RPM_BUDGET),
|
|
83
92
|
// Router — disabled by default, even with a Jina key present, so
|
|
84
93
|
// operators must opt in explicitly. "heuristic" mode is the safest
|
|
85
94
|
// entry point: zero cost, deterministic.
|
|
@@ -95,6 +104,19 @@ export function resolveConfig(cfg = {}) {
|
|
|
95
104
|
pgvectorRerankerEnabled: reranker.enabled === true && Boolean(jinaApiKey),
|
|
96
105
|
pgvectorRerankerModel: reranker.model ?? DEFAULT_RERANKER_MODEL,
|
|
97
106
|
pgvectorRerankerTopN: reranker.topN ?? DEFAULT_RERANKER_TOP_N,
|
|
107
|
+
// 3.2.4 — payload-size guards. `null`/`undefined` user input falls
|
|
108
|
+
// back to the production-tuned defaults; an explicit `0` disables
|
|
109
|
+
// the corresponding cap (legacy v3.2.3 behavior).
|
|
110
|
+
pgvectorRerankerCandidatePoolMax: clampNonNegInt(reranker.candidatePoolMax ?? DEFAULT_RERANKER_CANDIDATE_POOL_MAX),
|
|
111
|
+
pgvectorRerankerMaxCharsPerDoc: clampNonNegInt(reranker.maxCharsPerDoc ?? DEFAULT_RERANKER_MAX_CHARS_PER_DOC),
|
|
98
112
|
};
|
|
99
113
|
}
|
|
114
|
+
/** Clamp a value to a non-negative integer. Bad input collapses to `0`. */
|
|
115
|
+
function clampNonNegInt(value) {
|
|
116
|
+
if (!Number.isFinite(value))
|
|
117
|
+
return 0;
|
|
118
|
+
if (value < 0)
|
|
119
|
+
return 0;
|
|
120
|
+
return Math.floor(value);
|
|
121
|
+
}
|
|
100
122
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,EAAE;AACF,2EAA2E;AAC3E,6DAA6D;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -28,6 +28,7 @@ import { searchCollection, formatPgvectorResults, rerankPgvectorResults, } from
|
|
|
28
28
|
import { queryLightRAG, formatLightRAGResults } from "./lightrag.js";
|
|
29
29
|
import { decideRoute } from "./router/index.js";
|
|
30
30
|
import { JinaError, summarizeJinaError } from "./jina/errors.js";
|
|
31
|
+
import { RpmMonitor } from "./jina/rate-limit.js";
|
|
31
32
|
import { emitEvent, emitTurnMetadata, LIGHTRAG_SPARSE_THRESHOLD_CHARS, } from "./tracing/events.js";
|
|
32
33
|
// Re-export helpers so the test suite can import them directly without
|
|
33
34
|
// duplicating imports from every submodule.
|
|
@@ -58,6 +59,27 @@ export function createBeforePromptBuildHandler(deps) {
|
|
|
58
59
|
router: newCooldown(),
|
|
59
60
|
pgvector_reranker: newCooldown(),
|
|
60
61
|
};
|
|
62
|
+
// Per-instance RPM monitor — one sliding window per plugin runtime.
|
|
63
|
+
// The `onExceeded` callback emits a structured event the FIRST time the
|
|
64
|
+
// budget is overshot in any given 60-second window, so dashboards alert
|
|
65
|
+
// BEFORE the operator sees billing surprises (especially relevant when
|
|
66
|
+
// the Jina key is shared with another service like Hindsight).
|
|
67
|
+
//
|
|
68
|
+
// When `config.jinaRpmBudget === 0`, the monitor is fully disabled
|
|
69
|
+
// (no instance constructed, no timestamps tracked, no callback ever
|
|
70
|
+
// fires). This matches the contract documented on
|
|
71
|
+
// `JinaPluginConfig.rpmBudget`. Defense-in-depth: even if a caller
|
|
72
|
+
// bypasses this gate and constructs `RpmMonitor` with budget=0
|
|
73
|
+
// directly, the `record()` method itself short-circuits to a no-op.
|
|
74
|
+
const rpmMonitor = config.jinaRpmBudget > 0
|
|
75
|
+
? new RpmMonitor({
|
|
76
|
+
budget: config.jinaRpmBudget,
|
|
77
|
+
onExceeded: ({ count, budget }) => {
|
|
78
|
+
logger.warn(`openclaw-knowledge: Jina RPM budget exceeded — ${count}/${budget} requests in the last 60s`);
|
|
79
|
+
emitEvent(logger, { type: "jina_rpm_exceeded", count, budget });
|
|
80
|
+
},
|
|
81
|
+
})
|
|
82
|
+
: undefined;
|
|
61
83
|
return async function beforePromptBuild(event, ctx) {
|
|
62
84
|
if (!config.enabled)
|
|
63
85
|
return undefined;
|
|
@@ -73,7 +95,7 @@ export function createBeforePromptBuildHandler(deps) {
|
|
|
73
95
|
// -----------------------------------------------------------------
|
|
74
96
|
// Router gate — decide which sources (if any) to consult.
|
|
75
97
|
// -----------------------------------------------------------------
|
|
76
|
-
const decision = await runRouterWithCooldown(config, ctx, query, cooldowns.router, logger);
|
|
98
|
+
const decision = await runRouterWithCooldown(config, ctx, query, cooldowns.router, logger, rpmMonitor);
|
|
77
99
|
// Project the abstract router decision onto the sources actually
|
|
78
100
|
// configured in this deployment. Without this projection, an
|
|
79
101
|
// exclusive route (e.g. LIGHTRAG_ONLY) on a single-source deployment
|
|
@@ -98,7 +120,7 @@ export function createBeforePromptBuildHandler(deps) {
|
|
|
98
120
|
if (shouldUsePgvector(effectiveRoute) &&
|
|
99
121
|
config.pgvectorEnabled &&
|
|
100
122
|
pool) {
|
|
101
|
-
tasks.push(runPgvectorSource(pool, query, config, cooldowns.pgvector_reranker, logger));
|
|
123
|
+
tasks.push(runPgvectorSource(pool, query, config, cooldowns.pgvector_reranker, logger, rpmMonitor));
|
|
102
124
|
}
|
|
103
125
|
if (shouldUseLightRAG(effectiveRoute) && config.lightragEnabled) {
|
|
104
126
|
tasks.push(runLightRAGSource(query, config));
|
|
@@ -195,7 +217,7 @@ export function projectRouteOnEnabledSources(route, pgvectorEnabled, lightragEna
|
|
|
195
217
|
* meant to suppress repeated log spam during a sustained outage, not to
|
|
196
218
|
* stop retrieval.
|
|
197
219
|
*/
|
|
198
|
-
async function runRouterWithCooldown(config, ctx, query, cooldown, logger) {
|
|
220
|
+
async function runRouterWithCooldown(config, ctx, query, cooldown, logger, rpmMonitor) {
|
|
199
221
|
// Reset stale cooldown FIRST so we don't keep the classifier circuit
|
|
200
222
|
// open longer than necessary (the first turn after expiry must be
|
|
201
223
|
// able to attempt the classifier again).
|
|
@@ -217,6 +239,16 @@ async function runRouterWithCooldown(config, ctx, query, cooldown, logger) {
|
|
|
217
239
|
jinaApiKey: config.jinaApiKey,
|
|
218
240
|
classifierId: config.routerClassifierId || undefined,
|
|
219
241
|
minConfidence: config.routerMinConfidence,
|
|
242
|
+
onClassifierUsage: (usage) => emitEvent(logger, {
|
|
243
|
+
type: "jina",
|
|
244
|
+
endpoint: "classify",
|
|
245
|
+
model: usage.model,
|
|
246
|
+
durationMs: usage.durationMs,
|
|
247
|
+
// 1 query item per call. Few-shot adds no labels in the
|
|
248
|
+
// body, so inputCount = 1 covers both paths.
|
|
249
|
+
inputCount: 1,
|
|
250
|
+
}),
|
|
251
|
+
rpmMonitor,
|
|
220
252
|
}, {
|
|
221
253
|
query,
|
|
222
254
|
trigger: ctx?.trigger,
|
|
@@ -431,7 +463,7 @@ export function extractQueryFromMessages(messages) {
|
|
|
431
463
|
}
|
|
432
464
|
return "";
|
|
433
465
|
}
|
|
434
|
-
async function runPgvectorSource(pool, query, config, rerankerCooldown, logger) {
|
|
466
|
+
async function runPgvectorSource(pool, query, config, rerankerCooldown, logger, rpmMonitor) {
|
|
435
467
|
const startedAt = Date.now();
|
|
436
468
|
const vector = await embedQuery(query, config.geminiApiKey);
|
|
437
469
|
// Use `Promise.allSettled` so a single failing collection (transient DB
|
|
@@ -491,6 +523,16 @@ async function runPgvectorSource(pool, query, config, rerankerCooldown, logger)
|
|
|
491
523
|
query,
|
|
492
524
|
model: config.pgvectorRerankerModel,
|
|
493
525
|
topN: config.pgvectorRerankerTopN,
|
|
526
|
+
candidatePoolMax: config.pgvectorRerankerCandidatePoolMax || undefined,
|
|
527
|
+
maxCharsPerDoc: config.pgvectorRerankerMaxCharsPerDoc || undefined,
|
|
528
|
+
rpmMonitor,
|
|
529
|
+
onUsage: (usage) => emitEvent(logger, {
|
|
530
|
+
type: "jina",
|
|
531
|
+
endpoint: "rerank",
|
|
532
|
+
model: config.pgvectorRerankerModel,
|
|
533
|
+
durationMs: usage.durationMs,
|
|
534
|
+
inputCount: usage.inputCount,
|
|
535
|
+
}),
|
|
494
536
|
});
|
|
495
537
|
rerankerCooldown.consecutiveErrors = 0;
|
|
496
538
|
return {
|
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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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RpmMonitor } from "./rate-limit.js";
|
|
1
2
|
import type { ClassificationOutcome, ClassifierEmbeddingModel } from "./types.js";
|
|
2
3
|
export interface ZeroShotClassifyParams {
|
|
3
4
|
apiKey: string;
|
|
@@ -6,6 +7,8 @@ export interface ZeroShotClassifyParams {
|
|
|
6
7
|
model?: ClassifierEmbeddingModel;
|
|
7
8
|
timeoutMs?: number;
|
|
8
9
|
signal?: AbortSignal;
|
|
10
|
+
/** Optional RPM monitor (forwarded to {@link postJson}). @since 3.2.4 */
|
|
11
|
+
rpmMonitor?: RpmMonitor;
|
|
9
12
|
}
|
|
10
13
|
/**
|
|
11
14
|
* Classify `text` against a list of semantic labels.
|
|
@@ -17,7 +20,7 @@ export interface ZeroShotClassifyParams {
|
|
|
17
20
|
*
|
|
18
21
|
* Throws on network / API errors so the caller's circuit breaker can react.
|
|
19
22
|
*/
|
|
20
|
-
export declare function classifyZeroShot({ apiKey, text, labels, model, timeoutMs, signal, }: ZeroShotClassifyParams): Promise<ClassificationOutcome | null>;
|
|
23
|
+
export declare function classifyZeroShot({ apiKey, text, labels, model, timeoutMs, signal, rpmMonitor, }: ZeroShotClassifyParams): Promise<ClassificationOutcome | null>;
|
|
21
24
|
export interface FewShotClassifyParams {
|
|
22
25
|
apiKey: string;
|
|
23
26
|
text: string;
|
|
@@ -30,12 +33,14 @@ export interface FewShotClassifyParams {
|
|
|
30
33
|
expectedLabels?: string[];
|
|
31
34
|
timeoutMs?: number;
|
|
32
35
|
signal?: AbortSignal;
|
|
36
|
+
/** Optional RPM monitor (forwarded to {@link postJson}). @since 3.2.4 */
|
|
37
|
+
rpmMonitor?: RpmMonitor;
|
|
33
38
|
}
|
|
34
39
|
/**
|
|
35
40
|
* Classify `text` using a pre-trained few-shot classifier identified by
|
|
36
41
|
* `classifierId`. Same `null`-vs-throw contract as `classifyZeroShot`.
|
|
37
42
|
*/
|
|
38
|
-
export declare function classifyFewShot({ apiKey, text, classifierId, expectedLabels, timeoutMs, signal, }: FewShotClassifyParams): Promise<ClassificationOutcome | null>;
|
|
43
|
+
export declare function classifyFewShot({ apiKey, text, classifierId, expectedLabels, timeoutMs, signal, rpmMonitor, }: FewShotClassifyParams): Promise<ClassificationOutcome | null>;
|
|
39
44
|
/**
|
|
40
45
|
* Extract the predicted label + optional score from a Classifier response.
|
|
41
46
|
*
|
package/dist/jina/classifier.js
CHANGED
|
@@ -34,7 +34,7 @@ const DEFAULT_CLASSIFIER_MODEL = "jina-embeddings-v3";
|
|
|
34
34
|
*
|
|
35
35
|
* Throws on network / API errors so the caller's circuit breaker can react.
|
|
36
36
|
*/
|
|
37
|
-
export async function classifyZeroShot({ apiKey, text, labels, model = DEFAULT_CLASSIFIER_MODEL, timeoutMs, signal, }) {
|
|
37
|
+
export async function classifyZeroShot({ apiKey, text, labels, model = DEFAULT_CLASSIFIER_MODEL, timeoutMs, signal, rpmMonitor, }) {
|
|
38
38
|
if (labels.length < 2) {
|
|
39
39
|
// Jina rejects requests with fewer than 2 labels; surface a clearer
|
|
40
40
|
// error than the upstream's generic 400.
|
|
@@ -51,6 +51,7 @@ export async function classifyZeroShot({ apiKey, text, labels, model = DEFAULT_C
|
|
|
51
51
|
apiKey,
|
|
52
52
|
timeoutMs,
|
|
53
53
|
signal,
|
|
54
|
+
rpmMonitor,
|
|
54
55
|
});
|
|
55
56
|
return parseClassificationResponse(raw, labels);
|
|
56
57
|
}
|
|
@@ -58,7 +59,7 @@ export async function classifyZeroShot({ apiKey, text, labels, model = DEFAULT_C
|
|
|
58
59
|
* Classify `text` using a pre-trained few-shot classifier identified by
|
|
59
60
|
* `classifierId`. Same `null`-vs-throw contract as `classifyZeroShot`.
|
|
60
61
|
*/
|
|
61
|
-
export async function classifyFewShot({ apiKey, text, classifierId, expectedLabels, timeoutMs, signal, }) {
|
|
62
|
+
export async function classifyFewShot({ apiKey, text, classifierId, expectedLabels, timeoutMs, signal, rpmMonitor, }) {
|
|
62
63
|
if (!classifierId) {
|
|
63
64
|
throw new Error("classifyFewShot: classifierId is required");
|
|
64
65
|
}
|
|
@@ -72,6 +73,7 @@ export async function classifyFewShot({ apiKey, text, classifierId, expectedLabe
|
|
|
72
73
|
apiKey,
|
|
73
74
|
timeoutMs,
|
|
74
75
|
signal,
|
|
76
|
+
rpmMonitor,
|
|
75
77
|
});
|
|
76
78
|
return parseClassificationResponse(raw, expectedLabels);
|
|
77
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/jina/classifier.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,EAAE;AACF,yCAAyC;AACzC,EAAE;AACF,6EAA6E;AAC7E,0EAA0E;AAC1E,mCAAmC;AACnC,EAAE;AACF,sEAAsE;AACtE,6EAA6E;AAC7E,2EAA2E;AAC3E,uEAAuE;AACvE,0EAA0E;AAC1E,oEAAoE;AACpE,sEAAsE;AACtE,EAAE;AACF,8BAA8B;AAC9B,yEAAyE;AACzE,8EAA8E;AAC9E,4EAA4E;AAC5E,0EAA0E;AAC1E,sBAAsB;AAEtB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/jina/classifier.ts"],"names":[],"mappings":"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"}
|
package/dist/jina/client.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RpmMonitor } from "./rate-limit.js";
|
|
1
2
|
/** Options accepted by every Jina request helper. */
|
|
2
3
|
export interface JinaRequestOptions {
|
|
3
4
|
/** Bearer token sent in `Authorization`. Required. */
|
|
@@ -9,6 +10,15 @@ export interface JinaRequestOptions {
|
|
|
9
10
|
* signal so either source can cancel the request.
|
|
10
11
|
*/
|
|
11
12
|
signal?: AbortSignal;
|
|
13
|
+
/**
|
|
14
|
+
* Optional RPM monitor. When supplied, `record()` is called BEFORE the
|
|
15
|
+
* outbound fetch so the count reflects the actual request even if the
|
|
16
|
+
* call later fails. Soft monitor — never blocks the call (see
|
|
17
|
+
* `src/jina/rate-limit.ts` for the design rationale).
|
|
18
|
+
*
|
|
19
|
+
* @since 3.2.4
|
|
20
|
+
*/
|
|
21
|
+
rpmMonitor?: RpmMonitor;
|
|
12
22
|
}
|
|
13
23
|
interface PostJsonParams<Req> extends JinaRequestOptions {
|
|
14
24
|
url: string;
|
|
@@ -26,5 +36,5 @@ interface PostJsonParams<Req> extends JinaRequestOptions {
|
|
|
26
36
|
* bodies from upstream CDNs/LBs)
|
|
27
37
|
* @throws {JinaNetworkError} on fetch failure, abort, or timeout
|
|
28
38
|
*/
|
|
29
|
-
export declare function postJson<Req>({ url, body, apiKey, timeoutMs, signal: callerSignal, }: PostJsonParams<Req>): Promise<unknown>;
|
|
39
|
+
export declare function postJson<Req>({ url, body, apiKey, timeoutMs, signal: callerSignal, rpmMonitor, }: PostJsonParams<Req>): Promise<unknown>;
|
|
30
40
|
export {};
|
package/dist/jina/client.js
CHANGED
|
@@ -45,7 +45,11 @@ const DEFAULT_TIMEOUT_MS = 8_000;
|
|
|
45
45
|
* bodies from upstream CDNs/LBs)
|
|
46
46
|
* @throws {JinaNetworkError} on fetch failure, abort, or timeout
|
|
47
47
|
*/
|
|
48
|
-
export async function postJson({ url, body, apiKey, timeoutMs = DEFAULT_TIMEOUT_MS, signal: callerSignal, }) {
|
|
48
|
+
export async function postJson({ url, body, apiKey, timeoutMs = DEFAULT_TIMEOUT_MS, signal: callerSignal, rpmMonitor, }) {
|
|
49
|
+
// Record BEFORE fetch so the count tracks the real outbound request,
|
|
50
|
+
// even if it later fails or times out. The monitor is purely
|
|
51
|
+
// observational; it never blocks the call.
|
|
52
|
+
rpmMonitor?.record();
|
|
49
53
|
const controller = new AbortController();
|
|
50
54
|
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
51
55
|
// If the caller supplied a signal, abort the local controller when it
|
package/dist/jina/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/jina/client.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,0DAA0D;AAC1D,EAAE;AACF,kBAAkB;AAClB,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,qEAAqE;AACrE,yDAAyD;AACzD,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,uEAAuE;AACvE,oEAAoE;AACpE,oEAAoE;AACpE,mEAAmE;AACnE,uEAAuE;AACvE,0EAA0E;AAC1E,wDAAwD;AACxD,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,sEAAsE;AACtE,4EAA4E;AAC5E,yDAAyD;AACzD,EAAE;AACF,uEAAuE;AACvE,6EAA6E;AAC7E,6EAA6E;AAC7E,kDAAkD;AAElD,OAAO,EACL,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,WAAW,GACZ,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/jina/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default RPM budget per plugin instance. Calibrated below the Jina
|
|
3
|
+
* free-tier ceiling (100 RPM) to leave headroom for a shared key
|
|
4
|
+
* (Hindsight + knowledge plugin). Override via
|
|
5
|
+
* `jina.rpmBudget` in plugin config.
|
|
6
|
+
*/
|
|
7
|
+
export declare const DEFAULT_RPM_BUDGET = 60;
|
|
8
|
+
export interface RpmMonitorOptions {
|
|
9
|
+
/** Requests-per-minute soft budget. Default {@link DEFAULT_RPM_BUDGET}. */
|
|
10
|
+
budget?: number;
|
|
11
|
+
/**
|
|
12
|
+
* Called once per 60-second window in which the budget was overshot.
|
|
13
|
+
* Receives the observed peak count and the configured budget.
|
|
14
|
+
* Optional — when omitted, the overshoot is silent.
|
|
15
|
+
*/
|
|
16
|
+
onExceeded?: (info: {
|
|
17
|
+
count: number;
|
|
18
|
+
budget: number;
|
|
19
|
+
}) => void;
|
|
20
|
+
/** Override `Date.now()` for deterministic tests. */
|
|
21
|
+
now?: () => number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Lightweight sliding-window RPM monitor. Always `record()` BEFORE the
|
|
25
|
+
* Jina call so the count reflects the actual outbound request, even
|
|
26
|
+
* if the call later fails.
|
|
27
|
+
*/
|
|
28
|
+
export declare class RpmMonitor {
|
|
29
|
+
private readonly budget;
|
|
30
|
+
private readonly onExceeded?;
|
|
31
|
+
private readonly now;
|
|
32
|
+
private readonly timestamps;
|
|
33
|
+
/**
|
|
34
|
+
* When the last exceeded callback fired (epoch ms). Prevents log spam.
|
|
35
|
+
*
|
|
36
|
+
* Initialized to `-Infinity` so the FIRST overshoot always satisfies
|
|
37
|
+
* `t - lastExceededNotice >= 60_000` regardless of the clock origin.
|
|
38
|
+
* Without this, a deterministic test clock starting at `0` (the
|
|
39
|
+
* documented use case for `RpmMonitorOptions.now`) would silently
|
|
40
|
+
* suppress the first alert during the first minute of simulated
|
|
41
|
+
* time — surprising and contract-breaking for tests.
|
|
42
|
+
*/
|
|
43
|
+
private lastExceededNotice;
|
|
44
|
+
constructor(options?: RpmMonitorOptions);
|
|
45
|
+
/**
|
|
46
|
+
* Record one outbound Jina request. Returns the current count in the
|
|
47
|
+
* sliding 60-second window (post-record).
|
|
48
|
+
*
|
|
49
|
+
* When `budget <= 0` the monitor is considered DISABLED: this method
|
|
50
|
+
* is a no-op (no timestamp tracked, no overshoot callback fired) and
|
|
51
|
+
* returns `0`. This matches the contract documented on
|
|
52
|
+
* `JinaPluginConfig.rpmBudget`. Without this short-circuit, `budget=0`
|
|
53
|
+
* would treat every call as an overshoot (`count > 0` is true on the
|
|
54
|
+
* first record), defeating the "disable" semantics.
|
|
55
|
+
*/
|
|
56
|
+
record(): number;
|
|
57
|
+
/**
|
|
58
|
+
* Current count in the sliding 60-second window (no recording).
|
|
59
|
+
* Returns `0` when the monitor is disabled (`budget <= 0`).
|
|
60
|
+
*/
|
|
61
|
+
peek(): number;
|
|
62
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// RPM (requests-per-minute) soft monitor for Jina API calls.
|
|
2
|
+
//
|
|
3
|
+
// Why "soft" rather than a hard gate:
|
|
4
|
+
// - Hard gates introduce latency or dropped retrievals. Both are
|
|
5
|
+
// worse UX than letting the call through and absorbing a 429.
|
|
6
|
+
// - Jina's 429 response is already handled by the cooldown breaker
|
|
7
|
+
// (see `cooldown` in `src/index.ts`). When 3 consecutive 429s
|
|
8
|
+
// occur, the corresponding scope (router or pgvector_reranker)
|
|
9
|
+
// enters a 5-minute cooldown and the plugin falls open to legacy
|
|
10
|
+
// retrieval.
|
|
11
|
+
//
|
|
12
|
+
// What this monitor adds:
|
|
13
|
+
// - **Visibility.** Emits a `jina_rpm_exceeded` structured event when
|
|
14
|
+
// the configured per-minute budget is overshot, so dashboards can
|
|
15
|
+
// alert before the operator sees billing surprises (especially when
|
|
16
|
+
// the API key is shared with another service like Hindsight).
|
|
17
|
+
// - **No behavior change.** The monitor never blocks a call; it only
|
|
18
|
+
// observes and reports.
|
|
19
|
+
//
|
|
20
|
+
// Sliding window of 60 seconds, single-instance state.
|
|
21
|
+
/**
|
|
22
|
+
* Default RPM budget per plugin instance. Calibrated below the Jina
|
|
23
|
+
* free-tier ceiling (100 RPM) to leave headroom for a shared key
|
|
24
|
+
* (Hindsight + knowledge plugin). Override via
|
|
25
|
+
* `jina.rpmBudget` in plugin config.
|
|
26
|
+
*/
|
|
27
|
+
export const DEFAULT_RPM_BUDGET = 60;
|
|
28
|
+
/**
|
|
29
|
+
* Lightweight sliding-window RPM monitor. Always `record()` BEFORE the
|
|
30
|
+
* Jina call so the count reflects the actual outbound request, even
|
|
31
|
+
* if the call later fails.
|
|
32
|
+
*/
|
|
33
|
+
export class RpmMonitor {
|
|
34
|
+
budget;
|
|
35
|
+
onExceeded;
|
|
36
|
+
now;
|
|
37
|
+
timestamps = [];
|
|
38
|
+
/**
|
|
39
|
+
* When the last exceeded callback fired (epoch ms). Prevents log spam.
|
|
40
|
+
*
|
|
41
|
+
* Initialized to `-Infinity` so the FIRST overshoot always satisfies
|
|
42
|
+
* `t - lastExceededNotice >= 60_000` regardless of the clock origin.
|
|
43
|
+
* Without this, a deterministic test clock starting at `0` (the
|
|
44
|
+
* documented use case for `RpmMonitorOptions.now`) would silently
|
|
45
|
+
* suppress the first alert during the first minute of simulated
|
|
46
|
+
* time — surprising and contract-breaking for tests.
|
|
47
|
+
*/
|
|
48
|
+
lastExceededNotice = Number.NEGATIVE_INFINITY;
|
|
49
|
+
constructor(options = {}) {
|
|
50
|
+
this.budget = options.budget ?? DEFAULT_RPM_BUDGET;
|
|
51
|
+
this.onExceeded = options.onExceeded;
|
|
52
|
+
this.now = options.now ?? Date.now;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Record one outbound Jina request. Returns the current count in the
|
|
56
|
+
* sliding 60-second window (post-record).
|
|
57
|
+
*
|
|
58
|
+
* When `budget <= 0` the monitor is considered DISABLED: this method
|
|
59
|
+
* is a no-op (no timestamp tracked, no overshoot callback fired) and
|
|
60
|
+
* returns `0`. This matches the contract documented on
|
|
61
|
+
* `JinaPluginConfig.rpmBudget`. Without this short-circuit, `budget=0`
|
|
62
|
+
* would treat every call as an overshoot (`count > 0` is true on the
|
|
63
|
+
* first record), defeating the "disable" semantics.
|
|
64
|
+
*/
|
|
65
|
+
record() {
|
|
66
|
+
if (this.budget <= 0)
|
|
67
|
+
return 0;
|
|
68
|
+
const t = this.now();
|
|
69
|
+
const cutoff = t - 60_000;
|
|
70
|
+
// Drop expired timestamps from the front of the queue. The array is
|
|
71
|
+
// chronologically ordered by construction (we always append), so a
|
|
72
|
+
// simple shift loop terminates in O(expired count).
|
|
73
|
+
while (this.timestamps.length > 0 && this.timestamps[0] < cutoff) {
|
|
74
|
+
this.timestamps.shift();
|
|
75
|
+
}
|
|
76
|
+
this.timestamps.push(t);
|
|
77
|
+
const count = this.timestamps.length;
|
|
78
|
+
// Fire the overshoot callback at most ONCE per 60-second window to
|
|
79
|
+
// avoid log spam during a sustained burst.
|
|
80
|
+
if (count > this.budget && this.onExceeded && t - this.lastExceededNotice >= 60_000) {
|
|
81
|
+
this.lastExceededNotice = t;
|
|
82
|
+
this.onExceeded({ count, budget: this.budget });
|
|
83
|
+
}
|
|
84
|
+
return count;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Current count in the sliding 60-second window (no recording).
|
|
88
|
+
* Returns `0` when the monitor is disabled (`budget <= 0`).
|
|
89
|
+
*/
|
|
90
|
+
peek() {
|
|
91
|
+
if (this.budget <= 0)
|
|
92
|
+
return 0;
|
|
93
|
+
const cutoff = this.now() - 60_000;
|
|
94
|
+
while (this.timestamps.length > 0 && this.timestamps[0] < cutoff) {
|
|
95
|
+
this.timestamps.shift();
|
|
96
|
+
}
|
|
97
|
+
return this.timestamps.length;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=rate-limit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/jina/rate-limit.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,EAAE;AACF,sCAAsC;AACtC,mEAAmE;AACnE,kEAAkE;AAClE,qEAAqE;AACrE,kEAAkE;AAClE,mEAAmE;AACnE,qEAAqE;AACrE,iBAAiB;AACjB,EAAE;AACF,0BAA0B;AAC1B,wEAAwE;AACxE,sEAAsE;AACtE,wEAAwE;AACxE,kEAAkE;AAClE,uEAAuE;AACvE,4BAA4B;AAC5B,EAAE;AACF,uDAAuD;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAerC;;;;GAIG;AACH,MAAM,OAAO,UAAU;IACJ,MAAM,CAAS;IACf,UAAU,CAAqD;IAC/D,GAAG,CAAe;IAClB,UAAU,GAAa,EAAE,CAAC;IAC3C;;;;;;;;;OASG;IACK,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAEtD,YAAY,UAA6B,EAAE;QACzC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,kBAAkB,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACrC,CAAC;IAED;;;;;;;;;;OAUG;IACH,MAAM;QACJ,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC;QAC1B,oEAAoE;QACpE,mEAAmE;QACnE,oDAAoD;QACpD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,GAAG,MAAM,EAAE,CAAC;YAClE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAErC,mEAAmE;QACnE,2CAA2C;QAC3C,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,IAAI,MAAM,EAAE,CAAC;YACpF,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;QACnC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,GAAG,MAAM,EAAE,CAAC;YAClE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;CACF"}
|
package/dist/jina/reranker.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RpmMonitor } from "./rate-limit.js";
|
|
1
2
|
import type { RerankedItem, RerankerModel } from "./types.js";
|
|
2
3
|
export interface RerankParams {
|
|
3
4
|
apiKey: string;
|
|
@@ -13,6 +14,8 @@ export interface RerankParams {
|
|
|
13
14
|
topN?: number;
|
|
14
15
|
timeoutMs?: number;
|
|
15
16
|
signal?: AbortSignal;
|
|
17
|
+
/** Optional RPM monitor (forwarded to {@link postJson}). @since 3.2.4 */
|
|
18
|
+
rpmMonitor?: RpmMonitor;
|
|
16
19
|
}
|
|
17
20
|
/**
|
|
18
21
|
* Rerank `documents` against `query` and return the new ordering.
|
|
@@ -25,7 +28,7 @@ export interface RerankParams {
|
|
|
25
28
|
* shape is unrecognized (fail-open semantics).
|
|
26
29
|
* @throws on network / auth / API errors so the cooldown breaker can react.
|
|
27
30
|
*/
|
|
28
|
-
export declare function rerank({ apiKey, query, documents, model, topN, timeoutMs, signal, }: RerankParams): Promise<RerankedItem[]>;
|
|
31
|
+
export declare function rerank({ apiKey, query, documents, model, topN, timeoutMs, signal, rpmMonitor, }: RerankParams): Promise<RerankedItem[]>;
|
|
29
32
|
/**
|
|
30
33
|
* Defensive parser for the /v1/rerank response.
|
|
31
34
|
*
|
package/dist/jina/reranker.js
CHANGED
|
@@ -38,7 +38,7 @@ const DEFAULT_RERANKER_MODEL = "jina-reranker-v2-base-multilingual";
|
|
|
38
38
|
* shape is unrecognized (fail-open semantics).
|
|
39
39
|
* @throws on network / auth / API errors so the cooldown breaker can react.
|
|
40
40
|
*/
|
|
41
|
-
export async function rerank({ apiKey, query, documents, model = DEFAULT_RERANKER_MODEL, topN, timeoutMs, signal, }) {
|
|
41
|
+
export async function rerank({ apiKey, query, documents, model = DEFAULT_RERANKER_MODEL, topN, timeoutMs, signal, rpmMonitor, }) {
|
|
42
42
|
if (documents.length === 0)
|
|
43
43
|
return [];
|
|
44
44
|
const body = {
|
|
@@ -57,6 +57,7 @@ export async function rerank({ apiKey, query, documents, model = DEFAULT_RERANKE
|
|
|
57
57
|
apiKey,
|
|
58
58
|
timeoutMs,
|
|
59
59
|
signal,
|
|
60
|
+
rpmMonitor,
|
|
60
61
|
});
|
|
61
62
|
return parseRerankResponse(raw, documents.length);
|
|
62
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reranker.js","sourceRoot":"","sources":["../../src/jina/reranker.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,oDAAoD;AACpD,EAAE;AACF,0BAA0B;AAC1B,EAAE;AACF,8EAA8E;AAC9E,sEAAsE;AACtE,yEAAyE;AACzE,2CAA2C;AAC3C,EAAE;AACF,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAC9E,EAAE;AACF,sEAAsE;AACtE,uEAAuE;AACvE,uEAAuE;AACvE,uEAAuE;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"reranker.js","sourceRoot":"","sources":["../../src/jina/reranker.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,oDAAoD;AACpD,EAAE;AACF,0BAA0B;AAC1B,EAAE;AACF,8EAA8E;AAC9E,sEAAsE;AACtE,yEAAyE;AACzE,2CAA2C;AAC3C,EAAE;AACF,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAC9E,EAAE;AACF,sEAAsE;AACtE,uEAAuE;AACvE,uEAAuE;AACvE,uEAAuE;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC,MAAM,UAAU,GAAG,+BAA+B,CAAC;AAEnD;;;;GAIG;AACH,MAAM,sBAAsB,GAAkB,oCAAoC,CAAC;AAoBnF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,EAC3B,MAAM,EACN,KAAK,EACL,SAAS,EACT,KAAK,GAAG,sBAAsB,EAC9B,IAAI,EACJ,SAAS,EACT,MAAM,EACN,UAAU,GACG;IACb,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,IAAI,GAAsB;QAC9B,KAAK;QACL,KAAK;QACL,SAAS;QACT,gBAAgB,EAAE,KAAK;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAoB;QAC5C,GAAG,EAAE,UAAU;QACf,IAAI;QACJ,MAAM;QACN,SAAS;QACT,MAAM;QACN,UAAU;KACX,CAAC,CAAC;IAEH,OAAO,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAAY,EACZ,UAAkB;IAElB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAE9B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC;QACjD,IACE,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;YACxB,KAAK,GAAG,CAAC;YACT,KAAK,IAAI,UAAU;YACnB,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EACvB,CAAC;YACD,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
package/dist/pgvector.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RpmMonitor } from "./jina/rate-limit.js";
|
|
1
2
|
import type { RerankerModel } from "./jina/types.js";
|
|
2
3
|
import type { PgPoolLike, PgvectorResult } from "./types.js";
|
|
3
4
|
/**
|
|
@@ -26,6 +27,48 @@ export interface RerankPgvectorParams {
|
|
|
26
27
|
model?: RerankerModel;
|
|
27
28
|
/** Cap on the number of results returned post-rerank. */
|
|
28
29
|
topN?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Maximum number of candidates submitted to Jina. The cosine-ranked
|
|
32
|
+
* top `candidatePoolMax` results are sent; anything beyond is dropped
|
|
33
|
+
* client-side BEFORE the API call. Trims Jina token spend on noisy
|
|
34
|
+
* recall (typical pgvector returns 20-50 hits where only 10-15 are
|
|
35
|
+
* worth reranking).
|
|
36
|
+
*
|
|
37
|
+
* Default in the resolver: 20. `undefined` → no cap (legacy v3.2.3
|
|
38
|
+
* behavior).
|
|
39
|
+
*
|
|
40
|
+
* @since 3.2.4
|
|
41
|
+
*/
|
|
42
|
+
candidatePoolMax?: number;
|
|
43
|
+
/**
|
|
44
|
+
* Pre-truncation length per candidate document, in CHARACTERS (the
|
|
45
|
+
* Jina API charges per token; characters are a coarse proxy ≈ 4× tokens
|
|
46
|
+
* for typical text). Each `documents[i]` is `slice(0, maxCharsPerDoc)`
|
|
47
|
+
* before submission. Long chunks (recipes, transcripts, prose) carry
|
|
48
|
+
* most of their relevance in the first few hundred chars — the tail
|
|
49
|
+
* costs tokens without adding signal.
|
|
50
|
+
*
|
|
51
|
+
* Default in the resolver: 2000 (≈ 500 tokens). `undefined` → no
|
|
52
|
+
* truncation (legacy v3.2.3 behavior).
|
|
53
|
+
*
|
|
54
|
+
* @since 3.2.4
|
|
55
|
+
*/
|
|
56
|
+
maxCharsPerDoc?: number;
|
|
57
|
+
/**
|
|
58
|
+
* Optional callback fired AFTER a successful Jina call with the
|
|
59
|
+
* payload-level numbers the plugin's `jina` event emitter needs
|
|
60
|
+
* (inputCount, total characters sent, duration). Kept as a callback
|
|
61
|
+
* to avoid coupling pgvector.ts to the tracing module.
|
|
62
|
+
*
|
|
63
|
+
* @since 3.2.4
|
|
64
|
+
*/
|
|
65
|
+
onUsage?: (usage: {
|
|
66
|
+
inputCount: number;
|
|
67
|
+
totalChars: number;
|
|
68
|
+
durationMs: number;
|
|
69
|
+
}) => void;
|
|
70
|
+
/** Optional RPM monitor (forwarded to the Jina client). @since 3.2.4 */
|
|
71
|
+
rpmMonitor?: RpmMonitor;
|
|
29
72
|
timeoutMs?: number;
|
|
30
73
|
signal?: AbortSignal;
|
|
31
74
|
}
|
package/dist/pgvector.js
CHANGED
|
@@ -107,21 +107,44 @@ export async function rerankPgvectorResults(results, params) {
|
|
|
107
107
|
// The reranker only sees the textual content. Empty/null texts cannot be
|
|
108
108
|
// ranked, so we filter them out BEFORE the API call to avoid wasting
|
|
109
109
|
// tokens on rows the cross-encoder can't score anyway.
|
|
110
|
-
|
|
110
|
+
let indexed = results
|
|
111
111
|
.map((r, i) => ({ row: r, originalIndex: i, text: r.text ?? "" }))
|
|
112
112
|
.filter((x) => x.text.trim().length > 0);
|
|
113
113
|
if (indexed.length === 0)
|
|
114
114
|
return results.slice(0, params.topN ?? results.length);
|
|
115
|
+
// 3.2.4 — payload-size guards. Both are no-ops when undefined so the
|
|
116
|
+
// legacy behavior is preserved for callers that haven't migrated.
|
|
117
|
+
if (typeof params.candidatePoolMax === "number" &&
|
|
118
|
+
params.candidatePoolMax > 0 &&
|
|
119
|
+
indexed.length > params.candidatePoolMax) {
|
|
120
|
+
// `results` is already cosine-sorted by the caller (runPgvectorSource).
|
|
121
|
+
// `indexed` preserves that order via the `originalIndex` mapping, so
|
|
122
|
+
// slicing to the first N keeps the best candidates and drops the tail.
|
|
123
|
+
indexed = indexed.slice(0, params.candidatePoolMax);
|
|
124
|
+
}
|
|
125
|
+
const documents = typeof params.maxCharsPerDoc === "number" && params.maxCharsPerDoc > 0
|
|
126
|
+
? indexed.map((x) => x.text.slice(0, params.maxCharsPerDoc))
|
|
127
|
+
: indexed.map((x) => x.text);
|
|
128
|
+
const startedAt = Date.now();
|
|
115
129
|
try {
|
|
116
130
|
const reranked = await rerank({
|
|
117
131
|
apiKey: params.apiKey,
|
|
118
132
|
query: params.query,
|
|
119
|
-
documents
|
|
133
|
+
documents,
|
|
120
134
|
model: params.model,
|
|
121
135
|
topN: params.topN,
|
|
122
136
|
timeoutMs: params.timeoutMs,
|
|
123
137
|
signal: params.signal,
|
|
138
|
+
rpmMonitor: params.rpmMonitor,
|
|
124
139
|
});
|
|
140
|
+
if (params.onUsage) {
|
|
141
|
+
const totalChars = documents.reduce((sum, d) => sum + d.length, 0);
|
|
142
|
+
params.onUsage({
|
|
143
|
+
inputCount: documents.length,
|
|
144
|
+
totalChars,
|
|
145
|
+
durationMs: Date.now() - startedAt,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
125
148
|
if (reranked.length === 0) {
|
|
126
149
|
// Defensive: reranker returned no usable items. Surface the original
|
|
127
150
|
// cosine order rather than wiping the candidate list.
|
package/dist/pgvector.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pgvector.js","sourceRoot":"","sources":["../src/pgvector.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,EAAE;AACF,iEAAiE;AACjE,2EAA2E;AAC3E,6EAA6E;AAC7E,0EAA0E;AAC1E,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,wEAAwE;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"pgvector.js","sourceRoot":"","sources":["../src/pgvector.ts"],"names":[],"mappings":"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"}
|
package/dist/router/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RpmMonitor } from "../jina/rate-limit.js";
|
|
1
2
|
import type { RouterDecision } from "./types.js";
|
|
2
3
|
export interface RouterConfig {
|
|
3
4
|
/** Master switch. When false, every call returns `{route: "ALL"}`. */
|
|
@@ -32,6 +33,20 @@ export interface RouterConfig {
|
|
|
32
33
|
* Trusting only confident scores keeps the gate fail-safe.
|
|
33
34
|
*/
|
|
34
35
|
minConfidence?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Optional callback fired AFTER a successful Jina `/v1/classify` call
|
|
38
|
+
* with payload-level numbers (duration, model). The plugin uses it to
|
|
39
|
+
* emit a `jina` usage event so dashboards can track classify spend
|
|
40
|
+
* per turn independently of the router decision.
|
|
41
|
+
*
|
|
42
|
+
* @since 3.2.4
|
|
43
|
+
*/
|
|
44
|
+
onClassifierUsage?: (usage: {
|
|
45
|
+
durationMs: number;
|
|
46
|
+
model: "zero-shot" | "few-shot";
|
|
47
|
+
}) => void;
|
|
48
|
+
/** Optional RPM monitor (forwarded to the Jina client). @since 3.2.4 */
|
|
49
|
+
rpmMonitor?: RpmMonitor;
|
|
35
50
|
}
|
|
36
51
|
/**
|
|
37
52
|
* Default applied by {@link decideRoute} when a caller omits
|
package/dist/router/index.js
CHANGED
|
@@ -66,6 +66,7 @@ export async function decideRoute(cfg, ctx) {
|
|
|
66
66
|
return { route: FALLBACK, reason: "classifier_fallback", score: null };
|
|
67
67
|
}
|
|
68
68
|
try {
|
|
69
|
+
const startedAt = Date.now();
|
|
69
70
|
const outcome = cfg.classifierId
|
|
70
71
|
? await classifyFewShot({
|
|
71
72
|
apiKey: cfg.jinaApiKey,
|
|
@@ -73,13 +74,21 @@ export async function decideRoute(cfg, ctx) {
|
|
|
73
74
|
classifierId: cfg.classifierId,
|
|
74
75
|
expectedLabels: ROUTER_LABEL_NAMES,
|
|
75
76
|
signal: ctx.signal,
|
|
77
|
+
rpmMonitor: cfg.rpmMonitor,
|
|
76
78
|
})
|
|
77
79
|
: await classifyZeroShot({
|
|
78
80
|
apiKey: cfg.jinaApiKey,
|
|
79
81
|
text: ctx.query,
|
|
80
82
|
labels: (cfg.labels ?? DEFAULT_ROUTER_LABELS),
|
|
81
83
|
signal: ctx.signal,
|
|
84
|
+
rpmMonitor: cfg.rpmMonitor,
|
|
82
85
|
});
|
|
86
|
+
if (cfg.onClassifierUsage) {
|
|
87
|
+
cfg.onClassifierUsage({
|
|
88
|
+
durationMs: Date.now() - startedAt,
|
|
89
|
+
model: cfg.classifierId ? "few-shot" : "zero-shot",
|
|
90
|
+
});
|
|
91
|
+
}
|
|
83
92
|
if (!outcome) {
|
|
84
93
|
return { route: FALLBACK, reason: "classifier_fallback", score: null };
|
|
85
94
|
}
|
package/dist/router/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,2EAA2E;AAC3E,kEAAkE;AAClE,EAAE;AACF,+BAA+B;AAC/B,sEAAsE;AACtE,kDAAkD;AAClD,sEAAsE;AACtE,oEAAoE;AACpE,sEAAsE;AACtE,iDAAiD;AAEjD,OAAO,EACL,eAAe,EACf,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tracing/events.d.ts
CHANGED
|
@@ -78,7 +78,19 @@ export interface CooldownEvent {
|
|
|
78
78
|
scope: "global" | "router" | "pgvector_reranker";
|
|
79
79
|
consecutiveErrors: number;
|
|
80
80
|
}
|
|
81
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Emitted (at most once per 60-second window) when the plugin's
|
|
83
|
+
* Jina RPM soft monitor observes the configured budget being exceeded.
|
|
84
|
+
* Pure observability — does not block any call.
|
|
85
|
+
*
|
|
86
|
+
* @since 3.2.4
|
|
87
|
+
*/
|
|
88
|
+
export interface JinaRpmExceededEvent {
|
|
89
|
+
type: "jina_rpm_exceeded";
|
|
90
|
+
count: number;
|
|
91
|
+
budget: number;
|
|
92
|
+
}
|
|
93
|
+
export type KnowledgeEvent = RouterEvent | PgvectorEvent | LightRAGEvent | JinaUsageEvent | CooldownEvent | JinaRpmExceededEvent;
|
|
82
94
|
/**
|
|
83
95
|
* Emit a structured event line through `logger.info`.
|
|
84
96
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/tracing/events.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,yDAAyD;AACzD,EAAE;AACF,wEAAwE;AACxE,+DAA+D;AAC/D,wEAAwE;AACxE,+BAA+B;AAC/B,EAAE;AACF,sEAAsE;AACtE,qEAAqE;AACrE,gEAAgE;AAChE,wEAAwE;AACxE,iCAAiC;AACjC,EAAE;AACF,oEAAoE;AACpE,uEAAuE;AACvE,qEAAqE;AACrE,sEAAsE;AACtE,uEAAuE;AACvE,8DAA8D;AAC9D,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,mBAAmB;AAcnB;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAsDhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/tracing/events.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,yDAAyD;AACzD,EAAE;AACF,wEAAwE;AACxE,+DAA+D;AAC/D,wEAAwE;AACxE,+BAA+B;AAC/B,EAAE;AACF,sEAAsE;AACtE,qEAAqE;AACrE,gEAAgE;AAChE,wEAAwE;AACxE,iCAAiC;AACjC,EAAE;AACF,oEAAoE;AACpE,uEAAuE;AACvE,qEAAqE;AACrE,sEAAsE;AACtE,uEAAuE;AACvE,8DAA8D;AAC9D,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,mBAAmB;AAcnB;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAsDhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAqCnD,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,MAAqB,EAAE,KAAqB;IACpE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,IAAI,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAqB,EACrB,KAAyB,EACzB,WAAmB;IAEnB,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO;IAC1B,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,wBAAwB,EAAE,SAAS,WAAW,EAAE,CAAC,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -45,6 +45,19 @@ export interface JinaPluginConfig {
|
|
|
45
45
|
apiKey?: string;
|
|
46
46
|
router?: RouterPluginConfig;
|
|
47
47
|
pgvectorReranker?: PgvectorRerankerPluginConfig;
|
|
48
|
+
/**
|
|
49
|
+
* Soft RPM budget for ALL outbound Jina calls (router + reranker
|
|
50
|
+
* combined). When the sliding 60-second window exceeds this number,
|
|
51
|
+
* a `jina_rpm_exceeded` event is emitted (at most once per window)
|
|
52
|
+
* and a warning is logged. **The call is NEVER blocked** — the
|
|
53
|
+
* existing 429 cooldown breaker is the hard backstop.
|
|
54
|
+
*
|
|
55
|
+
* Default: 60. Set well below the Jina free-tier ceiling (100 RPM)
|
|
56
|
+
* to leave headroom for a shared key (e.g. plugin + Hindsight).
|
|
57
|
+
*
|
|
58
|
+
* @since 3.2.4
|
|
59
|
+
*/
|
|
60
|
+
rpmBudget?: number;
|
|
48
61
|
}
|
|
49
62
|
export interface RouterPluginConfig {
|
|
50
63
|
enabled?: boolean;
|
|
@@ -69,6 +82,25 @@ export interface PgvectorRerankerPluginConfig {
|
|
|
69
82
|
model?: RerankerModel;
|
|
70
83
|
/** Cap on results returned post-rerank. Default: `5`. */
|
|
71
84
|
topN?: number;
|
|
85
|
+
/**
|
|
86
|
+
* Maximum number of candidate documents submitted to Jina per call.
|
|
87
|
+
* Pgvector recall is typically broad (20-50 hits) but only the top
|
|
88
|
+
* 10-15 are worth reranking. Trimming the tail saves Jina tokens
|
|
89
|
+
* linearly. Default: `20`. Set to `0` to disable the cap.
|
|
90
|
+
*
|
|
91
|
+
* @since 3.2.4
|
|
92
|
+
*/
|
|
93
|
+
candidatePoolMax?: number;
|
|
94
|
+
/**
|
|
95
|
+
* Per-candidate text length cap (characters) before submission to
|
|
96
|
+
* Jina. The first ~2000 chars carry most of the relevance signal;
|
|
97
|
+
* longer chunks (transcripts, books) waste tokens on context the
|
|
98
|
+
* cross-encoder gets little additional signal from. Default: `2000`.
|
|
99
|
+
* Set to `0` to disable the truncation.
|
|
100
|
+
*
|
|
101
|
+
* @since 3.2.4
|
|
102
|
+
*/
|
|
103
|
+
maxCharsPerDoc?: number;
|
|
72
104
|
}
|
|
73
105
|
export type LightRAGQueryMode = "naive" | "local" | "global" | "hybrid";
|
|
74
106
|
/**
|
|
@@ -90,6 +122,13 @@ export interface ResolvedKnowledgeConfig {
|
|
|
90
122
|
lightragMaxChars: number;
|
|
91
123
|
lightragEnabled: boolean;
|
|
92
124
|
jinaApiKey: string;
|
|
125
|
+
/**
|
|
126
|
+
* Soft RPM budget for ALL outbound Jina calls. Default: 60.
|
|
127
|
+
* `0` disables the monitor entirely.
|
|
128
|
+
*
|
|
129
|
+
* @since 3.2.4
|
|
130
|
+
*/
|
|
131
|
+
jinaRpmBudget: number;
|
|
93
132
|
routerEnabled: boolean;
|
|
94
133
|
routerMode: "heuristic" | "jina-classifier";
|
|
95
134
|
routerClassifierId: string;
|
|
@@ -102,6 +141,20 @@ export interface ResolvedKnowledgeConfig {
|
|
|
102
141
|
pgvectorRerankerEnabled: boolean;
|
|
103
142
|
pgvectorRerankerModel: RerankerModel;
|
|
104
143
|
pgvectorRerankerTopN: number;
|
|
144
|
+
/**
|
|
145
|
+
* Cap on the number of candidates submitted to Jina /v1/rerank. `0`
|
|
146
|
+
* disables the cap (legacy v3.2.3 behavior). Default: `20`.
|
|
147
|
+
*
|
|
148
|
+
* @since 3.2.4
|
|
149
|
+
*/
|
|
150
|
+
pgvectorRerankerCandidatePoolMax: number;
|
|
151
|
+
/**
|
|
152
|
+
* Per-candidate text truncation length in characters. `0` disables
|
|
153
|
+
* truncation. Default: `2000`.
|
|
154
|
+
*
|
|
155
|
+
* @since 3.2.4
|
|
156
|
+
*/
|
|
157
|
+
pgvectorRerankerMaxCharsPerDoc: number;
|
|
105
158
|
}
|
|
106
159
|
/**
|
|
107
160
|
* One search hit from the PostgreSQL `knowledge_vectors` table, after score
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "openclaw-knowledge",
|
|
3
3
|
"name": "Knowledge Base",
|
|
4
4
|
"description": "Multi-source knowledge search (pgvector + LightRAG) with optional Jina-powered router & reranker — injects relevant documents and knowledge graph context before each turn via the before_prompt_build hook",
|
|
5
|
-
"version": "3.2.
|
|
5
|
+
"version": "3.2.4",
|
|
6
6
|
"activation": {
|
|
7
7
|
"onStartup": true
|
|
8
8
|
},
|
|
@@ -86,6 +86,13 @@
|
|
|
86
86
|
"type": "string",
|
|
87
87
|
"description": "Jina API key shared by router and reranker. Required when router.mode=jina-classifier or pgvectorReranker.enabled. Supports ${ENV_VAR} substitution."
|
|
88
88
|
},
|
|
89
|
+
"rpmBudget": {
|
|
90
|
+
"type": "number",
|
|
91
|
+
"minimum": 0,
|
|
92
|
+
"maximum": 1000,
|
|
93
|
+
"default": 60,
|
|
94
|
+
"description": "Soft RPM budget for ALL outbound Jina calls (router + reranker). When the sliding 60-second window exceeds this number, a jina_rpm_exceeded event is emitted and a warning is logged. The call is NEVER blocked — the existing 429 cooldown is the hard backstop. Default 60 leaves headroom below the Jina free tier ceiling (100 RPM). Set to 0 to disable the monitor."
|
|
95
|
+
},
|
|
89
96
|
"router": {
|
|
90
97
|
"type": "object",
|
|
91
98
|
"additionalProperties": false,
|
|
@@ -136,6 +143,20 @@
|
|
|
136
143
|
"maximum": 100,
|
|
137
144
|
"default": 5,
|
|
138
145
|
"description": "Max number of results returned after rerank. Recommendation: keep topK ≥ topN × 2 so the cross-encoder has room to re-order."
|
|
146
|
+
},
|
|
147
|
+
"candidatePoolMax": {
|
|
148
|
+
"type": "number",
|
|
149
|
+
"minimum": 0,
|
|
150
|
+
"maximum": 100,
|
|
151
|
+
"default": 20,
|
|
152
|
+
"description": "Maximum number of cosine-ranked candidates submitted to Jina /v1/rerank per call. Trims Jina token spend on noisy recall. Set to 0 to disable the cap (legacy v3.2.3 behavior)."
|
|
153
|
+
},
|
|
154
|
+
"maxCharsPerDoc": {
|
|
155
|
+
"type": "number",
|
|
156
|
+
"minimum": 0,
|
|
157
|
+
"maximum": 20000,
|
|
158
|
+
"default": 2000,
|
|
159
|
+
"description": "Per-candidate text truncation length in characters before submission to Jina. The first ~2000 chars typically carry most of the relevance signal. Set to 0 to disable the truncation."
|
|
139
160
|
}
|
|
140
161
|
}
|
|
141
162
|
}
|
|
@@ -252,6 +273,21 @@
|
|
|
252
273
|
"label": "Reranker top-N",
|
|
253
274
|
"advanced": true,
|
|
254
275
|
"help": "Max results returned after rerank. Keep topK ≥ topN × 2."
|
|
276
|
+
},
|
|
277
|
+
"jina.pgvectorReranker.candidatePoolMax": {
|
|
278
|
+
"label": "Reranker candidate-pool cap",
|
|
279
|
+
"advanced": true,
|
|
280
|
+
"help": "Max candidates submitted to Jina per rerank call. Default 20. Set to 0 to disable the cap."
|
|
281
|
+
},
|
|
282
|
+
"jina.pgvectorReranker.maxCharsPerDoc": {
|
|
283
|
+
"label": "Reranker chars-per-doc cap",
|
|
284
|
+
"advanced": true,
|
|
285
|
+
"help": "Per-candidate text truncation before sending to Jina. Default 2000 chars. Set to 0 to disable truncation."
|
|
286
|
+
},
|
|
287
|
+
"jina.rpmBudget": {
|
|
288
|
+
"label": "Jina RPM budget (soft)",
|
|
289
|
+
"advanced": true,
|
|
290
|
+
"help": "Soft alert threshold on outbound Jina calls per minute. Default 60. Never blocks — only logs and emits jina_rpm_exceeded events. Set to 0 to disable."
|
|
255
291
|
}
|
|
256
292
|
}
|
|
257
293
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lacneu/openclaw-knowledge",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Multi-source knowledge plugin for OpenClaw — pgvector + LightRAG injection with optional Jina-powered router & reranker, via before_prompt_build hook",
|
|
6
6
|
"license": "MIT",
|