@vibe-agent-toolkit/rag 0.1.13 → 0.1.14

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.
Files changed (38) hide show
  1. package/dist/chunking/chunk-resource.d.ts +3 -1
  2. package/dist/chunking/chunk-resource.d.ts.map +1 -1
  3. package/dist/chunking/chunk-resource.js +5 -2
  4. package/dist/chunking/chunk-resource.js.map +1 -1
  5. package/dist/embedding-providers/index.d.ts +1 -0
  6. package/dist/embedding-providers/index.d.ts.map +1 -1
  7. package/dist/embedding-providers/index.js +1 -0
  8. package/dist/embedding-providers/index.js.map +1 -1
  9. package/dist/embedding-providers/onnx-embedding-provider.d.ts +96 -0
  10. package/dist/embedding-providers/onnx-embedding-provider.d.ts.map +1 -0
  11. package/dist/embedding-providers/onnx-embedding-provider.js +179 -0
  12. package/dist/embedding-providers/onnx-embedding-provider.js.map +1 -0
  13. package/dist/embedding-providers/onnx-utils.d.ts +104 -0
  14. package/dist/embedding-providers/onnx-utils.d.ts.map +1 -0
  15. package/dist/embedding-providers/onnx-utils.js +348 -0
  16. package/dist/embedding-providers/onnx-utils.js.map +1 -0
  17. package/dist/embedding-providers/transformers-embedding-provider.d.ts +2 -0
  18. package/dist/embedding-providers/transformers-embedding-provider.d.ts.map +1 -1
  19. package/dist/embedding-providers/transformers-embedding-provider.js +18 -5
  20. package/dist/embedding-providers/transformers-embedding-provider.js.map +1 -1
  21. package/dist/index.d.ts +2 -2
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/interfaces/index.d.ts +1 -1
  26. package/dist/interfaces/index.d.ts.map +1 -1
  27. package/dist/interfaces/provider.d.ts +35 -0
  28. package/dist/interfaces/provider.d.ts.map +1 -1
  29. package/dist/schemas/admin.d.ts +2 -2
  30. package/dist/schemas/chunk.d.ts +6 -0
  31. package/dist/schemas/chunk.d.ts.map +1 -1
  32. package/dist/schemas/core-chunk.d.ts +6 -0
  33. package/dist/schemas/core-chunk.d.ts.map +1 -1
  34. package/dist/schemas/core-chunk.js +3 -0
  35. package/dist/schemas/core-chunk.js.map +1 -1
  36. package/dist/schemas/query.d.ts +10 -0
  37. package/dist/schemas/query.d.ts.map +1 -1
  38. package/package.json +6 -5
@@ -4,6 +4,7 @@
4
4
  * Chunks ResourceMetadata using hybrid heading-based + token-aware strategy.
5
5
  */
6
6
  import type { ResourceMetadata } from '@vibe-agent-toolkit/resources';
7
+ import type { TokenCounter } from '../interfaces/token-counter.js';
7
8
  import type { RAGChunk } from '../schemas/chunk.js';
8
9
  import type { ChunkingConfig, ChunkingResult, RawChunk } from './types.js';
9
10
  /**
@@ -40,7 +41,8 @@ export declare function chunkResource(resource: ChunkableResource, config: Chunk
40
41
  * @param resource - Source chunkable resource with frontmatter
41
42
  * @param embeddings - Embedding array for each chunk
42
43
  * @param embeddingModel - Model used for embeddings
44
+ * @param tokenCounter - Optional token counter to compute token counts (defaults to 0 if not provided)
43
45
  * @returns Array of complete RAGChunks
44
46
  */
45
- export declare function enrichChunks(rawChunks: RawChunk[], resource: ChunkableResource, embeddings: number[][], embeddingModel: string): RAGChunk[];
47
+ export declare function enrichChunks(rawChunks: RawChunk[], resource: ChunkableResource, embeddings: number[][], embeddingModel: string, tokenCounter?: TokenCounter): RAGChunk[];
46
48
  //# sourceMappingURL=chunk-resource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-resource.d.ts","sourceRoot":"","sources":["../../src/chunking/chunk-resource.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAe,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEnF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3E;;;;;GAKG;AACH,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACzD,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,cAAc,GACrB,cAAc,CAqEhB;AA+DD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,QAAQ,EAAE,EACrB,QAAQ,EAAE,iBAAiB,EAC3B,UAAU,EAAE,MAAM,EAAE,EAAE,EACtB,cAAc,EAAE,MAAM,GACrB,QAAQ,EAAE,CA6BZ"}
