@absolutejs/absolute 0.19.0-beta.531 → 0.19.0-beta.533

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.
@@ -307,6 +307,30 @@ export declare const useRAG: (path: string, options?: UseRAGOptions) => {
307
307
  totalCases: number;
308
308
  passingRate: number;
309
309
  };
310
+ traceSummary?: {
311
+ totalCases: number;
312
+ modes: import("../..").RAGHybridRetrievalMode[];
313
+ vectorCases: number;
314
+ lexicalCases: number;
315
+ transformedCases: number;
316
+ variantCases: number;
317
+ averageFinalCount: number;
318
+ averageVectorCount: number;
319
+ averageLexicalCount: number;
320
+ averageCandidateTopK: number;
321
+ averageLexicalTopK: number;
322
+ stageCounts: {
323
+ input?: number | undefined;
324
+ embed?: number | undefined;
325
+ query_transform?: number | undefined;
326
+ vector_search?: number | undefined;
327
+ lexical_search?: number | undefined;
328
+ fusion?: number | undefined;
329
+ rerank?: number | undefined;
330
+ score_filter?: number | undefined;
331
+ finalize?: number | undefined;
332
+ };
333
+ } | undefined;
310
334
  metadata?: Record<string, unknown> | undefined;
311
335
  }[], import("../..").RAGEvaluationSuiteRun[] | {
312
336
  id: string;
@@ -351,6 +375,30 @@ export declare const useRAG: (path: string, options?: UseRAGOptions) => {
351
375
  totalCases: number;
352
376
  passingRate: number;
353
377
  };
378
+ traceSummary?: {
379
+ totalCases: number;
380
+ modes: import("../..").RAGHybridRetrievalMode[];
381
+ vectorCases: number;
382
+ lexicalCases: number;
383
+ transformedCases: number;
384
+ variantCases: number;
385
+ averageFinalCount: number;
386
+ averageVectorCount: number;
387
+ averageLexicalCount: number;
388
+ averageCandidateTopK: number;
389
+ averageLexicalTopK: number;
390
+ stageCounts: {
391
+ input?: number | undefined;
392
+ embed?: number | undefined;
393
+ query_transform?: number | undefined;
394
+ vector_search?: number | undefined;
395
+ lexical_search?: number | undefined;
396
+ fusion?: number | undefined;
397
+ rerank?: number | undefined;
398
+ score_filter?: number | undefined;
399
+ finalize?: number | undefined;
400
+ };
401
+ } | undefined;
354
402
  metadata?: Record<string, unknown> | undefined;
355
403
  }[]>;
356
404
  suites: import("vue").Ref<{
@@ -171,6 +171,30 @@ export declare const useRAGEvaluate: (path: string) => {
171
171
  totalCases: number;
172
172
  passingRate: number;
173
173
  };
174
+ traceSummary?: {
175
+ totalCases: number;
176
+ modes: import("../..").RAGHybridRetrievalMode[];
177
+ vectorCases: number;
178
+ lexicalCases: number;
179
+ transformedCases: number;
180
+ variantCases: number;
181
+ averageFinalCount: number;
182
+ averageVectorCount: number;
183
+ averageLexicalCount: number;
184
+ averageCandidateTopK: number;
185
+ averageLexicalTopK: number;
186
+ stageCounts: {
187
+ input?: number | undefined;
188
+ embed?: number | undefined;
189
+ query_transform?: number | undefined;
190
+ vector_search?: number | undefined;
191
+ lexical_search?: number | undefined;
192
+ fusion?: number | undefined;
193
+ rerank?: number | undefined;
194
+ score_filter?: number | undefined;
195
+ finalize?: number | undefined;
196
+ };
197
+ } | undefined;
174
198
  metadata?: Record<string, unknown> | undefined;
175
199
  }[], RAGEvaluationSuiteRun[] | {
176
200
  id: string;
@@ -215,6 +239,30 @@ export declare const useRAGEvaluate: (path: string) => {
215
239
  totalCases: number;
216
240
  passingRate: number;
217
241
  };
242
+ traceSummary?: {
243
+ totalCases: number;
244
+ modes: import("../..").RAGHybridRetrievalMode[];
245
+ vectorCases: number;
246
+ lexicalCases: number;
247
+ transformedCases: number;
248
+ variantCases: number;
249
+ averageFinalCount: number;
250
+ averageVectorCount: number;
251
+ averageLexicalCount: number;
252
+ averageCandidateTopK: number;
253
+ averageLexicalTopK: number;
254
+ stageCounts: {
255
+ input?: number | undefined;
256
+ embed?: number | undefined;
257
+ query_transform?: number | undefined;
258
+ vector_search?: number | undefined;
259
+ lexical_search?: number | undefined;
260
+ fusion?: number | undefined;
261
+ rerank?: number | undefined;
262
+ score_filter?: number | undefined;
263
+ finalize?: number | undefined;
264
+ };
265
+ } | undefined;
218
266
  metadata?: Record<string, unknown> | undefined;
219
267
  }[]>;
