@retrivora-ai/rag-engine 0.1.8 → 0.1.10
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-2JZSBOQX.mjs → ChromaDBProvider-T7TK3ONZ.mjs} +2 -2
- package/dist/{MilvusProvider-CJDBCBVI.mjs → MilvusProvider-Y5FV5EAE.mjs} +2 -2
- package/dist/{MongoDBProvider-WWVJG3WT.mjs → MongoDBProvider-QHMGD2LZ.mjs} +2 -2
- package/dist/{PineconeProvider-E6L5Z2FO.mjs → PineconeProvider-A47MRRYJ.mjs} +2 -2
- package/dist/{PostgreSQLProvider-ZNXA67IM.mjs → PostgreSQLProvider-PJ5ER5Z4.mjs} +1 -1
- package/dist/{QdrantProvider-JITRNJQN.mjs → QdrantProvider-OLPJK7CY.mjs} +2 -2
- package/dist/{RedisProvider-3VKFQXXD.mjs → RedisProvider-ANEJ3BHR.mjs} +2 -2
- package/dist/{UniversalVectorProvider-E6L4U4OX.mjs → UniversalVectorProvider-QJIV2AJJ.mjs} +3 -3
- package/dist/{WeaviateProvider-MXIPP44J.mjs → WeaviateProvider-WIK2QN23.mjs} +2 -2
- package/dist/{chunk-YIYDJQJM.mjs → chunk-2VR5ZMXV.mjs} +11 -11
- package/dist/{chunk-QEYVWVT5.mjs → chunk-5HXNKSCR.mjs} +1 -1
- package/dist/{chunk-MFWJZVF3.mjs → chunk-BMHJTWSU.mjs} +1 -1
- package/dist/{chunk-UKDXCXW7.mjs → chunk-EDLTMSNY.mjs} +1 -1
- package/dist/{chunk-I4E63NIC.mjs → chunk-FWCSY2DS.mjs} +14 -1
- package/dist/{chunk-7BQI4A5J.mjs → chunk-HOMXEE3M.mjs} +1 -1
- package/dist/{chunk-TSX6DQXX.mjs → chunk-RUKZC3ON.mjs} +1 -1
- package/dist/{chunk-YST6KYBJ.mjs → chunk-VEJNRS4B.mjs} +1 -1
- package/dist/{chunk-XZPVJS2B.mjs → chunk-VKE5ZW7Y.mjs} +1 -1
- package/dist/{chunk-Y6HQZDCJ.mjs → chunk-VV2ML6TM.mjs} +2 -2
- package/dist/{chunk-26EMHLIN.mjs → chunk-W2PQR3UK.mjs} +1 -1
- package/dist/handlers/index.mjs +3 -3
- package/dist/index.js +67 -58
- package/dist/index.mjs +74 -47
- package/dist/server.d.mts +36 -1
- package/dist/server.d.ts +36 -1
- package/dist/server.js +127 -0
- package/dist/server.mjs +124 -11
- package/package.json +1 -1
- 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/providers/vectordb/MultiTablePostgresProvider.ts +164 -0
- package/src/server.ts +1 -0
package/dist/server.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ChromaDBProvider
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VKE5ZW7Y.mjs";
|
|
4
4
|
import {
|
|
5
5
|
RedisProvider
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-HOMXEE3M.mjs";
|
|
7
7
|
import {
|
|
8
8
|
WeaviateProvider
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-RUKZC3ON.mjs";
|
|
10
10
|
import {
|
|
11
11
|
UniversalVectorProvider
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-VV2ML6TM.mjs";
|
|
13
13
|
import {
|
|
14
14
|
AnthropicProvider,
|
|
15
15
|
BatchProcessor,
|
|
@@ -34,29 +34,31 @@ import {
|
|
|
34
34
|
createIngestHandler,
|
|
35
35
|
createUploadHandler,
|
|
36
36
|
getRagConfig
|
|
37
|
-
} from "./chunk-
|
|
38
|
-
import "./chunk-
|
|
37
|
+
} from "./chunk-2VR5ZMXV.mjs";
|
|
38
|
+
import "./chunk-EDLTMSNY.mjs";
|
|
39
39
|
import {
|
|
40
40
|
PineconeProvider
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-BMHJTWSU.mjs";
|
|
42
42
|
import {
|
|
43
43
|
PostgreSQLProvider
|
|
44
44
|
} from "./chunk-IUTAZ7QR.mjs";
|
|
45
45
|
import {
|
|
46
46
|
MongoDBProvider
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-5HXNKSCR.mjs";
|
|
48
48
|
import {
|
|
49
49
|
MilvusProvider
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-VEJNRS4B.mjs";
|
|
51
51
|
import {
|
|
52
52
|
QdrantProvider
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-W2PQR3UK.mjs";
|
|
54
54
|
import {
|
|
55
55
|
BaseVectorProvider
|
|
56
56
|
} from "./chunk-VOIWNO5O.mjs";
|
|
57
57
|
import {
|
|
58
|
+
__objRest,
|
|
59
|
+
__spreadProps,
|
|
58
60
|
__spreadValues
|
|
59
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-FWCSY2DS.mjs";
|
|
60
62
|
|
|
61
63
|
// src/config/ConfigBuilder.ts
|
|
62
64
|
var ConfigBuilder = class {
|
|
@@ -330,6 +332,116 @@ function createFromPreset(presetName) {
|
|
|
330
332
|
const preset = PRESETS[presetName];
|
|
331
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`]);
|
|
332
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, Math.max(topK, 15));
|
|
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
|
+
};
|
|
333
445
|
export {
|
|
334
446
|
AnthropicProvider,
|
|
335
447
|
BaseVectorProvider,
|
|
@@ -346,6 +458,7 @@ export {
|
|
|
346
458
|
LLM_PROFILES,
|
|
347
459
|
MilvusProvider,
|
|
348
460
|
MongoDBProvider,
|
|
461
|
+
MultiTablePostgresProvider,
|
|
349
462
|
OllamaProvider,
|
|
350
463
|
OpenAIProvider,
|
|
351
464
|
PRESETS,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retrivora-ai/rag-engine",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
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",
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
Zap,
|
|
4
|
+
Database,
|
|
5
|
+
Layers,
|
|
6
|
+
Search,
|
|
7
|
+
Box,
|
|
8
|
+
Package,
|
|
9
|
+
Activity,
|
|
10
|
+
Hexagon,
|
|
11
|
+
Sparkles,
|
|
12
|
+
Bot,
|
|
13
|
+
Brain,
|
|
14
|
+
Rabbit,
|
|
15
|
+
Code,
|
|
16
|
+
Terminal,
|
|
17
|
+
FileText,
|
|
18
|
+
Puzzle,
|
|
19
|
+
MessageSquare,
|
|
20
|
+
} from 'lucide-react';
|
|
21
|
+
import { ArchitectureCardProps, Snippet, PipelineStep, ProviderPill } from './types';
|
|
22
|
+
|
|
23
|
+
export const LANDING_PAGE_CONTENT = {
|
|
24
|
+
hero: {
|
|
25
|
+
badge: 'Dynamic & Universal Retrivora AI',
|
|
26
|
+
title: 'The Universal Bridge for Generative AI',
|
|
27
|
+
subtitle: 'Retrivora AI is a vendor-agnostic RAG engine that connects any Document to any LLM and Vector Database in minutes.',
|
|
28
|
+
},
|
|
29
|
+
lifecycle: {
|
|
30
|
+
title: 'The RAG Lifecycle',
|
|
31
|
+
},
|
|
32
|
+
guide: {
|
|
33
|
+
title: 'Interactive Guide',
|
|
34
|
+
subtitle: 'Universal RAG integration for your Next.js applications in minutes.',
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const VECTOR_DATABASES: ProviderPill[] = [
|
|
39
|
+
{ Icon: Zap, label: 'Pinecone' },
|
|
40
|
+
{ Icon: Database, label: 'PostgreSQL' },
|
|
41
|
+
{ Icon: Layers, label: 'MongoDB' },
|
|
42
|
+
{ Icon: Search, label: 'Milvus' },
|
|
43
|
+
{ Icon: Box, label: 'Qdrant' },
|
|
44
|
+
{ Icon: Package, label: 'ChromaDB' },
|
|
45
|
+
{ Icon: Activity, label: 'Redis' },
|
|
46
|
+
{ Icon: Hexagon, label: 'Weaviate' },
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
export const AI_MODELS: ProviderPill[] = [
|
|
50
|
+
{ Icon: Sparkles, label: 'OpenAI' },
|
|
51
|
+
{ Icon: Bot, label: 'Anthropic' },
|
|
52
|
+
{ Icon: Brain, label: 'Gemini' },
|
|
53
|
+
{ Icon: Rabbit, label: 'Ollama' },
|
|
54
|
+
{ Icon: Code, label: 'Copilot' },
|
|
55
|
+
{ Icon: Terminal, label: 'LiteLLM' },
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
export const PIPELINE_STEPS: PipelineStep[] = [
|
|
59
|
+
{
|
|
60
|
+
step: '01',
|
|
61
|
+
Icon: FileText,
|
|
62
|
+
title: 'Ingest',
|
|
63
|
+
desc: 'Universal support for PDF, DOCX, CSV, and JSON. Documents are parsed, chunked, and embedded.',
|
|
64
|
+
colors: { from: '#10b981', to: '#14b8a6' },
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
step: '02',
|
|
68
|
+
Icon: Search,
|
|
69
|
+
title: 'Retrieve',
|
|
70
|
+
desc: 'Queries are converted to vectors. Semantic search finds context across any configured Vector DB.',
|
|
71
|
+
colors: { from: '#14b8a6', to: '#06b6d4' },
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
step: '03',
|
|
75
|
+
Icon: Puzzle,
|
|
76
|
+
title: 'Augment',
|
|
77
|
+
desc: 'Retrieved context is injected into the LLM prompt with namespaced project isolation.',
|
|
78
|
+
colors: { from: '#06b6d4', to: '#3b82f6' },
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
step: '04',
|
|
82
|
+
Icon: MessageSquare,
|
|
83
|
+
title: 'Generate',
|
|
84
|
+
desc: 'Providers like OpenAI, Anthropic, or Gemini produce grounded, source-cited responses.',
|
|
85
|
+
colors: { from: '#3b82f6', to: '#6366f1' },
|
|
86
|
+
},
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
export const SNIPPETS: Snippet[] = [
|
|
90
|
+
{
|
|
91
|
+
id: 'pipeline',
|
|
92
|
+
title: 'Pipeline API',
|
|
93
|
+
language: 'typescript',
|
|
94
|
+
description: 'Orchestrate the full RAG flow programmatically with the Pipeline class.',
|
|
95
|
+
code: `import { Pipeline, getRagConfig } from '@retrivora-ai/rag-engine/server';
|
|
96
|
+
|
|
97
|
+
const config = getRagConfig();
|
|
98
|
+
const pipeline = new Pipeline(config);
|
|
99
|
+
|
|
100
|
+
// Ingest documents
|
|
101
|
+
await pipeline.ingest([{
|
|
102
|
+
docId: 'doc-1',
|
|
103
|
+
content: 'Retrivora AI simplifies RAG...',
|
|
104
|
+
metadata: { source: 'docs' }
|
|
105
|
+
}]);
|
|
106
|
+
|
|
107
|
+
// Ask a question
|
|
108
|
+
const { reply, sources } = await pipeline.ask('How does Retrivora work?');`,
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
id: 'handlers',
|
|
112
|
+
title: 'Route Handlers',
|
|
113
|
+
language: 'typescript',
|
|
114
|
+
description: 'Deploy production-ready API endpoints in seconds using pre-built factories.',
|
|
115
|
+
code: `import { createChatHandler, createUploadHandler, getRagConfig } from '@retrivora-ai/rag-engine/server';
|
|
116
|
+
|
|
117
|
+
const config = getRagConfig();
|
|
118
|
+
|
|
119
|
+
// src/app/api/chat/route.ts
|
|
120
|
+
export const POST = createChatHandler(config);
|
|
121
|
+
|
|
122
|
+
// src/app/api/upload/route.ts
|
|
123
|
+
export const POST = createUploadHandler(config);`,
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
id: 'ui',
|
|
127
|
+
title: 'React Components',
|
|
128
|
+
language: 'typescript',
|
|
129
|
+
description: 'Embed beautiful, themeable AI interfaces with headless logic or pre-built widgets.',
|
|
130
|
+
code: `import { ConfigProvider, ChatWidget } from '@retrivora-ai/rag-engine';
|
|
131
|
+
|
|
132
|
+
export default function Layout({ children }) {
|
|
133
|
+
return (
|
|
134
|
+
<ConfigProvider config={{ projectId: 'demo' }}>
|
|
135
|
+
{children}
|
|
136
|
+
<ChatWidget position="bottom-right" />
|
|
137
|
+
</ConfigProvider>
|
|
138
|
+
);
|
|
139
|
+
}`,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
id: 'config',
|
|
143
|
+
title: 'Config Builder',
|
|
144
|
+
language: 'typescript',
|
|
145
|
+
description: 'Fluent, type-safe configuration builder for granular control over providers.',
|
|
146
|
+
code: `import { ConfigBuilder } from '@retrivora-ai/rag-engine/server';
|
|
147
|
+
|
|
148
|
+
const config = new ConfigBuilder()
|
|
149
|
+
.vectorDb('pinecone', { apiKey: '...', indexName: 'docs' })
|
|
150
|
+
.llm('ollama', 'llama3.2')
|
|
151
|
+
.embedding('ollama', 'nomic-embed-text')
|
|
152
|
+
.build();`,
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
id: 'env',
|
|
156
|
+
title: 'Environment',
|
|
157
|
+
language: 'bash',
|
|
158
|
+
description: 'The exact environment variable structure required for auto-configuration.',
|
|
159
|
+
code: `# Project Identity
|
|
160
|
+
RAG_PROJECT_ID=my-project
|
|
161
|
+
|
|
162
|
+
# Vector DB
|
|
163
|
+
VECTOR_DB_PROVIDER=pinecone
|
|
164
|
+
PINECONE_API_KEY=pcsk_...
|
|
165
|
+
VECTOR_DB_INDEX=products
|
|
166
|
+
|
|
167
|
+
# AI Services
|
|
168
|
+
LLM_PROVIDER=openai
|
|
169
|
+
LLM_MODEL=gpt-4o
|
|
170
|
+
OPENAI_API_KEY=sk-...`,
|
|
171
|
+
},
|
|
172
|
+
];
|
|
173
|
+
|
|
174
|
+
export const ARCHITECTURE_CARDS: ArchitectureCardProps[] = [
|
|
175
|
+
{
|
|
176
|
+
icon: <Database className="text-indigo-600" />,
|
|
177
|
+
title: 'Vector Store',
|
|
178
|
+
description: 'Universal support for Pinecone, PGVector, MongoDB, Milvus, Qdrant, and more.',
|
|
179
|
+
badge: 'Vector DB',
|
|
180
|
+
badgeColor: 'bg-indigo-50 dark:bg-indigo-500/10 text-indigo-600 dark:text-indigo-400 border-indigo-200 dark:border-indigo-500/20',
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
icon: <Zap className="text-amber-500" />,
|
|
184
|
+
title: 'Embeddings',
|
|
185
|
+
description: 'Seamlessly switch between OpenAI, Ollama, or custom embedding providers.',
|
|
186
|
+
badge: 'Models',
|
|
187
|
+
badgeColor: 'bg-amber-50 dark:bg-amber-500/10 text-amber-600 dark:text-amber-400 border-amber-200 dark:border-amber-500/20',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
icon: <Bot className="text-emerald-500" />,
|
|
191
|
+
title: 'LLM Orchestration',
|
|
192
|
+
description: 'Optimized inference across OpenAI, Anthropic, Gemini, and local LLMs.',
|
|
193
|
+
badge: 'Inference',
|
|
194
|
+
badgeColor: 'bg-emerald-50 dark:bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border-emerald-200 dark:border-emerald-500/20',
|
|
195
|
+
},
|
|
196
|
+
];
|
|
197
|
+
|
|
198
|
+
export const QUICK_START_STEPS = [
|
|
199
|
+
'Install @retrivora-ai/rag-engine',
|
|
200
|
+
'Configure your .env.local',
|
|
201
|
+
'Mount the API handlers',
|
|
202
|
+
'Drop the ChatWidget'
|
|
203
|
+
];
|
|
204
|
+
|
|
205
|
+
export const API_ENDPOINTS = ['chat', 'health', 'ingest', 'upload'];
|
|
206
|
+
|
|
207
|
+
export const CHAT_SUGGESTIONS = [
|
|
208
|
+
'What can you help me with?',
|
|
209
|
+
'Summarise the key topics',
|
|
210
|
+
'Show me an example'
|
|
211
|
+
];
|
|
212
|
+
|
|
213
|
+
export const BORDER_RADIUS_MAP: Record<string, string> = {
|
|
214
|
+
none: 'rounded-none',
|
|
215
|
+
sm: 'rounded-sm',
|
|
216
|
+
md: 'rounded-md',
|
|
217
|
+
lg: 'rounded-lg',
|
|
218
|
+
xl: 'rounded-xl',
|
|
219
|
+
full: 'rounded-3xl',
|
|
220
|
+
};
|