1
+ {"version":3,"file":"chunk-resource.d.ts","sourceRoot":"","sources":["../../src/chunking/chunk-resource.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAe,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3E;;;;;GAKG;AACH,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACzD,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,cAAc,GACrB,cAAc,CAqEhB;AA+DD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,QAAQ,EAAE,EACrB,QAAQ,EAAE,iBAAiB,EAC3B,UAAU,EAAE,MAAM,EAAE,EAAE,EACtB,cAAc,EAAE,MAAM,EACtB,YAAY,CAAC,EAAE,YAAY,GAC1B,QAAQ,EAAE,CA+BZ"}
@@ -137,9 +137,10 @@ function buildHeadingPath(headings, currentIndex) {
137
137
  * @param resource - Source chunkable resource with frontmatter
138
138
  * @param embeddings - Embedding array for each chunk
139
139
  * @param embeddingModel - Model used for embeddings
140
+ * @param tokenCounter - Optional token counter to compute token counts (defaults to 0 if not provided)
140
141
  * @returns Array of complete RAGChunks
141
142
  */
142
- export function enrichChunks(rawChunks, resource, embeddings, embeddingModel) {
143
+ export function enrichChunks(rawChunks, resource, embeddings, embeddingModel, tokenCounter) {
143
144
  const enrichedChunks = rawChunks.map((raw, index) => {
144
145
  const chunkId = generateChunkId(resource.id, index);
145
146
  const contentHash = generateContentHash(raw.content);
@@ -148,7 +149,9 @@ export function enrichChunks(rawChunks, resource, embeddings, embeddingModel) {
148
149
  resourceId: resource.id,
149
150
  content: raw.content,
150
151
  contentHash,
151
- tokenCount: 0, // Will be set by caller
152
+ tokenCount: tokenCounter ? tokenCounter.count(raw.content) : 0,
153
+ chunkIndex: index,
154
+ totalChunks: rawChunks.length,
152
155
  headingPath: raw.headingPath,
153
156
  headingLevel: raw.headingLevel,
154
157
  startLine: raw.startLine,
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-resource.js","sourceRoot":"","sources":["../../src/chunking/chunk-resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chunk-resource.js","sourceRoot":"","sources":["../../src/chunking/chunk-resource.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,5 @@
5
5
  */
6
6
  export { TransformersEmbeddingProvider, type TransformersEmbeddingConfig, } from './transformers-embedding-provider.js';
7
7
  export { OpenAIEmbeddingProvider, type OpenAIEmbeddingConfig, } from './openai-embedding-provider.js';
8
+ export { OnnxEmbeddingProvider, type OnnxEmbeddingConfig, } from './onnx-embedding-provider.js';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embedding-providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,6BAA6B,EAC7B,KAAK,2BAA2B,GACjC,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,uBAAuB,EACvB,KAAK,qBAAqB,GAC3B,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embedding-providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,6BAA6B,EAC7B,KAAK,2BAA2B,GACjC,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,uBAAuB,EACvB,KAAK,qBAAqB,GAC3B,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,qBAAqB,EACrB,KAAK,mBAAmB,GACzB,MAAM,8BAA8B,CAAC"}
@@ -5,4 +5,5 @@
5
5
  */
6
6
  export { TransformersEmbeddingProvider, } from './transformers-embedding-provider.js';
7
7
  export { OpenAIEmbeddingProvider, } from './openai-embedding-provider.js';
8
+ export { OnnxEmbeddingProvider, } from './onnx-embedding-provider.js';
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embedding-providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,6BAA6B,GAE9B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,uBAAuB,GAExB,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embedding-providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,6BAA6B,GAE9B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,uBAAuB,GAExB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,qBAAqB,GAEtB,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * ONNX Embedding Provider
3
+ *
4
+ * Uses onnxruntime-node for native ONNX inference of embedding models.
5
+ * No API key required, runs entirely in Node.js with native performance.
6
+ *
7
+ * Requires optional dependency: npm install onnxruntime-node
8
+ *
9
+ * Features:
10
+ * - Pure TypeScript WordPiece tokenizer (no native tokenizer dependency)
11
+ * - Auto-downloads models from HuggingFace CDN
12
+ * - Batched inference for efficient multi-text embedding
13
+ * - L2-normalized output for cosine similarity
14
+ */
15
+ import type { EmbeddingProvider } from '../interfaces/embedding.js';
16
+ /**
17
+ * Configuration for OnnxEmbeddingProvider
18
+ */
19
+ export interface OnnxEmbeddingConfig {
20
+ /** HuggingFace model ID (default: 'sentence-transformers/all-MiniLM-L6-v2') */
21
+ model?: string;
22
+ /** Embedding dimensions (default: 384) */
23
+ dimensions?: number;
24
+ /** Path to pre-downloaded model directory containing model.onnx and vocab.txt (optional) */
25
+ modelPath?: string;
26
+ /** Cache directory for auto-downloaded models (default: ~/.cache/vat-onnx-models) */
27
+ cacheDir?: string;
28
+ /** ONNX Runtime execution providers to try (default: let onnxruntime-node auto-detect) */
29
+ executionProviders?: string[];
30
+ /** Max sequence length for tokenization (default: 256) */
31
+ maxSequenceLength?: number;
32
+ }
33
+ /**
34
+ * OnnxEmbeddingProvider
35
+ *
36
+ * Local embedding generation using ONNX Runtime for native inference.
37
+ * Default model: sentence-transformers/all-MiniLM-L6-v2 (384 dimensions)
38
+ *
39
+ * Benefits:
40
+ * - No API key required
41
+ * - Native C++ inference performance via onnxruntime-node
42
+ * - Pure TypeScript tokenizer (no native tokenizer dependency)
43
+ * - Auto-downloads models from HuggingFace
44
+ * - Batched inference support
45
+ * - Platform-aware execution provider selection
46
+ *
47
+ * Note: First run downloads model files (~80MB for all-MiniLM-L6-v2 ONNX)
48
+ */
49
+ export declare class OnnxEmbeddingProvider implements EmbeddingProvider {
50
+ readonly name = "onnx";
51
+ readonly model: string;
52
+ readonly dimensions: number;
53
+ private readonly configModelPath;
54
+ private readonly cacheDir;
55
+ private readonly executionProviders;
56
+ private readonly maxSequenceLength;
57
+ private initPromise;
58
+ /**
59
+ * Create OnnxEmbeddingProvider
60
+ *
61
+ * @param config - Optional configuration
62
+ */
63
+ constructor(config?: OnnxEmbeddingConfig);
64
+ /**
65
+ * Initialize the ONNX session and tokenizer.
66
+ *
67
+ * Uses a single promise to avoid race conditions when multiple
68
+ * embed calls happen concurrently.
69
+ */
70
+ private initialize;
71
+ /**
72
+ * Load the ONNX model and tokenizer.
73
+ *
74
+ * If modelPath is provided, uses it directly. Otherwise, ensures
75
+ * model files are downloaded to the cache directory.
76
+ */
77
+ private loadModel;
78
+ /**
79
+ * Embed a single text chunk
80
+ *
81
+ * @param text - Text to embed
82
+ * @returns Normalized vector embedding
83
+ */
84
+ embed(text: string): Promise<number[]>;
85
+ /**
86
+ * Embed multiple text chunks efficiently using batched inference.
87
+ *
88
+ * Tokenizes all texts, creates batched ONNX tensors, runs a single
89
+ * inference call, then applies mean pooling and L2 normalization.
90
+ *
91
+ * @param texts - Array of texts to embed
92
+ * @returns Array of normalized vector embeddings
93
+ */
94
+ embedBatch(texts: string[]): Promise<number[][]>;
95
+ }
96
+ //# sourceMappingURL=onnx-embedding-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onnx-embedding-provider.d.ts","sourceRoot":"","sources":["../../src/embedding-providers/onnx-embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AASpE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0FAA0F;IAC1F,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AA2FD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IAC7D,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAuB;IAC1D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAE3C,OAAO,CAAC,WAAW,CAAqC;IAExD;;;;OAIG;gBACS,MAAM,GAAE,mBAAwB;IAS5C;;;;;OAKG;YACW,UAAU;IAKxB;;;;;OAKG;YACW,SAAS;IAyBvB;;;;;OAKG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAU5C;;;;;;;;OAQG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CA6CvD"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * ONNX Embedding Provider
3
+ *
4
+ * Uses onnxruntime-node for native ONNX inference of embedding models.
5
+ * No API key required, runs entirely in Node.js with native performance.
6
+ *
7
+ * Requires optional dependency: npm install onnxruntime-node
8
+ *
9
+ * Features:
10
+ * - Pure TypeScript WordPiece tokenizer (no native tokenizer dependency)
11
+ * - Auto-downloads models from HuggingFace CDN
12
+ * - Batched inference for efficient multi-text embedding
13
+ * - L2-normalized output for cosine similarity
14
+ */
15
+ import { homedir } from 'node:os';
16
+ import { join } from 'node:path';
17
+ import { BertTokenizer, ensureModelFiles, l2Normalize, meanPooling, } from './onnx-utils.js';
18
+ /**
19
+ * Lazily import onnxruntime-node with a clear error message.
20
+ */
21
+ async function loadOnnxRuntime() {
22
+ try {
23
+ const ort = await import('onnxruntime-node');
24
+ return ort;
25
+ }
26
+ catch {
27
+ throw new Error('onnxruntime-node is not installed. Install with: npm install onnxruntime-node');
28
+ }
29
+ }
30
+ /**
31
+ * Build batched ONNX tensors from tokenizer output.
32
+ *
33
+ * Creates int64 tensors for input_ids and attention_mask with
34
+ * shape [batchSize, sequenceLength].
35
+ */
36
+ function createBatchTensors(ort, inputIds, attentionMask, batchSize, sequenceLength) {
37
+ const flatInputIds = new BigInt64Array(batchSize * sequenceLength);
38
+ const flatMask = new BigInt64Array(batchSize * sequenceLength);
39
+ for (let batch = 0; batch < batchSize; batch++) {
40
+ const batchIds = inputIds[batch];
41
+ const batchMask = attentionMask[batch];
42
+ if (!batchIds || !batchMask) {
43
+ continue;
44
+ }
45
+ for (let seq = 0; seq < sequenceLength; seq++) {
46
+ const index = batch * sequenceLength + seq;
47
+ flatInputIds[index] = BigInt(batchIds[seq] ?? 0);
48
+ flatMask[index] = BigInt(batchMask[seq] ?? 0);
49
+ }
50
+ }
51
+ const dims = [batchSize, sequenceLength];
52
+ // token_type_ids is all zeros for single-segment inputs (standard for embedding models)
53
+ const flatTokenTypeIds = new BigInt64Array(batchSize * sequenceLength);
54
+ return {
55
+ inputIdsTensor: new ort.Tensor('int64', flatInputIds, dims),
56
+ attentionMaskTensor: new ort.Tensor('int64', flatMask, dims),
57
+ tokenTypeIdsTensor: new ort.Tensor('int64', flatTokenTypeIds, dims),
58
+ };
59
+ }
60
+ /**
61
+ * OnnxEmbeddingProvider
62
+ *
63
+ * Local embedding generation using ONNX Runtime for native inference.
64
+ * Default model: sentence-transformers/all-MiniLM-L6-v2 (384 dimensions)
65
+ *
66
+ * Benefits:
67
+ * - No API key required
68
+ * - Native C++ inference performance via onnxruntime-node
69
+ * - Pure TypeScript tokenizer (no native tokenizer dependency)
70
+ * - Auto-downloads models from HuggingFace
71
+ * - Batched inference support
72
+ * - Platform-aware execution provider selection
73
+ *
74
+ * Note: First run downloads model files (~80MB for all-MiniLM-L6-v2 ONNX)
75
+ */
76
+ export class OnnxEmbeddingProvider {
77
+ name = 'onnx';
78
+ model;
79
+ dimensions;
80
+ configModelPath;
81
+ cacheDir;
82
+ executionProviders;
83
+ maxSequenceLength;
84
+ initPromise = null;
85
+ /**
86
+ * Create OnnxEmbeddingProvider
87
+ *
88
+ * @param config - Optional configuration
89
+ */
90
+ constructor(config = {}) {
91
+ this.model = config.model ?? 'sentence-transformers/all-MiniLM-L6-v2';
92
+ this.dimensions = config.dimensions ?? 384;
93
+ this.configModelPath = config.modelPath;
94
+ this.cacheDir = config.cacheDir ?? join(homedir(), '.cache', 'vat-onnx-models');
95
+ this.executionProviders = config.executionProviders;
96
+ this.maxSequenceLength = config.maxSequenceLength ?? 256;
97
+ }
98
+ /**
99
+ * Initialize the ONNX session and tokenizer.
100
+ *
101
+ * Uses a single promise to avoid race conditions when multiple
102
+ * embed calls happen concurrently.
103
+ */
104
+ async initialize() {
105
+ this.initPromise ??= this.loadModel();
106
+ return this.initPromise;
107
+ }
108
+ /**
109
+ * Load the ONNX model and tokenizer.
110
+ *
111
+ * If modelPath is provided, uses it directly. Otherwise, ensures
112
+ * model files are downloaded to the cache directory.
113
+ */
114
+ async loadModel() {
115
+ const ort = await loadOnnxRuntime();
116
+ let modelPath;
117
+ let vocabPath;
118
+ if (this.configModelPath) {
119
+ modelPath = join(this.configModelPath, 'model.onnx');
120
+ vocabPath = join(this.configModelPath, 'vocab.txt');
121
+ }
122
+ else {
123
+ const files = await ensureModelFiles(this.model, this.cacheDir);
124
+ modelPath = files.modelPath;
125
+ vocabPath = files.vocabPath;
126
+ }
127
+ const sessionOptions = this.executionProviders
128
+ ? { executionProviders: this.executionProviders }
129
+ : undefined;
130
+ const session = await ort.InferenceSession.create(modelPath, sessionOptions);
131
+ const tokenizer = await BertTokenizer.fromVocabFile(vocabPath);
132
+ return { session, tokenizer };
133
+ }
134
+ /**
135
+ * Embed a single text chunk
136
+ *
137
+ * @param text - Text to embed
138
+ * @returns Normalized vector embedding
139
+ */
140
+ async embed(text) {
141
+ const [result] = await this.embedBatch([text]);
142
+ if (!result) {
143
+ throw new Error('ONNX inference returned no embeddings');
144
+ }
145
+ return result;
146
+ }
147
+ /**
148
+ * Embed multiple text chunks efficiently using batched inference.
149
+ *
150
+ * Tokenizes all texts, creates batched ONNX tensors, runs a single
151
+ * inference call, then applies mean pooling and L2 normalization.
152
+ *
153
+ * @param texts - Array of texts to embed
154
+ * @returns Array of normalized vector embeddings
155
+ */
156
+ async embedBatch(texts) {
157
+ if (texts.length === 0) {
158
+ return [];
159
+ }
160
+ const { session, tokenizer } = await this.initialize();
161
+ const ort = await loadOnnxRuntime();
162
+ const { inputIds, attentionMask, maxLen } = tokenizer.tokenizeBatch(texts, this.maxSequenceLength);
163
+ const batchSize = texts.length;
164
+ const { inputIdsTensor, attentionMaskTensor, tokenTypeIdsTensor } = createBatchTensors(ort, inputIds, attentionMask, batchSize, maxLen);
165
+ const outputs = await session.run({
166
+ input_ids: inputIdsTensor,
167
+ attention_mask: attentionMaskTensor,
168
+ token_type_ids: tokenTypeIdsTensor,
169
+ });
170
+ const lastHiddenState = outputs['last_hidden_state'];
171
+ if (!lastHiddenState) {
172
+ throw new Error('ONNX model did not return last_hidden_state output');
173
+ }
174
+ const hiddenData = lastHiddenState.data;
175
+ const pooled = meanPooling(hiddenData, attentionMask, batchSize, maxLen, this.dimensions);
176
+ return pooled.map((vector) => l2Normalize(vector));
177
+ }
178
+ }
179
+ //# sourceMappingURL=onnx-embedding-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onnx-embedding-provider.js","sourceRoot":"","sources":["../../src/embedding-providers/onnx-embedding-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * ONNX Embedding Utilities
3
+ *
4
+ * Pure TypeScript utilities for ONNX-based embedding inference:
5
+ * - WordPiece tokenizer (no native dependencies)
6
+ * - Mean pooling and L2 normalization
7
+ * - HuggingFace model file downloader
8
+ */
9
+ /** Output of a single tokenization call */
10
+ export interface TokenizerOutput {
11
+ inputIds: number[];
12
+ attentionMask: number[];
13
+ }
14
+ /** Batch tokenization result with padding info */
15
+ export interface BatchTokenizerOutput {
16
+ inputIds: number[][];
17
+ attentionMask: number[][];
18
+ maxLen: number;
19
+ }
20
+ /**
21
+ * A pure TypeScript WordPiece tokenizer for BERT-style models.
22
+ *
23
+ * Loads vocabulary from a vocab.txt file and performs basic BERT
24
+ * preprocessing: lowercase, strip accents, split on whitespace
25
+ * and punctuation, then apply the WordPiece algorithm.
26
+ */
27
+ export declare class BertTokenizer {
28
+ private readonly vocab;
29
+ private constructor();
30
+ /**
31
+ * Create a tokenizer from a vocab.txt file.
32
+ *
33
+ * The file should contain one token per line, where the line number
34
+ * (0-indexed) corresponds to the token ID.
35
+ *
36
+ * @param vocabPath - Absolute path to vocab.txt
37
+ * @returns Initialized BertTokenizer
38
+ */
39
+ static fromVocabFile(vocabPath: string): Promise<BertTokenizer>;
40
+ /**
41
+ * Tokenize a single text string.
42
+ *
43
+ * Applies BERT preprocessing (lowercase, strip accents, split on
44
+ * punctuation), then WordPiece tokenization. Adds [CLS] and [SEP]
45
+ * special tokens. Truncates to maxLength if necessary.
46
+ *
47
+ * @param text - Input text
48
+ * @param maxLength - Maximum sequence length including special tokens (default: 256)
49
+ * @returns Token IDs and attention mask
50
+ */
51
+ tokenize(text: string, maxLength?: number): TokenizerOutput;
52
+ /**
53
+ * Tokenize a batch of texts with padding to the longest sequence.
54
+ *
55
+ * All sequences are padded to the same length so they can be
56
+ * combined into a single batched tensor for ONNX inference.
57
+ *
58
+ * @param texts - Array of input texts
59
+ * @param maxLength - Maximum sequence length including special tokens (default: 256)
60
+ * @returns Padded token IDs, attention masks, and the padded sequence length
61
+ */
62
+ tokenizeBatch(texts: string[], maxLength?: number): BatchTokenizerOutput;
63
+ }
64
+ /**
65
+ * Apply mean pooling to the last hidden state of a transformer model.
66
+ *
67
+ * Weights each token embedding by its attention mask value (0 or 1) so
68
+ * that padding tokens are excluded from the mean. Returns one embedding
69
+ * vector per batch item.
70
+ *
71
+ * @param lastHiddenState - Raw model output, shape [batch, seq, dim], as Float32Array
72
+ * @param attentionMasks - Attention masks for each batch item
73
+ * @param batchSize - Number of items in the batch
74
+ * @param sequenceLength - Padded sequence length
75
+ * @param embeddingDim - Embedding dimensionality (e.g. 384)
76
+ * @returns Array of embedding vectors (one per batch item)
77
+ */
78
+ export declare function meanPooling(lastHiddenState: Float32Array, attentionMasks: number[][], batchSize: number, sequenceLength: number, embeddingDim: number): number[][];
79
+ /**
80
+ * Normalize a vector to unit length using L2 (Euclidean) norm.
81
+ *
82
+ * If the vector has zero magnitude, returns the vector unchanged.
83
+ *
84
+ * @param vector - Input vector
85
+ * @returns Unit-length vector
86
+ */
87
+ export declare function l2Normalize(vector: number[]): number[];
88
+ /**
89
+ * Ensure that model.onnx and vocab.txt files are available locally.
90
+ *
91
+ * Downloads from HuggingFace CDN if the files are not already cached.
92
+ * Uses the pattern:
93
+ * https://huggingface.co/{modelId}/resolve/main/onnx/model.onnx
94
+ * https://huggingface.co/{modelId}/resolve/main/vocab.txt
95
+ *
96
+ * @param modelId - HuggingFace model ID (e.g. 'sentence-transformers/all-MiniLM-L6-v2')
97
+ * @param cacheDir - Local directory for cached model files
98
+ * @returns Paths to the model and vocab files
99
+ */
100
+ export declare function ensureModelFiles(modelId: string, cacheDir: string): Promise<{
101
+ modelPath: string;
102
+ vocabPath: string;
103
+ }>;
104
+ //# sourceMappingURL=onnx-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onnx-utils.d.ts","sourceRoot":"","sources":["../../src/embedding-providers/onnx-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,kDAAkD;AAClD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AA+HD;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8B;IAEpD,OAAO;IAIP;;;;;;;;OAQG;WACU,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAOrE;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,eAAe;IA6BxD;;;;;;;;;OASG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,SAAM,GAAG,oBAAoB;CAmBtE;AA+CD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CACzB,eAAe,EAAE,YAAY,EAC7B,cAAc,EAAE,MAAM,EAAE,EAAE,EAC1B,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,EAAE,CAiBZ;AAMD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAatD;AA0CD;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAyBnD"}
@@ -0,0 +1,348 @@
1
+ /**
2
+ * ONNX Embedding Utilities
3
+ *
4
+ * Pure TypeScript utilities for ONNX-based embedding inference:
5
+ * - WordPiece tokenizer (no native dependencies)
6
+ * - Mean pooling and L2 normalization
7
+ * - HuggingFace model file downloader
8
+ */
9
+ import { readFile, stat, mkdir, writeFile } from 'node:fs/promises';
10
+ import { dirname, join } from 'node:path';
11
+ /** Special token IDs for BERT-style models */
12
+ const SPECIAL_TOKENS = {
13
+ CLS: 101,
14
+ SEP: 102,
15
+ UNK: 100,
16
+ PAD: 0,
17
+ };
18
+ /**
19
+ * Strip accents from a string using Unicode NFD normalization.
20
+ *
21
+ * Decomposes characters into base + combining marks, then removes the
22
+ * combining diacritical marks (Unicode category Mn, range U+0300-U+036F).
23
+ */
24
+ function stripAccents(text) {
25
+ return text.normalize('NFD').replaceAll(/[\u0300-\u036F]/g, '');
26
+ }
27
+ /**
28
+ * Split text on whitespace and punctuation boundaries.
29
+ *
30
+ * Punctuation characters become individual tokens. Whitespace is consumed
31
+ * as a delimiter. All other characters are grouped into word tokens.
32
+ */
33
+ function splitOnPunctuation(text) {
34
+ const tokens = [];
35
+ let current = '';
36
+ for (const char of text) {
37
+ if (/\s/.test(char)) {
38
+ if (current.length > 0) {
39
+ tokens.push(current);
40
+ current = '';
41
+ }
42
+ }
43
+ else if (/\p{P}/u.test(char)) {
44
+ if (current.length > 0) {
45
+ tokens.push(current);
46
+ current = '';
47
+ }
48
+ tokens.push(char);
49
+ }
50
+ else {
51
+ current += char;
52
+ }
53
+ }
54
+ if (current.length > 0) {
55
+ tokens.push(current);
56
+ }
57
+ return tokens;
58
+ }
59
+ /**
60
+ * Apply the WordPiece algorithm to a single word.
61
+ *
62
+ * Attempts to find the longest prefix in the vocabulary, then iterates
63
+ * with "##" prefixed subwords. Falls back to [UNK] if no decomposition
64
+ * is possible.
65
+ */
66
+ function wordPieceTokenize(word, vocab) {
67
+ const ids = [];
68
+ let start = 0;
69
+ while (start < word.length) {
70
+ let end = word.length;
71
+ let foundId;
72
+ while (start < end) {
73
+ const substr = start === 0 ? word.slice(0, end) : `##${word.slice(start, end)}`;
74
+ const vocabId = vocab.get(substr);
75
+ if (vocabId !== undefined) {
76
+ foundId = vocabId;
77
+ break;
78
+ }
79
+ end--;
80
+ }
81
+ if (foundId === undefined) {
82
+ return [SPECIAL_TOKENS.UNK];
83
+ }
84
+ ids.push(foundId);
85
+ start = end;
86
+ }
87
+ return ids;
88
+ }
89
+ /**
90
+ * Pad an array of numbers to a target length with a pad value.
91
+ */
92
+ function padArray(source, targetLength, padValue) {
93
+ if (source.length >= targetLength) {
94
+ return source;
95
+ }
96
+ const padded = new Array(targetLength).fill(padValue);
97
+ for (const [index, value] of source.entries()) {
98
+ padded[index] = value;
99
+ }
100
+ return padded;
101
+ }
102
+ /**
103
+ * Parse a vocab.txt file into a token-to-id map.
104
+ *
105
+ * Each line in the file corresponds to a token, with the line number
106
+ * (0-indexed) as the token ID. Empty lines are skipped.
107
+ */
108
+ function parseVocab(content) {
109
+ const lines = content.split('\n');
110
+ const vocab = new Map();
111
+ for (const [index, token] of lines.entries()) {
112
+ if (token.length > 0) {
113
+ vocab.set(token, index);
114
+ }
115
+ }
116
+ return vocab;
117
+ }
118
+ /**
119
+ * A pure TypeScript WordPiece tokenizer for BERT-style models.
120
+ *
121
+ * Loads vocabulary from a vocab.txt file and performs basic BERT
122
+ * preprocessing: lowercase, strip accents, split on whitespace
123
+ * and punctuation, then apply the WordPiece algorithm.
124
+ */
125
+ export class BertTokenizer {
126
+ vocab;
127
+ constructor(vocab) {
128
+ this.vocab = vocab;
129
+ }
130
+ /**
131
+ * Create a tokenizer from a vocab.txt file.
132
+ *
133
+ * The file should contain one token per line, where the line number
134
+ * (0-indexed) corresponds to the token ID.
135
+ *
136
+ * @param vocabPath - Absolute path to vocab.txt
137
+ * @returns Initialized BertTokenizer
138
+ */
139
+ static async fromVocabFile(vocabPath) {
140
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- vocabPath is from model cache, not user input
141
+ const content = await readFile(vocabPath, 'utf8');
142
+ const vocab = parseVocab(content);
143
+ return new BertTokenizer(vocab);
144
+ }
145
+ /**
146
+ * Tokenize a single text string.
147
+ *
148
+ * Applies BERT preprocessing (lowercase, strip accents, split on
149
+ * punctuation), then WordPiece tokenization. Adds [CLS] and [SEP]
150
+ * special tokens. Truncates to maxLength if necessary.
151
+ *
152
+ * @param text - Input text
153
+ * @param maxLength - Maximum sequence length including special tokens (default: 256)
154
+ * @returns Token IDs and attention mask
155
+ */
156
+ tokenize(text, maxLength = 256) {
157
+ const processed = stripAccents(text.toLowerCase());
158
+ const words = splitOnPunctuation(processed);
159
+ const tokenIds = [SPECIAL_TOKENS.CLS];
160
+ // Reserve 2 slots for [CLS] and [SEP]
161
+ const maxContentTokens = maxLength - 2;
162
+ for (const word of words) {
163
+ if (tokenIds.length - 1 >= maxContentTokens) {
164
+ break;
165
+ }
166
+ const wordIds = wordPieceTokenize(word, this.vocab);
167
+ for (const id of wordIds) {
168
+ if (tokenIds.length - 1 >= maxContentTokens) {
169
+ break;
170
+ }
171
+ tokenIds.push(id);
172
+ }
173
+ }
174
+ tokenIds.push(SPECIAL_TOKENS.SEP);
175
+ const attentionMask = new Array(tokenIds.length).fill(1);
176
+ return { inputIds: tokenIds, attentionMask };
177
+ }
178
+ /**
179
+ * Tokenize a batch of texts with padding to the longest sequence.
180
+ *
181
+ * All sequences are padded to the same length so they can be
182
+ * combined into a single batched tensor for ONNX inference.
183
+ *
184
+ * @param texts - Array of input texts
185
+ * @param maxLength - Maximum sequence length including special tokens (default: 256)
186
+ * @returns Padded token IDs, attention masks, and the padded sequence length
187
+ */
188
+ tokenizeBatch(texts, maxLength = 256) {
189
+ const tokenized = texts.map((text) => this.tokenize(text, maxLength));
190
+ let maxLen = 0;
191
+ for (const item of tokenized) {
192
+ if (item.inputIds.length > maxLen) {
193
+ maxLen = item.inputIds.length;
194
+ }
195
+ }
196
+ const inputIds = tokenized.map((item) => padArray(item.inputIds, maxLen, SPECIAL_TOKENS.PAD));
197
+ const attentionMask = tokenized.map((item) => padArray(item.attentionMask, maxLen, 0));
198
+ return { inputIds, attentionMask, maxLen };
199
+ }
200
+ }
201
+ // ---------------------------------------------------------------------------
202
+ // Mean Pooling
203
+ // ---------------------------------------------------------------------------
204
+ /**
205
+ * Pool a single batch item from the hidden state using its attention mask.
206
+ *
207
+ * Sums token embeddings weighted by the attention mask, then divides by the
208
+ * number of non-padding tokens to produce a mean-pooled embedding.
209
+ */
210
+ function poolSingleItem(lastHiddenState, mask, batchIndex, sequenceLength, embeddingDim) {
211
+ const embedding = new Array(embeddingDim).fill(0);
212
+ let maskSum = 0;
213
+ for (let seq = 0; seq < sequenceLength; seq++) {
214
+ const maskValue = mask[seq] ?? 0;
215
+ maskSum += maskValue;
216
+ if (maskValue === 0) {
217
+ continue;
218
+ }
219
+ const offset = (batchIndex * sequenceLength + seq) * embeddingDim;
220
+ for (let dim = 0; dim < embeddingDim; dim++) {
221
+ const current = embedding[dim] ?? 0;
222
+ embedding[dim] = current + (lastHiddenState[offset + dim] ?? 0);
223
+ }
224
+ }
225
+ if (maskSum > 0) {
226
+ for (let dim = 0; dim < embeddingDim; dim++) {
227
+ const current = embedding[dim] ?? 0;
228
+ embedding[dim] = current / maskSum;
229
+ }
230
+ }
231
+ return embedding;
232
+ }
233
+ /**
234
+ * Apply mean pooling to the last hidden state of a transformer model.
235
+ *
236
+ * Weights each token embedding by its attention mask value (0 or 1) so
237
+ * that padding tokens are excluded from the mean. Returns one embedding
238
+ * vector per batch item.
239
+ *
240
+ * @param lastHiddenState - Raw model output, shape [batch, seq, dim], as Float32Array
241
+ * @param attentionMasks - Attention masks for each batch item
242
+ * @param batchSize - Number of items in the batch
243
+ * @param sequenceLength - Padded sequence length
244
+ * @param embeddingDim - Embedding dimensionality (e.g. 384)
245
+ * @returns Array of embedding vectors (one per batch item)
246
+ */
247
+ export function meanPooling(lastHiddenState, attentionMasks, batchSize, sequenceLength, embeddingDim) {
248
+ const results = [];
249
+ for (let batch = 0; batch < batchSize; batch++) {
250
+ const mask = attentionMasks[batch];
251
+ if (!mask) {
252
+ results.push(new Array(embeddingDim).fill(0));
253
+ continue;
254
+ }
255
+ results.push(poolSingleItem(lastHiddenState, mask, batch, sequenceLength, embeddingDim));
256
+ }
257
+ return results;
258
+ }
259
+ // ---------------------------------------------------------------------------
260
+ // L2 Normalization
261
+ // ---------------------------------------------------------------------------
262
+ /**
263
+ * Normalize a vector to unit length using L2 (Euclidean) norm.
264
+ *
265
+ * If the vector has zero magnitude, returns the vector unchanged.
266
+ *
267
+ * @param vector - Input vector
268
+ * @returns Unit-length vector
269
+ */
270
+ export function l2Normalize(vector) {
271
+ let sumSquared = 0;
272
+ for (const value of vector) {
273
+ sumSquared += value * value;
274
+ }
275
+ const magnitude = Math.sqrt(sumSquared);
276
+ if (magnitude === 0) {
277
+ return vector;
278
+ }
279
+ return vector.map((value) => value / magnitude);
280
+ }
281
+ // ---------------------------------------------------------------------------
282
+ // Model File Download
283
+ // ---------------------------------------------------------------------------
284
+ /**
285
+ * Check whether a file exists at the given path.
286
+ */
287
+ async function fileExists(filePath) {
288
+ try {
289
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- filePath is constructed from known cache directory
290
+ await stat(filePath);
291
+ return true;
292
+ }
293
+ catch {
294
+ return false;
295
+ }
296
+ }
297
+ /**
298
+ * Download a file from a URL to a local path.
299
+ *
300
+ * Creates parent directories as needed. Buffers the response body
301
+ * and writes to disk.
302
+ */
303
+ async function downloadFile(url, destination) {
304
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- destination is constructed from known cache directory
305
+ await mkdir(dirname(destination), { recursive: true });
306
+ const response = await fetch(url);
307
+ if (!response.ok) {
308
+ throw new Error(`Failed to download ${url}: ${response.status.toString()} ${response.statusText}`);
309
+ }
310
+ const arrayBuffer = await response.arrayBuffer();
311
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- destination is constructed from known cache directory
312
+ await writeFile(destination, Buffer.from(arrayBuffer));
313
+ }
314
+ /**
315
+ * Ensure that model.onnx and vocab.txt files are available locally.
316
+ *
317
+ * Downloads from HuggingFace CDN if the files are not already cached.
318
+ * Uses the pattern:
319
+ * https://huggingface.co/{modelId}/resolve/main/onnx/model.onnx
320
+ * https://huggingface.co/{modelId}/resolve/main/vocab.txt
321
+ *
322
+ * @param modelId - HuggingFace model ID (e.g. 'sentence-transformers/all-MiniLM-L6-v2')
323
+ * @param cacheDir - Local directory for cached model files
324
+ * @returns Paths to the model and vocab files
325
+ */
326
+ export async function ensureModelFiles(modelId, cacheDir) {
327
+ const modelDir = join(cacheDir, modelId.replaceAll('/', '_'));
328
+ const modelPath = join(modelDir, 'model.onnx');
329
+ const vocabPath = join(modelDir, 'vocab.txt');
330
+ const baseUrl = `https://huggingface.co/${modelId}/resolve/main`;
331
+ const modelExists = await fileExists(modelPath);
332
+ if (!modelExists) {
333
+ const modelUrl = `${baseUrl}/onnx/model.onnx`;
334
+ console.log(`[vat-onnx] Downloading model: ${modelUrl}`);
335
+ console.log(`[vat-onnx] Destination: ${modelPath}`);
336
+ await downloadFile(modelUrl, modelPath);
337
+ console.log('[vat-onnx] Model download complete.');
338
+ }
339
+ const vocabExists = await fileExists(vocabPath);
340
+ if (!vocabExists) {
341
+ const vocabUrl = `${baseUrl}/vocab.txt`;
342
+ console.log(`[vat-onnx] Downloading vocab: ${vocabUrl}`);
343
+ await downloadFile(vocabUrl, vocabPath);
344
+ console.log('[vat-onnx] Vocab download complete.');
345
+ }
346
+ return { modelPath, vocabPath };
347
+ }
348
+ //# sourceMappingURL=onnx-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onnx-utils.js","sourceRoot":"","sources":["../../src/embedding-providers/onnx-utils.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@
3
3
  *
4
4
  * Uses @xenova/transformers for local embedding generation.
5
5
  * No API key required, runs entirely in Node.js.
6
+ *
7
+ * Requires optional dependency: npm install @xenova/transformers
6
8
  */
7
9
  import type { EmbeddingProvider } from '../interfaces/embedding.js';
8
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"transformers-embedding-provider.d.ts","sourceRoot":"","sources":["../../src/embedding-providers/transformers-embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,6BAA8B,YAAW,iBAAiB;IACrE,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,OAAO,CAAC,eAAe,CAAiC;IAExD;;;;OAIG;gBACS,MAAM,GAAE,2BAAgC;IAKpD;;OAEG;YACW,WAAW;IAOzB;;;;;OAKG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAa5C;;;;;OAKG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CASvD"}
1
+ {"version":3,"file":"transformers-embedding-provider.d.ts","sourceRoot":"","sources":["../../src/embedding-providers/transformers-embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA0BD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,6BAA8B,YAAW,iBAAiB;IACrE,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,OAAO,CAAC,eAAe,CAA0C;IAEjE;;;;OAIG;gBACS,MAAM,GAAE,2BAAgC;IAKpD;;OAEG;YACW,WAAW;IAKzB;;;;;OAKG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAW5C;;;;;OAKG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CASvD"}
@@ -3,8 +3,23 @@
3
3
  *
4
4
  * Uses @xenova/transformers for local embedding generation.
5
5
  * No API key required, runs entirely in Node.js.
6
+ *
7
+ * Requires optional dependency: npm install @xenova/transformers
6
8
  */
7
- import { pipeline } from '@xenova/transformers';
9
+ /**
10
+ * Lazily load @xenova/transformers pipeline
11
+ */
12
+ async function loadPipeline(model) {
13
+ try {
14
+ const { pipeline } = await import('@xenova/transformers');
15
+ return (await pipeline('feature-extraction', model, {
16
+ quantized: true,
17
+ }));
18
+ }
19
+ catch {
20
+ throw new Error('@xenova/transformers is not installed. Install with: npm install @xenova/transformers');
21
+ }
22
+ }
8
23
  /**
9
24
  * TransformersEmbeddingProvider
10
25
  *
@@ -38,9 +53,7 @@ export class TransformersEmbeddingProvider {
38
53
  * Get or initialize the embedding pipeline
39
54
  */
40
55
  async getPipeline() {
41
- this.pipelinePromise ??= pipeline('feature-extraction', this.model, {
42
- quantized: true, // Use quantized model for better performance
43
- });
56
+ this.pipelinePromise ??= loadPipeline(this.model);
44
57
  return this.pipelinePromise;
45
58
  }
46
59
  /**
@@ -50,7 +63,7 @@ export class TransformersEmbeddingProvider {
50
63
  * @returns Vector embedding (normalized)
51
64
  */
52
65
  async embed(text) {
53
- const extractor = (await this.getPipeline());
66
+ const extractor = await this.getPipeline();
54
67
  const output = await extractor(text, {
55
68
  pooling: 'mean',
56
69
  normalize: true,
@@ -1 +1 @@
1
- {"version":3,"file":"transformers-embedding-provider.js","sourceRoot":"","sources":["../../src/embedding-providers/transformers-embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAchD;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,6BAA6B;IAC/B,IAAI,GAAG,iBAAiB,CAAC;IACzB,KAAK,CAAS;IACd,UAAU,CAAS;IAEpB,eAAe,GAA4B,IAAI,CAAC;IAExD;;;;OAIG;IACH,YAAY,SAAsC,EAAE;QAClD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,yBAAyB,CAAC;QACvD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC;IAC7C,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC,eAAe,KAAK,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,EAAE;YAClE,SAAS,EAAE,IAAI,EAAE,6CAA6C;SAC/D,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAEvC,CAAC;QAEL,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE;YACnC,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,6CAA6C;QAC7C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
1
+ {"version":3,"file":"transformers-embedding-provider.js","sourceRoot":"","sources":["../../src/embedding-providers/transformers-embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoBH;;GAEG;AACH,KAAK,UAAU,YAAY,CACzB,KAAa;IAEb,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC1D,OAAO,CAAC,MAAM,QAAQ,CAAC,oBAAoB,EAAE,KAAK,EAAE;YAClD,SAAS,EAAE,IAAI;SAChB,CAAC,CAAqB,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,6BAA6B;IAC/B,IAAI,GAAG,iBAAiB,CAAC;IACzB,KAAK,CAAS;IACd,UAAU,CAAS;IAEpB,eAAe,GAAqC,IAAI,CAAC;IAEjE;;;;OAIG;IACH,YAAY,SAAsC,EAAE;QAClD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,yBAAyB,CAAC;QACvD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC;IAC7C,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC,eAAe,KAAK,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE;YACnC,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,6CAA6C;QAC7C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -3,10 +3,10 @@
3
3
  *
4
4
  * Abstract RAG interfaces and shared implementations for vibe-agent-toolkit.
5
5
  */
6
- export type { RAGQuery, RAGChunk, RAGResult, RAGStats, IndexResult, IndexProgress, ProgressCallback, RAGQueryProvider, RAGAdminProvider, EmbeddingProvider, TokenCounter, } from './interfaces/index.js';
6
+ export type { DocumentResult, RAGQuery, RAGChunk, RAGResult, RAGStats, IndexResult, IndexProgress, ProgressCallback, RAGQueryProvider, RAGAdminProvider, EmbeddingProvider, TokenCounter, } from './interfaces/index.js';
7
7
  export { CoreRAGChunkSchema, type CoreRAGChunk, DefaultRAGMetadataSchema, type DefaultRAGMetadata, RAGChunkSchema, RAGQuerySchema, RAGResultSchema, RAGStatsSchema, IndexResultSchema, createCustomRAGChunkSchema, } from './schemas/index.js';
8
8
  export { RAGChunkJsonSchema, RAGQueryJsonSchema, RAGResultJsonSchema, RAGStatsJsonSchema, IndexResultJsonSchema, jsonSchemas, } from './schemas/json-schema.js';
9
9
  export { ApproximateTokenCounter, FastTokenCounter } from './token-counters/index.js';
10
- export { OpenAIEmbeddingProvider, TransformersEmbeddingProvider, type OpenAIEmbeddingConfig, type TransformersEmbeddingConfig, } from './embedding-providers/index.js';
10
+ export { OpenAIEmbeddingProvider, TransformersEmbeddingProvider, OnnxEmbeddingProvider, type OpenAIEmbeddingConfig, type TransformersEmbeddingConfig, type OnnxEmbeddingConfig, } from './embedding-providers/index.js';
11
11
  export { calculateEffectiveTarget, chunkByTokens, chunkResource, enrichChunks, generateChunkId, generateContentHash, splitByParagraphs, splitBySentences, type ChunkableResource, type ChunkingConfig, type ChunkingResult, type RawChunk, } from './chunking/index.js';
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,GACb,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,EACjB,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,cAAc,EACd,cAAc,EACd,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGtF,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,GACjC,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,QAAQ,GACd,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,GACb,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,EACjB,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,cAAc,EACd,cAAc,EACd,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGtF,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,GACzB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,QAAQ,GACd,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ export { RAGChunkJsonSchema, RAGQueryJsonSchema, RAGResultJsonSchema, RAGStatsJs
10
10
  // Token Counters
11
11
  export { ApproximateTokenCounter, FastTokenCounter } from './token-counters/index.js';
12
12
  // Embedding Providers
13
- export { OpenAIEmbeddingProvider, TransformersEmbeddingProvider, } from './embedding-providers/index.js';
13
+ export { OpenAIEmbeddingProvider, TransformersEmbeddingProvider, OnnxEmbeddingProvider, } from './embedding-providers/index.js';
14
14
  // Chunking
15
15
  export { calculateEffectiveTarget, chunkByTokens, chunkResource, enrichChunks, generateChunkId, generateContentHash, splitByParagraphs, splitBySentences, } from './chunking/index.js';
16
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,gBAAgB;AAChB,OAAO,EACL,kBAAkB,EAElB,wBAAwB,EAExB,cAAc,EACd,cAAc,EACd,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAE5B,eAAe;AACf,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAElC,iBAAiB;AACjB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAEtF,sBAAsB;AACtB,OAAO,EACL,uBAAuB,EACvB,6BAA6B,GAG9B,MAAM,gCAAgC,CAAC;AAExC,WAAW;AACX,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,GAKjB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,gBAAgB;AAChB,OAAO,EACL,kBAAkB,EAElB,wBAAwB,EAExB,cAAc,EACd,cAAc,EACd,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAE5B,eAAe;AACf,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAElC,iBAAiB;AACjB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAEtF,sBAAsB;AACtB,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,qBAAqB,GAItB,MAAM,gCAAgC,CAAC;AAExC,WAAW;AACX,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,GAKjB,MAAM,qBAAqB,CAAC"}
@@ -6,7 +6,7 @@
6
6
  export type { CoreRAGChunk } from '../schemas/core-chunk.js';
7
7
  export type { DefaultRAGMetadata } from '../schemas/default-metadata.js';
8
8
  export type { RAGChunk } from './chunk.js';
9
- export type { RAGQuery, RAGResult, RAGStats, IndexResult, IndexProgress, ProgressCallback, RAGQueryProvider, RAGAdminProvider, } from './provider.js';
9
+ export type { DocumentResult, RAGQuery, RAGResult, RAGStats, IndexResult, IndexProgress, ProgressCallback, RAGQueryProvider, RAGAdminProvider, } from './provider.js';
10
10
  export type { EmbeddingProvider } from './embedding.js';
11
11
  export type { TokenCounter } from './token-counter.js';
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,YAAY,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,YAAY,EACV,cAAc,EACd,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -118,6 +118,31 @@ export interface IndexResult {
118
118
  error: string;
119
119
  }>;
120
120
  }
121
+ /**
122
+ * Full document record stored alongside chunks.
123
+ *
124
+ * When `storeDocuments` is enabled on the provider, the complete source
125
+ * document is persisted so consumers can retrieve it after finding
126
+ * relevant chunks via vector search.
127
+ */
128
+ export interface DocumentResult {
129
+ /** Source resource ID */
130
+ resourceId: string;
131
+ /** Absolute file path of the source document */
132
+ filePath: string;
133
+ /** Full document content (transformed if contentTransform was configured) */
134
+ content: string;
135
+ /** SHA-256 hash of the stored content */
136
+ contentHash: string;
137
+ /** Token count of the full document content */
138
+ tokenCount: number;
139
+ /** Number of chunks produced from this document */
140
+ totalChunks: number;
141
+ /** When the document was indexed */
142
+ indexedAt: Date;
143
+ /** Custom metadata from frontmatter */
144
+ metadata: Record<string, unknown>;
145
+ }
121
146
  /**
122
147
  * RAG Query Provider (read-only)
123
148
  *
@@ -133,6 +158,16 @@ export interface RAGQueryProvider<TMetadata extends Record<string, unknown> = De
133
158
  * Get database statistics
134
159
  */
135
160
  getStats(): Promise<RAGStats>;
161
+ /**
162
+ * Retrieve the full source document by resource ID.
163
+ *
164
+ * Only available when the provider was configured with `storeDocuments: true`.
165
+ * Returns `null` if the document is not found or document storage is not enabled.
166
+ *
167
+ * @param resourceId - ID of the resource to retrieve
168
+ * @returns Full document record or null
169
+ */
170
+ getDocument?(resourceId: string): Promise<DocumentResult | null>;
136
171
  }
137
172
  /**
138
173
  * RAG Admin Provider (read/write)
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/interfaces/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/interfaces/provider.ts"],"names":[],"mappings":"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"}
@@ -14,14 +14,14 @@ export declare const RAGStatsSchema: z.ZodObject<{
14
14
  embeddingModel: z.ZodString;
15
15
  lastIndexed: z.ZodDate;
16
16
  }, "strip", z.ZodTypeAny, {
17
- embeddingModel: string;
18
17
  totalChunks: number;
18
+ embeddingModel: string;
19
19
  totalResources: number;
20
20
  dbSizeBytes: number;
21
21
  lastIndexed: Date;
22
22
  }, {
23
- embeddingModel: string;
24
23
  totalChunks: number;
24
+ embeddingModel: string;
25
25
  totalResources: number;
26
26
  dbSizeBytes: number;
27
27
  lastIndexed: Date;
@@ -17,6 +17,8 @@ export declare const RAGChunkSchema: z.ZodObject<{
17
17
  content: z.ZodString;
18
18
  contentHash: z.ZodString;
19
19
  tokenCount: z.ZodNumber;
20
+ chunkIndex: z.ZodOptional<z.ZodNumber>;
21
+ totalChunks: z.ZodOptional<z.ZodNumber>;
20
22
  embedding: z.ZodArray<z.ZodNumber, "many">;
21
23
  embeddingModel: z.ZodString;
22
24
  embeddedAt: z.ZodDate;
@@ -43,6 +45,8 @@ export declare const RAGChunkSchema: z.ZodObject<{
43
45
  embeddingModel: string;
44
46
  embeddedAt: Date;
45
47
  filePath: string;
48
+ chunkIndex?: number | undefined;
49
+ totalChunks?: number | undefined;
46
50
  type?: string | undefined;
47
51
  previousChunkId?: string | undefined;
48
52
  nextChunkId?: string | undefined;
@@ -64,6 +68,8 @@ export declare const RAGChunkSchema: z.ZodObject<{
64
68
  embeddingModel: string;
65
69
  embeddedAt: Date;
66
70
  filePath: string;
71
+ chunkIndex?: number | undefined;
72
+ totalChunks?: number | undefined;
67
73
  type?: string | undefined;
68
74
  previousChunkId?: string | undefined;
69
75
  nextChunkId?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"chunk.d.ts","sourceRoot":"","sources":["../../src/schemas/chunk.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD;;;;;GAKG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAqD,CAAC;AAEjF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAChE,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAC7B,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAE3E"}
1
+ {"version":3,"file":"chunk.d.ts","sourceRoot":"","sources":["../../src/schemas/chunk.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD;;;;;GAKG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAqD,CAAC;AAEjF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAChE,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAC7B,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAE3E"}
@@ -16,6 +16,8 @@ export declare const CoreRAGChunkSchema: z.ZodObject<{
16
16
  content: z.ZodString;
17
17
  contentHash: z.ZodString;
18
18
  tokenCount: z.ZodNumber;
19
+ chunkIndex: z.ZodOptional<z.ZodNumber>;
20
+ totalChunks: z.ZodOptional<z.ZodNumber>;
19
21
  embedding: z.ZodArray<z.ZodNumber, "many">;
20
22
  embeddingModel: z.ZodString;
21
23
  embeddedAt: z.ZodDate;
@@ -32,6 +34,8 @@ export declare const CoreRAGChunkSchema: z.ZodObject<{
32
34
  embedding: number[];
33
35
  embeddingModel: string;
34
36
  embeddedAt: Date;
37
+ chunkIndex?: number | undefined;
38
+ totalChunks?: number | undefined;
35
39
  previousChunkId?: string | undefined;
36
40
  nextChunkId?: string | undefined;
37
41
  _distance?: number | undefined;
@@ -45,6 +49,8 @@ export declare const CoreRAGChunkSchema: z.ZodObject<{
45
49
  embedding: number[];
46
50
  embeddingModel: string;
47
51
  embeddedAt: Date;
52
+ chunkIndex?: number | undefined;
53
+ totalChunks?: number | undefined;
48
54
  previousChunkId?: string | undefined;
49
55
  nextChunkId?: string | undefined;
50
56
  _distance?: number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"core-chunk.d.ts","sourceRoot":"","sources":["../../src/schemas/core-chunk.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsB7B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"core-chunk.d.ts","sourceRoot":"","sources":["../../src/schemas/core-chunk.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0B7B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -18,6 +18,9 @@ export const CoreRAGChunkSchema = z.object({
18
18
  content: z.string().describe('The actual text chunk'),
19
19
  contentHash: z.string().describe('Hash of content for change detection'),
20
20
  tokenCount: z.number().describe('Accurate token count from TokenCounter'),
21
+ // Position within source document
22
+ chunkIndex: z.number().optional().describe('0-based position of this chunk within the source document'),
23
+ totalChunks: z.number().optional().describe('Total number of chunks for the source document'),
21
24
  // Vectors
22
25
  embedding: z.array(z.number()).describe('Vector embedding'),
23
26
  embeddingModel: z.string().describe('Model used: "text-embedding-3-small", "all-MiniLM-L6-v2", etc.'),
@@ -1 +1 @@
1
- {"version":3,"file":"core-chunk.js","sourceRoot":"","sources":["../../src/schemas/core-chunk.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,WAAW;IACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAE3E,UAAU;IACV,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACrD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACxE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAEzE,UAAU;IACV,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC3D,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;IACrG,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAE7D,kBAAkB;IAClB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IACrG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAE7F,kEAAkE;IAClE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;IAC3G,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;CAChG,CAAC,CAAC"}
1
+ {"version":3,"file":"core-chunk.js","sourceRoot":"","sources":["../../src/schemas/core-chunk.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,WAAW;IACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAE3E,UAAU;IACV,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACrD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACxE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAEzE,kCAAkC;IAClC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;IACvG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAE7F,UAAU;IACV,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC3D,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;IACrG,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAE7D,kBAAkB;IAClB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IACrG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAE7F,kEAAkE;IAClE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;IAC3G,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;CAChG,CAAC,CAAC"}
@@ -115,6 +115,8 @@ export declare const RAGResultSchema: z.ZodObject<{
115
115
  content: z.ZodString;
116
116
  contentHash: z.ZodString;
117
117
  tokenCount: z.ZodNumber;
118
+ chunkIndex: z.ZodOptional<z.ZodNumber>;
119
+ totalChunks: z.ZodOptional<z.ZodNumber>;
118
120
  embedding: z.ZodArray<z.ZodNumber, "many">;
119
121
  embeddingModel: z.ZodString;
120
122
  embeddedAt: z.ZodDate;
@@ -141,6 +143,8 @@ export declare const RAGResultSchema: z.ZodObject<{
141
143
  embeddingModel: string;
142
144
  embeddedAt: Date;
143
145
  filePath: string;
146
+ chunkIndex?: number | undefined;
147
+ totalChunks?: number | undefined;
144
148
  type?: string | undefined;
145
149
  previousChunkId?: string | undefined;
146
150
  nextChunkId?: string | undefined;
@@ -162,6 +166,8 @@ export declare const RAGResultSchema: z.ZodObject<{
162
166
  embeddingModel: string;
163
167
  embeddedAt: Date;
164
168
  filePath: string;
169
+ chunkIndex?: number | undefined;
170
+ totalChunks?: number | undefined;
165
171
  type?: string | undefined;
166
172
  previousChunkId?: string | undefined;
167
173
  nextChunkId?: string | undefined;
@@ -214,6 +220,8 @@ export declare const RAGResultSchema: z.ZodObject<{
214
220
  embeddingModel: string;
215
221
  embeddedAt: Date;
216
222
  filePath: string;
223
+ chunkIndex?: number | undefined;
224
+ totalChunks?: number | undefined;
217
225
  type?: string | undefined;
218
226
  previousChunkId?: string | undefined;
219
227
  nextChunkId?: string | undefined;
@@ -245,6 +253,8 @@ export declare const RAGResultSchema: z.ZodObject<{
245
253
  embeddingModel: string;
246
254
  embeddedAt: Date;
247
255
  filePath: string;
256
+ chunkIndex?: number | undefined;
257
+ totalChunks?: number | undefined;
248
258
  type?: string | undefined;
249
259
  previousChunkId?: string | undefined;
250
260
  nextChunkId?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/schemas/query.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;GAIG;AACH,eAAO,MAAM,cAAc;IACzB,wBAAwB;;IAGxB,8CAA8C;;IAG9C,uBAAuB;;QAErB,+BAA+B;;QAE/B,qBAAqB;;QAErB,8BAA8B;;QAE9B,6BAA6B;;QAE7B,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAO7B,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKlC,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,eAAe;IAC1B,0CAA0C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAG1C,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASxB,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/schemas/query.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;GAIG;AACH,eAAO,MAAM,cAAc;IACzB,wBAAwB;;IAGxB,8CAA8C;;IAG9C,uBAAuB;;QAErB,+BAA+B;;QAE/B,qBAAqB;;QAErB,8BAA8B;;QAE9B,6BAA6B;;QAE7B,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAO7B,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKlC,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,eAAe;IAC1B,0CAA0C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAG1C,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASxB,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibe-agent-toolkit/rag",
3
- "version": "0.1.13",
3
+ "version": "0.1.14",
4
4
  "type": "module",
5
5
  "description": "Abstract RAG (Retrieval-Augmented Generation) interfaces and shared implementations",
6
6
  "keywords": [
@@ -31,9 +31,8 @@
31
31
  "typecheck": "tsc --noEmit"
32
32
  },
33
33
  "dependencies": {
34
- "@vibe-agent-toolkit/resources": "0.1.13",
35
- "@vibe-agent-toolkit/utils": "0.1.13",
36
- "@xenova/transformers": "^2.17.0",
34
+ "@vibe-agent-toolkit/resources": "0.1.14",
35
+ "@vibe-agent-toolkit/utils": "0.1.14",
37
36
  "gpt-tokenizer": "^2.6.0",
38
37
  "zod": "^3.22.0",
39
38
  "zod-to-json-schema": "^3.22.0"
@@ -44,7 +43,9 @@
44
43
  "vitest": "^3.2.0"
45
44
  },
46
45
  "optionalDependencies": {
47
- "openai": "^6.16.0"
46
+ "@xenova/transformers": "^2.17.0",
47
+ "openai": "^6.16.0",
48
+ "onnxruntime-node": "^1.24.0"
48
49
  },
49
50
  "repository": {
50
51
  "type": "git",