@absolutejs/rag 0.0.10 → 0.0.12

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.
@@ -13262,6 +13262,7 @@ var validateRAGEmbeddingDimensions = (vector, expectedDimensions, context) => {
13262
13262
  import { readdir, readFile as readFile2 } from "fs/promises";
13263
13263
  import { basename, extname, join, relative, resolve } from "path";
13264
13264
  import { gunzipSync, inflateRawSync } from "zlib";
13265
+ var h2IfHttps = (url) => url.startsWith("https://") ? { protocol: "http2" } : {};
13265
13266
  var DEFAULT_MAX_CHUNK_LENGTH = 900;
13266
13267
  var DEFAULT_CHUNK_OVERLAP = 120;
13267
13268
  var DEFAULT_MIN_CHUNK_LENGTH = 80;
@@ -19440,7 +19441,7 @@ var loadRAGDocumentFromURL = async (input) => {
19440
19441
  if (!url) {
19441
19442
  throw new Error("RAG URL is required");
19442
19443
  }
19443
- const response = await fetch(url);
19444
+ const response = await fetch(url, h2IfHttps(url));
19444
19445
  if (!response.ok) {
19445
19446
  throw new Error(`Failed to fetch RAG URL ${url}: ${response.status} ${response.statusText}`);
19446
19447
  }
@@ -19488,7 +19489,7 @@ var loadRAGDocumentsFromURLs = async (input) => {
19488
19489
  if (!url) {
19489
19490
  throw new Error("RAG URL is required");
19490
19491
  }
19491
- const response = await fetch(url);
19492
+ const response = await fetch(url, h2IfHttps(url));
19492
19493
  if (!response.ok) {
19493
19494
  throw new Error(`Failed to fetch RAG URL ${url}: ${response.status} ${response.statusText}`);
19494
19495
  }
@@ -21713,6 +21714,7 @@ var MAX_INGEST_JOBS = 20;
21713
21714
  var MAX_ADMIN_ACTIONS = 20;
21714
21715
  var MAX_ADMIN_JOBS = 20;
21715
21716
  var DEFAULT_STALE_AFTER_MS = 1000 * 60 * 60 * 24 * 7;
21717
+ var WEBSOCKET_OPEN = 1;
21716
21718
  var REQUEST_USER_SUB_HEADER = "x-absolutejs-user-sub";
21717
21719
  var HTML_HEADERS = { "Content-Type": "text/html; charset=utf-8" };
21718
21720
  var defaultParseProvider = (content) => {
@@ -22156,9 +22158,23 @@ var persistSearchTraceIfConfigured = async (input) => {
22156
22158
  await input.onPrune?.(input.retention);
22157
22159
  }
22158
22160
  };
22159
- var buildRAGContextFromQuery = async (config, topK, scoreThreshold, queryText, ragModel, embedding, embeddingModel) => {
22161
+ var sendWebSocketError = (ws, error, conversationId, messageId) => {
22162
+ if (typeof ws.readyState === "number" && ws.readyState !== WEBSOCKET_OPEN) {
22163
+ return;
22164
+ }
22165
+ try {
22166
+ ws.send(JSON.stringify({
22167
+ conversationId,
22168
+ message: error instanceof Error ? error.message : String(error),
22169
+ messageId,
22170
+ type: "error"
22171
+ }));
22172
+ } catch {}
22173
+ };
22174
+ var getProviderDefaultEmbeddingModel = (embedding) => embedding !== undefined && typeof embedding === "object" && typeof embedding.defaultModel === "string" ? embedding.defaultModel : undefined;
22175
+ var buildRAGContextFromQuery = async (config, topK, scoreThreshold, queryText, embedding, embeddingModel) => {
22160
22176
  const collection = config.collection ?? (config.ragStore ? createRAGCollection({
22161
- defaultModel: embeddingModel ?? ragModel,
22177
+ defaultModel: embeddingModel,
22162
22178
  defaultTopK: topK,
22163
22179
  embedding,
22164
22180
  rerank: config.rerank,
@@ -22171,7 +22187,7 @@ var buildRAGContextFromQuery = async (config, topK, scoreThreshold, queryText, r
22171
22187
  };
22172
22188
  }
22173
22189
  const queried = await collection.searchWithTrace({
22174
- model: embeddingModel ?? ragModel,
22190
+ model: embeddingModel,
22175
22191
  query: queryText,
22176
22192
  scoreThreshold,
22177
22193
  topK
@@ -22194,7 +22210,27 @@ var buildRAGContextFromQuery = async (config, topK, scoreThreshold, queryText, r
22194
22210
  trace: queried.trace
22195
22211
  };
22196
22212
  };
22213
+ var assertEmbeddingModelConfigured = (config) => {
22214
+ if (config.collection !== undefined) {
22215
+ return;
22216
+ }
22217
+ if (config.ragStore === undefined) {
22218
+ return;
22219
+ }
22220
+ if (config.embeddingModel !== undefined) {
22221
+ return;
22222
+ }
22223
+ const { embedding } = config;
22224
+ if (embedding === undefined || typeof embedding !== "object") {
22225
+ return;
22226
+ }
22227
+ if (getProviderDefaultEmbeddingModel(embedding) !== undefined) {
22228
+ return;
22229
+ }
22230
+ throw new Error("ragChat: an embedding provider is configured but no embedding model is set. " + "Pass `embeddingModel` to ragChat() or set `defaultModel` on the embedding provider. " + "The chat model cannot be used for embeddings.");
22231
+ };
22197
22232
  var ragChat = (config) => {
22233
+ assertEmbeddingModelConfigured(config);
22198
22234
  const path = config.path ?? DEFAULT_PATH;
22199
22235
  const authorizeRAGAction = config.authorizeRAGAction;
22200
22236
  const resolveRAGAccessScope = config.resolveRAGAccessScope;
@@ -22656,53 +22692,57 @@ var ragChat = (config) => {
22656
22692
  }));
22657
22693
  };
22658
22694
  const handleMessage = async (ws, rawContent, rawConversationId, rawAttachments) => {
22659
- const parsed = parseProvider(rawContent);
22660
- const { content, providerName } = parsed;
22661
- const userMessageId = generateId2();
22662
22695
  const assistantMessageId = generateId2();
22663
22696
  const conversationId = rawConversationId ?? generateId2();
22664
- const conversation = await store.getOrCreate(conversationId);
22665
- const history = buildHistory(conversation);
22666
- const model = resolveModel(config, parsed);
22667
- const ragModel = parsed.model ?? model;
22668
- appendMessage(conversation, {
22669
- attachments: rawAttachments,
22670
- content,
22671
- conversationId,
22672
- id: userMessageId,
22673
- role: "user",
22674
- timestamp: Date.now()
22675
- });
22676
- await store.set(conversationId, conversation);
22677
- const retrievalStartedAt = Date.now();
22678
- handleRAGRetrieving(ws, conversationId, assistantMessageId, retrievalStartedAt);
22679
- const provider = config.provider(providerName);
22680
- const rag = await buildRAGContextFromQuery(config, topK, scoreThreshold, content, ragModel, config.embedding, config.embeddingModel);
22681
- const controller = new AbortController;
22682
- abortControllers.set(conversationId, controller);
22683
- const { ragContext, sources, trace } = rag;
22684
- const retrievedAt = Date.now();
22685
- const retrievalDurationMs = retrievedAt - retrievalStartedAt;
22686
- handleRAGRetrieved(ws, conversationId, assistantMessageId, sources, retrievalStartedAt, retrievedAt, retrievalDurationMs, trace);
22687
- await streamAI(ws, conversationId, assistantMessageId, {
22688
- completeMeta: includeCompleteSources ? { sources } : undefined,
22689
- maxTurns: config.maxTurns,
22690
- messages: [
22691
- ...history,
22692
- buildUserMessage(content, rawAttachments, ragContext)
22693
- ],
22694
- model,
22695
- provider,
22696
- signal: controller.signal,
22697
- systemPrompt: config.systemPrompt,
22698
- thinking: resolveThinking(config, providerName, model),
22699
- tools: resolveTools(config, providerName, model),
22700
- onComplete: async (fullResponse, usage) => {
22701
- await appendAssistantMessage(conversationId, assistantMessageId, fullResponse, sources, usage, model, retrievalStartedAt, retrievedAt, retrievalDurationMs, trace);
22702
- abortControllers.delete(conversationId);
22703
- config.onComplete?.(conversationId, fullResponse, usage, sources);
22704
- }
22705
- });
22697
+ try {
22698
+ const parsed = parseProvider(rawContent);
22699
+ const { content, providerName } = parsed;
22700
+ const userMessageId = generateId2();
22701
+ const conversation = await store.getOrCreate(conversationId);
22702
+ const history = buildHistory(conversation);
22703
+ const model = resolveModel(config, parsed);
22704
+ appendMessage(conversation, {
22705
+ attachments: rawAttachments,
22706
+ content,
22707
+ conversationId,
22708
+ id: userMessageId,
22709
+ role: "user",
22710
+ timestamp: Date.now()
22711
+ });
22712
+ await store.set(conversationId, conversation);
22713
+ const retrievalStartedAt = Date.now();
22714
+ handleRAGRetrieving(ws, conversationId, assistantMessageId, retrievalStartedAt);
22715
+ const provider = config.provider(providerName);
22716
+ const rag = await buildRAGContextFromQuery(config, topK, scoreThreshold, content, config.embedding, config.embeddingModel);
22717
+ const controller = new AbortController;
22718
+ abortControllers.set(conversationId, controller);
22719
+ const { ragContext, sources, trace } = rag;
22720
+ const retrievedAt = Date.now();
22721
+ const retrievalDurationMs = retrievedAt - retrievalStartedAt;
22722
+ handleRAGRetrieved(ws, conversationId, assistantMessageId, sources, retrievalStartedAt, retrievedAt, retrievalDurationMs, trace);
22723
+ await streamAI(ws, conversationId, assistantMessageId, {
22724
+ completeMeta: includeCompleteSources ? { sources } : undefined,
22725
+ maxTurns: config.maxTurns,
22726
+ messages: [
22727
+ ...history,
22728
+ buildUserMessage(content, rawAttachments, ragContext)
22729
+ ],
22730
+ model,
22731
+ provider,
22732
+ signal: controller.signal,
22733
+ systemPrompt: config.systemPrompt,
22734
+ thinking: resolveThinking(config, providerName, model),
22735
+ tools: resolveTools(config, providerName, model),
22736
+ onComplete: async (fullResponse, usage) => {
22737
+ await appendAssistantMessage(conversationId, assistantMessageId, fullResponse, sources, usage, model, retrievalStartedAt, retrievedAt, retrievalDurationMs, trace);
22738
+ abortControllers.delete(conversationId);
22739
+ config.onComplete?.(conversationId, fullResponse, usage, sources);
22740
+ }
22741
+ });
22742
+ } catch (error) {
22743
+ abortControllers.delete(conversationId);
22744
+ sendWebSocketError(ws, error, conversationId, assistantMessageId);
22745
+ }
22706
22746
  };
22707
22747
  const resolveCollection = () => config.collection ?? (ragStore ? createRAGCollection({
22708
22748
  defaultModel: config.embeddingModel,
@@ -29421,7 +29461,6 @@ var ragChat = (config) => {
29421
29461
  const parsed = parseProvider(lastMessage.content);
29422
29462
  const { content, providerName } = parsed;
29423
29463
  const model = resolveModel(config, parsed);
29424
- const ragModel = parsed.model ?? model;
29425
29464
  const assistantMessageId = generateId2();
29426
29465
  const retrievalStartedAt = Date.now();
29427
29466
  yield {
@@ -29433,7 +29472,7 @@ var ragChat = (config) => {
29433
29472
  event: "retrieval"
29434
29473
  };
29435
29474
  const provider = config.provider(providerName);
29436
- const { ragContext, sources, trace } = await buildRAGContextFromQuery(config, topK, scoreThreshold, content, ragModel, config.embedding, config.embeddingModel);
29475
+ const { ragContext, sources, trace } = await buildRAGContextFromQuery(config, topK, scoreThreshold, content, config.embedding, config.embeddingModel);
29437
29476
  const retrievedAt = Date.now();
29438
29477
  const retrievalDurationMs = retrievedAt - retrievalStartedAt;
29439
29478
  yield {
@@ -29484,16 +29523,20 @@ var ragChat = (config) => {
29484
29523
  if (!message) {
29485
29524
  return;
29486
29525
  }
29487
- if (message.type === "cancel") {
29488
- handleCancel(message.conversationId);
29489
- return;
29490
- }
29491
- if (message.type === "branch") {
29492
- await handleBranch(ws, message.messageId, message.conversationId);
29493
- return;
29494
- }
29495
- if (message.type === "message") {
29496
- await handleMessage(ws, message.content, message.conversationId, message.attachments);
29526
+ try {
29527
+ if (message.type === "cancel") {
29528
+ handleCancel(message.conversationId);
29529
+ return;
29530
+ }
29531
+ if (message.type === "branch") {
29532
+ await handleBranch(ws, message.messageId, message.conversationId);
29533
+ return;
29534
+ }
29535
+ if (message.type === "message") {
29536
+ await handleMessage(ws, message.content, message.conversationId, message.attachments);
29537
+ }
29538
+ } catch (error) {
29539
+ sendWebSocketError(ws, error, "conversationId" in message ? message.conversationId : undefined);
29497
29540
  }
29498
29541
  }
29499
29542
  }).post(`${path}/search`, async ({ body, request, set }) => {
@@ -30865,6 +30908,94 @@ var ragChat = (config) => {
30865
30908
  // src/ai/rag/htmxConfig.ts
30866
30909
  var createRAGHTMXConfig = (config) => config;
30867
30910
  var createRAGHTMXWorkflowRenderConfig = (config) => config;
30911
+ // src/ai/rag/rerankerProviders.ts
30912
+ var rowScore = (row) => row.relevance_score ?? row.relevanceScore ?? row.score ?? 0;
30913
+ var applyRanking = (candidates, rows, topK) => {
30914
+ const ranked = [];
30915
+ for (const row of rows) {
30916
+ const candidate = candidates[row.index];
30917
+ if (!candidate)
30918
+ continue;
30919
+ ranked.push({ ...candidate, score: rowScore(row) });
30920
+ }
30921
+ ranked.sort((left, right) => right.score - left.score);
30922
+ return ranked.slice(0, topK);
30923
+ };
30924
+ var limitCandidates = (input) => {
30925
+ const cap = input.candidateTopK ?? input.results.length;
30926
+ return input.results.slice(0, Math.max(0, cap));
30927
+ };
30928
+ var createHttpCrossEncoderReranker = (options) => {
30929
+ const fetchImpl = options.config.fetch ?? fetch;
30930
+ const defaultModel = options.config.defaultModel ?? options.fallbackModel;
30931
+ return {
30932
+ defaultModel,
30933
+ providerName: options.providerName,
30934
+ rerank: async (input) => {
30935
+ const candidates = limitCandidates(input);
30936
+ if (candidates.length === 0)
30937
+ return [];
30938
+ const model = input.model ?? defaultModel;
30939
+ const documents = candidates.map((candidate) => candidate.chunkText);
30940
+ const topN = Math.min(input.topK, candidates.length);
30941
+ const response = await fetchImpl(options.endpoint, {
30942
+ body: JSON.stringify(options.buildBody({ documents, model, query: input.query, topN })),
30943
+ headers: {
30944
+ Authorization: `Bearer ${options.config.apiKey}`,
30945
+ "Content-Type": "application/json",
30946
+ ...options.config.headers
30947
+ },
30948
+ method: "POST"
30949
+ });
30950
+ if (!response.ok) {
30951
+ throw new Error(`${options.providerName} rerank failed: HTTP ${response.status}`);
30952
+ }
30953
+ const payload = await response.json();
30954
+ const rows = payload.results ?? payload.data ?? [];
30955
+ const ranked = applyRanking(candidates, rows, input.topK);
30956
+ if (input.scoreThreshold !== undefined) {
30957
+ return ranked.filter((result) => result.score >= input.scoreThreshold);
30958
+ }
30959
+ return ranked;
30960
+ }
30961
+ };
30962
+ };
30963
+ var createCohereRAGReranker = (config) => createHttpCrossEncoderReranker({
30964
+ buildBody: ({ model, query, documents, topN }) => ({
30965
+ documents,
30966
+ model,
30967
+ query,
30968
+ top_n: topN
30969
+ }),
30970
+ config,
30971
+ endpoint: `${config.baseUrl ?? "https://api.cohere.com"}/v2/rerank`,
30972
+ fallbackModel: "rerank-v3.5",
30973
+ providerName: "cohere"
30974
+ });
30975
+ var createVoyageRAGReranker = (config) => createHttpCrossEncoderReranker({
30976
+ buildBody: ({ model, query, documents, topN }) => ({
30977
+ documents,
30978
+ model,
30979
+ query,
30980
+ top_k: topN
30981
+ }),
30982
+ config,
30983
+ endpoint: `${config.baseUrl ?? "https://api.voyageai.com"}/v1/rerank`,
30984
+ fallbackModel: "rerank-2",
30985
+ providerName: "voyage"
30986
+ });
30987
+ var createJinaRAGReranker = (config) => createHttpCrossEncoderReranker({
30988
+ buildBody: ({ model, query, documents, topN }) => ({
30989
+ documents,
30990
+ model,
30991
+ query,
30992
+ top_n: topN
30993
+ }),
30994
+ config,
30995
+ endpoint: `${config.baseUrl ?? "https://api.jina.ai"}/v1/rerank`,
30996
+ fallbackModel: "jina-reranker-v2-base-multilingual",
30997
+ providerName: "jina"
30998
+ });
30868
30999
  // src/ai/rag/retrievalStrategies.ts
30869
31000
  var tokenize4 = (value) => value.toLowerCase().split(/[^a-z0-9]+/i).map((token) => token.trim()).filter((token) => token.length > 0);
30870
31001
  var hasAnyToken2 = (tokens, values) => values.some((value) => tokens.includes(value));
@@ -31888,7 +32019,9 @@ var toErrorMessage3 = async (response, label) => {
31888
32019
  return new Error(`${label}: ${response.status} ${response.statusText}${detailMessage ? ` (${detailMessage})` : ""}`);
31889
32020
  };
31890
32021
  var normalizeString = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
31891
- var toUniqueStringArray = (values) => [...new Set(values.filter((value) => typeof value === "string" && value.length > 0))];
32022
+ var toUniqueStringArray = (values) => [
32023
+ ...new Set(values.filter((value) => typeof value === "string" && value.length > 0))
32024
+ ];
31892
32025
  var toContactTitle = (person, fallbackId) => {
31893
32026
  const primaryName = person.names?.find((name) => normalizeString(name.displayName) !== undefined);
31894
32027
  const displayName = normalizeString(primaryName?.displayName);
@@ -32176,6 +32309,7 @@ var {S3Client } = globalThis.Bun;
32176
32309
  import { createHash } from "crypto";
32177
32310
  import { mkdir as mkdir2, readFile as readFile3, readdir as readdir2 } from "fs/promises";
32178
32311
  import { basename as basename2, dirname as dirname3, extname as extname2, join as join2, relative as relative2, resolve as resolve2 } from "path";
32312
+ var h2IfHttps2 = (url) => url.startsWith("https://") ? { protocol: "http2" } : {};
32179
32313
  var toSyncError = (caught) => caught instanceof Error ? caught.message : String(caught);
32180
32314
  var wait = async (delayMs) => {
32181
32315
  if (!(delayMs > 0)) {
@@ -32988,7 +33122,7 @@ var isFeedDocument = (value) => {
32988
33122
  return trimmed.includes("<rss") || trimmed.includes("<channel") || trimmed.includes("<feed") || trimmed.includes("<entry");
32989
33123
  };
32990
33124
  var discoverFeedsFromHTML = async (feed) => {
32991
- const response = await fetch(feed.url);
33125
+ const response = await fetch(feed.url, h2IfHttps2(feed.url));
32992
33126
  if (!response.ok) {
32993
33127
  return [];
32994
33128
  }
@@ -33034,7 +33168,7 @@ var discoverFeedsFromHTML = async (feed) => {
33034
33168
  }
33035
33169
  const validated = [];
33036
33170
  for (const candidate of discovered.values()) {
33037
- const candidateResponse = await fetch(candidate.url);
33171
+ const candidateResponse = await fetch(candidate.url, h2IfHttps2(candidate.url));
33038
33172
  if (!candidateResponse.ok) {
33039
33173
  continue;
33040
33174
  }
@@ -33098,7 +33232,7 @@ var parseSitemapEntries = (sitemap, value) => {
33098
33232
  };
33099
33233
  var discoverSitemapsFromRobots = async (sitemap) => {
33100
33234
  const robotsURL = resolveSiblingURL(sitemap.url, "/robots.txt");
33101
- const response = await fetch(robotsURL);
33235
+ const response = await fetch(robotsURL, h2IfHttps2(robotsURL));
33102
33236
  if (!response.ok) {
33103
33237
  return [];
33104
33238
  }
@@ -33119,7 +33253,7 @@ var discoverSitemapsFromRobots = async (sitemap) => {
33119
33253
  };
33120
33254
  var loadRobotsDisallowRules = async (siteURL) => {
33121
33255
  const robotsURL = resolveSiblingURL(siteURL, "/robots.txt");
33122
- const response = await fetch(robotsURL);
33256
+ const response = await fetch(robotsURL, h2IfHttps2(robotsURL));
33123
33257
  if (!response.ok) {
33124
33258
  return [];
33125
33259
  }
@@ -33160,7 +33294,7 @@ var discoverRecursiveSitemapURLs = async (input) => {
33160
33294
  }
33161
33295
  seen.add(current.sitemap.url);
33162
33296
  resolved.push(current.sitemap);
33163
- const response = await fetch(current.sitemap.url);
33297
+ const response = await fetch(current.sitemap.url, h2IfHttps2(current.sitemap.url));
33164
33298
  if (!response.ok) {
33165
33299
  throw new Error(`Failed to load sitemap ${current.sitemap.url}: ${response.status} ${response.statusText}`);
33166
33300
  }
@@ -33311,7 +33445,7 @@ var discoverLinkedPagesFromHTML = async (input) => {
33311
33445
  pruneCounts.robotsBlockedCount += 1;
33312
33446
  continue;
33313
33447
  }
33314
- const response = await fetch(current.url);
33448
+ const response = await fetch(current.url, h2IfHttps2(current.url));
33315
33449
  if (!response.ok) {
33316
33450
  continue;
33317
33451
  }
@@ -33566,6 +33700,7 @@ var loadDiscoveredGitHubRepositoryFiles = async (input) => {
33566
33700
  repo: input.repo
33567
33701
  });
33568
33702
  const response = await fetch(requestURL, {
33703
+ ...h2IfHttps2(requestURL),
33569
33704
  headers: input.requestHeaders
33570
33705
  });
33571
33706
  if (!response.ok) {
@@ -33729,7 +33864,7 @@ var createRAGFeedSyncSource = (options) => ({
33729
33864
  }
33730
33865
  }
33731
33866
  const discoveredEntries = (await Promise.all([...feedMap.values()].map(async (feed) => {
33732
- const response = await fetch(feed.url);
33867
+ const response = await fetch(feed.url, h2IfHttps2(feed.url));
33733
33868
  if (!response.ok) {
33734
33869
  throw new Error(`Failed to load feed ${feed.url}: ${response.status} ${response.statusText}`);
33735
33870
  }
@@ -33803,7 +33938,7 @@ var createRAGSitemapSyncSource = (options) => ({
33803
33938
  }
33804
33939
  }
33805
33940
  const discoveredEntries = (await Promise.all([...resolvedSitemapMap.values()].map(async (sitemap) => {
33806
- const response = await fetch(sitemap.url);
33941
+ const response = await fetch(sitemap.url, h2IfHttps2(sitemap.url));
33807
33942
  if (!response.ok) {
33808
33943
  throw new Error(`Failed to load sitemap ${sitemap.url}: ${response.status} ${response.statusText}`);
33809
33944
  }
@@ -33868,7 +34003,7 @@ var createRAGSiteDiscoverySyncSource = (options) => ({
33868
34003
  }
33869
34004
  }
33870
34005
  const feedEntries = (await Promise.all([...feedMap.values()].map(async (feed) => {
33871
- const response = await fetch(feed.url);
34006
+ const response = await fetch(feed.url, h2IfHttps2(feed.url));
33872
34007
  if (!response.ok) {
33873
34008
  throw new Error(`Failed to load feed ${feed.url}: ${response.status} ${response.statusText}`);
33874
34009
  }
@@ -33918,7 +34053,7 @@ var createRAGSiteDiscoverySyncSource = (options) => ({
33918
34053
  sitemap
33919
34054
  })))).flat();
33920
34055
  const sitemapEntries = (await Promise.all(resolvedSitemaps.map(async (sitemap) => {
33921
- const response = await fetch(sitemap.url);
34056
+ const response = await fetch(sitemap.url, h2IfHttps2(sitemap.url));
33922
34057
  if (!response.ok) {
33923
34058
  throw new Error(`Failed to load sitemap ${sitemap.url}: ${response.status} ${response.statusText}`);
33924
34059
  }
@@ -37325,6 +37460,7 @@ export {
37325
37460
  evaluateRAGAnswerGroundingCase,
37326
37461
  evaluateRAGAnswerGrounding,
37327
37462
  deepseekEmbeddings,
37463
+ createVoyageRAGReranker,
37328
37464
  createTextFileExtractor,
37329
37465
  createSQLiteRAGStore,
37330
37466
  createRAGVector,
@@ -37422,12 +37558,14 @@ export {
37422
37558
  createPDFFileExtractor,
37423
37559
  createOfficeDocumentExtractor,
37424
37560
  createLegacyDocumentExtractor,
37561
+ createJinaRAGReranker,
37425
37562
  createInMemoryRAGStore,
37426
37563
  createHeuristicRAGRetrievalStrategy,
37427
37564
  createHeuristicRAGReranker,
37428
37565
  createHeuristicRAGQueryTransform,
37429
37566
  createEmailExtractor,
37430
37567
  createEPUBExtractor,
37568
+ createCohereRAGReranker,
37431
37569
  createBuiltinArchiveExpander,
37432
37570
  compareRAGRetrievalTraceSummaries,
37433
37571
  compareRAGRetrievalStrategies,
@@ -37511,5 +37649,5 @@ export {
37511
37649
  addRAGEvaluationSuiteCase
37512
37650
  };
37513
37651
 
37514
- //# debugId=A89076338D70690164756E2164756E21
37652
+ //# debugId=3E3026F16C216BA364756E2164756E21
37515
37653
  //# sourceMappingURL=index.js.map