@absolutejs/rag 0.1.2 → 0.2.0

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/index.js CHANGED
@@ -19308,7 +19308,10 @@ var sourceAwareUnits = (document, format, normalizedText) => {
19308
19308
  }
19309
19309
  };
19310
19310
  var overlapTail = (value, overlap) => {
19311
- if (overlap <= 0 || value.length <= overlap) {
19311
+ if (overlap <= 0) {
19312
+ return "";
19313
+ }
19314
+ if (value.length <= overlap) {
19312
19315
  return value;
19313
19316
  }
19314
19317
  const candidate = value.slice(-overlap);
@@ -19323,11 +19326,16 @@ var chunkFromUnits = (units, maxChunkLength, chunkOverlap, minChunkLength) => {
19323
19326
  };
19324
19327
  const mergeSmallChunk = (merged2, chunk) => {
19325
19328
  const last = merged2[merged2.length - 1];
19326
- if (!(last && chunk.length < minChunkLength)) {
19329
+ if (last === undefined || chunk.length >= minChunkLength) {
19330
+ merged2.push(chunk);
19331
+ return;
19332
+ }
19333
+ const candidate = normalizeWhitespace(`${last} ${chunk}`);
19334
+ if (candidate.length > maxChunkLength) {
19327
19335
  merged2.push(chunk);
19328
19336
  return;
19329
19337
  }
19330
- merged2[merged2.length - 1] = normalizeWhitespace(`${last} ${chunk}`);
19338
+ merged2[merged2.length - 1] = candidate;
19331
19339
  };
19332
19340
  const appendUnitToChunk = (trimmed) => {
19333
19341
  if (!current) {
@@ -19348,11 +19356,21 @@ var chunkFromUnits = (units, maxChunkLength, chunkOverlap, minChunkLength) => {
19348
19356
  const carry = overlapTail(current, chunkOverlap);
19349
19357
  current = carry.length > 0 ? `${carry} ${trimmed}`.trim() : trimmed;
19350
19358
  };
19359
+ const explodeOversized = (unit) => {
19360
+ if (unit.length <= maxChunkLength)
19361
+ return [unit];
19362
+ const sentences = sentenceUnits(unit);
19363
+ if (sentences.length > 1)
19364
+ return sentences.flatMap(explodeOversized);
19365
+ return fixedUnits(unit, maxChunkLength);
19366
+ };
19351
19367
  for (const unit of units) {
19352
- const trimmed = unit.trim();
19353
- if (!trimmed)
19354
- continue;
19355
- appendUnitToChunk(trimmed);
19368
+ for (const piece of explodeOversized(unit.trim())) {
19369
+ const trimmed = piece.trim();
19370
+ if (!trimmed)
19371
+ continue;
19372
+ appendUnitToChunk(trimmed);
19373
+ }
19356
19374
  }
19357
19375
  if (current) {
19358
19376
  appendChunk(current);
@@ -31555,6 +31573,54 @@ var ragChat = (config) => {
31555
31573
  // src/presentation/htmxConfig.ts
31556
31574
  var createRAGHTMXConfig = (config) => config;
31557
31575
  var createRAGHTMXWorkflowRenderConfig = (config) => config;
31576
+ // src/retrieval/embeddingBudget.ts
31577
+ var embeddingCacheKey = async (text, model, kind) => {
31578
+ const payload = `${model ?? "default"}:${kind ?? "passage"}:${text}`;
31579
+ const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(payload));
31580
+ return Array.from(new Uint8Array(digest)).map((byte) => byte.toString(16).padStart(2, "0")).join("");
31581
+ };
31582
+ var QUOTA_PATTERN = /RESOURCE_EXHAUSTED|token limit|quota|insufficient_quota|billing hard limit/i;
31583
+ var isEmbeddingQuotaError = (error) => {
31584
+ const message = error instanceof Error ? error.message : typeof error === "string" ? error : "";
31585
+ return QUOTA_PATTERN.test(message);
31586
+ };
31587
+ var withEmbeddingBudget = (provider, options = {}) => {
31588
+ const base = typeof provider === "function" ? { embed: provider } : provider;
31589
+ const { cache, onQuotaExhausted } = options;
31590
+ let lastError = null;
31591
+ let quotaExhaustedAt = null;
31592
+ let reused = 0;
31593
+ let embedded = 0;
31594
+ return {
31595
+ ...base,
31596
+ embed: async (input) => {
31597
+ const key = cache ? await embeddingCacheKey(input.text, input.model, input.kind) : null;
31598
+ if (key && cache) {
31599
+ const hit = await cache.get(key);
31600
+ if (hit && hit.length > 0) {
31601
+ reused += 1;
31602
+ return hit;
31603
+ }
31604
+ }
31605
+ const vector = await base.embed(input).catch((error) => {
31606
+ lastError = error instanceof Error ? error.message : String(error);
31607
+ if (isEmbeddingQuotaError(error)) {
31608
+ const first = quotaExhaustedAt === null;
31609
+ quotaExhaustedAt = new Date;
31610
+ if (first)
31611
+ onQuotaExhausted?.(error);
31612
+ }
31613
+ throw error;
31614
+ });
31615
+ lastError = null;
31616
+ embedded += 1;
31617
+ if (key && cache)
31618
+ await cache.set(key, vector);
31619
+ return vector;
31620
+ },
31621
+ health: () => ({ embedded, lastError, quotaExhaustedAt, reused })
31622
+ };
31623
+ };
31558
31624
  // src/providers/rerankerProviders.ts
31559
31625
  var rowScore = (row) => row.relevance_score ?? row.relevanceScore ?? row.score ?? 0;
31560
31626
  var applyRanking = (candidates, rows, topK) => {
@@ -35995,6 +36061,7 @@ var createSyncRAGStore = (options = {}) => {
35995
36061
  };
35996
36062
  export {
35997
36063
  xaiEmbeddings,
36064
+ withEmbeddingBudget,
35998
36065
  validateRAGEmbeddingDimensions,
35999
36066
  updateRAGEvaluationSuiteCase,
36000
36067
  summarizeRAGSearchTraceStore,
@@ -36084,6 +36151,7 @@ export {
36084
36151
  loadRAGDocumentFile,
36085
36152
  loadRAGAnswerGroundingEvaluationHistory,
36086
36153
  loadRAGAnswerGroundingCaseDifficultyHistory,
36154
+ isEmbeddingQuotaError,
36087
36155
  inspectRAGSQLiteStoreMigrations,
36088
36156
  ingestRAGSource,
36089
36157
  ingestRAGDocuments,
@@ -36097,6 +36165,7 @@ export {
36097
36165
  evaluateRAGCollection,
36098
36166
  evaluateRAGAnswerGroundingCase,
36099
36167
  evaluateRAGAnswerGrounding,
36168
+ embeddingCacheKey,
36100
36169
  deepseekEmbeddings,
36101
36170
  createVoyageRAGReranker,
36102
36171
  createTextFileExtractor,
@@ -36286,5 +36355,5 @@ export {
36286
36355
  addRAGEvaluationSuiteCase
36287
36356
  };
36288
36357
 
36289
- //# debugId=CB9ED8A4182DD67364756E2164756E21
36358
+ //# debugId=A910166B20BDB76264756E2164756E21
36290
36359
  //# sourceMappingURL=index.js.map