rag-lite-ts 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/README.md +94 -65
  2. package/dist/cli/indexer.d.ts.map +1 -1
  3. package/dist/cli/indexer.js +78 -50
  4. package/dist/cli/indexer.js.map +1 -1
  5. package/dist/cli/search.d.ts.map +1 -1
  6. package/dist/cli/search.js +13 -30
  7. package/dist/cli/search.js.map +1 -1
  8. package/dist/cli.js +2 -2
  9. package/dist/cli.js.map +1 -1
  10. package/dist/config.d.ts +34 -73
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +50 -255
  13. package/dist/config.js.map +1 -1
  14. package/dist/core/adapters.d.ts +93 -0
  15. package/dist/core/adapters.d.ts.map +1 -0
  16. package/dist/core/adapters.js +139 -0
  17. package/dist/core/adapters.js.map +1 -0
  18. package/dist/core/chunker.d.ts +117 -0
  19. package/dist/core/chunker.d.ts.map +1 -0
  20. package/dist/core/chunker.js +73 -0
  21. package/dist/core/chunker.js.map +1 -0
  22. package/dist/core/config.d.ts +102 -0
  23. package/dist/core/config.d.ts.map +1 -0
  24. package/dist/core/config.js +240 -0
  25. package/dist/core/config.js.map +1 -0
  26. package/dist/{db.d.ts → core/db.d.ts} +25 -9
  27. package/dist/core/db.d.ts.map +1 -0
  28. package/dist/{db.js → core/db.js} +86 -16
  29. package/dist/core/db.js.map +1 -0
  30. package/dist/{error-handler.d.ts → core/error-handler.d.ts} +23 -2
  31. package/dist/core/error-handler.d.ts.map +1 -0
  32. package/dist/{error-handler.js → core/error-handler.js} +51 -8
  33. package/dist/core/error-handler.js.map +1 -0
  34. package/dist/core/index.d.ts +57 -0
  35. package/dist/core/index.d.ts.map +1 -0
  36. package/dist/core/index.js +66 -0
  37. package/dist/core/index.js.map +1 -0
  38. package/dist/core/ingestion.d.ts +143 -0
  39. package/dist/core/ingestion.d.ts.map +1 -0
  40. package/dist/core/ingestion.js +347 -0
  41. package/dist/core/ingestion.js.map +1 -0
  42. package/dist/core/interfaces.d.ts +408 -0
  43. package/dist/core/interfaces.d.ts.map +1 -0
  44. package/dist/core/interfaces.js +106 -0
  45. package/dist/core/interfaces.js.map +1 -0
  46. package/dist/{path-manager.d.ts → core/path-manager.d.ts} +5 -0
  47. package/dist/core/path-manager.d.ts.map +1 -0
  48. package/dist/{path-manager.js → core/path-manager.js} +5 -0
  49. package/dist/core/path-manager.js.map +1 -0
  50. package/dist/core/search-example.d.ts +25 -0
  51. package/dist/core/search-example.d.ts.map +1 -0
  52. package/dist/core/search-example.js +138 -0
  53. package/dist/core/search-example.js.map +1 -0
  54. package/dist/core/search-pipeline-example.d.ts +21 -0
  55. package/dist/core/search-pipeline-example.d.ts.map +1 -0
  56. package/dist/core/search-pipeline-example.js +188 -0
  57. package/dist/core/search-pipeline-example.js.map +1 -0
  58. package/dist/core/search-pipeline.d.ts +111 -0
  59. package/dist/core/search-pipeline.d.ts.map +1 -0
  60. package/dist/core/search-pipeline.js +287 -0
  61. package/dist/core/search-pipeline.js.map +1 -0
  62. package/dist/core/search.d.ts +104 -0
  63. package/dist/core/search.d.ts.map +1 -0
  64. package/dist/core/search.js +218 -0
  65. package/dist/core/search.js.map +1 -0
  66. package/dist/core/types.d.ts +63 -0
  67. package/dist/core/types.d.ts.map +1 -0
  68. package/dist/core/types.js +6 -0
  69. package/dist/core/types.js.map +1 -0
  70. package/dist/{vector-index.d.ts → core/vector-index.d.ts} +4 -0
  71. package/dist/core/vector-index.d.ts.map +1 -0
  72. package/dist/{vector-index.js → core/vector-index.js} +19 -0
  73. package/dist/core/vector-index.js.map +1 -0
  74. package/dist/dom-polyfills.d.ts +6 -0
  75. package/dist/dom-polyfills.d.ts.map +1 -0
  76. package/dist/dom-polyfills.js +40 -0
  77. package/dist/dom-polyfills.js.map +1 -0
  78. package/dist/examples/clean-api-examples.d.ts +44 -0
  79. package/dist/examples/clean-api-examples.d.ts.map +1 -0
  80. package/dist/examples/clean-api-examples.js +206 -0
  81. package/dist/examples/clean-api-examples.js.map +1 -0
  82. package/dist/factories/index.d.ts +43 -0
  83. package/dist/factories/index.d.ts.map +1 -0
  84. package/dist/factories/index.js +44 -0
  85. package/dist/factories/index.js.map +1 -0
  86. package/dist/factories/text-factory.d.ts +466 -0
  87. package/dist/factories/text-factory.d.ts.map +1 -0
  88. package/dist/factories/text-factory.js +719 -0
  89. package/dist/factories/text-factory.js.map +1 -0
  90. package/dist/file-processor.d.ts +2 -2
  91. package/dist/file-processor.d.ts.map +1 -1
  92. package/dist/file-processor.js +3 -3
  93. package/dist/file-processor.js.map +1 -1
  94. package/dist/index-manager.d.ts +3 -2
  95. package/dist/index-manager.d.ts.map +1 -1
  96. package/dist/index-manager.js +13 -11
  97. package/dist/index-manager.js.map +1 -1
  98. package/dist/index.d.ts +63 -8
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +91 -16
  101. package/dist/index.js.map +1 -1
  102. package/dist/indexer.js +1 -1
  103. package/dist/indexer.js.map +1 -1
  104. package/dist/ingestion.d.ts +30 -156
  105. package/dist/ingestion.d.ts.map +1 -1
  106. package/dist/ingestion.js +58 -675
  107. package/dist/ingestion.js.map +1 -1
  108. package/dist/mcp-server.js +86 -55
  109. package/dist/mcp-server.js.map +1 -1
  110. package/dist/preprocess.js +1 -1
  111. package/dist/preprocess.js.map +1 -1
  112. package/dist/search-standalone.js +1 -1
  113. package/dist/search-standalone.js.map +1 -1
  114. package/dist/search.d.ts +32 -76
  115. package/dist/search.d.ts.map +1 -1
  116. package/dist/search.js +80 -428
  117. package/dist/search.js.map +1 -1
  118. package/dist/text/chunker.d.ts +32 -0
  119. package/dist/text/chunker.d.ts.map +1 -0
  120. package/dist/{chunker.js → text/chunker.js} +98 -75
  121. package/dist/text/chunker.js.map +1 -0
  122. package/dist/{embedder.d.ts → text/embedder.d.ts} +22 -1
  123. package/dist/text/embedder.d.ts.map +1 -0
  124. package/dist/{embedder.js → text/embedder.js} +71 -4
  125. package/dist/text/embedder.js.map +1 -0
  126. package/dist/text/index.d.ts +7 -0
  127. package/dist/text/index.d.ts.map +1 -0
  128. package/dist/text/index.js +8 -0
  129. package/dist/text/index.js.map +1 -0
  130. package/dist/text/preprocessors/index.d.ts +17 -0
  131. package/dist/text/preprocessors/index.d.ts.map +1 -0
  132. package/dist/text/preprocessors/index.js +38 -0
  133. package/dist/text/preprocessors/index.js.map +1 -0
  134. package/dist/text/preprocessors/mdx.d.ts +25 -0
  135. package/dist/text/preprocessors/mdx.d.ts.map +1 -0
  136. package/dist/text/preprocessors/mdx.js +101 -0
  137. package/dist/text/preprocessors/mdx.js.map +1 -0
  138. package/dist/text/preprocessors/mermaid.d.ts +68 -0
  139. package/dist/text/preprocessors/mermaid.d.ts.map +1 -0
  140. package/dist/text/preprocessors/mermaid.js +330 -0
  141. package/dist/text/preprocessors/mermaid.js.map +1 -0
  142. package/dist/text/preprocessors/registry.d.ts +56 -0
  143. package/dist/text/preprocessors/registry.d.ts.map +1 -0
  144. package/dist/text/preprocessors/registry.js +180 -0
  145. package/dist/text/preprocessors/registry.js.map +1 -0
  146. package/dist/text/reranker.d.ts +60 -0
  147. package/dist/text/reranker.d.ts.map +1 -0
  148. package/dist/{reranker.js → text/reranker.js} +134 -19
  149. package/dist/text/reranker.js.map +1 -0
  150. package/dist/{tokenizer.d.ts → text/tokenizer.d.ts} +1 -0
  151. package/dist/text/tokenizer.d.ts.map +1 -0
  152. package/dist/{tokenizer.js → text/tokenizer.js} +7 -2
  153. package/dist/text/tokenizer.js.map +1 -0
  154. package/dist/types.d.ts +1 -1
  155. package/dist/types.d.ts.map +1 -1
  156. package/package.json +2 -2
  157. package/dist/chunker.d.ts +0 -47
  158. package/dist/chunker.d.ts.map +0 -1
  159. package/dist/chunker.js.map +0 -1
  160. package/dist/db.d.ts.map +0 -1
  161. package/dist/db.js.map +0 -1
  162. package/dist/embedder.d.ts.map +0 -1
  163. package/dist/embedder.js.map +0 -1
  164. package/dist/error-handler.d.ts.map +0 -1
  165. package/dist/error-handler.js.map +0 -1
  166. package/dist/path-manager.d.ts.map +0 -1
  167. package/dist/path-manager.js.map +0 -1
  168. package/dist/reranker.d.ts +0 -40
  169. package/dist/reranker.d.ts.map +0 -1
  170. package/dist/reranker.js.map +0 -1
  171. package/dist/resource-manager-demo.d.ts +0 -7
  172. package/dist/resource-manager-demo.d.ts.map +0 -1
  173. package/dist/resource-manager-demo.js +0 -52
  174. package/dist/resource-manager-demo.js.map +0 -1
  175. package/dist/resource-manager.d.ts +0 -129
  176. package/dist/resource-manager.d.ts.map +0 -1
  177. package/dist/resource-manager.js +0 -389
  178. package/dist/resource-manager.js.map +0 -1
  179. package/dist/tokenizer.d.ts.map +0 -1
  180. package/dist/tokenizer.js.map +0 -1
  181. package/dist/vector-index.d.ts.map +0 -1
  182. package/dist/vector-index.js.map +0 -1
