@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.
Files changed (44) hide show
  1. package/README.md +32 -7
  2. package/dist/{ILLMProvider-DNhyOYoK.d.mts → ILLMProvider-Bhk6zJOK.d.mts} +2 -6
  3. package/dist/{ILLMProvider-DNhyOYoK.d.ts → ILLMProvider-Bhk6zJOK.d.ts} +2 -6
  4. package/dist/handlers/index.d.mts +2 -2
  5. package/dist/handlers/index.d.ts +2 -2
  6. package/dist/handlers/index.js +213 -67
  7. package/dist/handlers/index.mjs +212 -67
  8. package/dist/{index-CjQdL0cX.d.ts → index-B9J_XEh0.d.ts} +6 -2
  9. package/dist/{index-C9v7-tWd.d.mts → index-BJ4cd-t5.d.mts} +6 -2
  10. package/dist/{index-Hgbwl9X4.d.ts → index-Bu7T6xgr.d.ts} +20 -3
  11. package/dist/{index-CHL1jdYm.d.mts → index-C3SVtPYg.d.mts} +20 -3
  12. package/dist/index.css +197 -10
  13. package/dist/index.d.mts +13 -5
  14. package/dist/index.d.ts +13 -5
  15. package/dist/index.js +39 -6
  16. package/dist/index.mjs +38 -7
  17. package/dist/server.d.mts +5 -5
  18. package/dist/server.d.ts +5 -5
  19. package/dist/server.js +310 -113
  20. package/dist/server.mjs +307 -112
  21. package/package.json +2 -4
  22. package/src/app/constants.tsx +183 -218
  23. package/src/app/layout.tsx +4 -28
  24. package/src/app/types.ts +17 -17
  25. package/src/components/ChatWidget.tsx +3 -1
  26. package/src/components/ChatWindow.tsx +5 -1
  27. package/src/components/DocViewer.tsx +71 -5
  28. package/src/components/Documentation.tsx +74 -11
  29. package/src/components/constants.tsx +275 -0
  30. package/src/config/RagConfig.ts +10 -10
  31. package/src/config/constants.ts +1 -0
  32. package/src/core/ConfigResolver.ts +24 -25
  33. package/src/core/Pipeline.ts +2 -1
  34. package/src/core/ProviderRegistry.ts +5 -5
  35. package/src/core/Retrivora.ts +46 -6
  36. package/src/core/VectorPlugin.ts +62 -8
  37. package/src/exceptions/index.ts +52 -0
  38. package/src/handlers/index.ts +71 -0
  39. package/src/hooks/useRagChat.ts +4 -1
  40. package/src/index.ts +2 -0
  41. package/src/llm/LLMFactory.ts +6 -5
  42. package/src/server.ts +16 -13
  43. package/src/types/chat.ts +2 -0
  44. 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 ConfigurationException("[ConfigResolver] projectId is required");
2394
+ throw new Error("[ConfigResolver] projectId is required");
2464
2395
  }
2465
2396
  if (!config.vectorDb.provider) {
2466
- throw new ConfigurationException("[ConfigResolver] vectorDb.provider is required");
2397
+ throw new Error("[ConfigResolver] vectorDb.provider is required");
2467
2398
  }
2468
2399
  if (!config.llm.provider) {
2469
- throw new ConfigurationException("[ConfigResolver] llm.provider is required");
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
- "LLM",
3619
- String(llmConfig.provider),
3620
- `[LLMFactory] Unknown provider "${llmConfig.provider}". Built-in providers: ${_LLMFactory.listProviders().join(", ")}. Register a custom provider with LLMFactory.register().`
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 Error(
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
- await this.validationPromise;
7308
- return this.pipeline.ask(message, history, namespace);
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
- yield new __await(this.validationPromise);
7316
- yield* __yieldStar(this.pipeline.askStream(message, history, namespace));
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
- await this.validationPromise;
7324
- return this.pipeline.ingest(documents, namespace);
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
- await this.validationPromise;
7331
- return this.pipeline.getSuggestions(query, namespace);
7332
- }
7333
- };
7334
-
7335
- // src/core/Retrivora.ts
7336
- var Retrivora = class {
7337
- constructor(config) {
7338
- this.config = ConfigResolver.resolveUniversal(config);
7339
- this.pipeline = new Pipeline(this.config);
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
  });