@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/react/ai/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
|
|
@@ -4123,7 +4252,7 @@ var buildRAGChunkStructure = (metadata) => {
|
|
|
4123
4252
|
return;
|
|
4124
4253
|
}
|
|
4125
4254
|
const sectionPath = Array.isArray(metadata.sectionPath) ? metadata.sectionPath.filter((value) => typeof value === "string" && value.trim().length > 0) : undefined;
|
|
4126
|
-
const sectionKind = metadata.sectionKind === "markdown_heading" || metadata.sectionKind === "html_heading" ? metadata.sectionKind : undefined;
|
|
4255
|
+
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;
|
|
4127
4256
|
const section = {
|
|
4128
4257
|
depth: getContextNumber2(metadata.sectionDepth),
|
|
4129
4258
|
kind: sectionKind,
|
|
@@ -4152,6 +4281,52 @@ var buildExcerpt2 = (text, maxLength = 160) => {
|
|
|
4152
4281
|
}
|
|
4153
4282
|
return `${normalized.slice(0, Math.max(0, maxLength - 1)).trimEnd()}\u2026`;
|
|
4154
4283
|
};
|
|
4284
|
+
var buildRAGChunkExcerpts = (chunks, activeChunkId) => {
|
|
4285
|
+
if (chunks.length === 0) {
|
|
4286
|
+
return;
|
|
4287
|
+
}
|
|
4288
|
+
const graph = buildRAGChunkGraph(chunks.map((chunk) => ({
|
|
4289
|
+
chunkId: chunk.chunkId,
|
|
4290
|
+
metadata: chunk.metadata,
|
|
4291
|
+
structure: chunk.structure
|
|
4292
|
+
})));
|
|
4293
|
+
const navigation = buildRAGChunkGraphNavigation(graph, activeChunkId);
|
|
4294
|
+
const activeChunk = chunks.find((chunk) => chunk.chunkId === navigation.activeChunkId) ?? chunks[0];
|
|
4295
|
+
if (!activeChunk) {
|
|
4296
|
+
return;
|
|
4297
|
+
}
|
|
4298
|
+
const chunkMap = new Map(chunks.map((chunk) => [chunk.chunkId, chunk]));
|
|
4299
|
+
const orderedWindowIds = [
|
|
4300
|
+
navigation.previousNode?.chunkId,
|
|
4301
|
+
activeChunk.chunkId,
|
|
4302
|
+
navigation.nextNode?.chunkId
|
|
4303
|
+
].filter((chunkId, index, ids) => Boolean(chunkId) && ids.indexOf(chunkId) === index);
|
|
4304
|
+
const orderedSectionIds = navigation.sectionNodes.length > 0 ? navigation.sectionNodes.map((node) => node.chunkId) : [activeChunk.chunkId];
|
|
4305
|
+
const collectText = (chunkIds) => chunkIds.map((chunkId) => chunkMap.get(chunkId)?.text).filter((text) => typeof text === "string").join(`
|
|
4306
|
+
|
|
4307
|
+
`);
|
|
4308
|
+
return {
|
|
4309
|
+
chunkExcerpt: buildExcerpt2(activeChunk.text, 160),
|
|
4310
|
+
sectionExcerpt: buildExcerpt2(collectText(orderedSectionIds), 320),
|
|
4311
|
+
windowExcerpt: buildExcerpt2(collectText(orderedWindowIds), 240)
|
|
4312
|
+
};
|
|
4313
|
+
};
|
|
4314
|
+
var buildRAGPreferredExcerpt = (excerpts, structure) => {
|
|
4315
|
+
if (!excerpts) {
|
|
4316
|
+
return "";
|
|
4317
|
+
}
|
|
4318
|
+
const chunkLength = excerpts.chunkExcerpt.trim().length;
|
|
4319
|
+
const sectionChunkCount = structure?.sequence?.sectionChunkCount ?? 1;
|
|
4320
|
+
if (sectionChunkCount > 1 && chunkLength > 0 && chunkLength < 72) {
|
|
4321
|
+
if (sectionChunkCount <= 3 && excerpts.sectionExcerpt.trim().length > 0) {
|
|
4322
|
+
return excerpts.sectionExcerpt;
|
|
4323
|
+
}
|
|
4324
|
+
if (excerpts.windowExcerpt.trim().length > 0) {
|
|
4325
|
+
return excerpts.windowExcerpt;
|
|
4326
|
+
}
|
|
4327
|
+
}
|
|
4328
|
+
return excerpts.chunkExcerpt;
|
|
4329
|
+
};
|
|
4155
4330
|
var buildRAGChunkGraph = (chunks) => {
|
|
4156
4331
|
const nodes = [];
|
|
4157
4332
|
const edges = [];
|
|
@@ -4363,6 +4538,7 @@ var buildRAGSourceSummaries = (sources) => {
|
|
|
4363
4538
|
return sourceGroups.map((group) => {
|
|
4364
4539
|
const groupCitations = citations.filter((citation) => group.chunks.some((chunk) => chunk.chunkId === citation.chunkId));
|
|
4365
4540
|
const leadChunk = group.chunks.slice().sort((left, right) => right.score - left.score)[0];
|
|
4541
|
+
const excerpts = leadChunk ? buildRAGChunkExcerpts(group.chunks, leadChunk.chunkId) : undefined;
|
|
4366
4542
|
return {
|
|
4367
4543
|
bestScore: group.bestScore,
|
|
4368
4544
|
citationNumbers: groupCitations.map((citation) => citationReferenceMap[citation.chunkId] ?? 0),
|
|
@@ -4370,7 +4546,8 @@ var buildRAGSourceSummaries = (sources) => {
|
|
|
4370
4546
|
chunkIds: group.chunks.map((chunk) => chunk.chunkId),
|
|
4371
4547
|
contextLabel: leadChunk?.labels?.contextLabel ?? buildContextLabel2(leadChunk?.metadata),
|
|
4372
4548
|
count: group.count,
|
|
4373
|
-
excerpt: buildExcerpt2(leadChunk?.text ?? ""),
|
|
4549
|
+
excerpt: buildRAGPreferredExcerpt(excerpts, leadChunk?.structure ?? buildRAGChunkStructure(leadChunk?.metadata)) || buildExcerpt2(leadChunk?.text ?? ""),
|
|
4550
|
+
excerpts,
|
|
4374
4551
|
key: group.key,
|
|
4375
4552
|
label: group.label,
|
|
4376
4553
|
locatorLabel: leadChunk?.labels?.locatorLabel ?? buildLocatorLabel2(leadChunk?.metadata, leadChunk?.source, leadChunk?.title),
|
|
@@ -7866,5 +8043,5 @@ export {
|
|
|
7866
8043
|
AIStreamProvider
|
|
7867
8044
|
};
|
|
7868
8045
|
|
|
7869
|
-
//# debugId=
|
|
8046
|
+
//# debugId=541FECAAA8238C6E64756E2164756E21
|
|
7870
8047
|
//# sourceMappingURL=index.js.map
|