@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.
package/dist/ai/index.js CHANGED
@@ -5291,6 +5291,131 @@ var buildRAGAnswerGroundingEvaluationLeaderboard = (runs) => {
5291
5291
  totalCases: run.response.totalCases
5292
5292
  }));
5293
5293
  };
5294
+ var buildTraceStageCounts = (traces) => {
5295
+ const counts = {};
5296
+ for (const trace of traces) {
5297
+ for (const step of trace.steps) {
5298
+ counts[step.stage] = (counts[step.stage] ?? 0) + 1;
5299
+ }
5300
+ }
5301
+ return counts;
5302
+ };
5303
+ var diffTraceStageCounts = ({
5304
+ current,
5305
+ previous
5306
+ }) => {
5307
+ const next = {};
5308
+ const stages = new Set([
5309
+ ...Object.keys(current),
5310
+ ...Object.keys(previous)
5311
+ ]);
5312
+ for (const stage of stages) {
5313
+ const delta = (current[stage] ?? 0) - (previous[stage] ?? 0);
5314
+ if (delta !== 0) {
5315
+ next[stage] = delta;
5316
+ }
5317
+ }
5318
+ return next;
5319
+ };
5320
+ var roundTraceAverage = (value, total) => total > 0 ? Number((value / total).toFixed(2)) : 0;
5321
+ var summarizeRetrievalTraces = (traces) => {
5322
+ if (traces.length === 0) {
5323
+ return;
5324
+ }
5325
+ const totalCases = traces.length;
5326
+ const modeSet = new Set;
5327
+ let vectorCases = 0;
5328
+ let lexicalCases = 0;
5329
+ let transformedCases = 0;
5330
+ let variantCases = 0;
5331
+ let finalCountSum = 0;
5332
+ let vectorCountSum = 0;
5333
+ let lexicalCountSum = 0;
5334
+ let candidateTopKSum = 0;
5335
+ let lexicalTopKSum = 0;
5336
+ for (const trace of traces) {
5337
+ modeSet.add(trace.mode);
5338
+ if (trace.runVector) {
5339
+ vectorCases += 1;
5340
+ }
5341
+ if (trace.runLexical) {
5342
+ lexicalCases += 1;
5343
+ }
5344
+ if (trace.transformedQuery !== trace.query) {
5345
+ transformedCases += 1;
5346
+ }
5347
+ if (trace.variantQueries.length > 0) {
5348
+ variantCases += 1;
5349
+ }
5350
+ finalCountSum += trace.resultCounts.final;
5351
+ vectorCountSum += trace.resultCounts.vector;
5352
+ lexicalCountSum += trace.resultCounts.lexical;
5353
+ candidateTopKSum += trace.candidateTopK;
5354
+ lexicalTopKSum += trace.lexicalTopK;
5355
+ }
5356
+ return {
5357
+ averageCandidateTopK: roundTraceAverage(candidateTopKSum, totalCases),
5358
+ averageFinalCount: roundTraceAverage(finalCountSum, totalCases),
5359
+ averageLexicalCount: roundTraceAverage(lexicalCountSum, totalCases),
5360
+ averageLexicalTopK: roundTraceAverage(lexicalTopKSum, totalCases),
5361
+ averageVectorCount: roundTraceAverage(vectorCountSum, totalCases),
5362
+ lexicalCases,
5363
+ modes: Array.from(modeSet),
5364
+ stageCounts: buildTraceStageCounts(traces),
5365
+ totalCases,
5366
+ transformedCases,
5367
+ variantCases,
5368
+ vectorCases
5369
+ };
5370
+ };
5371
+ var evaluateRAGCollectionCases = async ({
5372
+ collection,
5373
+ input,
5374
+ defaultTopK = DEFAULT_TOP_K2,
5375
+ rerank,
5376
+ includeTrace = false
5377
+ }) => {
5378
+ if (input.dryRun) {
5379
+ return executeDryRunRAGEvaluation(input, defaultTopK).map((caseResult) => ({
5380
+ caseResult,
5381
+ trace: undefined
5382
+ }));
5383
+ }
5384
+ return Promise.all(input.cases.map(async (caseInput, caseIndex) => {
5385
+ const startedAt = Date.now();
5386
+ const mode = resolveEvaluationMode(caseInput);
5387
+ const query = caseInput.query.trim();
5388
+ const expectedIds = normalizeExpectedIds(mode === "chunkId" ? caseInput.expectedChunkIds ?? [] : mode === "source" ? caseInput.expectedSources ?? [] : caseInput.expectedDocumentIds ?? []);
5389
+ const topK = typeof caseInput.topK === "number" ? caseInput.topK : typeof input.topK === "number" ? input.topK : defaultTopK;
5390
+ const searchInput = {
5391
+ filter: typeof caseInput.filter === "object" ? caseInput.filter : input.filter,
5392
+ model: caseInput.model ?? input.model,
5393
+ query,
5394
+ rerank,
5395
+ scoreThreshold: typeof caseInput.scoreThreshold === "number" ? caseInput.scoreThreshold : input.scoreThreshold,
5396
+ topK
5397
+ };
5398
+ const searchOutcome = includeTrace ? await collection.searchWithTrace(searchInput) : {
5399
+ results: await collection.search(searchInput),
5400
+ trace: undefined
5401
+ };
5402
+ const sources = buildSources(searchOutcome.results);
5403
+ const elapsedMs = Date.now() - startedAt;
5404
+ const retrievedIds = normalizeExpectedIds(sources.map((source) => extractExpectedId(source, mode)));
5405
+ return {
5406
+ caseResult: summarizeRAGEvaluationCase({
5407
+ caseIndex,
5408
+ caseInput: { ...caseInput, topK },
5409
+ elapsedMs,
5410
+ expectedIds,
5411
+ mode,
5412
+ query,
5413
+ retrievedIds
5414
+ }),
5415
+ trace: searchOutcome.trace
5416
+ };
5417
+ }));
5418
+ };
5294
5419
  var buildRAGAnswerGroundingCaseDifficultyLeaderboard = (entries) => {
5295
5420
  const grouped = new Map;
5296
5421
  for (const entry of entries) {
@@ -5576,6 +5701,22 @@ var buildRAGEvaluationRunDiff = ({
5576
5701
  passingRate: current.response.passingRate - (previous?.response.passingRate ?? 0),
5577
5702
  partialCases: current.response.summary.partialCases - (previous?.response.summary.partialCases ?? 0)
5578
5703
  },
5704
+ traceSummaryDelta: current.traceSummary || previous?.traceSummary ? {
5705
+ averageCandidateTopK: (current.traceSummary?.averageCandidateTopK ?? 0) - (previous?.traceSummary?.averageCandidateTopK ?? 0),
5706
+ averageFinalCount: (current.traceSummary?.averageFinalCount ?? 0) - (previous?.traceSummary?.averageFinalCount ?? 0),
5707
+ averageLexicalCount: (current.traceSummary?.averageLexicalCount ?? 0) - (previous?.traceSummary?.averageLexicalCount ?? 0),
5708
+ averageLexicalTopK: (current.traceSummary?.averageLexicalTopK ?? 0) - (previous?.traceSummary?.averageLexicalTopK ?? 0),
5709
+ averageVectorCount: (current.traceSummary?.averageVectorCount ?? 0) - (previous?.traceSummary?.averageVectorCount ?? 0),
5710
+ lexicalCases: (current.traceSummary?.lexicalCases ?? 0) - (previous?.traceSummary?.lexicalCases ?? 0),
5711
+ modesChanged: (current.traceSummary?.modes ?? []).join("|") !== (previous?.traceSummary?.modes ?? []).join("|"),
5712
+ stageCounts: diffTraceStageCounts({
5713
+ current: current.traceSummary?.stageCounts ?? {},
5714
+ previous: previous?.traceSummary?.stageCounts ?? {}
5715
+ }),
5716
+ transformedCases: (current.traceSummary?.transformedCases ?? 0) - (previous?.traceSummary?.transformedCases ?? 0),
5717
+ variantCases: (current.traceSummary?.variantCases ?? 0) - (previous?.traceSummary?.variantCases ?? 0),
5718
+ vectorCases: (current.traceSummary?.vectorCases ?? 0) - (previous?.traceSummary?.vectorCases ?? 0)
5719
+ } : undefined,
5579
5720
  unchangedCases
5580
5721
  };
5581
5722
  };
@@ -5926,17 +6067,20 @@ var compareRAGRerankers = async ({
5926
6067
  defaultTopK = DEFAULT_TOP_K2
5927
6068
  }) => {
5928
6069
  const entries = await Promise.all(rerankers.map(async (candidate) => {
5929
- const response = await evaluateRAGCollection({
6070
+ const evaluated = await evaluateRAGCollectionCases({
5930
6071
  collection,
5931
6072
  defaultTopK,
5932
6073
  input: suite.input,
6074
+ includeTrace: true,
5933
6075
  rerank: candidate.rerank
5934
6076
  });
6077
+ const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
5935
6078
  return {
5936
6079
  label: candidate.label ?? candidate.id,
5937
6080
  providerName: typeof candidate.rerank === "function" ? undefined : candidate.rerank?.providerName,
5938
6081
  response,
5939
- rerankerId: candidate.id
6082
+ rerankerId: candidate.id,
6083
+ traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
5940
6084
  };
5941
6085
  }));
5942
6086
  const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
@@ -5946,7 +6090,8 @@ var compareRAGRerankers = async ({
5946
6090
  label: entry.label,
5947
6091
  response: entry.response,
5948
6092
  startedAt: 0,
5949
- suiteId: suite.id
6093
+ suiteId: suite.id,
6094
+ traceSummary: entry.traceSummary
5950
6095
  })));
5951
6096
  return {
5952
6097
  entries,
@@ -5991,25 +6136,37 @@ var compareRAGRetrievalStrategies = async ({
5991
6136
  defaultTopK = DEFAULT_TOP_K2
5992
6137
  }) => {
5993
6138
  const entries = await Promise.all(retrievals.map(async (candidate) => {
5994
- const response = await evaluateRAGCollection({
6139
+ const tracedCollection = {
6140
+ ...collection,
6141
+ search: (input) => collection.search({
6142
+ ...input,
6143
+ queryTransform: candidate.queryTransform ?? input.queryTransform,
6144
+ rerank: candidate.rerank ?? input.rerank,
6145
+ retrieval: candidate.retrieval ?? input.retrieval
6146
+ }),
6147
+ searchWithTrace: (input) => collection.searchWithTrace({
6148
+ ...input,
6149
+ queryTransform: candidate.queryTransform ?? input.queryTransform,
6150
+ rerank: candidate.rerank ?? input.rerank,
6151
+ retrieval: candidate.retrieval ?? input.retrieval
6152
+ })
6153
+ };
6154
+ const evaluated = await evaluateRAGCollectionCases({
5995
6155
  collection: {
5996
- ...collection,
5997
- search: (input) => collection.search({
5998
- ...input,
5999
- queryTransform: candidate.queryTransform ?? input.queryTransform,
6000
- rerank: candidate.rerank ?? input.rerank,
6001
- retrieval: candidate.retrieval ?? input.retrieval
6002
- })
6156
+ ...tracedCollection
6003
6157
  },
6004
6158
  defaultTopK,
6005
6159
  input: suite.input,
6160
+ includeTrace: true,
6006
6161
  rerank: candidate.rerank
6007
6162
  });
6163
+ const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
6008
6164
  return {
6009
6165
  label: candidate.label ?? candidate.id,
6010
6166
  response,
6011
6167
  retrievalId: candidate.id,
6012
- retrievalMode: resolveRetrievalMode(candidate)
6168
+ retrievalMode: resolveRetrievalMode(candidate),
6169
+ traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
6013
6170
  };
6014
6171
  }));
6015
6172
  const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
@@ -6019,7 +6176,8 @@ var compareRAGRetrievalStrategies = async ({
6019
6176
  label: entry.label,
6020
6177
  response: entry.response,
6021
6178
  startedAt: 0,
6022
- suiteId: suite.id
6179
+ suiteId: suite.id,
6180
+ traceSummary: entry.traceSummary
6023
6181
  })));
6024
6182
  return {
6025
6183
  entries,
@@ -6036,37 +6194,14 @@ var evaluateRAGCollection = async ({
6036
6194
  defaultTopK = DEFAULT_TOP_K2,
6037
6195
  rerank
6038
6196
  }) => {
6039
- if (input.dryRun) {
6040
- return buildRAGEvaluationResponse(executeDryRunRAGEvaluation(input, defaultTopK));
6041
- }
6042
- const evaluated = await Promise.all(input.cases.map(async (caseInput, caseIndex) => {
6043
- const startedAt = Date.now();
6044
- const mode = resolveEvaluationMode(caseInput);
6045
- const query = caseInput.query.trim();
6046
- const expectedIds = normalizeExpectedIds(mode === "chunkId" ? caseInput.expectedChunkIds ?? [] : mode === "source" ? caseInput.expectedSources ?? [] : caseInput.expectedDocumentIds ?? []);
6047
- const topK = typeof caseInput.topK === "number" ? caseInput.topK : typeof input.topK === "number" ? input.topK : defaultTopK;
6048
- const searchResults = await collection.search({
6049
- filter: typeof caseInput.filter === "object" ? caseInput.filter : input.filter,
6050
- model: caseInput.model ?? input.model,
6051
- query,
6052
- rerank,
6053
- scoreThreshold: typeof caseInput.scoreThreshold === "number" ? caseInput.scoreThreshold : input.scoreThreshold,
6054
- topK
6055
- });
6056
- const sources = buildSources(searchResults);
6057
- const elapsedMs = Date.now() - startedAt;
6058
- const retrievedIds = normalizeExpectedIds(sources.map((source) => extractExpectedId(source, mode)));
6059
- return summarizeRAGEvaluationCase({
6060
- caseIndex,
6061
- caseInput: { ...caseInput, topK },
6062
- elapsedMs,
6063
- expectedIds,
6064
- mode,
6065
- query,
6066
- retrievedIds
6067
- });
6068
- }));
6069
- return buildRAGEvaluationResponse(evaluated);
6197
+ const evaluated = await evaluateRAGCollectionCases({
6198
+ collection,
6199
+ defaultTopK,
6200
+ includeTrace: false,
6201
+ input,
6202
+ rerank
6203
+ });
6204
+ return buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
6070
6205
  };
6071
6206
  var executeDryRunRAGEvaluation = (input, defaultTopK = DEFAULT_TOP_K2) => input.cases.map((caseInput, caseIndex) => {
6072
6207
  const mode = resolveEvaluationMode(caseInput);
@@ -11303,5 +11438,5 @@ export {
11303
11438
  aiChat
11304
11439
  };
11305
11440
 
11306
- //# debugId=09C2CE3CC04F038664756E2164756E21
11441
+ //# debugId=5129E1811D01124064756E2164756E21
11307
11442
  //# sourceMappingURL=index.js.map