@lloyal-labs/rig 2.1.0 → 3.0.1
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/LICENSE +107 -0
- package/LICENSE-FAQ.md +256 -0
- package/README.md +93 -74
- package/dist/bundle.d.ts +211 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +296 -0
- package/dist/bundle.js.map +1 -0
- package/dist/cancellable-fetch.d.ts +98 -0
- package/dist/cancellable-fetch.d.ts.map +1 -0
- package/dist/cancellable-fetch.js +133 -0
- package/dist/cancellable-fetch.js.map +1 -0
- package/dist/config-store.d.ts +30 -0
- package/dist/config-store.d.ts.map +1 -0
- package/dist/config-store.js +45 -0
- package/dist/config-store.js.map +1 -0
- package/dist/define-app.d.ts +98 -0
- package/dist/define-app.d.ts.map +1 -0
- package/dist/define-app.js +232 -0
- package/dist/define-app.js.map +1 -0
- package/dist/grant-store.d.ts +31 -0
- package/dist/grant-store.d.ts.map +1 -0
- package/dist/grant-store.js +49 -0
- package/dist/grant-store.js.map +1 -0
- package/dist/index.d.ts +13 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -11
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +3 -2
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +3 -2
- package/dist/node.js.map +1 -1
- package/dist/protocol.d.ts +155 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +184 -0
- package/dist/protocol.js.map +1 -0
- package/dist/registry.d.ts +87 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +245 -0
- package/dist/registry.js.map +1 -0
- package/dist/reranker.d.ts +25 -7
- package/dist/reranker.d.ts.map +1 -1
- package/dist/reranker.js +103 -63
- package/dist/reranker.js.map +1 -1
- package/dist/resources/types.d.ts +10 -37
- package/dist/resources/types.d.ts.map +1 -1
- package/dist/resources/types.js +12 -0
- package/dist/resources/types.js.map +1 -1
- package/dist/spine-render.d.ts +97 -0
- package/dist/spine-render.d.ts.map +1 -0
- package/dist/spine-render.js +121 -0
- package/dist/spine-render.js.map +1 -0
- package/dist/tools/index.d.ts +26 -22
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +24 -28
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/keyless-search.d.ts +67 -0
- package/dist/tools/keyless-search.d.ts.map +1 -0
- package/dist/tools/keyless-search.js +401 -0
- package/dist/tools/keyless-search.js.map +1 -0
- package/dist/tools/plan.d.ts +31 -4
- package/dist/tools/plan.d.ts.map +1 -1
- package/dist/tools/plan.js +46 -11
- package/dist/tools/plan.js.map +1 -1
- package/dist/tools/types.d.ts +12 -56
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +17 -0
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/web-search.d.ts +9 -25
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +11 -119
- package/dist/tools/web-search.js.map +1 -1
- package/package.json +10 -7
- package/dist/sources/corpus.d.ts +0 -80
- package/dist/sources/corpus.d.ts.map +0 -1
- package/dist/sources/corpus.js +0 -100
- package/dist/sources/corpus.js.map +0 -1
- package/dist/sources/index.d.ts +0 -12
- package/dist/sources/index.d.ts.map +0 -1
- package/dist/sources/index.js +0 -14
- package/dist/sources/index.js.map +0 -1
- package/dist/sources/web.d.ts +0 -67
- package/dist/sources/web.d.ts.map +0 -1
- package/dist/sources/web.js +0 -104
- package/dist/sources/web.js.map +0 -1
- package/dist/tools/fetch-page.d.ts +0 -48
- package/dist/tools/fetch-page.d.ts.map +0 -1
- package/dist/tools/fetch-page.js +0 -309
- package/dist/tools/fetch-page.js.map +0 -1
- package/dist/tools/grep.d.ts +0 -35
- package/dist/tools/grep.d.ts.map +0 -1
- package/dist/tools/grep.js +0 -84
- package/dist/tools/grep.js.map +0 -1
- package/dist/tools/read-file.d.ts +0 -74
- package/dist/tools/read-file.d.ts.map +0 -1
- package/dist/tools/read-file.js +0 -192
- package/dist/tools/read-file.js.map +0 -1
- package/dist/tools/search.d.ts +0 -34
- package/dist/tools/search.d.ts.map +0 -1
- package/dist/tools/search.js +0 -101
- package/dist/tools/search.js.map +0 -1
package/dist/registry.js
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `createAppRegistry` — harness-wide app registry with a **declarative**
|
|
4
|
+
* app set and structured, **isolated** per-app lifecycle.
|
|
5
|
+
*
|
|
6
|
+
* The harness declares its apps as factories; the registry owns the rest:
|
|
7
|
+
*
|
|
8
|
+
* - `createAppRegistry({ configStore, apps })` runs each factory in its own
|
|
9
|
+
* **detached** Effection scope, seeded with the app-facing framework
|
|
10
|
+
* contexts (`AppConfigStoreCtx`, `RerankerCtx`) so the factory
|
|
11
|
+
* reads config + reranker. The factory body is setup; a `resource()`
|
|
12
|
+
* factory's `ensure(...)` is teardown. The registry tears the scopes
|
|
13
|
+
* down on its own scope exit, reverse register-order, **best-effort** —
|
|
14
|
+
* a throwing teardown is logged but never strands a sibling, and never
|
|
15
|
+
* crashes the harness. The harness does **not** call a per-app register
|
|
16
|
+
* verb at boot.
|
|
17
|
+
* - `registry.enable(factory)` / `registry.disable(name)` handle the
|
|
18
|
+
* genuine dynamic case (mid-session enable/disable). `enable` →
|
|
19
|
+
* `'enabled'`, `disable` → `'disabled'` (matching {@link AppState}).
|
|
20
|
+
* `disable` swallows + logs a throwing teardown, so a mid-session
|
|
21
|
+
* uninstall can't crash the session — possible only because each app
|
|
22
|
+
* owns a detached scope whose teardown errors don't propagate to a
|
|
23
|
+
* parent.
|
|
24
|
+
*
|
|
25
|
+
* There are no install/uninstall/enable/disable hooks on the App. A
|
|
26
|
+
* factory that throws (or whose manifest fails validation) tears down its
|
|
27
|
+
* partial scope and propagates; the app never enters the registry.
|
|
28
|
+
* Per-app independent — one app's failure can't roll back another.
|
|
29
|
+
*
|
|
30
|
+
* @packageDocumentation
|
|
31
|
+
* @category Protocol
|
|
32
|
+
*/
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.createAppRegistry = createAppRegistry;
|
|
35
|
+
const effection_1 = require("effection");
|
|
36
|
+
const lloyal_agents_1 = require("@lloyal-labs/lloyal-agents");
|
|
37
|
+
const protocol_1 = require("./protocol");
|
|
38
|
+
/**
|
|
39
|
+
* Create the harness-wide app registry.
|
|
40
|
+
*
|
|
41
|
+
* Sets `AppRegistryCtx` and `AppConfigStoreCtx` in the caller's scope (the
|
|
42
|
+
* `initAgents` pattern), enables each factory in `opts.apps`, and tears
|
|
43
|
+
* every enabled app's scope down on the caller's scope exit (reverse
|
|
44
|
+
* order, best-effort).
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* import { createWebApp } from '@lloyal-labs/web-app';
|
|
49
|
+
* import { createCorpusApp } from '@lloyal-labs/corpus-app';
|
|
50
|
+
* import { createJiraApp } from '@lloyal-labs/jira-app';
|
|
51
|
+
*
|
|
52
|
+
* yield* RerankerCtx.set(reranker); // before, if factories read it
|
|
53
|
+
* const registry = yield* createAppRegistry({
|
|
54
|
+
* configStore,
|
|
55
|
+
* apps: [createWebApp, createCorpusApp, createJiraApp],
|
|
56
|
+
* });
|
|
57
|
+
* // ... pool dispatch ...
|
|
58
|
+
* // registry scope exit tears down every app (factory ensures fire)
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
function* createAppRegistry(opts) {
|
|
62
|
+
const { configStore, grantStore, apps } = opts;
|
|
63
|
+
const entries = new Map();
|
|
64
|
+
const order = [];
|
|
65
|
+
const registry = {
|
|
66
|
+
byName(name) {
|
|
67
|
+
return entries.get(name)?.app;
|
|
68
|
+
},
|
|
69
|
+
enabled() {
|
|
70
|
+
return order.map((n) => entries.get(n).app).filter(Boolean);
|
|
71
|
+
},
|
|
72
|
+
stateOf(name) {
|
|
73
|
+
return entries.has(name) ? 'enabled' : 'disabled';
|
|
74
|
+
},
|
|
75
|
+
*enable(factory) {
|
|
76
|
+
// Read the app-facing framework contexts to seed into the app's
|
|
77
|
+
// detached scope (factories read config + reranker).
|
|
78
|
+
let reranker;
|
|
79
|
+
try {
|
|
80
|
+
reranker = yield* lloyal_agents_1.RerankerCtx.expect();
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
reranker = undefined;
|
|
84
|
+
}
|
|
85
|
+
const [scope, destroy] = (0, effection_1.createScope)();
|
|
86
|
+
let added = false;
|
|
87
|
+
try {
|
|
88
|
+
// Run the factory in a DETACHED scope (so its teardown errors stay
|
|
89
|
+
// isolated and swallowable), seeded with the framework contexts.
|
|
90
|
+
// It resolves the App out, then suspends — keeping the App and its
|
|
91
|
+
// ensure() teardown alive until `destroy()`.
|
|
92
|
+
const app = yield* (0, effection_1.call)(() => new Promise((resolve, reject) => {
|
|
93
|
+
scope
|
|
94
|
+
.run(function* () {
|
|
95
|
+
try {
|
|
96
|
+
yield* lloyal_agents_1.AppConfigStoreCtx.set(configStore);
|
|
97
|
+
yield* lloyal_agents_1.AppRegistryCtx.set(registry);
|
|
98
|
+
if (reranker !== undefined)
|
|
99
|
+
yield* lloyal_agents_1.RerankerCtx.set(reranker);
|
|
100
|
+
const constructed = yield* factory();
|
|
101
|
+
resolve(constructed);
|
|
102
|
+
yield* (0, effection_1.suspend)();
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
reject(err);
|
|
106
|
+
}
|
|
107
|
+
})
|
|
108
|
+
.catch(() => {
|
|
109
|
+
/* halt-after-resolve rejection — expected, ignore */
|
|
110
|
+
});
|
|
111
|
+
}));
|
|
112
|
+
const declared = app.manifest.appProtocolVersion ?? '3.0';
|
|
113
|
+
if (!protocol_1.SUPPORTED_APP_PROTOCOL_VERSIONS.includes(declared)) {
|
|
114
|
+
throw new Error(`App "${app.manifest.name}" declares appProtocolVersion="${declared}", ` +
|
|
115
|
+
`but the framework supports [${protocol_1.SUPPORTED_APP_PROTOCOL_VERSIONS.map((v) => `"${v}"`).join(', ')}]. ` +
|
|
116
|
+
`Upgrade the app or use a framework version that supports this protocol.`);
|
|
117
|
+
}
|
|
118
|
+
const existingConfig = yield* configStore.get(app.manifest.name);
|
|
119
|
+
if (existingConfig !== undefined && app.manifest.configSchema) {
|
|
120
|
+
validateConfigShape(app.manifest.name, existingConfig, app.manifest.configSchema);
|
|
121
|
+
}
|
|
122
|
+
if (entries.has(app.manifest.name)) {
|
|
123
|
+
throw new Error(`App "${app.manifest.name}" is already enabled. ` +
|
|
124
|
+
`Call registry.disable("${app.manifest.name}") first to replace it.`);
|
|
125
|
+
}
|
|
126
|
+
entries.set(app.manifest.name, { app, destroy });
|
|
127
|
+
order.push(app.manifest.name);
|
|
128
|
+
added = true;
|
|
129
|
+
return app;
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
// Factory threw, validation failed, or the caller was halted before
|
|
133
|
+
// the app entered the registry → tear down its detached scope
|
|
134
|
+
// (best-effort; don't mask the original error).
|
|
135
|
+
if (!added) {
|
|
136
|
+
try {
|
|
137
|
+
yield* (0, effection_1.call)(() => destroy());
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
/* teardown error on the failure path — original error wins */
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
*disable(name) {
|
|
146
|
+
const entry = entries.get(name);
|
|
147
|
+
if (!entry)
|
|
148
|
+
return;
|
|
149
|
+
entries.delete(name);
|
|
150
|
+
const idx = order.indexOf(name);
|
|
151
|
+
if (idx >= 0)
|
|
152
|
+
order.splice(idx, 1);
|
|
153
|
+
try {
|
|
154
|
+
yield* (0, effection_1.call)(() => entry.destroy());
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
console.error(`[lloyal-rig] teardown for app "${name}" threw during disable — app removed regardless:`, err);
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
yield* lloyal_agents_1.AppRegistryCtx.set(registry);
|
|
162
|
+
yield* lloyal_agents_1.AppConfigStoreCtx.set(configStore);
|
|
163
|
+
// Seed the grant store so the agent pool's authGuard can
|
|
164
|
+
// read the session's protected-tool grants. Absent = fail-closed.
|
|
165
|
+
if (grantStore)
|
|
166
|
+
yield* lloyal_agents_1.GrantStoreCtx.set(grantStore);
|
|
167
|
+
// Tear down every still-enabled app on registry scope exit, reverse
|
|
168
|
+
// register-order, best-effort (a throwing teardown is logged, never
|
|
169
|
+
// strands a sibling, never crashes the harness). Registered before the
|
|
170
|
+
// boot set so a mid-boot failure still cleans up the apps that enabled.
|
|
171
|
+
yield* (0, effection_1.ensure)(function* () {
|
|
172
|
+
for (let i = order.length - 1; i >= 0; i--) {
|
|
173
|
+
const name = order[i];
|
|
174
|
+
const entry = entries.get(name);
|
|
175
|
+
if (!entry)
|
|
176
|
+
continue;
|
|
177
|
+
try {
|
|
178
|
+
yield* (0, effection_1.call)(() => entry.destroy());
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
console.error(`[lloyal-rig] teardown for app "${name}" threw — continuing teardown:`, err);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
entries.clear();
|
|
185
|
+
order.length = 0;
|
|
186
|
+
});
|
|
187
|
+
if (apps) {
|
|
188
|
+
for (const factory of apps) {
|
|
189
|
+
yield* registry.enable(factory);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return registry;
|
|
193
|
+
}
|
|
194
|
+
// ── Helpers ───────────────────────────────────────────────────────
|
|
195
|
+
/**
|
|
196
|
+
* Minimal structural schema check. Validates that every property in
|
|
197
|
+
* `schema.required` exists on `config` with a type compatible with
|
|
198
|
+
* `schema.properties[name].type`. This is a guardrail — the framework
|
|
199
|
+
* does not ship a full JSON Schema validator. Apps requiring richer
|
|
200
|
+
* validation should run their own check in the factory body.
|
|
201
|
+
*/
|
|
202
|
+
function validateConfigShape(appName, config, schema) {
|
|
203
|
+
if (schema.type && schema.type !== 'object') {
|
|
204
|
+
return; // non-object schemas are out of scope for the guardrail
|
|
205
|
+
}
|
|
206
|
+
for (const key of schema.required ?? []) {
|
|
207
|
+
if (!(key in config)) {
|
|
208
|
+
throw new Error(`App "${appName}" stored config is missing required key "${key}" ` +
|
|
209
|
+
`declared in manifest.configSchema. Re-run the app's config flow or clear stale config.`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
for (const [key, rawPropSchema] of Object.entries(schema.properties ?? {})) {
|
|
213
|
+
if (!(key in config))
|
|
214
|
+
continue;
|
|
215
|
+
const propSchema = rawPropSchema;
|
|
216
|
+
if (!propSchema || typeof propSchema.type !== 'string')
|
|
217
|
+
continue;
|
|
218
|
+
const value = config[key];
|
|
219
|
+
if (!matchesPrimitiveType(value, propSchema.type)) {
|
|
220
|
+
throw new Error(`App "${appName}" stored config key "${key}" has type "${typeof value}" ` +
|
|
221
|
+
`but manifest.configSchema declares "${propSchema.type}". ` +
|
|
222
|
+
`Re-run the app's config flow or clear stale config.`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
function matchesPrimitiveType(value, declared) {
|
|
227
|
+
switch (declared) {
|
|
228
|
+
case 'string':
|
|
229
|
+
return typeof value === 'string';
|
|
230
|
+
case 'number':
|
|
231
|
+
case 'integer':
|
|
232
|
+
return typeof value === 'number';
|
|
233
|
+
case 'boolean':
|
|
234
|
+
return typeof value === 'boolean';
|
|
235
|
+
case 'array':
|
|
236
|
+
return Array.isArray(value);
|
|
237
|
+
case 'object':
|
|
238
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
239
|
+
case 'null':
|
|
240
|
+
return value === null;
|
|
241
|
+
default:
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/reranker.d.ts
CHANGED
|
@@ -1,17 +1,35 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Operation } from "effection";
|
|
2
|
+
import type { Reranker } from "@lloyal-labs/lloyal-agents";
|
|
2
3
|
/**
|
|
3
|
-
* Create a {@link Reranker} backed by a dedicated reranking model context
|
|
4
|
+
* Create a {@link Reranker} backed by a dedicated reranking model context,
|
|
5
|
+
* as an Effection `resource()`.
|
|
4
6
|
*
|
|
5
7
|
* Loads a separate model (typically a cross-encoder) into its own KV cache
|
|
6
|
-
* and exposes `score`, `tokenizeChunks`, and `dispose
|
|
7
|
-
* `score` method yields {@link ScoredResult} batches as an async
|
|
8
|
-
* mapping raw indices back to the original {@link Chunk} metadata.
|
|
8
|
+
* and exposes `score`, `scoreBatch`, `tokenizeChunks`, and `dispose`. The
|
|
9
|
+
* returned `score` method yields {@link ScoredResult} batches as an async
|
|
10
|
+
* iterable, mapping raw indices back to the original {@link Chunk} metadata.
|
|
11
|
+
*
|
|
12
|
+
* **Lifecycle.** The reranker owns its underlying `SessionContext` + `Rerank`
|
|
13
|
+
* and disposes them transitively when the yielding scope exits (success,
|
|
14
|
+
* error, or halt). The harness yields it once per process lifecycle and
|
|
15
|
+
* publishes it on `RerankerCtx` so App factories can read it via
|
|
16
|
+
* `RerankerCtx.expect()`. `dispose()` remains on the interface
|
|
17
|
+
* for callers that manage teardown explicitly; it is idempotent so the
|
|
18
|
+
* resource finally and an explicit call don't double-free.
|
|
9
19
|
*
|
|
10
20
|
* @param modelPath - Absolute path to the reranking model file (GGUF)
|
|
11
21
|
* @param opts - Optional context sizing overrides
|
|
12
22
|
* @param opts.nSeqMax - Maximum parallel scoring sequences (default 8)
|
|
13
23
|
* @param opts.nCtx - Context window size for the reranker model (default 4096)
|
|
14
|
-
* @returns
|
|
24
|
+
* @returns An Effection resource yielding a ready-to-use reranker
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* const reranker = yield* createReranker(rerankerPath, { nSeqMax: 8, nCtx: 4096 });
|
|
29
|
+
* yield* RerankerCtx.set(reranker);
|
|
30
|
+
* // ... pool work ...
|
|
31
|
+
* // reranker disposes automatically on scope exit
|
|
32
|
+
* ```
|
|
15
33
|
*
|
|
16
34
|
* @category Rig
|
|
17
35
|
*/
|
|
@@ -19,5 +37,5 @@ export declare function createReranker(modelPath: string, opts?: {
|
|
|
19
37
|
nSeqMax?: number;
|
|
20
38
|
nCtx?: number;
|
|
21
39
|
nBatch?: number;
|
|
22
|
-
}):
|
|
40
|
+
}): Operation<Reranker>;
|
|
23
41
|
//# sourceMappingURL=reranker.d.ts.map
|
package/dist/reranker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reranker.d.ts","sourceRoot":"","sources":["../src/reranker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,
|
|
1
|
+
{"version":3,"file":"reranker.d.ts","sourceRoot":"","sources":["../src/reranker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAS,QAAQ,EAAgB,MAAM,4BAA4B,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D,SAAS,CAAC,QAAQ,CAAC,CA4FrB"}
|
package/dist/reranker.js
CHANGED
|
@@ -3,81 +3,121 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createReranker = createReranker;
|
|
4
4
|
const lloyal_node_1 = require("@lloyal-labs/lloyal.node");
|
|
5
5
|
const sdk_1 = require("@lloyal-labs/sdk");
|
|
6
|
+
const effection_1 = require("effection");
|
|
6
7
|
/**
|
|
7
|
-
* Create a {@link Reranker} backed by a dedicated reranking model context
|
|
8
|
+
* Create a {@link Reranker} backed by a dedicated reranking model context,
|
|
9
|
+
* as an Effection `resource()`.
|
|
8
10
|
*
|
|
9
11
|
* Loads a separate model (typically a cross-encoder) into its own KV cache
|
|
10
|
-
* and exposes `score`, `tokenizeChunks`, and `dispose
|
|
11
|
-
* `score` method yields {@link ScoredResult} batches as an async
|
|
12
|
-
* mapping raw indices back to the original {@link Chunk} metadata.
|
|
12
|
+
* and exposes `score`, `scoreBatch`, `tokenizeChunks`, and `dispose`. The
|
|
13
|
+
* returned `score` method yields {@link ScoredResult} batches as an async
|
|
14
|
+
* iterable, mapping raw indices back to the original {@link Chunk} metadata.
|
|
15
|
+
*
|
|
16
|
+
* **Lifecycle.** The reranker owns its underlying `SessionContext` + `Rerank`
|
|
17
|
+
* and disposes them transitively when the yielding scope exits (success,
|
|
18
|
+
* error, or halt). The harness yields it once per process lifecycle and
|
|
19
|
+
* publishes it on `RerankerCtx` so App factories can read it via
|
|
20
|
+
* `RerankerCtx.expect()`. `dispose()` remains on the interface
|
|
21
|
+
* for callers that manage teardown explicitly; it is idempotent so the
|
|
22
|
+
* resource finally and an explicit call don't double-free.
|
|
13
23
|
*
|
|
14
24
|
* @param modelPath - Absolute path to the reranking model file (GGUF)
|
|
15
25
|
* @param opts - Optional context sizing overrides
|
|
16
26
|
* @param opts.nSeqMax - Maximum parallel scoring sequences (default 8)
|
|
17
27
|
* @param opts.nCtx - Context window size for the reranker model (default 4096)
|
|
18
|
-
* @returns
|
|
28
|
+
* @returns An Effection resource yielding a ready-to-use reranker
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* const reranker = yield* createReranker(rerankerPath, { nSeqMax: 8, nCtx: 4096 });
|
|
33
|
+
* yield* RerankerCtx.set(reranker);
|
|
34
|
+
* // ... pool work ...
|
|
35
|
+
* // reranker disposes automatically on scope exit
|
|
36
|
+
* ```
|
|
19
37
|
*
|
|
20
38
|
* @category Rig
|
|
21
39
|
*/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
nCtx
|
|
29
|
-
nSeqMax
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
function createReranker(modelPath, opts) {
|
|
41
|
+
return (0, effection_1.resource)(function* (provide) {
|
|
42
|
+
// Default bumped 8→10: warm-trunk + per-query branch consume 2 leases in
|
|
43
|
+
// the R3 Rerank composition, so leaves get N-2 slots; 10 keeps the leaf
|
|
44
|
+
// budget at the prior default of 8.
|
|
45
|
+
const nSeqMax = opts?.nSeqMax ?? 10;
|
|
46
|
+
const nCtx = opts?.nCtx ?? 4096;
|
|
47
|
+
const nBatch = opts?.nBatch ?? Math.floor(nCtx / nSeqMax);
|
|
48
|
+
const ctx = yield* (0, effection_1.call)(() => (0, lloyal_node_1.createContext)({
|
|
49
|
+
modelPath,
|
|
50
|
+
nCtx,
|
|
51
|
+
nSeqMax,
|
|
52
|
+
nBatch,
|
|
53
|
+
typeK: 'q4_0',
|
|
54
|
+
typeV: 'q4_0',
|
|
55
|
+
}));
|
|
56
|
+
const rerank = yield* (0, effection_1.call)(() => sdk_1.Rerank.create(ctx, { nSeqMax, nCtx }));
|
|
57
|
+
let disposed = false;
|
|
58
|
+
const reranker = {
|
|
59
|
+
score(query, chunks) {
|
|
60
|
+
const inner = rerank.score(query, chunks.map((c) => c.tokens), 10);
|
|
61
|
+
return {
|
|
62
|
+
[Symbol.asyncIterator]() {
|
|
63
|
+
const it = inner[Symbol.asyncIterator]();
|
|
64
|
+
return {
|
|
65
|
+
async next() {
|
|
66
|
+
const { value, done } = await it.next();
|
|
67
|
+
if (done)
|
|
68
|
+
return {
|
|
69
|
+
value: undefined,
|
|
70
|
+
done: true,
|
|
71
|
+
};
|
|
45
72
|
return {
|
|
46
|
-
value:
|
|
47
|
-
|
|
73
|
+
value: {
|
|
74
|
+
filled: value.filled,
|
|
75
|
+
total: value.total,
|
|
76
|
+
results: value.results.map((r) => ({
|
|
77
|
+
file: chunks[r.index].resource,
|
|
78
|
+
heading: chunks[r.index].heading,
|
|
79
|
+
section: chunks[r.index].section,
|
|
80
|
+
snippet: chunks[r.index].text.slice(0, 200),
|
|
81
|
+
score: r.score,
|
|
82
|
+
startLine: chunks[r.index].startLine,
|
|
83
|
+
endLine: chunks[r.index].endLine,
|
|
84
|
+
})),
|
|
85
|
+
},
|
|
86
|
+
done: false,
|
|
48
87
|
};
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
scoreBatch(query, texts) {
|
|
94
|
+
return rerank.scoreBatch(query, texts);
|
|
95
|
+
},
|
|
96
|
+
tokenize(text) {
|
|
97
|
+
return rerank.tokenize(text);
|
|
98
|
+
},
|
|
99
|
+
async tokenizeChunks(chunks) {
|
|
100
|
+
// Tokenize in parallel — _tokenize is N-API AsyncWorker dispatch, so
|
|
101
|
+
// Promise.all overlaps work across threadpool slots. Serial for-await
|
|
102
|
+
// was a bottleneck on large corpora (1000+ chunks).
|
|
103
|
+
const toks = await Promise.all(chunks.map((c) => rerank.tokenize(c.text)));
|
|
104
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
105
|
+
chunks[i].tokens = toks[i];
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
dispose() {
|
|
109
|
+
if (disposed)
|
|
110
|
+
return;
|
|
111
|
+
disposed = true;
|
|
112
|
+
rerank.dispose();
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
try {
|
|
116
|
+
yield* provide(reranker);
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
reranker.dispose();
|
|
120
|
+
}
|
|
121
|
+
});
|
|
82
122
|
}
|
|
83
123
|
//# sourceMappingURL=reranker.js.map
|
package/dist/reranker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reranker.js","sourceRoot":"","sources":["../src/reranker.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"reranker.js","sourceRoot":"","sources":["../src/reranker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,41 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
name: string;
|
|
12
|
-
/** Full text content of the file */
|
|
13
|
-
content: string;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* A scored passage within a {@link Resource}, used for reranking and retrieval
|
|
17
|
-
*
|
|
18
|
-
* Chunks are produced by {@link chunkResources} (section-based for Markdown)
|
|
19
|
-
* or {@link chunkFetchedPages} (paragraph-based for web content). The
|
|
20
|
-
* {@link tokens} array is populated lazily by {@link Reranker.tokenizeChunks}
|
|
21
|
-
* before scoring.
|
|
22
|
-
*
|
|
2
|
+
* @deprecated `Resource` and `Chunk` now live in
|
|
3
|
+
* `@lloyal-labs/lloyal-agents` (abstract chunking types
|
|
4
|
+
* moved to agents to mirror the `Source` / `Tool` pattern: abstract
|
|
5
|
+
* types in agents, concrete chunking factories in rig). This module
|
|
6
|
+
* re-exports them so existing rig internal callers keep working
|
|
7
|
+
* during the Phase 3-6 refactor window; new code should import
|
|
8
|
+
* directly from `@lloyal-labs/lloyal-agents`.
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
23
11
|
* @category Rig
|
|
24
12
|
*/
|
|
25
|
-
export
|
|
26
|
-
/** Resource identifier (file name or URL) this chunk belongs to */
|
|
27
|
-
resource: string;
|
|
28
|
-
/** Leaf section heading (e.g. "Recovery loop") */
|
|
29
|
-
heading: string;
|
|
30
|
-
/** Hierarchical section path (e.g. "Agents > Lifecycle > Recovery loop"). Empty for web chunks. */
|
|
31
|
-
section: string;
|
|
32
|
-
/** Raw text content of the chunk */
|
|
33
|
-
text: string;
|
|
34
|
-
/** Pre-tokenized representation for the reranker — empty until {@link Reranker.tokenizeChunks} runs */
|
|
35
|
-
tokens: number[];
|
|
36
|
-
/** First line number (1-based) in the source resource */
|
|
37
|
-
startLine: number;
|
|
38
|
-
/** Last line number (1-based) in the source resource */
|
|
39
|
-
endLine: number;
|
|
40
|
-
}
|
|
13
|
+
export type { Resource, Chunk } from '@lloyal-labs/lloyal-agents';
|
|
41
14
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resources/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resources/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/resources/types.js
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated `Resource` and `Chunk` now live in
|
|
4
|
+
* `@lloyal-labs/lloyal-agents` (abstract chunking types
|
|
5
|
+
* moved to agents to mirror the `Source` / `Tool` pattern: abstract
|
|
6
|
+
* types in agents, concrete chunking factories in rig). This module
|
|
7
|
+
* re-exports them so existing rig internal callers keep working
|
|
8
|
+
* during the Phase 3-6 refactor window; new code should import
|
|
9
|
+
* directly from `@lloyal-labs/lloyal-agents`.
|
|
10
|
+
*
|
|
11
|
+
* @packageDocumentation
|
|
12
|
+
* @category Rig
|
|
13
|
+
*/
|
|
2
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
15
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/resources/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/resources/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG"}
|