@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
|
@@ -20,6 +20,7 @@ export declare const serverMessageToAction: (msg: AIServerMessage) => {
|
|
|
20
20
|
retrievalStartedAt?: undefined;
|
|
21
21
|
retrievalDurationMs?: undefined;
|
|
22
22
|
retrievedAt?: undefined;
|
|
23
|
+
trace?: undefined;
|
|
23
24
|
message?: undefined;
|
|
24
25
|
} | {
|
|
25
26
|
content: string;
|
|
@@ -42,6 +43,7 @@ export declare const serverMessageToAction: (msg: AIServerMessage) => {
|
|
|
42
43
|
retrievalStartedAt?: undefined;
|
|
43
44
|
retrievalDurationMs?: undefined;
|
|
44
45
|
retrievedAt?: undefined;
|
|
46
|
+
trace?: undefined;
|
|
45
47
|
message?: undefined;
|
|
46
48
|
} | {
|
|
47
49
|
conversationId: string;
|
|
@@ -64,6 +66,7 @@ export declare const serverMessageToAction: (msg: AIServerMessage) => {
|
|
|
64
66
|
retrievalStartedAt?: undefined;
|
|
65
67
|
retrievalDurationMs?: undefined;
|
|
66
68
|
retrievedAt?: undefined;
|
|
69
|
+
trace?: undefined;
|
|
67
70
|
message?: undefined;
|
|
68
71
|
} | {
|
|
69
72
|
conversationId: string;
|
|
@@ -86,6 +89,7 @@ export declare const serverMessageToAction: (msg: AIServerMessage) => {
|
|
|
86
89
|
retrievalStartedAt?: undefined;
|
|
87
90
|
retrievalDurationMs?: undefined;
|
|
88
91
|
retrievedAt?: undefined;
|
|
92
|
+
trace?: undefined;
|
|
89
93
|
message?: undefined;
|
|
90
94
|
} | {
|
|
91
95
|
conversationId: string;
|
|
@@ -108,6 +112,7 @@ export declare const serverMessageToAction: (msg: AIServerMessage) => {
|
|
|
108
112
|
retrievalStartedAt?: undefined;
|
|
109
113
|
retrievalDurationMs?: undefined;
|
|
110
114
|
retrievedAt?: undefined;
|
|
115
|
+
trace?: undefined;
|
|
111
116
|
message?: undefined;
|
|
112
117
|
} | {
|
|
113
118
|
conversationId: string;
|
|
@@ -130,6 +135,7 @@ export declare const serverMessageToAction: (msg: AIServerMessage) => {
|
|
|
130
135
|
usage?: undefined;
|
|
131
136
|
retrievalDurationMs?: undefined;
|
|
132
137
|
retrievedAt?: undefined;
|
|
138
|
+
trace?: undefined;
|
|
133
139
|
message?: undefined;
|
|
134
140
|
} | {
|
|
135
141
|
conversationId: string;
|
|
@@ -138,6 +144,7 @@ export declare const serverMessageToAction: (msg: AIServerMessage) => {
|
|
|
138
144
|
retrievalStartedAt: number | undefined;
|
|
139
145
|
retrievedAt: number;
|
|
140
146
|
sources: import("..").RAGSource[];
|
|
147
|
+
trace: import("../..").RAGRetrievalTrace | undefined;
|
|
141
148
|
type: "rag_retrieved";
|
|
142
149
|
content?: undefined;
|
|
143
150
|
input?: undefined;
|
|
@@ -175,4 +182,5 @@ export declare const serverMessageToAction: (msg: AIServerMessage) => {
|
|
|
175
182
|
retrievalStartedAt?: undefined;
|
|
176
183
|
retrievalDurationMs?: undefined;
|
|
177
184
|
retrievedAt?: undefined;
|
|
185
|
+
trace?: undefined;
|
|
178
186
|
} | null;
|
package/dist/svelte/ai/index.js
CHANGED
|
@@ -215,6 +215,7 @@ var serverMessageToAction = (msg) => {
|
|
|
215
215
|
retrievalStartedAt: msg.retrievalStartedAt,
|
|
216
216
|
retrievedAt: msg.retrievedAt,
|
|
217
217
|
sources: msg.sources,
|
|
218
|
+
trace: msg.trace,
|
|
218
219
|
type: "rag_retrieved"
|
|
219
220
|
};
|
|
220
221
|
case "error":
|
|
@@ -482,6 +483,7 @@ var handleRAGRetrieved = (state, action) => {
|
|
|
482
483
|
message.retrievalStartedAt = action.retrievalStartedAt ?? message.retrievalStartedAt;
|
|
483
484
|
message.retrievedAt = action.retrievedAt;
|
|
484
485
|
message.retrievalDurationMs = action.retrievalDurationMs;
|
|
486
|
+
message.retrievalTrace = action.trace;
|
|
485
487
|
conversation.messages = [...conversation.messages];
|
|
486
488
|
};
|
|
487
489
|
var handleRAGRetrieving = (state, action) => {
|
|
@@ -1032,8 +1034,19 @@ var createRAGClient = (options) => {
|
|
|
1032
1034
|
return parseJson(response);
|
|
1033
1035
|
},
|
|
1034
1036
|
async search(input) {
|
|
1035
|
-
const
|
|
1036
|
-
|
|
1037
|
+
const response = await fetchImpl(`${basePath}/search`, {
|
|
1038
|
+
body: JSON.stringify(input),
|
|
1039
|
+
headers: jsonHeaders,
|
|
1040
|
+
method: "POST"
|
|
1041
|
+
});
|
|
1042
|
+
if (!response.ok) {
|
|
1043
|
+
throw new Error(await toErrorMessage(response));
|
|
1044
|
+
}
|
|
1045
|
+
const payload = await parseJson(response);
|
|
1046
|
+
if (!payload.ok) {
|
|
1047
|
+
throw new Error(payload.error ?? "RAG search failed");
|
|
1048
|
+
}
|
|
1049
|
+
return payload.results ?? [];
|
|
1037
1050
|
},
|
|
1038
1051
|
async searchDetailed(input) {
|
|
1039
1052
|
const response = await fetchImpl(`${basePath}/search`, {
|
|
@@ -1758,6 +1771,114 @@ var buildRAGAnswerGroundingEvaluationLeaderboard = (runs) => {
|
|
|
1758
1771
|
totalCases: run.response.totalCases
|
|
1759
1772
|
}));
|
|
1760
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
|
+
};
|
|
1761
1882
|
var buildRAGAnswerGroundingCaseDifficultyLeaderboard = (entries) => {
|
|
1762
1883
|
const grouped = new Map;
|
|
1763
1884
|
for (const entry of entries) {
|
|
@@ -2393,17 +2514,20 @@ var compareRAGRerankers = async ({
|
|
|
2393
2514
|
defaultTopK = DEFAULT_TOP_K
|
|
2394
2515
|
}) => {
|
|
2395
2516
|
const entries = await Promise.all(rerankers.map(async (candidate) => {
|
|
2396
|
-
const
|
|
2517
|
+
const evaluated = await evaluateRAGCollectionCases({
|
|
2397
2518
|
collection,
|
|
2398
2519
|
defaultTopK,
|
|
2399
2520
|
input: suite.input,
|
|
2521
|
+
includeTrace: true,
|
|
2400
2522
|
rerank: candidate.rerank
|
|
2401
2523
|
});
|
|
2524
|
+
const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
|
|
2402
2525
|
return {
|
|
2403
2526
|
label: candidate.label ?? candidate.id,
|
|
2404
2527
|
providerName: typeof candidate.rerank === "function" ? undefined : candidate.rerank?.providerName,
|
|
2405
2528
|
response,
|
|
2406
|
-
rerankerId: candidate.id
|
|
2529
|
+
rerankerId: candidate.id,
|
|
2530
|
+
traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
|
|
2407
2531
|
};
|
|
2408
2532
|
}));
|
|
2409
2533
|
const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
|
|
@@ -2458,25 +2582,37 @@ var compareRAGRetrievalStrategies = async ({
|
|
|
2458
2582
|
defaultTopK = DEFAULT_TOP_K
|
|
2459
2583
|
}) => {
|
|
2460
2584
|
const entries = await Promise.all(retrievals.map(async (candidate) => {
|
|
2461
|
-
const
|
|
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({
|
|
2462
2601
|
collection: {
|
|
2463
|
-
...
|
|
2464
|
-
search: (input) => collection.search({
|
|
2465
|
-
...input,
|
|
2466
|
-
queryTransform: candidate.queryTransform ?? input.queryTransform,
|
|
2467
|
-
rerank: candidate.rerank ?? input.rerank,
|
|
2468
|
-
retrieval: candidate.retrieval ?? input.retrieval
|
|
2469
|
-
})
|
|
2602
|
+
...tracedCollection
|
|
2470
2603
|
},
|
|
2471
2604
|
defaultTopK,
|
|
2472
2605
|
input: suite.input,
|
|
2606
|
+
includeTrace: true,
|
|
2473
2607
|
rerank: candidate.rerank
|
|
2474
2608
|
});
|
|
2609
|
+
const response = buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));
|
|
2475
2610
|
return {
|
|
2476
2611
|
label: candidate.label ?? candidate.id,
|
|
2477
2612
|
response,
|
|
2478
2613
|
retrievalId: candidate.id,
|
|
2479
|
-
retrievalMode: resolveRetrievalMode(candidate)
|
|
2614
|
+
retrievalMode: resolveRetrievalMode(candidate),
|
|
2615
|
+
traceSummary: summarizeRetrievalTraces(evaluated.map((entry) => entry.trace).filter((trace) => Boolean(trace)))
|
|
2480
2616
|
};
|
|
2481
2617
|
}));
|
|
2482
2618
|
const leaderboard = buildRAGEvaluationLeaderboard(entries.map((entry) => ({
|
|
@@ -2503,37 +2639,14 @@ var evaluateRAGCollection = async ({
|
|
|
2503
2639
|
defaultTopK = DEFAULT_TOP_K,
|
|
2504
2640
|
rerank
|
|
2505
2641
|
}) => {
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
const topK = typeof caseInput.topK === "number" ? caseInput.topK : typeof input.topK === "number" ? input.topK : defaultTopK;
|
|
2515
|
-
const searchResults = await collection.search({
|
|
2516
|
-
filter: typeof caseInput.filter === "object" ? caseInput.filter : input.filter,
|
|
2517
|
-
model: caseInput.model ?? input.model,
|
|
2518
|
-
query,
|
|
2519
|
-
rerank,
|
|
2520
|
-
scoreThreshold: typeof caseInput.scoreThreshold === "number" ? caseInput.scoreThreshold : input.scoreThreshold,
|
|
2521
|
-
topK
|
|
2522
|
-
});
|
|
2523
|
-
const sources = buildSources(searchResults);
|
|
2524
|
-
const elapsedMs = Date.now() - startedAt;
|
|
2525
|
-
const retrievedIds = normalizeExpectedIds(sources.map((source) => extractExpectedId(source, mode)));
|
|
2526
|
-
return summarizeRAGEvaluationCase({
|
|
2527
|
-
caseIndex,
|
|
2528
|
-
caseInput: { ...caseInput, topK },
|
|
2529
|
-
elapsedMs,
|
|
2530
|
-
expectedIds,
|
|
2531
|
-
mode,
|
|
2532
|
-
query,
|
|
2533
|
-
retrievedIds
|
|
2534
|
-
});
|
|
2535
|
-
}));
|
|
2536
|
-
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));
|
|
2537
2650
|
};
|
|
2538
2651
|
var executeDryRunRAGEvaluation = (input, defaultTopK = DEFAULT_TOP_K) => input.cases.map((caseInput, caseIndex) => {
|
|
2539
2652
|
const mode = resolveEvaluationMode(caseInput);
|
|
@@ -3306,5 +3419,5 @@ export {
|
|
|
3306
3419
|
createAIStream
|
|
3307
3420
|
};
|
|
3308
3421
|
|
|
3309
|
-
//# debugId=
|
|
3422
|
+
//# debugId=1515E9DBD027AFA064756E2164756E21
|
|
3310
3423
|
//# sourceMappingURL=index.js.map
|