@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/index.js CHANGED
@@ -5291,6 +5291,114 @@ 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 roundTraceAverage = (value, total) => total > 0 ? Number((value / total).toFixed(2)) : 0;
5304
+ var summarizeRetrievalTraces = (traces) => {
5305
+ if (traces.length === 0) {
5306
+ return;
5307
+ }
5308
+ const totalCases = traces.length;
5309
+ const modeSet = new Set;
5310
+ let vectorCases = 0;
5311
+ let lexicalCases = 0;
5312
+ let transformedCases = 0;
5313
+ let variantCases = 0;
5314
+ let finalCountSum = 0;
5315
+ let vectorCountSum = 0;
5316
+ let lexicalCountSum = 0;
5317
+ let candidateTopKSum = 0;
5318
+ let lexicalTopKSum = 0;
5319
+ for (const trace of traces) {
5320
+ modeSet.add(trace.mode);
5321
+ if (trace.runVector) {
5322
+ vectorCases += 1;
5323
+ }
5324
+ if (trace.runLexical) {
5325
+ lexicalCases += 1;
5326
+ }
5327
+ if (trace.transformedQuery !== trace.query) {
5328
+ transformedCases += 1;
5329
+ }
5330
+ if (trace.variantQueries.length > 0) {
5331
+ variantCases += 1;
5332
+ }
5333
+ finalCountSum += trace.resultCounts.final;
5334
+ vectorCountSum += trace.resultCounts.vector;
5335
+ lexicalCountSum += trace.resultCounts.lexical;
5336
+ candidateTopKSum += trace.candidateTopK;
5337
+ lexicalTopKSum += trace.lexicalTopK;
5338
+ }
5339
+ return {
5340
+ averageCandidateTopK: roundTraceAverage(candidateTopKSum, totalCases),
5341
+ averageFinalCount: roundTraceAverage(finalCountSum, totalCases),
5342
+ averageLexicalCount: roundTraceAverage(lexicalCountSum, totalCases),
5343
+ averageLexicalTopK: roundTraceAverage(lexicalTopKSum, totalCases),
5344
+ averageVectorCount: roundTraceAverage(vectorCountSum, totalCases),
5345
+ lexicalCases,
5346
+ modes: Array.from(modeSet),
5347
+ stageCounts: buildTraceStageCounts(traces),
5348
+ totalCases,
5349
+ transformedCases,
5350
+ variantCases,
5351
+ vectorCases
5352
+ };
5353
+ };
5354
+ var evaluateRAGCollectionCases = async ({
5355
+ collection,
5356
+ input,
5357
+ defaultTopK = DEFAULT_TOP_K2,
5358
+ rerank,
5359
+ includeTrace = false
5360
+ }) => {
5361
+ if (input.dryRun) {
5362
+ return executeDryRunRAGEvaluation(input, defaultTopK).map((caseResult) => ({
5363
+ caseResult,
5364
+ trace: undefined
5365
+ }));
5366
+ }
5367
+ return Promise.all(input.cases.map(async (caseInput, caseIndex) => {
5368
+ const startedAt = Date.now();
5369
+ const mode = resolveEvaluationMode(caseInput);
5370
+ const query = caseInput.query.trim();
5371
+ const expectedIds = normalizeExpectedIds(mode === "chunkId" ? caseInput.expectedChunkIds ?? [] : mode === "source" ? caseInput.expectedSources ?? [] : caseInput.expectedDocumentIds ?? []);
5372
+ const topK = typeof caseInput.topK === "number" ? caseInput.topK : typeof input.topK === "number" ? input.topK : defaultTopK;
5373
+ const searchInput = {
5374
+ filter: typeof caseInput.filter === "object" ? caseInput.filter : input.filter,
5375
+ model: caseInput.model ?? input.model,
5376
+ query,
5377
+ rerank,
5378
+ scoreThreshold: typeof caseInput.scoreThreshold === "number" ? caseInput.scoreThreshold : input.scoreThreshold,
5379
+ topK
5380
+ };
5381
+ const searchOutcome = includeTrace ? await collection.searchWithTrace(searchInput) : {
5382
+ results: await collection.search(searchInput),
5383
+ trace: undefined
5384
+ };
5385
+ const sources = buildSources(searchOutcome.results);
5386
+ const elapsedMs = Date.now() - startedAt;
5387
+ const retrievedIds = normalizeExpectedIds(sources.map((source) => extractExpectedId(source, mode)));
5388
+ return {
5389
+ caseResult: summarizeRAGEvaluationCase({
5390
+ caseIndex,
5391
+ caseInput: { ...caseInput, topK },
5392
+ elapsedMs,
5393
+ expectedIds,
5394
+ mode,
5395
+ query,
5396
+ retrievedIds
5397
+ }),
5398
+ trace: searchOutcome.trace
5399
+ };
5400
+ }));
5401
+ };
5294
5402
  var buildRAGAnswerGroundingCaseDifficultyLeaderboard = (entries) => {
5295
5403
  const grouped = new Map;
5296
5404
  for (const entry of entries) {
@@ -5926,17 +6034,20 @@ var compareRAGRerankers = async ({
5926
6034
  defaultTopK = DEFAULT_TOP_K2
5927
6035
  }) => {
5928
6036
  const entries = await Promise.all(rerankers.map(async (candidate) => {
5929
- const response = await evaluateRAGCollection({
6037
+ const evaluated = await evaluateRAGCollectionCases({
5930
6038
  collection,
5931
6039
  defaultTopK,
5932
6040
  input: suite.input,
6041
+ includeTrace: true,
5933
6042
  rerank: candidate.rerank
5934
6043
  });
6044
+ const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
5935
6045
  return {
5936
6046
  label: candidate.label ?? candidate.id,
5937
6047
  providerName: typeof candidate.rerank === "function" ? undefined : candidate.rerank?.providerName,
5938
6048
  response,
5939
- rerankerId: candidate.id
6049
+ rerankerId: candidate.id,
6050
+ traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
5940
6051
  };
5941
6052
  }));
5942
6053
  const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
@@ -5991,25 +6102,37 @@ var compareRAGRetrievalStrategies = async ({
5991
6102
  defaultTopK = DEFAULT_TOP_K2
5992
6103
  }) => {
5993
6104
  const entries = await Promise.all(retrievals.map(async (candidate) => {
5994
- const response = await evaluateRAGCollection({
6105
+ const tracedCollection = {
6106
+ ...collection,
6107
+ search: (input) => collection.search({
6108
+ ...input,
6109
+ queryTransform: candidate.queryTransform ?? input.queryTransform,
6110
+ rerank: candidate.rerank ?? input.rerank,
6111
+ retrieval: candidate.retrieval ?? input.retrieval
6112
+ }),
6113
+ searchWithTrace: (input) => collection.searchWithTrace({
6114
+ ...input,
6115
+ queryTransform: candidate.queryTransform ?? input.queryTransform,
6116
+ rerank: candidate.rerank ?? input.rerank,
6117
+ retrieval: candidate.retrieval ?? input.retrieval
6118
+ })
6119
+ };
6120
+ const evaluated = await evaluateRAGCollectionCases({
5995
6121
  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
- })
6122
+ ...tracedCollection
6003
6123
  },
6004
6124
  defaultTopK,
6005
6125
  input: suite.input,
6126
+ includeTrace: true,
6006
6127
  rerank: candidate.rerank
6007
6128
  });
6129
+ const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
6008
6130
  return {
6009
6131
  label: candidate.label ?? candidate.id,
6010
6132
  response,
6011
6133
  retrievalId: candidate.id,
6012
- retrievalMode: resolveRetrievalMode(candidate)
6134
+ retrievalMode: resolveRetrievalMode(candidate),
6135
+ traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
6013
6136
  };
6014
6137
  }));
6015
6138
  const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
@@ -6036,37 +6159,14 @@ var evaluateRAGCollection = async ({
6036
6159
  defaultTopK = DEFAULT_TOP_K2,
6037
6160
  rerank
6038
6161
  }) => {
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);
6162
+ const evaluated = await evaluateRAGCollectionCases({
6163
+ collection,
6164
+ defaultTopK,
6165
+ includeTrace: false,
6166
+ input,
6167
+ rerank
6168
+ });
6169
+ return buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
6070
6170
  };
6071
6171
  var executeDryRunRAGEvaluation = (input, defaultTopK = DEFAULT_TOP_K2) => input.cases.map((caseInput, caseIndex) => {
6072
6172
  const mode = resolveEvaluationMode(caseInput);
@@ -11303,5 +11403,5 @@ export {
11303
11403
  aiChat
11304
11404
  };
11305
11405
 
11306
- //# debugId=09C2CE3CC04F038664756E2164756E21
11406
+ //# debugId=3553069554C7849B64756E2164756E21
11307
11407
  //# sourceMappingURL=index.js.map