@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.
- package/dist/chunking/chunk-resource.d.ts +3 -1
- package/dist/chunking/chunk-resource.d.ts.map +1 -1
- package/dist/chunking/chunk-resource.js +5 -2
- package/dist/chunking/chunk-resource.js.map +1 -1
- package/dist/embedding-providers/index.d.ts +1 -0
- package/dist/embedding-providers/index.d.ts.map +1 -1
- package/dist/embedding-providers/index.js +1 -0
- package/dist/embedding-providers/index.js.map +1 -1
- package/dist/embedding-providers/onnx-embedding-provider.d.ts +96 -0
- package/dist/embedding-providers/onnx-embedding-provider.d.ts.map +1 -0
- package/dist/embedding-providers/onnx-embedding-provider.js +179 -0
- package/dist/embedding-providers/onnx-embedding-provider.js.map +1 -0
- package/dist/embedding-providers/onnx-utils.d.ts +104 -0
- package/dist/embedding-providers/onnx-utils.d.ts.map +1 -0
- package/dist/embedding-providers/onnx-utils.js +348 -0
- package/dist/embedding-providers/onnx-utils.js.map +1 -0
- package/dist/embedding-providers/transformers-embedding-provider.d.ts +2 -0
- package/dist/embedding-providers/transformers-embedding-provider.d.ts.map +1 -1
- package/dist/embedding-providers/transformers-embedding-provider.js +18 -5
- package/dist/embedding-providers/transformers-embedding-provider.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces/index.d.ts +1 -1
- package/dist/interfaces/index.d.ts.map +1 -1
- package/dist/interfaces/provider.d.ts +35 -0
- package/dist/interfaces/provider.d.ts.map +1 -1
- package/dist/schemas/admin.d.ts +2 -2
- package/dist/schemas/chunk.d.ts +6 -0
- package/dist/schemas/chunk.d.ts.map +1 -1
- package/dist/schemas/core-chunk.d.ts +6 -0
- package/dist/schemas/core-chunk.d.ts.map +1 -1
- package/dist/schemas/core-chunk.js +3 -0
- package/dist/schemas/core-chunk.js.map +1 -1
- package/dist/schemas/query.d.ts +10 -0
- package/dist/schemas/query.d.ts.map +1 -1
- 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
|
|
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:
|
|
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":"AAAA;;;;GAIG;
|
|
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
|
|
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
|
-
|
|
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 ??=
|
|
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 =
|
|
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
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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;
|
|
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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"}
|
package/dist/schemas/admin.d.ts
CHANGED
|
@@ -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;
|
package/dist/schemas/chunk.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
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"}
|
package/dist/schemas/query.d.ts
CHANGED
|
@@ -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
|
|
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.
|
|
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.
|
|
35
|
-
"@vibe-agent-toolkit/utils": "0.1.
|
|
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
|
-
"
|
|
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",
|