@absolutejs/absolute 0.19.0-beta.530 → 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 +158 -45
- package/dist/ai/client/index.js.map +6 -6
- package/dist/ai/index.js +168 -48
- package/dist/ai/index.js.map +8 -8
- package/dist/ai-client/angular/ai/index.js +15 -2
- package/dist/ai-client/react/ai/index.js +15 -2
- package/dist/ai-client/vue/ai/index.js +15 -2
- package/dist/angular/ai/index.js +16 -3
- package/dist/angular/ai/index.js.map +5 -5
- package/dist/angular/index.js +2 -2
- package/dist/angular/index.js.map +1 -1
- package/dist/angular/server.js +2 -2
- package/dist/angular/server.js.map +1 -1
- package/dist/build.js +2 -2
- package/dist/build.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/react/ai/index.js +158 -45
- package/dist/react/ai/index.js.map +6 -6
- package/dist/src/ai/client/actions.d.ts +8 -0
- package/dist/svelte/ai/index.js +158 -45
- package/dist/svelte/ai/index.js.map +6 -6
- package/dist/types/ai.d.ts +19 -0
- package/dist/vue/ai/index.js +158 -45
- package/dist/vue/ai/index.js.map +6 -6
- package/package.json +7 -7
package/dist/ai/index.js
CHANGED
|
@@ -1823,7 +1823,13 @@ var defaultComplete = (usage, durationMs, model) => {
|
|
|
1823
1823
|
var defaultError = (message) => `<div class="ai-error">${escapeHtml(message)}</div>`;
|
|
1824
1824
|
var defaultCanceled = () => `<div class="ai-canceled">Canceled.</div>`;
|
|
1825
1825
|
var defaultRAGRetrieving = () => `<div class="ai-retrieving">Retrieving sources...</div>`;
|
|
1826
|
-
var
|
|
1826
|
+
var renderTraceSummary = (trace) => {
|
|
1827
|
+
if (!trace) {
|
|
1828
|
+
return "";
|
|
1829
|
+
}
|
|
1830
|
+
return `<div class="ai-trace-summary">` + `Mode: ${escapeHtml(trace.mode)} \xB7 Final: ${trace.resultCounts.final} \xB7 Vector: ${trace.resultCounts.vector} \xB7 Lexical: ${trace.resultCounts.lexical}` + `</div>`;
|
|
1831
|
+
};
|
|
1832
|
+
var defaultRAGRetrieved = (sources, input) => sources.length === 0 ? "" : `<div class="ai-sources">` + `<h4>Citations</h4>` + renderTraceSummary(input?.trace) + `<ul>` + `${sources.map((source) => `<li>[${source.chunkId}] ${escapeHtml(source.text)}${source.source ? ` (${escapeHtml(source.source)})` : ""}</li>`).join("")}` + `</ul>` + `</div>`;
|
|
1827
1833
|
var resolveRenderers = (custom) => ({
|
|
1828
1834
|
chunk: custom?.chunk ?? defaultChunk,
|
|
1829
1835
|
messageStart: custom?.messageStart ?? defaultMessageStart,
|
|
@@ -5285,6 +5291,114 @@ var buildRAGAnswerGroundingEvaluationLeaderboard = (runs) => {
|
|
|
5285
5291
|
totalCases: run.response.totalCases
|
|
5286
5292
|
}));
|
|
5287
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
|
+
};
|
|
5288
5402
|
var buildRAGAnswerGroundingCaseDifficultyLeaderboard = (entries) => {
|
|
5289
5403
|
const grouped = new Map;
|
|
5290
5404
|
for (const entry of entries) {
|
|
@@ -5920,17 +6034,20 @@ var compareRAGRerankers = async ({
|
|
|
5920
6034
|
defaultTopK = DEFAULT_TOP_K2
|
|
5921
6035
|
}) => {
|
|
5922
6036
|
const entries = await Promise.all(rerankers.map(async (candidate) => {
|
|
5923
|
-
const
|
|
6037
|
+
const evaluated = await evaluateRAGCollectionCases({
|
|
5924
6038
|
collection,
|
|
5925
6039
|
defaultTopK,
|
|
5926
6040
|
input: suite.input,
|
|
6041
|
+
includeTrace: true,
|
|
5927
6042
|
rerank: candidate.rerank
|
|
5928
6043
|
});
|
|
6044
|
+
const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
|
|
5929
6045
|
return {
|
|
5930
6046
|
label: candidate.label ?? candidate.id,
|
|
5931
6047
|
providerName: typeof candidate.rerank === "function" ? undefined : candidate.rerank?.providerName,
|
|
5932
6048
|
response,
|
|
5933
|
-
rerankerId: candidate.id
|
|
6049
|
+
rerankerId: candidate.id,
|
|
6050
|
+
traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
|
|
5934
6051
|
};
|
|
5935
6052
|
}));
|
|
5936
6053
|
const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
|
|
@@ -5985,25 +6102,37 @@ var compareRAGRetrievalStrategies = async ({
|
|
|
5985
6102
|
defaultTopK = DEFAULT_TOP_K2
|
|
5986
6103
|
}) => {
|
|
5987
6104
|
const entries = await Promise.all(retrievals.map(async (candidate) => {
|
|
5988
|
-
const
|
|
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({
|
|
5989
6121
|
collection: {
|
|
5990
|
-
...
|
|
5991
|
-
search: (input) => collection.search({
|
|
5992
|
-
...input,
|
|
5993
|
-
queryTransform: candidate.queryTransform ?? input.queryTransform,
|
|
5994
|
-
rerank: candidate.rerank ?? input.rerank,
|
|
5995
|
-
retrieval: candidate.retrieval ?? input.retrieval
|
|
5996
|
-
})
|
|
6122
|
+
...tracedCollection
|
|
5997
6123
|
},
|
|
5998
6124
|
defaultTopK,
|
|
5999
6125
|
input: suite.input,
|
|
6126
|
+
includeTrace: true,
|
|
6000
6127
|
rerank: candidate.rerank
|
|
6001
6128
|
});
|
|
6129
|
+
const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
|
|
6002
6130
|
return {
|
|
6003
6131
|
label: candidate.label ?? candidate.id,
|
|
6004
6132
|
response,
|
|
6005
6133
|
retrievalId: candidate.id,
|
|
6006
|
-
retrievalMode: resolveRetrievalMode(candidate)
|
|
6134
|
+
retrievalMode: resolveRetrievalMode(candidate),
|
|
6135
|
+
traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
|
|
6007
6136
|
};
|
|
6008
6137
|
}));
|
|
6009
6138
|
const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
|
|
@@ -6030,37 +6159,14 @@ var evaluateRAGCollection = async ({
|
|
|
6030
6159
|
defaultTopK = DEFAULT_TOP_K2,
|
|
6031
6160
|
rerank
|
|
6032
6161
|
}) => {
|
|
6033
|
-
|
|
6034
|
-
|
|
6035
|
-
|
|
6036
|
-
|
|
6037
|
-
|
|
6038
|
-
|
|
6039
|
-
|
|
6040
|
-
|
|
6041
|
-
const topK = typeof caseInput.topK === "number" ? caseInput.topK : typeof input.topK === "number" ? input.topK : defaultTopK;
|
|
6042
|
-
const searchResults = await collection.search({
|
|
6043
|
-
filter: typeof caseInput.filter === "object" ? caseInput.filter : input.filter,
|
|
6044
|
-
model: caseInput.model ?? input.model,
|
|
6045
|
-
query,
|
|
6046
|
-
rerank,
|
|
6047
|
-
scoreThreshold: typeof caseInput.scoreThreshold === "number" ? caseInput.scoreThreshold : input.scoreThreshold,
|
|
6048
|
-
topK
|
|
6049
|
-
});
|
|
6050
|
-
const sources = buildSources(searchResults);
|
|
6051
|
-
const elapsedMs = Date.now() - startedAt;
|
|
6052
|
-
const retrievedIds = normalizeExpectedIds(sources.map((source) => extractExpectedId(source, mode)));
|
|
6053
|
-
return summarizeRAGEvaluationCase({
|
|
6054
|
-
caseIndex,
|
|
6055
|
-
caseInput: { ...caseInput, topK },
|
|
6056
|
-
elapsedMs,
|
|
6057
|
-
expectedIds,
|
|
6058
|
-
mode,
|
|
6059
|
-
query,
|
|
6060
|
-
retrievedIds
|
|
6061
|
-
});
|
|
6062
|
-
}));
|
|
6063
|
-
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));
|
|
6064
6170
|
};
|
|
6065
6171
|
var executeDryRunRAGEvaluation = (input, defaultTopK = DEFAULT_TOP_K2) => input.cases.map((caseInput, caseIndex) => {
|
|
6066
6172
|
const mode = resolveEvaluationMode(caseInput);
|
|
@@ -7514,7 +7620,7 @@ var ragChat = (config) => {
|
|
|
7514
7620
|
event: "retrieval"
|
|
7515
7621
|
};
|
|
7516
7622
|
const provider = config.provider(providerName);
|
|
7517
|
-
const { ragContext, sources } = await buildRAGContextFromQuery(config, topK, scoreThreshold, content, ragModel, config.embedding, config.embeddingModel);
|
|
7623
|
+
const { ragContext, sources, trace } = await buildRAGContextFromQuery(config, topK, scoreThreshold, content, ragModel, config.embedding, config.embeddingModel);
|
|
7518
7624
|
const retrievedAt = Date.now();
|
|
7519
7625
|
const retrievalDurationMs = retrievedAt - retrievalStartedAt;
|
|
7520
7626
|
yield {
|
|
@@ -7527,7 +7633,8 @@ var ragChat = (config) => {
|
|
|
7527
7633
|
messageId,
|
|
7528
7634
|
retrievalDurationMs,
|
|
7529
7635
|
retrievalStartedAt,
|
|
7530
|
-
retrievedAt
|
|
7636
|
+
retrievedAt,
|
|
7637
|
+
trace
|
|
7531
7638
|
}),
|
|
7532
7639
|
event: "sources"
|
|
7533
7640
|
};
|
|
@@ -10245,6 +10352,7 @@ var serverMessageToAction = (msg) => {
|
|
|
10245
10352
|
retrievalStartedAt: msg.retrievalStartedAt,
|
|
10246
10353
|
retrievedAt: msg.retrievedAt,
|
|
10247
10354
|
sources: msg.sources,
|
|
10355
|
+
trace: msg.trace,
|
|
10248
10356
|
type: "rag_retrieved"
|
|
10249
10357
|
};
|
|
10250
10358
|
case "error":
|
|
@@ -10512,6 +10620,7 @@ var handleRAGRetrieved = (state, action) => {
|
|
|
10512
10620
|
message.retrievalStartedAt = action.retrievalStartedAt ?? message.retrievalStartedAt;
|
|
10513
10621
|
message.retrievedAt = action.retrievedAt;
|
|
10514
10622
|
message.retrievalDurationMs = action.retrievalDurationMs;
|
|
10623
|
+
message.retrievalTrace = action.trace;
|
|
10515
10624
|
conversation.messages = [...conversation.messages];
|
|
10516
10625
|
};
|
|
10517
10626
|
var handleRAGRetrieving = (state, action) => {
|
|
@@ -11102,8 +11211,19 @@ var createRAGClient = (options) => {
|
|
|
11102
11211
|
return parseJson(response);
|
|
11103
11212
|
},
|
|
11104
11213
|
async search(input) {
|
|
11105
|
-
const
|
|
11106
|
-
|
|
11214
|
+
const response = await fetchImpl(`${basePath}/search`, {
|
|
11215
|
+
body: JSON.stringify(input),
|
|
11216
|
+
headers: jsonHeaders,
|
|
11217
|
+
method: "POST"
|
|
11218
|
+
});
|
|
11219
|
+
if (!response.ok) {
|
|
11220
|
+
throw new Error(await toErrorMessage3(response));
|
|
11221
|
+
}
|
|
11222
|
+
const payload = await parseJson(response);
|
|
11223
|
+
if (!payload.ok) {
|
|
11224
|
+
throw new Error(payload.error ?? "RAG search failed");
|
|
11225
|
+
}
|
|
11226
|
+
return payload.results ?? [];
|
|
11107
11227
|
},
|
|
11108
11228
|
async searchDetailed(input) {
|
|
11109
11229
|
const response = await fetchImpl(`${basePath}/search`, {
|
|
@@ -11283,5 +11403,5 @@ export {
|
|
|
11283
11403
|
aiChat
|
|
11284
11404
|
};
|
|
11285
11405
|
|
|
11286
|
-
//# debugId=
|
|
11406
|
+
//# debugId=3553069554C7849B64756E2164756E21
|
|
11287
11407
|
//# sourceMappingURL=index.js.map
|