@absolutejs/absolute 0.19.0-beta.530 → 0.19.0-beta.532
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 +158 -45
- package/dist/ai/client/index.js.map +6 -6
- package/dist/ai/index.js +168 -48
- package/dist/ai/index.js.map +8 -8
- package/dist/ai-client/angular/ai/index.js +15 -2
- package/dist/ai-client/react/ai/index.js +15 -2
- package/dist/ai-client/vue/ai/index.js +15 -2
- package/dist/angular/ai/index.js +16 -3
- package/dist/angular/ai/index.js.map +5 -5
- 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 +158 -45
- package/dist/react/ai/index.js.map +6 -6
- package/dist/src/ai/client/actions.d.ts +8 -0
- package/dist/svelte/ai/index.js +158 -45
- package/dist/svelte/ai/index.js.map +6 -6
- package/dist/types/ai.d.ts +19 -0
- package/dist/vue/ai/index.js +158 -45
- package/dist/vue/ai/index.js.map +6 -6
- package/package.json +7 -7
package/dist/types/ai.d.ts
CHANGED
|
@@ -1256,6 +1256,20 @@ export type RAGRerankerCandidate = {
|
|
|
1256
1256
|
label?: string;
|
|
1257
1257
|
rerank?: RAGRerankerProviderLike;
|
|
1258
1258
|
};
|
|
1259
|
+
export type RAGRetrievalTraceComparisonSummary = {
|
|
1260
|
+
totalCases: number;
|
|
1261
|
+
modes: RAGHybridRetrievalMode[];
|
|
1262
|
+
vectorCases: number;
|
|
1263
|
+
lexicalCases: number;
|
|
1264
|
+
transformedCases: number;
|
|
1265
|
+
variantCases: number;
|
|
1266
|
+
averageFinalCount: number;
|
|
1267
|
+
averageVectorCount: number;
|
|
1268
|
+
averageLexicalCount: number;
|
|
1269
|
+
averageCandidateTopK: number;
|
|
1270
|
+
averageLexicalTopK: number;
|
|
1271
|
+
stageCounts: Partial<Record<RAGRetrievalTraceStage, number>>;
|
|
1272
|
+
};
|
|
1259
1273
|
export type RAGRetrievalCandidate = {
|
|
1260
1274
|
id: string;
|
|
1261
1275
|
label?: string;
|
|
@@ -1268,6 +1282,7 @@ export type RAGRerankerComparisonEntry = {
|
|
|
1268
1282
|
label: string;
|
|
1269
1283
|
providerName?: string;
|
|
1270
1284
|
response: RAGEvaluationResponse;
|
|
1285
|
+
traceSummary?: RAGRetrievalTraceComparisonSummary;
|
|
1271
1286
|
};
|
|
1272
1287
|
export type RAGRerankerComparisonSummary = {
|
|
1273
1288
|
bestByPassingRate?: string;
|
|
@@ -1286,6 +1301,7 @@ export type RAGRetrievalComparisonEntry = {
|
|
|
1286
1301
|
label: string;
|
|
1287
1302
|
retrievalMode: RAGHybridRetrievalMode;
|
|
1288
1303
|
response: RAGEvaluationResponse;
|
|
1304
|
+
traceSummary?: RAGRetrievalTraceComparisonSummary;
|
|
1289
1305
|
};
|
|
1290
1306
|
export type RAGRetrievalComparisonSummary = {
|
|
1291
1307
|
bestByPassingRate?: string;
|
|
@@ -1500,6 +1516,7 @@ export type AIRetrievedMessage = {
|
|
|
1500
1516
|
retrievedAt: number;
|
|
1501
1517
|
retrievalDurationMs?: number;
|
|
1502
1518
|
sources: RAGSource[];
|
|
1519
|
+
trace?: RAGRetrievalTrace;
|
|
1503
1520
|
};
|
|
1504
1521
|
export type AIServerMessage = AIChunkMessage | AIThinkingMessage | AIToolStatusMessage | AIImageMessage | AICompleteMessage | AIRetrievingMessage | AIRetrievedMessage | AIErrorMessage;
|
|
1505
1522
|
export type AIRole = 'user' | 'assistant' | 'system';
|
|
@@ -1626,6 +1643,7 @@ export type AIStoreAction = {
|
|
|
1626
1643
|
retrievedAt: number;
|
|
1627
1644
|
retrievalDurationMs?: number;
|
|
1628
1645
|
sources: RAGSource[];
|
|
1646
|
+
trace?: RAGRetrievalTrace;
|
|
1629
1647
|
} | {
|
|
1630
1648
|
type: 'send';
|
|
1631
1649
|
content: string;
|
|
@@ -1679,6 +1697,7 @@ export type AIHTMXRenderConfig = {
|
|
|
1679
1697
|
retrievalStartedAt?: number;
|
|
1680
1698
|
retrievedAt?: number;
|
|
1681
1699
|
retrievalDurationMs?: number;
|
|
1700
|
+
trace?: RAGRetrievalTrace;
|
|
1682
1701
|
}) => string;
|
|
1683
1702
|
canceled?: () => string;
|
|
1684
1703
|
error?: (message: string) => string;
|
package/dist/vue/ai/index.js
CHANGED
|
@@ -218,6 +218,7 @@ var serverMessageToAction = (msg) => {
|
|
|
218
218
|
retrievalStartedAt: msg.retrievalStartedAt,
|
|
219
219
|
retrievedAt: msg.retrievedAt,
|
|
220
220
|
sources: msg.sources,
|
|
221
|
+
trace: msg.trace,
|
|
221
222
|
type: "rag_retrieved"
|
|
222
223
|
};
|
|
223
224
|
case "error":
|
|
@@ -485,6 +486,7 @@ var handleRAGRetrieved = (state, action) => {
|
|
|
485
486
|
message.retrievalStartedAt = action.retrievalStartedAt ?? message.retrievalStartedAt;
|
|
486
487
|
message.retrievedAt = action.retrievedAt;
|
|
487
488
|
message.retrievalDurationMs = action.retrievalDurationMs;
|
|
489
|
+
message.retrievalTrace = action.trace;
|
|
488
490
|
conversation.messages = [...conversation.messages];
|
|
489
491
|
};
|
|
490
492
|
var handleRAGRetrieving = (state, action) => {
|
|
@@ -1027,8 +1029,19 @@ var createRAGClient = (options) => {
|
|
|
1027
1029
|
return parseJson(response);
|
|
1028
1030
|
},
|
|
1029
1031
|
async search(input) {
|
|
1030
|
-
const
|
|
1031
|
-
|
|
1032
|
+
const response = await fetchImpl(`${basePath}/search`, {
|
|
1033
|
+
body: JSON.stringify(input),
|
|
1034
|
+
headers: jsonHeaders,
|
|
1035
|
+
method: "POST"
|
|
1036
|
+
});
|
|
1037
|
+
if (!response.ok) {
|
|
1038
|
+
throw new Error(await toErrorMessage(response));
|
|
1039
|
+
}
|
|
1040
|
+
const payload = await parseJson(response);
|
|
1041
|
+
if (!payload.ok) {
|
|
1042
|
+
throw new Error(payload.error ?? "RAG search failed");
|
|
1043
|
+
}
|
|
1044
|
+
return payload.results ?? [];
|
|
1032
1045
|
},
|
|
1033
1046
|
async searchDetailed(input) {
|
|
1034
1047
|
const response = await fetchImpl(`${basePath}/search`, {
|
|
@@ -1755,6 +1768,114 @@ var buildRAGAnswerGroundingEvaluationLeaderboard = (runs) => {
|
|
|
1755
1768
|
totalCases: run.response.totalCases
|
|
1756
1769
|
}));
|
|
1757
1770
|
};
|
|
1771
|
+
var buildTraceStageCounts = (traces) => {
|
|
1772
|
+
const counts = {};
|
|
1773
|
+
for (const trace of traces) {
|
|
1774
|
+
for (const step of trace.steps) {
|
|
1775
|
+
counts[step.stage] = (counts[step.stage] ?? 0) + 1;
|
|
1776
|
+
}
|
|
1777
|
+
}
|
|
1778
|
+
return counts;
|
|
1779
|
+
};
|
|
1780
|
+
var roundTraceAverage = (value, total) => total > 0 ? Number((value / total).toFixed(2)) : 0;
|
|
1781
|
+
var summarizeRetrievalTraces = (traces) => {
|
|
1782
|
+
if (traces.length === 0) {
|
|
1783
|
+
return;
|
|
1784
|
+
}
|
|
1785
|
+
const totalCases = traces.length;
|
|
1786
|
+
const modeSet = new Set;
|
|
1787
|
+
let vectorCases = 0;
|
|
1788
|
+
let lexicalCases = 0;
|
|
1789
|
+
let transformedCases = 0;
|
|
1790
|
+
let variantCases = 0;
|
|
1791
|
+
let finalCountSum = 0;
|
|
1792
|
+
let vectorCountSum = 0;
|
|
1793
|
+
let lexicalCountSum = 0;
|
|
1794
|
+
let candidateTopKSum = 0;
|
|
1795
|
+
let lexicalTopKSum = 0;
|
|
1796
|
+
for (const trace of traces) {
|
|
1797
|
+
modeSet.add(trace.mode);
|
|
1798
|
+
if (trace.runVector) {
|
|
1799
|
+
vectorCases += 1;
|
|
1800
|
+
}
|
|
1801
|
+
if (trace.runLexical) {
|
|
1802
|
+
lexicalCases += 1;
|
|
1803
|
+
}
|
|
1804
|
+
if (trace.transformedQuery !== trace.query) {
|
|
1805
|
+
transformedCases += 1;
|
|
1806
|
+
}
|
|
1807
|
+
if (trace.variantQueries.length > 0) {
|
|
1808
|
+
variantCases += 1;
|
|
1809
|
+
}
|
|
1810
|
+
finalCountSum += trace.resultCounts.final;
|
|
1811
|
+
vectorCountSum += trace.resultCounts.vector;
|
|
1812
|
+
lexicalCountSum += trace.resultCounts.lexical;
|
|
1813
|
+
candidateTopKSum += trace.candidateTopK;
|
|
1814
|
+
lexicalTopKSum += trace.lexicalTopK;
|
|
1815
|
+
}
|
|
1816
|
+
return {
|
|
1817
|
+
averageCandidateTopK: roundTraceAverage(candidateTopKSum, totalCases),
|
|
1818
|
+
averageFinalCount: roundTraceAverage(finalCountSum, totalCases),
|
|
1819
|
+
averageLexicalCount: roundTraceAverage(lexicalCountSum, totalCases),
|
|
1820
|
+
averageLexicalTopK: roundTraceAverage(lexicalTopKSum, totalCases),
|
|
1821
|
+
averageVectorCount: roundTraceAverage(vectorCountSum, totalCases),
|
|
1822
|
+
lexicalCases,
|
|
1823
|
+
modes: Array.from(modeSet),
|
|
1824
|
+
stageCounts: buildTraceStageCounts(traces),
|
|
1825
|
+
totalCases,
|
|
1826
|
+
transformedCases,
|
|
1827
|
+
variantCases,
|
|
1828
|
+
vectorCases
|
|
1829
|
+
};
|
|
1830
|
+
};
|
|
1831
|
+
var evaluateRAGCollectionCases = async ({
|
|
1832
|
+
collection,
|
|
1833
|
+
input,
|
|
1834
|
+
defaultTopK = DEFAULT_TOP_K,
|
|
1835
|
+
rerank,
|
|
1836
|
+
includeTrace = false
|
|
1837
|
+
}) => {
|
|
1838
|
+
if (input.dryRun) {
|
|
1839
|
+
return executeDryRunRAGEvaluation(input, defaultTopK).map((caseResult) => ({
|
|
1840
|
+
caseResult,
|
|
1841
|
+
trace: undefined
|
|
1842
|
+
}));
|
|
1843
|
+
}
|
|
1844
|
+
return Promise.all(input.cases.map(async (caseInput, caseIndex) => {
|
|
1845
|
+
const startedAt = Date.now();
|
|
1846
|
+
const mode = resolveEvaluationMode(caseInput);
|
|
1847
|
+
const query = caseInput.query.trim();
|
|
1848
|
+
const expectedIds = normalizeExpectedIds(mode === "chunkId" ? caseInput.expectedChunkIds ?? [] : mode === "source" ? caseInput.expectedSources ?? [] : caseInput.expectedDocumentIds ?? []);
|
|
1849
|
+
const topK = typeof caseInput.topK === "number" ? caseInput.topK : typeof input.topK === "number" ? input.topK : defaultTopK;
|
|
1850
|
+
const searchInput = {
|
|
1851
|
+
filter: typeof caseInput.filter === "object" ? caseInput.filter : input.filter,
|
|
1852
|
+
model: caseInput.model ?? input.model,
|
|
1853
|
+
query,
|
|
1854
|
+
rerank,
|
|
1855
|
+
scoreThreshold: typeof caseInput.scoreThreshold === "number" ? caseInput.scoreThreshold : input.scoreThreshold,
|
|
1856
|
+
topK
|
|
1857
|
+
};
|
|
1858
|
+
const searchOutcome = includeTrace ? await collection.searchWithTrace(searchInput) : {
|
|
1859
|
+
results: await collection.search(searchInput),
|
|
1860
|
+
trace: undefined
|
|
1861
|
+
};
|
|
1862
|
+
const sources = buildSources(searchOutcome.results);
|
|
1863
|
+
const elapsedMs = Date.now() - startedAt;
|
|
1864
|
+
const retrievedIds = normalizeExpectedIds(sources.map((source) => extractExpectedId(source, mode)));
|
|
1865
|
+
return {
|
|
1866
|
+
caseResult: summarizeRAGEvaluationCase({
|
|
1867
|
+
caseIndex,
|
|
1868
|
+
caseInput: { ...caseInput, topK },
|
|
1869
|
+
elapsedMs,
|
|
1870
|
+
expectedIds,
|
|
1871
|
+
mode,
|
|
1872
|
+
query,
|
|
1873
|
+
retrievedIds
|
|
1874
|
+
}),
|
|
1875
|
+
trace: searchOutcome.trace
|
|
1876
|
+
};
|
|
1877
|
+
}));
|
|
1878
|
+
};
|
|
1758
1879
|
var buildRAGAnswerGroundingCaseDifficultyLeaderboard = (entries) => {
|
|
1759
1880
|
const grouped = new Map;
|
|
1760
1881
|
for (const entry of entries) {
|
|
@@ -2390,17 +2511,20 @@ var compareRAGRerankers = async ({
|
|
|
2390
2511
|
defaultTopK = DEFAULT_TOP_K
|
|
2391
2512
|
}) => {
|
|
2392
2513
|
const entries = await Promise.all(rerankers.map(async (candidate) => {
|
|
2393
|
-
const
|
|
2514
|
+
const evaluated = await evaluateRAGCollectionCases({
|
|
2394
2515
|
collection,
|
|
2395
2516
|
defaultTopK,
|
|
2396
2517
|
input: suite.input,
|
|
2518
|
+
includeTrace: true,
|
|
2397
2519
|
rerank: candidate.rerank
|
|
2398
2520
|
});
|
|
2521
|
+
const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
|
|
2399
2522
|
return {
|
|
2400
2523
|
label: candidate.label ?? candidate.id,
|
|
2401
2524
|
providerName: typeof candidate.rerank === "function" ? undefined : candidate.rerank?.providerName,
|
|
2402
2525
|
response,
|
|
2403
|
-
rerankerId: candidate.id
|
|
2526
|
+
rerankerId: candidate.id,
|
|
2527
|
+
traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
|
|
2404
2528
|
};
|
|
2405
2529
|
}));
|
|
2406
2530
|
const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
|
|
@@ -2455,25 +2579,37 @@ var compareRAGRetrievalStrategies = async ({
|
|
|
2455
2579
|
defaultTopK = DEFAULT_TOP_K
|
|
2456
2580
|
}) => {
|
|
2457
2581
|
const entries = await Promise.all(retrievals.map(async (candidate) => {
|
|
2458
|
-
const
|
|
2582
|
+
const tracedCollection = {
|
|
2583
|
+
...collection,
|
|
2584
|
+
search: (input) => collection.search({
|
|
2585
|
+
...input,
|
|
2586
|
+
queryTransform: candidate.queryTransform ?? input.queryTransform,
|
|
2587
|
+
rerank: candidate.rerank ?? input.rerank,
|
|
2588
|
+
retrieval: candidate.retrieval ?? input.retrieval
|
|
2589
|
+
}),
|
|
2590
|
+
searchWithTrace: (input) => collection.searchWithTrace({
|
|
2591
|
+
...input,
|
|
2592
|
+
queryTransform: candidate.queryTransform ?? input.queryTransform,
|
|
2593
|
+
rerank: candidate.rerank ?? input.rerank,
|
|
2594
|
+
retrieval: candidate.retrieval ?? input.retrieval
|
|
2595
|
+
})
|
|
2596
|
+
};
|
|
2597
|
+
const evaluated = await evaluateRAGCollectionCases({
|
|
2459
2598
|
collection: {
|
|
2460
|
-
...
|
|
2461
|
-
search: (input) => collection.search({
|
|
2462
|
-
...input,
|
|
2463
|
-
queryTransform: candidate.queryTransform ?? input.queryTransform,
|
|
2464
|
-
rerank: candidate.rerank ?? input.rerank,
|
|
2465
|
-
retrieval: candidate.retrieval ?? input.retrieval
|
|
2466
|
-
})
|
|
2599
|
+
...tracedCollection
|
|
2467
2600
|
},
|
|
2468
2601
|
defaultTopK,
|
|
2469
2602
|
input: suite.input,
|
|
2603
|
+
includeTrace: true,
|
|
2470
2604
|
rerank: candidate.rerank
|
|
2471
2605
|
});
|
|
2606
|
+
const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
|
|
2472
2607
|
return {
|
|
2473
2608
|
label: candidate.label ?? candidate.id,
|
|
2474
2609
|
response,
|
|
2475
2610
|
retrievalId: candidate.id,
|
|
2476
|
-
retrievalMode: resolveRetrievalMode(candidate)
|
|
2611
|
+
retrievalMode: resolveRetrievalMode(candidate),
|
|
2612
|
+
traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
|
|
2477
2613
|
};
|
|
2478
2614
|
}));
|
|
2479
2615
|
const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
|
|
@@ -2500,37 +2636,14 @@ var evaluateRAGCollection = async ({
|
|
|
2500
2636
|
defaultTopK = DEFAULT_TOP_K,
|
|
2501
2637
|
rerank
|
|
2502
2638
|
}) => {
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
const topK = typeof caseInput.topK === "number" ? caseInput.topK : typeof input.topK === "number" ? input.topK : defaultTopK;
|
|
2512
|
-
const searchResults = await collection.search({
|
|
2513
|
-
filter: typeof caseInput.filter === "object" ? caseInput.filter : input.filter,
|
|
2514
|
-
model: caseInput.model ?? input.model,
|
|
2515
|
-
query,
|
|
2516
|
-
rerank,
|
|
2517
|
-
scoreThreshold: typeof caseInput.scoreThreshold === "number" ? caseInput.scoreThreshold : input.scoreThreshold,
|
|
2518
|
-
topK
|
|
2519
|
-
});
|
|
2520
|
-
const sources = buildSources(searchResults);
|
|
2521
|
-
const elapsedMs = Date.now() - startedAt;
|
|
2522
|
-
const retrievedIds = normalizeExpectedIds(sources.map((source) => extractExpectedId(source, mode)));
|
|
2523
|
-
return summarizeRAGEvaluationCase({
|
|
2524
|
-
caseIndex,
|
|
2525
|
-
caseInput: { ...caseInput, topK },
|
|
2526
|
-
elapsedMs,
|
|
2527
|
-
expectedIds,
|
|
2528
|
-
mode,
|
|
2529
|
-
query,
|
|
2530
|
-
retrievedIds
|
|
2531
|
-
});
|
|
2532
|
-
}));
|
|
2533
|
-
return buildRAGEvaluationResponse(evaluated);
|
|
2639
|
+
const evaluated = await evaluateRAGCollectionCases({
|
|
2640
|
+
collection,
|
|
2641
|
+
defaultTopK,
|
|
2642
|
+
includeTrace: false,
|
|
2643
|
+
input,
|
|
2644
|
+
rerank
|
|
2645
|
+
});
|
|
2646
|
+
return buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
|
|
2534
2647
|
};
|
|
2535
2648
|
var executeDryRunRAGEvaluation = (input, defaultTopK = DEFAULT_TOP_K) => input.cases.map((caseInput, caseIndex) => {
|
|
2536
2649
|
const mode = resolveEvaluationMode(caseInput);
|
|
@@ -3289,5 +3402,5 @@ export {
|
|
|
3289
3402
|
AIStreamKey
|
|
3290
3403
|
};
|
|
3291
3404
|
|
|
3292
|
-
//# debugId=
|
|
3405
|
+
//# debugId=28BD639F9F0C6C1364756E2164756E21
|
|
3293
3406
|
//# sourceMappingURL=index.js.map
|