220
268
  suites: import("vue").Ref<{
@@ -1771,6 +1771,131 @@ var buildRAGAnswerGroundingEvaluationLeaderboard = (runs) => {
1771
1771
  totalCases: run.response.totalCases
1772
1772
  }));
1773
1773
  };
1774
+ var buildTraceStageCounts = (traces) => {
1775
+ const counts = {};
1776
+ for (const trace of traces) {
1777
+ for (const step of trace.steps) {
1778
+ counts[step.stage] = (counts[step.stage] ?? 0) + 1;
1779
+ }
1780
+ }
1781
+ return counts;
1782
+ };
1783
+ var diffTraceStageCounts = ({
1784
+ current,
1785
+ previous
1786
+ }) => {
1787
+ const next = {};
1788
+ const stages = new Set([
1789
+ ...Object.keys(current),
1790
+ ...Object.keys(previous)
1791
+ ]);
1792
+ for (const stage of stages) {
1793
+ const delta = (current[stage] ?? 0) - (previous[stage] ?? 0);
1794
+ if (delta !== 0) {
1795
+ next[stage] = delta;
1796
+ }
1797
+ }
1798
+ return next;
1799
+ };
1800
+ var roundTraceAverage = (value, total) => total > 0 ? Number((value / total).toFixed(2)) : 0;
1801
+ var summarizeRetrievalTraces = (traces) => {
1802
+ if (traces.length === 0) {
1803
+ return;
1804
+ }
1805
+ const totalCases = traces.length;
1806
+ const modeSet = new Set;
1807
+ let vectorCases = 0;
1808
+ let lexicalCases = 0;
1809
+ let transformedCases = 0;
1810
+ let variantCases = 0;
1811
+ let finalCountSum = 0;
1812
+ let vectorCountSum = 0;
1813
+ let lexicalCountSum = 0;
1814
+ let candidateTopKSum = 0;
1815
+ let lexicalTopKSum = 0;
1816
+ for (const trace of traces) {
1817
+ modeSet.add(trace.mode);
1818
+ if (trace.runVector) {
1819
+ vectorCases += 1;
1820
+ }
1821
+ if (trace.runLexical) {
1822
+ lexicalCases += 1;
1823
+ }
1824
+ if (trace.transformedQuery !== trace.query) {
1825
+ transformedCases += 1;
1826
+ }
1827
+ if (trace.variantQueries.length > 0) {
1828
+ variantCases += 1;
1829
+ }
1830
+ finalCountSum += trace.resultCounts.final;
1831
+ vectorCountSum += trace.resultCounts.vector;
1832
+ lexicalCountSum += trace.resultCounts.lexical;
1833
+ candidateTopKSum += trace.candidateTopK;
1834
+ lexicalTopKSum += trace.lexicalTopK;
1835
+ }
1836
+ return {
1837
+ averageCandidateTopK: roundTraceAverage(candidateTopKSum, totalCases),
1838
+ averageFinalCount: roundTraceAverage(finalCountSum, totalCases),
1839
+ averageLexicalCount: roundTraceAverage(lexicalCountSum, totalCases),
1840
+ averageLexicalTopK: roundTraceAverage(lexicalTopKSum, totalCases),
1841
+ averageVectorCount: roundTraceAverage(vectorCountSum, totalCases),
1842
+ lexicalCases,
1843
+ modes: Array.from(modeSet),
1844
+ stageCounts: buildTraceStageCounts(traces),
1845
+ totalCases,
1846
+ transformedCases,
1847
+ variantCases,
1848
+ vectorCases
1849
+ };
1850
+ };
1851
+ var evaluateRAGCollectionCases = async ({
1852
+ collection,
1853
+ input,
1854
+ defaultTopK = DEFAULT_TOP_K,
1855
+ rerank,
1856
+ includeTrace = false
1857
+ }) => {
1858
+ if (input.dryRun) {
1859
+ return executeDryRunRAGEvaluation(input, defaultTopK).map((caseResult) => ({
1860
+ caseResult,
1861
+ trace: undefined
1862
+ }));
1863
+ }
1864
+ return Promise.all(input.cases.map(async (caseInput, caseIndex) => {
1865
+ const startedAt = Date.now();
1866
+ const mode = resolveEvaluationMode(caseInput);
1867
+ const query = caseInput.query.trim();
1868
+ const expectedIds = normalizeExpectedIds(mode === "chunkId" ? caseInput.expectedChunkIds ?? [] : mode === "source" ? caseInput.expectedSources ?? [] : caseInput.expectedDocumentIds ?? []);
1869
+ const topK = typeof caseInput.topK === "number" ? caseInput.topK : typeof input.topK === "number" ? input.topK : defaultTopK;
1870
+ const searchInput = {
1871
+ filter: typeof caseInput.filter === "object" ? caseInput.filter : input.filter,
1872
+ model: caseInput.model ?? input.model,
1873
+ query,
1874
+ rerank,
1875
+ scoreThreshold: typeof caseInput.scoreThreshold === "number" ? caseInput.scoreThreshold : input.scoreThreshold,
1876
+ topK
1877
+ };
1878
+ const searchOutcome = includeTrace ? await collection.searchWithTrace(searchInput) : {
1879
+ results: await collection.search(searchInput),
1880
+ trace: undefined
1881
+ };
1882
+ const sources = buildSources(searchOutcome.results);
1883
+ const elapsedMs = Date.now() - startedAt;
1884
+ const retrievedIds = normalizeExpectedIds(sources.map((source) => extractExpectedId(source, mode)));
1885
+ return {
1886
+ caseResult: summarizeRAGEvaluationCase({
1887
+ caseIndex,
1888
+ caseInput: { ...caseInput, topK },
1889
+ elapsedMs,
1890
+ expectedIds,
1891
+ mode,
1892
+ query,
1893
+ retrievedIds
1894
+ }),
1895
+ trace: searchOutcome.trace
1896
+ };
1897
+ }));
1898
+ };
1774
1899
  var buildRAGAnswerGroundingCaseDifficultyLeaderboard = (entries) => {
1775
1900
  const grouped = new Map;
1776
1901
  for (const entry of entries) {
@@ -2056,6 +2181,22 @@ var buildRAGEvaluationRunDiff = ({
2056
2181
  passingRate: current.response.passingRate - (previous?.response.passingRate ?? 0),
2057
2182
  partialCases: current.response.summary.partialCases - (previous?.response.summary.partialCases ?? 0)
2058
2183
  },
2184
+ traceSummaryDelta: current.traceSummary || previous?.traceSummary ? {
2185
+ averageCandidateTopK: (current.traceSummary?.averageCandidateTopK ?? 0) - (previous?.traceSummary?.averageCandidateTopK ?? 0),
2186
+ averageFinalCount: (current.traceSummary?.averageFinalCount ?? 0) - (previous?.traceSummary?.averageFinalCount ?? 0),
2187
+ averageLexicalCount: (current.traceSummary?.averageLexicalCount ?? 0) - (previous?.traceSummary?.averageLexicalCount ?? 0),
2188
+ averageLexicalTopK: (current.traceSummary?.averageLexicalTopK ?? 0) - (previous?.traceSummary?.averageLexicalTopK ?? 0),
2189
+ averageVectorCount: (current.traceSummary?.averageVectorCount ?? 0) - (previous?.traceSummary?.averageVectorCount ?? 0),
2190
+ lexicalCases: (current.traceSummary?.lexicalCases ?? 0) - (previous?.traceSummary?.lexicalCases ?? 0),
2191
+ modesChanged: (current.traceSummary?.modes ?? []).join("|") !== (previous?.traceSummary?.modes ?? []).join("|"),
2192
+ stageCounts: diffTraceStageCounts({
2193
+ current: current.traceSummary?.stageCounts ?? {},
2194
+ previous: previous?.traceSummary?.stageCounts ?? {}
2195
+ }),
2196
+ transformedCases: (current.traceSummary?.transformedCases ?? 0) - (previous?.traceSummary?.transformedCases ?? 0),
2197
+ variantCases: (current.traceSummary?.variantCases ?? 0) - (previous?.traceSummary?.variantCases ?? 0),
2198
+ vectorCases: (current.traceSummary?.vectorCases ?? 0) - (previous?.traceSummary?.vectorCases ?? 0)
2199
+ } : undefined,
2059
2200
  unchangedCases
2060
2201
  };
2061
2202
  };
@@ -2406,17 +2547,20 @@ var compareRAGRerankers = async ({
2406
2547
  defaultTopK = DEFAULT_TOP_K
2407
2548
  }) => {
2408
2549
  const entries = await Promise.all(rerankers.map(async (candidate) => {
2409
- const response = await evaluateRAGCollection({
2550
+ const evaluated = await evaluateRAGCollectionCases({
2410
2551
  collection,
2411
2552
  defaultTopK,
2412
2553
  input: suite.input,
2554
+ includeTrace: true,
2413
2555
  rerank: candidate.rerank
2414
2556
  });
2557
+ const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
2415
2558
  return {
2416
2559
  label: candidate.label ?? candidate.id,
2417
2560
  providerName: typeof candidate.rerank === "function" ? undefined : candidate.rerank?.providerName,
2418
2561
  response,
2419
- rerankerId: candidate.id
2562
+ rerankerId: candidate.id,
2563
+ traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
2420
2564
  };
2421
2565
  }));
2422
2566
  const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
@@ -2426,7 +2570,8 @@ var compareRAGRerankers = async ({
2426
2570
  label: entry.label,
2427
2571
  response: entry.response,
2428
2572
  startedAt: 0,
2429
- suiteId: suite.id
2573
+ suiteId: suite.id,
2574
+ traceSummary: entry.traceSummary
2430
2575
  })));
2431
2576
  return {
2432
2577
  entries,
@@ -2471,25 +2616,37 @@ var compareRAGRetrievalStrategies = async ({
2471
2616
  defaultTopK = DEFAULT_TOP_K
2472
2617
  }) => {
2473
2618
  const entries = await Promise.all(retrievals.map(async (candidate) => {
2474
- const response = await evaluateRAGCollection({
2619
+ const tracedCollection = {
2620
+ ...collection,
2621
+ search: (input) => collection.search({
2622
+ ...input,
2623
+ queryTransform: candidate.queryTransform ?? input.queryTransform,
2624
+ rerank: candidate.rerank ?? input.rerank,
2625
+ retrieval: candidate.retrieval ?? input.retrieval
2626
+ }),
2627
+ searchWithTrace: (input) => collection.searchWithTrace({
2628
+ ...input,
2629
+ queryTransform: candidate.queryTransform ?? input.queryTransform,
2630
+ rerank: candidate.rerank ?? input.rerank,
2631
+ retrieval: candidate.retrieval ?? input.retrieval
2632
+ })
2633
+ };
2634
+ const evaluated = await evaluateRAGCollectionCases({
2475
2635
  collection: {
2476
- ...collection,
2477
- search: (input) => collection.search({
2478
- ...input,
2479
- queryTransform: candidate.queryTransform ?? input.queryTransform,
2480
- rerank: candidate.rerank ?? input.rerank,
2481
- retrieval: candidate.retrieval ?? input.retrieval
2482
- })
2636
+ ...tracedCollection
2483
2637
  },
2484
2638
  defaultTopK,
2485
2639
  input: suite.input,
2640
+ includeTrace: true,
2486
2641
  rerank: candidate.rerank
2487
2642
  });
2643
+ const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
2488
2644
  return {
2489
2645
  label: candidate.label ?? candidate.id,
2490
2646
  response,
2491
2647
  retrievalId: candidate.id,
2492
- retrievalMode: resolveRetrievalMode(candidate)
2648
+ retrievalMode: resolveRetrievalMode(candidate),
2649
+ traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
2493
2650
  };
2494
2651
  }));
2495
2652
  const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
@@ -2499,7 +2656,8 @@ var compareRAGRetrievalStrategies = async ({
2499
2656
  label: entry.label,
2500
2657
  response: entry.response,
2501
2658
  startedAt: 0,
2502
- suiteId: suite.id
2659
+ suiteId: suite.id,
2660
+ traceSummary: entry.traceSummary
2503
2661
  })));
2504
2662
  return {
2505
2663
  entries,
@@ -2516,37 +2674,14 @@ var evaluateRAGCollection = async ({
2516
2674
  defaultTopK = DEFAULT_TOP_K,
2517
2675
  rerank
2518
2676
  }) => {
2519
- if (input.dryRun) {
2520
- return buildRAGEvaluationResponse(executeDryRunRAGEvaluation(input, defaultTopK));
2521
- }
2522
- const evaluated = await Promise.all(input.cases.map(async (caseInput, caseIndex) => {
2523
- const startedAt = Date.now();
2524
- const mode = resolveEvaluationMode(caseInput);
2525
- const query = caseInput.query.trim();
2526
- const expectedIds = normalizeExpectedIds(mode === "chunkId" ? caseInput.expectedChunkIds ?? [] : mode === "source" ? caseInput.expectedSources ?? [] : caseInput.expectedDocumentIds ?? []);
2527
- const topK = typeof caseInput.topK === "number" ? caseInput.topK : typeof input.topK === "number" ? input.topK : defaultTopK;
2528
- const searchResults = await collection.search({
2529
- filter: typeof caseInput.filter === "object" ? caseInput.filter : input.filter,
2530
- model: caseInput.model ?? input.model,
2531
- query,
2532
- rerank,
2533
- scoreThreshold: typeof caseInput.scoreThreshold === "number" ? caseInput.scoreThreshold : input.scoreThreshold,
2534
- topK
2535
- });
2536
- const sources = buildSources(searchResults);
2537
- const elapsedMs = Date.now() - startedAt;
2538
- const retrievedIds = normalizeExpectedIds(sources.map((source) => extractExpectedId(source, mode)));
2539
- return summarizeRAGEvaluationCase({
2540
- caseIndex,
2541
- caseInput: { ...caseInput, topK },
2542
- elapsedMs,
2543
- expectedIds,
2544
- mode,
2545
- query,
2546
- retrievedIds
2547
- });
2548
- }));
2549
- return buildRAGEvaluationResponse(evaluated);
2677
+ const evaluated = await evaluateRAGCollectionCases({
2678
+ collection,
2679
+ defaultTopK,
2680
+ includeTrace: false,
2681
+ input,
2682
+ rerank
2683
+ });
2684
+ return buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
2550
2685
  };
2551
2686
  var executeDryRunRAGEvaluation = (input, defaultTopK = DEFAULT_TOP_K) => input.cases.map((caseInput, caseIndex) => {
2552
2687
  const mode = resolveEvaluationMode(caseInput);
@@ -3319,5 +3454,5 @@ export {
3319
3454
  createAIStream
3320
3455
  };
3321
3456
 
3322
- //# debugId=037EF89CF3E8405464756E2164756E21
3457
+ //# debugId=4CDEE3E3E09A9FC864756E2164756E21
3323
3458
  //# sourceMappingURL=index.js.map