@retrivora-ai/rag-engine 1.0.3 → 1.0.5
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/{RagConfig-DRJO4hGU.d.mts → RagConfig-BEmz4hVP.d.mts} +58 -1
- package/dist/{RagConfig-DRJO4hGU.d.ts → RagConfig-BEmz4hVP.d.ts} +58 -1
- package/dist/{chunk-3JR3SAWX.mjs → chunk-MWL4AGQI.mjs} +216 -108
- package/dist/handlers/index.d.mts +2 -2
- package/dist/handlers/index.d.ts +2 -2
- package/dist/handlers/index.js +218 -110
- package/dist/handlers/index.mjs +11 -3
- package/dist/index-CSfaCeux.d.ts +206 -0
- package/dist/index-DFSy0CG6.d.mts +206 -0
- package/dist/index.d.mts +3 -4
- package/dist/index.d.ts +3 -4
- package/dist/index.js +103 -89
- package/dist/index.mjs +91 -95
- package/dist/server.d.mts +45 -97
- package/dist/server.d.ts +45 -97
- package/dist/server.js +298 -225
- package/dist/server.mjs +78 -167
- package/package.json +12 -10
- package/src/components/ChatWindow.tsx +2 -2
- package/src/components/ConfigProvider.tsx +2 -2
- package/src/components/MessageBubble.tsx +2 -2
- package/src/components/SourceCard.tsx +1 -1
- package/src/components/ThemeToggle.tsx +1 -1
- package/src/config/ConfigBuilder.ts +86 -211
- package/src/config/uiConstants.ts +23 -0
- package/src/core/ConfigResolver.ts +57 -29
- package/src/core/LangChainAgent.ts +73 -40
- package/src/core/Pipeline.ts +63 -7
- package/src/core/ProviderRegistry.ts +2 -2
- package/src/core/QueryProcessor.ts +9 -8
- package/src/handlers/index.ts +138 -49
- package/src/hooks/useRagChat.ts +71 -32
- package/src/rag/EntityExtractor.ts +40 -13
- package/src/server.ts +12 -2
- package/dist/DocumentChunker-C-sCZPhi.d.mts +0 -102
- package/dist/DocumentChunker-C-sCZPhi.d.ts +0 -102
- package/dist/index-B2mutkgp.d.ts +0 -116
- package/dist/index-Bjy0es5a.d.mts +0 -116
package/dist/server.mjs
CHANGED
|
@@ -32,9 +32,15 @@ import {
|
|
|
32
32
|
createChatHandler,
|
|
33
33
|
createHealthHandler,
|
|
34
34
|
createIngestHandler,
|
|
35
|
+
createStreamHandler,
|
|
35
36
|
createUploadHandler,
|
|
36
|
-
getRagConfig
|
|
37
|
-
|
|
37
|
+
getRagConfig,
|
|
38
|
+
resetConfigCache,
|
|
39
|
+
sseErrorFrame,
|
|
40
|
+
sseFrame,
|
|
41
|
+
sseMetaFrame,
|
|
42
|
+
sseTextFrame
|
|
43
|
+
} from "./chunk-MWL4AGQI.mjs";
|
|
38
44
|
import "./chunk-YLTMFW4M.mjs";
|
|
39
45
|
import {
|
|
40
46
|
PineconeProvider
|
|
@@ -62,21 +68,11 @@ import {
|
|
|
62
68
|
|
|
63
69
|
// src/config/ConfigBuilder.ts
|
|
64
70
|
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
71
|
/**
|
|
76
72
|
* Set the project/application ID for namespacing
|
|
77
73
|
*/
|
|
78
74
|
projectId(id) {
|
|
79
|
-
this.
|
|
75
|
+
this._projectId = id;
|
|
80
76
|
return this;
|
|
81
77
|
}
|
|
82
78
|
/**
|
|
@@ -85,9 +81,9 @@ var ConfigBuilder = class {
|
|
|
85
81
|
vectorDb(provider, options) {
|
|
86
82
|
var _a;
|
|
87
83
|
if (provider === "auto") {
|
|
88
|
-
this.
|
|
84
|
+
this._vectorDb = this._autoDetectVectorDb();
|
|
89
85
|
} else {
|
|
90
|
-
this.
|
|
86
|
+
this._vectorDb = {
|
|
91
87
|
provider,
|
|
92
88
|
indexName: (_a = options == null ? void 0 : options.indexName) != null ? _a : "default",
|
|
93
89
|
options: __spreadValues({}, options)
|
|
@@ -101,9 +97,9 @@ var ConfigBuilder = class {
|
|
|
101
97
|
llm(provider, model, apiKey, options) {
|
|
102
98
|
var _a, _b;
|
|
103
99
|
if (provider === "auto") {
|
|
104
|
-
this.
|
|
100
|
+
this._llm = this._autoDetectLLM();
|
|
105
101
|
} else {
|
|
106
|
-
this.
|
|
102
|
+
this._llm = {
|
|
107
103
|
provider,
|
|
108
104
|
model: model != null ? model : "default-model",
|
|
109
105
|
apiKey,
|
|
@@ -121,9 +117,9 @@ var ConfigBuilder = class {
|
|
|
121
117
|
*/
|
|
122
118
|
embedding(provider, model, apiKey, options) {
|
|
123
119
|
if (provider === "auto") {
|
|
124
|
-
this.
|
|
120
|
+
this._embedding = this._autoDetectEmbedding();
|
|
125
121
|
} else {
|
|
126
|
-
this.
|
|
122
|
+
this._embedding = {
|
|
127
123
|
provider,
|
|
128
124
|
model: model != null ? model : "default-embedding",
|
|
129
125
|
apiKey,
|
|
@@ -134,26 +130,46 @@ var ConfigBuilder = class {
|
|
|
134
130
|
return this;
|
|
135
131
|
}
|
|
136
132
|
/**
|
|
137
|
-
* Set RAG-specific parameters
|
|
133
|
+
* Set RAG-specific pipeline parameters
|
|
138
134
|
*/
|
|
139
135
|
rag(options) {
|
|
140
136
|
var _a;
|
|
141
|
-
this.
|
|
137
|
+
this._rag = __spreadValues(__spreadValues({}, (_a = this._rag) != null ? _a : {}), options);
|
|
142
138
|
return this;
|
|
143
139
|
}
|
|
144
140
|
/**
|
|
145
|
-
* Set UI
|
|
141
|
+
* Set UI branding and appearance options.
|
|
142
|
+
* Accepts the full UIConfig interface.
|
|
146
143
|
*/
|
|
147
144
|
ui(options) {
|
|
148
|
-
this.
|
|
145
|
+
this._ui = options;
|
|
149
146
|
return this;
|
|
150
147
|
}
|
|
151
148
|
/**
|
|
152
|
-
* Build and return the
|
|
149
|
+
* Build and return the final RagConfig.
|
|
150
|
+
* Throws if required fields (projectId, vectorDb, llm, embedding) are not set.
|
|
153
151
|
*/
|
|
154
152
|
build() {
|
|
155
|
-
|
|
156
|
-
|
|
153
|
+
var _a;
|
|
154
|
+
const missing = [];
|
|
155
|
+
if (!this._projectId) missing.push('projectId (call .projectId("my-app"))');
|
|
156
|
+
if (!this._vectorDb) missing.push('vectorDb (call .vectorDb("pinecone", { ... }))');
|
|
157
|
+
if (!this._llm) missing.push('llm (call .llm("openai", "gpt-4o", apiKey))');
|
|
158
|
+
if (!this._embedding) missing.push('embedding (call .embedding("openai", "text-embedding-3-small"))');
|
|
159
|
+
if (missing.length > 0) {
|
|
160
|
+
throw new Error(
|
|
161
|
+
`[ConfigBuilder] Cannot build \u2014 required fields are missing:
|
|
162
|
+
${missing.join("\n ")}`
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
return __spreadValues({
|
|
166
|
+
projectId: this._projectId,
|
|
167
|
+
vectorDb: this._vectorDb,
|
|
168
|
+
llm: this._llm,
|
|
169
|
+
embedding: this._embedding,
|
|
170
|
+
ui: this._rag ? this._ui : void 0,
|
|
171
|
+
rag: (_a = this._rag) != null ? _a : { chunkSize: 1e3, chunkOverlap: 200, topK: 5 }
|
|
172
|
+
}, this._ui ? { ui: this._ui } : {});
|
|
157
173
|
}
|
|
158
174
|
/**
|
|
159
175
|
* Build and return as JSON for serialization
|
|
@@ -164,169 +180,58 @@ var ConfigBuilder = class {
|
|
|
164
180
|
// ============================================================================
|
|
165
181
|
// Private helper methods for auto-detection
|
|
166
182
|
// ============================================================================
|
|
167
|
-
|
|
183
|
+
_autoDetectVectorDb() {
|
|
168
184
|
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
|
-
};
|
|
185
|
+
return { provider: "pinecone", indexName: process.env.PINECONE_INDEX, options: { apiKey: process.env.PINECONE_API_KEY } };
|
|
174
186
|
}
|
|
175
187
|
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
|
-
};
|
|
188
|
+
return { provider: "qdrant", indexName: process.env.QDRANT_COLLECTION || "documents", options: { url: process.env.QDRANT_URL, apiKey: process.env.QDRANT_API_KEY } };
|
|
184
189
|
}
|
|
185
190
|
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
|
-
};
|
|
191
|
+
return { provider: "postgresql", indexName: process.env.PG_TABLE || "documents", options: { connectionString: process.env.DATABASE_URL } };
|
|
193
192
|
}
|
|
194
193
|
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
|
-
};
|
|
194
|
+
return { provider: "mongodb", indexName: process.env.MONGODB_COLLECTION || "documents", options: { uri: process.env.MONGODB_URI, database: process.env.MONGODB_DB || "ai_db", collection: process.env.MONGODB_COLLECTION || "documents" } };
|
|
204
195
|
}
|
|
205
196
|
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
|
-
};
|
|
197
|
+
return { provider: "redis", indexName: process.env.REDIS_INDEX || "documents", options: { url: process.env.REDIS_URL } };
|
|
213
198
|
}
|
|
214
|
-
return {
|
|
215
|
-
provider: "qdrant",
|
|
216
|
-
indexName: "documents",
|
|
217
|
-
options: {
|
|
218
|
-
url: process.env.QDRANT_URL || "http://localhost:6333"
|
|
219
|
-
}
|
|
220
|
-
};
|
|
199
|
+
return { provider: "qdrant", indexName: "documents", options: { url: process.env.QDRANT_URL || "http://localhost:6333" } };
|
|
221
200
|
}
|
|
222
|
-
|
|
201
|
+
_autoDetectLLM() {
|
|
223
202
|
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
|
-
};
|
|
203
|
+
return { provider: "openai", model: process.env.OPENAI_MODEL || "gpt-4o-mini", apiKey: process.env.OPENAI_API_KEY, maxTokens: parseInt(process.env.OPENAI_MAX_TOKENS || "1024"), temperature: parseFloat(process.env.OPENAI_TEMPERATURE || "0.7") };
|
|
231
204
|
}
|
|
232
205
|
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
|
-
};
|
|
206
|
+
return { provider: "anthropic", model: process.env.ANTHROPIC_MODEL || "claude-3-haiku-20240307", apiKey: process.env.ANTHROPIC_API_KEY, maxTokens: parseInt(process.env.ANTHROPIC_MAX_TOKENS || "1024"), temperature: parseFloat(process.env.ANTHROPIC_TEMPERATURE || "0.7") };
|
|
240
207
|
}
|
|
241
208
|
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
|
-
};
|
|
209
|
+
return { provider: "ollama", model: process.env.OLLAMA_MODEL || "mistral", baseUrl: process.env.OLLAMA_BASE_URL, maxTokens: parseInt(process.env.OLLAMA_MAX_TOKENS || "1024"), temperature: parseFloat(process.env.OLLAMA_TEMPERATURE || "0.7") };
|
|
249
210
|
}
|
|
250
|
-
return {
|
|
251
|
-
provider: "openai",
|
|
252
|
-
model: "gpt-4o-mini",
|
|
253
|
-
apiKey: process.env.OPENAI_API_KEY
|
|
254
|
-
};
|
|
211
|
+
return { provider: "openai", model: "gpt-4o-mini", apiKey: process.env.OPENAI_API_KEY };
|
|
255
212
|
}
|
|
256
|
-
|
|
213
|
+
_autoDetectEmbedding() {
|
|
257
214
|
if (process.env.EMBEDDING_PROVIDER) {
|
|
258
|
-
|
|
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
|
-
};
|
|
215
|
+
return { provider: process.env.EMBEDDING_PROVIDER, model: process.env.EMBEDDING_MODEL || "default", apiKey: process.env.EMBEDDING_API_KEY, baseUrl: process.env.EMBEDDING_BASE_URL };
|
|
265
216
|
}
|
|
266
|
-
return {
|
|
267
|
-
provider: "openai",
|
|
268
|
-
model: "text-embedding-3-small",
|
|
269
|
-
apiKey: process.env.OPENAI_API_KEY
|
|
270
|
-
};
|
|
217
|
+
return { provider: "openai", model: "text-embedding-3-small", apiKey: process.env.OPENAI_API_KEY };
|
|
271
218
|
}
|
|
272
219
|
};
|
|
273
220
|
var PRESETS = {
|
|
274
|
-
/**
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
"
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
},
|
|
282
|
-
/**
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
"
|
|
286
|
-
|
|
287
|
-
|
|
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
|
-
}
|
|
221
|
+
/** OpenAI + Pinecone: Production-ready cloud setup */
|
|
222
|
+
"openai-pinecone": { vectorDb: "pinecone", llm: "openai", embedding: "openai" },
|
|
223
|
+
/** Claude + Qdrant: Open-source vector DB + proprietary LLM */
|
|
224
|
+
"claude-qdrant": { vectorDb: "qdrant", llm: "anthropic", embedding: "openai" },
|
|
225
|
+
/** Local development: Ollama + local Qdrant */
|
|
226
|
+
"local-dev": { vectorDb: "qdrant", llm: "ollama", embedding: "ollama" },
|
|
227
|
+
/** Fully open-source: Ollama LLM + Qdrant + Ollama embeddings */
|
|
228
|
+
"fully-open-source": { vectorDb: "qdrant", llm: "ollama", embedding: "ollama" },
|
|
229
|
+
/** PostgreSQL stack: pgvector + OpenAI */
|
|
230
|
+
"postgres-openai": { vectorDb: "postgresql", llm: "openai", embedding: "openai" },
|
|
231
|
+
/** Enterprise MongoDB: MongoDB Atlas with OpenAI */
|
|
232
|
+
"mongodb-openai": { vectorDb: "mongodb", llm: "openai", embedding: "openai" },
|
|
233
|
+
/** Redis stack for caching + search */
|
|
234
|
+
"redis-openai": { vectorDb: "redis", llm: "openai", embedding: "openai" }
|
|
330
235
|
};
|
|
331
236
|
function createFromPreset(presetName) {
|
|
332
237
|
const preset = PRESETS[presetName];
|
|
@@ -564,6 +469,12 @@ export {
|
|
|
564
469
|
createFromPreset,
|
|
565
470
|
createHealthHandler,
|
|
566
471
|
createIngestHandler,
|
|
472
|
+
createStreamHandler,
|
|
567
473
|
createUploadHandler,
|
|
568
|
-
getRagConfig
|
|
474
|
+
getRagConfig,
|
|
475
|
+
resetConfigCache,
|
|
476
|
+
sseErrorFrame,
|
|
477
|
+
sseFrame,
|
|
478
|
+
sseMetaFrame,
|
|
479
|
+
sseTextFrame
|
|
569
480
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retrivora-ai/rag-engine",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
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",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"scripts": {
|
|
74
74
|
"dev": "next dev",
|
|
75
75
|
"build": "next build",
|
|
76
|
-
"build:pkg": "tsup src/index.ts src/handlers/index.ts src/server.ts --format cjs,esm --dts --clean --tsconfig tsconfig.build.json --external react,react-dom,next,mongodb,pg,openai,@anthropic-ai/sdk,@pinecone-database/pinecone,axios,lucide-react,mammoth,pdf-parse,react-markdown,remark-gfm,next-themes",
|
|
76
|
+
"build:pkg": "tsup src/index.ts src/handlers/index.ts src/server.ts --format cjs,esm --dts --clean --tsconfig tsconfig.build.json --external react,react-dom,next,mongodb,pg,openai,@anthropic-ai/sdk,@pinecone-database/pinecone,axios,lucide-react,mammoth,pdf-parse,react-markdown,remark-gfm,next-themes,langchain,@langchain/core,@langchain/openai,llamaindex",
|
|
77
77
|
"start": "next start",
|
|
78
78
|
"lint": "eslint",
|
|
79
79
|
"prepublishOnly": "npm run build:pkg"
|
|
@@ -86,25 +86,27 @@
|
|
|
86
86
|
"dependencies": {
|
|
87
87
|
"@anthropic-ai/sdk": "^0.90.0",
|
|
88
88
|
"@google/genai": "^1.50.1",
|
|
89
|
-
"@langchain/core": "^1.1.42",
|
|
90
|
-
"@langchain/openai": "^1.4.5",
|
|
91
89
|
"@pinecone-database/pinecone": "^7.2.0",
|
|
92
90
|
"axios": "^1.15.0",
|
|
93
|
-
"langchain": "^1.3.5",
|
|
94
|
-
"llamaindex": "^0.12.1",
|
|
95
91
|
"lucide-react": "^1.8.0",
|
|
96
|
-
"mammoth": "^1.8.0",
|
|
97
|
-
"mongodb": "^7.1.1",
|
|
98
92
|
"next": ">=14.0.0",
|
|
99
93
|
"next-themes": "^0.4.6",
|
|
100
94
|
"openai": "^6.34.0",
|
|
101
|
-
"pdf-parse": "^1.1.1",
|
|
102
|
-
"pg": "^8.20.0",
|
|
103
95
|
"react": ">=18.0.0",
|
|
104
96
|
"react-dom": ">=18.0.0",
|
|
105
97
|
"react-markdown": "^10.1.0",
|
|
106
98
|
"remark-gfm": "^4.0.1"
|
|
107
99
|
},
|
|
100
|
+
"optionalDependencies": {
|
|
101
|
+
"@langchain/core": "^1.1.42",
|
|
102
|
+
"@langchain/openai": "^1.4.5",
|
|
103
|
+
"langchain": "^1.3.5",
|
|
104
|
+
"llamaindex": "^0.12.1",
|
|
105
|
+
"mammoth": "^1.8.0",
|
|
106
|
+
"mongodb": "^7.1.1",
|
|
107
|
+
"pdf-parse": "^1.1.1",
|
|
108
|
+
"pg": "^8.20.0"
|
|
109
|
+
},
|
|
108
110
|
"devDependencies": {
|
|
109
111
|
"@tailwindcss/postcss": "^4",
|
|
110
112
|
"@types/node": "^20",
|
|
@@ -11,8 +11,8 @@ import {
|
|
|
11
11
|
} from 'lucide-react';
|
|
12
12
|
import { MessageBubble } from './MessageBubble';
|
|
13
13
|
import { useConfig } from './ConfigProvider';
|
|
14
|
-
import { useRagChat } from '
|
|
15
|
-
import { BORDER_RADIUS_MAP, CHAT_SUGGESTIONS } from '
|
|
14
|
+
import { useRagChat } from '../hooks/useRagChat';
|
|
15
|
+
import { BORDER_RADIUS_MAP, CHAT_SUGGESTIONS } from '../config/uiConstants';
|
|
16
16
|
|
|
17
17
|
interface ChatWindowProps {
|
|
18
18
|
/** Additional className for the wrapper div */
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import React, { createContext, useContext, ReactNode } from 'react';
|
|
11
|
-
import { UIConfig } from '
|
|
12
|
-
import { mergeDefined } from '
|
|
11
|
+
import { UIConfig } from '../config/RagConfig';
|
|
12
|
+
import { mergeDefined } from '../utils/templateUtils';
|
|
13
13
|
|
|
14
14
|
export interface ClientConfig {
|
|
15
15
|
projectId: string;
|
|
@@ -4,8 +4,8 @@ import React from 'react';
|
|
|
4
4
|
import { Bot, User, ChevronDown, ChevronRight } from 'lucide-react';
|
|
5
5
|
import ReactMarkdown from 'react-markdown';
|
|
6
6
|
import remarkGfm from 'remark-gfm';
|
|
7
|
-
import { ChatMessage } from '
|
|
8
|
-
import { VectorMatch } from '
|
|
7
|
+
import { ChatMessage } from '../llm/ILLMProvider';
|
|
8
|
+
import { VectorMatch } from '../types';
|
|
9
9
|
import { SourceCard } from './SourceCard';
|
|
10
10
|
|
|
11
11
|
interface MessageBubbleProps {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { Moon, Sun } from 'lucide-react';
|
|
5
5
|
import { useTheme } from 'next-themes';
|
|
6
|
-
import { useHydrated } from '
|
|
6
|
+
import { useHydrated } from '../hooks/useHydrated';
|
|
7
7
|
|
|
8
8
|
export function ThemeToggle() {
|
|
9
9
|
const { theme, setTheme } = useTheme();
|