@opensaas/stack-rag 0.1.6

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 (149) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/CHANGELOG.md +10 -0
  3. package/CLAUDE.md +565 -0
  4. package/LICENSE +21 -0
  5. package/README.md +406 -0
  6. package/dist/config/index.d.ts +63 -0
  7. package/dist/config/index.d.ts.map +1 -0
  8. package/dist/config/index.js +94 -0
  9. package/dist/config/index.js.map +1 -0
  10. package/dist/config/plugin.d.ts +38 -0
  11. package/dist/config/plugin.d.ts.map +1 -0
  12. package/dist/config/plugin.js +215 -0
  13. package/dist/config/plugin.js.map +1 -0
  14. package/dist/config/plugin.test.d.ts +2 -0
  15. package/dist/config/plugin.test.d.ts.map +1 -0
  16. package/dist/config/plugin.test.js +554 -0
  17. package/dist/config/plugin.test.js.map +1 -0
  18. package/dist/config/types.d.ts +249 -0
  19. package/dist/config/types.d.ts.map +1 -0
  20. package/dist/config/types.js +5 -0
  21. package/dist/config/types.js.map +1 -0
  22. package/dist/fields/embedding.d.ts +85 -0
  23. package/dist/fields/embedding.d.ts.map +1 -0
  24. package/dist/fields/embedding.js +81 -0
  25. package/dist/fields/embedding.js.map +1 -0
  26. package/dist/fields/embedding.test.d.ts +2 -0
  27. package/dist/fields/embedding.test.d.ts.map +1 -0
  28. package/dist/fields/embedding.test.js +323 -0
  29. package/dist/fields/embedding.test.js.map +1 -0
  30. package/dist/fields/index.d.ts +6 -0
  31. package/dist/fields/index.d.ts.map +1 -0
  32. package/dist/fields/index.js +5 -0
  33. package/dist/fields/index.js.map +1 -0
  34. package/dist/index.d.ts +8 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +9 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/mcp/index.d.ts +19 -0
  39. package/dist/mcp/index.d.ts.map +1 -0
  40. package/dist/mcp/index.js +18 -0
  41. package/dist/mcp/index.js.map +1 -0
  42. package/dist/providers/index.d.ts +38 -0
  43. package/dist/providers/index.d.ts.map +1 -0
  44. package/dist/providers/index.js +68 -0
  45. package/dist/providers/index.js.map +1 -0
  46. package/dist/providers/ollama.d.ts +49 -0
  47. package/dist/providers/ollama.d.ts.map +1 -0
  48. package/dist/providers/ollama.js +151 -0
  49. package/dist/providers/ollama.js.map +1 -0
  50. package/dist/providers/openai.d.ts +41 -0
  51. package/dist/providers/openai.d.ts.map +1 -0
  52. package/dist/providers/openai.js +126 -0
  53. package/dist/providers/openai.js.map +1 -0
  54. package/dist/providers/providers.test.d.ts +2 -0
  55. package/dist/providers/providers.test.d.ts.map +1 -0
  56. package/dist/providers/providers.test.js +224 -0
  57. package/dist/providers/providers.test.js.map +1 -0
  58. package/dist/providers/types.d.ts +88 -0
  59. package/dist/providers/types.d.ts.map +1 -0
  60. package/dist/providers/types.js +2 -0
  61. package/dist/providers/types.js.map +1 -0
  62. package/dist/runtime/batch.d.ts +183 -0
  63. package/dist/runtime/batch.d.ts.map +1 -0
  64. package/dist/runtime/batch.js +240 -0
  65. package/dist/runtime/batch.js.map +1 -0
  66. package/dist/runtime/batch.test.d.ts +2 -0
  67. package/dist/runtime/batch.test.d.ts.map +1 -0
  68. package/dist/runtime/batch.test.js +251 -0
  69. package/dist/runtime/batch.test.js.map +1 -0
  70. package/dist/runtime/chunking.d.ts +42 -0
  71. package/dist/runtime/chunking.d.ts.map +1 -0
  72. package/dist/runtime/chunking.js +264 -0
  73. package/dist/runtime/chunking.js.map +1 -0
  74. package/dist/runtime/chunking.test.d.ts +2 -0
  75. package/dist/runtime/chunking.test.d.ts.map +1 -0
  76. package/dist/runtime/chunking.test.js +212 -0
  77. package/dist/runtime/chunking.test.js.map +1 -0
  78. package/dist/runtime/embeddings.d.ts +147 -0
  79. package/dist/runtime/embeddings.d.ts.map +1 -0
  80. package/dist/runtime/embeddings.js +201 -0
  81. package/dist/runtime/embeddings.js.map +1 -0
  82. package/dist/runtime/embeddings.test.d.ts +2 -0
  83. package/dist/runtime/embeddings.test.d.ts.map +1 -0
  84. package/dist/runtime/embeddings.test.js +366 -0
  85. package/dist/runtime/embeddings.test.js.map +1 -0
  86. package/dist/runtime/index.d.ts +14 -0
  87. package/dist/runtime/index.d.ts.map +1 -0
  88. package/dist/runtime/index.js +18 -0
  89. package/dist/runtime/index.js.map +1 -0
  90. package/dist/runtime/search.d.ts +135 -0
  91. package/dist/runtime/search.d.ts.map +1 -0
  92. package/dist/runtime/search.js +101 -0
  93. package/dist/runtime/search.js.map +1 -0
  94. package/dist/storage/index.d.ts +41 -0
  95. package/dist/storage/index.d.ts.map +1 -0
  96. package/dist/storage/index.js +73 -0
  97. package/dist/storage/index.js.map +1 -0
  98. package/dist/storage/json.d.ts +34 -0
  99. package/dist/storage/json.d.ts.map +1 -0
  100. package/dist/storage/json.js +82 -0
  101. package/dist/storage/json.js.map +1 -0
  102. package/dist/storage/pgvector.d.ts +53 -0
  103. package/dist/storage/pgvector.d.ts.map +1 -0
  104. package/dist/storage/pgvector.js +168 -0
  105. package/dist/storage/pgvector.js.map +1 -0
  106. package/dist/storage/sqlite-vss.d.ts +49 -0
  107. package/dist/storage/sqlite-vss.d.ts.map +1 -0
  108. package/dist/storage/sqlite-vss.js +148 -0
  109. package/dist/storage/sqlite-vss.js.map +1 -0
  110. package/dist/storage/storage.test.d.ts +2 -0
  111. package/dist/storage/storage.test.d.ts.map +1 -0
  112. package/dist/storage/storage.test.js +440 -0
  113. package/dist/storage/storage.test.js.map +1 -0
  114. package/dist/storage/types.d.ts +79 -0
  115. package/dist/storage/types.d.ts.map +1 -0
  116. package/dist/storage/types.js +49 -0
  117. package/dist/storage/types.js.map +1 -0
  118. package/package.json +82 -0
  119. package/src/config/index.ts +116 -0
  120. package/src/config/plugin.test.ts +664 -0
  121. package/src/config/plugin.ts +257 -0
  122. package/src/config/types.ts +283 -0
  123. package/src/fields/embedding.test.ts +408 -0
  124. package/src/fields/embedding.ts +150 -0
  125. package/src/fields/index.ts +6 -0
  126. package/src/index.ts +33 -0
  127. package/src/mcp/index.ts +21 -0
  128. package/src/providers/index.ts +81 -0
  129. package/src/providers/ollama.ts +186 -0
  130. package/src/providers/openai.ts +161 -0
  131. package/src/providers/providers.test.ts +275 -0
  132. package/src/providers/types.ts +100 -0
  133. package/src/runtime/batch.test.ts +332 -0
  134. package/src/runtime/batch.ts +424 -0
  135. package/src/runtime/chunking.test.ts +258 -0
  136. package/src/runtime/chunking.ts +334 -0
  137. package/src/runtime/embeddings.test.ts +441 -0
  138. package/src/runtime/embeddings.ts +380 -0
  139. package/src/runtime/index.ts +51 -0
  140. package/src/runtime/search.ts +243 -0
  141. package/src/storage/index.ts +86 -0
  142. package/src/storage/json.ts +106 -0
  143. package/src/storage/pgvector.ts +206 -0
  144. package/src/storage/sqlite-vss.ts +193 -0
  145. package/src/storage/storage.test.ts +521 -0
  146. package/src/storage/types.ts +126 -0
  147. package/tsconfig.json +13 -0
  148. package/tsconfig.tsbuildinfo +1 -0
  149. package/vitest.config.ts +18 -0
