@absolutejs/absolute 0.19.0-beta.466 → 0.19.0-beta.467
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 +74 -3
- package/dist/ai/index.js.map +6 -5
- package/dist/src/ai/index.d.ts +2 -2
- package/dist/src/ai/rag/collection.d.ts +2 -2
- package/dist/src/ai/rag/index.d.ts +2 -1
- package/dist/src/ai/rag/reranking.d.ts +17 -0
- package/dist/src/ai/rag/types.d.ts +1 -1
- package/dist/types/ai.d.ts +8 -2
- package/package.json +7 -7
package/dist/ai/index.js
CHANGED
|
@@ -2113,6 +2113,71 @@ var aiChat = (config) => {
|
|
|
2113
2113
|
init_constants();
|
|
2114
2114
|
import { Elysia as Elysia2 } from "elysia";
|
|
2115
2115
|
|
|
2116
|
+
// src/ai/rag/reranking.ts
|
|
2117
|
+
var tokenize = (value) => value.toLowerCase().split(/[^a-z0-9]+/i).map((token) => token.trim()).filter((token) => token.length > 1);
|
|
2118
|
+
var scoreHeuristicMatch = (queryTokens, result) => {
|
|
2119
|
+
if (queryTokens.length === 0) {
|
|
2120
|
+
return result.score;
|
|
2121
|
+
}
|
|
2122
|
+
const haystack = tokenize([result.title, result.source, result.chunkText].filter(Boolean).join(" "));
|
|
2123
|
+
const haystackSet = new Set(haystack);
|
|
2124
|
+
const overlap = queryTokens.filter((token) => haystackSet.has(token)).length;
|
|
2125
|
+
const overlapBoost = overlap / queryTokens.length;
|
|
2126
|
+
return result.score + overlapBoost;
|
|
2127
|
+
};
|
|
2128
|
+
var createRAGReranker = (options) => ({
|
|
2129
|
+
defaultModel: options.defaultModel,
|
|
2130
|
+
providerName: options.providerName,
|
|
2131
|
+
rerank: options.rerank
|
|
2132
|
+
});
|
|
2133
|
+
var resolveRAGReranker = (reranker) => {
|
|
2134
|
+
if (!reranker) {
|
|
2135
|
+
return null;
|
|
2136
|
+
}
|
|
2137
|
+
if (typeof reranker === "function") {
|
|
2138
|
+
return {
|
|
2139
|
+
defaultModel: undefined,
|
|
2140
|
+
providerName: undefined,
|
|
2141
|
+
rerank: reranker
|
|
2142
|
+
};
|
|
2143
|
+
}
|
|
2144
|
+
return reranker;
|
|
2145
|
+
};
|
|
2146
|
+
var applyRAGReranking = async ({
|
|
2147
|
+
input,
|
|
2148
|
+
reranker
|
|
2149
|
+
}) => {
|
|
2150
|
+
const resolved = resolveRAGReranker(reranker);
|
|
2151
|
+
if (!resolved) {
|
|
2152
|
+
return input.results;
|
|
2153
|
+
}
|
|
2154
|
+
const effectiveModel = input.model ?? resolved.defaultModel;
|
|
2155
|
+
return Promise.resolve(resolved.rerank({
|
|
2156
|
+
...input,
|
|
2157
|
+
model: effectiveModel
|
|
2158
|
+
}));
|
|
2159
|
+
};
|
|
2160
|
+
var createHeuristicRAGReranker = (options = {}) => createRAGReranker({
|
|
2161
|
+
defaultModel: options.defaultModel ?? "absolute-heuristic-reranker",
|
|
2162
|
+
providerName: options.providerName ?? "absolute_heuristic",
|
|
2163
|
+
rerank: ({ query, results }) => {
|
|
2164
|
+
const queryTokens = tokenize(query);
|
|
2165
|
+
return [...results].map((result, index) => ({
|
|
2166
|
+
index,
|
|
2167
|
+
result,
|
|
2168
|
+
score: scoreHeuristicMatch(queryTokens, result)
|
|
2169
|
+
})).sort((left, right) => {
|
|
2170
|
+
if (right.score !== left.score) {
|
|
2171
|
+
return right.score - left.score;
|
|
2172
|
+
}
|
|
2173
|
+
return left.index - right.index;
|
|
2174
|
+
}).map(({ result, score }) => ({
|
|
2175
|
+
...result,
|
|
2176
|
+
score
|
|
2177
|
+
}));
|
|
2178
|
+
}
|
|
2179
|
+
});
|
|
2180
|
+
|
|
2116
2181
|
// src/ai/rag/embedding.ts
|
|
2117
2182
|
var isEmbeddingProvider = (value) => typeof value === "object" && value !== null && typeof value.embed === "function";
|
|
2118
2183
|
var createRAGEmbeddingProvider = (options) => options;
|
|
@@ -2629,8 +2694,10 @@ var createRAGCollection = (options) => {
|
|
|
2629
2694
|
scoreThreshold: input.scoreThreshold,
|
|
2630
2695
|
topK
|
|
2631
2696
|
};
|
|
2632
|
-
const
|
|
2633
|
-
|
|
2697
|
+
const reranked = await applyRAGReranking({
|
|
2698
|
+
input: rerankInput,
|
|
2699
|
+
reranker: input.rerank ?? options.rerank
|
|
2700
|
+
});
|
|
2634
2701
|
const limited = reranked.slice(0, topK);
|
|
2635
2702
|
if (typeof input.scoreThreshold !== "number") {
|
|
2636
2703
|
return limited;
|
|
@@ -5264,6 +5331,7 @@ export {
|
|
|
5264
5331
|
serializeAIMessage,
|
|
5265
5332
|
searchDocuments,
|
|
5266
5333
|
resolveRAGStreamStage,
|
|
5334
|
+
resolveRAGReranker,
|
|
5267
5335
|
resolveRAGEmbeddingProvider,
|
|
5268
5336
|
resolveAbsoluteSQLiteVecExtensionPath,
|
|
5269
5337
|
resolveAbsoluteSQLiteVec,
|
|
@@ -5306,6 +5374,7 @@ export {
|
|
|
5306
5374
|
deepseek,
|
|
5307
5375
|
createSQLiteRAGStore,
|
|
5308
5376
|
createRAGVector,
|
|
5377
|
+
createRAGReranker,
|
|
5309
5378
|
createRAGHTMXWorkflowRenderConfig,
|
|
5310
5379
|
createRAGHTMXConfig,
|
|
5311
5380
|
createRAGEmbeddingProvider,
|
|
@@ -5313,6 +5382,7 @@ export {
|
|
|
5313
5382
|
createRAGClient,
|
|
5314
5383
|
createMemoryStore,
|
|
5315
5384
|
createInMemoryRAGStore,
|
|
5385
|
+
createHeuristicRAGReranker,
|
|
5316
5386
|
createConversationManager,
|
|
5317
5387
|
buildRAGUpsertInputFromUploads,
|
|
5318
5388
|
buildRAGUpsertInputFromURLs,
|
|
@@ -5323,10 +5393,11 @@ export {
|
|
|
5323
5393
|
buildRAGSourceGroups,
|
|
5324
5394
|
buildRAGCitations,
|
|
5325
5395
|
buildRAGCitationReferenceMap,
|
|
5396
|
+
applyRAGReranking,
|
|
5326
5397
|
alibabaEmbeddings,
|
|
5327
5398
|
alibaba,
|
|
5328
5399
|
aiChat
|
|
5329
5400
|
};
|
|
5330
5401
|
|
|
5331
|
-
//# debugId=
|
|
5402
|
+
//# debugId=7E07B2598537EE7A64756E2164756E21
|
|
5332
5403
|
//# sourceMappingURL=index.js.map
|