@absolutejs/absolute 0.19.0-beta.531 → 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 +143 -43
- package/dist/ai/client/index.js.map +3 -3
- package/dist/ai/index.js +143 -43
- package/dist/ai/index.js.map +3 -3
- package/dist/react/ai/index.js +143 -43
- package/dist/react/ai/index.js.map +3 -3
- package/dist/svelte/ai/index.js +143 -43
- package/dist/svelte/ai/index.js.map +3 -3
- package/dist/types/ai.d.ts +16 -0
- package/dist/vue/ai/index.js +143 -43
- package/dist/vue/ai/index.js.map +3 -3
- 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;
|
package/dist/vue/ai/index.js
CHANGED
|
@@ -1768,6 +1768,114 @@ var buildRAGAnswerGroundingEvaluationLeaderboard = (runs) => {
|
|
|
1768
1768
|
totalCases: run.response.totalCases
|
|
1769
1769
|
}));
|
|
1770
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
|
+
};
|
|
1771
1879
|
var buildRAGAnswerGroundingCaseDifficultyLeaderboard = (entries) => {
|
|
1772
1880
|
const grouped = new Map;
|
|
1773
1881
|
for (const entry of entries) {
|
|
@@ -2403,17 +2511,20 @@ var compareRAGRerankers = async ({
|
|
|
2403
2511
|
defaultTopK = DEFAULT_TOP_K
|
|
2404
2512
|
}) => {
|
|
2405
2513
|
const entries = await Promise.all(rerankers.map(async (candidate) => {
|
|
2406
|
-
const
|
|
2514
|
+
const evaluated = await evaluateRAGCollectionCases({
|
|
2407
2515
|
collection,
|
|
2408
2516
|
defaultTopK,
|
|
2409
2517
|
input: suite.input,
|
|
2518
|
+
includeTrace: true,
|
|
2410
2519
|
rerank: candidate.rerank
|
|
2411
2520
|
});
|
|
2521
|
+
const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
|
|
2412
2522
|
return {
|
|
2413
2523
|
label: candidate.label ?? candidate.id,
|
|
2414
2524
|
providerName: typeof candidate.rerank === "function" ? undefined : candidate.rerank?.providerName,
|
|
2415
2525
|
response,
|
|
2416
|
-
rerankerId: candidate.id
|
|
2526
|
+
rerankerId: candidate.id,
|
|
2527
|
+
traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
|
|
2417
2528
|
};
|
|
2418
2529
|
}));
|
|
2419
2530
|
const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
|
|
@@ -2468,25 +2579,37 @@ var compareRAGRetrievalStrategies = async ({
|
|
|
2468
2579
|
defaultTopK = DEFAULT_TOP_K
|
|
2469
2580
|
}) => {
|
|
2470
2581
|
const entries = await Promise.all(retrievals.map(async (candidate) => {
|
|
2471
|
-
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({
|
|
2472
2598
|
collection: {
|
|
2473
|
-
...
|
|
2474
|
-
search: (input) => collection.search({
|
|
2475
|
-
...input,
|
|
2476
|
-
queryTransform: candidate.queryTransform ?? input.queryTransform,
|
|
2477
|
-
rerank: candidate.rerank ?? input.rerank,
|
|
2478
|
-
retrieval: candidate.retrieval ?? input.retrieval
|
|
2479
|
-
})
|
|
2599
|
+
...tracedCollection
|
|
2480
2600
|
},
|
|
2481
2601
|
defaultTopK,
|
|
2482
2602
|
input: suite.input,
|
|
2603
|
+
includeTrace: true,
|
|
2483
2604
|
rerank: candidate.rerank
|
|
2484
2605
|
});
|
|
2606
|
+
const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
|
|
2485
2607
|
return {
|
|
2486
2608
|
label: candidate.label ?? candidate.id,
|
|
2487
2609
|
response,
|
|
2488
2610
|
retrievalId: candidate.id,
|
|
2489
|
-
retrievalMode: resolveRetrievalMode(candidate)
|
|
2611
|
+
retrievalMode: resolveRetrievalMode(candidate),
|
|
2612
|
+
traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
|
|
2490
2613
|
};
|
|
2491
2614
|
}));
|
|
2492
2615
|
const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
|
|
@@ -2513,37 +2636,14 @@ var evaluateRAGCollection = async ({
|
|
|
2513
2636
|
defaultTopK = DEFAULT_TOP_K,
|
|
2514
2637
|
rerank
|
|
2515
2638
|
}) => {
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
const topK = typeof caseInput.topK === "number" ? caseInput.topK : typeof input.topK === "number" ? input.topK : defaultTopK;
|
|
2525
|
-
const searchResults = await collection.search({
|
|
2526
|
-
filter: typeof caseInput.filter === "object" ? caseInput.filter : input.filter,
|
|
2527
|
-
model: caseInput.model ?? input.model,
|
|
2528
|
-
query,
|
|
2529
|
-
rerank,
|
|
2530
|
-
scoreThreshold: typeof caseInput.scoreThreshold === "number" ? caseInput.scoreThreshold : input.scoreThreshold,
|
|
2531
|
-
topK
|
|
2532
|
-
});
|
|
2533
|
-
const sources = buildSources(searchResults);
|
|
2534
|
-
const elapsedMs = Date.now() - startedAt;
|
|
2535
|
-
const retrievedIds = normalizeExpectedIds(sources.map((source) => extractExpectedId(source, mode)));
|
|
2536
|
-
return summarizeRAGEvaluationCase({
|
|
2537
|
-
caseIndex,
|
|
2538
|
-
caseInput: { ...caseInput, topK },
|
|
2539
|
-
elapsedMs,
|
|
2540
|
-
expectedIds,
|
|
2541
|
-
mode,
|
|
2542
|
-
query,
|
|
2543
|
-
retrievedIds
|
|
2544
|
-
});
|
|
2545
|
-
}));
|
|
2546
|
-
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));
|
|
2547
2647
|
};
|
|
2548
2648
|
var executeDryRunRAGEvaluation = (input, defaultTopK = DEFAULT_TOP_K) => input.cases.map((caseInput, caseIndex) => {
|
|
2549
2649
|
const mode = resolveEvaluationMode(caseInput);
|
|
@@ -3302,5 +3402,5 @@ export {
|
|
|
3302
3402
|
AIStreamKey
|
|
3303
3403
|
};
|
|
3304
3404
|
|
|
3305
|
-
//# debugId=
|
|
3405
|
+
//# debugId=28BD639F9F0C6C1364756E2164756E21
|
|
3306
3406
|
//# sourceMappingURL=index.js.map
|