@@ -0,0 +1,215 @@
1
+ import { normalizeRAGConfig } from './index.js';
2
+ import { createEmbeddingProvider } from '../providers/index.js';
3
+ /**
4
+ * RAG plugin for OpenSaas Stack
5
+ * Provides vector embeddings, semantic search, and automatic embedding generation
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { config, list } from '@opensaas/stack-core'
10
+ * import { text } from '@opensaas/stack-core/fields'
11
+ * import { ragPlugin, openaiEmbeddings, pgvectorStorage } from '@opensaas/stack-rag'
12
+ * import { embedding } from '@opensaas/stack-rag/fields'
13
+ *
14
+ * export default config({
15
+ * plugins: [
16
+ * ragPlugin({
17
+ * provider: openaiEmbeddings({ apiKey: process.env.OPENAI_API_KEY }),
18
+ * storage: pgvectorStorage()
19
+ * })
20
+ * ],
21
+ * db: { provider: 'postgresql', url: process.env.DATABASE_URL },
22
+ * lists: {
23
+ * Article: list({
24
+ * fields: {
25
+ * content: text(),
26
+ * contentEmbedding: embedding({
27
+ * sourceField: 'content',
28
+ * provider: 'openai',
29
+ * autoGenerate: true
30
+ * })
31
+ * }
32
+ * })
33
+ * }
34
+ * })
35
+ * ```
36
+ */
37
+ export function ragPlugin(config) {
38
+ const normalized = normalizeRAGConfig(config);
39
+ return {
40
+ name: 'rag',
41
+ version: '0.1.0',
42
+ init: async (context) => {
43
+ // Find all embedding fields with autoGenerate enabled
44
+ for (const [listName, listConfig] of Object.entries(context.config.lists)) {
45
+ for (const [fieldName, fieldConfig] of Object.entries(listConfig.fields)) {
46
+ if (fieldConfig.type === 'embedding' &&
47
+ fieldConfig.autoGenerate) {
48
+ const embeddingConfig = fieldConfig;
49
+ const sourceField = embeddingConfig.sourceField;
50
+ if (!sourceField) {
51
+ throw new Error(`RAG plugin: Field "${listName}.${fieldName}" has autoGenerate enabled but no sourceField specified`);
52
+ }
53
+ // Inject afterOperation hook to auto-generate embeddings
54
+ context.extendList(listName, {
55
+ hooks: {
56
+ resolveInput: async (args) => {
57
+ // Skip if item is missing
58
+ if (!args.resolvedData)
59
+ throw new Error('RAG plugin: Missing resolvedData in resolveInput hook');
60
+ const sourceText = args.resolvedData[sourceField];
61
+ const currentEmbedding = args.resolvedData[fieldName];
62
+ // Skip if source text is empty
63
+ if (!sourceText)
64
+ return args.resolvedData;
65
+ // Check if we need to regenerate (source text changed)
66
+ const sourceHash = await hashText(sourceText);
67
+ if (currentEmbedding && currentEmbedding.metadata.sourceHash === sourceHash) {
68
+ // Source text hasn't changed, skip regeneration
69
+ return args.resolvedData;
70
+ }
71
+ // Get provider for this field
72
+ const providerName = embeddingConfig.provider || 'default';
73
+ const providerConfig = providerName === 'default'
74
+ ? normalized.provider
75
+ : normalized.providers[providerName] || normalized.provider;
76
+ if (!providerConfig) {
77
+ console.warn(`RAG plugin: No provider configured for field "${listName}.${fieldName}"`);
78
+ return args.resolvedData;
79
+ }
80
+ // Generate embedding
81
+ const provider = createEmbeddingProvider(providerConfig);
82
+ const vector = await provider.embed(sourceText);
83
+ return {
84
+ ...args.resolvedData,
85
+ [fieldName]: {
86
+ vector,
87
+ metadata: {
88
+ model: provider.model,
89
+ provider: provider.type,
90
+ dimensions: provider.dimensions,
91
+ generatedAt: new Date().toISOString(),
92
+ sourceHash,
93
+ },
94
+ },
95
+ };
96
+ },
97
+ },
98
+ });
99
+ }
100
+ }
101
+ }
102
+ // Register MCP tools if enabled
103
+ if (normalized.enableMcpTools && context.registerMcpTool) {
104
+ // Find all lists with embedding fields
105
+ for (const [listName, listConfig] of Object.entries(context.config.lists)) {
106
+ const embeddingFields = Object.entries(listConfig.fields).filter(([, fieldConfig]) => fieldConfig.type === 'embedding');
107
+ if (embeddingFields.length > 0) {
108
+ // Register semantic search tool for this list
109
+ const toolName = `semantic_search_${listName.toLowerCase()}`;
110
+ context.registerMcpTool({
111
+ name: toolName,
112
+ description: `Search ${listName} using natural language (semantic search)`,
113
+ inputSchema: {
114
+ type: 'object',
115
+ properties: {
116
+ query: { type: 'string', description: 'Natural language search query' },
117
+ limit: { type: 'number', description: 'Maximum results', default: 10 },
118
+ minScore: {
119
+ type: 'number',
120
+ description: 'Minimum similarity score (0-1)',
121
+ default: 0.5,
122
+ },
123
+ field: {
124
+ type: 'string',
125
+ description: 'Embedding field to search',
126
+ default: embeddingFields[0][0],
127
+ enum: embeddingFields.map(([name]) => name),
128
+ },
129
+ },
130
+ required: ['query'],
131
+ },
132
+ handler: async ({ input, context }) => {
133
+ const { query, limit = 10, minScore = 0.5, field = embeddingFields[0][0] } = input;
134
+ // Get provider
135
+ const providerConfig = normalized.provider;
136
+ if (!providerConfig) {
137
+ throw new Error('RAG plugin: No default provider configured');
138
+ }
139
+ // Generate query embedding
140
+ const provider = createEmbeddingProvider(providerConfig);
141
+ const queryVector = await provider.embed(query);
142
+ // Search using configured storage backend
143
+ // Note: This is a simplified implementation
144
+ // Full implementation would use VectorStorage interface
145
+ const dbKey = listName.charAt(0).toLowerCase() + listName.slice(1);
146
+ const allItems = await context.db[dbKey].findMany();
147
+ // Calculate cosine similarity for each item
148
+ const results = allItems
149
+ .map((item) => {
150
+ const embedding = item[field];
151
+ if (!embedding || !embedding.vector)
152
+ return null;
153
+ const score = cosineSimilarity(queryVector, embedding.vector);
154
+ return { item, score };
155
+ })
156
+ .filter((r) => r !== null && r.score >= minScore)
157
+ .sort((a, b) => b.score - a.score)
158
+ .slice(0, limit);
159
+ return {
160
+ results: results.map((r) => {
161
+ // Ensure item is an object before spreading
162
+ const item = r.item;
163
+ return {
164
+ ...item,
165
+ _similarity: r.score,
166
+ };
167
+ }),
168
+ count: results.length,
169
+ };
170
+ },
171
+ });
172
+ }
173
+ }
174
+ }
175
+ // Store RAG config for runtime access
176
+ // Access at runtime via: config._pluginData.rag
177
+ context.setPluginData('rag', normalized);
178
+ },
179
+ };
180
+ }
181
+ /**
182
+ * Hash text using SHA-256 for change detection
183
+ */
184
+ async function hashText(text) {
185
+ // Simple hash implementation
186
+ // In production, could use crypto.subtle.digest for better performance
187
+ let hash = 0;
188
+ for (let i = 0; i < text.length; i++) {
189
+ const char = text.charCodeAt(i);
190
+ hash = (hash << 5) - hash + char;
191
+ hash = hash & hash; // Convert to 32-bit integer
192
+ }
193
+ return hash.toString(36);
194
+ }
195
+ /**
196
+ * Calculate cosine similarity between two vectors
197
+ */
198
+ function cosineSimilarity(a, b) {
199
+ if (a.length !== b.length) {
200
+ throw new Error('Vectors must have same dimensions');
201
+ }
202
+ let dotProduct = 0;
203
+ let normA = 0;
204
+ let normB = 0;
205
+ for (let i = 0; i < a.length; i++) {
206
+ dotProduct += a[i] * b[i];
207
+ normA += a[i] * a[i];
208
+ normB += b[i] * b[i];
209
+ }
210
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
211
+ if (denominator === 0)
212
+ return 0;
213
+ return dotProduct / denominator;
214
+ }
215
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/config/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plugin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.test.d.ts","sourceRoot":"","sources":["../../src/config/plugin.test.ts"],"names":[],"mappings":""}