@retrivora-ai/rag-engine 0.1.7 → 0.1.9
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/{ChromaDBProvider-QNI7UCX4.mjs → ChromaDBProvider-T7TK3ONZ.mjs} +2 -2
- package/dist/{MilvusProvider-OO6QGZDZ.mjs → MilvusProvider-Y5FV5EAE.mjs} +2 -2
- package/dist/{MongoDBProvider-WWVJG3WT.mjs → MongoDBProvider-QHMGD2LZ.mjs} +2 -2
- package/dist/{PineconeProvider-ZRAFNFEC.mjs → PineconeProvider-A47MRRYJ.mjs} +2 -2
- package/dist/{PostgreSQLProvider-ZNXA67IM.mjs → PostgreSQLProvider-PJ5ER5Z4.mjs} +1 -1
- package/dist/{QdrantProvider-VAED5VA7.mjs → QdrantProvider-OLPJK7CY.mjs} +2 -2
- package/dist/{RagConfig-hBGXJmSx.d.mts → RagConfig-D_rSf8ep.d.mts} +1 -1
- package/dist/{RagConfig-hBGXJmSx.d.ts → RagConfig-D_rSf8ep.d.ts} +1 -1
- package/dist/{RedisProvider-ASONNYBI.mjs → RedisProvider-ANEJ3BHR.mjs} +2 -2
- package/dist/UniversalVectorProvider-QJIV2AJJ.mjs +9 -0
- package/dist/{WeaviateProvider-PSDCUGC7.mjs → WeaviateProvider-WIK2QN23.mjs} +2 -2
- package/dist/{chunk-7YQWGERZ.mjs → chunk-2VR5ZMXV.mjs} +740 -193
- package/dist/{chunk-QEYVWVT5.mjs → chunk-5HXNKSCR.mjs} +1 -1
- package/dist/{chunk-ZM6TYIDH.mjs → chunk-BMHJTWSU.mjs} +4 -2
- package/dist/{chunk-UKDXCXW7.mjs → chunk-EDLTMSNY.mjs} +1 -1
- package/dist/{chunk-I4E63NIC.mjs → chunk-FWCSY2DS.mjs} +14 -1
- package/dist/{chunk-VPNRDXIA.mjs → chunk-HOMXEE3M.mjs} +17 -11
- package/dist/{chunk-V75V7BT2.mjs → chunk-RUKZC3ON.mjs} +3 -3
- package/dist/{chunk-7NXI6ZWX.mjs → chunk-VEJNRS4B.mjs} +9 -6
- package/dist/{chunk-HUGLYKD6.mjs → chunk-VKE5ZW7Y.mjs} +28 -10
- package/dist/chunk-VV2ML6TM.mjs +156 -0
- package/dist/{chunk-CWQQHAF6.mjs → chunk-W2PQR3UK.mjs} +4 -6
- package/dist/handlers/index.d.mts +2 -2
- package/dist/handlers/index.d.ts +2 -2
- package/dist/handlers/index.js +877 -625
- package/dist/handlers/index.mjs +3 -4
- package/dist/index-BJ8CUArE.d.mts +114 -0
- package/dist/index-DtNprGGj.d.ts +114 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +67 -58
- package/dist/index.mjs +74 -47
- package/dist/server.d.mts +601 -17
- package/dist/server.d.ts +601 -17
- package/dist/server.js +1426 -708
- package/dist/server.mjs +429 -18
- package/package.json +11 -2
- package/src/app/constants.tsx +220 -0
- package/src/app/page.tsx +193 -363
- package/src/app/types.ts +30 -0
- package/src/components/ChatWindow.tsx +3 -11
- package/src/config/ConfigBuilder.ts +373 -0
- package/src/config/EmbeddingStrategy.ts +147 -0
- package/src/config/serverConfig.ts +51 -18
- package/src/core/ConfigValidator.ts +67 -50
- package/src/core/Pipeline.ts +28 -26
- package/src/core/PluginManager.ts +277 -0
- package/src/core/ProviderHealthCheck.ts +75 -139
- package/src/core/ProviderRegistry.ts +38 -15
- package/src/providers/vectordb/ChromaDBProvider.ts +37 -12
- package/src/providers/vectordb/MilvusProvider.ts +25 -10
- package/src/providers/vectordb/MultiTablePostgresProvider.ts +164 -0
- package/src/providers/vectordb/PineconeProvider.ts +17 -2
- package/src/providers/vectordb/QdrantProvider.ts +3 -6
- package/src/providers/vectordb/RedisProvider.ts +34 -11
- package/src/providers/vectordb/UniversalVectorProvider.ts +220 -0
- package/src/providers/vectordb/WeaviateProvider.ts +17 -10
- package/src/server.ts +29 -10
- package/dist/LLMFactory-JFOY2V4X.mjs +0 -8
- package/dist/chunk-JI6VD5TJ.mjs +0 -387
- package/dist/index-Bx182KKn.d.ts +0 -64
- package/dist/index-Ck2pt7-8.d.mts +0 -64
- package/src/test-refactor.ts +0 -59
package/dist/server.mjs
CHANGED
|
@@ -1,70 +1,481 @@
|
|
|
1
|
-
import {
|
|
2
|
-
QdrantProvider
|
|
3
|
-
} from "./chunk-CWQQHAF6.mjs";
|
|
4
1
|
import {
|
|
5
2
|
ChromaDBProvider
|
|
6
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VKE5ZW7Y.mjs";
|
|
7
4
|
import {
|
|
8
5
|
RedisProvider
|
|
9
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-HOMXEE3M.mjs";
|
|
10
7
|
import {
|
|
11
8
|
WeaviateProvider
|
|
12
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-RUKZC3ON.mjs";
|
|
10
|
+
import {
|
|
11
|
+
UniversalVectorProvider
|
|
12
|
+
} from "./chunk-VV2ML6TM.mjs";
|
|
13
13
|
import {
|
|
14
|
+
AnthropicProvider,
|
|
15
|
+
BatchProcessor,
|
|
14
16
|
ConfigResolver,
|
|
17
|
+
ConfigValidator,
|
|
15
18
|
DocumentChunker,
|
|
19
|
+
DocumentParser,
|
|
20
|
+
EmbeddingStrategy,
|
|
21
|
+
EmbeddingStrategyResolver,
|
|
22
|
+
LLMFactory,
|
|
23
|
+
LLM_PROFILES,
|
|
24
|
+
OllamaProvider,
|
|
25
|
+
OpenAIProvider,
|
|
16
26
|
Pipeline,
|
|
27
|
+
ProviderHealthCheck,
|
|
17
28
|
ProviderRegistry,
|
|
29
|
+
UniversalLLMAdapter,
|
|
30
|
+
VECTOR_PROFILES,
|
|
18
31
|
VectorPlugin,
|
|
19
32
|
createChatHandler,
|
|
20
33
|
createHealthHandler,
|
|
21
34
|
createIngestHandler,
|
|
22
35
|
createUploadHandler,
|
|
23
36
|
getRagConfig
|
|
24
|
-
} from "./chunk-
|
|
25
|
-
import
|
|
26
|
-
AnthropicProvider,
|
|
27
|
-
LLMFactory,
|
|
28
|
-
OllamaProvider,
|
|
29
|
-
OpenAIProvider
|
|
30
|
-
} from "./chunk-JI6VD5TJ.mjs";
|
|
31
|
-
import "./chunk-UKDXCXW7.mjs";
|
|
37
|
+
} from "./chunk-2VR5ZMXV.mjs";
|
|
38
|
+
import "./chunk-EDLTMSNY.mjs";
|
|
32
39
|
import {
|
|
33
40
|
PineconeProvider
|
|
34
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-BMHJTWSU.mjs";
|
|
35
42
|
import {
|
|
36
43
|
PostgreSQLProvider
|
|
37
44
|
} from "./chunk-IUTAZ7QR.mjs";
|
|
38
45
|
import {
|
|
39
46
|
MongoDBProvider
|
|
40
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-5HXNKSCR.mjs";
|
|
41
48
|
import {
|
|
42
49
|
MilvusProvider
|
|
43
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-VEJNRS4B.mjs";
|
|
51
|
+
import {
|
|
52
|
+
QdrantProvider
|
|
53
|
+
} from "./chunk-W2PQR3UK.mjs";
|
|
44
54
|
import {
|
|
45
55
|
BaseVectorProvider
|
|
46
56
|
} from "./chunk-VOIWNO5O.mjs";
|
|
47
|
-
import
|
|
57
|
+
import {
|
|
58
|
+
__objRest,
|
|
59
|
+
__spreadProps,
|
|
60
|
+
__spreadValues
|
|
61
|
+
} from "./chunk-FWCSY2DS.mjs";
|
|
62
|
+
|
|
63
|
+
// src/config/ConfigBuilder.ts
|
|
64
|
+
var ConfigBuilder = class {
|
|
65
|
+
constructor() {
|
|
66
|
+
this.config = {
|
|
67
|
+
projectId: "default-project",
|
|
68
|
+
rag: {
|
|
69
|
+
chunkSize: 1e3,
|
|
70
|
+
chunkOverlap: 200,
|
|
71
|
+
topK: 5
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Set the project/application ID for namespacing
|
|
77
|
+
*/
|
|
78
|
+
projectId(id) {
|
|
79
|
+
this.config.projectId = id;
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Configure the vector database provider
|
|
84
|
+
*/
|
|
85
|
+
vectorDb(provider, options) {
|
|
86
|
+
var _a;
|
|
87
|
+
if (provider === "auto") {
|
|
88
|
+
this.config.vectorDb = this.autoDetectVectorDb();
|
|
89
|
+
} else {
|
|
90
|
+
this.config.vectorDb = {
|
|
91
|
+
provider,
|
|
92
|
+
indexName: (_a = options == null ? void 0 : options.indexName) != null ? _a : "default",
|
|
93
|
+
options: __spreadValues({}, options)
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Configure the LLM provider for chat
|
|
100
|
+
*/
|
|
101
|
+
llm(provider, model, apiKey, options) {
|
|
102
|
+
var _a, _b;
|
|
103
|
+
if (provider === "auto") {
|
|
104
|
+
this.config.llm = this.autoDetectLLM();
|
|
105
|
+
} else {
|
|
106
|
+
this.config.llm = {
|
|
107
|
+
provider,
|
|
108
|
+
model: model != null ? model : "default-model",
|
|
109
|
+
apiKey,
|
|
110
|
+
systemPrompt: options == null ? void 0 : options.systemPrompt,
|
|
111
|
+
maxTokens: (_a = options == null ? void 0 : options.maxTokens) != null ? _a : 1024,
|
|
112
|
+
temperature: (_b = options == null ? void 0 : options.temperature) != null ? _b : 0.7,
|
|
113
|
+
baseUrl: options == null ? void 0 : options.baseUrl,
|
|
114
|
+
options
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return this;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Configure the embedding provider
|
|
121
|
+
*/
|
|
122
|
+
embedding(provider, model, apiKey, options) {
|
|
123
|
+
if (provider === "auto") {
|
|
124
|
+
this.config.embedding = this.autoDetectEmbedding();
|
|
125
|
+
} else {
|
|
126
|
+
this.config.embedding = {
|
|
127
|
+
provider,
|
|
128
|
+
model: model != null ? model : "default-embedding",
|
|
129
|
+
apiKey,
|
|
130
|
+
baseUrl: options == null ? void 0 : options.baseUrl,
|
|
131
|
+
options
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
return this;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Set RAG-specific parameters
|
|
138
|
+
*/
|
|
139
|
+
rag(options) {
|
|
140
|
+
var _a;
|
|
141
|
+
this.config.rag = __spreadValues(__spreadValues({}, (_a = this.config.rag) != null ? _a : {}), options);
|
|
142
|
+
return this;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Set UI/UX parameters
|
|
146
|
+
*/
|
|
147
|
+
ui(options) {
|
|
148
|
+
this.config.ui = options;
|
|
149
|
+
return this;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Build and return the configuration
|
|
153
|
+
*/
|
|
154
|
+
build() {
|
|
155
|
+
const finalConfig = this.config;
|
|
156
|
+
return finalConfig;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Build and return as JSON for serialization
|
|
160
|
+
*/
|
|
161
|
+
toJSON() {
|
|
162
|
+
return JSON.stringify(this.build());
|
|
163
|
+
}
|
|
164
|
+
// ============================================================================
|
|
165
|
+
// Private helper methods for auto-detection
|
|
166
|
+
// ============================================================================
|
|
167
|
+
autoDetectVectorDb() {
|
|
168
|
+
if (process.env.PINECONE_API_KEY && process.env.PINECONE_INDEX) {
|
|
169
|
+
return {
|
|
170
|
+
provider: "pinecone",
|
|
171
|
+
indexName: process.env.PINECONE_INDEX,
|
|
172
|
+
options: { apiKey: process.env.PINECONE_API_KEY }
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
if (process.env.QDRANT_URL) {
|
|
176
|
+
return {
|
|
177
|
+
provider: "qdrant",
|
|
178
|
+
indexName: process.env.QDRANT_COLLECTION || "documents",
|
|
179
|
+
options: {
|
|
180
|
+
url: process.env.QDRANT_URL,
|
|
181
|
+
apiKey: process.env.QDRANT_API_KEY
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
if (process.env.DATABASE_URL) {
|
|
186
|
+
return {
|
|
187
|
+
provider: "postgresql",
|
|
188
|
+
indexName: process.env.PG_TABLE || "documents",
|
|
189
|
+
options: {
|
|
190
|
+
connectionString: process.env.DATABASE_URL
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
if (process.env.MONGODB_URI) {
|
|
195
|
+
return {
|
|
196
|
+
provider: "mongodb",
|
|
197
|
+
indexName: process.env.MONGODB_COLLECTION || "documents",
|
|
198
|
+
options: {
|
|
199
|
+
uri: process.env.MONGODB_URI,
|
|
200
|
+
database: process.env.MONGODB_DB || "ai_db",
|
|
201
|
+
collection: process.env.MONGODB_COLLECTION || "documents"
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
if (process.env.REDIS_URL) {
|
|
206
|
+
return {
|
|
207
|
+
provider: "redis",
|
|
208
|
+
indexName: process.env.REDIS_INDEX || "documents",
|
|
209
|
+
options: {
|
|
210
|
+
url: process.env.REDIS_URL
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
return {
|
|
215
|
+
provider: "qdrant",
|
|
216
|
+
indexName: "documents",
|
|
217
|
+
options: {
|
|
218
|
+
url: process.env.QDRANT_URL || "http://localhost:6333"
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
autoDetectLLM() {
|
|
223
|
+
if (process.env.OPENAI_API_KEY) {
|
|
224
|
+
return {
|
|
225
|
+
provider: "openai",
|
|
226
|
+
model: process.env.OPENAI_MODEL || "gpt-4o-mini",
|
|
227
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
228
|
+
maxTokens: parseInt(process.env.OPENAI_MAX_TOKENS || "1024"),
|
|
229
|
+
temperature: parseFloat(process.env.OPENAI_TEMPERATURE || "0.7")
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
233
|
+
return {
|
|
234
|
+
provider: "anthropic",
|
|
235
|
+
model: process.env.ANTHROPIC_MODEL || "claude-3-haiku-20240307",
|
|
236
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
237
|
+
maxTokens: parseInt(process.env.ANTHROPIC_MAX_TOKENS || "1024"),
|
|
238
|
+
temperature: parseFloat(process.env.ANTHROPIC_TEMPERATURE || "0.7")
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
if (process.env.OLLAMA_BASE_URL) {
|
|
242
|
+
return {
|
|
243
|
+
provider: "ollama",
|
|
244
|
+
model: process.env.OLLAMA_MODEL || "mistral",
|
|
245
|
+
baseUrl: process.env.OLLAMA_BASE_URL,
|
|
246
|
+
maxTokens: parseInt(process.env.OLLAMA_MAX_TOKENS || "1024"),
|
|
247
|
+
temperature: parseFloat(process.env.OLLAMA_TEMPERATURE || "0.7")
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
provider: "openai",
|
|
252
|
+
model: "gpt-4o-mini",
|
|
253
|
+
apiKey: process.env.OPENAI_API_KEY
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
autoDetectEmbedding() {
|
|
257
|
+
if (process.env.EMBEDDING_PROVIDER) {
|
|
258
|
+
const provider = process.env.EMBEDDING_PROVIDER;
|
|
259
|
+
return {
|
|
260
|
+
provider,
|
|
261
|
+
model: process.env.EMBEDDING_MODEL || "default",
|
|
262
|
+
apiKey: process.env.EMBEDDING_API_KEY,
|
|
263
|
+
baseUrl: process.env.EMBEDDING_BASE_URL
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
return {
|
|
267
|
+
provider: "openai",
|
|
268
|
+
model: "text-embedding-3-small",
|
|
269
|
+
apiKey: process.env.OPENAI_API_KEY
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
var PRESETS = {
|
|
274
|
+
/**
|
|
275
|
+
* OpenAI + Pinecone: Production-ready cloud setup
|
|
276
|
+
*/
|
|
277
|
+
"openai-pinecone": {
|
|
278
|
+
vectorDb: "pinecone",
|
|
279
|
+
llm: "openai",
|
|
280
|
+
embedding: "openai"
|
|
281
|
+
},
|
|
282
|
+
/**
|
|
283
|
+
* Claude + Qdrant: Open-source vector DB + proprietary LLM
|
|
284
|
+
*/
|
|
285
|
+
"claude-qdrant": {
|
|
286
|
+
vectorDb: "qdrant",
|
|
287
|
+
llm: "anthropic",
|
|
288
|
+
embedding: "openai"
|
|
289
|
+
},
|
|
290
|
+
/**
|
|
291
|
+
* Local development: Ollama + local Qdrant
|
|
292
|
+
*/
|
|
293
|
+
"local-dev": {
|
|
294
|
+
vectorDb: "qdrant",
|
|
295
|
+
llm: "ollama",
|
|
296
|
+
embedding: "ollama"
|
|
297
|
+
},
|
|
298
|
+
/**
|
|
299
|
+
* Fully open-source: Ollama LLM + Qdrant vector DB + Ollama embeddings
|
|
300
|
+
*/
|
|
301
|
+
"fully-open-source": {
|
|
302
|
+
vectorDb: "qdrant",
|
|
303
|
+
llm: "ollama",
|
|
304
|
+
embedding: "ollama"
|
|
305
|
+
},
|
|
306
|
+
/**
|
|
307
|
+
* PostgreSQL stack: pgvector + OpenAI
|
|
308
|
+
*/
|
|
309
|
+
"postgres-openai": {
|
|
310
|
+
vectorDb: "postgresql",
|
|
311
|
+
llm: "openai",
|
|
312
|
+
embedding: "openai"
|
|
313
|
+
},
|
|
314
|
+
/**
|
|
315
|
+
* Enterprise MongoDB: MongoDB Atlas with OpenAI
|
|
316
|
+
*/
|
|
317
|
+
"mongodb-openai": {
|
|
318
|
+
vectorDb: "mongodb",
|
|
319
|
+
llm: "openai",
|
|
320
|
+
embedding: "openai"
|
|
321
|
+
},
|
|
322
|
+
/**
|
|
323
|
+
* Redis stack for caching + search
|
|
324
|
+
*/
|
|
325
|
+
"redis-openai": {
|
|
326
|
+
vectorDb: "redis",
|
|
327
|
+
llm: "openai",
|
|
328
|
+
embedding: "openai"
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
function createFromPreset(presetName) {
|
|
332
|
+
const preset = PRESETS[presetName];
|
|
333
|
+
return new ConfigBuilder().vectorDb(preset.vectorDb, { apiKey: process.env[`${preset.vectorDb.toUpperCase()}_API_KEY`] }).llm(preset.llm, void 0, process.env[`${preset.llm.toUpperCase()}_API_KEY`]).embedding(preset.embedding, void 0, process.env[`${preset.embedding.toUpperCase()}_API_KEY`]);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// src/providers/vectordb/MultiTablePostgresProvider.ts
|
|
337
|
+
import { Pool } from "pg";
|
|
338
|
+
var MultiTablePostgresProvider = class extends BaseVectorProvider {
|
|
339
|
+
constructor(config) {
|
|
340
|
+
var _a, _b, _c;
|
|
341
|
+
super(config);
|
|
342
|
+
const opts = config.options || {};
|
|
343
|
+
if (!opts.connectionString) {
|
|
344
|
+
throw new Error("[MultiTablePostgresProvider] options.connectionString is required");
|
|
345
|
+
}
|
|
346
|
+
this.connectionString = opts.connectionString;
|
|
347
|
+
this.dimensions = (_a = opts.dimensions) != null ? _a : 768;
|
|
348
|
+
const rawTables = (_c = (_b = opts.tables) != null ? _b : process.env.VECTOR_DB_TABLES) != null ? _c : "";
|
|
349
|
+
this.tables = typeof rawTables === "string" ? rawTables.split(",").map((t) => t.trim()).filter(Boolean) : rawTables;
|
|
350
|
+
if (this.tables.length === 0) {
|
|
351
|
+
console.warn(
|
|
352
|
+
"[MultiTablePostgresProvider] No tables configured. Set VECTOR_DB_TABLES as a comma-separated list of table names or pass options.tables."
|
|
353
|
+
);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
async initialize() {
|
|
357
|
+
this.pool = new Pool({ connectionString: this.connectionString });
|
|
358
|
+
const client = await this.pool.connect();
|
|
359
|
+
client.release();
|
|
360
|
+
console.log(
|
|
361
|
+
`[MultiTablePostgresProvider] Connected. Searching across ${this.tables.length} table(s): ${this.tables.join(", ")}`
|
|
362
|
+
);
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Upsert is not supported for MultiTablePostgresProvider as it's designed for
|
|
366
|
+
* searching across pre-existing tables with varying schemas.
|
|
367
|
+
*/
|
|
368
|
+
async upsert(_doc, _namespace) {
|
|
369
|
+
throw new Error(
|
|
370
|
+
"[MultiTablePostgresProvider] upsert() is not supported in multi-table mode. Please use the standard PostgreSQLProvider for single-table managed indices."
|
|
371
|
+
);
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Batch upsert is not supported for MultiTablePostgresProvider.
|
|
375
|
+
*/
|
|
376
|
+
async batchUpsert(_docs, _namespace) {
|
|
377
|
+
throw new Error(
|
|
378
|
+
"[MultiTablePostgresProvider] batchUpsert() is not supported in multi-table mode."
|
|
379
|
+
);
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Query all configured tables and merge results, sorted by cosine similarity score.
|
|
383
|
+
*/
|
|
384
|
+
async query(vector, topK, _namespace, _filter) {
|
|
385
|
+
var _b, _c;
|
|
386
|
+
if (!this.pool) {
|
|
387
|
+
throw new Error("[MultiTablePostgresProvider] Provider not initialized. Call initialize() first.");
|
|
388
|
+
}
|
|
389
|
+
console.log(`[MultiTablePostgresProvider] Querying ${this.tables.length} table(s) with vector dim=${vector.length}`);
|
|
390
|
+
const vectorLiteral = `[${vector.join(",")}]`;
|
|
391
|
+
const allResults = [];
|
|
392
|
+
for (const table of this.tables) {
|
|
393
|
+
try {
|
|
394
|
+
const result = await this.pool.query(
|
|
395
|
+
`SELECT *, 1 - (embedding <=> $1::vector) AS score
|
|
396
|
+
FROM "${table}"
|
|
397
|
+
ORDER BY embedding <=> $1::vector
|
|
398
|
+
LIMIT $2`,
|
|
399
|
+
[vectorLiteral, topK]
|
|
400
|
+
);
|
|
401
|
+
for (const row of result.rows) {
|
|
402
|
+
const _a = row, { score, id } = _a, rest = __objRest(_a, ["score", "id"]);
|
|
403
|
+
delete rest.embedding;
|
|
404
|
+
const content = Object.entries(rest).filter(([k, v]) => v !== null && typeof v !== "object" && k !== "id").map(([k, v]) => `${k}: ${v}`).join("\n");
|
|
405
|
+
allResults.push({
|
|
406
|
+
id: `${table}-${id}`,
|
|
407
|
+
score: parseFloat(String(score)),
|
|
408
|
+
content,
|
|
409
|
+
metadata: __spreadProps(__spreadValues({}, rest), { source_table: table })
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
} catch (err) {
|
|
413
|
+
console.error(
|
|
414
|
+
`[MultiTablePostgresProvider] Error querying table "${table}":`,
|
|
415
|
+
err.message
|
|
416
|
+
);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
const sortedResults = allResults.sort((a, b) => b.score - a.score);
|
|
420
|
+
if (sortedResults.length > 0) {
|
|
421
|
+
console.log(`[MultiTablePostgresProvider] Top match from "${(_c = (_b = sortedResults[0].metadata) == null ? void 0 : _b.source_table) != null ? _c : "unknown"}" with score ${sortedResults[0].score.toFixed(4)}`);
|
|
422
|
+
}
|
|
423
|
+
return sortedResults.slice(0, topK);
|
|
424
|
+
}
|
|
425
|
+
async delete(_id, _namespace) {
|
|
426
|
+
console.warn("[MultiTablePostgresProvider] delete() is a no-op for multi-table mode.");
|
|
427
|
+
}
|
|
428
|
+
async deleteNamespace(_namespace) {
|
|
429
|
+
console.warn("[MultiTablePostgresProvider] deleteNamespace() is a no-op for multi-table mode.");
|
|
430
|
+
}
|
|
431
|
+
async ping() {
|
|
432
|
+
try {
|
|
433
|
+
await this.pool.query("SELECT 1");
|
|
434
|
+
return true;
|
|
435
|
+
} catch (e) {
|
|
436
|
+
return false;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
async disconnect() {
|
|
440
|
+
if (this.pool) {
|
|
441
|
+
await this.pool.end();
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
};
|
|
48
445
|
export {
|
|
49
446
|
AnthropicProvider,
|
|
50
447
|
BaseVectorProvider,
|
|
448
|
+
BatchProcessor,
|
|
51
449
|
ChromaDBProvider,
|
|
450
|
+
ConfigBuilder,
|
|
52
451
|
ConfigResolver,
|
|
452
|
+
ConfigValidator,
|
|
53
453
|
DocumentChunker,
|
|
454
|
+
DocumentParser,
|
|
455
|
+
EmbeddingStrategy,
|
|
456
|
+
EmbeddingStrategyResolver,
|
|
54
457
|
LLMFactory,
|
|
458
|
+
LLM_PROFILES,
|
|
55
459
|
MilvusProvider,
|
|
56
460
|
MongoDBProvider,
|
|
461
|
+
MultiTablePostgresProvider,
|
|
57
462
|
OllamaProvider,
|
|
58
463
|
OpenAIProvider,
|
|
464
|
+
PRESETS,
|
|
59
465
|
PineconeProvider,
|
|
60
466
|
Pipeline,
|
|
61
467
|
PostgreSQLProvider,
|
|
468
|
+
ProviderHealthCheck,
|
|
62
469
|
ProviderRegistry,
|
|
63
470
|
QdrantProvider,
|
|
64
471
|
RedisProvider,
|
|
472
|
+
UniversalLLMAdapter,
|
|
473
|
+
UniversalVectorProvider,
|
|
474
|
+
VECTOR_PROFILES,
|
|
65
475
|
VectorPlugin,
|
|
66
476
|
WeaviateProvider,
|
|
67
477
|
createChatHandler,
|
|
478
|
+
createFromPreset,
|
|
68
479
|
createHealthHandler,
|
|
69
480
|
createIngestHandler,
|
|
70
481
|
createUploadHandler,
|
package/package.json
CHANGED
|
@@ -1,22 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retrivora-ai/rag-engine",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"description": "Retrivora AI is a plug-and-play AI engine for RAG chat experiences — generic vector DB + LLM provider, embeddable or standalone.",
|
|
5
5
|
"author": "Abhinav Alkuchi",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"rag",
|
|
9
|
+
"retrieval-augmented-generation",
|
|
9
10
|
"chatbot",
|
|
10
11
|
"vector-database",
|
|
11
12
|
"pinecone",
|
|
12
13
|
"pgvector",
|
|
14
|
+
"postgresql",
|
|
15
|
+
"milvus",
|
|
16
|
+
"qdrant",
|
|
17
|
+
"chromadb",
|
|
18
|
+
"redis",
|
|
19
|
+
"weaviate",
|
|
20
|
+
"mongodb",
|
|
13
21
|
"openai",
|
|
14
22
|
"anthropic",
|
|
15
23
|
"ollama",
|
|
16
24
|
"nextjs",
|
|
17
25
|
"react",
|
|
18
26
|
"ai",
|
|
19
|
-
"llm"
|
|
27
|
+
"llm",
|
|
28
|
+
"embeddings"
|
|
20
29
|
],
|
|
21
30
|
"main": "dist/index.js",
|
|
22
31
|
"module": "dist/index.mjs",
|