@absolutejs/absolute 0.19.0-beta.512 → 0.19.0-beta.514

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,75 @@ 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
+ };
4977
5046
  var buildRAGContext = (hits) => {
4978
5047
  if (hits.length === 0) {
4979
5048
  return "";
@@ -4981,15 +5050,23 @@ var buildRAGContext = (hits) => {
4981
5050
  const sourceLines = hits.map((hit, index) => {
4982
5051
  const source = hit.source ? ` (${hit.source})` : "";
4983
5052
  const title = hit.title ? ` ${hit.title}` : "";
4984
- return `[${index + 1}]${title}${source}
4985
- ${hit.chunkText.trim()}`;
5053
+ const locatorLabel = buildRAGContextLocatorLabel(hit.metadata, hit.source, hit.title);
5054
+ const provenanceLabel = buildRAGContextProvenanceLabel(hit.metadata);
5055
+ const evidenceLines = [
5056
+ `[${index + 1}]${title}${source}`,
5057
+ locatorLabel ? `Location: ${locatorLabel}` : "",
5058
+ provenanceLabel ? `Provenance: ${provenanceLabel}` : "",
5059
+ hit.chunkText.trim()
5060
+ ].filter((value) => value.length > 0);
5061
+ return evidenceLines.join(`
5062
+ `);
4986
5063
  });
4987
5064
  return `Use the following context for this question:
4988
5065
  ${sourceLines.join(`
4989
5066
 
4990
5067
  `)}
4991
5068
 
4992
- Answer with citations like [1], [2] when you use specific context.`;
5069
+ When you use retrieved context, cite it inline with [1], [2]. Prefer the most specific evidence available and preserve page, sheet, slide, timestamp, attachment, or thread cues when the context provides them.`;
4993
5070
  };
4994
5071
 
4995
5072
  // src/ai/rag/chat.ts
@@ -7318,8 +7395,8 @@ ${tag} OK`) || chunk.startsWith(`${tag} OK`));
7318
7395
  // src/ai/rag/presentation.ts
7319
7396
  var buildSourceGroupKey = (source) => source.source ?? source.title ?? source.chunkId;
7320
7397
  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;
7398
+ var getContextNumber2 = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
7399
+ var getContextString2 = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
7323
7400
  var formatTimestampLabel = (value) => {
7324
7401
  const timestamp = typeof value === "number" && Number.isFinite(value) ? value : typeof value === "string" ? Date.parse(value) : Number.NaN;
7325
7402
  if (!Number.isFinite(timestamp)) {
@@ -7330,7 +7407,7 @@ var formatTimestampLabel = (value) => {
7330
7407
  timeStyle: "short"
7331
7408
  });
7332
7409
  };
7333
- var formatMediaTimestamp = (value) => {
7410
+ var formatMediaTimestamp2 = (value) => {
7334
7411
  if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
7335
7412
  return;
7336
7413
  }
@@ -7355,35 +7432,35 @@ var buildContextLabel = (metadata) => {
7355
7432
  if (!metadata) {
7356
7433
  return;
7357
7434
  }
7358
- const emailKind = getContextString(metadata.emailKind);
7435
+ const emailKind = getContextString2(metadata.emailKind);
7359
7436
  if (emailKind === "attachment") {
7360
7437
  return "Attachment evidence";
7361
7438
  }
7362
7439
  if (emailKind === "message") {
7363
- const from = getContextString(metadata.from);
7440
+ const from = getContextString2(metadata.from);
7364
7441
  return from ? `Message from ${from}` : "Message evidence";
7365
7442
  }
7366
- const page = getContextNumber(metadata.page) ?? getContextNumber(metadata.pageNumber) ?? (typeof metadata.pageIndex === "number" ? metadata.pageIndex + 1 : undefined);
7443
+ const page = getContextNumber2(metadata.page) ?? getContextNumber2(metadata.pageNumber) ?? (typeof metadata.pageIndex === "number" ? metadata.pageIndex + 1 : undefined);
7367
7444
  if (page) {
7368
7445
  return `Page ${page}`;
7369
7446
  }
7370
- const sheet = getContextString(metadata.sheetName) ?? (Array.isArray(metadata.sheetNames) ? getContextString(metadata.sheetNames[0]) : undefined);
7447
+ const sheet = getContextString2(metadata.sheetName) ?? (Array.isArray(metadata.sheetNames) ? getContextString2(metadata.sheetNames[0]) : undefined);
7371
7448
  if (sheet) {
7372
7449
  return `Sheet ${sheet}`;
7373
7450
  }
7374
- const slide = getContextNumber(metadata.slide) ?? getContextNumber(metadata.slideNumber) ?? (typeof metadata.slideIndex === "number" ? metadata.slideIndex + 1 : undefined);
7451
+ const slide = getContextNumber2(metadata.slide) ?? getContextNumber2(metadata.slideNumber) ?? (typeof metadata.slideIndex === "number" ? metadata.slideIndex + 1 : undefined);
7375
7452
  if (slide) {
7376
7453
  return `Slide ${slide}`;
7377
7454
  }
7378
- const archiveEntry = getContextString(metadata.archiveEntryPath) ?? getContextString(metadata.entryPath);
7455
+ const archiveEntry = getContextString2(metadata.archiveEntryPath) ?? getContextString2(metadata.entryPath);
7379
7456
  if (archiveEntry) {
7380
7457
  return `Archive entry ${archiveEntry}`;
7381
7458
  }
7382
- const threadTopic = getContextString(metadata.threadTopic);
7459
+ const threadTopic = getContextString2(metadata.threadTopic);
7383
7460
  if (threadTopic) {
7384
7461
  return `Thread ${threadTopic}`;
7385
7462
  }
7386
- const speaker = getContextString(metadata.speaker);
7463
+ const speaker = getContextString2(metadata.speaker);
7387
7464
  if (speaker) {
7388
7465
  return `Speaker ${speaker}`;
7389
7466
  }
@@ -7393,29 +7470,29 @@ var buildLocatorLabel = (metadata, source, title) => {
7393
7470
  if (!metadata) {
7394
7471
  return;
7395
7472
  }
7396
- const page = getContextNumber(metadata.page) ?? getContextNumber(metadata.pageNumber) ?? (typeof metadata.pageIndex === "number" ? metadata.pageIndex + 1 : undefined);
7473
+ const page = getContextNumber2(metadata.page) ?? getContextNumber2(metadata.pageNumber) ?? (typeof metadata.pageIndex === "number" ? metadata.pageIndex + 1 : undefined);
7397
7474
  if (page) {
7398
7475
  return `Page ${page}`;
7399
7476
  }
7400
- const sheet = getContextString(metadata.sheetName) ?? (Array.isArray(metadata.sheetNames) ? getContextString(metadata.sheetNames[0]) : undefined);
7477
+ const sheet = getContextString2(metadata.sheetName) ?? (Array.isArray(metadata.sheetNames) ? getContextString2(metadata.sheetNames[0]) : undefined);
7401
7478
  if (sheet) {
7402
7479
  return `Sheet ${sheet}`;
7403
7480
  }
7404
- const slide = getContextNumber(metadata.slide) ?? getContextNumber(metadata.slideNumber) ?? (typeof metadata.slideIndex === "number" ? metadata.slideIndex + 1 : undefined);
7481
+ const slide = getContextNumber2(metadata.slide) ?? getContextNumber2(metadata.slideNumber) ?? (typeof metadata.slideIndex === "number" ? metadata.slideIndex + 1 : undefined);
7405
7482
  if (slide) {
7406
7483
  return `Slide ${slide}`;
7407
7484
  }
7408
- const archiveEntry = getContextString(metadata.archiveEntryPath) ?? getContextString(metadata.entryPath);
7485
+ const archiveEntry = getContextString2(metadata.archiveEntryPath) ?? getContextString2(metadata.entryPath);
7409
7486
  if (archiveEntry) {
7410
7487
  return `Archive entry ${archiveEntry}`;
7411
7488
  }
7412
- const emailKind = getContextString(metadata.emailKind);
7489
+ const emailKind = getContextString2(metadata.emailKind);
7413
7490
  if (emailKind === "attachment") {
7414
- const attachmentName = getContextString(metadata.attachmentName) ?? getAttachmentName(source, title);
7491
+ const attachmentName = getContextString2(metadata.attachmentName) ?? getAttachmentName(source, title);
7415
7492
  return attachmentName ? `Attachment ${attachmentName}` : "Attachment";
7416
7493
  }
7417
- const mediaStart = formatMediaTimestamp(metadata.startMs);
7418
- const mediaEnd = formatMediaTimestamp(metadata.endMs);
7494
+ const mediaStart = formatMediaTimestamp2(metadata.startMs);
7495
+ const mediaEnd = formatMediaTimestamp2(metadata.endMs);
7419
7496
  if (mediaStart && mediaEnd) {
7420
7497
  return `Timestamp ${mediaStart} - ${mediaEnd}`;
7421
7498
  }
@@ -7428,14 +7505,14 @@ var buildProvenanceLabel = (metadata) => {
7428
7505
  if (!metadata) {
7429
7506
  return;
7430
7507
  }
7431
- const threadTopic = getContextString(metadata.threadTopic);
7432
- const from = getContextString(metadata.from);
7508
+ const threadTopic = getContextString2(metadata.threadTopic);
7509
+ const from = getContextString2(metadata.from);
7433
7510
  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);
7511
+ const speaker = getContextString2(metadata.speaker);
7512
+ const mediaKind = getContextString2(metadata.mediaKind);
7513
+ const transcriptSource = getContextString2(metadata.transcriptSource);
7514
+ const pdfTextMode = getContextString2(metadata.pdfTextMode);
7515
+ const ocrEngine = getContextString2(metadata.ocrEngine);
7439
7516
  const labels = [
7440
7517
  pdfTextMode ? `PDF ${pdfTextMode}` : "",
7441
7518
  ocrEngine ? `OCR ${ocrEngine}` : "",
@@ -7485,6 +7562,23 @@ var buildExcerpt = (text, maxLength = 160) => {
7485
7562
  }
7486
7563
  return `${normalized.slice(0, Math.max(0, maxLength - 1)).trimEnd()}\u2026`;
7487
7564
  };
7565
+ var buildGroundingReferenceEvidenceLabel = (reference) => [reference.label, reference.locatorLabel, reference.contextLabel].filter((value) => Boolean(value && value.length > 0)).filter((value, index, values) => values.findIndex((entry) => entry === value) === index).join(" \xB7 ");
7566
+ var buildGroundingReferenceEvidenceSummary = (reference) => [
7567
+ reference.source ?? reference.title ?? reference.chunkId,
7568
+ reference.provenanceLabel
7569
+ ].filter((value) => Boolean(value && value.length > 0)).join(" \xB7 ");
7570
+ var buildGroundedAnswerCitationDetail = (reference) => ({
7571
+ contextLabel: reference.contextLabel,
7572
+ evidenceLabel: buildGroundingReferenceEvidenceLabel(reference),
7573
+ evidenceSummary: buildGroundingReferenceEvidenceSummary(reference),
7574
+ excerpt: reference.excerpt,
7575
+ label: reference.label,
7576
+ locatorLabel: reference.locatorLabel,
7577
+ number: reference.number,
7578
+ provenanceLabel: reference.provenanceLabel,
7579
+ source: reference.source,
7580
+ title: reference.title
7581
+ });
7488
7582
  var buildRAGGroundedAnswer = (content, sources) => {
7489
7583
  const references = buildRAGGroundingReferences(sources);
7490
7584
  const referenceMap = new Map(references.map((reference) => [reference.number, reference]));
@@ -7508,11 +7602,14 @@ var buildRAGGroundedAnswer = (content, sources) => {
7508
7602
  ungroundedReferenceNumbers.add(number);
7509
7603
  }
7510
7604
  }
7605
+ const unresolvedNumbers = numbers.filter((number) => !referenceMap.has(number));
7511
7606
  parts.push({
7512
7607
  referenceNumbers: numbers,
7608
+ referenceDetails: resolvedReferences.map(buildGroundedAnswerCitationDetail),
7513
7609
  references: resolvedReferences,
7514
7610
  text: raw,
7515
- type: "citation"
7611
+ type: "citation",
7612
+ unresolvedReferenceNumbers: unresolvedNumbers
7516
7613
  });
7517
7614
  cursor = start + raw.length;
7518
7615
  }
@@ -10400,5 +10497,5 @@ export {
10400
10497
  aiChat
10401
10498
  };
10402
10499
 
10403
- //# debugId=E67FA7078681805C64756E2164756E21
10500
+ //# debugId=B33CC824E07DC89F64756E2164756E21
10404
10501
  //# sourceMappingURL=index.js.map