@devilsdev/rag-pipeline-utils 2.4.5 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ragrc.schema.json +83 -192
- package/CHANGELOG.md +431 -0
- package/README.md +418 -117
- package/SECURITY.md +5 -5
- package/dist/experimental.cjs +2 -0
- package/dist/experimental.d.ts +1 -0
- package/dist/experimental.mjs +5 -0
- package/dist/index.cjs +6442 -1355
- package/dist/index.d.ts +129 -2
- package/dist/index.mjs +1 -1
- package/dist/testing.cjs +2 -0
- package/dist/testing.d.ts +1 -0
- package/dist/testing.mjs +5 -0
- package/dist/types/adapters/ai-sdk.d.ts +53 -0
- package/dist/types/agentic/agentic-pipeline.d.ts +103 -0
- package/dist/types/agentic/iterative-retriever.d.ts +85 -0
- package/dist/types/agentic/query-planner.d.ts +145 -0
- package/dist/types/agentic/self-critique.d.ts +45 -0
- package/dist/types/ai/adaptive-retrieval.d.ts +44 -0
- package/dist/types/ai/federation/federated-learning-coordinator.d.ts +62 -0
- package/dist/types/ai/multimodal-processing.d.ts +32 -0
- package/dist/types/ai/multimodal.d.ts +39 -0
- package/dist/types/ai/retrieval-engine.d.ts +37 -0
- package/dist/types/ai/training/model-training-orchestrator.d.ts +31 -0
- package/dist/types/cache/component-keys.d.ts +7 -0
- package/dist/types/cache/memory-cache.d.ts +54 -0
- package/dist/types/cache/pipeline-cache.d.ts +66 -0
- package/dist/types/cache/redis-cache.d.ts +46 -0
- package/dist/types/chunking/chunking-engine.d.ts +70 -0
- package/dist/types/chunking/strategies/fixed-size.d.ts +17 -0
- package/dist/types/chunking/strategies/recursive.d.ts +20 -0
- package/dist/types/chunking/strategies/semantic.d.ts +19 -0
- package/dist/types/chunking/strategies/sentence.d.ts +13 -0
- package/dist/types/chunking/strategies/structure-aware.d.ts +19 -0
- package/dist/types/citation/citation-tracker.d.ts +64 -0
- package/dist/types/citation/hallucination-detector.d.ts +40 -0
- package/dist/types/citation/source-mapper.d.ts +37 -0
- package/dist/types/connectors/anthropic-connector.d.ts +97 -0
- package/dist/types/connectors/base-connector.d.ts +87 -0
- package/dist/types/connectors/cohere-connector.d.ts +94 -0
- package/dist/types/connectors/connector-utils.d.ts +110 -0
- package/dist/types/connectors/local-embedder.d.ts +95 -0
- package/dist/types/connectors/memory-retriever.d.ts +99 -0
- package/dist/types/connectors/ollama-connector.d.ts +115 -0
- package/dist/types/connectors/openai-connector.d.ts +129 -0
- package/dist/types/connectors/rag-prompt.d.ts +40 -0
- package/dist/types/core/create-pipeline.d.ts +8 -0
- package/dist/types/core/plugin-registry.d.ts +136 -0
- package/dist/types/core/stage-contracts.d.ts +36 -0
- package/dist/types/core/validate-plugin.d.ts +45 -0
- package/dist/types/cost/cost-calculator.d.ts +152 -0
- package/dist/types/cost/cost-tracker.d.ts +126 -0
- package/dist/types/cost/token-budget.d.ts +110 -0
- package/dist/types/dag/core/error-context.d.ts +239 -0
- package/dist/types/dag/core/execution-scheduler.d.ts +191 -0
- package/dist/types/dag/core/topology-validation.d.ts +226 -0
- package/dist/types/dag/dag-engine.d.ts +156 -0
- package/dist/types/dag/dag-node.d.ts +37 -0
- package/dist/types/dashboard/dashboard-generator.d.ts +127 -0
- package/dist/types/dashboard/metrics-aggregator.d.ts +218 -0
- package/dist/types/debug/execution-tracer.d.ts +57 -0
- package/dist/types/debug/trace-inspector.d.ts +31 -0
- package/dist/types/ecosystem/plugin-certification.d.ts +169 -0
- package/dist/types/enterprise/data-governance.d.ts +203 -0
- package/dist/types/enterprise/multi-tenancy.d.ts +137 -0
- package/dist/types/enterprise/sso-integration.d.ts +420 -0
- package/dist/types/evaluate/context-metrics.d.ts +55 -0
- package/dist/types/evaluate/faithfulness.d.ts +41 -0
- package/dist/types/evaluate/groundedness.d.ts +60 -0
- package/dist/types/evaluate/pipeline-evaluator.d.ts +88 -0
- package/dist/types/evaluate/relevance.d.ts +21 -0
- package/dist/types/evaluate/scoring.d.ts +123 -0
- package/dist/types/evaluate/semantic-similarity.d.ts +14 -0
- package/dist/types/experimental.d.ts +15 -0
- package/dist/types/graph/entity-extractor.d.ts +84 -0
- package/dist/types/graph/graph-index.d.ts +49 -0
- package/dist/types/graph/graph-retriever.d.ts +81 -0
- package/dist/types/graph/knowledge-graph.d.ts +129 -0
- package/dist/types/grounding/check-answer.d.ts +101 -0
- package/dist/types/guardrails/guardrails-pipeline.d.ts +63 -0
- package/dist/types/guardrails/injection-detector.d.ts +47 -0
- package/dist/types/guardrails/post-generation-guard.d.ts +61 -0
- package/dist/types/guardrails/pre-retrieval-guard.d.ts +64 -0
- package/dist/types/guardrails/retrieval-guard.d.ts +57 -0
- package/dist/types/mcp/mcp-server.d.ts +85 -0
- package/dist/types/mcp/mcp-tool-builder.d.ts +55 -0
- package/dist/types/reranker/cascade-reranker.d.ts +40 -0
- package/dist/types/reranker/embedding-reranker.d.ts +77 -0
- package/dist/types/reranker/scoring-reranker.d.ts +41 -0
- package/dist/types/retrieval/bm25-search.d.ts +43 -0
- package/dist/types/retrieval/file-vector-store.d.ts +99 -0
- package/dist/types/retrieval/hybrid-retriever.d.ts +35 -0
- package/dist/types/retrieval/rank-fusion.d.ts +10 -0
- package/dist/types/security/jwt-config.d.ts +80 -0
- package/dist/types/security/jwt-validator.d.ts +195 -0
- package/dist/types/security/plugin-sandbox.d.ts +158 -0
- package/dist/types/security/plugin-signature-verifier.d.ts +139 -0
- package/dist/types/security/validator.d.ts +5 -0
- package/dist/types/streaming/embedding-stream.d.ts +65 -0
- package/dist/types/streaming/sse-adapter.d.ts +59 -0
- package/dist/types/streaming/stream-router.d.ts +88 -0
- package/dist/types/streaming/streaming-embedder.d.ts +99 -0
- package/dist/types/streaming/websocket-adapter.d.ts +71 -0
- package/dist/types/templates/scaffold.d.ts +55 -0
- package/dist/types/templates/template-registry.d.ts +63 -0
- package/dist/types/testing.d.ts +168 -0
- package/dist/types/utils/embed-query.d.ts +20 -0
- package/dist/types/utils/logger.d.ts +50 -0
- package/dist/types/utils/rate-limiter.d.ts +66 -0
- package/dist/types/utils/retry.d.ts +27 -0
- package/dist/types/utils/run-abort.d.ts +34 -0
- package/dist/types/utils/secure-logging.d.ts +51 -0
- package/dist/types/utils/structured-logger.d.ts +126 -0
- package/package.json +72 -33
- package/src/adapters/ai-sdk.js +215 -0
- package/src/agentic/agentic-pipeline.js +75 -7
- package/src/agentic/iterative-retriever.js +47 -10
- package/src/agentic/query-planner.js +329 -78
- package/src/cache/component-keys.js +38 -0
- package/src/cache/memory-cache.js +87 -0
- package/src/cache/pipeline-cache.js +260 -0
- package/src/cache/redis-cache.js +83 -0
- package/src/citation/citation-tracker.js +6 -4
- package/src/citation/hallucination-detector.js +2 -2
- package/src/citation/source-mapper.js +15 -28
- package/src/cli/commands/ai.js +106 -0
- package/src/cli/commands/plugin-hub/event-handlers.js +6 -0
- package/src/cli/commands/plugin-hub/hub-commands.js +0 -74
- package/src/cli/commands/plugin-hub/local-commands.js +143 -0
- package/src/cli/commands/plugin-hub.js +114 -49
- package/src/cli/diagnostics/config-checker.js +76 -63
- package/src/cli/diagnostics/environment-checker.js +62 -31
- package/src/cli/diagnostics/plugin-checker.js +36 -89
- package/src/cli/doctor-command.js +39 -5
- package/src/cli/enhanced-cli-commands.js +104 -233
- package/src/cli/handlers/ai-handler.js +364 -0
- package/src/cli/handlers/diagnostics-handler.js +78 -31
- package/src/cli/handlers/ingest-handler.js +28 -22
- package/src/cli/handlers/init-handler.js +148 -25
- package/src/cli/handlers/query-handler.js +203 -25
- package/src/cli/handlers/run-handler.js +16 -167
- package/src/cli/handlers/serve-handler.js +60 -0
- package/src/cli/services/bench-stats.js +54 -0
- package/src/cli/services/benchmark.js +161 -0
- package/src/cli/services/feedback.js +155 -0
- package/src/cli/services/instrument.js +83 -0
- package/src/cli/services/rag-service.js +361 -0
- package/src/cli/shared/cli-utils.js +24 -7
- package/src/cli/shared/config-context.js +21 -0
- package/src/cli/wizard/config-builder.js +81 -0
- package/src/cli/wizard/init-wizard.js +602 -0
- package/src/config/component-factory.js +125 -0
- package/src/config/enhanced-ragrc-schema.js +0 -2
- package/src/config/load-config.js +29 -10
- package/src/config/load-plugin-config.js +46 -2
- package/src/config/validate-schema.js +4 -1
- package/src/connectors/anthropic-connector.js +115 -57
- package/src/connectors/base-connector.js +74 -19
- package/src/connectors/cohere-connector.js +108 -34
- package/src/connectors/connector-utils.js +302 -0
- package/src/connectors/local-embedder.js +63 -5
- package/src/connectors/memory-retriever.js +125 -14
- package/src/connectors/ollama-connector.js +112 -51
- package/src/connectors/openai-connector.js +153 -44
- package/src/connectors/rag-prompt.js +88 -0
- package/src/core/create-pipeline.js +307 -61
- package/src/core/performance/parallel-processor.js +62 -1
- package/src/core/plugin-registry.js +125 -26
- package/src/core/stage-contracts.js +36 -0
- package/src/core/validate-plugin.js +85 -0
- package/src/cost/cost-calculator.js +205 -32
- package/src/debug/execution-tracer.js +14 -4
- package/src/dev/dev-server.js +173 -11
- package/src/dev/hot-reload.js +44 -4
- package/src/ecosystem/plugin-checks.js +181 -0
- package/src/ecosystem/plugin-hub.js +50 -125
- package/src/ecosystem/plugin-installer.js +298 -0
- package/src/ecosystem/plugin-probe.js +127 -0
- package/src/ecosystem/plugin-scanner.js +185 -0
- package/src/ecosystem/tar-extract.js +114 -0
- package/src/enterprise/audit-logging.js +158 -29
- package/src/enterprise/sso-integration.js +716 -228
- package/src/evaluate/context-metrics.js +28 -16
- package/src/evaluate/evaluator.js +3 -3
- package/src/evaluate/faithfulness.js +18 -14
- package/src/evaluate/groundedness.js +43 -12
- package/src/evaluate/pipeline-evaluator.js +35 -8
- package/src/evaluate/scoring.js +251 -3
- package/src/evaluate/semantic-similarity.js +79 -0
- package/src/experimental.js +71 -0
- package/src/grounding/check-answer.js +173 -0
- package/src/guardrails/guardrails-pipeline.js +69 -7
- package/src/guardrails/injection-detector.js +283 -0
- package/src/guardrails/post-generation-guard.js +19 -0
- package/src/guardrails/pre-retrieval-guard.js +36 -36
- package/src/guardrails/retrieval-guard.js +58 -8
- package/src/index.js +58 -1
- package/src/loader/csv-loader.js +3 -2
- package/src/loader/document-reader.js +91 -0
- package/src/loader/html-loader.js +3 -1
- package/src/loader/markdown-loader.js +3 -2
- package/src/reranker/cascade-reranker.js +3 -0
- package/src/reranker/embedding-reranker.js +136 -21
- package/src/reranker/llm-reranker.js +79 -12
- package/src/reranker/scoring-reranker.js +3 -0
- package/src/retrieval/bm25-search.js +12 -6
- package/src/retrieval/file-vector-store.js +241 -0
- package/src/retrieval/hybrid-retriever.js +22 -19
- package/src/security/jwt-config.js +13 -2
- package/src/security/jwt-validator.js +139 -34
- package/src/security/plugin-sandbox.js +18 -1
- package/src/security/plugin-signature-verifier.js +245 -70
- package/src/testing.js +254 -0
- package/src/utils/deprecate.js +69 -0
- package/src/utils/embed-query.js +33 -0
- package/src/utils/input-sanitizer.js +19 -4
- package/src/utils/logger.js +34 -4
- package/src/utils/run-abort.js +102 -0
- package/src/ai/federated-learning.js +0 -211
- package/src/ai/federation.js +0 -71
- package/src/ai/index.js +0 -22
- package/src/ai/model-trainer.js +0 -217
- package/src/ai/model-training.js +0 -202
- package/src/ai/multimodal/multi-modal-processor.js +0 -345
- package/src/ai/orchestrator.js +0 -65
- package/src/ai/retrieval/adaptive-retrieval-engine.js +0 -398
- package/src/cli/commands/ai-ml/adaptive-commands.js +0 -178
- package/src/cli/commands/ai-ml/federated-commands.js +0 -207
- package/src/cli/commands/ai-ml/index.js +0 -17
- package/src/cli/commands/ai-ml/multimodal-commands.js +0 -187
- package/src/cli/commands/ai-ml/shared.js +0 -51
- package/src/cli/commands/ai-ml/training-commands.js +0 -228
- package/src/cli/commands/ai-ml.js +0 -386
- package/src/cli/commands/docs.js +0 -228
- package/src/cli/commands/dx.js +0 -538
- package/src/cli/commands/wizard.js +0 -627
- package/src/cli/input-sanitization-middleware.js +0 -356
- package/src/cli/interactive-wizard.js +0 -373
- package/src/cli/templates/development.template.json +0 -64
- package/src/cli/templates/minimal.template.json +0 -33
- package/src/cli/templates/production.template.json +0 -104
- package/src/cli/templates/testing.template.json +0 -45
- package/src/cli/wizard/configuration.js +0 -148
- package/src/cli/wizard/observability.js +0 -79
- package/src/cli/wizard/performance.js +0 -76
- package/src/cli/wizard/plugin-selection.js +0 -297
- package/src/cli/wizard/preview-save.js +0 -172
- package/src/cli/wizard/project-setup.js +0 -66
- package/src/core/pipeline-factory.js +0 -59
- package/src/dag/enhanced-dag-engine.js +0 -894
- package/src/dx/index.js +0 -40
- package/src/dx/integration-templates.js +0 -662
- package/src/dx/performance-profiler.js +0 -968
- package/src/dx/realtime-debugger.js +0 -755
- package/src/dx/visual-pipeline-builder.js +0 -578
- package/src/ingest.js +0 -59
- package/src/pipeline/pipeline.js +0 -18
- package/src/query.js +0 -117
package/dist/index.d.ts
CHANGED
|
@@ -14,9 +14,39 @@ export interface RagPipelineConfig {
|
|
|
14
14
|
llm?: string | LLMPlugin;
|
|
15
15
|
reranker?: string | RerankerPlugin;
|
|
16
16
|
registry?: PluginRegistry;
|
|
17
|
+
/**
|
|
18
|
+
* Cache query embeddings, retrieval results and answers. `true` caches
|
|
19
|
+
* all three in memory; a CacheBackend (MemoryCache, RedisCache, your own)
|
|
20
|
+
* caches all three in it; or configure each layer.
|
|
21
|
+
*/
|
|
22
|
+
cache?: boolean | CacheBackend | CacheOptions;
|
|
17
23
|
[key: string]: any;
|
|
18
24
|
}
|
|
19
25
|
|
|
26
|
+
/** A cache store: get / set / delete, optionally stats. */
|
|
27
|
+
export interface CacheBackend {
|
|
28
|
+
get(key: string): Promise<unknown | undefined>;
|
|
29
|
+
set(key: string, value: unknown, options?: { ttlSeconds?: number }): Promise<void>;
|
|
30
|
+
delete?(key: string): Promise<void>;
|
|
31
|
+
stats?(): Promise<Record<string, number>>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface CacheOptions {
|
|
35
|
+
embeddings?: boolean | CacheBackend;
|
|
36
|
+
retrieval?: boolean | CacheBackend;
|
|
37
|
+
generation?: boolean | CacheBackend;
|
|
38
|
+
/** Defaults: embeddings 30 days, retrieval 1 hour, generation 24 hours. */
|
|
39
|
+
ttlSeconds?: { embeddings?: number; retrieval?: number; generation?: number };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export type CacheOutcome = "hit" | "miss" | "skip";
|
|
43
|
+
|
|
44
|
+
export interface CacheLayerStats {
|
|
45
|
+
hits: number;
|
|
46
|
+
misses: number;
|
|
47
|
+
skipped: number;
|
|
48
|
+
}
|
|
49
|
+
|
|
20
50
|
export interface PipelineRunOptions {
|
|
21
51
|
query?: string;
|
|
22
52
|
queryVector?: number[];
|
|
@@ -33,11 +63,23 @@ export interface PipelineRunResult {
|
|
|
33
63
|
query?: string;
|
|
34
64
|
results?: any;
|
|
35
65
|
error?: string;
|
|
66
|
+
/** Per-layer cache outcome; present when the pipeline has a cache. */
|
|
67
|
+
cache?: {
|
|
68
|
+
embeddings?: CacheOutcome;
|
|
69
|
+
retrieval?: CacheOutcome;
|
|
70
|
+
generation?: CacheOutcome;
|
|
71
|
+
};
|
|
36
72
|
}
|
|
37
73
|
|
|
38
74
|
export interface Pipeline {
|
|
39
75
|
run(options: PipelineRunOptions): Promise<PipelineRunResult>;
|
|
40
76
|
cleanup(): void;
|
|
77
|
+
/** Hits, misses and skips per cache layer; null without a cache. */
|
|
78
|
+
cacheStats(): {
|
|
79
|
+
embeddings?: CacheLayerStats;
|
|
80
|
+
retrieval?: CacheLayerStats;
|
|
81
|
+
generation?: CacheLayerStats;
|
|
82
|
+
} | null;
|
|
41
83
|
}
|
|
42
84
|
|
|
43
85
|
export interface LoadConfigOptions {
|
|
@@ -258,6 +300,7 @@ export class JWTValidator {
|
|
|
258
300
|
verify(token: string, options?: any): any;
|
|
259
301
|
}
|
|
260
302
|
|
|
303
|
+
/** @deprecated Experimental (simulated or incomplete). Import PluginSandbox from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
261
304
|
export class PluginSandbox {
|
|
262
305
|
constructor(options?: {
|
|
263
306
|
memoryLimit?: number;
|
|
@@ -283,6 +326,7 @@ export function validateInput(input: string, options?: any): { valid: boolean; e
|
|
|
283
326
|
// AI/ML
|
|
284
327
|
// =============================================================================
|
|
285
328
|
|
|
329
|
+
/** @deprecated Experimental (simulated or incomplete). Import MultiModalProcessor from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
286
330
|
export class MultiModalProcessor {
|
|
287
331
|
constructor(options?: any);
|
|
288
332
|
processContent(tenantId: string, content: any): Promise<any>;
|
|
@@ -290,12 +334,14 @@ export class MultiModalProcessor {
|
|
|
290
334
|
crossModalSearch(tenantId: string, query: any): Promise<any>;
|
|
291
335
|
}
|
|
292
336
|
|
|
337
|
+
/** @deprecated Experimental (simulated or incomplete). Import AdaptiveRetrievalEngine from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
293
338
|
export class AdaptiveRetrievalEngine {
|
|
294
339
|
constructor(options?: any);
|
|
295
340
|
retrieveDocuments(tenantId: string, query: string, options?: any): Promise<any>;
|
|
296
341
|
optimizeRetrieval(tenantId: string, performanceData: any): Promise<any>;
|
|
297
342
|
}
|
|
298
343
|
|
|
344
|
+
/** @deprecated Experimental (simulated or incomplete). Import FederatedLearningCoordinator from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
299
345
|
export class FederatedLearningCoordinator {
|
|
300
346
|
constructor(options?: any);
|
|
301
347
|
createSession(config: any): Promise<any>;
|
|
@@ -303,6 +349,7 @@ export class FederatedLearningCoordinator {
|
|
|
303
349
|
aggregate(sessionId: string): Promise<any>;
|
|
304
350
|
}
|
|
305
351
|
|
|
352
|
+
/** @deprecated Experimental (simulated or incomplete). Import ModelTrainingOrchestrator from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
306
353
|
export class ModelTrainingOrchestrator {
|
|
307
354
|
constructor(options?: any);
|
|
308
355
|
createTrainingJob(tenantId: string, config: any): Promise<any>;
|
|
@@ -370,14 +417,19 @@ export class AuditLogger {
|
|
|
370
417
|
logDataModification(event: any): Promise<void>;
|
|
371
418
|
}
|
|
372
419
|
|
|
420
|
+
/** @deprecated Experimental (simulated or incomplete). Import DataGovernance from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
373
421
|
export class DataGovernance {
|
|
374
422
|
constructor(options?: any);
|
|
375
423
|
classifyData(data: any): any;
|
|
376
424
|
enforceRetention(policy: any): Promise<void>;
|
|
377
425
|
}
|
|
378
426
|
|
|
379
|
-
|
|
427
|
+
/** @deprecated Experimental (simulated or incomplete). Import DataGovernanceManager from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
428
|
+
export declare const DataGovernanceManager: typeof DataGovernance;
|
|
429
|
+
/** @deprecated Experimental (simulated or incomplete). Import DataGovernanceManager from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
430
|
+
export type DataGovernanceManager = DataGovernance;
|
|
380
431
|
|
|
432
|
+
/** @deprecated Experimental (simulated or incomplete). Import TenantManager from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
381
433
|
export class TenantManager {
|
|
382
434
|
constructor(options?: any);
|
|
383
435
|
createTenant(config: any): Promise<any>;
|
|
@@ -385,33 +437,39 @@ export class TenantManager {
|
|
|
385
437
|
deleteTenant(tenantId: string): Promise<void>;
|
|
386
438
|
}
|
|
387
439
|
|
|
440
|
+
/** @deprecated Experimental (simulated or incomplete). Import ResourceMonitor from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
388
441
|
export class ResourceMonitor {
|
|
389
442
|
constructor(options?: any);
|
|
390
443
|
getUsage(tenantId: string): any;
|
|
391
444
|
checkQuota(tenantId: string): boolean;
|
|
392
445
|
}
|
|
393
446
|
|
|
447
|
+
/** @deprecated Experimental (simulated or incomplete). Import SSOManager from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
394
448
|
export class SSOManager {
|
|
395
449
|
constructor(options?: any);
|
|
396
450
|
authenticate(provider: string, credentials: any): Promise<any>;
|
|
397
451
|
getSession(sessionId: string): any;
|
|
398
452
|
}
|
|
399
453
|
|
|
454
|
+
/** @deprecated Experimental (simulated or incomplete). Import SAMLProvider from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
400
455
|
export class SAMLProvider {
|
|
401
456
|
constructor(options?: any);
|
|
402
457
|
authenticate(request: any): Promise<any>;
|
|
403
458
|
}
|
|
404
459
|
|
|
460
|
+
/** @deprecated Experimental (simulated or incomplete). Import OAuth2Provider from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
405
461
|
export class OAuth2Provider {
|
|
406
462
|
constructor(options?: any);
|
|
407
463
|
authenticate(request: any): Promise<any>;
|
|
408
464
|
}
|
|
409
465
|
|
|
466
|
+
/** @deprecated Experimental (simulated or incomplete). Import ActiveDirectoryProvider from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
410
467
|
export class ActiveDirectoryProvider {
|
|
411
468
|
constructor(options?: any);
|
|
412
469
|
authenticate(request: any): Promise<any>;
|
|
413
470
|
}
|
|
414
471
|
|
|
472
|
+
/** @deprecated Experimental (simulated or incomplete). Import OIDCProvider from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
415
473
|
export class OIDCProvider {
|
|
416
474
|
constructor(options?: any);
|
|
417
475
|
authenticate(request: any): Promise<any>;
|
|
@@ -434,6 +492,7 @@ export class PluginAnalytics {
|
|
|
434
492
|
getStats(pluginName: string): any;
|
|
435
493
|
}
|
|
436
494
|
|
|
495
|
+
/** @deprecated Experimental (simulated or incomplete). Import PluginCertification from "@devilsdev/rag-pipeline-utils/experimental"; it will be removed from the main entry in the next major release. */
|
|
437
496
|
export class PluginCertification {
|
|
438
497
|
constructor(options?: any);
|
|
439
498
|
certify(pluginName: string): Promise<any>;
|
|
@@ -464,4 +523,72 @@ export class DevServer {
|
|
|
464
523
|
stop(): Promise<void>;
|
|
465
524
|
}
|
|
466
525
|
|
|
467
|
-
export function createDevServer(options?: any): DevServer;
|
|
526
|
+
export function createDevServer(options?: any): DevServer;
|
|
527
|
+
|
|
528
|
+
// =============================================================================
|
|
529
|
+
// Declarations generated from JSDoc (scripts/generate-types.js)
|
|
530
|
+
// =============================================================================
|
|
531
|
+
export { validatePlugin } from "./types/core/validate-plugin";
|
|
532
|
+
export { checkNumericConsistency } from "./types/evaluate/scoring";
|
|
533
|
+
export { extractNumbers } from "./types/evaluate/scoring";
|
|
534
|
+
export { computeFaithfulness } from "./types/evaluate/faithfulness";
|
|
535
|
+
export { computeSemanticSimilarity } from "./types/evaluate/semantic-similarity";
|
|
536
|
+
export { computeAnswerRelevance } from "./types/evaluate/relevance";
|
|
537
|
+
export { computeContextPrecision } from "./types/evaluate/context-metrics";
|
|
538
|
+
export { computeContextRecall } from "./types/evaluate/context-metrics";
|
|
539
|
+
export { computeGroundedness } from "./types/evaluate/groundedness";
|
|
540
|
+
export { PipelineEvaluator } from "./types/evaluate/pipeline-evaluator";
|
|
541
|
+
export { ChunkingEngine } from "./types/chunking/chunking-engine";
|
|
542
|
+
export { CitationTracker } from "./types/citation/citation-tracker";
|
|
543
|
+
export { checkAnswer } from "./types/grounding/check-answer";
|
|
544
|
+
export { normalizeSources } from "./types/grounding/check-answer";
|
|
545
|
+
export { createAiSdkAdapter } from "./types/adapters/ai-sdk";
|
|
546
|
+
export { MemoryCache } from "./types/cache/memory-cache";
|
|
547
|
+
export { RedisCache } from "./types/cache/redis-cache";
|
|
548
|
+
export { mapSentenceToSources } from "./types/citation/source-mapper";
|
|
549
|
+
export { buildIDFWeights } from "./types/citation/source-mapper";
|
|
550
|
+
export { detectHallucinations } from "./types/citation/hallucination-detector";
|
|
551
|
+
export { BM25Search } from "./types/retrieval/bm25-search";
|
|
552
|
+
export { reciprocalRankFusion } from "./types/retrieval/rank-fusion";
|
|
553
|
+
export { HybridRetriever } from "./types/retrieval/hybrid-retriever";
|
|
554
|
+
export { FileVectorStore } from "./types/retrieval/file-vector-store";
|
|
555
|
+
export { PreRetrievalGuard } from "./types/guardrails/pre-retrieval-guard";
|
|
556
|
+
export { detectInjection } from "./types/guardrails/injection-detector";
|
|
557
|
+
export { RetrievalGuard } from "./types/guardrails/retrieval-guard";
|
|
558
|
+
export { PostGenerationGuard } from "./types/guardrails/post-generation-guard";
|
|
559
|
+
export { GuardrailsPipeline } from "./types/guardrails/guardrails-pipeline";
|
|
560
|
+
export { QueryPlanner } from "./types/agentic/query-planner";
|
|
561
|
+
export { IterativeRetriever } from "./types/agentic/iterative-retriever";
|
|
562
|
+
export { SelfCritiqueChecker } from "./types/agentic/self-critique";
|
|
563
|
+
export { AgenticPipeline } from "./types/agentic/agentic-pipeline";
|
|
564
|
+
export { CostCalculator } from "./types/cost/cost-calculator";
|
|
565
|
+
export { PRICING_METADATA } from "./types/cost/cost-calculator";
|
|
566
|
+
export { CostTracker } from "./types/cost/cost-tracker";
|
|
567
|
+
export { TokenBudget } from "./types/cost/token-budget";
|
|
568
|
+
export { ExecutionTracer } from "./types/debug/execution-tracer";
|
|
569
|
+
export { TraceInspector } from "./types/debug/trace-inspector";
|
|
570
|
+
export { MCPServer } from "./types/mcp/mcp-server";
|
|
571
|
+
export { MCPToolBuilder } from "./types/mcp/mcp-tool-builder";
|
|
572
|
+
export { ProjectScaffolder } from "./types/templates/scaffold";
|
|
573
|
+
export { TemplateRegistry } from "./types/templates/template-registry";
|
|
574
|
+
export { SSEAdapter } from "./types/streaming/sse-adapter";
|
|
575
|
+
export { WebSocketAdapter } from "./types/streaming/websocket-adapter";
|
|
576
|
+
export { StreamRouter } from "./types/streaming/stream-router";
|
|
577
|
+
export { BaseConnector } from "./types/connectors/base-connector";
|
|
578
|
+
export { OllamaConnector } from "./types/connectors/ollama-connector";
|
|
579
|
+
export { LocalEmbedder } from "./types/connectors/local-embedder";
|
|
580
|
+
export { MemoryRetriever } from "./types/connectors/memory-retriever";
|
|
581
|
+
export { OpenAIConnector } from "./types/connectors/openai-connector";
|
|
582
|
+
export { AnthropicConnector } from "./types/connectors/anthropic-connector";
|
|
583
|
+
export { CohereConnector } from "./types/connectors/cohere-connector";
|
|
584
|
+
export { StreamingEmbedder } from "./types/streaming/streaming-embedder";
|
|
585
|
+
export { createEmbeddingStream } from "./types/streaming/embedding-stream";
|
|
586
|
+
export { ScoringReranker } from "./types/reranker/scoring-reranker";
|
|
587
|
+
export { EmbeddingReranker } from "./types/reranker/embedding-reranker";
|
|
588
|
+
export { CascadeReranker } from "./types/reranker/cascade-reranker";
|
|
589
|
+
export { KnowledgeGraph } from "./types/graph/knowledge-graph";
|
|
590
|
+
export { EntityExtractor } from "./types/graph/entity-extractor";
|
|
591
|
+
export { GraphRetriever } from "./types/graph/graph-retriever";
|
|
592
|
+
export { GraphIndex } from "./types/graph/graph-index";
|
|
593
|
+
export { DashboardGenerator } from "./types/dashboard/dashboard-generator";
|
|
594
|
+
export { MetricsAggregator } from "./types/dashboard/metrics-aggregator";
|
package/dist/index.mjs
CHANGED
|
@@ -8,6 +8,6 @@ const require = createRequire(import.meta.url);
|
|
|
8
8
|
|
|
9
9
|
const mod = require('./index.cjs');
|
|
10
10
|
|
|
11
|
-
export const { createRagPipeline, createPipeline, loadConfig, loadRagConfig, validateRagrc, normalizeConfig, pluginRegistry, logger, errorFormatter, createError, wrapError, ERROR_CODES, BatchProcessor, RateLimiter, retry, withRetry, ConnectionPoolManager, JWTValidator, PluginSandbox, PluginSignatureVerifier, validateInput, MultiModalProcessor, AdaptiveRetrievalEngine, FederatedLearningCoordinator, ModelTrainingOrchestrator, DAGEngine, DAG, evaluateRagDataset, scoreAnswer, computeBLEU, computeROUGE, computeFaithfulness, computeAnswerRelevance, computeContextPrecision, computeContextRecall, computeGroundedness, PipelineEvaluator, ChunkingEngine, CitationTracker, mapSentenceToSources, buildIDFWeights, detectHallucinations, BM25Search, reciprocalRankFusion, HybridRetriever, PreRetrievalGuard, RetrievalGuard, PostGenerationGuard, GuardrailsPipeline, QueryPlanner, IterativeRetriever, SelfCritiqueChecker, AgenticPipeline, CostCalculator, CostTracker, TokenBudget, ExecutionTracer, TraceInspector, MCPServer, MCPToolBuilder, ProjectScaffolder, TemplateRegistry, SSEAdapter, WebSocketAdapter, StreamRouter, BaseConnector, OllamaConnector, LocalEmbedder, MemoryRetriever, OpenAIConnector, AnthropicConnector, CohereConnector, StreamingEmbedder, createEmbeddingStream, ScoringReranker, EmbeddingReranker, CascadeReranker, KnowledgeGraph, EntityExtractor, GraphRetriever, GraphIndex, DashboardGenerator, MetricsAggregator, ParallelProcessor, eventLogger, metrics, AuditLogger, DataGovernance, DataGovernanceManager, TenantManager, ResourceMonitor, SSOManager, SAMLProvider, OAuth2Provider, ActiveDirectoryProvider, OIDCProvider, PluginHub, PluginAnalytics, PluginCertification, PluginAnalyticsDashboard, HotReloadManager, createHotReloadManager, DevServer, createDevServer } = mod;
|
|
11
|
+
export const { createRagPipeline, createPipeline, loadConfig, loadRagConfig, validateRagrc, normalizeConfig, pluginRegistry, validatePlugin, logger, errorFormatter, createError, wrapError, ERROR_CODES, BatchProcessor, RateLimiter, retry, withRetry, ConnectionPoolManager, JWTValidator, PluginSandbox, PluginSignatureVerifier, validateInput, MultiModalProcessor, AdaptiveRetrievalEngine, FederatedLearningCoordinator, ModelTrainingOrchestrator, DAGEngine, DAG, evaluateRagDataset, scoreAnswer, computeBLEU, computeROUGE, checkNumericConsistency, extractNumbers, computeFaithfulness, computeSemanticSimilarity, computeAnswerRelevance, computeContextPrecision, computeContextRecall, computeGroundedness, PipelineEvaluator, ChunkingEngine, CitationTracker, checkAnswer, normalizeSources, createAiSdkAdapter, MemoryCache, RedisCache, mapSentenceToSources, buildIDFWeights, detectHallucinations, BM25Search, reciprocalRankFusion, HybridRetriever, FileVectorStore, PreRetrievalGuard, detectInjection, RetrievalGuard, PostGenerationGuard, GuardrailsPipeline, QueryPlanner, IterativeRetriever, SelfCritiqueChecker, AgenticPipeline, CostCalculator, PRICING_METADATA, CostTracker, TokenBudget, ExecutionTracer, TraceInspector, MCPServer, MCPToolBuilder, ProjectScaffolder, TemplateRegistry, SSEAdapter, WebSocketAdapter, StreamRouter, BaseConnector, OllamaConnector, LocalEmbedder, MemoryRetriever, OpenAIConnector, AnthropicConnector, CohereConnector, StreamingEmbedder, createEmbeddingStream, ScoringReranker, EmbeddingReranker, CascadeReranker, KnowledgeGraph, EntityExtractor, GraphRetriever, GraphIndex, DashboardGenerator, MetricsAggregator, ParallelProcessor, eventLogger, metrics, AuditLogger, DataGovernance, DataGovernanceManager, TenantManager, ResourceMonitor, SSOManager, SAMLProvider, OAuth2Provider, ActiveDirectoryProvider, OIDCProvider, PluginHub, PluginAnalytics, PluginCertification, PluginAnalyticsDashboard, HotReloadManager, createHotReloadManager, DevServer, createDevServer } = mod;
|
|
12
12
|
|
|
13
13
|
export default mod;
|
package/dist/testing.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./types/testing";
|
package/dist/testing.mjs
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export type AiSdkFunctions = {
|
|
2
|
+
/**
|
|
3
|
+
* - `embed` from 'ai' (needed for an embedder)
|
|
4
|
+
*/
|
|
5
|
+
embed?: Function;
|
|
6
|
+
/**
|
|
7
|
+
* - `embedMany` from 'ai' (batch embedding)
|
|
8
|
+
*/
|
|
9
|
+
embedMany?: Function;
|
|
10
|
+
/**
|
|
11
|
+
* - `generateText` from 'ai' (needed for an llm)
|
|
12
|
+
*/
|
|
13
|
+
generateText?: Function;
|
|
14
|
+
/**
|
|
15
|
+
* - `streamText` from 'ai' (streaming)
|
|
16
|
+
*/
|
|
17
|
+
streamText?: Function;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Wrap AI SDK models as an embedder and an llm for createRagPipeline().
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* import { embed, embedMany, generateText, streamText } from "ai";
|
|
24
|
+
* import { openai } from "@ai-sdk/openai";
|
|
25
|
+
* import { createAiSdkAdapter, createRagPipeline } from "@devilsdev/rag-pipeline-utils";
|
|
26
|
+
*
|
|
27
|
+
* const { embedder, llm } = createAiSdkAdapter({
|
|
28
|
+
* ai: { embed, embedMany, generateText, streamText },
|
|
29
|
+
* embeddingModel: openai.embedding("text-embedding-3-small"),
|
|
30
|
+
* languageModel: openai("gpt-4o-mini"),
|
|
31
|
+
* });
|
|
32
|
+
* const pipeline = createRagPipeline({ embedder, retriever, llm });
|
|
33
|
+
*
|
|
34
|
+
* @param {Object} options
|
|
35
|
+
* @param {AiSdkFunctions} options.ai - Functions imported from 'ai'
|
|
36
|
+
* @param {Object} [options.embeddingModel] - AI SDK embedding model
|
|
37
|
+
* @param {Object} [options.languageModel] - AI SDK language model
|
|
38
|
+
* @param {Object} [options.settings] - Defaults for every text call, e.g.
|
|
39
|
+
* `{ temperature: 0, maxOutputTokens: 512 }`
|
|
40
|
+
* @param {string} [options.systemPrompt] - Replaces the built-in RAG system
|
|
41
|
+
* prompt
|
|
42
|
+
* @returns {{ embedder: Object|null, llm: Object|null }}
|
|
43
|
+
*/
|
|
44
|
+
export function createAiSdkAdapter(options?: {
|
|
45
|
+
ai: AiSdkFunctions;
|
|
46
|
+
embeddingModel?: any;
|
|
47
|
+
languageModel?: any;
|
|
48
|
+
settings?: any;
|
|
49
|
+
systemPrompt?: string;
|
|
50
|
+
}): {
|
|
51
|
+
embedder: any | null;
|
|
52
|
+
llm: any | null;
|
|
53
|
+
};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DAG-based agentic RAG orchestrator with two-phase execution:
|
|
3
|
+
* Phase 1 - Plan: decompose query into sub-queries
|
|
4
|
+
* Phase 2 - Execute: build DAG of retrieve -> merge -> (critique ->) generate
|
|
5
|
+
*
|
|
6
|
+
* @extends EventEmitter
|
|
7
|
+
*/
|
|
8
|
+
export class AgenticPipeline extends EventEmitter<[never]> {
|
|
9
|
+
/**
|
|
10
|
+
* @param {object} [options] - Override default configuration
|
|
11
|
+
* @param {number} [options.maxConcurrency=3] - Max concurrent DAG node execution
|
|
12
|
+
* @param {number} [options.timeout=60000] - Global timeout in ms
|
|
13
|
+
* @param {boolean} [options.enablePlanning=true] - Whether to decompose queries
|
|
14
|
+
* @param {boolean} [options.enableLlmPlanning=false] - Ask the llm for the
|
|
15
|
+
* sub-queries (strictly validated, heuristic fallback); costs one extra
|
|
16
|
+
* llm.generate() call per run
|
|
17
|
+
* @param {boolean} [options.enableCritique=true] - Whether to self-critique answers
|
|
18
|
+
* @param {boolean} [options.enableIterativeRetrieval=false] - Whether to use iterative retrieval
|
|
19
|
+
* @param {number} [options.maxIterations=3] - Max iterations for iterative retrieval
|
|
20
|
+
* @param {number} [options.critiqueThreshold=0.5] - Groundedness threshold for approval
|
|
21
|
+
* @param {object} [options.plannerOptions] - Options forwarded to QueryPlanner
|
|
22
|
+
* @param {object} [options.iterativeOptions] - Options forwarded to IterativeRetriever
|
|
23
|
+
*/
|
|
24
|
+
constructor(options?: {
|
|
25
|
+
maxConcurrency?: number;
|
|
26
|
+
timeout?: number;
|
|
27
|
+
enablePlanning?: boolean;
|
|
28
|
+
enableLlmPlanning?: boolean;
|
|
29
|
+
enableCritique?: boolean;
|
|
30
|
+
enableIterativeRetrieval?: boolean;
|
|
31
|
+
maxIterations?: number;
|
|
32
|
+
critiqueThreshold?: number;
|
|
33
|
+
plannerOptions?: object;
|
|
34
|
+
iterativeOptions?: object;
|
|
35
|
+
});
|
|
36
|
+
config: any;
|
|
37
|
+
planner: QueryPlanner;
|
|
38
|
+
critiqueChecker: SelfCritiqueChecker;
|
|
39
|
+
iterativeRetriever: IterativeRetriever;
|
|
40
|
+
/**
|
|
41
|
+
* Run the full agentic pipeline: plan -> retrieve -> merge -> (critique ->) generate.
|
|
42
|
+
*
|
|
43
|
+
* @param {object} params
|
|
44
|
+
* @param {string} params.query - The user query
|
|
45
|
+
* @param {object} params.retriever - Retriever instance with .retrieve() method
|
|
46
|
+
* @param {object} params.llm - LLM instance with .generate() method
|
|
47
|
+
* @param {Array<number>} [params.queryVector] - Optional pre-computed query vector
|
|
48
|
+
* @param {object} [params.embedder] - Optional embedder; when given, each
|
|
49
|
+
* sub-query is embedded on its own instead of reusing queryVector
|
|
50
|
+
* @param {object} [params.options={}] - Extra options passed to llm.generate()
|
|
51
|
+
* @param {AbortSignal} [params.options.signal] - Cancels the run. The run
|
|
52
|
+
* has its own AbortController (also aborted after `timeout`); its signal
|
|
53
|
+
* is passed to retriever.retrieve({ ..., signal }), embedder.embedQuery /
|
|
54
|
+
* embed(text, { signal }) and llm.generate(query, docs, { ...options,
|
|
55
|
+
* signal }), and no later stage starts once it aborts. The returned
|
|
56
|
+
* promise then rejects with Error('Execution timeout') or
|
|
57
|
+
* Error('Execution aborted').
|
|
58
|
+
* @returns {Promise<{
|
|
59
|
+
* success: boolean,
|
|
60
|
+
* query: string,
|
|
61
|
+
* answer: string,
|
|
62
|
+
* results: Array<object>,
|
|
63
|
+
* critique: object|null,
|
|
64
|
+
* subQueries: Array<object>,
|
|
65
|
+
* metadata: object
|
|
66
|
+
* }>}
|
|
67
|
+
* @throws {Error} If retriever or llm is missing
|
|
68
|
+
*/
|
|
69
|
+
run({ query, retriever, llm, queryVector, embedder, options }: {
|
|
70
|
+
query: string;
|
|
71
|
+
retriever: object;
|
|
72
|
+
llm: object;
|
|
73
|
+
queryVector?: Array<number>;
|
|
74
|
+
embedder?: object;
|
|
75
|
+
options?: {
|
|
76
|
+
signal?: AbortSignal;
|
|
77
|
+
};
|
|
78
|
+
}): Promise<{
|
|
79
|
+
success: boolean;
|
|
80
|
+
query: string;
|
|
81
|
+
answer: string;
|
|
82
|
+
results: Array<object>;
|
|
83
|
+
critique: object | null;
|
|
84
|
+
subQueries: Array<object>;
|
|
85
|
+
metadata: object;
|
|
86
|
+
}>;
|
|
87
|
+
/**
|
|
88
|
+
* @param {object} params - Validated run() parameters
|
|
89
|
+
* @param {object} runAbort - Per-run cancellation (see utils/run-abort)
|
|
90
|
+
* @returns {Promise<object>}
|
|
91
|
+
* @private
|
|
92
|
+
*/
|
|
93
|
+
private _execute;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Default configuration for the AgenticPipeline.
|
|
97
|
+
* @type {object}
|
|
98
|
+
*/
|
|
99
|
+
export const DEFAULT_CONFIG: object;
|
|
100
|
+
import { EventEmitter } from "events";
|
|
101
|
+
import { QueryPlanner } from "./query-planner";
|
|
102
|
+
import { SelfCritiqueChecker } from "./self-critique";
|
|
103
|
+
import { IterativeRetriever } from "./iterative-retriever";
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Iterative retriever that loops: retrieve -> check coverage -> refine -> re-retrieve.
|
|
3
|
+
* Continues until coverage threshold is met or maxIterations is reached.
|
|
4
|
+
*
|
|
5
|
+
* @extends EventEmitter
|
|
6
|
+
*/
|
|
7
|
+
export class IterativeRetriever extends EventEmitter<[never]> {
|
|
8
|
+
/**
|
|
9
|
+
* @param {object} [options] - Override default configuration
|
|
10
|
+
* @param {number} [options.maxIterations=3] - Maximum retrieval iterations
|
|
11
|
+
* @param {number} [options.coverageThreshold=0.6] - Jaccard similarity threshold for convergence
|
|
12
|
+
* @param {object} [options.retryOptions] - Options passed to retry() on each retrieval call
|
|
13
|
+
*/
|
|
14
|
+
constructor(options?: {
|
|
15
|
+
maxIterations?: number;
|
|
16
|
+
coverageThreshold?: number;
|
|
17
|
+
retryOptions?: object;
|
|
18
|
+
});
|
|
19
|
+
config: any;
|
|
20
|
+
/**
|
|
21
|
+
* Merge new results into accumulated results, deduplicating by id.
|
|
22
|
+
* When duplicates exist, keep the one with the higher score.
|
|
23
|
+
*
|
|
24
|
+
* @param {Array<object>} accumulated - Existing accumulated results
|
|
25
|
+
* @param {Array<object>} newResults - Newly retrieved results
|
|
26
|
+
* @returns {Array<object>}
|
|
27
|
+
* @private
|
|
28
|
+
*/
|
|
29
|
+
private _mergeResults;
|
|
30
|
+
/**
|
|
31
|
+
* Compute query coverage against accumulated result contents using Jaccard similarity.
|
|
32
|
+
*
|
|
33
|
+
* @param {string} query - Original query
|
|
34
|
+
* @param {Array<object>} results - Accumulated results
|
|
35
|
+
* @returns {number} Coverage score between 0 and 1
|
|
36
|
+
* @private
|
|
37
|
+
*/
|
|
38
|
+
private _computeCoverage;
|
|
39
|
+
/**
|
|
40
|
+
* Heuristic query refinement: find query tokens missing from results
|
|
41
|
+
* and append them to the original query.
|
|
42
|
+
*
|
|
43
|
+
* @param {string} originalQuery - The original user query
|
|
44
|
+
* @param {Array<object>} results - Accumulated results
|
|
45
|
+
* @returns {string} Refined query
|
|
46
|
+
* @private
|
|
47
|
+
*/
|
|
48
|
+
private _heuristicRefine;
|
|
49
|
+
/**
|
|
50
|
+
* Perform iterative retrieval with coverage checking and query refinement.
|
|
51
|
+
*
|
|
52
|
+
* @param {object} params
|
|
53
|
+
* @param {string} params.query - The search query
|
|
54
|
+
* @param {object} params.retriever - Retriever instance with .retrieve() method
|
|
55
|
+
* @param {object} [params.llm] - Optional LLM for query refinement
|
|
56
|
+
* @param {Array<number>} [params.queryVector] - Optional pre-computed query vector
|
|
57
|
+
* @param {object} [params.embedder] - Optional embedder; when given, each
|
|
58
|
+
* refined query is re-embedded instead of reusing queryVector
|
|
59
|
+
* @param {AbortSignal} [params.signal] - Cancels the loop: passed to
|
|
60
|
+
* retriever.retrieve({ ..., signal }), the embedder and llm.generate(...,
|
|
61
|
+
* { signal }); no further iteration, retry or refinement starts once it
|
|
62
|
+
* has aborted, and the call rejects with the signal's reason
|
|
63
|
+
* @returns {Promise<{results: Array<object>, iterations: number, converged: boolean, coverage: number}>}
|
|
64
|
+
* @throws {Error} If query or retriever is missing
|
|
65
|
+
*/
|
|
66
|
+
retrieve({ query, retriever, llm, queryVector, embedder, signal }: {
|
|
67
|
+
query: string;
|
|
68
|
+
retriever: object;
|
|
69
|
+
llm?: object;
|
|
70
|
+
queryVector?: Array<number>;
|
|
71
|
+
embedder?: object;
|
|
72
|
+
signal?: AbortSignal;
|
|
73
|
+
}): Promise<{
|
|
74
|
+
results: Array<object>;
|
|
75
|
+
iterations: number;
|
|
76
|
+
converged: boolean;
|
|
77
|
+
coverage: number;
|
|
78
|
+
}>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Default configuration for the IterativeRetriever.
|
|
82
|
+
* @type {object}
|
|
83
|
+
*/
|
|
84
|
+
export const DEFAULT_CONFIG: object;
|
|
85
|
+
import { EventEmitter } from "events";
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query decomposition planner. The default heuristic needs no LLM:
|
|
3
|
+
*
|
|
4
|
+
* - splits only at clause/question boundaries: "?" / "." followed by more
|
|
5
|
+
* text, ";", and "and" / "or" / "as well as" (optionally after a comma)
|
|
6
|
+
* when a question word, auxiliary verb or imperative follows;
|
|
7
|
+
* - keeps noun-phrase conjunctions intact ("salt and pepper", "A or B");
|
|
8
|
+
* - expands comparisons ("X vs Y", "compare X and Y", "difference between X
|
|
9
|
+
* and Y") into one sub-query per entity plus the comparison itself.
|
|
10
|
+
*
|
|
11
|
+
* `plan(query, { llm })` can instead ask an LLM for a JSON array of
|
|
12
|
+
* sub-queries (strictly validated, heuristic fallback).
|
|
13
|
+
*
|
|
14
|
+
* @extends EventEmitter
|
|
15
|
+
*/
|
|
16
|
+
export class QueryPlanner extends EventEmitter<[never]> {
|
|
17
|
+
/**
|
|
18
|
+
* @param {object} [options] - Override default configuration
|
|
19
|
+
* @param {number} [options.minComplexityToSplit=2] - Minimum complexity
|
|
20
|
+
* score before splitting at conjunctions; punctuation boundaries and
|
|
21
|
+
* comparisons are always split
|
|
22
|
+
* @param {number} [options.maxSubQueries=5] - Maximum number of sub-queries to produce
|
|
23
|
+
*/
|
|
24
|
+
constructor(options?: {
|
|
25
|
+
minComplexityToSplit?: number;
|
|
26
|
+
maxSubQueries?: number;
|
|
27
|
+
});
|
|
28
|
+
config: any;
|
|
29
|
+
/**
|
|
30
|
+
* Compute the complexity score of a query string.
|
|
31
|
+
*
|
|
32
|
+
* Scoring rules:
|
|
33
|
+
* +1 per question word (who, what, when, where, why, how, which)
|
|
34
|
+
* +1 per conjunction (and, or, also, as well as)
|
|
35
|
+
* +1 if length > 100 characters
|
|
36
|
+
* +1 per semicolon
|
|
37
|
+
* +1 per comma-separated clause (commas - 1 if > 0 commas)
|
|
38
|
+
* +1 per conjunction followed by a question word, auxiliary or
|
|
39
|
+
* imperative ("... and how ...", "... and explain ...")
|
|
40
|
+
*
|
|
41
|
+
* @param {string} query
|
|
42
|
+
* @returns {number}
|
|
43
|
+
* @private
|
|
44
|
+
*/
|
|
45
|
+
private _computeComplexity;
|
|
46
|
+
/**
|
|
47
|
+
* Detect the retrieval strategy for a query fragment.
|
|
48
|
+
*
|
|
49
|
+
* @param {string} text
|
|
50
|
+
* @returns {'factual'|'analytical'|'comparative'|'general'}
|
|
51
|
+
* @private
|
|
52
|
+
*/
|
|
53
|
+
private _detectStrategy;
|
|
54
|
+
/**
|
|
55
|
+
* Split a clause describing a comparison into its entities.
|
|
56
|
+
*
|
|
57
|
+
* @param {string} clause
|
|
58
|
+
* @returns {{ entities: string[], aspect: string|null }|null}
|
|
59
|
+
* @private
|
|
60
|
+
*/
|
|
61
|
+
private _parseComparison;
|
|
62
|
+
/**
|
|
63
|
+
* Heuristic decomposition into sub-query strings.
|
|
64
|
+
*
|
|
65
|
+
* @param {string} query - Trimmed query
|
|
66
|
+
* @param {number} complexity
|
|
67
|
+
* @returns {Array<{subQuery: string, strategy: string}>}
|
|
68
|
+
* @private
|
|
69
|
+
*/
|
|
70
|
+
private _decompose;
|
|
71
|
+
/**
|
|
72
|
+
* Turn sub-query texts into the plan result (dedupe, limit, priorities).
|
|
73
|
+
*
|
|
74
|
+
* @param {Array<{subQuery: string, strategy: string}>} items
|
|
75
|
+
* @param {number} complexity
|
|
76
|
+
* @param {string} originalQuery
|
|
77
|
+
* @param {'heuristic'|'llm'} source
|
|
78
|
+
* @returns {object}
|
|
79
|
+
* @private
|
|
80
|
+
*/
|
|
81
|
+
private _finalize;
|
|
82
|
+
/**
|
|
83
|
+
* Heuristic plan for a trimmed query.
|
|
84
|
+
* @private
|
|
85
|
+
*/
|
|
86
|
+
private _heuristicPlan;
|
|
87
|
+
/**
|
|
88
|
+
* Strictly validate an LLM's sub-query proposal: a JSON array (optionally
|
|
89
|
+
* in a ```json fence) of 1..maxSubQueries non-empty, single-line strings of
|
|
90
|
+
* at most 500 characters. Anything else is rejected.
|
|
91
|
+
*
|
|
92
|
+
* @param {*} raw - Value returned by llm.generate()
|
|
93
|
+
* @returns {string[]|null}
|
|
94
|
+
* @private
|
|
95
|
+
*/
|
|
96
|
+
private _parseLlmSubQueries;
|
|
97
|
+
/**
|
|
98
|
+
* Ask the LLM for sub-queries; fall back to the heuristic plan.
|
|
99
|
+
* @private
|
|
100
|
+
*/
|
|
101
|
+
private _planWithLlm;
|
|
102
|
+
/**
|
|
103
|
+
* Plan query decomposition.
|
|
104
|
+
*
|
|
105
|
+
* Without `options.llm` this is synchronous and returns the plan. With
|
|
106
|
+
* `options.llm` (an object with `generate()`), it returns a Promise of the
|
|
107
|
+
* plan: the LLM is asked for a JSON array of sub-queries, which is strictly
|
|
108
|
+
* validated (see _parseLlmSubQueries); on any failure the heuristic plan is
|
|
109
|
+
* used. `result.source` says which one was used.
|
|
110
|
+
*
|
|
111
|
+
* @param {string} query - The user query to decompose
|
|
112
|
+
* @param {object} [options]
|
|
113
|
+
* @param {{ generate: Function }} [options.llm] - Optional LLM planner
|
|
114
|
+
* @param {AbortSignal} [options.signal] - Passed to llm.generate()
|
|
115
|
+
* @returns {{
|
|
116
|
+
* subQueries: Array<{subQuery: string, strategy: string, priority: number}>,
|
|
117
|
+
* complexity: number,
|
|
118
|
+
* originalQuery: string,
|
|
119
|
+
* source: 'heuristic'|'llm'
|
|
120
|
+
* }|Promise<object>}
|
|
121
|
+
* @throws {Error} If query is not a non-empty string
|
|
122
|
+
* @fires QueryPlanner#planned
|
|
123
|
+
*/
|
|
124
|
+
plan(query: string, options?: {
|
|
125
|
+
llm?: {
|
|
126
|
+
generate: Function;
|
|
127
|
+
};
|
|
128
|
+
signal?: AbortSignal;
|
|
129
|
+
}): {
|
|
130
|
+
subQueries: Array<{
|
|
131
|
+
subQuery: string;
|
|
132
|
+
strategy: string;
|
|
133
|
+
priority: number;
|
|
134
|
+
}>;
|
|
135
|
+
complexity: number;
|
|
136
|
+
originalQuery: string;
|
|
137
|
+
source: "heuristic" | "llm";
|
|
138
|
+
} | Promise<object>;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Default configuration for the QueryPlanner.
|
|
142
|
+
* @type {object}
|
|
143
|
+
*/
|
|
144
|
+
export const DEFAULT_CONFIG: object;
|
|
145
|
+
import { EventEmitter } from "events";
|