@opensaas/stack-rag 0.1.7 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +132 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +9 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/plugin.d.ts.map +1 -1
- package/dist/config/plugin.js +32 -0
- package/dist/config/plugin.js.map +1 -1
- package/dist/config/plugin.test.js +70 -14
- package/dist/config/plugin.test.js.map +1 -1
- package/dist/config/types.d.ts +135 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/providers/openai.js +1 -1
- package/dist/providers/openai.js.map +1 -1
- package/dist/runtime/build-time.d.ts +100 -0
- package/dist/runtime/build-time.d.ts.map +1 -0
- package/dist/runtime/build-time.js +185 -0
- package/dist/runtime/build-time.js.map +1 -0
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +6 -0
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/markdown.d.ts +33 -0
- package/dist/runtime/markdown.d.ts.map +1 -0
- package/dist/runtime/markdown.js +94 -0
- package/dist/runtime/markdown.js.map +1 -0
- package/dist/runtime/provider-helpers.d.ts +56 -0
- package/dist/runtime/provider-helpers.d.ts.map +1 -0
- package/dist/runtime/provider-helpers.js +95 -0
- package/dist/runtime/provider-helpers.js.map +1 -0
- package/dist/runtime/types.d.ts +29 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +6 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/json-file.d.ts +53 -0
- package/dist/storage/json-file.d.ts.map +1 -0
- package/dist/storage/json-file.js +124 -0
- package/dist/storage/json-file.js.map +1 -0
- package/dist/storage/storage.test.js +1 -0
- package/dist/storage/storage.test.js.map +1 -1
- package/package.json +6 -5
- package/src/config/index.ts +9 -0
- package/src/config/plugin.test.ts +70 -14
- package/src/config/plugin.ts +37 -0
- package/src/config/types.ts +158 -0
- package/src/index.ts +6 -0
- package/src/providers/openai.ts +1 -1
- package/src/runtime/build-time.ts +216 -0
- package/src/runtime/index.ts +18 -0
- package/src/runtime/markdown.ts +119 -0
- package/src/runtime/provider-helpers.ts +115 -0
- package/src/runtime/types.ts +30 -0
- package/src/storage/index.ts +1 -0
- package/src/storage/json-file.ts +157 -0
- package/src/storage/storage.test.ts +1 -0
- package/tsconfig.tsbuildinfo +1 -1
package/dist/config/types.d.ts
CHANGED
|
@@ -130,6 +130,37 @@ export type CustomStorageConfig = {
|
|
|
130
130
|
* Vector storage configuration union
|
|
131
131
|
*/
|
|
132
132
|
export type VectorStorageConfig = PgVectorStorageConfig | SqliteVssStorageConfig | JsonStorageConfig | CustomStorageConfig;
|
|
133
|
+
/**
|
|
134
|
+
* Build-time embedding generation configuration
|
|
135
|
+
*/
|
|
136
|
+
export type BuildTimeConfig = {
|
|
137
|
+
/**
|
|
138
|
+
* Enable build-time embedding generation
|
|
139
|
+
*/
|
|
140
|
+
enabled: boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Output path for embeddings JSON file
|
|
143
|
+
* Relative to project root
|
|
144
|
+
* @default '.embeddings/embeddings.json'
|
|
145
|
+
*/
|
|
146
|
+
outputPath?: string;
|
|
147
|
+
/**
|
|
148
|
+
* Chunk size for text splitting (in characters)
|
|
149
|
+
* @default 500
|
|
150
|
+
*/
|
|
151
|
+
chunkSize?: number;
|
|
152
|
+
/**
|
|
153
|
+
* Overlap between chunks (in characters)
|
|
154
|
+
* @default 50
|
|
155
|
+
*/
|
|
156
|
+
chunkOverlap?: number;
|
|
157
|
+
/**
|
|
158
|
+
* Whether to enable differential updates
|
|
159
|
+
* Only regenerate embeddings for changed content
|
|
160
|
+
* @default true
|
|
161
|
+
*/
|
|
162
|
+
differential?: boolean;
|
|
163
|
+
};
|
|
133
164
|
/**
|
|
134
165
|
* Main RAG configuration
|
|
135
166
|
*/
|
|
@@ -162,6 +193,12 @@ export type RAGConfig = {
|
|
|
162
193
|
* Can be overridden per field
|
|
163
194
|
*/
|
|
164
195
|
chunking?: ChunkingConfig;
|
|
196
|
+
/**
|
|
197
|
+
* Build-time embedding generation configuration
|
|
198
|
+
* When enabled, embeddings are generated at build time and stored in a JSON file
|
|
199
|
+
* instead of being generated at runtime via hooks
|
|
200
|
+
*/
|
|
201
|
+
buildTime?: BuildTimeConfig;
|
|
165
202
|
/**
|
|
166
203
|
* Whether to enable MCP tools for semantic search
|
|
167
204
|
* Requires MCP to be enabled in main config
|
|
@@ -187,6 +224,7 @@ export type NormalizedRAGConfig = {
|
|
|
187
224
|
providers: Record<string, EmbeddingProviderConfig>;
|
|
188
225
|
storage: VectorStorageConfig;
|
|
189
226
|
chunking: Required<ChunkingConfig>;
|
|
227
|
+
buildTime: Required<BuildTimeConfig> | null;
|
|
190
228
|
enableMcpTools: boolean;
|
|
191
229
|
batchSize: number;
|
|
192
230
|
rateLimit: number;
|
|
@@ -297,4 +335,101 @@ export type SearchableMetadata = {
|
|
|
297
335
|
*/
|
|
298
336
|
chunking?: ChunkingConfig;
|
|
299
337
|
};
|
|
338
|
+
/**
|
|
339
|
+
* A chunk of text with its embedding
|
|
340
|
+
* Used in build-time generation output
|
|
341
|
+
*/
|
|
342
|
+
export type EmbeddingChunk = {
|
|
343
|
+
/**
|
|
344
|
+
* The text content of this chunk
|
|
345
|
+
*/
|
|
346
|
+
text: string;
|
|
347
|
+
/**
|
|
348
|
+
* The embedding vector for this chunk
|
|
349
|
+
*/
|
|
350
|
+
embedding: number[];
|
|
351
|
+
/**
|
|
352
|
+
* Metadata about the chunk
|
|
353
|
+
*/
|
|
354
|
+
metadata: {
|
|
355
|
+
/**
|
|
356
|
+
* Index of this chunk within the document
|
|
357
|
+
*/
|
|
358
|
+
chunkIndex: number;
|
|
359
|
+
/**
|
|
360
|
+
* Start character position in original text
|
|
361
|
+
*/
|
|
362
|
+
startOffset: number;
|
|
363
|
+
/**
|
|
364
|
+
* End character position in original text
|
|
365
|
+
*/
|
|
366
|
+
endOffset: number;
|
|
367
|
+
/**
|
|
368
|
+
* Whether this chunk represents a document title
|
|
369
|
+
* Title chunks receive boosted scoring during search
|
|
370
|
+
*/
|
|
371
|
+
isTitle?: boolean;
|
|
372
|
+
/**
|
|
373
|
+
* Additional custom metadata
|
|
374
|
+
*/
|
|
375
|
+
[key: string]: unknown;
|
|
376
|
+
};
|
|
377
|
+
};
|
|
378
|
+
/**
|
|
379
|
+
* Document with embeddings
|
|
380
|
+
* Used in build-time generation output
|
|
381
|
+
*/
|
|
382
|
+
export type EmbeddedDocument = {
|
|
383
|
+
/**
|
|
384
|
+
* Document ID or slug
|
|
385
|
+
*/
|
|
386
|
+
id: string;
|
|
387
|
+
/**
|
|
388
|
+
* Document title
|
|
389
|
+
*/
|
|
390
|
+
title?: string;
|
|
391
|
+
/**
|
|
392
|
+
* The chunks of this document with embeddings
|
|
393
|
+
*/
|
|
394
|
+
chunks: EmbeddingChunk[];
|
|
395
|
+
/**
|
|
396
|
+
* Embedding metadata
|
|
397
|
+
*/
|
|
398
|
+
embeddingMetadata: EmbeddingMetadata;
|
|
399
|
+
/**
|
|
400
|
+
* When the embeddings were generated
|
|
401
|
+
*/
|
|
402
|
+
generatedAt: string;
|
|
403
|
+
/**
|
|
404
|
+
* Hash of the source content (for differential updates)
|
|
405
|
+
*/
|
|
406
|
+
contentHash: string;
|
|
407
|
+
};
|
|
408
|
+
/**
|
|
409
|
+
* Build-time embeddings index file format
|
|
410
|
+
*/
|
|
411
|
+
export type EmbeddingsIndex = {
|
|
412
|
+
/**
|
|
413
|
+
* Version of the embeddings format
|
|
414
|
+
*/
|
|
415
|
+
version: string;
|
|
416
|
+
/**
|
|
417
|
+
* Embedding configuration used to generate these embeddings
|
|
418
|
+
*/
|
|
419
|
+
config: {
|
|
420
|
+
provider: string;
|
|
421
|
+
model: string;
|
|
422
|
+
dimensions: number;
|
|
423
|
+
chunkSize: number;
|
|
424
|
+
chunkOverlap: number;
|
|
425
|
+
};
|
|
426
|
+
/**
|
|
427
|
+
* Documents with embeddings
|
|
428
|
+
*/
|
|
429
|
+
documents: Record<string, EmbeddedDocument>;
|
|
430
|
+
/**
|
|
431
|
+
* When the index was generated
|
|
432
|
+
*/
|
|
433
|
+
generatedAt: string;
|
|
434
|
+
};
|
|
300
435
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,5 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export { openaiEmbeddings, ollamaEmbeddings, pgvectorStorage, sqliteVssStorage, jsonStorage, } from './config/index.js';
|
|
6
6
|
export { ragPlugin } from './config/plugin.js';
|
|
7
|
-
export type {
|
|
7
|
+
export type { RAGRuntimeServices } from './runtime/types.js';
|
|
8
|
+
export type { RAGConfig, NormalizedRAGConfig, EmbeddingProviderConfig, OpenAIEmbeddingConfig, OllamaEmbeddingConfig, VectorStorageConfig, PgVectorStorageConfig, SqliteVssStorageConfig, JsonStorageConfig, ChunkingConfig, ChunkingStrategy, EmbeddingMetadata, StoredEmbedding, SearchResult, EmbeddingsIndex, EmbeddedDocument, EmbeddingChunk, } from './config/types.js';
|
|
8
9
|
//# 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;;;GAGG;AAGH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAG9C,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE5D,YAAY,EACV,SAAS,EACT,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,GACf,MAAM,mBAAmB,CAAA"}
|
package/dist/providers/openai.js
CHANGED
|
@@ -14,7 +14,7 @@ async function getOpenAI() {
|
|
|
14
14
|
const module = await import('openai');
|
|
15
15
|
return module.default;
|
|
16
16
|
}
|
|
17
|
-
catch
|
|
17
|
+
catch {
|
|
18
18
|
throw new Error('OpenAI package not found. Install it with: npm install openai\n' +
|
|
19
19
|
'Make sure to run: pnpm install openai');
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,gBAAgB,GAAyC;IAC7D,wBAAwB,EAAE,IAAI;IAC9B,wBAAwB,EAAE,IAAI;IAC9B,wBAAwB,EAAE,IAAI;CAC/B,CAAA;AAED;;GAEG;AACH,KAAK,UAAU,SAAS;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;QACrC,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAAC,
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build-time utilities for generating and managing embeddings
|
|
3
|
+
* Used by CLI tools and custom build scripts
|
|
4
|
+
*/
|
|
5
|
+
import type { EmbeddingProvider } from '../providers/types.js';
|
|
6
|
+
import type { EmbeddingsIndex, EmbeddedDocument } from '../config/types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Simple character-based text chunking for build-time generation
|
|
9
|
+
*
|
|
10
|
+
* Simpler than the runtime chunking strategies, optimized for build-time batch processing.
|
|
11
|
+
* Splits text into fixed-size chunks with overlap.
|
|
12
|
+
*
|
|
13
|
+
* @param text - Text to chunk
|
|
14
|
+
* @param chunkSize - Size of each chunk in characters
|
|
15
|
+
* @param overlap - Overlap between chunks in characters
|
|
16
|
+
* @returns Array of text chunks
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { simpleChunkText } from '@opensaas/stack-rag/runtime'
|
|
21
|
+
*
|
|
22
|
+
* const chunks = simpleChunkText("Long document...", 500, 50)
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function simpleChunkText(text: string, chunkSize: number, overlap: number): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Compute SHA256 hash of content for change detection
|
|
28
|
+
*
|
|
29
|
+
* @param content - Content to hash
|
|
30
|
+
* @returns Hexadecimal hash string
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* import { hashContent } from '@opensaas/stack-rag/runtime'
|
|
35
|
+
*
|
|
36
|
+
* const hash = hashContent("document content")
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function hashContent(content: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Load existing embeddings index from file
|
|
42
|
+
*
|
|
43
|
+
* Used for differential updates - only regenerate embeddings for changed content.
|
|
44
|
+
*
|
|
45
|
+
* @param filePath - Path to embeddings JSON file
|
|
46
|
+
* @returns Loaded index or null if file doesn't exist or can't be loaded
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* import { loadExistingIndex } from '@opensaas/stack-rag/runtime'
|
|
51
|
+
*
|
|
52
|
+
* const existing = loadExistingIndex('.embeddings/docs.json')
|
|
53
|
+
* if (existing) {
|
|
54
|
+
* console.log(`Found ${Object.keys(existing.documents).length} existing documents`)
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function loadExistingIndex(filePath: string): EmbeddingsIndex | null;
|
|
59
|
+
/**
|
|
60
|
+
* Generate embeddings for a document with chunking
|
|
61
|
+
*
|
|
62
|
+
* Main utility for build-time embedding generation. Chunks the document,
|
|
63
|
+
* generates embeddings for each chunk, and returns a complete EmbeddedDocument.
|
|
64
|
+
*
|
|
65
|
+
* @param documentId - Unique identifier for the document
|
|
66
|
+
* @param content - Document content (plain text)
|
|
67
|
+
* @param provider - Embedding provider instance
|
|
68
|
+
* @param options - Generation options
|
|
69
|
+
* @returns Complete embedded document ready to be added to index
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* import { generateDocumentEmbeddings } from '@opensaas/stack-rag/runtime'
|
|
74
|
+
* import { createEmbeddingProvider } from '@opensaas/stack-rag/providers'
|
|
75
|
+
*
|
|
76
|
+
* const provider = createEmbeddingProvider({
|
|
77
|
+
* type: 'openai',
|
|
78
|
+
* apiKey: process.env.OPENAI_API_KEY
|
|
79
|
+
* })
|
|
80
|
+
*
|
|
81
|
+
* const doc = await generateDocumentEmbeddings(
|
|
82
|
+
* 'docs/getting-started',
|
|
83
|
+
* 'Document content here...',
|
|
84
|
+
* provider,
|
|
85
|
+
* {
|
|
86
|
+
* title: 'Getting Started',
|
|
87
|
+
* chunkSize: 500,
|
|
88
|
+
* chunkOverlap: 50,
|
|
89
|
+
* metadata: { section: 'guides' }
|
|
90
|
+
* }
|
|
91
|
+
* )
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export declare function generateDocumentEmbeddings(documentId: string, content: string, provider: EmbeddingProvider, options: {
|
|
95
|
+
title?: string;
|
|
96
|
+
chunkSize: number;
|
|
97
|
+
chunkOverlap: number;
|
|
98
|
+
metadata?: Record<string, unknown>;
|
|
99
|
+
}): Promise<EmbeddedDocument>;
|
|
100
|
+
//# sourceMappingURL=build-time.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-time.d.ts","sourceRoot":"","sources":["../../src/runtime/build-time.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAkB,MAAM,oBAAoB,CAAA;AAE3F;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAW1F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAY1E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,GACA,OAAO,CAAC,gBAAgB,CAAC,CAgF3B"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build-time utilities for generating and managing embeddings
|
|
3
|
+
* Used by CLI tools and custom build scripts
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
6
|
+
import { createHash } from 'node:crypto';
|
|
7
|
+
/**
|
|
8
|
+
* Simple character-based text chunking for build-time generation
|
|
9
|
+
*
|
|
10
|
+
* Simpler than the runtime chunking strategies, optimized for build-time batch processing.
|
|
11
|
+
* Splits text into fixed-size chunks with overlap.
|
|
12
|
+
*
|
|
13
|
+
* @param text - Text to chunk
|
|
14
|
+
* @param chunkSize - Size of each chunk in characters
|
|
15
|
+
* @param overlap - Overlap between chunks in characters
|
|
16
|
+
* @returns Array of text chunks
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { simpleChunkText } from '@opensaas/stack-rag/runtime'
|
|
21
|
+
*
|
|
22
|
+
* const chunks = simpleChunkText("Long document...", 500, 50)
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function simpleChunkText(text, chunkSize, overlap) {
|
|
26
|
+
const chunks = [];
|
|
27
|
+
let start = 0;
|
|
28
|
+
while (start < text.length) {
|
|
29
|
+
const end = Math.min(start + chunkSize, text.length);
|
|
30
|
+
chunks.push(text.slice(start, end));
|
|
31
|
+
start += chunkSize - overlap;
|
|
32
|
+
}
|
|
33
|
+
return chunks;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Compute SHA256 hash of content for change detection
|
|
37
|
+
*
|
|
38
|
+
* @param content - Content to hash
|
|
39
|
+
* @returns Hexadecimal hash string
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* import { hashContent } from '@opensaas/stack-rag/runtime'
|
|
44
|
+
*
|
|
45
|
+
* const hash = hashContent("document content")
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export function hashContent(content) {
|
|
49
|
+
return createHash('sha256').update(content).digest('hex');
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Load existing embeddings index from file
|
|
53
|
+
*
|
|
54
|
+
* Used for differential updates - only regenerate embeddings for changed content.
|
|
55
|
+
*
|
|
56
|
+
* @param filePath - Path to embeddings JSON file
|
|
57
|
+
* @returns Loaded index or null if file doesn't exist or can't be loaded
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* import { loadExistingIndex } from '@opensaas/stack-rag/runtime'
|
|
62
|
+
*
|
|
63
|
+
* const existing = loadExistingIndex('.embeddings/docs.json')
|
|
64
|
+
* if (existing) {
|
|
65
|
+
* console.log(`Found ${Object.keys(existing.documents).length} existing documents`)
|
|
66
|
+
* }
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export function loadExistingIndex(filePath) {
|
|
70
|
+
if (!existsSync(filePath)) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
75
|
+
return JSON.parse(content);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
console.warn(`Warning: Could not load existing embeddings from ${filePath}`);
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Generate embeddings for a document with chunking
|
|
84
|
+
*
|
|
85
|
+
* Main utility for build-time embedding generation. Chunks the document,
|
|
86
|
+
* generates embeddings for each chunk, and returns a complete EmbeddedDocument.
|
|
87
|
+
*
|
|
88
|
+
* @param documentId - Unique identifier for the document
|
|
89
|
+
* @param content - Document content (plain text)
|
|
90
|
+
* @param provider - Embedding provider instance
|
|
91
|
+
* @param options - Generation options
|
|
92
|
+
* @returns Complete embedded document ready to be added to index
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```typescript
|
|
96
|
+
* import { generateDocumentEmbeddings } from '@opensaas/stack-rag/runtime'
|
|
97
|
+
* import { createEmbeddingProvider } from '@opensaas/stack-rag/providers'
|
|
98
|
+
*
|
|
99
|
+
* const provider = createEmbeddingProvider({
|
|
100
|
+
* type: 'openai',
|
|
101
|
+
* apiKey: process.env.OPENAI_API_KEY
|
|
102
|
+
* })
|
|
103
|
+
*
|
|
104
|
+
* const doc = await generateDocumentEmbeddings(
|
|
105
|
+
* 'docs/getting-started',
|
|
106
|
+
* 'Document content here...',
|
|
107
|
+
* provider,
|
|
108
|
+
* {
|
|
109
|
+
* title: 'Getting Started',
|
|
110
|
+
* chunkSize: 500,
|
|
111
|
+
* chunkOverlap: 50,
|
|
112
|
+
* metadata: { section: 'guides' }
|
|
113
|
+
* }
|
|
114
|
+
* )
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export async function generateDocumentEmbeddings(documentId, content, provider, options) {
|
|
118
|
+
const { title, chunkSize, chunkOverlap, metadata = {} } = options;
|
|
119
|
+
// Hash content for differential updates
|
|
120
|
+
const contentHash = hashContent(content);
|
|
121
|
+
// Prepare all text chunks to embed
|
|
122
|
+
const allTextChunks = [];
|
|
123
|
+
const chunkTypes = [];
|
|
124
|
+
// Add title chunk first if title exists
|
|
125
|
+
if (title) {
|
|
126
|
+
allTextChunks.push(title);
|
|
127
|
+
chunkTypes.push('title');
|
|
128
|
+
}
|
|
129
|
+
// Chunk the content
|
|
130
|
+
const contentChunks = simpleChunkText(content, chunkSize, chunkOverlap);
|
|
131
|
+
allTextChunks.push(...contentChunks);
|
|
132
|
+
contentChunks.forEach(() => chunkTypes.push('content'));
|
|
133
|
+
// Generate embeddings in batch for all chunks
|
|
134
|
+
const allEmbeddings = await provider.embedBatch(allTextChunks);
|
|
135
|
+
// Build chunks with embeddings
|
|
136
|
+
const chunks = [];
|
|
137
|
+
let embeddingIndex = 0;
|
|
138
|
+
let contentChunkIndex = 0;
|
|
139
|
+
for (let i = 0; i < chunkTypes.length; i++) {
|
|
140
|
+
const type = chunkTypes[i];
|
|
141
|
+
if (type === 'title') {
|
|
142
|
+
// Title chunk
|
|
143
|
+
chunks.push({
|
|
144
|
+
text: allTextChunks[embeddingIndex],
|
|
145
|
+
embedding: allEmbeddings[embeddingIndex],
|
|
146
|
+
metadata: {
|
|
147
|
+
chunkIndex: -1, // Special index for title
|
|
148
|
+
startOffset: 0,
|
|
149
|
+
endOffset: 0,
|
|
150
|
+
isTitle: true,
|
|
151
|
+
...metadata,
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// Content chunk
|
|
157
|
+
chunks.push({
|
|
158
|
+
text: allTextChunks[embeddingIndex],
|
|
159
|
+
embedding: allEmbeddings[embeddingIndex],
|
|
160
|
+
metadata: {
|
|
161
|
+
chunkIndex: contentChunkIndex,
|
|
162
|
+
startOffset: contentChunkIndex * (chunkSize - chunkOverlap),
|
|
163
|
+
endOffset: Math.min((contentChunkIndex + 1) * chunkSize - contentChunkIndex * chunkOverlap, content.length),
|
|
164
|
+
...metadata,
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
contentChunkIndex++;
|
|
168
|
+
}
|
|
169
|
+
embeddingIndex++;
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
id: documentId,
|
|
173
|
+
title,
|
|
174
|
+
chunks,
|
|
175
|
+
embeddingMetadata: {
|
|
176
|
+
model: provider.model,
|
|
177
|
+
provider: provider.type,
|
|
178
|
+
dimensions: provider.dimensions,
|
|
179
|
+
generatedAt: new Date().toISOString(),
|
|
180
|
+
},
|
|
181
|
+
generatedAt: new Date().toISOString(),
|
|
182
|
+
contentHash,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=build-time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-time.js","sourceRoot":"","sources":["../../src/runtime/build-time.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -11,4 +11,7 @@ export { chunkText, estimateTokenCount, mergeSmallChunks, type ChunkingStrategy,
|
|
|
11
11
|
export { generateEmbedding, generateEmbeddings, shouldRegenerateEmbedding, hashText, validateEmbeddingDimensions, mergeEmbeddings, type GenerateEmbeddingOptions, type GenerateEmbeddingsOptions, type ChunkedEmbedding, } from './embeddings.js';
|
|
12
12
|
export { semanticSearch, findSimilar, type SemanticSearchOptions, type FindSimilarOptions, } from './search.js';
|
|
13
13
|
export { batchProcess, RateLimiter, ProcessingQueue, type BatchProcessOptions, type BatchProgress, type BatchError, type BatchProcessResult, } from './batch.js';
|
|
14
|
+
export { simpleChunkText, hashContent, loadExistingIndex, generateDocumentEmbeddings, } from './build-time.js';
|
|
15
|
+
export { stripMarkdown, extractMarkdownText } from './markdown.js';
|
|
16
|
+
export { createProviderFromEnv, getProviderConfigFromEnv, type ProviderType, } from './provider-helpers.js';
|
|
14
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,SAAS,GACf,MAAM,eAAe,CAAA;AAGtB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,EACzB,QAAQ,EACR,2BAA2B,EAC3B,eAAe,EACf,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,cAAc,EACd,WAAW,EACX,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,SAAS,GACf,MAAM,eAAe,CAAA;AAGtB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,EACzB,QAAQ,EACR,2BAA2B,EAC3B,eAAe,EACf,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,cAAc,EACd,WAAW,EACX,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAGlE,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,YAAY,GAClB,MAAM,uBAAuB,CAAA"}
|
package/dist/runtime/index.js
CHANGED
|
@@ -15,4 +15,10 @@ export { generateEmbedding, generateEmbeddings, shouldRegenerateEmbedding, hashT
|
|
|
15
15
|
export { semanticSearch, findSimilar, } from './search.js';
|
|
16
16
|
// Batch processing
|
|
17
17
|
export { batchProcess, RateLimiter, ProcessingQueue, } from './batch.js';
|
|
18
|
+
// Build-time utilities
|
|
19
|
+
export { simpleChunkText, hashContent, loadExistingIndex, generateDocumentEmbeddings, } from './build-time.js';
|
|
20
|
+
// Markdown processing
|
|
21
|
+
export { stripMarkdown, extractMarkdownText } from './markdown.js';
|
|
22
|
+
// Provider helpers
|
|
23
|
+
export { createProviderFromEnv, getProviderConfigFromEnv, } from './provider-helpers.js';
|
|
18
24
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gBAAgB;AAChB,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,gBAAgB,GAIjB,MAAM,eAAe,CAAA;AAEtB,uBAAuB;AACvB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,EACzB,QAAQ,EACR,2BAA2B,EAC3B,eAAe,GAIhB,MAAM,iBAAiB,CAAA;AAExB,kBAAkB;AAClB,OAAO,EACL,cAAc,EACd,WAAW,GAGZ,MAAM,aAAa,CAAA;AAEpB,mBAAmB;AACnB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,eAAe,GAKhB,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gBAAgB;AAChB,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,gBAAgB,GAIjB,MAAM,eAAe,CAAA;AAEtB,uBAAuB;AACvB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,EACzB,QAAQ,EACR,2BAA2B,EAC3B,eAAe,GAIhB,MAAM,iBAAiB,CAAA;AAExB,kBAAkB;AAClB,OAAO,EACL,cAAc,EACd,WAAW,GAGZ,MAAM,aAAa,CAAA;AAEpB,mBAAmB;AACnB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,eAAe,GAKhB,MAAM,YAAY,CAAA;AAEnB,uBAAuB;AACvB,OAAO,EACL,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAA;AAExB,sBAAsB;AACtB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAElE,mBAAmB;AACnB,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GAEzB,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown processing utilities for content preparation
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Strip markdown formatting for cleaner text suitable for embeddings
|
|
6
|
+
*
|
|
7
|
+
* Removes code blocks, formatting markers, links, images, and HTML tags
|
|
8
|
+
* while preserving the actual content.
|
|
9
|
+
*
|
|
10
|
+
* @param markdown - Markdown text to process
|
|
11
|
+
* @returns Plain text with markdown removed
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { stripMarkdown } from '@opensaas/stack-rag/runtime'
|
|
16
|
+
*
|
|
17
|
+
* const markdown = '# Hello\n\nThis is **bold** text with a [link](url).'
|
|
18
|
+
* const plain = stripMarkdown(markdown)
|
|
19
|
+
* // Returns: 'Hello\n\nThis is bold text with a link.'
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function stripMarkdown(markdown: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Extract text content from common markdown structures
|
|
25
|
+
*
|
|
26
|
+
* More aggressive than stripMarkdown - extracts only text content,
|
|
27
|
+
* removes all structural elements.
|
|
28
|
+
*
|
|
29
|
+
* @param markdown - Markdown text
|
|
30
|
+
* @returns Extracted plain text
|
|
31
|
+
*/
|
|
32
|
+
export declare function extractMarkdownText(markdown: string): string;
|
|
33
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/runtime/markdown.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA8BtD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuD5D"}
|