@absolutejs/absolute 0.19.0-beta.606 → 0.19.0-beta.608
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/client/index.js +195 -18
- package/dist/ai/client/index.js.map +4 -4
- package/dist/ai/client/ui.js +197 -18
- package/dist/ai/client/ui.js.map +4 -4
- package/dist/ai/index.js +424 -28
- package/dist/ai/index.js.map +7 -7
- package/dist/ai/rag/quality.js +145 -16
- package/dist/ai/rag/quality.js.map +3 -3
- package/dist/ai/rag/ui.js +197 -18
- package/dist/ai/rag/ui.js.map +4 -4
- package/dist/ai-client/angular/ai/index.js +194 -17
- package/dist/ai-client/react/ai/index.js +194 -17
- package/dist/ai-client/vue/ai/index.js +194 -17
- package/dist/angular/ai/index.js +195 -18
- package/dist/angular/ai/index.js.map +4 -4
- package/dist/react/ai/index.js +195 -18
- package/dist/react/ai/index.js.map +6 -6
- package/dist/src/ai/client/ui.d.ts +1 -1
- package/dist/src/ai/rag/grounding.d.ts +2 -1
- package/dist/src/ai/rag/index.d.ts +1 -1
- package/dist/src/ai/rag/presentation.d.ts +6 -3
- package/dist/src/ai/rag/ui.d.ts +1 -1
- package/dist/src/vue/ai/useRAG.d.ts +14 -4
- package/dist/src/vue/ai/useRAGChunkPreview.d.ts +12 -2
- package/dist/src/vue/ai/useRAGSearch.d.ts +2 -2
- package/dist/svelte/ai/index.js +195 -18
- package/dist/svelte/ai/index.js.map +6 -6
- package/dist/types/ai.d.ts +26 -2
- package/dist/vue/ai/index.js +195 -18
- package/dist/vue/ai/index.js.map +5 -5
- package/package.json +1 -1
package/dist/ai/client/index.js
CHANGED
|
@@ -347,6 +347,56 @@ var buildExcerpt = (text, maxLength = 160) => {
|
|
|
347
347
|
}
|
|
348
348
|
return `${normalized.slice(0, Math.max(0, maxLength - 1)).trimEnd()}\u2026`;
|
|
349
349
|
};
|
|
350
|
+
var selectPreferredExcerpt = (excerpts, sectionChunkCount) => {
|
|
351
|
+
if (!excerpts) {
|
|
352
|
+
return "";
|
|
353
|
+
}
|
|
354
|
+
const chunkExcerpt = excerpts.chunkExcerpt?.trim() ?? "";
|
|
355
|
+
const windowExcerpt = excerpts.windowExcerpt?.trim() ?? "";
|
|
356
|
+
const sectionExcerpt = excerpts.sectionExcerpt?.trim() ?? "";
|
|
357
|
+
if (sectionChunkCount && sectionChunkCount > 1 && chunkExcerpt.length > 0 && chunkExcerpt.length < 72) {
|
|
358
|
+
if (sectionChunkCount <= 3 && sectionExcerpt) {
|
|
359
|
+
return sectionExcerpt;
|
|
360
|
+
}
|
|
361
|
+
if (windowExcerpt) {
|
|
362
|
+
return windowExcerpt;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
return chunkExcerpt || windowExcerpt || sectionExcerpt;
|
|
366
|
+
};
|
|
367
|
+
var buildGroundingChunkExcerpts = (sources, activeChunkId) => {
|
|
368
|
+
if (sources.length === 0) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
const activeSource = (activeChunkId ? sources.find((source) => source.chunkId === activeChunkId) : undefined) ?? sources[0];
|
|
372
|
+
if (!activeSource) {
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
const chunkMap = new Map(sources.map((source) => [source.chunkId, source]));
|
|
376
|
+
const activeMetadata = activeSource.metadata ?? {};
|
|
377
|
+
const previousChunkId = getContextString(activeMetadata.previousChunkId);
|
|
378
|
+
const nextChunkId = getContextString(activeMetadata.nextChunkId);
|
|
379
|
+
const sectionChunkId = getContextString(activeMetadata.sectionChunkId);
|
|
380
|
+
const sectionSources = sectionChunkId ? sources.filter((source) => getContextString(source.metadata?.sectionChunkId) === sectionChunkId).sort((left, right) => {
|
|
381
|
+
const leftIndex = getContextNumber(left.metadata?.sectionChunkIndex) ?? Number.MAX_SAFE_INTEGER;
|
|
382
|
+
const rightIndex = getContextNumber(right.metadata?.sectionChunkIndex) ?? Number.MAX_SAFE_INTEGER;
|
|
383
|
+
if (leftIndex !== rightIndex) {
|
|
384
|
+
return leftIndex - rightIndex;
|
|
385
|
+
}
|
|
386
|
+
return left.chunkId.localeCompare(right.chunkId);
|
|
387
|
+
}) : [activeSource];
|
|
388
|
+
const collectText = (chunkIds) => chunkIds.map((chunkId) => chunkMap.get(chunkId)?.text).filter((text) => typeof text === "string").join(`
|
|
389
|
+
|
|
390
|
+
`);
|
|
391
|
+
const orderedWindowIds = [previousChunkId, activeSource.chunkId, nextChunkId].filter((chunkId, index, values) => Boolean(chunkId) && values.indexOf(chunkId) === index);
|
|
392
|
+
return {
|
|
393
|
+
chunkExcerpt: buildExcerpt(activeSource.text, 160),
|
|
394
|
+
sectionExcerpt: buildExcerpt(sectionSources.map((source) => source.text).join(`
|
|
395
|
+
|
|
396
|
+
`), 320),
|
|
397
|
+
windowExcerpt: buildExcerpt(collectText(orderedWindowIds), 240)
|
|
398
|
+
};
|
|
399
|
+
};
|
|
350
400
|
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 ");
|
|
351
401
|
var buildGroundingReferenceEvidenceSummary = (reference) => [
|
|
352
402
|
reference.source ?? reference.title ?? reference.chunkId,
|
|
@@ -354,11 +404,19 @@ var buildGroundingReferenceEvidenceSummary = (reference) => [
|
|
|
354
404
|
reference.contextLabel,
|
|
355
405
|
reference.provenanceLabel
|
|
356
406
|
].filter((value) => Boolean(value && value.length > 0)).filter((value, index, values) => values.findIndex((entry) => entry === value) === index).join(" \xB7 ");
|
|
407
|
+
var buildGroundingSectionKey = (reference) => reference.contextLabel ?? reference.locatorLabel ?? reference.label ?? reference.source ?? reference.chunkId;
|
|
408
|
+
var buildGroundingSectionSummaryLine = (reference) => [
|
|
409
|
+
reference.source ?? reference.title ?? reference.chunkId,
|
|
410
|
+
reference.locatorLabel,
|
|
411
|
+
reference.contextLabel,
|
|
412
|
+
reference.provenanceLabel
|
|
413
|
+
].filter((value) => Boolean(value && value.length > 0)).filter((value, index, values) => values.findIndex((entry) => entry === value) === index).join(" \xB7 ");
|
|
357
414
|
var buildGroundedAnswerCitationDetail = (reference) => ({
|
|
358
415
|
contextLabel: reference.contextLabel,
|
|
359
416
|
evidenceLabel: buildGroundingReferenceEvidenceLabel(reference),
|
|
360
417
|
evidenceSummary: buildGroundingReferenceEvidenceSummary(reference),
|
|
361
|
-
excerpt: reference.excerpt,
|
|
418
|
+
excerpt: selectPreferredExcerpt(reference.excerpts, getContextNumber(reference.metadata?.sectionChunkCount)) || reference.excerpt,
|
|
419
|
+
excerpts: reference.excerpts,
|
|
362
420
|
label: reference.label,
|
|
363
421
|
locatorLabel: reference.locatorLabel,
|
|
364
422
|
number: reference.number,
|
|
@@ -444,26 +502,97 @@ var buildRAGGroundedAnswer = (content, sources) => {
|
|
|
444
502
|
hasCitations,
|
|
445
503
|
parts,
|
|
446
504
|
references,
|
|
505
|
+
sectionSummaries: buildRAGGroundedAnswerSectionSummaries(references),
|
|
447
506
|
ungroundedReferenceNumbers: [...ungroundedReferenceNumbers].sort((left, right) => left - right)
|
|
448
507
|
};
|
|
449
508
|
};
|
|
509
|
+
var buildRAGGroundedAnswerSectionSummaries = (references) => {
|
|
510
|
+
const groups = new Map;
|
|
511
|
+
for (const reference of references) {
|
|
512
|
+
const key = buildGroundingSectionKey(reference);
|
|
513
|
+
const existing = groups.get(key);
|
|
514
|
+
if (!existing) {
|
|
515
|
+
const excerpts = reference.excerpts ? {
|
|
516
|
+
chunkExcerpt: reference.excerpts.chunkExcerpt,
|
|
517
|
+
sectionExcerpt: reference.excerpts.sectionExcerpt,
|
|
518
|
+
windowExcerpt: reference.excerpts.windowExcerpt
|
|
519
|
+
} : undefined;
|
|
520
|
+
groups.set(key, {
|
|
521
|
+
chunkIds: [reference.chunkId],
|
|
522
|
+
contextLabel: reference.contextLabel,
|
|
523
|
+
count: 1,
|
|
524
|
+
excerpt: selectPreferredExcerpt(excerpts, getContextNumber(reference.metadata?.sectionChunkCount)) || excerpts?.sectionExcerpt || reference.excerpt,
|
|
525
|
+
excerpts,
|
|
526
|
+
key,
|
|
527
|
+
label: key,
|
|
528
|
+
locatorLabel: reference.locatorLabel,
|
|
529
|
+
provenanceLabel: reference.provenanceLabel,
|
|
530
|
+
referenceNumbers: [reference.number],
|
|
531
|
+
references: [reference],
|
|
532
|
+
summary: buildGroundingSectionSummaryLine(reference) || reference.label || reference.chunkId
|
|
533
|
+
});
|
|
534
|
+
continue;
|
|
535
|
+
}
|
|
536
|
+
existing.count += 1;
|
|
537
|
+
if (!existing.chunkIds.includes(reference.chunkId)) {
|
|
538
|
+
existing.chunkIds.push(reference.chunkId);
|
|
539
|
+
}
|
|
540
|
+
if (!existing.referenceNumbers.includes(reference.number)) {
|
|
541
|
+
existing.referenceNumbers.push(reference.number);
|
|
542
|
+
}
|
|
543
|
+
existing.references.push(reference);
|
|
544
|
+
if (!existing.contextLabel && reference.contextLabel) {
|
|
545
|
+
existing.contextLabel = reference.contextLabel;
|
|
546
|
+
}
|
|
547
|
+
if (!existing.locatorLabel && reference.locatorLabel) {
|
|
548
|
+
existing.locatorLabel = reference.locatorLabel;
|
|
549
|
+
}
|
|
550
|
+
if (!existing.provenanceLabel && reference.provenanceLabel) {
|
|
551
|
+
existing.provenanceLabel = reference.provenanceLabel;
|
|
552
|
+
}
|
|
553
|
+
if (!existing.excerpts && reference.excerpts) {
|
|
554
|
+
existing.excerpts = {
|
|
555
|
+
chunkExcerpt: reference.excerpts.chunkExcerpt,
|
|
556
|
+
sectionExcerpt: reference.excerpts.sectionExcerpt,
|
|
557
|
+
windowExcerpt: reference.excerpts.windowExcerpt
|
|
558
|
+
};
|
|
559
|
+
existing.excerpt = reference.excerpts.sectionExcerpt;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
return [...groups.values()].map((group) => ({
|
|
563
|
+
...group,
|
|
564
|
+
referenceNumbers: [...group.referenceNumbers].sort((left, right) => left - right),
|
|
565
|
+
references: group.references.slice().sort((left, right) => left.number - right.number)
|
|
566
|
+
})).sort((left, right) => {
|
|
567
|
+
const leftFirst = left.referenceNumbers[0] ?? Number.POSITIVE_INFINITY;
|
|
568
|
+
const rightFirst = right.referenceNumbers[0] ?? Number.POSITIVE_INFINITY;
|
|
569
|
+
if (leftFirst !== rightFirst) {
|
|
570
|
+
return leftFirst - rightFirst;
|
|
571
|
+
}
|
|
572
|
+
return left.label.localeCompare(right.label);
|
|
573
|
+
});
|
|
574
|
+
};
|
|
450
575
|
var buildRAGGroundingReferences = (sources) => {
|
|
451
576
|
const citations = buildRAGCitations(sources);
|
|
452
577
|
const citationReferenceMap = buildRAGCitationReferenceMap(citations);
|
|
453
|
-
return citations.map((citation) =>
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
578
|
+
return citations.map((citation) => {
|
|
579
|
+
const excerpts = buildGroundingChunkExcerpts(sources, citation.chunkId);
|
|
580
|
+
return {
|
|
581
|
+
chunkId: citation.chunkId,
|
|
582
|
+
contextLabel: citation.contextLabel ?? buildContextLabel(citation.metadata),
|
|
583
|
+
excerpt: selectPreferredExcerpt(excerpts, getContextNumber(citation.metadata?.sectionChunkCount)) || excerpts?.chunkExcerpt || buildExcerpt(citation.text),
|
|
584
|
+
excerpts,
|
|
585
|
+
label: citation.label,
|
|
586
|
+
locatorLabel: citation.locatorLabel ?? buildLocatorLabel(citation.metadata, citation.source, citation.title),
|
|
587
|
+
metadata: citation.metadata,
|
|
588
|
+
number: citationReferenceMap[citation.chunkId] ?? 0,
|
|
589
|
+
provenanceLabel: citation.provenanceLabel ?? buildProvenanceLabel(citation.metadata),
|
|
590
|
+
score: citation.score,
|
|
591
|
+
source: citation.source,
|
|
592
|
+
text: citation.text,
|
|
593
|
+
title: citation.title
|
|
594
|
+
};
|
|
595
|
+
});
|
|
467
596
|
};
|
|
468
597
|
|
|
469
598
|
// src/ai/rag/quality.ts
|
|
@@ -4720,7 +4849,7 @@ var buildRAGChunkStructure = (metadata) => {
|
|
|
4720
4849
|
return;
|
|
4721
4850
|
}
|
|
4722
4851
|
const sectionPath = Array.isArray(metadata.sectionPath) ? metadata.sectionPath.filter((value) => typeof value === "string" && value.trim().length > 0) : undefined;
|
|
4723
|
-
const sectionKind = metadata.sectionKind === "markdown_heading" || metadata.sectionKind === "html_heading" ? metadata.sectionKind : undefined;
|
|
4852
|
+
const sectionKind = metadata.sectionKind === "markdown_heading" || metadata.sectionKind === "html_heading" || metadata.sectionKind === "office_heading" || metadata.sectionKind === "spreadsheet_rows" || metadata.sectionKind === "presentation_slide" ? metadata.sectionKind : undefined;
|
|
4724
4853
|
const section = {
|
|
4725
4854
|
depth: getContextNumber2(metadata.sectionDepth),
|
|
4726
4855
|
kind: sectionKind,
|
|
@@ -4749,6 +4878,52 @@ var buildExcerpt2 = (text, maxLength = 160) => {
|
|
|
4749
4878
|
}
|
|
4750
4879
|
return `${normalized.slice(0, Math.max(0, maxLength - 1)).trimEnd()}\u2026`;
|
|
4751
4880
|
};
|
|
4881
|
+
var buildRAGChunkExcerpts = (chunks, activeChunkId) => {
|
|
4882
|
+
if (chunks.length === 0) {
|
|
4883
|
+
return;
|
|
4884
|
+
}
|
|
4885
|
+
const graph = buildRAGChunkGraph(chunks.map((chunk) => ({
|
|
4886
|
+
chunkId: chunk.chunkId,
|
|
4887
|
+
metadata: chunk.metadata,
|
|
4888
|
+
structure: chunk.structure
|
|
4889
|
+
})));
|
|
4890
|
+
const navigation = buildRAGChunkGraphNavigation(graph, activeChunkId);
|
|
4891
|
+
const activeChunk = chunks.find((chunk) => chunk.chunkId === navigation.activeChunkId) ?? chunks[0];
|
|
4892
|
+
if (!activeChunk) {
|
|
4893
|
+
return;
|
|
4894
|
+
}
|
|
4895
|
+
const chunkMap = new Map(chunks.map((chunk) => [chunk.chunkId, chunk]));
|
|
4896
|
+
const orderedWindowIds = [
|
|
4897
|
+
navigation.previousNode?.chunkId,
|
|
4898
|
+
activeChunk.chunkId,
|
|
4899
|
+
navigation.nextNode?.chunkId
|
|
4900
|
+
].filter((chunkId, index, ids) => Boolean(chunkId) && ids.indexOf(chunkId) === index);
|
|
4901
|
+
const orderedSectionIds = navigation.sectionNodes.length > 0 ? navigation.sectionNodes.map((node) => node.chunkId) : [activeChunk.chunkId];
|
|
4902
|
+
const collectText = (chunkIds) => chunkIds.map((chunkId) => chunkMap.get(chunkId)?.text).filter((text) => typeof text === "string").join(`
|
|
4903
|
+
|
|
4904
|
+
`);
|
|
4905
|
+
return {
|
|
4906
|
+
chunkExcerpt: buildExcerpt2(activeChunk.text, 160),
|
|
4907
|
+
sectionExcerpt: buildExcerpt2(collectText(orderedSectionIds), 320),
|
|
4908
|
+
windowExcerpt: buildExcerpt2(collectText(orderedWindowIds), 240)
|
|
4909
|
+
};
|
|
4910
|
+
};
|
|
4911
|
+
var buildRAGPreferredExcerpt = (excerpts, structure) => {
|
|
4912
|
+
if (!excerpts) {
|
|
4913
|
+
return "";
|
|
4914
|
+
}
|
|
4915
|
+
const chunkLength = excerpts.chunkExcerpt.trim().length;
|
|
4916
|
+
const sectionChunkCount = structure?.sequence?.sectionChunkCount ?? 1;
|
|
4917
|
+
if (sectionChunkCount > 1 && chunkLength > 0 && chunkLength < 72) {
|
|
4918
|
+
if (sectionChunkCount <= 3 && excerpts.sectionExcerpt.trim().length > 0) {
|
|
4919
|
+
return excerpts.sectionExcerpt;
|
|
4920
|
+
}
|
|
4921
|
+
if (excerpts.windowExcerpt.trim().length > 0) {
|
|
4922
|
+
return excerpts.windowExcerpt;
|
|
4923
|
+
}
|
|
4924
|
+
}
|
|
4925
|
+
return excerpts.chunkExcerpt;
|
|
4926
|
+
};
|
|
4752
4927
|
var buildRAGChunkGraph = (chunks) => {
|
|
4753
4928
|
const nodes = [];
|
|
4754
4929
|
const edges = [];
|
|
@@ -4960,6 +5135,7 @@ var buildRAGSourceSummaries = (sources) => {
|
|
|
4960
5135
|
return sourceGroups.map((group) => {
|
|
4961
5136
|
const groupCitations = citations.filter((citation) => group.chunks.some((chunk) => chunk.chunkId === citation.chunkId));
|
|
4962
5137
|
const leadChunk = group.chunks.slice().sort((left, right) => right.score - left.score)[0];
|
|
5138
|
+
const excerpts = leadChunk ? buildRAGChunkExcerpts(group.chunks, leadChunk.chunkId) : undefined;
|
|
4963
5139
|
return {
|
|
4964
5140
|
bestScore: group.bestScore,
|
|
4965
5141
|
citationNumbers: groupCitations.map((citation) => citationReferenceMap[citation.chunkId] ?? 0),
|
|
@@ -4967,7 +5143,8 @@ var buildRAGSourceSummaries = (sources) => {
|
|
|
4967
5143
|
chunkIds: group.chunks.map((chunk) => chunk.chunkId),
|
|
4968
5144
|
contextLabel: leadChunk?.labels?.contextLabel ?? buildContextLabel2(leadChunk?.metadata),
|
|
4969
5145
|
count: group.count,
|
|
4970
|
-
excerpt: buildExcerpt2(leadChunk?.text ?? ""),
|
|
5146
|
+
excerpt: buildRAGPreferredExcerpt(excerpts, leadChunk?.structure ?? buildRAGChunkStructure(leadChunk?.metadata)) || buildExcerpt2(leadChunk?.text ?? ""),
|
|
5147
|
+
excerpts,
|
|
4971
5148
|
key: group.key,
|
|
4972
5149
|
label: group.label,
|
|
4973
5150
|
locatorLabel: leadChunk?.labels?.locatorLabel ?? buildLocatorLabel2(leadChunk?.metadata, leadChunk?.source, leadChunk?.title),
|
|
@@ -6900,5 +7077,5 @@ export {
|
|
|
6900
7077
|
buildRAGEvaluationLeaderboard
|
|
6901
7078
|
};
|
|
6902
7079
|
|
|
6903
|
-
//# debugId=
|
|
7080
|
+
//# debugId=11D58D8CBC09035E64756E2164756E21
|
|
6904
7081
|
//# sourceMappingURL=index.js.map
|