@absolutejs/absolute 0.19.0-beta.607 → 0.19.0-beta.609
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 +142 -18
- package/dist/ai/client/index.js.map +4 -4
- package/dist/ai/client/ui.js +143 -18
- package/dist/ai/client/ui.js.map +4 -4
- package/dist/ai/index.js +371 -28
- package/dist/ai/index.js.map +7 -7
- package/dist/ai/rag/quality.js +92 -16
- package/dist/ai/rag/quality.js.map +3 -3
- package/dist/ai/rag/ui.js +143 -18
- package/dist/ai/rag/ui.js.map +4 -4
- package/dist/ai-client/angular/ai/index.js +141 -17
- package/dist/ai-client/react/ai/index.js +141 -17
- package/dist/ai-client/vue/ai/index.js +141 -17
- package/dist/angular/ai/index.js +142 -18
- package/dist/angular/ai/index.js.map +4 -4
- package/dist/angular/index.js +2 -2
- package/dist/angular/index.js.map +1 -1
- package/dist/angular/server.js +2 -2
- package/dist/angular/server.js.map +1 -1
- package/dist/build.js +2 -2
- package/dist/build.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/react/ai/index.js +142 -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/index.d.ts +1 -1
- package/dist/src/ai/rag/presentation.d.ts +4 -1
- 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 +142 -18
- package/dist/svelte/ai/index.js.map +6 -6
- package/dist/types/ai.d.ts +15 -2
- package/dist/vue/ai/index.js +142 -18
- package/dist/vue/ai/index.js.map +5 -5
- package/package.json +1 -1
package/dist/types/ai.d.ts
CHANGED
|
@@ -29,6 +29,8 @@ export type RAGCitation = {
|
|
|
29
29
|
chunkId: string;
|
|
30
30
|
score: number;
|
|
31
31
|
text: string;
|
|
32
|
+
excerpt?: string;
|
|
33
|
+
excerpts?: RAGChunkExcerpts;
|
|
32
34
|
source?: string;
|
|
33
35
|
title?: string;
|
|
34
36
|
contextLabel?: string;
|
|
@@ -45,6 +47,7 @@ export type RAGSourceSummary = {
|
|
|
45
47
|
bestScore: number;
|
|
46
48
|
count: number;
|
|
47
49
|
excerpt: string;
|
|
50
|
+
excerpts?: RAGChunkExcerpts;
|
|
48
51
|
chunkIds: string[];
|
|
49
52
|
citationNumbers: number[];
|
|
50
53
|
citations: RAGCitation[];
|
|
@@ -62,6 +65,7 @@ export type RAGGroundingReference = {
|
|
|
62
65
|
score: number;
|
|
63
66
|
text: string;
|
|
64
67
|
excerpt: string;
|
|
68
|
+
excerpts?: RAGChunkExcerpts;
|
|
65
69
|
contextLabel?: string;
|
|
66
70
|
provenanceLabel?: string;
|
|
67
71
|
locatorLabel?: string;
|
|
@@ -73,6 +77,7 @@ export type RAGGroundedAnswerCitationDetail = {
|
|
|
73
77
|
source?: string;
|
|
74
78
|
title?: string;
|
|
75
79
|
excerpt: string;
|
|
80
|
+
excerpts?: RAGChunkExcerpts;
|
|
76
81
|
contextLabel?: string;
|
|
77
82
|
provenanceLabel?: string;
|
|
78
83
|
locatorLabel?: string;
|
|
@@ -84,6 +89,8 @@ export type RAGGroundedAnswerSectionSummary = {
|
|
|
84
89
|
label: string;
|
|
85
90
|
summary: string;
|
|
86
91
|
count: number;
|
|
92
|
+
excerpt?: string;
|
|
93
|
+
excerpts?: RAGChunkExcerpts;
|
|
87
94
|
chunkIds: string[];
|
|
88
95
|
referenceNumbers: number[];
|
|
89
96
|
references: RAGGroundingReference[];
|
|
@@ -427,9 +434,15 @@ export type RAGDocumentChunkPreview = {
|
|
|
427
434
|
normalizedText: string;
|
|
428
435
|
chunks: Array<RAGDocumentChunk & {
|
|
429
436
|
labels?: RAGSourceLabels;
|
|
437
|
+
excerpts?: RAGChunkExcerpts;
|
|
430
438
|
structure?: RAGChunkStructure;
|
|
431
439
|
}>;
|
|
432
440
|
};
|
|
441
|
+
export type RAGChunkExcerpts = {
|
|
442
|
+
chunkExcerpt: string;
|
|
443
|
+
windowExcerpt: string;
|
|
444
|
+
sectionExcerpt: string;
|
|
445
|
+
};
|
|
433
446
|
export type RAGSourceLabels = {
|
|
434
447
|
contextLabel?: string;
|
|
435
448
|
locatorLabel?: string;
|
|
@@ -439,7 +452,7 @@ export type RAGChunkSection = {
|
|
|
439
452
|
title?: string;
|
|
440
453
|
path?: string[];
|
|
441
454
|
depth?: number;
|
|
442
|
-
kind?: 'markdown_heading' | 'html_heading';
|
|
455
|
+
kind?: 'markdown_heading' | 'html_heading' | 'office_heading' | 'spreadsheet_rows' | 'presentation_slide';
|
|
443
456
|
};
|
|
444
457
|
export type RAGChunkSequence = {
|
|
445
458
|
sectionChunkId?: string;
|
|
@@ -473,7 +486,7 @@ export type RAGChunkGraphSectionGroup = {
|
|
|
473
486
|
title?: string;
|
|
474
487
|
path?: string[];
|
|
475
488
|
depth?: number;
|
|
476
|
-
kind?: 'markdown_heading' | 'html_heading';
|
|
489
|
+
kind?: 'markdown_heading' | 'html_heading' | 'office_heading' | 'spreadsheet_rows' | 'presentation_slide';
|
|
477
490
|
chunkIds: string[];
|
|
478
491
|
chunkCount: number;
|
|
479
492
|
leadChunkId?: string;
|
package/dist/vue/ai/index.js
CHANGED
|
@@ -347,6 +347,60 @@ 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 = [
|
|
392
|
+
previousChunkId,
|
|
393
|
+
activeSource.chunkId,
|
|
394
|
+
nextChunkId
|
|
395
|
+
].filter((chunkId, index, values) => Boolean(chunkId) && values.indexOf(chunkId) === index);
|
|
396
|
+
return {
|
|
397
|
+
chunkExcerpt: buildExcerpt(activeSource.text, 160),
|
|
398
|
+
sectionExcerpt: buildExcerpt(sectionSources.map((source) => source.text).join(`
|
|
399
|
+
|
|
400
|
+
`), 320),
|
|
401
|
+
windowExcerpt: buildExcerpt(collectText(orderedWindowIds), 240)
|
|
402
|
+
};
|
|
403
|
+
};
|
|
350
404
|
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
405
|
var buildGroundingReferenceEvidenceSummary = (reference) => [
|
|
352
406
|
reference.source ?? reference.title ?? reference.chunkId,
|
|
@@ -365,7 +419,8 @@ var buildGroundedAnswerCitationDetail = (reference) => ({
|
|
|
365
419
|
contextLabel: reference.contextLabel,
|
|
366
420
|
evidenceLabel: buildGroundingReferenceEvidenceLabel(reference),
|
|
367
421
|
evidenceSummary: buildGroundingReferenceEvidenceSummary(reference),
|
|
368
|
-
excerpt: reference.excerpt,
|
|
422
|
+
excerpt: selectPreferredExcerpt(reference.excerpts, getContextNumber(reference.metadata?.sectionChunkCount)) || reference.excerpt,
|
|
423
|
+
excerpts: reference.excerpts,
|
|
369
424
|
label: reference.label,
|
|
370
425
|
locatorLabel: reference.locatorLabel,
|
|
371
426
|
number: reference.number,
|
|
@@ -385,6 +440,8 @@ var buildRAGCitations = (sources) => {
|
|
|
385
440
|
unique.set(key, {
|
|
386
441
|
chunkId: source.chunkId,
|
|
387
442
|
contextLabel: source.labels?.contextLabel ?? buildContextLabel(source.metadata),
|
|
443
|
+
excerpt: selectPreferredExcerpt(buildGroundingChunkExcerpts(sources, source.chunkId), getContextNumber(source.metadata?.sectionChunkCount)) || buildExcerpt(source.text),
|
|
444
|
+
excerpts: buildGroundingChunkExcerpts(sources, source.chunkId),
|
|
388
445
|
key,
|
|
389
446
|
label: buildSourceLabel(source),
|
|
390
447
|
locatorLabel: source.labels?.locatorLabel ?? buildLocatorLabel(source.metadata, source.source, source.title),
|
|
@@ -461,10 +518,17 @@ var buildRAGGroundedAnswerSectionSummaries = (references) => {
|
|
|
461
518
|
const key = buildGroundingSectionKey(reference);
|
|
462
519
|
const existing = groups.get(key);
|
|
463
520
|
if (!existing) {
|
|
521
|
+
const excerpts = reference.excerpts ? {
|
|
522
|
+
chunkExcerpt: reference.excerpts.chunkExcerpt,
|
|
523
|
+
sectionExcerpt: reference.excerpts.sectionExcerpt,
|
|
524
|
+
windowExcerpt: reference.excerpts.windowExcerpt
|
|
525
|
+
} : undefined;
|
|
464
526
|
groups.set(key, {
|
|
465
527
|
chunkIds: [reference.chunkId],
|
|
466
528
|
contextLabel: reference.contextLabel,
|
|
467
529
|
count: 1,
|
|
530
|
+
excerpt: selectPreferredExcerpt(excerpts, getContextNumber(reference.metadata?.sectionChunkCount)) || excerpts?.sectionExcerpt || reference.excerpt,
|
|
531
|
+
excerpts,
|
|
468
532
|
key,
|
|
469
533
|
label: key,
|
|
470
534
|
locatorLabel: reference.locatorLabel,
|
|
@@ -492,6 +556,14 @@ var buildRAGGroundedAnswerSectionSummaries = (references) => {
|
|
|
492
556
|
if (!existing.provenanceLabel && reference.provenanceLabel) {
|
|
493
557
|
existing.provenanceLabel = reference.provenanceLabel;
|
|
494
558
|
}
|
|
559
|
+
if (!existing.excerpts && reference.excerpts) {
|
|
560
|
+
existing.excerpts = {
|
|
561
|
+
chunkExcerpt: reference.excerpts.chunkExcerpt,
|
|
562
|
+
sectionExcerpt: reference.excerpts.sectionExcerpt,
|
|
563
|
+
windowExcerpt: reference.excerpts.windowExcerpt
|
|
564
|
+
};
|
|
565
|
+
existing.excerpt = reference.excerpts.sectionExcerpt;
|
|
566
|
+
}
|
|
495
567
|
}
|
|
496
568
|
return [...groups.values()].map((group) => ({
|
|
497
569
|
...group,
|
|
@@ -509,20 +581,24 @@ var buildRAGGroundedAnswerSectionSummaries = (references) => {
|
|
|
509
581
|
var buildRAGGroundingReferences = (sources) => {
|
|
510
582
|
const citations = buildRAGCitations(sources);
|
|
511
583
|
const citationReferenceMap = buildRAGCitationReferenceMap(citations);
|
|
512
|
-
return citations.map((citation) =>
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
584
|
+
return citations.map((citation) => {
|
|
585
|
+
const excerpts = buildGroundingChunkExcerpts(sources, citation.chunkId);
|
|
586
|
+
return {
|
|
587
|
+
chunkId: citation.chunkId,
|
|
588
|
+
contextLabel: citation.contextLabel ?? buildContextLabel(citation.metadata),
|
|
589
|
+
excerpt: selectPreferredExcerpt(excerpts, getContextNumber(citation.metadata?.sectionChunkCount)) || excerpts?.chunkExcerpt || buildExcerpt(citation.text),
|
|
590
|
+
excerpts,
|
|
591
|
+
label: citation.label,
|
|
592
|
+
locatorLabel: citation.locatorLabel ?? buildLocatorLabel(citation.metadata, citation.source, citation.title),
|
|
593
|
+
metadata: citation.metadata,
|
|
594
|
+
number: citationReferenceMap[citation.chunkId] ?? 0,
|
|
595
|
+
provenanceLabel: citation.provenanceLabel ?? buildProvenanceLabel(citation.metadata),
|
|
596
|
+
score: citation.score,
|
|
597
|
+
source: citation.source,
|
|
598
|
+
text: citation.text,
|
|
599
|
+
title: citation.title
|
|
600
|
+
};
|
|
601
|
+
});
|
|
526
602
|
};
|
|
527
603
|
|
|
528
604
|
// src/ai/rag/quality.ts
|
|
@@ -4182,7 +4258,7 @@ var buildRAGChunkStructure = (metadata) => {
|
|
|
4182
4258
|
return;
|
|
4183
4259
|
}
|
|
4184
4260
|
const sectionPath = Array.isArray(metadata.sectionPath) ? metadata.sectionPath.filter((value) => typeof value === "string" && value.trim().length > 0) : undefined;
|
|
4185
|
-
const sectionKind = metadata.sectionKind === "markdown_heading" || metadata.sectionKind === "html_heading" ? metadata.sectionKind : undefined;
|
|
4261
|
+
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;
|
|
4186
4262
|
const section = {
|
|
4187
4263
|
depth: getContextNumber2(metadata.sectionDepth),
|
|
4188
4264
|
kind: sectionKind,
|
|
@@ -4211,6 +4287,52 @@ var buildExcerpt2 = (text, maxLength = 160) => {
|
|
|
4211
4287
|
}
|
|
4212
4288
|
return `${normalized.slice(0, Math.max(0, maxLength - 1)).trimEnd()}\u2026`;
|
|
4213
4289
|
};
|
|
4290
|
+
var buildRAGChunkExcerpts = (chunks, activeChunkId) => {
|
|
4291
|
+
if (chunks.length === 0) {
|
|
4292
|
+
return;
|
|
4293
|
+
}
|
|
4294
|
+
const graph = buildRAGChunkGraph(chunks.map((chunk) => ({
|
|
4295
|
+
chunkId: chunk.chunkId,
|
|
4296
|
+
metadata: chunk.metadata,
|
|
4297
|
+
structure: chunk.structure
|
|
4298
|
+
})));
|
|
4299
|
+
const navigation = buildRAGChunkGraphNavigation(graph, activeChunkId);
|
|
4300
|
+
const activeChunk = chunks.find((chunk) => chunk.chunkId === navigation.activeChunkId) ?? chunks[0];
|
|
4301
|
+
if (!activeChunk) {
|
|
4302
|
+
return;
|
|
4303
|
+
}
|
|
4304
|
+
const chunkMap = new Map(chunks.map((chunk) => [chunk.chunkId, chunk]));
|
|
4305
|
+
const orderedWindowIds = [
|
|
4306
|
+
navigation.previousNode?.chunkId,
|
|
4307
|
+
activeChunk.chunkId,
|
|
4308
|
+
navigation.nextNode?.chunkId
|
|
4309
|
+
].filter((chunkId, index, ids) => Boolean(chunkId) && ids.indexOf(chunkId) === index);
|
|
4310
|
+
const orderedSectionIds = navigation.sectionNodes.length > 0 ? navigation.sectionNodes.map((node) => node.chunkId) : [activeChunk.chunkId];
|
|
4311
|
+
const collectText = (chunkIds) => chunkIds.map((chunkId) => chunkMap.get(chunkId)?.text).filter((text) => typeof text === "string").join(`
|
|
4312
|
+
|
|
4313
|
+
`);
|
|
4314
|
+
return {
|
|
4315
|
+
chunkExcerpt: buildExcerpt2(activeChunk.text, 160),
|
|
4316
|
+
sectionExcerpt: buildExcerpt2(collectText(orderedSectionIds), 320),
|
|
4317
|
+
windowExcerpt: buildExcerpt2(collectText(orderedWindowIds), 240)
|
|
4318
|
+
};
|
|
4319
|
+
};
|
|
4320
|
+
var buildRAGPreferredExcerpt = (excerpts, structure) => {
|
|
4321
|
+
if (!excerpts) {
|
|
4322
|
+
return "";
|
|
4323
|
+
}
|
|
4324
|
+
const chunkLength = excerpts.chunkExcerpt.trim().length;
|
|
4325
|
+
const sectionChunkCount = structure?.sequence?.sectionChunkCount ?? 1;
|
|
4326
|
+
if (sectionChunkCount > 1 && chunkLength > 0 && chunkLength < 72) {
|
|
4327
|
+
if (sectionChunkCount <= 3 && excerpts.sectionExcerpt.trim().length > 0) {
|
|
4328
|
+
return excerpts.sectionExcerpt;
|
|
4329
|
+
}
|
|
4330
|
+
if (excerpts.windowExcerpt.trim().length > 0) {
|
|
4331
|
+
return excerpts.windowExcerpt;
|
|
4332
|
+
}
|
|
4333
|
+
}
|
|
4334
|
+
return excerpts.chunkExcerpt;
|
|
4335
|
+
};
|
|
4214
4336
|
var buildRAGChunkGraph = (chunks) => {
|
|
4215
4337
|
const nodes = [];
|
|
4216
4338
|
const edges = [];
|
|
@@ -4422,6 +4544,7 @@ var buildRAGSourceSummaries = (sources) => {
|
|
|
4422
4544
|
return sourceGroups.map((group) => {
|
|
4423
4545
|
const groupCitations = citations.filter((citation) => group.chunks.some((chunk) => chunk.chunkId === citation.chunkId));
|
|
4424
4546
|
const leadChunk = group.chunks.slice().sort((left, right) => right.score - left.score)[0];
|
|
4547
|
+
const excerpts = leadChunk ? buildRAGChunkExcerpts(group.chunks, leadChunk.chunkId) : undefined;
|
|
4425
4548
|
return {
|
|
4426
4549
|
bestScore: group.bestScore,
|
|
4427
4550
|
citationNumbers: groupCitations.map((citation) => citationReferenceMap[citation.chunkId] ?? 0),
|
|
@@ -4429,7 +4552,8 @@ var buildRAGSourceSummaries = (sources) => {
|
|
|
4429
4552
|
chunkIds: group.chunks.map((chunk) => chunk.chunkId),
|
|
4430
4553
|
contextLabel: leadChunk?.labels?.contextLabel ?? buildContextLabel2(leadChunk?.metadata),
|
|
4431
4554
|
count: group.count,
|
|
4432
|
-
excerpt: buildExcerpt2(leadChunk?.text ?? ""),
|
|
4555
|
+
excerpt: buildRAGPreferredExcerpt(excerpts, leadChunk?.structure ?? buildRAGChunkStructure(leadChunk?.metadata)) || buildExcerpt2(leadChunk?.text ?? ""),
|
|
4556
|
+
excerpts,
|
|
4433
4557
|
key: group.key,
|
|
4434
4558
|
label: group.label,
|
|
4435
4559
|
locatorLabel: leadChunk?.labels?.locatorLabel ?? buildLocatorLabel2(leadChunk?.metadata, leadChunk?.source, leadChunk?.title),
|
|
@@ -7695,5 +7819,5 @@ export {
|
|
|
7695
7819
|
AIStreamKey
|
|
7696
7820
|
};
|
|
7697
7821
|
|
|
7698
|
-
//# debugId=
|
|
7822
|
+
//# debugId=5F7005C2A51B20F564756E2164756E21
|
|
7699
7823
|
//# sourceMappingURL=index.js.map
|