@retrivora-ai/rag-engine 1.8.0 → 1.8.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.
- package/dist/DocumentChunker-Dh9TvmGG.d.mts +45 -0
- package/dist/DocumentChunker-Dh9TvmGG.d.ts +45 -0
- package/dist/{index-DPsQodME.d.mts → ILLMProvider-BOJFz3Na.d.mts} +104 -1
- package/dist/{index-DPsQodME.d.ts → ILLMProvider-BOJFz3Na.d.ts} +104 -1
- package/dist/MultiTablePostgresProvider-ZLGSKTJR.mjs +8 -0
- package/dist/chunk-ICKRMZQK.mjs +76 -0
- package/dist/{chunk-PV3MFHWU.mjs → chunk-LZVVLSDN.mjs} +977 -516
- package/dist/chunk-OZFBG4BA.mjs +291 -0
- package/dist/handlers/index.d.mts +2 -2
- package/dist/handlers/index.d.ts +2 -2
- package/dist/handlers/index.js +1269 -656
- package/dist/handlers/index.mjs +4 -1
- package/dist/{index-Bb2yEopi.d.mts → index-BwpcaziY.d.ts} +10 -2
- package/dist/{index-CkbTzj9J.d.ts → index-D3V9Et2M.d.mts} +10 -2
- package/dist/index.d.mts +24 -4
- package/dist/index.d.ts +24 -4
- package/dist/index.js +1354 -826
- package/dist/index.mjs +1284 -795
- package/dist/server.d.mts +47 -27
- package/dist/server.d.ts +47 -27
- package/dist/server.js +1417 -829
- package/dist/server.mjs +164 -176
- package/package.json +6 -2
- package/src/app/api/upload/route.ts +4 -0
- package/src/app/constants.tsx +2 -2
- package/src/app/page.tsx +12 -322
- package/src/components/AmbientBackground.tsx +29 -0
- package/src/components/ArchitectureCard.tsx +17 -0
- package/src/components/ArchitectureCardsSection.tsx +15 -0
- package/src/components/ChatWindow.tsx +32 -0
- package/src/components/CodeViewer.tsx +51 -0
- package/src/components/ConfigProvider.tsx +1 -0
- package/src/components/DocViewer.tsx +37 -0
- package/src/components/DocumentUpload.tsx +44 -1
- package/src/components/Documentation.tsx +58 -0
- package/src/components/DynamicChart.tsx +27 -2
- package/src/components/Hero.tsx +59 -0
- package/src/components/HourglassLoader.tsx +87 -0
- package/src/components/Lifecycle.tsx +37 -0
- package/src/components/MarkdownComponents.tsx +140 -0
- package/src/components/MessageBubble.tsx +124 -904
- package/src/components/Navbar.tsx +55 -0
- package/src/components/ObservabilityPanel.tsx +374 -0
- package/src/components/ProductCard.tsx +5 -3
- package/src/components/UIDispatcher.tsx +344 -0
- package/src/components/VisualizationRenderer.tsx +372 -250
- package/src/config/RagConfig.ts +5 -0
- package/src/config/serverConfig.ts +3 -1
- package/src/core/Pipeline.ts +240 -271
- package/src/core/ProviderRegistry.ts +2 -2
- package/src/core/VectorPlugin.ts +9 -0
- package/src/handlers/index.ts +91 -15
- package/src/hooks/useRagChat.ts +21 -11
- package/src/index.ts +9 -1
- package/src/llm/LLMFactory.ts +54 -2
- package/src/llm/providers/AnthropicProvider.ts +12 -8
- package/src/llm/providers/GeminiProvider.ts +188 -143
- package/src/llm/providers/OllamaProvider.ts +7 -3
- package/src/llm/providers/OpenAIProvider.ts +12 -8
- package/src/providers/vectordb/MultiTablePostgresProvider.ts +150 -64
- package/src/types/chat.ts +8 -0
- package/src/types/index.ts +132 -0
- package/src/types/props.ts +9 -1
- package/src/utils/ProductExtractor.ts +347 -0
- package/src/utils/SchemaMapper.ts +129 -0
- package/src/utils/UITransformer.ts +470 -209
- package/src/utils/synonyms.ts +78 -0
- package/dist/DocumentChunker-C1GEEosY.d.ts +0 -93
- package/dist/DocumentChunker-CFEiRopR.d.mts +0 -93
- package/dist/PostgreSQLProvider-BMOETDZA.mjs +0 -8
- package/dist/chunk-FLOSGE6A.mjs +0 -202
package/dist/server.mjs
CHANGED
|
@@ -39,14 +39,15 @@ import {
|
|
|
39
39
|
sseFrame,
|
|
40
40
|
sseMetaFrame,
|
|
41
41
|
sseTextFrame
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-LZVVLSDN.mjs";
|
|
43
|
+
import "./chunk-ICKRMZQK.mjs";
|
|
43
44
|
import "./chunk-YLTMFW4M.mjs";
|
|
44
45
|
import {
|
|
45
46
|
PineconeProvider
|
|
46
47
|
} from "./chunk-VUQJVIJT.mjs";
|
|
47
48
|
import {
|
|
48
|
-
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
MultiTablePostgresProvider
|
|
50
|
+
} from "./chunk-OZFBG4BA.mjs";
|
|
50
51
|
import {
|
|
51
52
|
MongoDBProvider
|
|
52
53
|
} from "./chunk-5AJ4XHLW.mjs";
|
|
@@ -60,8 +61,6 @@ import {
|
|
|
60
61
|
BaseVectorProvider
|
|
61
62
|
} from "./chunk-IMP6FUCY.mjs";
|
|
62
63
|
import {
|
|
63
|
-
__objRest,
|
|
64
|
-
__spreadProps,
|
|
65
64
|
__spreadValues
|
|
66
65
|
} from "./chunk-X4TOT24V.mjs";
|
|
67
66
|
|
|
@@ -237,196 +236,187 @@ function createFromPreset(presetName) {
|
|
|
237
236
|
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`]);
|
|
238
237
|
}
|
|
239
238
|
|
|
240
|
-
// src/providers/vectordb/
|
|
239
|
+
// src/providers/vectordb/PostgreSQLProvider.ts
|
|
241
240
|
import { Pool } from "pg";
|
|
242
|
-
var
|
|
241
|
+
var PostgreSQLProvider = class extends BaseVectorProvider {
|
|
243
242
|
constructor(config) {
|
|
244
|
-
var _a
|
|
243
|
+
var _a;
|
|
245
244
|
super(config);
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}
|
|
245
|
+
this.tableName = this.indexName.replace(/[^a-z0-9_]/gi, "_");
|
|
246
|
+
const opts = config.options;
|
|
247
|
+
if (!opts.connectionString) throw new Error("[PostgreSQLProvider] options.connectionString is required");
|
|
250
248
|
this.connectionString = opts.connectionString;
|
|
251
|
-
this.dimensions = (_a = opts.dimensions) != null ? _a :
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
249
|
+
this.dimensions = (_a = opts.dimensions) != null ? _a : 1536;
|
|
250
|
+
}
|
|
251
|
+
static getValidator() {
|
|
252
|
+
return {
|
|
253
|
+
validate(config) {
|
|
254
|
+
const errors = [];
|
|
255
|
+
const opts = config.options || {};
|
|
256
|
+
if (!opts.connectionString) {
|
|
257
|
+
errors.push({
|
|
258
|
+
field: "vectorDb.options.connectionString",
|
|
259
|
+
message: "PostgreSQL connection string is required",
|
|
260
|
+
suggestion: "Set PGVECTOR_CONNECTION_STRING environment variable",
|
|
261
|
+
severity: "error"
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
if (opts.tables && typeof opts.tables !== "string" && !Array.isArray(opts.tables)) {
|
|
265
|
+
errors.push({
|
|
266
|
+
field: "vectorDb.options.tables",
|
|
267
|
+
message: "PostgreSQL tables must be a string or a string array",
|
|
268
|
+
severity: "error"
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
return errors;
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
static getHealthChecker() {
|
|
276
|
+
return {
|
|
277
|
+
async check(config) {
|
|
278
|
+
const opts = config.options || {};
|
|
279
|
+
const timestamp = Date.now();
|
|
280
|
+
try {
|
|
281
|
+
const { Client } = await import("pg");
|
|
282
|
+
const client = new Client({ connectionString: opts.connectionString });
|
|
283
|
+
await client.connect();
|
|
284
|
+
const result = await client.query(`
|
|
285
|
+
SELECT EXISTS(SELECT 1 FROM pg_extension WHERE extname = 'vector');
|
|
286
|
+
`);
|
|
287
|
+
const hasVector = result.rows[0].exists;
|
|
288
|
+
await client.end();
|
|
289
|
+
return {
|
|
290
|
+
healthy: true,
|
|
291
|
+
provider: "postgresql",
|
|
292
|
+
capabilities: { pgvectorInstalled: hasVector },
|
|
293
|
+
timestamp
|
|
294
|
+
};
|
|
295
|
+
} catch (error) {
|
|
296
|
+
return {
|
|
297
|
+
healthy: false,
|
|
298
|
+
provider: "postgresql",
|
|
299
|
+
error: `Connection failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
300
|
+
timestamp
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
};
|
|
261
305
|
}
|
|
262
306
|
async initialize() {
|
|
263
307
|
this.pool = new Pool({ connectionString: this.connectionString });
|
|
264
308
|
const client = await this.pool.connect();
|
|
265
309
|
try {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
310
|
+
await client.query("CREATE EXTENSION IF NOT EXISTS vector");
|
|
311
|
+
await client.query(`
|
|
312
|
+
CREATE TABLE IF NOT EXISTS ${this.tableName} (
|
|
313
|
+
id TEXT PRIMARY KEY,
|
|
314
|
+
namespace TEXT NOT NULL DEFAULT '',
|
|
315
|
+
content TEXT NOT NULL,
|
|
316
|
+
metadata JSONB,
|
|
317
|
+
embedding VECTOR(${this.dimensions})
|
|
318
|
+
)
|
|
319
|
+
`);
|
|
320
|
+
await client.query(`
|
|
321
|
+
CREATE INDEX IF NOT EXISTS ${this.tableName}_embedding_idx
|
|
322
|
+
ON ${this.tableName}
|
|
323
|
+
USING hnsw (embedding vector_cosine_ops)
|
|
271
324
|
`);
|
|
272
|
-
const discoveredTables = res.rows.map((r) => r.table_name);
|
|
273
|
-
if (this.tables.length === 0) {
|
|
274
|
-
this.tables = discoveredTables;
|
|
275
|
-
} else {
|
|
276
|
-
const staticTables = [...this.tables];
|
|
277
|
-
this.tables = staticTables.filter((t) => discoveredTables.includes(t));
|
|
278
|
-
if (this.tables.length < staticTables.length) {
|
|
279
|
-
const missing = staticTables.filter((t) => !discoveredTables.includes(t));
|
|
280
|
-
console.warn(`[MultiTablePostgresProvider] Some configured tables were skipped (missing 'embedding' column): ${missing.join(", ")}`);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
if (this.tables.length === 0) {
|
|
284
|
-
console.warn('[MultiTablePostgresProvider] No tables with "embedding" columns found in the database.');
|
|
285
|
-
} else {
|
|
286
|
-
console.log(
|
|
287
|
-
`[MultiTablePostgresProvider] Connected. Searching across ${this.tables.length} table(s): ${this.tables.join(", ")}`
|
|
288
|
-
);
|
|
289
|
-
}
|
|
290
325
|
} finally {
|
|
291
326
|
client.release();
|
|
292
327
|
}
|
|
293
328
|
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
async batchUpsert(_docs, _namespace) {
|
|
307
|
-
throw new Error(
|
|
308
|
-
"[MultiTablePostgresProvider] batchUpsert() is not supported in multi-table mode."
|
|
329
|
+
async upsert(doc, namespace = "") {
|
|
330
|
+
var _a;
|
|
331
|
+
const vectorLiteral = `[${doc.vector.join(",")}]`;
|
|
332
|
+
await this.pool.query(
|
|
333
|
+
`INSERT INTO ${this.tableName} (id, namespace, content, metadata, embedding)
|
|
334
|
+
VALUES ($1, $2, $3, $4, $5::vector)
|
|
335
|
+
ON CONFLICT (id) DO UPDATE
|
|
336
|
+
SET namespace = EXCLUDED.namespace,
|
|
337
|
+
content = EXCLUDED.content,
|
|
338
|
+
metadata = EXCLUDED.metadata,
|
|
339
|
+
embedding = EXCLUDED.embedding`,
|
|
340
|
+
[doc.id, namespace, doc.content, JSON.stringify((_a = doc.metadata) != null ? _a : {}), vectorLiteral]
|
|
309
341
|
);
|
|
310
342
|
}
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
};
|
|
337
|
-
const dynamicKeywordQuery = getDynamicKeywordQuery();
|
|
338
|
-
const queryPromises = this.tables.map(async (table) => {
|
|
339
|
-
try {
|
|
340
|
-
let sqlQuery = "";
|
|
341
|
-
let params = [];
|
|
342
|
-
if (queryText) {
|
|
343
|
-
const hasEntityHints = entityHints.length > 0;
|
|
344
|
-
const exactNameScoreExpr = hasEntityHints ? `+ (
|
|
345
|
-
SELECT COALESCE(MAX(
|
|
346
|
-
CASE WHEN LOWER(val) IN (${entityHints.map((h) => `'${h.replace(/'/g, "''")}'`).join(", ")})
|
|
347
|
-
THEN 1.0 ELSE 0.0 END
|
|
348
|
-
), 0)
|
|
349
|
-
FROM jsonb_each_text(to_jsonb(t)) AS kv(key, val)
|
|
350
|
-
WHERE key IN (${this.searchFields.map((f) => `'${f}'`).join(", ")})
|
|
351
|
-
) * 3.0` : "";
|
|
352
|
-
sqlQuery = `
|
|
353
|
-
SELECT *,
|
|
354
|
-
(1 - (embedding <=> $1::vector)) AS vector_score,
|
|
355
|
-
COALESCE(ts_rank(to_tsvector('english', (to_jsonb(t) - 'embedding')::text), to_tsquery('english', $2)), 0) AS keyword_score,
|
|
356
|
-
((1 - (embedding <=> $1::vector)) + (COALESCE(ts_rank(to_tsvector('english', (to_jsonb(t) - 'embedding')::text), to_tsquery('english', $2)), 0) * 2.0) ${exactNameScoreExpr}) AS hybrid_score
|
|
357
|
-
FROM "${table}" t
|
|
358
|
-
ORDER BY hybrid_score DESC
|
|
359
|
-
LIMIT 50
|
|
360
|
-
`;
|
|
361
|
-
params = [vectorLiteral, dynamicKeywordQuery];
|
|
362
|
-
} else {
|
|
363
|
-
sqlQuery = `
|
|
364
|
-
SELECT *,
|
|
365
|
-
(1 - (embedding <=> $1::vector)) AS hybrid_score
|
|
366
|
-
FROM "${table}" t
|
|
367
|
-
ORDER BY hybrid_score DESC
|
|
368
|
-
LIMIT 50
|
|
369
|
-
`;
|
|
370
|
-
params = [vectorLiteral];
|
|
371
|
-
}
|
|
372
|
-
const result = await this.pool.query(sqlQuery, params);
|
|
373
|
-
if (result.rowCount && result.rowCount > 0) {
|
|
374
|
-
console.log(` \u2705 Table "${table}": Found ${result.rowCount} potential matches. Top score: ${result.rows[0].hybrid_score.toFixed(4)}`);
|
|
375
|
-
} else {
|
|
376
|
-
console.log(` \u26AA Table "${table}": No relevant matches found.`);
|
|
377
|
-
}
|
|
378
|
-
const tableResults = [];
|
|
379
|
-
for (const row of result.rows) {
|
|
380
|
-
const _a2 = row, { hybrid_score, id } = _a2, rest = __objRest(_a2, ["hybrid_score", "id"]);
|
|
381
|
-
delete rest.embedding;
|
|
382
|
-
delete rest.vector_score;
|
|
383
|
-
delete rest.keyword_score;
|
|
384
|
-
delete rest.exact_name_score;
|
|
385
|
-
const content = `[TYPE: ${table.replace(/s$/, "").toUpperCase()}]
|
|
386
|
-
` + Object.entries(rest).filter(([k, v]) => v !== null && typeof v !== "object" && k !== "id").map(([k, v]) => `${k}: ${v}`).join("\n");
|
|
387
|
-
tableResults.push({
|
|
388
|
-
id: `${table}-${id}`,
|
|
389
|
-
score: parseFloat(String(hybrid_score)),
|
|
390
|
-
content,
|
|
391
|
-
metadata: __spreadProps(__spreadValues({}, rest), { source_table: table })
|
|
392
|
-
});
|
|
393
|
-
}
|
|
394
|
-
return tableResults;
|
|
395
|
-
} catch (err) {
|
|
396
|
-
console.error(
|
|
397
|
-
`[MultiTablePostgresProvider] Error querying table "${table}":`,
|
|
398
|
-
err.message
|
|
399
|
-
);
|
|
400
|
-
return [];
|
|
343
|
+
async batchUpsert(docs, namespace = "") {
|
|
344
|
+
if (docs.length === 0) return;
|
|
345
|
+
const client = await this.pool.connect();
|
|
346
|
+
try {
|
|
347
|
+
await client.query("BEGIN");
|
|
348
|
+
const BATCH_SIZE = 50;
|
|
349
|
+
for (let i = 0; i < docs.length; i += BATCH_SIZE) {
|
|
350
|
+
const batch = docs.slice(i, i + BATCH_SIZE);
|
|
351
|
+
const values = [];
|
|
352
|
+
const valuePlaceholders = batch.map((doc, idx) => {
|
|
353
|
+
var _a;
|
|
354
|
+
const offset = idx * 5;
|
|
355
|
+
values.push(doc.id, namespace, doc.content, JSON.stringify((_a = doc.metadata) != null ? _a : {}), `[${doc.vector.join(",")}]`);
|
|
356
|
+
return `($${offset + 1}, $${offset + 2}, $${offset + 3}, $${offset + 4}, $${offset + 5}::vector)`;
|
|
357
|
+
}).join(", ");
|
|
358
|
+
const query = `
|
|
359
|
+
INSERT INTO ${this.tableName} (id, namespace, content, metadata, embedding)
|
|
360
|
+
VALUES ${valuePlaceholders}
|
|
361
|
+
ON CONFLICT (id) DO UPDATE
|
|
362
|
+
SET namespace = EXCLUDED.namespace,
|
|
363
|
+
content = EXCLUDED.content,
|
|
364
|
+
metadata = EXCLUDED.metadata,
|
|
365
|
+
embedding = EXCLUDED.embedding
|
|
366
|
+
`;
|
|
367
|
+
await client.query(query, values);
|
|
401
368
|
}
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
for (const res of allResults) {
|
|
409
|
-
const table = (_a = res.metadata) == null ? void 0 : _a.source_table;
|
|
410
|
-
if (!resultsByTable[table]) resultsByTable[table] = [];
|
|
411
|
-
resultsByTable[table].push(res);
|
|
369
|
+
await client.query("COMMIT");
|
|
370
|
+
} catch (error) {
|
|
371
|
+
await client.query("ROLLBACK");
|
|
372
|
+
throw error;
|
|
373
|
+
} finally {
|
|
374
|
+
client.release();
|
|
412
375
|
}
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
376
|
+
}
|
|
377
|
+
async query(vector, topK, namespace, filter) {
|
|
378
|
+
const vectorLiteral = `[${vector.join(",")}]`;
|
|
379
|
+
let whereClause = namespace ? `WHERE namespace = $3` : "";
|
|
380
|
+
const params = [vectorLiteral, topK];
|
|
381
|
+
if (namespace) params.push(namespace);
|
|
382
|
+
const publicFilter = this.sanitizeFilter(filter);
|
|
383
|
+
if (Object.keys(publicFilter).length > 0) {
|
|
384
|
+
const filterConditions = Object.entries(publicFilter).map(([key, val]) => {
|
|
385
|
+
const paramIdx = params.length + 1;
|
|
386
|
+
params.push(JSON.stringify(val));
|
|
387
|
+
return `metadata->>'${key}' = $${paramIdx}`;
|
|
388
|
+
}).join(" AND ");
|
|
389
|
+
whereClause = whereClause ? `${whereClause} AND ${filterConditions}` : `WHERE ${filterConditions}`;
|
|
417
390
|
}
|
|
418
|
-
const
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
391
|
+
const client = await this.pool.connect();
|
|
392
|
+
try {
|
|
393
|
+
const efSearch = this.config.options.efSearch || Math.max(topK * 10, 40);
|
|
394
|
+
await client.query(`SET LOCAL hnsw.ef_search = ${efSearch}`);
|
|
395
|
+
const result = await client.query(
|
|
396
|
+
`SELECT id, content, metadata, 1 - (embedding <=> $1::vector) AS score
|
|
397
|
+
FROM ${this.tableName}
|
|
398
|
+
${whereClause}
|
|
399
|
+
ORDER BY embedding <=> $1::vector
|
|
400
|
+
LIMIT $2`,
|
|
401
|
+
params
|
|
402
|
+
);
|
|
403
|
+
return result.rows.map((row) => ({
|
|
404
|
+
id: String(row["id"]),
|
|
405
|
+
score: parseFloat(String(row["score"])),
|
|
406
|
+
content: String(row["content"]),
|
|
407
|
+
metadata: row["metadata"]
|
|
408
|
+
}));
|
|
409
|
+
} finally {
|
|
410
|
+
client.release();
|
|
422
411
|
}
|
|
423
|
-
return finalSorted.slice(0, Math.max(topK, 15));
|
|
424
412
|
}
|
|
425
|
-
async delete(
|
|
426
|
-
|
|
413
|
+
async delete(id, namespace) {
|
|
414
|
+
const where = namespace ? "WHERE id = $1 AND namespace = $2" : "WHERE id = $1";
|
|
415
|
+
const params = namespace ? [id, namespace] : [id];
|
|
416
|
+
await this.pool.query(`DELETE FROM ${this.tableName} ${where}`, params);
|
|
427
417
|
}
|
|
428
|
-
async deleteNamespace(
|
|
429
|
-
|
|
418
|
+
async deleteNamespace(namespace) {
|
|
419
|
+
await this.pool.query(`DELETE FROM ${this.tableName} WHERE namespace = $1`, [namespace]);
|
|
430
420
|
}
|
|
431
421
|
async ping() {
|
|
432
422
|
try {
|
|
@@ -437,9 +427,7 @@ var MultiTablePostgresProvider = class extends BaseVectorProvider {
|
|
|
437
427
|
}
|
|
438
428
|
}
|
|
439
429
|
async disconnect() {
|
|
440
|
-
|
|
441
|
-
await this.pool.end();
|
|
442
|
-
}
|
|
430
|
+
await this.pool.end();
|
|
443
431
|
}
|
|
444
432
|
};
|
|
445
433
|
export {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retrivora-ai/rag-engine",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.2",
|
|
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",
|
|
@@ -85,15 +85,19 @@
|
|
|
85
85
|
},
|
|
86
86
|
"dependencies": {
|
|
87
87
|
"@anthropic-ai/sdk": "^0.90.0",
|
|
88
|
-
"@google/genai": "^
|
|
88
|
+
"@google/genai": "^0.8.0",
|
|
89
|
+
"@google/generative-ai": "^0.24.1",
|
|
89
90
|
"@pinecone-database/pinecone": "^7.2.0",
|
|
91
|
+
"@types/papaparse": "^5.5.2",
|
|
90
92
|
"axios": "^1.15.0",
|
|
91
93
|
"lucide-react": "^1.8.0",
|
|
92
94
|
"next": ">=14.0.0",
|
|
93
95
|
"next-themes": "^0.4.6",
|
|
94
96
|
"openai": "^6.34.0",
|
|
97
|
+
"papaparse": "^5.5.3",
|
|
95
98
|
"react": ">=18.0.0",
|
|
96
99
|
"react-dom": ">=18.0.0",
|
|
100
|
+
"react-is": "^18.3.1",
|
|
97
101
|
"react-markdown": "^10.1.0",
|
|
98
102
|
"recharts": "^3.8.1",
|
|
99
103
|
"remark-gfm": "^4.0.1"
|
package/src/app/constants.tsx
CHANGED
|
@@ -112,12 +112,12 @@ const { reply, sources } = await pipeline.ask('How does Retrivora work?');`,
|
|
|
112
112
|
title: 'Route Handlers',
|
|
113
113
|
language: 'typescript',
|
|
114
114
|
description: 'Deploy production-ready API endpoints in seconds using pre-built factories.',
|
|
115
|
-
code: `import {
|
|
115
|
+
code: `import { createChatStreamHandler, createUploadHandler, getRagConfig } from '@retrivora-ai/rag-engine/server';
|
|
116
116
|
|
|
117
117
|
const config = getRagConfig();
|
|
118
118
|
|
|
119
119
|
// src/app/api/chat/route.ts
|
|
120
|
-
export const POST =
|
|
120
|
+
export const POST = createChatStreamHandler(config);
|
|
121
121
|
|
|
122
122
|
// src/app/api/upload/route.ts
|
|
123
123
|
export const POST = createUploadHandler(config);`,
|