@@ -0,0 +1,240 @@
1
+ /**
2
+ * CORE MODULE — Shared between text-only (rag-lite-ts) and future multimodal (rag-lite-mm)
3
+ * Model-agnostic. No transformer or modality-specific logic.
4
+ */
5
+ import { homedir } from 'os';
6
+ import { join } from 'path';
7
+ /**
8
+ * Standard exit codes for different error conditions
9
+ */
10
+ export const EXIT_CODES = {
11
+ SUCCESS: 0,
12
+ GENERAL_ERROR: 1,
13
+ INVALID_ARGUMENTS: 2,
14
+ CONFIGURATION_ERROR: 3,
15
+ FILE_NOT_FOUND: 4,
16
+ DATABASE_ERROR: 5,
17
+ MODEL_ERROR: 6,
18
+ INDEX_ERROR: 7,
19
+ PERMISSION_ERROR: 8
20
+ };
21
+ /**
22
+ * Configuration validation error with specific exit code
23
+ */
24
+ export class ConfigurationError extends Error {
25
+ exitCode;
26
+ constructor(message, exitCode = EXIT_CODES.CONFIGURATION_ERROR) {
27
+ super(message);
28
+ this.exitCode = exitCode;
29
+ this.name = 'ConfigurationError';
30
+ }
31
+ }
32
+ /**
33
+ * Get the default model cache path as specified in the requirements
34
+ * @returns Default cache path (~/.raglite/models/)
35
+ */
36
+ export function getDefaultModelCachePath() {
37
+ return join(homedir(), '.raglite', 'models');
38
+ }
39
+ /**
40
+ * Validates core configuration fields
41
+ * @param config - Configuration object to validate
42
+ * @throws {ConfigurationError} If configuration is invalid
43
+ */
44
+ export function validateCoreConfig(config) {
45
+ if (!config || typeof config !== 'object') {
46
+ throw new ConfigurationError('Configuration must be an object');
47
+ }
48
+ // Check required string fields
49
+ const requiredStrings = ['db_file', 'index_file'];
50
+ for (const field of requiredStrings) {
51
+ if (!config[field] || typeof config[field] !== 'string') {
52
+ throw new ConfigurationError(`Configuration error: '${field}' must be a non-empty string.\n` +
53
+ `Current value: ${JSON.stringify(config[field])}\n` +
54
+ `Please check your configuration file.`);
55
+ }
56
+ }
57
+ // Validate path_storage_strategy
58
+ if (!['absolute', 'relative'].includes(config.path_storage_strategy)) {
59
+ throw new ConfigurationError(`Configuration error: 'path_storage_strategy' must be either 'absolute' or 'relative'.\n` +
60
+ `Current value: ${JSON.stringify(config.path_storage_strategy)}\n` +
61
+ `Please set it to 'absolute' or 'relative'.`);
62
+ }
63
+ // Check required numeric fields are positive
64
+ const requiredNumbers = ['chunk_size', 'chunk_overlap', 'batch_size', 'top_k'];
65
+ for (const field of requiredNumbers) {
66
+ if (typeof config[field] !== 'number' || config[field] <= 0) {
67
+ throw new ConfigurationError(`Configuration error: '${field}' must be a positive number.\n` +
68
+ `Current value: ${JSON.stringify(config[field])}\n` +
69
+ `Please ensure all numeric values are greater than 0.`);
70
+ }
71
+ }
72
+ // Validate optional model_cache_path field
73
+ if (config.model_cache_path !== undefined && (typeof config.model_cache_path !== 'string' || config.model_cache_path.trim() === '')) {
74
+ throw new ConfigurationError(`Configuration error: 'model_cache_path' must be a non-empty string when provided.\n` +
75
+ `Current value: ${JSON.stringify(config.model_cache_path)}\n` +
76
+ `Please provide a valid directory path or remove the field to use default caching.`);
77
+ }
78
+ // Validate chunk_overlap is less than chunk_size
79
+ if (config.chunk_overlap >= config.chunk_size) {
80
+ throw new ConfigurationError(`Configuration error: chunk_overlap (${config.chunk_overlap}) must be less than chunk_size (${config.chunk_size}).\n` +
81
+ `Recommended: Set chunk_overlap to about 20% of chunk_size (e.g., chunk_size: 250, chunk_overlap: 50).`);
82
+ }
83
+ // Validate reasonable ranges for performance
84
+ if (config.chunk_size > 1000) {
85
+ console.warn(`Warning: Large chunk_size (${config.chunk_size}) may impact performance. Recommended range: 200-400 tokens.`);
86
+ }
87
+ if (config.batch_size > 64) {
88
+ console.warn(`Warning: Large batch_size (${config.batch_size}) may cause memory issues. Recommended range: 8-32.`);
89
+ }
90
+ }
91
+ /**
92
+ * Get default configuration for different embedding models
93
+ * @param modelName - Name of the embedding model
94
+ * @returns Model-specific defaults
95
+ */
96
+ export function getModelDefaults(modelName) {
97
+ // Default configuration for most models
98
+ const defaults = {
99
+ dimensions: 384, // Most common dimension for sentence transformers
100
+ chunk_size: 250,
101
+ chunk_overlap: 50,
102
+ batch_size: 16
103
+ };
104
+ // Model-specific overrides
105
+ if (modelName) {
106
+ const normalizedName = modelName.toLowerCase();
107
+ // Specific model configurations
108
+ if (normalizedName.includes('all-mpnet-base-v2')) {
109
+ defaults.dimensions = 768;
110
+ defaults.chunk_size = 400;
111
+ defaults.chunk_overlap = 80;
112
+ defaults.batch_size = 8;
113
+ }
114
+ else if (normalizedName.includes('mpnet') || normalizedName.includes('768')) {
115
+ defaults.dimensions = 768;
116
+ }
117
+ else if (normalizedName.includes('512')) {
118
+ defaults.dimensions = 512;
119
+ }
120
+ else if (normalizedName.includes('384') || normalizedName.includes('minilm')) {
121
+ defaults.dimensions = 384;
122
+ }
123
+ }
124
+ return defaults;
125
+ }
126
+ /**
127
+ * Default core configuration object
128
+ * Model-agnostic settings that can be used by core modules
129
+ */
130
+ export const config = {
131
+ chunk_size: parseInt(process.env.RAG_CHUNK_SIZE || '250', 10),
132
+ chunk_overlap: parseInt(process.env.RAG_CHUNK_OVERLAP || '50', 10),
133
+ batch_size: parseInt(process.env.RAG_BATCH_SIZE || '16', 10),
134
+ top_k: parseInt(process.env.RAG_TOP_K || '10', 10),
135
+ db_file: process.env.RAG_DB_FILE || 'db.sqlite',
136
+ index_file: process.env.RAG_INDEX_FILE || 'vector-index.bin',
137
+ model_cache_path: process.env.RAG_MODEL_CACHE_PATH || getDefaultModelCachePath(),
138
+ path_storage_strategy: process.env.RAG_PATH_STORAGE_STRATEGY || 'relative',
139
+ embedding_model: process.env.RAG_EMBEDDING_MODEL || 'sentence-transformers/all-MiniLM-L6-v2',
140
+ rerank_enabled: process.env.RAG_RERANK_ENABLED === 'true',
141
+ preprocessing: { mode: 'balanced' }
142
+ };
143
+ /**
144
+ * Validate preprocessing configuration
145
+ */
146
+ export function validatePreprocessingConfig(config) {
147
+ if (!config || typeof config !== 'object') {
148
+ throw new ConfigurationError('Preprocessing configuration must be an object');
149
+ }
150
+ if (!config.mode || !['strict', 'balanced', 'rich'].includes(config.mode)) {
151
+ throw new ConfigurationError('preprocessing.mode must be one of: strict, balanced, rich');
152
+ }
153
+ // Validate overrides if present
154
+ if (config.overrides !== undefined) {
155
+ if (!config.overrides || typeof config.overrides !== 'object') {
156
+ throw new ConfigurationError('preprocessing.overrides must be an object when provided');
157
+ }
158
+ const validValues = ['strip', 'keep', 'placeholder', 'extract'];
159
+ // Validate MDX override
160
+ if (config.overrides.mdx !== undefined && !validValues.includes(config.overrides.mdx)) {
161
+ throw new ConfigurationError('preprocessing.overrides.mdx must be one of: strip, keep, placeholder');
162
+ }
163
+ // Validate Mermaid override
164
+ if (config.overrides.mermaid !== undefined && !validValues.includes(config.overrides.mermaid)) {
165
+ throw new ConfigurationError('preprocessing.overrides.mermaid must be one of: strip, keep, placeholder, extract');
166
+ }
167
+ // Validate code override
168
+ if (config.overrides.code !== undefined && !validValues.includes(config.overrides.code)) {
169
+ throw new ConfigurationError('preprocessing.overrides.code must be one of: strip, keep, placeholder');
170
+ }
171
+ }
172
+ }
173
+ /**
174
+ * Merge preprocessing configurations with mode defaults
175
+ */
176
+ export function mergePreprocessingConfig(config) {
177
+ const modeDefaults = {
178
+ strict: { mdx: 'strip', mermaid: 'strip', code: 'strip' },
179
+ balanced: { mdx: 'placeholder', mermaid: 'placeholder', code: 'keep' },
180
+ rich: { mdx: 'keep', mermaid: 'extract', code: 'keep' }
181
+ };
182
+ const defaults = modeDefaults[config.mode] || modeDefaults.balanced;
183
+ return {
184
+ ...defaults,
185
+ ...config.overrides
186
+ };
187
+ }
188
+ /**
189
+ * Utility function to handle unrecoverable errors with descriptive messages
190
+ * Logs error and exits immediately with appropriate exit code
191
+ * @param error - Error object or message
192
+ * @param context - Context where the error occurred
193
+ * @param exitCode - Exit code to use (defaults to GENERAL_ERROR)
194
+ */
195
+ export function handleUnrecoverableError(error, context, exitCode = EXIT_CODES.GENERAL_ERROR) {
196
+ const errorMessage = error instanceof Error ? error.message : String(error);
197
+ console.error(`\nFatal Error in ${context}:`);
198
+ console.error(errorMessage);
199
+ console.error('\nThe system cannot continue and will exit immediately.');
200
+ // Provide context-specific guidance
201
+ switch (exitCode) {
202
+ case EXIT_CODES.CONFIGURATION_ERROR:
203
+ console.error('\nPlease check your configuration and try again.');
204
+ break;
205
+ case EXIT_CODES.DATABASE_ERROR:
206
+ console.error('\nTry running "raglite rebuild" to fix database issues.');
207
+ break;
208
+ case EXIT_CODES.MODEL_ERROR:
209
+ console.error('\nEnsure you have internet connection for model download and sufficient disk space.');
210
+ break;
211
+ case EXIT_CODES.INDEX_ERROR:
212
+ console.error('\nTry running "raglite rebuild" to recreate the vector index.');
213
+ break;
214
+ case EXIT_CODES.FILE_NOT_FOUND:
215
+ console.error('\nPlease check that the specified files or directories exist and are accessible.');
216
+ break;
217
+ case EXIT_CODES.PERMISSION_ERROR:
218
+ console.error('\nPlease check file and directory permissions.');
219
+ break;
220
+ default:
221
+ console.error('\nIf this problem persists, please report it as a bug.');
222
+ }
223
+ process.exit(exitCode);
224
+ }
225
+ /**
226
+ * Utility function for safe error logging with context
227
+ * @param error - Error to log
228
+ * @param context - Context where error occurred
229
+ * @param skipError - Whether to skip this error and continue (default: false)
230
+ */
231
+ export function logError(error, context, skipError = false) {
232
+ const errorMessage = error instanceof Error ? error.message : String(error);
233
+ if (skipError) {
234
+ console.error(`Warning in ${context}: ${errorMessage} (skipping and continuing)`);
235
+ }
236
+ else {
237
+ console.error(`Error in ${context}: ${errorMessage}`);
238
+ }
239
+ }
240
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * CORE MODULE — Shared between text-only (rag-lite-ts) and future multimodal (rag-lite-mm)
3
+ * Model-agnostic. No transformer or modality-specific logic.
4
+ */
1
5
  import sqlite3 from 'sqlite3';
