@devilsdev/rag-core 3.7.1 → 3.8.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/dist/index.cjs
CHANGED
|
@@ -302,6 +302,19 @@ var require_plugin_signature_verifier = __commonJS({
|
|
|
302
302
|
format: "jwk"
|
|
303
303
|
});
|
|
304
304
|
}
|
|
305
|
+
function rejectReservedKeys(value) {
|
|
306
|
+
if (value === null || typeof value !== "object") return;
|
|
307
|
+
if (Array.isArray(value)) {
|
|
308
|
+
value.forEach(rejectReservedKeys);
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
for (const key of Object.keys(value)) {
|
|
312
|
+
if (key === "__proto__") {
|
|
313
|
+
throw new Error(`Invalid manifest: reserved key "${key}"`);
|
|
314
|
+
}
|
|
315
|
+
rejectReservedKeys(value[key]);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
305
318
|
function computeContentDigest({ files = [], baseDir, contents = {} } = {}) {
|
|
306
319
|
const root = path.resolve(baseDir || process.cwd());
|
|
307
320
|
const entries = /* @__PURE__ */ new Map();
|
|
@@ -465,7 +478,7 @@ var require_plugin_signature_verifier = __commonJS({
|
|
|
465
478
|
* @private
|
|
466
479
|
*/
|
|
467
480
|
_verifyContentDigest(canonicalManifest, content) {
|
|
468
|
-
const declared = canonicalManifest.contentDigest;
|
|
481
|
+
const declared = Object.hasOwn(canonicalManifest, "contentDigest") ? canonicalManifest.contentDigest : void 0;
|
|
469
482
|
const hasContent = content && (Array.isArray(content.files) && content.files.length > 0 || content.contents && Object.keys(content.contents).length > 0);
|
|
470
483
|
if (declared === void 0 || declared === null) {
|
|
471
484
|
if (this.requireContentDigest) {
|
|
@@ -514,6 +527,7 @@ var require_plugin_signature_verifier = __commonJS({
|
|
|
514
527
|
*/
|
|
515
528
|
_canonicalizeManifest(manifest) {
|
|
516
529
|
const canonical = JSON.parse(JSON.stringify(manifest));
|
|
530
|
+
rejectReservedKeys(canonical);
|
|
517
531
|
delete canonical.signature;
|
|
518
532
|
delete canonical.signerId;
|
|
519
533
|
delete canonical.signedAt;
|
|
@@ -1370,7 +1384,7 @@ var require_package = __commonJS({
|
|
|
1370
1384
|
"package.json"(exports2, module2) {
|
|
1371
1385
|
module2.exports = {
|
|
1372
1386
|
name: "@devilsdev/rag-pipeline-utils",
|
|
1373
|
-
version: "3.
|
|
1387
|
+
version: "3.8.1",
|
|
1374
1388
|
description: "Composable retrieval-augmented generation (RAG) for Node.js: grounded citations, evaluation, guardrails, hybrid retrieval and a CLI.",
|
|
1375
1389
|
main: "dist/index.cjs",
|
|
1376
1390
|
type: "commonjs",
|
|
@@ -1586,17 +1600,9 @@ var require_package = __commonJS({
|
|
|
1586
1600
|
"@octokit/rest": "^21.1.1",
|
|
1587
1601
|
"@opentelemetry/api": "^1.9.1",
|
|
1588
1602
|
"@opentelemetry/api-logs": "^0.223.0",
|
|
1589
|
-
"@opentelemetry/auto-instrumentations-node": "^0.52.1",
|
|
1590
1603
|
"@opentelemetry/context-async-hooks": "^2.12.0",
|
|
1591
|
-
"@opentelemetry/exporter-jaeger": "^1.26.0",
|
|
1592
|
-
"@opentelemetry/exporter-prometheus": "^0.53.0",
|
|
1593
|
-
"@opentelemetry/exporter-trace-otlp-http": "^0.53.0",
|
|
1594
|
-
"@opentelemetry/resources": "^1.26.0",
|
|
1595
1604
|
"@opentelemetry/sdk-logs": "^0.223.0",
|
|
1596
|
-
"@opentelemetry/sdk-metrics": "^1.26.0",
|
|
1597
|
-
"@opentelemetry/sdk-node": "^0.53.0",
|
|
1598
1605
|
"@opentelemetry/sdk-trace-base": "^2.12.0",
|
|
1599
|
-
"@opentelemetry/semantic-conventions": "^1.27.0",
|
|
1600
1606
|
"@types/jest": "^29.5.14",
|
|
1601
1607
|
"@types/node": "22.14.1",
|
|
1602
1608
|
acorn: "8.15.0",
|
|
@@ -1611,7 +1617,6 @@ var require_package = __commonJS({
|
|
|
1611
1617
|
"docusaurus-plugin-llms": "0.6.1",
|
|
1612
1618
|
esbuild: "^0.25.2",
|
|
1613
1619
|
eslint: "^8.57.1",
|
|
1614
|
-
"eslint-plugin-storybook": "^0.12.0",
|
|
1615
1620
|
events: "3.3.0",
|
|
1616
1621
|
"framer-motion": "^12.7.4",
|
|
1617
1622
|
husky: "^8.0.3",
|
|
@@ -1638,10 +1643,10 @@ var require_package = __commonJS({
|
|
|
1638
1643
|
"why-is-node-running": "^3.2.2"
|
|
1639
1644
|
},
|
|
1640
1645
|
dependencies: {
|
|
1641
|
-
"@devilsdev/rag-connectors": "3.
|
|
1642
|
-
"@devilsdev/rag-core": "3.
|
|
1643
|
-
"@devilsdev/rag-eval": "3.
|
|
1644
|
-
"@devilsdev/rag-guardrails": "3.
|
|
1646
|
+
"@devilsdev/rag-connectors": "3.8.1",
|
|
1647
|
+
"@devilsdev/rag-core": "3.8.1",
|
|
1648
|
+
"@devilsdev/rag-eval": "3.8.1",
|
|
1649
|
+
"@devilsdev/rag-guardrails": "3.8.1",
|
|
1645
1650
|
ajv: "^8.17.1",
|
|
1646
1651
|
axios: "^1.21.0",
|
|
1647
1652
|
chokidar: "^4.0.3",
|
|
@@ -5236,11 +5241,26 @@ var require_chunking_engine = __commonJS({
|
|
|
5236
5241
|
}
|
|
5237
5242
|
});
|
|
5238
5243
|
|
|
5244
|
+
// src/retrieval/access-fields.js
|
|
5245
|
+
var require_access_fields = __commonJS({
|
|
5246
|
+
"src/retrieval/access-fields.js"(exports2, module2) {
|
|
5247
|
+
"use strict";
|
|
5248
|
+
function accessFields(doc) {
|
|
5249
|
+
const fields = {};
|
|
5250
|
+
if (doc.acl !== void 0) fields.acl = doc.acl;
|
|
5251
|
+
if (doc.requiredRole !== void 0) fields.requiredRole = doc.requiredRole;
|
|
5252
|
+
return fields;
|
|
5253
|
+
}
|
|
5254
|
+
module2.exports = { accessFields };
|
|
5255
|
+
}
|
|
5256
|
+
});
|
|
5257
|
+
|
|
5239
5258
|
// src/retrieval/bm25-search.js
|
|
5240
5259
|
var require_bm25_search = __commonJS({
|
|
5241
5260
|
"src/retrieval/bm25-search.js"(exports2, module2) {
|
|
5242
5261
|
"use strict";
|
|
5243
5262
|
var { EventEmitter } = require("events");
|
|
5263
|
+
var { accessFields } = require_access_fields();
|
|
5244
5264
|
var scoring = require_scoring();
|
|
5245
5265
|
var DEFAULT_CONFIG = { k1: 1.2, b: 0.75 };
|
|
5246
5266
|
var BM25Search = class extends EventEmitter {
|
|
@@ -5329,7 +5349,8 @@ var require_bm25_search = __commonJS({
|
|
|
5329
5349
|
id: doc.id,
|
|
5330
5350
|
score,
|
|
5331
5351
|
content: doc.content || doc.text || "",
|
|
5332
|
-
metadata: doc.metadata || {}
|
|
5352
|
+
metadata: doc.metadata || {},
|
|
5353
|
+
...accessFields(doc)
|
|
5333
5354
|
});
|
|
5334
5355
|
}
|
|
5335
5356
|
results.sort((a, b2) => b2.score - a.score);
|
|
@@ -7294,6 +7315,7 @@ var require_memory_retriever = __commonJS({
|
|
|
7294
7315
|
var { randomBytes } = require("crypto");
|
|
7295
7316
|
var { BaseConnector } = require_base_connector();
|
|
7296
7317
|
var { throwIfAborted } = require_connector_utils();
|
|
7318
|
+
var { accessFields } = require_access_fields();
|
|
7297
7319
|
var DEFAULT_CONFIG = {
|
|
7298
7320
|
maxDocuments: 1e5,
|
|
7299
7321
|
// 'error' rejects a store() that would exceed maxDocuments; 'fifo' evicts
|
|
@@ -7375,7 +7397,8 @@ var require_memory_retriever = __commonJS({
|
|
|
7375
7397
|
this.documents.set(doc.id, {
|
|
7376
7398
|
vector: doc.vector,
|
|
7377
7399
|
metadata: doc.metadata || {},
|
|
7378
|
-
content: doc.content || ""
|
|
7400
|
+
content: doc.content || "",
|
|
7401
|
+
...accessFields(doc)
|
|
7379
7402
|
});
|
|
7380
7403
|
}
|
|
7381
7404
|
if (vectors.length > 0) this.dimensions = dimensions;
|
|
@@ -7433,7 +7456,8 @@ var require_memory_retriever = __commonJS({
|
|
|
7433
7456
|
id,
|
|
7434
7457
|
score,
|
|
7435
7458
|
metadata: doc.metadata,
|
|
7436
|
-
content: doc.content
|
|
7459
|
+
content: doc.content,
|
|
7460
|
+
...accessFields(doc)
|
|
7437
7461
|
});
|
|
7438
7462
|
}
|
|
7439
7463
|
results.sort((a, b) => b.score - a.score);
|
|
@@ -7601,6 +7625,7 @@ var modules = {
|
|
|
7601
7625
|
"reranker/cascade-reranker.js": () => require_cascade_reranker(),
|
|
7602
7626
|
"reranker/embedding-reranker.js": () => require_embedding_reranker(),
|
|
7603
7627
|
"reranker/scoring-reranker.js": () => require_scoring_reranker(),
|
|
7628
|
+
"retrieval/access-fields.js": () => require_access_fields(),
|
|
7604
7629
|
"retrieval/bm25-search.js": () => require_bm25_search(),
|
|
7605
7630
|
"retrieval/hybrid-retriever.js": () => require_hybrid_retriever(),
|
|
7606
7631
|
"retrieval/rank-fusion.js": () => require_rank_fusion(),
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The access fields (`acl`, `requiredRole`) set on a document's top level.
|
|
3
|
+
* Stores keep them on each result, as well as whatever metadata holds, so
|
|
4
|
+
* RetrievalGuard sees a restriction wherever it was set.
|
|
5
|
+
* @param {object} doc
|
|
6
|
+
* @returns {object}
|
|
7
|
+
*/
|
|
8
|
+
export function accessFields(doc: object): object;
|