@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.
@@ -1771,6 +1771,114 @@ 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 roundTraceAverage = (value, total) => total > 0 ? Number((value / total).toFixed(2)) : 0;
1784
+ var summarizeRetrievalTraces = (traces) => {
1785
+ if (traces.length === 0) {
1786
+ return;
1787
+ }
1788
+ const totalCases = traces.length;
1789
+ const modeSet = new Set;
1790
+ let vectorCases = 0;
1791
+ let lexicalCases = 0;
1792
+ let transformedCases = 0;
1793
+ let variantCases = 0;
1794
+ let finalCountSum = 0;
1795
+ let vectorCountSum = 0;
1796
+ let lexicalCountSum = 0;
1797
+ let candidateTopKSum = 0;
1798
+ let lexicalTopKSum = 0;
1799
+ for (const trace of traces) {
1800
+ modeSet.add(trace.mode);
1801
+ if (trace.runVector) {
1802
+ vectorCases += 1;
1803
+ }
1804
+ if (trace.runLexical) {
1805
+ lexicalCases += 1;
1806
+ }
1807
+ if (trace.transformedQuery !== trace.query) {
1808
+ transformedCases += 1;
1809
+ }
1810
+ if (trace.variantQueries.length > 0) {
1811
+ variantCases += 1;
1812
+ }
1813
+ finalCountSum += trace.resultCounts.final;
1814
+ vectorCountSum += trace.resultCounts.vector;
1815
+ lexicalCountSum += trace.resultCounts.lexical;
1816
+ candidateTopKSum += trace.candidateTopK;
1817
+ lexicalTopKSum += trace.lexicalTopK;
1818
+ }
1819
+ return {
1820
+ averageCandidateTopK: roundTraceAverage(candidateTopKSum, totalCases),
1821
+ averageFinalCount: roundTraceAverage(finalCountSum, totalCases),
1822
+ averageLexicalCount: roundTraceAverage(lexicalCountSum, totalCases),
1823
+ averageLexicalTopK: roundTraceAverage(lexicalTopKSum, totalCases),
1824
+ averageVectorCount: roundTraceAverage(vectorCountSum, totalCases),
1825
+ lexicalCases,
1826
+ modes: Array.from(modeSet),
1827
+ stageCounts: buildTraceStageCounts(traces),
1828
+ totalCases,
1829
+ transformedCases,
1830
+ variantCases,
1831
+ vectorCases
1832
+ };
1833
+ };
1834
+ var evaluateRAGCollectionCases = async ({
1835
+ collection,
1836
+ input,
1837
+ defaultTopK = DEFAULT_TOP_K,
1838
+ rerank,
1839
+ includeTrace = false
1840
+ }) => {
1841
+ if (input.dryRun) {
1842
+ return executeDryRunRAGEvaluation(input, defaultTopK).map((caseResult) => ({
1843
+ caseResult,
1844
+ trace: undefined
1845
+ }));
1846
+ }
1847
+ return Promise.all(input.cases.map(async (caseInput, caseIndex) => {
1848
+ const startedAt = Date.now();
1849
+ const mode = resolveEvaluationMode(caseInput);
1850
+ const query = caseInput.query.trim();
1851
+ const expectedIds = normalizeExpectedIds(mode === "chunkId" ? caseInput.expectedChunkIds ?? [] : mode === "source" ? caseInput.expectedSources ?? [] : caseInput.expectedDocumentIds ?? []);
1852
+ const topK = typeof caseInput.topK === "number" ? caseInput.topK : typeof input.topK === "number" ? input.topK : defaultTopK;
1853
+ const searchInput = {
1854
+ filter: typeof caseInput.filter === "object" ? caseInput.filter : input.filter,
1855
+ model: caseInput.model ?? input.model,
1856
+ query,
1857
+ rerank,
1858
+ scoreThreshold: typeof caseInput.scoreThreshold === "number" ? caseInput.scoreThreshold : input.scoreThreshold,
1859
+ topK
1860
+ };
1861
+ const searchOutcome = includeTrace ? await collection.searchWithTrace(searchInput) : {
1862
+ results: await collection.search(searchInput),
1863
+ trace: undefined
1864
+ };
1865
+ const sources = buildSources(searchOutcome.results);
1866
+ const elapsedMs = Date.now() - startedAt;
1867
+ const retrievedIds = normalizeExpectedIds(sources.map((source) => extractExpectedId(source, mode)));
1868
+ return {
1869
+ caseResult: summarizeRAGEvaluationCase({
1870
+ caseIndex,
1871
+ caseInput: { ...caseInput, topK },
1872
+ elapsedMs,
1873
+ expectedIds,
1874
+ mode,
1875
+ query,
1876
+ retrievedIds
1877
+ }),
1878
+ trace: searchOutcome.trace
1879
+ };
1880
+ }));
1881
+ };
1774
1882
  var buildRAGAnswerGroundingCaseDifficultyLeaderboard = (entries) => {
1775
1883
  const grouped = new Map;
1776
1884
  for (const entry of entries) {
@@ -2406,17 +2514,20 @@ var compareRAGRerankers = async ({
2406
2514
  defaultTopK = DEFAULT_TOP_K
2407
2515
  }) => {
2408
2516
  const entries = await Promise.all(rerankers.map(async (candidate) => {
2409
- const response = await evaluateRAGCollection({
2517
+ const evaluated = await evaluateRAGCollectionCases({
2410
2518
  collection,
2411
2519
  defaultTopK,
2412
2520
  input: suite.input,
2521
+ includeTrace: true,
2413
2522
  rerank: candidate.rerank
2414
2523
  });
2524
+ const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
2415
2525
  return {
2416
2526
  label: candidate.label ?? candidate.id,
2417
2527
  providerName: typeof candidate.rerank === "function" ? undefined : candidate.rerank?.providerName,
2418
2528
  response,
2419
- rerankerId: candidate.id
2529
+ rerankerId: candidate.id,
2530
+ traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
2420
2531
  };
2421
2532
  }));
2422
2533
  const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
@@ -2471,25 +2582,37 @@ var compareRAGRetrievalStrategies = async ({
2471
2582
  defaultTopK = DEFAULT_TOP_K
2472
2583
  }) => {
2473
2584
  const entries = await Promise.all(retrievals.map(async (candidate) => {
2474
- const response = await evaluateRAGCollection({
2585
+ const tracedCollection = {
2586
+ ...collection,
2587
+ search: (input) => collection.search({
2588
+ ...input,
2589
+ queryTransform: candidate.queryTransform ?? input.queryTransform,
2590
+ rerank: candidate.rerank ?? input.rerank,
2591
+ retrieval: candidate.retrieval ?? input.retrieval
2592
+ }),
2593
+ searchWithTrace: (input) => collection.searchWithTrace({
2594
+ ...input,
2595
+ queryTransform: candidate.queryTransform ?? input.queryTransform,
2596
+ rerank: candidate.rerank ?? input.rerank,
2597
+ retrieval: candidate.retrieval ?? input.retrieval
2598
+ })
2599
+ };
2600
+ const evaluated = await evaluateRAGCollectionCases({
2475
2601
  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
- })
2602
+ ...tracedCollection
2483
2603
  },
2484
2604
  defaultTopK,
2485
2605
  input: suite.input,
2606
+ includeTrace: true,
2486
2607
  rerank: candidate.rerank
2487
2608
  });
2609
+ const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
2488
2610
  return {
2489
2611
  label: candidate.label ?? candidate.id,
2490
2612
  response,
2491
2613
  retrievalId: candidate.id,
2492
- retrievalMode: resolveRetrievalMode(candidate)
2614
+ retrievalMode: resolveRetrievalMode(candidate),
2615
+ traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
2493
2616
  };
2494
2617
  }));
2495
2618
  const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
@@ -2516,37 +2639,14 @@ var evaluateRAGCollection = async ({
2516
2639
  defaultTopK = DEFAULT_TOP_K,
2517
2640
  rerank
2518
2641
  }) => {
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);
2642
+ const evaluated = await evaluateRAGCollectionCases({
2643
+ collection,
2644
+ defaultTopK,
2645
+ includeTrace: false,
2646
+ input,
2647
+ rerank
2648
+ });
2649
+ return buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
2550
2650
  };
2551
2651
  var executeDryRunRAGEvaluation = (input, defaultTopK = DEFAULT_TOP_K) => input.cases.map((caseInput, caseIndex) => {
2552
2652
  const mode = resolveEvaluationMode(caseInput);
@@ -3319,5 +3419,5 @@ export {
3319
3419
  createAIStream
3320
3420
  };
3321
3421
 
3322
- //# debugId=037EF89CF3E8405464756E2164756E21
3422
+ //# debugId=1515E9DBD027AFA064756E2164756E21
3323
3423
  //# sourceMappingURL=index.js.map