2
6
  export interface DatabaseConnection {
3
7
  db: sqlite3.Database;
@@ -6,15 +10,18 @@ export interface DatabaseConnection {
6
10
  all: (sql: string, params?: any[]) => Promise<any[]>;
7
11
  close: () => Promise<void>;
8
12
  }
9
- export interface ChunkResult {
13
+ export interface ContentChunk {
10
14
  id: number;
11
15
  embedding_id: string;
12
16
  document_id: number;
13
- text: string;
17
+ content: string;
18
+ content_type: string;
14
19
  chunk_index: number;
20
+ metadata?: Record<string, any>;
15
21
  created_at: string;
16
22
  document_source: string;
17
23
  document_title: string;
24
+ document_content_type: string;
18
25
  }
19
26
  /**
20
27
  * Opens a SQLite database connection with promisified methods
@@ -24,41 +31,50 @@ export interface ChunkResult {
24
31
  export declare function openDatabase(dbPath: string): Promise<DatabaseConnection>;
25
32
  /**
26
33
  * Initializes the database schema with all required tables and indexes
34
+ * Enhanced to support content types for multimodal use
27
35
  * @param connection - Database connection object
28
36
  */
29
37
  export declare function initializeSchema(connection: DatabaseConnection): Promise<void>;
30
38
  /**
31
- * Inserts a new document into the database
39
+ * Inserts a new document into the database with content type support
32
40
  * @param connection - Database connection object
33
41
  * @param source - Source path of the document
34
42
  * @param title - Title of the document
43
+ * @param contentType - Type of content ('text', 'image', etc.)
44
+ * @param metadata - Optional metadata object
35
45
  * @returns Promise that resolves to the document ID
36
46
  */
37
- export declare function insertDocument(connection: DatabaseConnection, source: string, title: string): Promise<number>;
47
+ export declare function insertDocument(connection: DatabaseConnection, source: string, title: string, contentType?: string, metadata?: Record<string, any>): Promise<number>;
38
48
  /**
39
- * Inserts or updates a chunk in the database (upsert operation)
49
+ * Inserts or updates a chunk in the database with content type support (upsert operation)
40
50
  * @param connection - Database connection object
41
51
  * @param embeddingId - Unique embedding ID for the chunk
42
52
  * @param documentId - ID of the parent document
43
- * @param text - Text content of the chunk
53
+ * @param content - Content of the chunk (text, image path, etc.)
44
54
  * @param chunkIndex - Index of the chunk within the document
55
+ * @param contentType - Type of content ('text', 'image', etc.)
56
+ * @param metadata - Optional metadata object
45
57
  */
46
- export declare function insertChunk(connection: DatabaseConnection, embeddingId: string, documentId: number, text: string, chunkIndex: number): Promise<void>;
58
+ export declare function insertChunk(connection: DatabaseConnection, embeddingId: string, documentId: number, content: string, chunkIndex: number, contentType?: string, metadata?: Record<string, any>): Promise<void>;
47
59
  /**
48
60
  * Inserts a new document or returns existing document ID if it already exists
61
+ * Enhanced with content type support
49
62
  * @param connection - Database connection object
50
63
  * @param source - Source path of the document
51
64
  * @param title - Title of the document
65
+ * @param contentType - Type of content ('text', 'image', etc.)
66
+ * @param metadata - Optional metadata object
52
67
  * @returns Promise that resolves to the document ID
53
68
  */
54
- export declare function upsertDocument(connection: DatabaseConnection, source: string, title: string): Promise<number>;
69
+ export declare function upsertDocument(connection: DatabaseConnection, source: string, title: string, contentType?: string, metadata?: Record<string, any>): Promise<number>;
55
70
  /**
56
71
  * Retrieves chunks by their embedding IDs with document metadata
72
+ * Enhanced to include content type information
57
73
  * @param connection - Database connection object
58
74
  * @param embeddingIds - Array of embedding IDs to retrieve
59
75
  * @returns Promise that resolves to an array of chunk results with document metadata
60
76
  */
61
- export declare function getChunksByEmbeddingIds(connection: DatabaseConnection, embeddingIds: string[]): Promise<ChunkResult[]>;
77
+ export declare function getChunksByEmbeddingIds(connection: DatabaseConnection, embeddingIds: string[]): Promise<ContentChunk[]>;
62
78
  /**
63
79
  * Gets the current model version from system_info table
64
80
  * @param connection - Database connection object
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * CORE MODULE — Shared between text-only (rag-lite-ts) and future multimodal (rag-lite-mm)
3
+ * Model-agnostic. No transformer or modality-specific logic.
4
+ */
1
5
  import sqlite3 from 'sqlite3';
2
6
  import { promisify } from 'util';
3
7
  import { handleError, ErrorSeverity, createError } from './error-handler.js';
@@ -87,27 +91,32 @@ function enhanceSQLiteError(error, sql) {
87
91
  }
88
92
  /**
89
93
  * Initializes the database schema with all required tables and indexes
94
+ * Enhanced to support content types for multimodal use
90
95
  * @param connection - Database connection object
91
96
  */
92
97
  export async function initializeSchema(connection) {
93
98
  try {
94
- // Create documents table
99
+ // Create documents table with content type support
95
100
  await connection.run(`
96
101
  CREATE TABLE IF NOT EXISTS documents (
97
102
  id INTEGER PRIMARY KEY AUTOINCREMENT,
98
103
  source TEXT NOT NULL UNIQUE,
99
104
  title TEXT NOT NULL,
105
+ content_type TEXT DEFAULT 'text',
106
+ metadata TEXT,
100
107
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
101
108
  )
102
109
  `);
103
- // Create chunks table with foreign key relationship
110
+ // Create chunks table with content type and metadata support
104
111
  await connection.run(`
105
112
  CREATE TABLE IF NOT EXISTS chunks (
106
113
  id INTEGER PRIMARY KEY AUTOINCREMENT,
107
114
  embedding_id TEXT NOT NULL UNIQUE,
108
115
  document_id INTEGER NOT NULL,
109
- text TEXT NOT NULL,
116
+ content TEXT NOT NULL,
117
+ content_type TEXT DEFAULT 'text',
110
118
  chunk_index INTEGER NOT NULL,
119
+ metadata TEXT,
111
120
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
112
121
  FOREIGN KEY (document_id) REFERENCES documents(id) ON DELETE CASCADE
113
122
  )
@@ -122,7 +131,44 @@ export async function initializeSchema(connection) {
122
131
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
123
132
  )
124
133
  `);
125
- // Add model tracking columns if they don't exist (migration)
134
+ // Add content_type and metadata columns if they don't exist
135
+ try {
136
+ await connection.run(`ALTER TABLE documents ADD COLUMN content_type TEXT DEFAULT 'text'`);
137
+ }
138
+ catch (error) {
139
+ // Column already exists, ignore error
140
+ if (error instanceof Error && !error.message.includes('duplicate column name')) {
141
+ throw error;
142
+ }
143
+ }
144
+ try {
145
+ await connection.run(`ALTER TABLE documents ADD COLUMN metadata TEXT`);
146
+ }
147
+ catch (error) {
148
+ // Column already exists, ignore error
149
+ if (error instanceof Error && !error.message.includes('duplicate column name')) {
150
+ throw error;
151
+ }
152
+ }
153
+ try {
154
+ await connection.run(`ALTER TABLE chunks ADD COLUMN content_type TEXT DEFAULT 'text'`);
155
+ }
156
+ catch (error) {
157
+ // Column already exists, ignore error
158
+ if (error instanceof Error && !error.message.includes('duplicate column name')) {
159
+ throw error;
160
+ }
161
+ }
162
+ try {
163
+ await connection.run(`ALTER TABLE chunks ADD COLUMN metadata TEXT`);
164
+ }
165
+ catch (error) {
166
+ // Column already exists, ignore error
167
+ if (error instanceof Error && !error.message.includes('duplicate column name')) {
168
+ throw error;
169
+ }
170
+ }
171
+ // Add model tracking columns if they don't exist
126
172
  try {
127
173
  await connection.run(`ALTER TABLE system_info ADD COLUMN model_name TEXT`);
128
174
  }
@@ -150,6 +196,12 @@ export async function initializeSchema(connection) {
150
196
  `);
151
197
  await connection.run(`
152
198
  CREATE INDEX IF NOT EXISTS idx_documents_source ON documents(source)
199
+ `);
200
+ await connection.run(`
201
+ CREATE INDEX IF NOT EXISTS idx_chunks_content_type ON chunks(content_type)
202
+ `);
203
+ await connection.run(`
204
+ CREATE INDEX IF NOT EXISTS idx_documents_content_type ON documents(content_type)
153
205
  `);
154
206
  console.log('Database schema initialized successfully');
155
207
  }
@@ -158,15 +210,18 @@ export async function initializeSchema(connection) {
158
210
  }
159
211
  }
160
212
  /**
161
- * Inserts a new document into the database
213
+ * Inserts a new document into the database with content type support
162
214
  * @param connection - Database connection object
163
215
  * @param source - Source path of the document
164
216
  * @param title - Title of the document
217
+ * @param contentType - Type of content ('text', 'image', etc.)
218
+ * @param metadata - Optional metadata object
165
219
  * @returns Promise that resolves to the document ID
166
220
  */
167
- export async function insertDocument(connection, source, title) {
221
+ export async function insertDocument(connection, source, title, contentType = 'text', metadata) {
168
222
  try {
169
- const result = await connection.run('INSERT INTO documents (source, title) VALUES (?, ?)', [source, title]);
223
+ const metadataJson = metadata ? JSON.stringify(metadata) : null;
224
+ const result = await connection.run('INSERT INTO documents (source, title, content_type, metadata) VALUES (?, ?, ?, ?)', [source, title, contentType, metadataJson]);
170
225
  if (typeof result.lastID !== 'number' || result.lastID <= 0) {
171
226
  throw new Error('Failed to get document ID after insertion');
172
227
  }
@@ -180,17 +235,20 @@ export async function insertDocument(connection, source, title) {
180
235
  }
181
236
  }
182
237
  /**
183
- * Inserts or updates a chunk in the database (upsert operation)
238
+ * Inserts or updates a chunk in the database with content type support (upsert operation)
184
239
  * @param connection - Database connection object
185
240
  * @param embeddingId - Unique embedding ID for the chunk
186
241
  * @param documentId - ID of the parent document
187
- * @param text - Text content of the chunk
242
+ * @param content - Content of the chunk (text, image path, etc.)
188
243
  * @param chunkIndex - Index of the chunk within the document
244
+ * @param contentType - Type of content ('text', 'image', etc.)
245
+ * @param metadata - Optional metadata object
189
246
  */
190
- export async function insertChunk(connection, embeddingId, documentId, text, chunkIndex) {
247
+ export async function insertChunk(connection, embeddingId, documentId, content, chunkIndex, contentType = 'text', metadata) {
191
248
  try {
249
+ const metadataJson = metadata ? JSON.stringify(metadata) : null;
192
250
  // Use INSERT OR REPLACE to handle duplicates gracefully
193
- await connection.run('INSERT OR REPLACE INTO chunks (embedding_id, document_id, text, chunk_index) VALUES (?, ?, ?, ?)', [embeddingId, documentId, text, chunkIndex]);
251
+ await connection.run('INSERT OR REPLACE INTO chunks (embedding_id, document_id, content, chunk_index, content_type, metadata) VALUES (?, ?, ?, ?, ?, ?)', [embeddingId, documentId, content, chunkIndex, contentType, metadataJson]);
194
252
  }
195
253
  catch (error) {
196
254
  if (error instanceof Error && error.message.includes('FOREIGN KEY constraint failed')) {
@@ -201,12 +259,15 @@ export async function insertChunk(connection, embeddingId, documentId, text, chu
201
259
  }
202
260
  /**
203
261
  * Inserts a new document or returns existing document ID if it already exists
262
+ * Enhanced with content type support
204
263
  * @param connection - Database connection object
205
264
  * @param source - Source path of the document
206
265
  * @param title - Title of the document
266
+ * @param contentType - Type of content ('text', 'image', etc.)
267
+ * @param metadata - Optional metadata object
207
268
  * @returns Promise that resolves to the document ID
208
269
  */
209
- export async function upsertDocument(connection, source, title) {
270
+ export async function upsertDocument(connection, source, title, contentType = 'text', metadata) {
210
271
  try {
211
272
  // First try to get existing document
212
273
  const existing = await connection.get('SELECT id FROM documents WHERE source = ?', [source]);
@@ -214,7 +275,8 @@ export async function upsertDocument(connection, source, title) {
214
275
  return existing.id;
215
276
  }
216
277
  // Insert new document if it doesn't exist
217
- const result = await connection.run('INSERT INTO documents (source, title) VALUES (?, ?)', [source, title]);
278
+ const metadataJson = metadata ? JSON.stringify(metadata) : null;
279
+ const result = await connection.run('INSERT INTO documents (source, title, content_type, metadata) VALUES (?, ?, ?, ?)', [source, title, contentType, metadataJson]);
218
280
  if (typeof result.lastID !== 'number' || result.lastID <= 0) {
219
281
  throw new Error('Failed to get document ID after insertion');
220
282
  }
@@ -226,6 +288,7 @@ export async function upsertDocument(connection, source, title) {
226
288
  }
227
289
  /**
228
290
  * Retrieves chunks by their embedding IDs with document metadata
291
+ * Enhanced to include content type information
229
292
  * @param connection - Database connection object
230
293
  * @param embeddingIds - Array of embedding IDs to retrieve
231
294
  * @returns Promise that resolves to an array of chunk results with document metadata
@@ -241,18 +304,25 @@ export async function getChunksByEmbeddingIds(connection, embeddingIds) {
241
304
  c.id,
242
305
  c.embedding_id,
243
306
  c.document_id,
244
- c.text,
307
+ c.content,
308
+ c.content_type,
245
309
  c.chunk_index,
310
+ c.metadata,
246
311
  c.created_at,
247
312
  d.source as document_source,
248
- d.title as document_title
313
+ d.title as document_title,
314
+ d.content_type as document_content_type
249
315
  FROM chunks c
250
316
  JOIN documents d ON c.document_id = d.id
251
317
  WHERE c.embedding_id IN (${placeholders})
252
318
  ORDER BY c.chunk_index
253
319
  `;
254
320
  const results = await connection.all(sql, embeddingIds);
255
- return results;
321
+ // Parse metadata JSON strings back to objects
322
+ return results.map((row) => ({
323
+ ...row,
324
+ metadata: row.metadata ? JSON.parse(row.metadata) : undefined
325
+ }));
256
326
  }
257
327
  catch (error) {
258
328
  throw new Error(`Failed to retrieve chunks: ${error instanceof Error ? error.message : 'Unknown error'}`);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Centralized error handling utilities for RAG-lite TS
3
- * Provides consistent error handling patterns across the application
2
+ * CORE MODULE Shared between text-only (rag-lite-ts) and future multimodal (rag-lite-mm)
3
+ * Model-agnostic. No transformer or modality-specific logic.
4
4
  */
5
5
  /**
6
6
  * Error categories for different types of failures
@@ -25,6 +25,14 @@ export declare enum ErrorSeverity {
25
25
  WARNING = "WARNING",// Potential issue but operation can continue
26
26
  INFO = "INFO"
27
27
  }
28
+ /**
29
+ * Interface for providing implementation-specific error context
30
+ * Allows dependency injection of model-specific error messages and suggestions
31
+ */
32
+ export interface ErrorContext {
33
+ getErrorMessage(error: Error, context: string): string;
34
+ getSuggestions(error: Error, context: string): string[];
35
+ }
28
36
  /**
29
37
  * Enhanced error class with category and severity
30
38
  */
@@ -35,8 +43,19 @@ export declare class CategorizedError extends Error {
35
43
  originalError?: Error | undefined;
36
44
  constructor(message: string, category: ErrorCategory, severity?: ErrorSeverity, exitCode?: number, originalError?: Error | undefined);
37
45
  }
46
+ /**
47
+ * Set the global error context for dependency injection
48
+ * @param errorContext - Implementation-specific error context
49
+ */
50
+ export declare function setErrorContext(errorContext: ErrorContext): void;
51
+ /**
52
+ * Get the current error context
53
+ * @returns Current error context
54
+ */
55
+ export declare function getErrorContext(): ErrorContext;
38
56
  /**
39
57
  * Handle errors with appropriate logging and exit behavior
58
+ * Supports dependency injection of implementation-specific error contexts
40
59
  * @param error - Error to handle
41
60
  * @param context - Context where error occurred
42
61
  * @param options - Handling options
@@ -47,6 +66,7 @@ export declare function handleError(error: Error | string, context: string, opti
47
66
  exitCode?: number;
48
67
  skipError?: boolean;
49
68
  showStack?: boolean;
69
+ errorContext?: ErrorContext;
50
70
  }): void;
51
71
  /**
52
72
  * Wrapper for try-catch blocks with consistent error handling
@@ -60,6 +80,7 @@ export declare function safeExecute<T>(operation: () => Promise<T> | T, context:
60
80
  exitCode?: number;
61
81
  skipError?: boolean;
62
82
  fallbackValue?: T;
83
+ errorContext?: ErrorContext;
63
84
  }): Promise<T | undefined>;
64
85
  /**
65
86
  * Validate that a condition is true, throw categorized error if not
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/core/error-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,oBAAY,aAAa;IACvB,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,KAAK,UAAU,CAAO,+BAA+B;IACrD,KAAK,UAAU,CAAO,2CAA2C;IACjE,OAAO,YAAY,CAAG,6CAA6C;IACnE,IAAI,SAAS;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACvD,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACzD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IAGhC,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,MAAM;IAChB,aAAa,CAAC,EAAE,KAAK;gBAJ5B,OAAO,EAAE,MAAM,EACR,QAAQ,EAAE,aAAa,EACvB,QAAQ,GAAE,aAAmC,EAC7C,QAAQ,GAAE,MAAiC,EAC3C,aAAa,CAAC,EAAE,KAAK,YAAA;CAK/B;AAsBD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAEhE;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,GAAG,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC;CACxB,GACL,IAAI,CAwCN;AA6ED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAC/B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;CACxB,GACL,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAqBxB;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CACpB,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,aAAwC,EAClD,QAAQ,GAAE,MAAiC,GAC1C,OAAO,CAAC,SAAS,CAInB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAUnF;AAED;;GAEG;AACH,eAAO,MAAM,WAAW;6BACG,MAAM;wBAGX,MAAM;qBAGT,MAAM;qBAGN,MAAM;0BAGD,MAAM;yBAGP,MAAM;0BAGL,MAAM;CAE7B,CAAC"}