@absolutejs/absolute 0.19.0-beta.513 → 0.19.0-beta.515

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/ai/index.js CHANGED
@@ -4974,6 +4974,123 @@ var summarizeRAGRerankerComparison = (entries) => {
4974
4974
  var summarizeRAGRetrievalComparison = (entries) => summarizeEvaluationResponseComparison(entries, "retrievalId");
4975
4975
 
4976
4976
  // src/ai/rag/types.ts
4977
+ var getContextNumber = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
4978
+ var getContextString = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
4979
+ var formatMediaTimestamp = (value) => {
4980
+ if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
4981
+ return;
4982
+ }
4983
+ const totalSeconds = Math.floor(value / 1000);
4984
+ const minutes = Math.floor(totalSeconds / 60);
4985
+ const seconds = totalSeconds % 60;
4986
+ const milliseconds = Math.floor(value % 1000);
4987
+ return `${String(minutes).padStart(2, "0")}:${String(seconds).padStart(2, "0")}.${String(milliseconds).padStart(3, "0")}`;
4988
+ };
4989
+ var buildRAGContextLocatorLabel = (metadata, source, title) => {
4990
+ if (!metadata) {
4991
+ return;
4992
+ }
4993
+ const page = getContextNumber(metadata.page) ?? getContextNumber(metadata.pageNumber) ?? (typeof metadata.pageIndex === "number" ? metadata.pageIndex + 1 : undefined);
4994
+ if (page) {
4995
+ return `Page ${page}`;
4996
+ }
4997
+ const sheet = getContextString(metadata.sheetName) ?? (Array.isArray(metadata.sheetNames) ? getContextString(metadata.sheetNames[0]) : undefined);
4998
+ if (sheet) {
4999
+ return `Sheet ${sheet}`;
5000
+ }
5001
+ const slide = getContextNumber(metadata.slide) ?? getContextNumber(metadata.slideNumber) ?? (typeof metadata.slideIndex === "number" ? metadata.slideIndex + 1 : undefined);
5002
+ if (slide) {
5003
+ return `Slide ${slide}`;
5004
+ }
5005
+ const archiveEntry = getContextString(metadata.archiveEntryPath) ?? getContextString(metadata.entryPath);
5006
+ if (archiveEntry) {
5007
+ return `Archive entry ${archiveEntry}`;
5008
+ }
5009
+ const emailKind = getContextString(metadata.emailKind);
5010
+ if (emailKind === "attachment") {
5011
+ const attachmentName = getContextString(metadata.attachmentName) ?? source?.split("/").at(-1) ?? title?.split(" \xB7 ").at(-1);
5012
+ return attachmentName ? `Attachment ${attachmentName}` : "Attachment";
5013
+ }
5014
+ const mediaStart = formatMediaTimestamp(metadata.startMs);
5015
+ const mediaEnd = formatMediaTimestamp(metadata.endMs);
5016
+ if (mediaStart && mediaEnd) {
5017
+ return `Timestamp ${mediaStart} - ${mediaEnd}`;
5018
+ }
5019
+ if (mediaStart) {
5020
+ return `Timestamp ${mediaStart}`;
5021
+ }
5022
+ return;
5023
+ };
5024
+ var buildRAGContextProvenanceLabel = (metadata) => {
5025
+ if (!metadata) {
5026
+ return;
5027
+ }
5028
+ const pdfTextMode = getContextString(metadata.pdfTextMode);
5029
+ const ocrEngine = getContextString(metadata.ocrEngine);
5030
+ const mediaKind = getContextString(metadata.mediaKind);
5031
+ const transcriptSource = getContextString(metadata.transcriptSource);
5032
+ const threadTopic = getContextString(metadata.threadTopic);
5033
+ const from = getContextString(metadata.from);
5034
+ const speaker = getContextString(metadata.speaker);
5035
+ const labels = [
5036
+ pdfTextMode ? `PDF ${pdfTextMode}` : "",
5037
+ ocrEngine ? `OCR ${ocrEngine}` : "",
5038
+ mediaKind ? `Media ${mediaKind}` : "",
5039
+ transcriptSource ? `Transcript ${transcriptSource}` : "",
5040
+ threadTopic ? `Thread ${threadTopic}` : "",
5041
+ speaker ? `Speaker ${speaker}` : "",
5042
+ from ? `Sender ${from}` : ""
5043
+ ].filter((value) => value.length > 0);
5044
+ return labels.length > 0 ? labels.join(" \xB7 ") : undefined;
5045
+ };
5046
+ var buildRAGContextCitationGuidance = (hits) => {
5047
+ const needsPageGuidance = hits.some((hit) => {
5048
+ const metadata = hit.metadata;
5049
+ if (!metadata) {
5050
+ return false;
5051
+ }
5052
+ return getContextNumber(metadata.page) !== undefined || getContextNumber(metadata.pageNumber) !== undefined || typeof metadata.pageIndex === "number";
5053
+ });
5054
+ const needsSheetGuidance = hits.some((hit) => {
5055
+ const metadata = hit.metadata;
5056
+ if (!metadata) {
5057
+ return false;
5058
+ }
5059
+ return getContextString(metadata.sheetName) !== undefined || Array.isArray(metadata.sheetNames) && getContextString(metadata.sheetNames[0]) !== undefined;
5060
+ });
5061
+ const needsSlideGuidance = hits.some((hit) => {
5062
+ const metadata = hit.metadata;
5063
+ if (!metadata) {
5064
+ return false;
5065
+ }
5066
+ return getContextNumber(metadata.slide) !== undefined || getContextNumber(metadata.slideNumber) !== undefined || typeof metadata.slideIndex === "number";
5067
+ });
5068
+ const needsTimestampGuidance = hits.some((hit) => {
5069
+ const metadata = hit.metadata;
5070
+ if (!metadata) {
5071
+ return false;
5072
+ }
5073
+ return typeof metadata.startMs === "number" || typeof metadata.endMs === "number";
5074
+ });
5075
+ const needsAttachmentGuidance = hits.some((hit) => getContextString(hit.metadata?.emailKind) === "attachment");
5076
+ const needsThreadGuidance = hits.some((hit) => getContextString(hit.metadata?.threadTopic) !== undefined || getContextString(hit.metadata?.from) !== undefined);
5077
+ const needsArchiveGuidance = hits.some((hit) => {
5078
+ const metadata = hit.metadata;
5079
+ return getContextString(metadata?.archiveEntryPath) !== undefined || getContextString(metadata?.entryPath) !== undefined;
5080
+ });
5081
+ const guidanceLines = [
5082
+ "When you use retrieved context, cite it inline with [1], [2]. Prefer the most specific evidence available and preserve page, sheet, slide, timestamp, attachment, archive entry, or thread cues when the context provides them.",
5083
+ needsPageGuidance ? "For PDF evidence, keep the cited page number in the answer when the context includes one." : "",
5084
+ needsSheetGuidance ? "For spreadsheet evidence, name the worksheet when the context identifies a sheet." : "",
5085
+ needsSlideGuidance ? "For presentation evidence, keep the slide number in the answer when the context provides it." : "",
5086
+ needsTimestampGuidance ? "For media evidence, preserve the cited timestamp range in the answer." : "",
5087
+ needsAttachmentGuidance ? "For email attachment evidence, distinguish the attachment from the parent message." : "",
5088
+ needsThreadGuidance ? "For email message evidence, preserve sender or thread cues when they matter to the claim." : "",
5089
+ needsArchiveGuidance ? "For archive evidence, identify the archive entry path instead of only naming the outer archive." : ""
5090
+ ].filter((value) => value.length > 0);
5091
+ return guidanceLines.join(`
5092
+ `);
5093
+ };
4977
5094
  var buildRAGContext = (hits) => {
4978
5095
  if (hits.length === 0) {
4979
5096
  return "";
@@ -4981,15 +5098,23 @@ var buildRAGContext = (hits) => {
4981
5098
  const sourceLines = hits.map((hit, index) => {
4982
5099
  const source = hit.source ? ` (${hit.source})` : "";
4983
5100
  const title = hit.title ? ` ${hit.title}` : "";
4984
- return `[${index + 1}]${title}${source}
4985
- ${hit.chunkText.trim()}`;
5101
+ const locatorLabel = buildRAGContextLocatorLabel(hit.metadata, hit.source, hit.title);
5102
+ const provenanceLabel = buildRAGContextProvenanceLabel(hit.metadata);
5103
+ const evidenceLines = [
5104
+ `[${index + 1}]${title}${source}`,
5105
+ locatorLabel ? `Location: ${locatorLabel}` : "",
5106
+ provenanceLabel ? `Provenance: ${provenanceLabel}` : "",
5107
+ hit.chunkText.trim()
5108
+ ].filter((value) => value.length > 0);
5109
+ return evidenceLines.join(`
5110
+ `);
4986
5111
  });
4987
5112
  return `Use the following context for this question:
4988
5113
  ${sourceLines.join(`
4989
5114
 
4990
5115
  `)}
4991
5116
 
4992
- Answer with citations like [1], [2] when you use specific context.`;
5117
+ ${buildRAGContextCitationGuidance(hits)}`;
4993
5118
  };
4994
5119
 
4995
5120
  // src/ai/rag/chat.ts
@@ -7318,8 +7443,8 @@ ${tag} OK`) || chunk.startsWith(`${tag} OK`));
7318
7443
  // src/ai/rag/presentation.ts
7319
7444
  var buildSourceGroupKey = (source) => source.source ?? source.title ?? source.chunkId;
7320
7445
  var buildSourceLabel = (source) => source.source ?? source.title ?? source.chunkId;
7321
- var getContextNumber = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
7322
- var getContextString = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
7446
+ var getContextNumber2 = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
7447
+ var getContextString2 = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
7323
7448
  var formatTimestampLabel = (value) => {
7324
7449
  const timestamp = typeof value === "number" && Number.isFinite(value) ? value : typeof value === "string" ? Date.parse(value) : Number.NaN;
7325
7450
  if (!Number.isFinite(timestamp)) {
@@ -7330,7 +7455,7 @@ var formatTimestampLabel = (value) => {
7330
7455
  timeStyle: "short"
7331
7456
  });
7332
7457
  };
7333
- var formatMediaTimestamp = (value) => {
7458
+ var formatMediaTimestamp2 = (value) => {
7334
7459
  if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
7335
7460
  return;
7336
7461
  }
@@ -7355,35 +7480,35 @@ var buildContextLabel = (metadata) => {
7355
7480
  if (!metadata) {
7356
7481
  return;
7357
7482
  }
7358
- const emailKind = getContextString(metadata.emailKind);
7483
+ const emailKind = getContextString2(metadata.emailKind);
7359
7484
  if (emailKind === "attachment") {
7360
7485
  return "Attachment evidence";
7361
7486
  }
7362
7487
  if (emailKind === "message") {
7363
- const from = getContextString(metadata.from);
7488
+ const from = getContextString2(metadata.from);
7364
7489
  return from ? `Message from ${from}` : "Message evidence";
7365
7490
  }
7366
- const page = getContextNumber(metadata.page) ?? getContextNumber(metadata.pageNumber) ?? (typeof metadata.pageIndex === "number" ? metadata.pageIndex + 1 : undefined);
7491
+ const page = getContextNumber2(metadata.page) ?? getContextNumber2(metadata.pageNumber) ?? (typeof metadata.pageIndex === "number" ? metadata.pageIndex + 1 : undefined);
7367
7492
  if (page) {
7368
7493
  return `Page ${page}`;
7369
7494
  }
7370
- const sheet = getContextString(metadata.sheetName) ?? (Array.isArray(metadata.sheetNames) ? getContextString(metadata.sheetNames[0]) : undefined);
7495
+ const sheet = getContextString2(metadata.sheetName) ?? (Array.isArray(metadata.sheetNames) ? getContextString2(metadata.sheetNames[0]) : undefined);
7371
7496
  if (sheet) {
7372
7497
  return `Sheet ${sheet}`;
7373
7498
  }
7374
- const slide = getContextNumber(metadata.slide) ?? getContextNumber(metadata.slideNumber) ?? (typeof metadata.slideIndex === "number" ? metadata.slideIndex + 1 : undefined);
7499
+ const slide = getContextNumber2(metadata.slide) ?? getContextNumber2(metadata.slideNumber) ?? (typeof metadata.slideIndex === "number" ? metadata.slideIndex + 1 : undefined);
7375
7500
  if (slide) {
7376
7501
  return `Slide ${slide}`;
7377
7502
  }
7378
- const archiveEntry = getContextString(metadata.archiveEntryPath) ?? getContextString(metadata.entryPath);
7503
+ const archiveEntry = getContextString2(metadata.archiveEntryPath) ?? getContextString2(metadata.entryPath);
7379
7504
  if (archiveEntry) {
7380
7505
  return `Archive entry ${archiveEntry}`;
7381
7506
  }
7382
- const threadTopic = getContextString(metadata.threadTopic);
7507
+ const threadTopic = getContextString2(metadata.threadTopic);
7383
7508
  if (threadTopic) {
7384
7509
  return `Thread ${threadTopic}`;
7385
7510
  }
7386
- const speaker = getContextString(metadata.speaker);
7511
+ const speaker = getContextString2(metadata.speaker);
7387
7512
  if (speaker) {
7388
7513
  return `Speaker ${speaker}`;
7389
7514
  }
@@ -7393,29 +7518,29 @@ var buildLocatorLabel = (metadata, source, title) => {
7393
7518
  if (!metadata) {
7394
7519
  return;
7395
7520
  }
7396
- const page = getContextNumber(metadata.page) ?? getContextNumber(metadata.pageNumber) ?? (typeof metadata.pageIndex === "number" ? metadata.pageIndex + 1 : undefined);
7521
+ const page = getContextNumber2(metadata.page) ?? getContextNumber2(metadata.pageNumber) ?? (typeof metadata.pageIndex === "number" ? metadata.pageIndex + 1 : undefined);
7397
7522
  if (page) {
7398
7523
  return `Page ${page}`;
7399
7524
  }
7400
- const sheet = getContextString(metadata.sheetName) ?? (Array.isArray(metadata.sheetNames) ? getContextString(metadata.sheetNames[0]) : undefined);
7525
+ const sheet = getContextString2(metadata.sheetName) ?? (Array.isArray(metadata.sheetNames) ? getContextString2(metadata.sheetNames[0]) : undefined);
7401
7526
  if (sheet) {
7402
7527
  return `Sheet ${sheet}`;
7403
7528
  }
7404
- const slide = getContextNumber(metadata.slide) ?? getContextNumber(metadata.slideNumber) ?? (typeof metadata.slideIndex === "number" ? metadata.slideIndex + 1 : undefined);
7529
+ const slide = getContextNumber2(metadata.slide) ?? getContextNumber2(metadata.slideNumber) ?? (typeof metadata.slideIndex === "number" ? metadata.slideIndex + 1 : undefined);
7405
7530
  if (slide) {
7406
7531
  return `Slide ${slide}`;
7407
7532
  }
7408
- const archiveEntry = getContextString(metadata.archiveEntryPath) ?? getContextString(metadata.entryPath);
7533
+ const archiveEntry = getContextString2(metadata.archiveEntryPath) ?? getContextString2(metadata.entryPath);
7409
7534
  if (archiveEntry) {
7410
7535
  return `Archive entry ${archiveEntry}`;
7411
7536
  }
7412
- const emailKind = getContextString(metadata.emailKind);
7537
+ const emailKind = getContextString2(metadata.emailKind);
7413
7538
  if (emailKind === "attachment") {
7414
- const attachmentName = getContextString(metadata.attachmentName) ?? getAttachmentName(source, title);
7539
+ const attachmentName = getContextString2(metadata.attachmentName) ?? getAttachmentName(source, title);
7415
7540
  return attachmentName ? `Attachment ${attachmentName}` : "Attachment";
7416
7541
  }
7417
- const mediaStart = formatMediaTimestamp(metadata.startMs);
7418
- const mediaEnd = formatMediaTimestamp(metadata.endMs);
7542
+ const mediaStart = formatMediaTimestamp2(metadata.startMs);
7543
+ const mediaEnd = formatMediaTimestamp2(metadata.endMs);
7419
7544
  if (mediaStart && mediaEnd) {
7420
7545
  return `Timestamp ${mediaStart} - ${mediaEnd}`;
7421
7546
  }
@@ -7428,14 +7553,14 @@ var buildProvenanceLabel = (metadata) => {
7428
7553
  if (!metadata) {
7429
7554
  return;
7430
7555
  }
7431
- const threadTopic = getContextString(metadata.threadTopic);
7432
- const from = getContextString(metadata.from);
7556
+ const threadTopic = getContextString2(metadata.threadTopic);
7557
+ const from = getContextString2(metadata.from);
7433
7558
  const sentAt = formatTimestampLabel(metadata.sentAt) ?? formatTimestampLabel(metadata.receivedAt);
7434
- const speaker = getContextString(metadata.speaker);
7435
- const mediaKind = getContextString(metadata.mediaKind);
7436
- const transcriptSource = getContextString(metadata.transcriptSource);
7437
- const pdfTextMode = getContextString(metadata.pdfTextMode);
7438
- const ocrEngine = getContextString(metadata.ocrEngine);
7559
+ const speaker = getContextString2(metadata.speaker);
7560
+ const mediaKind = getContextString2(metadata.mediaKind);
7561
+ const transcriptSource = getContextString2(metadata.transcriptSource);
7562
+ const pdfTextMode = getContextString2(metadata.pdfTextMode);
7563
+ const ocrEngine = getContextString2(metadata.ocrEngine);
7439
7564
  const labels = [
7440
7565
  pdfTextMode ? `PDF ${pdfTextMode}` : "",
7441
7566
  ocrEngine ? `OCR ${ocrEngine}` : "",
@@ -10420,5 +10545,5 @@ export {
10420
10545
  aiChat
10421
10546
  };
10422
10547
 
10423
- //# debugId=92744A9C86B6EB9164756E2164756E21
10548
+ //# debugId=80D809BE3389E86564756E2164756E21
10424
10549
  //# sourceMappingURL=index.js.map