@retrivora-ai/rag-engine 1.9.6 → 1.9.7
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/README.md +32 -7
- package/dist/{ILLMProvider-DNhyOYoK.d.mts → ILLMProvider-Bhk6zJOK.d.mts} +2 -6
- package/dist/{ILLMProvider-DNhyOYoK.d.ts → ILLMProvider-Bhk6zJOK.d.ts} +2 -6
- package/dist/handlers/index.d.mts +2 -2
- package/dist/handlers/index.d.ts +2 -2
- package/dist/handlers/index.js +213 -67
- package/dist/handlers/index.mjs +212 -67
- package/dist/{index-CjQdL0cX.d.ts → index-B9J_XEh0.d.ts} +6 -2
- package/dist/{index-C9v7-tWd.d.mts → index-BJ4cd-t5.d.mts} +6 -2
- package/dist/{index-Hgbwl9X4.d.ts → index-Bu7T6xgr.d.ts} +20 -3
- package/dist/{index-CHL1jdYm.d.mts → index-C3SVtPYg.d.mts} +20 -3
- package/dist/index.css +197 -10
- package/dist/index.d.mts +13 -5
- package/dist/index.d.ts +13 -5
- package/dist/index.js +39 -6
- package/dist/index.mjs +38 -7
- package/dist/server.d.mts +5 -5
- package/dist/server.d.ts +5 -5
- package/dist/server.js +310 -113
- package/dist/server.mjs +307 -112
- package/package.json +2 -4
- package/src/app/constants.tsx +183 -218
- package/src/app/layout.tsx +4 -28
- package/src/app/types.ts +17 -17
- package/src/components/ChatWidget.tsx +3 -1
- package/src/components/ChatWindow.tsx +5 -1
- package/src/components/DocViewer.tsx +71 -5
- package/src/components/Documentation.tsx +74 -11
- package/src/components/constants.tsx +275 -0
- package/src/config/RagConfig.ts +10 -10
- package/src/config/constants.ts +1 -0
- package/src/core/ConfigResolver.ts +24 -25
- package/src/core/Pipeline.ts +2 -1
- package/src/core/ProviderRegistry.ts +5 -5
- package/src/core/Retrivora.ts +46 -6
- package/src/core/VectorPlugin.ts +62 -8
- package/src/exceptions/index.ts +52 -0
- package/src/handlers/index.ts +71 -0
- package/src/hooks/useRagChat.ts +4 -1
- package/src/index.ts +2 -0
- package/src/llm/LLMFactory.ts +6 -5
- package/src/server.ts +16 -13
- package/src/types/chat.ts +2 -0
- package/src/types/props.ts +38 -1
package/dist/server.js
CHANGED
|
@@ -10,9 +10,6 @@ var __getProtoOf = Object.getPrototypeOf;
|
|
|
10
10
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
11
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
12
12
|
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
|
|
13
|
-
var __typeError = (msg) => {
|
|
14
|
-
throw TypeError(msg);
|
|
15
|
-
};
|
|
16
13
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
17
14
|
var __spreadValues = (a, b) => {
|
|
18
15
|
for (var prop in b || (b = {}))
|
|
@@ -77,34 +74,6 @@ var __asyncGenerator = (__this, __arguments, generator) => {
|
|
|
77
74
|
}, method = (k, call, wait, clear) => it[k] = (x) => (call = new Promise((yes, no, run) => (run = () => resume(k, x, yes, no), q ? q.then(run) : run())), clear = () => q === wait && (q = 0), q = wait = call.then(clear, clear), call), q, it = {};
|
|
78
75
|
return generator = generator.apply(__this, __arguments), it[__knownSymbol("asyncIterator")] = () => it, method("next"), method("throw"), method("return"), it;
|
|
79
76
|
};
|
|
80
|
-
var __yieldStar = (value) => {
|
|
81
|
-
var obj = value[__knownSymbol("asyncIterator")], isAwait = false, method, it = {};
|
|
82
|
-
if (obj == null) {
|
|
83
|
-
obj = value[__knownSymbol("iterator")]();
|
|
84
|
-
method = (k) => it[k] = (x) => obj[k](x);
|
|
85
|
-
} else {
|
|
86
|
-
obj = obj.call(value);
|
|
87
|
-
method = (k) => it[k] = (v) => {
|
|
88
|
-
if (isAwait) {
|
|
89
|
-
isAwait = false;
|
|
90
|
-
if (k === "throw") throw v;
|
|
91
|
-
return v;
|
|
92
|
-
}
|
|
93
|
-
isAwait = true;
|
|
94
|
-
return {
|
|
95
|
-
done: false,
|
|
96
|
-
value: new __await(new Promise((resolve) => {
|
|
97
|
-
var x = obj[k](v);
|
|
98
|
-
if (!(x instanceof Object)) __typeError("Object expected");
|
|
99
|
-
resolve(x);
|
|
100
|
-
}), 1)
|
|
101
|
-
};
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
return it[__knownSymbol("iterator")] = () => it, method("next"), "throw" in obj ? method("throw") : it.throw = (x) => {
|
|
105
|
-
throw x;
|
|
106
|
-
}, "return" in obj && method("return"), it;
|
|
107
|
-
};
|
|
108
77
|
var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it);
|
|
109
78
|
|
|
110
79
|
// src/utils/templateUtils.ts
|
|
@@ -2144,13 +2113,15 @@ __export(server_exports, {
|
|
|
2144
2113
|
createFromPreset: () => createFromPreset,
|
|
2145
2114
|
createHealthHandler: () => createHealthHandler,
|
|
2146
2115
|
createIngestHandler: () => createIngestHandler,
|
|
2116
|
+
createRagHandler: () => createRagHandler,
|
|
2147
2117
|
createStreamHandler: () => createStreamHandler,
|
|
2148
2118
|
createUploadHandler: () => createUploadHandler,
|
|
2149
2119
|
getRagConfig: () => getRagConfig,
|
|
2150
2120
|
sseErrorFrame: () => sseErrorFrame,
|
|
2151
2121
|
sseFrame: () => sseFrame,
|
|
2152
2122
|
sseMetaFrame: () => sseMetaFrame,
|
|
2153
|
-
sseTextFrame: () => sseTextFrame
|
|
2123
|
+
sseTextFrame: () => sseTextFrame,
|
|
2124
|
+
wrapError: () => wrapError
|
|
2154
2125
|
});
|
|
2155
2126
|
module.exports = __toCommonJS(server_exports);
|
|
2156
2127
|
|
|
@@ -2375,46 +2346,6 @@ function getEnvConfig(env = process.env, base) {
|
|
|
2375
2346
|
} : {});
|
|
2376
2347
|
}
|
|
2377
2348
|
|
|
2378
|
-
// src/exceptions/index.ts
|
|
2379
|
-
var RetrivoraError = class extends Error {
|
|
2380
|
-
constructor(message, code, details) {
|
|
2381
|
-
super(message);
|
|
2382
|
-
this.name = new.target.name;
|
|
2383
|
-
this.code = code;
|
|
2384
|
-
this.details = details;
|
|
2385
|
-
}
|
|
2386
|
-
};
|
|
2387
|
-
var ProviderNotFoundException = class extends RetrivoraError {
|
|
2388
|
-
constructor(providerType, provider, details) {
|
|
2389
|
-
super(`Unsupported ${providerType} provider: ${provider}`, "PROVIDER_NOT_FOUND", details);
|
|
2390
|
-
}
|
|
2391
|
-
};
|
|
2392
|
-
var EmbeddingFailedException = class extends RetrivoraError {
|
|
2393
|
-
constructor(message = "Embedding generation failed", details) {
|
|
2394
|
-
super(message, "EMBEDDING_FAILED", details);
|
|
2395
|
-
}
|
|
2396
|
-
};
|
|
2397
|
-
var RetrievalException = class extends RetrivoraError {
|
|
2398
|
-
constructor(message = "Retrieval failed", details) {
|
|
2399
|
-
super(message, "RETRIEVAL_FAILED", details);
|
|
2400
|
-
}
|
|
2401
|
-
};
|
|
2402
|
-
var RateLimitException = class extends RetrivoraError {
|
|
2403
|
-
constructor(message = "Provider rate limit exceeded", details) {
|
|
2404
|
-
super(message, "RATE_LIMITED", details);
|
|
2405
|
-
}
|
|
2406
|
-
};
|
|
2407
|
-
var ConfigurationException = class extends RetrivoraError {
|
|
2408
|
-
constructor(message, details) {
|
|
2409
|
-
super(message, "CONFIGURATION_ERROR", details);
|
|
2410
|
-
}
|
|
2411
|
-
};
|
|
2412
|
-
var AuthenticationException = class extends RetrivoraError {
|
|
2413
|
-
constructor(message = "Provider authentication failed", details) {
|
|
2414
|
-
super(message, "AUTHENTICATION_ERROR", details);
|
|
2415
|
-
}
|
|
2416
|
-
};
|
|
2417
|
-
|
|
2418
2349
|
// src/core/ConfigResolver.ts
|
|
2419
2350
|
var ConfigResolver = class {
|
|
2420
2351
|
/**
|
|
@@ -2460,13 +2391,13 @@ var ConfigResolver = class {
|
|
|
2460
2391
|
*/
|
|
2461
2392
|
static validate(config) {
|
|
2462
2393
|
if (!config.projectId) {
|
|
2463
|
-
throw new
|
|
2394
|
+
throw new Error("[ConfigResolver] projectId is required");
|
|
2464
2395
|
}
|
|
2465
2396
|
if (!config.vectorDb.provider) {
|
|
2466
|
-
throw new
|
|
2397
|
+
throw new Error("[ConfigResolver] vectorDb.provider is required");
|
|
2467
2398
|
}
|
|
2468
2399
|
if (!config.llm.provider) {
|
|
2469
|
-
throw new
|
|
2400
|
+
throw new Error("[ConfigResolver] llm.provider is required");
|
|
2470
2401
|
}
|
|
2471
2402
|
}
|
|
2472
2403
|
static mergeRetrievalWorkflow(rag, retrieval, workflow) {
|
|
@@ -3546,6 +3477,78 @@ ${context != null ? context : "None"}` },
|
|
|
3546
3477
|
}
|
|
3547
3478
|
};
|
|
3548
3479
|
|
|
3480
|
+
// src/exceptions/index.ts
|
|
3481
|
+
var RetrivoraError = class extends Error {
|
|
3482
|
+
constructor(message, code, details) {
|
|
3483
|
+
super(message);
|
|
3484
|
+
this.name = new.target.name;
|
|
3485
|
+
this.code = code;
|
|
3486
|
+
this.details = details;
|
|
3487
|
+
}
|
|
3488
|
+
};
|
|
3489
|
+
var ProviderNotFoundException = class extends RetrivoraError {
|
|
3490
|
+
constructor(providerType, provider, details) {
|
|
3491
|
+
super(`Unsupported ${providerType} provider: ${provider}`, "PROVIDER_NOT_FOUND", details);
|
|
3492
|
+
}
|
|
3493
|
+
};
|
|
3494
|
+
var EmbeddingFailedException = class extends RetrivoraError {
|
|
3495
|
+
constructor(message = "Embedding generation failed", details) {
|
|
3496
|
+
super(message, "EMBEDDING_FAILED", details);
|
|
3497
|
+
}
|
|
3498
|
+
};
|
|
3499
|
+
var RetrievalException = class extends RetrivoraError {
|
|
3500
|
+
constructor(message = "Retrieval failed", details) {
|
|
3501
|
+
super(message, "RETRIEVAL_FAILED", details);
|
|
3502
|
+
}
|
|
3503
|
+
};
|
|
3504
|
+
var RateLimitException = class extends RetrivoraError {
|
|
3505
|
+
constructor(message = "Provider rate limit exceeded", details) {
|
|
3506
|
+
super(message, "RATE_LIMITED", details);
|
|
3507
|
+
}
|
|
3508
|
+
};
|
|
3509
|
+
var ConfigurationException = class extends RetrivoraError {
|
|
3510
|
+
constructor(message, details) {
|
|
3511
|
+
super(message, "CONFIGURATION_ERROR", details);
|
|
3512
|
+
}
|
|
3513
|
+
};
|
|
3514
|
+
var AuthenticationException = class extends RetrivoraError {
|
|
3515
|
+
constructor(message = "Provider authentication failed", details) {
|
|
3516
|
+
super(message, "AUTHENTICATION_ERROR", details);
|
|
3517
|
+
}
|
|
3518
|
+
};
|
|
3519
|
+
function wrapError(err, defaultCode, defaultMessage) {
|
|
3520
|
+
var _a;
|
|
3521
|
+
if (err instanceof RetrivoraError) {
|
|
3522
|
+
return err;
|
|
3523
|
+
}
|
|
3524
|
+
const error = err;
|
|
3525
|
+
const message = (error == null ? void 0 : error.message) || defaultMessage || String(err);
|
|
3526
|
+
const status = (error == null ? void 0 : error.status) || (error == null ? void 0 : error.statusCode) || ((_a = error == null ? void 0 : error.response) == null ? void 0 : _a.status);
|
|
3527
|
+
const code = error == null ? void 0 : error.code;
|
|
3528
|
+
if (status === 429 || /rate[- ]?limit/i.test(message) || code === "RATE_LIMIT_EXCEEDED") {
|
|
3529
|
+
return new RateLimitException(message, err);
|
|
3530
|
+
}
|
|
3531
|
+
if (status === 401 || status === 403 || /unauthorized|auth|api[- ]?key/i.test(message) || code === "INVALID_API_KEY") {
|
|
3532
|
+
return new AuthenticationException(message, err);
|
|
3533
|
+
}
|
|
3534
|
+
switch (defaultCode) {
|
|
3535
|
+
case "PROVIDER_NOT_FOUND":
|
|
3536
|
+
return new ProviderNotFoundException("provider", message, err);
|
|
3537
|
+
case "EMBEDDING_FAILED":
|
|
3538
|
+
return new EmbeddingFailedException(message, err);
|
|
3539
|
+
case "RETRIEVAL_FAILED":
|
|
3540
|
+
return new RetrievalException(message, err);
|
|
3541
|
+
case "RATE_LIMITED":
|
|
3542
|
+
return new RateLimitException(message, err);
|
|
3543
|
+
case "CONFIGURATION_ERROR":
|
|
3544
|
+
return new ConfigurationException(message, err);
|
|
3545
|
+
case "AUTHENTICATION_ERROR":
|
|
3546
|
+
return new AuthenticationException(message, err);
|
|
3547
|
+
default:
|
|
3548
|
+
return new RetrivoraError(message, defaultCode, err);
|
|
3549
|
+
}
|
|
3550
|
+
}
|
|
3551
|
+
|
|
3549
3552
|
// src/llm/LLMFactory.ts
|
|
3550
3553
|
var customProviders = /* @__PURE__ */ new Map();
|
|
3551
3554
|
var LLMFactory = class _LLMFactory {
|
|
@@ -3591,7 +3594,7 @@ var LLMFactory = class _LLMFactory {
|
|
|
3591
3594
|
];
|
|
3592
3595
|
}
|
|
3593
3596
|
static create(llmConfig, embeddingConfig) {
|
|
3594
|
-
var _a, _b;
|
|
3597
|
+
var _a, _b, _c;
|
|
3595
3598
|
switch (llmConfig.provider) {
|
|
3596
3599
|
case "openai":
|
|
3597
3600
|
return new OpenAIProvider(llmConfig, embeddingConfig);
|
|
@@ -3615,9 +3618,12 @@ var LLMFactory = class _LLMFactory {
|
|
|
3615
3618
|
return new UniversalLLMAdapter(llmConfig);
|
|
3616
3619
|
}
|
|
3617
3620
|
throw new ProviderNotFoundException(
|
|
3618
|
-
"
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
+
"llm",
|
|
3622
|
+
(_c = llmConfig.provider) != null ? _c : "undefined",
|
|
3623
|
+
{
|
|
3624
|
+
message: `Unknown provider "${llmConfig.provider}". Register a custom provider with LLMFactory.register().`,
|
|
3625
|
+
available: _LLMFactory.listProviders()
|
|
3626
|
+
}
|
|
3621
3627
|
);
|
|
3622
3628
|
}
|
|
3623
3629
|
}
|
|
@@ -6552,7 +6558,7 @@ var Pipeline = class {
|
|
|
6552
6558
|
embedBatchOptions
|
|
6553
6559
|
);
|
|
6554
6560
|
if (vectors.length !== chunks.length) {
|
|
6555
|
-
throw new
|
|
6561
|
+
throw new EmbeddingFailedException(
|
|
6556
6562
|
`[Pipeline] Embedding mismatch: got ${vectors.length} vectors for ${chunks.length} chunks. Check embedding provider logs for individual chunk failures.`
|
|
6557
6563
|
);
|
|
6558
6564
|
}
|
|
@@ -7163,6 +7169,82 @@ Suggestions:`;
|
|
|
7163
7169
|
}
|
|
7164
7170
|
};
|
|
7165
7171
|
|
|
7172
|
+
// src/core/Retrivora.ts
|
|
7173
|
+
var Retrivora = class {
|
|
7174
|
+
constructor(config) {
|
|
7175
|
+
this.config = ConfigResolver.resolveUniversal(config);
|
|
7176
|
+
this.pipeline = new Pipeline(this.config);
|
|
7177
|
+
}
|
|
7178
|
+
async initialize() {
|
|
7179
|
+
try {
|
|
7180
|
+
await ConfigValidator.validateAndThrow(this.config);
|
|
7181
|
+
} catch (err) {
|
|
7182
|
+
throw wrapError(err, "CONFIGURATION_ERROR");
|
|
7183
|
+
}
|
|
7184
|
+
try {
|
|
7185
|
+
await this.pipeline.initialize();
|
|
7186
|
+
} catch (err) {
|
|
7187
|
+
throw wrapError(err, "AUTHENTICATION_ERROR");
|
|
7188
|
+
}
|
|
7189
|
+
}
|
|
7190
|
+
async ingest(documents, namespace) {
|
|
7191
|
+
try {
|
|
7192
|
+
return await this.pipeline.ingest(documents, namespace);
|
|
7193
|
+
} catch (err) {
|
|
7194
|
+
const msg = String(err);
|
|
7195
|
+
let defaultCode = "RETRIEVAL_FAILED";
|
|
7196
|
+
if (msg.includes("Embed") || msg.includes("embed")) {
|
|
7197
|
+
defaultCode = "EMBEDDING_FAILED";
|
|
7198
|
+
}
|
|
7199
|
+
throw wrapError(err, defaultCode);
|
|
7200
|
+
}
|
|
7201
|
+
}
|
|
7202
|
+
async ask(question, history = [], namespace) {
|
|
7203
|
+
try {
|
|
7204
|
+
return await this.pipeline.ask(question, history, namespace);
|
|
7205
|
+
} catch (err) {
|
|
7206
|
+
const msg = String(err);
|
|
7207
|
+
let defaultCode = "RETRIEVAL_FAILED";
|
|
7208
|
+
if (msg.includes("Embed") || msg.includes("embed")) {
|
|
7209
|
+
defaultCode = "EMBEDDING_FAILED";
|
|
7210
|
+
}
|
|
7211
|
+
throw wrapError(err, defaultCode);
|
|
7212
|
+
}
|
|
7213
|
+
}
|
|
7214
|
+
askStream(_0) {
|
|
7215
|
+
return __asyncGenerator(this, arguments, function* (question, history = [], namespace) {
|
|
7216
|
+
try {
|
|
7217
|
+
const stream = this.pipeline.askStream(question, history, namespace);
|
|
7218
|
+
try {
|
|
7219
|
+
for (var iter = __forAwait(stream), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
|
|
7220
|
+
const chunk = temp.value;
|
|
7221
|
+
yield chunk;
|
|
7222
|
+
}
|
|
7223
|
+
} catch (temp) {
|
|
7224
|
+
error = [temp];
|
|
7225
|
+
} finally {
|
|
7226
|
+
try {
|
|
7227
|
+
more && (temp = iter.return) && (yield new __await(temp.call(iter)));
|
|
7228
|
+
} finally {
|
|
7229
|
+
if (error)
|
|
7230
|
+
throw error[0];
|
|
7231
|
+
}
|
|
7232
|
+
}
|
|
7233
|
+
} catch (err) {
|
|
7234
|
+
const msg = String(err);
|
|
7235
|
+
let defaultCode = "RETRIEVAL_FAILED";
|
|
7236
|
+
if (msg.includes("Embed") || msg.includes("embed")) {
|
|
7237
|
+
defaultCode = "EMBEDDING_FAILED";
|
|
7238
|
+
}
|
|
7239
|
+
throw wrapError(err, defaultCode);
|
|
7240
|
+
}
|
|
7241
|
+
});
|
|
7242
|
+
}
|
|
7243
|
+
getPipeline() {
|
|
7244
|
+
return this.pipeline;
|
|
7245
|
+
}
|
|
7246
|
+
};
|
|
7247
|
+
|
|
7166
7248
|
// src/core/ProviderHealthCheck.ts
|
|
7167
7249
|
var ProviderHealthCheck = class {
|
|
7168
7250
|
/**
|
|
@@ -7271,6 +7353,8 @@ var VectorPlugin = class {
|
|
|
7271
7353
|
constructor(hostConfig) {
|
|
7272
7354
|
this.config = ConfigResolver.resolve(hostConfig);
|
|
7273
7355
|
this.validationPromise = ConfigValidator.validateAndThrow(this.config);
|
|
7356
|
+
this.validationPromise.catch(() => {
|
|
7357
|
+
});
|
|
7274
7358
|
this.pipeline = new Pipeline(this.config);
|
|
7275
7359
|
}
|
|
7276
7360
|
/**
|
|
@@ -7304,55 +7388,93 @@ var VectorPlugin = class {
|
|
|
7304
7388
|
* Run a chat query.
|
|
7305
7389
|
*/
|
|
7306
7390
|
async chat(message, history = [], namespace) {
|
|
7307
|
-
|
|
7308
|
-
|
|
7391
|
+
try {
|
|
7392
|
+
await this.validationPromise;
|
|
7393
|
+
} catch (err) {
|
|
7394
|
+
throw wrapError(err, "CONFIGURATION_ERROR");
|
|
7395
|
+
}
|
|
7396
|
+
try {
|
|
7397
|
+
return await this.pipeline.ask(message, history, namespace);
|
|
7398
|
+
} catch (err) {
|
|
7399
|
+
const msg = String(err);
|
|
7400
|
+
let defaultCode = "RETRIEVAL_FAILED";
|
|
7401
|
+
if (msg.includes("Embed") || msg.includes("embed")) {
|
|
7402
|
+
defaultCode = "EMBEDDING_FAILED";
|
|
7403
|
+
}
|
|
7404
|
+
throw wrapError(err, defaultCode);
|
|
7405
|
+
}
|
|
7309
7406
|
}
|
|
7310
7407
|
/**
|
|
7311
7408
|
* Run a streaming chat query.
|
|
7312
7409
|
*/
|
|
7313
7410
|
chatStream(_0) {
|
|
7314
7411
|
return __asyncGenerator(this, arguments, function* (message, history = [], namespace) {
|
|
7315
|
-
|
|
7316
|
-
|
|
7412
|
+
try {
|
|
7413
|
+
yield new __await(this.validationPromise);
|
|
7414
|
+
} catch (err) {
|
|
7415
|
+
throw wrapError(err, "CONFIGURATION_ERROR");
|
|
7416
|
+
}
|
|
7417
|
+
try {
|
|
7418
|
+
const stream = this.pipeline.askStream(message, history, namespace);
|
|
7419
|
+
try {
|
|
7420
|
+
for (var iter = __forAwait(stream), more, temp, error; more = !(temp = yield new __await(iter.next())).done; more = false) {
|
|
7421
|
+
const chunk = temp.value;
|
|
7422
|
+
yield chunk;
|
|
7423
|
+
}
|
|
7424
|
+
} catch (temp) {
|
|
7425
|
+
error = [temp];
|
|
7426
|
+
} finally {
|
|
7427
|
+
try {
|
|
7428
|
+
more && (temp = iter.return) && (yield new __await(temp.call(iter)));
|
|
7429
|
+
} finally {
|
|
7430
|
+
if (error)
|
|
7431
|
+
throw error[0];
|
|
7432
|
+
}
|
|
7433
|
+
}
|
|
7434
|
+
} catch (err) {
|
|
7435
|
+
const msg = String(err);
|
|
7436
|
+
let defaultCode = "RETRIEVAL_FAILED";
|
|
7437
|
+
if (msg.includes("Embed") || msg.includes("embed")) {
|
|
7438
|
+
defaultCode = "EMBEDDING_FAILED";
|
|
7439
|
+
}
|
|
7440
|
+
throw wrapError(err, defaultCode);
|
|
7441
|
+
}
|
|
7317
7442
|
});
|
|
7318
7443
|
}
|
|
7319
7444
|
/**
|
|
7320
7445
|
* Ingest documents into the vector database.
|
|
7321
7446
|
*/
|
|
7322
7447
|
async ingest(documents, namespace) {
|
|
7323
|
-
|
|
7324
|
-
|
|
7448
|
+
try {
|
|
7449
|
+
await this.validationPromise;
|
|
7450
|
+
} catch (err) {
|
|
7451
|
+
throw wrapError(err, "CONFIGURATION_ERROR");
|
|
7452
|
+
}
|
|
7453
|
+
try {
|
|
7454
|
+
return await this.pipeline.ingest(documents, namespace);
|
|
7455
|
+
} catch (err) {
|
|
7456
|
+
const msg = String(err);
|
|
7457
|
+
let defaultCode = "RETRIEVAL_FAILED";
|
|
7458
|
+
if (msg.includes("Embed") || msg.includes("embed")) {
|
|
7459
|
+
defaultCode = "EMBEDDING_FAILED";
|
|
7460
|
+
}
|
|
7461
|
+
throw wrapError(err, defaultCode);
|
|
7462
|
+
}
|
|
7325
7463
|
}
|
|
7326
7464
|
/**
|
|
7327
7465
|
* Get auto-suggestions based on a query prefix.
|
|
7328
7466
|
*/
|
|
7329
7467
|
async getSuggestions(query, namespace) {
|
|
7330
|
-
|
|
7331
|
-
|
|
7332
|
-
|
|
7333
|
-
|
|
7334
|
-
|
|
7335
|
-
|
|
7336
|
-
|
|
7337
|
-
|
|
7338
|
-
|
|
7339
|
-
|
|
7340
|
-
}
|
|
7341
|
-
async initialize() {
|
|
7342
|
-
await ConfigValidator.validateAndThrow(this.config);
|
|
7343
|
-
await this.pipeline.initialize();
|
|
7344
|
-
}
|
|
7345
|
-
async ingest(documents, namespace) {
|
|
7346
|
-
return this.pipeline.ingest(documents, namespace);
|
|
7347
|
-
}
|
|
7348
|
-
async ask(question, history = [], namespace) {
|
|
7349
|
-
return this.pipeline.ask(question, history, namespace);
|
|
7350
|
-
}
|
|
7351
|
-
askStream(question, history = [], namespace) {
|
|
7352
|
-
return this.pipeline.askStream(question, history, namespace);
|
|
7353
|
-
}
|
|
7354
|
-
getPipeline() {
|
|
7355
|
-
return this.pipeline;
|
|
7468
|
+
try {
|
|
7469
|
+
await this.validationPromise;
|
|
7470
|
+
} catch (err) {
|
|
7471
|
+
throw wrapError(err, "CONFIGURATION_ERROR");
|
|
7472
|
+
}
|
|
7473
|
+
try {
|
|
7474
|
+
return await this.pipeline.getSuggestions(query, namespace);
|
|
7475
|
+
} catch (err) {
|
|
7476
|
+
throw wrapError(err, "RETRIEVAL_FAILED");
|
|
7477
|
+
}
|
|
7356
7478
|
}
|
|
7357
7479
|
};
|
|
7358
7480
|
|
|
@@ -7899,6 +8021,79 @@ function createUploadHandler(configOrPlugin) {
|
|
|
7899
8021
|
}
|
|
7900
8022
|
};
|
|
7901
8023
|
}
|
|
8024
|
+
function createSuggestionsHandler(configOrPlugin) {
|
|
8025
|
+
const plugin = configOrPlugin instanceof VectorPlugin ? configOrPlugin : new VectorPlugin(configOrPlugin);
|
|
8026
|
+
return async function POST(req) {
|
|
8027
|
+
try {
|
|
8028
|
+
const body = await req.json();
|
|
8029
|
+
const { query, namespace } = body;
|
|
8030
|
+
if (typeof query !== "string") {
|
|
8031
|
+
return import_server.NextResponse.json({ error: "query is required" }, { status: 400 });
|
|
8032
|
+
}
|
|
8033
|
+
const suggestions = await plugin.getSuggestions(query, namespace);
|
|
8034
|
+
return import_server.NextResponse.json({ suggestions });
|
|
8035
|
+
} catch (err) {
|
|
8036
|
+
const message = err instanceof Error ? err.message : "Internal server error";
|
|
8037
|
+
return import_server.NextResponse.json({ error: message }, { status: 500 });
|
|
8038
|
+
}
|
|
8039
|
+
};
|
|
8040
|
+
}
|
|
8041
|
+
function createRagHandler(configOrPlugin) {
|
|
8042
|
+
const plugin = configOrPlugin instanceof VectorPlugin ? configOrPlugin : new VectorPlugin(configOrPlugin);
|
|
8043
|
+
const chatHandler = createChatHandler(plugin);
|
|
8044
|
+
const streamHandler = createStreamHandler(plugin);
|
|
8045
|
+
const uploadHandler = createUploadHandler(plugin);
|
|
8046
|
+
const healthHandler = createHealthHandler(plugin);
|
|
8047
|
+
const suggestionsHandler = createSuggestionsHandler(plugin);
|
|
8048
|
+
async function routePostRequest(req, segment) {
|
|
8049
|
+
switch (segment) {
|
|
8050
|
+
case "chat":
|
|
8051
|
+
return streamHandler(req);
|
|
8052
|
+
case "chat-sync":
|
|
8053
|
+
return chatHandler(req);
|
|
8054
|
+
case "upload":
|
|
8055
|
+
return uploadHandler(req);
|
|
8056
|
+
case "suggestions":
|
|
8057
|
+
return suggestionsHandler(req);
|
|
8058
|
+
case "health":
|
|
8059
|
+
return healthHandler();
|
|
8060
|
+
default:
|
|
8061
|
+
return import_server.NextResponse.json({ error: `Not Found: POST segment "${segment}" not supported.` }, { status: 404 });
|
|
8062
|
+
}
|
|
8063
|
+
}
|
|
8064
|
+
async function routeGetRequest(req, segment) {
|
|
8065
|
+
if (segment === "health") {
|
|
8066
|
+
return healthHandler();
|
|
8067
|
+
}
|
|
8068
|
+
return import_server.NextResponse.json({ error: `Method Not Allowed: GET is only supported for "health" segment.` }, { status: 405 });
|
|
8069
|
+
}
|
|
8070
|
+
async function getSegment(context) {
|
|
8071
|
+
var _a;
|
|
8072
|
+
const resolvedParams = typeof ((_a = context == null ? void 0 : context.params) == null ? void 0 : _a.then) === "function" ? await context.params : context == null ? void 0 : context.params;
|
|
8073
|
+
const segments = (resolvedParams == null ? void 0 : resolvedParams.retrivora) || [];
|
|
8074
|
+
return segments[0] || "chat";
|
|
8075
|
+
}
|
|
8076
|
+
return {
|
|
8077
|
+
GET: async (req, context) => {
|
|
8078
|
+
try {
|
|
8079
|
+
const segment = await getSegment(context);
|
|
8080
|
+
return await routeGetRequest(req, segment);
|
|
8081
|
+
} catch (err) {
|
|
8082
|
+
const msg = err instanceof Error ? err.message : "GET Routing failed";
|
|
8083
|
+
return import_server.NextResponse.json({ error: msg }, { status: 500 });
|
|
8084
|
+
}
|
|
8085
|
+
},
|
|
8086
|
+
POST: async (req, context) => {
|
|
8087
|
+
try {
|
|
8088
|
+
const segment = await getSegment(context);
|
|
8089
|
+
return await routePostRequest(req, segment);
|
|
8090
|
+
} catch (err) {
|
|
8091
|
+
const msg = err instanceof Error ? err.message : "POST Routing failed";
|
|
8092
|
+
return import_server.NextResponse.json({ error: msg }, { status: 500 });
|
|
8093
|
+
}
|
|
8094
|
+
}
|
|
8095
|
+
};
|
|
8096
|
+
}
|
|
7902
8097
|
// Annotate the CommonJS export names for ESM import in node:
|
|
7903
8098
|
0 && (module.exports = {
|
|
7904
8099
|
AnthropicProvider,
|
|
@@ -7944,11 +8139,13 @@ function createUploadHandler(configOrPlugin) {
|
|
|
7944
8139
|
createFromPreset,
|
|
7945
8140
|
createHealthHandler,
|
|
7946
8141
|
createIngestHandler,
|
|
8142
|
+
createRagHandler,
|
|
7947
8143
|
createStreamHandler,
|
|
7948
8144
|
createUploadHandler,
|
|
7949
8145
|
getRagConfig,
|
|
7950
8146
|
sseErrorFrame,
|
|
7951
8147
|
sseFrame,
|
|
7952
8148
|
sseMetaFrame,
|
|
7953
|
-
sseTextFrame
|
|
8149
|
+
sseTextFrame,
|
|
8150
|
+
wrapError
|
|
7954
8151
|
});
|