@devilsdev/rag-core 3.8.0 → 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.8.
|
|
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",
|
|
@@ -1629,10 +1643,10 @@ var require_package = __commonJS({
|
|
|
1629
1643
|
"why-is-node-running": "^3.2.2"
|
|
1630
1644
|
},
|
|
1631
1645
|
dependencies: {
|
|
1632
|
-
"@devilsdev/rag-connectors": "3.8.
|
|
1633
|
-
"@devilsdev/rag-core": "3.8.
|
|
1634
|
-
"@devilsdev/rag-eval": "3.8.
|
|
1635
|
-
"@devilsdev/rag-guardrails": "3.8.
|
|
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",
|
|
1636
1650
|
ajv: "^8.17.1",
|
|
1637
1651
|
axios: "^1.21.0",
|
|
1638
1652
|
chokidar: "^4.0.3",
|
|
@@ -5227,11 +5241,26 @@ var require_chunking_engine = __commonJS({
|
|
|
5227
5241
|
}
|
|
5228
5242
|
});
|
|
5229
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
|
+
|
|
5230
5258
|
// src/retrieval/bm25-search.js
|
|
5231
5259
|
var require_bm25_search = __commonJS({
|
|
5232
5260
|
"src/retrieval/bm25-search.js"(exports2, module2) {
|
|
5233
5261
|
"use strict";
|
|
5234
5262
|
var { EventEmitter } = require("events");
|
|
5263
|
+
var { accessFields } = require_access_fields();
|
|
5235
5264
|
var scoring = require_scoring();
|
|
5236
5265
|
var DEFAULT_CONFIG = { k1: 1.2, b: 0.75 };
|
|
5237
5266
|
var BM25Search = class extends EventEmitter {
|
|
@@ -5320,7 +5349,8 @@ var require_bm25_search = __commonJS({
|
|
|
5320
5349
|
id: doc.id,
|
|
5321
5350
|
score,
|
|
5322
5351
|
content: doc.content || doc.text || "",
|
|
5323
|
-
metadata: doc.metadata || {}
|
|
5352
|
+
metadata: doc.metadata || {},
|
|
5353
|
+
...accessFields(doc)
|
|
5324
5354
|
});
|
|
5325
5355
|
}
|
|
5326
5356
|
results.sort((a, b2) => b2.score - a.score);
|
|
@@ -7285,6 +7315,7 @@ var require_memory_retriever = __commonJS({
|
|
|
7285
7315
|
var { randomBytes } = require("crypto");
|
|
7286
7316
|
var { BaseConnector } = require_base_connector();
|
|
7287
7317
|
var { throwIfAborted } = require_connector_utils();
|
|
7318
|
+
var { accessFields } = require_access_fields();
|
|
7288
7319
|
var DEFAULT_CONFIG = {
|
|
7289
7320
|
maxDocuments: 1e5,
|
|
7290
7321
|
// 'error' rejects a store() that would exceed maxDocuments; 'fifo' evicts
|
|
@@ -7366,7 +7397,8 @@ var require_memory_retriever = __commonJS({
|
|
|
7366
7397
|
this.documents.set(doc.id, {
|
|
7367
7398
|
vector: doc.vector,
|
|
7368
7399
|
metadata: doc.metadata || {},
|
|
7369
|
-
content: doc.content || ""
|
|
7400
|
+
content: doc.content || "",
|
|
7401
|
+
...accessFields(doc)
|
|
7370
7402
|
});
|
|
7371
7403
|
}
|
|
7372
7404
|
if (vectors.length > 0) this.dimensions = dimensions;
|
|
@@ -7424,7 +7456,8 @@ var require_memory_retriever = __commonJS({
|
|
|
7424
7456
|
id,
|
|
7425
7457
|
score,
|
|
7426
7458
|
metadata: doc.metadata,
|
|
7427
|
-
content: doc.content
|
|
7459
|
+
content: doc.content,
|
|
7460
|
+
...accessFields(doc)
|
|
7428
7461
|
});
|
|
7429
7462
|
}
|
|
7430
7463
|
results.sort((a, b) => b.score - a.score);
|
|
@@ -7592,6 +7625,7 @@ var modules = {
|
|
|
7592
7625
|
"reranker/cascade-reranker.js": () => require_cascade_reranker(),
|
|
7593
7626
|
"reranker/embedding-reranker.js": () => require_embedding_reranker(),
|
|
7594
7627
|
"reranker/scoring-reranker.js": () => require_scoring_reranker(),
|
|
7628
|
+
"retrieval/access-fields.js": () => require_access_fields(),
|
|
7595
7629
|
"retrieval/bm25-search.js": () => require_bm25_search(),
|
|
7596
7630
|
"retrieval/hybrid-retriever.js": () => require_hybrid_retriever(),
|
|
7597
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;
|