@absolutejs/rag 0.0.11 → 0.0.13
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/angular/{ai/index.js → index.js} +13 -13
- package/dist/angular/index.js.map +18 -0
- package/dist/{ai/client → client}/index.js +10 -10
- package/dist/client/index.js.map +16 -0
- package/dist/{ai/client → client}/ui.js +7 -7
- package/dist/client/ui.js.map +13 -0
- package/dist/{ai/rag → rag}/index.js +143 -99
- package/dist/rag/index.js.map +42 -0
- package/dist/{ai/rag → rag}/quality.js +7 -7
- package/dist/rag/quality.js.map +13 -0
- package/dist/{ai/rag → rag}/ui.js +7 -7
- package/dist/rag/ui.js.map +13 -0
- package/dist/react/{ai/index.js → index.js} +27 -27
- package/dist/react/index.js.map +32 -0
- package/dist/src/angular/{ai/ai-rag-stream.service.d.ts → ai-rag-stream.service.d.ts} +1 -1
- package/dist/src/angular/{ai/ai-rag-workflow.service.d.ts → ai-rag-workflow.service.d.ts} +1 -1
- package/dist/src/angular/{ai/rag-client.service.d.ts → rag-client.service.d.ts} +2 -2
- package/dist/src/{ai/client → client}/index.d.ts +2 -1
- package/dist/src/{ai/client → client}/ragClient.d.ts +2 -35
- package/dist/src/{ai/rag → rag}/adapters/inMemory.d.ts +1 -4
- package/dist/src/rag/adapters/postgres.d.ts +3 -0
- package/dist/src/rag/adapters/sqlite.d.ts +3 -0
- package/dist/src/rag/collection.d.ts +6 -0
- package/dist/src/rag/emailProviders.d.ts +6 -0
- package/dist/src/{ai/rag → rag}/embedding.d.ts +1 -5
- package/dist/src/{ai/rag → rag}/embeddingProviders.d.ts +1 -24
- package/dist/src/rag/extractorProviders.d.ts +10 -0
- package/dist/src/{ai/rag → rag}/htmxWorkflowRenderers.d.ts +1 -1
- package/dist/src/{ai/rag → rag}/index.d.ts +3 -6
- package/dist/src/{ai/rag → rag}/presentation.d.ts +4 -24
- package/dist/src/{ai/rag → rag}/quality.d.ts +2 -109
- package/dist/src/{ai/rag → rag}/queryTransforms.d.ts +2 -10
- package/dist/src/{ai/rag → rag}/rerankerProviders.d.ts +1 -10
- package/dist/src/{ai/rag → rag}/reranking.d.ts +2 -10
- package/dist/src/{ai/rag → rag}/retrievalStrategies.d.ts +1 -4
- package/dist/src/{ai/rag → rag}/sync.d.ts +1 -1
- package/dist/src/{ai/rag → rag}/types.d.ts +4 -30
- package/dist/src/react/{ai/useRAG.d.ts → useRAG.d.ts} +1 -1
- package/dist/src/react/{ai/useRAGSearch.d.ts → useRAGSearch.d.ts} +1 -1
- package/dist/src/react/{ai/useRAGStreamProgress.d.ts → useRAGStreamProgress.d.ts} +1 -1
- package/dist/src/svelte/{ai/createRAG.d.ts → createRAG.d.ts} +3 -3
- package/dist/src/svelte/{ai/createRAGSearch.d.ts → createRAGSearch.d.ts} +1 -1
- package/dist/src/svelte/{ai/createRAGStream.d.ts → createRAGStream.d.ts} +1 -1
- package/dist/src/svelte/{ai/createRAGStreamProgress.d.ts → createRAGStreamProgress.d.ts} +1 -1
- package/dist/src/svelte/{ai/createRAGWorkflow.d.ts → createRAGWorkflow.d.ts} +1 -1
- package/dist/src/vue/{ai/useRAG.d.ts → useRAG.d.ts} +3 -3
- package/dist/src/vue/{ai/useRAGSearch.d.ts → useRAGSearch.d.ts} +1 -1
- package/dist/src/vue/{ai/useRAGStream.d.ts → useRAGStream.d.ts} +1 -1
- package/dist/src/vue/{ai/useRAGStreamProgress.d.ts → useRAGStreamProgress.d.ts} +1 -1
- package/dist/src/vue/{ai/useRAGWorkflow.d.ts → useRAGWorkflow.d.ts} +1 -1
- package/dist/svelte/{ai/index.js → index.js} +25 -25
- package/dist/svelte/index.js.map +30 -0
- package/dist/types/adapters.d.ts +37 -0
- package/dist/types/client.d.ts +33 -0
- package/dist/types/core.d.ts +7 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/presentation.d.ts +24 -0
- package/dist/types/providers.d.ts +108 -0
- package/dist/types/quality.d.ts +41 -0
- package/dist/types/retrieval.d.ts +38 -0
- package/dist/types/sync.d.ts +23 -0
- package/dist/vue/{ai/index.js → index.js} +26 -26
- package/dist/vue/index.js.map +30 -0
- package/package.json +29 -29
- package/dist/ai/client/index.js.map +0 -16
- package/dist/ai/client/ui.js.map +0 -13
- package/dist/ai/rag/index.js.map +0 -42
- package/dist/ai/rag/quality.js.map +0 -13
- package/dist/ai/rag/ui.js.map +0 -13
- package/dist/angular/ai/index.js.map +0 -18
- package/dist/react/ai/index.js.map +0 -32
- package/dist/src/ai/rag/adapters/postgres.d.ts +0 -20
- package/dist/src/ai/rag/adapters/sqlite.d.ts +0 -24
- package/dist/src/ai/rag/collection.d.ts +0 -15
- package/dist/src/ai/rag/emailProviders.d.ts +0 -34
- package/dist/src/ai/rag/extractorProviders.d.ts +0 -58
- package/dist/svelte/ai/index.js.map +0 -30
- package/dist/vue/ai/index.js.map +0 -30
- /package/dist/src/angular/{ai/index.d.ts → index.d.ts} +0 -0
- /package/dist/src/{ai/client → client}/createRAGAnswerWorkflow.d.ts +0 -0
- /package/dist/src/{ai/client → client}/createRAGStream.d.ts +0 -0
- /package/dist/src/{ai/client → client}/createRAGWorkflow.d.ts +0 -0
- /package/dist/src/{ai/client → client}/ui.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/accessControl.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/adapters/filtering.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/adapters/queryPlanning.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/adapters/utils.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/atomicWrite.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/chat.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/constants.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/contactProviders.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/grounding.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/htmxConfig.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/ingestion.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/jobState.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/lexical.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/resolveAbsoluteSQLiteVec.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/socialProviders.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/ui.d.ts +0 -0
- /package/dist/src/{ai/rag → rag}/workflowState.d.ts +0 -0
- /package/dist/src/react/{ai/index.d.ts → index.d.ts} +0 -0
- /package/dist/src/react/{ai/useRAGChunkPreview.d.ts → useRAGChunkPreview.d.ts} +0 -0
- /package/dist/src/react/{ai/useRAGCitations.d.ts → useRAGCitations.d.ts} +0 -0
- /package/dist/src/react/{ai/useRAGDocuments.d.ts → useRAGDocuments.d.ts} +0 -0
- /package/dist/src/react/{ai/useRAGEvaluate.d.ts → useRAGEvaluate.d.ts} +0 -0
- /package/dist/src/react/{ai/useRAGGrounding.d.ts → useRAGGrounding.d.ts} +0 -0
- /package/dist/src/react/{ai/useRAGIndexAdmin.d.ts → useRAGIndexAdmin.d.ts} +0 -0
- /package/dist/src/react/{ai/useRAGIngest.d.ts → useRAGIngest.d.ts} +0 -0
- /package/dist/src/react/{ai/useRAGOps.d.ts → useRAGOps.d.ts} +0 -0
- /package/dist/src/react/{ai/useRAGSources.d.ts → useRAGSources.d.ts} +0 -0
- /package/dist/src/react/{ai/useRAGStatus.d.ts → useRAGStatus.d.ts} +0 -0
- /package/dist/src/react/{ai/useRAGStream.d.ts → useRAGStream.d.ts} +0 -0
- /package/dist/src/react/{ai/useRAGWorkflow.d.ts → useRAGWorkflow.d.ts} +0 -0
- /package/dist/src/svelte/{ai/createRAGChunkPreview.d.ts → createRAGChunkPreview.d.ts} +0 -0
- /package/dist/src/svelte/{ai/createRAGCitations.d.ts → createRAGCitations.d.ts} +0 -0
- /package/dist/src/svelte/{ai/createRAGDocuments.d.ts → createRAGDocuments.d.ts} +0 -0
- /package/dist/src/svelte/{ai/createRAGEvaluate.d.ts → createRAGEvaluate.d.ts} +0 -0
- /package/dist/src/svelte/{ai/createRAGGrounding.d.ts → createRAGGrounding.d.ts} +0 -0
- /package/dist/src/svelte/{ai/createRAGIndexAdmin.d.ts → createRAGIndexAdmin.d.ts} +0 -0
- /package/dist/src/svelte/{ai/createRAGIngest.d.ts → createRAGIngest.d.ts} +0 -0
- /package/dist/src/svelte/{ai/createRAGOps.d.ts → createRAGOps.d.ts} +0 -0
- /package/dist/src/svelte/{ai/createRAGSources.d.ts → createRAGSources.d.ts} +0 -0
- /package/dist/src/svelte/{ai/createRAGStatus.d.ts → createRAGStatus.d.ts} +0 -0
- /package/dist/src/svelte/{ai/index.d.ts → index.d.ts} +0 -0
- /package/dist/src/vue/{ai/index.d.ts → index.d.ts} +0 -0
- /package/dist/src/vue/{ai/useRAGChunkPreview.d.ts → useRAGChunkPreview.d.ts} +0 -0
- /package/dist/src/vue/{ai/useRAGCitations.d.ts → useRAGCitations.d.ts} +0 -0
- /package/dist/src/vue/{ai/useRAGDocuments.d.ts → useRAGDocuments.d.ts} +0 -0
- /package/dist/src/vue/{ai/useRAGEvaluate.d.ts → useRAGEvaluate.d.ts} +0 -0
- /package/dist/src/vue/{ai/useRAGGrounding.d.ts → useRAGGrounding.d.ts} +0 -0
- /package/dist/src/vue/{ai/useRAGIndexAdmin.d.ts → useRAGIndexAdmin.d.ts} +0 -0
- /package/dist/src/vue/{ai/useRAGIngest.d.ts → useRAGIngest.d.ts} +0 -0
- /package/dist/src/vue/{ai/useRAGOps.d.ts → useRAGOps.d.ts} +0 -0
- /package/dist/src/vue/{ai/useRAGSources.d.ts → useRAGSources.d.ts} +0 -0
- /package/dist/src/vue/{ai/useRAGStatus.d.ts → useRAGStatus.d.ts} +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
// src/
|
|
2
|
+
// src/rag/quality.ts
|
|
3
3
|
import { mkdir, readFile } from "fs/promises";
|
|
4
4
|
|
|
5
|
-
// src/
|
|
5
|
+
// src/rag/atomicWrite.ts
|
|
6
6
|
import { open, rename, unlink } from "fs/promises";
|
|
7
7
|
import { dirname } from "path";
|
|
8
8
|
var writeFileAtomic = async (path, data, encoding = "utf8") => {
|
|
@@ -37,11 +37,11 @@ var writeFileAtomic = async (path, data, encoding = "utf8") => {
|
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
-
// src/
|
|
40
|
+
// src/rag/quality.ts
|
|
41
41
|
import { dirname as dirname2 } from "path";
|
|
42
42
|
import { generateId } from "@absolutejs/ai";
|
|
43
43
|
|
|
44
|
-
// src/
|
|
44
|
+
// src/rag/grounding.ts
|
|
45
45
|
var getContextString = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
46
46
|
var getContextNumber = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
47
47
|
var getAttachmentName = (source, title) => {
|
|
@@ -735,7 +735,7 @@ var buildRAGGroundingReferences = (sources) => {
|
|
|
735
735
|
});
|
|
736
736
|
};
|
|
737
737
|
|
|
738
|
-
// src/
|
|
738
|
+
// src/rag/presentation.ts
|
|
739
739
|
var buildSourceGroupKey = (source) => source.source ?? source.title ?? source.chunkId;
|
|
740
740
|
var buildSourceLabel2 = (source) => source.source ?? source.title ?? source.chunkId;
|
|
741
741
|
var getContextNumber2 = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
@@ -4538,7 +4538,7 @@ var buildRAGAnswerGroundingEntityQualityPresentation = (view, entityType) => {
|
|
|
4538
4538
|
};
|
|
4539
4539
|
};
|
|
4540
4540
|
|
|
4541
|
-
// src/
|
|
4541
|
+
// src/rag/quality.ts
|
|
4542
4542
|
var DEFAULT_TOP_K = 6;
|
|
4543
4543
|
var DEFAULT_HISTORY_LIMIT = 20;
|
|
4544
4544
|
var DEFAULT_SEARCH_TRACE_TABLE_NAME = "rag_search_traces";
|
|
@@ -11221,10 +11221,10 @@ var summarizeRAGRetrievalComparison = (entries) => ({
|
|
|
11221
11221
|
bestByLowestRuntimeCandidateBudgetExhaustedCases: selectComparisonEntryByLowestTraceMetric(entries, "retrievalId", "runtimeCandidateBudgetExhaustedCases"),
|
|
11222
11222
|
bestByLowestRuntimeUnderfilledTopKCases: selectComparisonEntryByLowestTraceMetric(entries, "retrievalId", "runtimeUnderfilledTopKCases")
|
|
11223
11223
|
});
|
|
11224
|
-
// src/
|
|
11224
|
+
// src/rag/chat.ts
|
|
11225
11225
|
import { Elysia } from "elysia";
|
|
11226
11226
|
|
|
11227
|
-
// src/
|
|
11227
|
+
// src/rag/constants.ts
|
|
11228
11228
|
var HTTP_STATUS_OK = 200;
|
|
11229
11229
|
var HTTP_STATUS_BAD_REQUEST = 400;
|
|
11230
11230
|
var HTTP_STATUS_NOT_FOUND = 404;
|
|
@@ -11235,14 +11235,14 @@ var RAG_DOCUMENT_SLUG_MAX_LENGTH = 48;
|
|
|
11235
11235
|
var RAG_MIN_CHUNK_LENGTH_FLOOR = 120;
|
|
11236
11236
|
var RAG_SEARCH_SCORE_DECIMAL_PLACES = 3;
|
|
11237
11237
|
|
|
11238
|
-
// src/
|
|
11238
|
+
// src/rag/chat.ts
|
|
11239
11239
|
import { createMemoryStore } from "@absolutejs/ai";
|
|
11240
11240
|
import { generateId as generateId2, parseAIMessage } from "@absolutejs/ai";
|
|
11241
11241
|
import { streamAI } from "@absolutejs/ai";
|
|
11242
11242
|
import { streamAIToSSE } from "@absolutejs/ai";
|
|
11243
11243
|
import { resolveRenderers } from "@absolutejs/ai";
|
|
11244
11244
|
|
|
11245
|
-
// src/
|
|
11245
|
+
// src/rag/lexical.ts
|
|
11246
11246
|
var DEFAULT_FUSION_CONSTANT = 60;
|
|
11247
11247
|
var STOP_WORDS = new Set([
|
|
11248
11248
|
"a",
|
|
@@ -11703,7 +11703,7 @@ var resolveRAGHybridSearchOptions = (retrieval) => {
|
|
|
11703
11703
|
};
|
|
11704
11704
|
};
|
|
11705
11705
|
|
|
11706
|
-
// src/
|
|
11706
|
+
// src/rag/queryTransforms.ts
|
|
11707
11707
|
var tokenize2 = (value) => value.toLowerCase().split(/[^a-z0-9]+/i).map((token) => token.trim()).filter((token) => !STOP_WORDS2.has(token)).map((token) => token.endsWith("ies") && token.length > 3 ? `${token.slice(0, -3)}y` : token.endsWith("ing") && token.length > 5 ? token.slice(0, -3) : token.endsWith("ed") && token.length > 4 ? token.slice(0, -2) : token.endsWith("es") && token.length > 4 ? token.slice(0, -2) : token.endsWith("s") && token.length > 3 ? token.slice(0, -1) : token).map((token) => token.endsWith("ck") && token.length > 4 ? token.slice(0, -1) : token).map((token) => token.endsWith("ay") && token.length > 4 ? `${token.slice(0, -2)}i` : token).filter((token) => token.length > 1);
|
|
11708
11708
|
var STOP_WORDS2 = new Set([
|
|
11709
11709
|
"a",
|
|
@@ -11939,7 +11939,7 @@ var applyRAGQueryTransform = async ({
|
|
|
11939
11939
|
}));
|
|
11940
11940
|
};
|
|
11941
11941
|
|
|
11942
|
-
// src/
|
|
11942
|
+
// src/rag/reranking.ts
|
|
11943
11943
|
var tokenize3 = (value) => value.toLowerCase().split(/[^a-z0-9]+/i).map((token) => token.trim()).filter((token) => !STOP_WORDS3.has(token)).map((token) => token.endsWith("ies") && token.length > 3 ? `${token.slice(0, -3)}y` : token.endsWith("ing") && token.length > 5 ? token.slice(0, -3) : token.endsWith("ed") && token.length > 4 ? token.slice(0, -2) : token.endsWith("es") && token.length > 4 ? token.slice(0, -2) : token.endsWith("s") && token.length > 3 ? token.slice(0, -1) : token).map((token) => token.endsWith("ck") && token.length > 4 ? token.slice(0, -1) : token).map((token) => token.endsWith("ay") && token.length > 4 ? `${token.slice(0, -2)}i` : token).filter((token) => token.length > 1);
|
|
11944
11944
|
var STOP_WORDS3 = new Set([
|
|
11945
11945
|
"a",
|
|
@@ -13234,7 +13234,7 @@ var resolveRAGReranker = (reranker) => {
|
|
|
13234
13234
|
return reranker;
|
|
13235
13235
|
};
|
|
13236
13236
|
|
|
13237
|
-
// src/
|
|
13237
|
+
// src/rag/embedding.ts
|
|
13238
13238
|
var isEmbeddingProvider = (value) => typeof value === "object" && value !== null && typeof value.embed === "function";
|
|
13239
13239
|
var createRAGEmbeddingProvider = (options) => options;
|
|
13240
13240
|
var resolveRAGEmbeddingProvider = (providerLike, fallbackEmbed, defaultModel) => {
|
|
@@ -13258,7 +13258,7 @@ var validateRAGEmbeddingDimensions = (vector, expectedDimensions, context) => {
|
|
|
13258
13258
|
}
|
|
13259
13259
|
};
|
|
13260
13260
|
|
|
13261
|
-
// src/
|
|
13261
|
+
// src/rag/ingestion.ts
|
|
13262
13262
|
import { readdir, readFile as readFile2 } from "fs/promises";
|
|
13263
13263
|
import { basename, extname, join, relative, resolve } from "path";
|
|
13264
13264
|
import { gunzipSync, inflateRawSync } from "zlib";
|
|
@@ -19626,7 +19626,7 @@ var loadRAGDocumentsFromDirectory = async (input) => {
|
|
|
19626
19626
|
};
|
|
19627
19627
|
var prepareRAGDirectoryDocuments = async (input) => prepareRAGDocuments(await loadRAGDocumentsFromDirectory(input));
|
|
19628
19628
|
|
|
19629
|
-
// src/
|
|
19629
|
+
// src/rag/collection.ts
|
|
19630
19630
|
var DEFAULT_TOP_K2 = 6;
|
|
19631
19631
|
var AUTO_BALANCED_NATIVE_ROW_ESTIMATE = 5000;
|
|
19632
19632
|
var AUTO_RECALL_NATIVE_ROW_ESTIMATE = 20000;
|
|
@@ -21130,7 +21130,7 @@ var ingestDocuments = async (collection, input) => collection.ingest(input);
|
|
|
21130
21130
|
var ingestRAGDocuments = async (collection, input) => collection.ingest(buildRAGUpsertInputFromDocuments(input));
|
|
21131
21131
|
var searchDocuments = async (collection, input) => collection.search(input);
|
|
21132
21132
|
|
|
21133
|
-
// src/
|
|
21133
|
+
// src/rag/htmxWorkflowRenderers.ts
|
|
21134
21134
|
var escapeHtml = (text) => text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
21135
21135
|
var renderLabelValueRows = (rows) => rows.length > 0 ? `<dl class="rag-status">${rows.map((row) => `<div><dt>${escapeHtml(row.label)}</dt><dd>${escapeHtml(row.value)}</dd></div>`).join("")}</dl>` : "";
|
|
21136
21136
|
var renderBenchmarkRuntimePanel = (input) => {
|
|
@@ -21548,7 +21548,7 @@ var resolveRAGWorkflowRenderers = (custom) => ({
|
|
|
21548
21548
|
status: custom?.status ?? defaultStatus
|
|
21549
21549
|
});
|
|
21550
21550
|
|
|
21551
|
-
// src/
|
|
21551
|
+
// src/rag/types.ts
|
|
21552
21552
|
var getContextNumber3 = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
21553
21553
|
var getContextString3 = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
21554
21554
|
var formatMediaTimestamp3 = (value) => {
|
|
@@ -21704,7 +21704,7 @@ ${sourceLines.join(`
|
|
|
21704
21704
|
${buildRAGContextCitationGuidance(hits)}`;
|
|
21705
21705
|
};
|
|
21706
21706
|
|
|
21707
|
-
// src/
|
|
21707
|
+
// src/rag/chat.ts
|
|
21708
21708
|
var DEFAULT_PATH = "/rag";
|
|
21709
21709
|
var DEFAULT_TOP_K3 = 6;
|
|
21710
21710
|
var DEFAULT_PREFIX_LEN = 12;
|
|
@@ -21714,6 +21714,7 @@ var MAX_INGEST_JOBS = 20;
|
|
|
21714
21714
|
var MAX_ADMIN_ACTIONS = 20;
|
|
21715
21715
|
var MAX_ADMIN_JOBS = 20;
|
|
21716
21716
|
var DEFAULT_STALE_AFTER_MS = 1000 * 60 * 60 * 24 * 7;
|
|
21717
|
+
var WEBSOCKET_OPEN = 1;
|
|
21717
21718
|
var REQUEST_USER_SUB_HEADER = "x-absolutejs-user-sub";
|
|
21718
21719
|
var HTML_HEADERS = { "Content-Type": "text/html; charset=utf-8" };
|
|
21719
21720
|
var defaultParseProvider = (content) => {
|
|
@@ -22157,9 +22158,23 @@ var persistSearchTraceIfConfigured = async (input) => {
|
|
|
22157
22158
|
await input.onPrune?.(input.retention);
|
|
22158
22159
|
}
|
|
22159
22160
|
};
|
|
22160
|
-
var
|
|
22161
|
+
var sendWebSocketError = (ws, error, conversationId, messageId) => {
|
|
22162
|
+
if (typeof ws.readyState === "number" && ws.readyState !== WEBSOCKET_OPEN) {
|
|
22163
|
+
return;
|
|
22164
|
+
}
|
|
22165
|
+
try {
|
|
22166
|
+
ws.send(JSON.stringify({
|
|
22167
|
+
conversationId,
|
|
22168
|
+
message: error instanceof Error ? error.message : String(error),
|
|
22169
|
+
messageId,
|
|
22170
|
+
type: "error"
|
|
22171
|
+
}));
|
|
22172
|
+
} catch {}
|
|
22173
|
+
};
|
|
22174
|
+
var getProviderDefaultEmbeddingModel = (embedding) => embedding !== undefined && typeof embedding === "object" && typeof embedding.defaultModel === "string" ? embedding.defaultModel : undefined;
|
|
22175
|
+
var buildRAGContextFromQuery = async (config, topK, scoreThreshold, queryText, embedding, embeddingModel) => {
|
|
22161
22176
|
const collection = config.collection ?? (config.ragStore ? createRAGCollection({
|
|
22162
|
-
defaultModel: embeddingModel
|
|
22177
|
+
defaultModel: embeddingModel,
|
|
22163
22178
|
defaultTopK: topK,
|
|
22164
22179
|
embedding,
|
|
22165
22180
|
rerank: config.rerank,
|
|
@@ -22172,7 +22187,7 @@ var buildRAGContextFromQuery = async (config, topK, scoreThreshold, queryText, r
|
|
|
22172
22187
|
};
|
|
22173
22188
|
}
|
|
22174
22189
|
const queried = await collection.searchWithTrace({
|
|
22175
|
-
model: embeddingModel
|
|
22190
|
+
model: embeddingModel,
|
|
22176
22191
|
query: queryText,
|
|
22177
22192
|
scoreThreshold,
|
|
22178
22193
|
topK
|
|
@@ -22195,7 +22210,27 @@ var buildRAGContextFromQuery = async (config, topK, scoreThreshold, queryText, r
|
|
|
22195
22210
|
trace: queried.trace
|
|
22196
22211
|
};
|
|
22197
22212
|
};
|
|
22213
|
+
var assertEmbeddingModelConfigured = (config) => {
|
|
22214
|
+
if (config.collection !== undefined) {
|
|
22215
|
+
return;
|
|
22216
|
+
}
|
|
22217
|
+
if (config.ragStore === undefined) {
|
|
22218
|
+
return;
|
|
22219
|
+
}
|
|
22220
|
+
if (config.embeddingModel !== undefined) {
|
|
22221
|
+
return;
|
|
22222
|
+
}
|
|
22223
|
+
const { embedding } = config;
|
|
22224
|
+
if (embedding === undefined || typeof embedding !== "object") {
|
|
22225
|
+
return;
|
|
22226
|
+
}
|
|
22227
|
+
if (getProviderDefaultEmbeddingModel(embedding) !== undefined) {
|
|
22228
|
+
return;
|
|
22229
|
+
}
|
|
22230
|
+
throw new Error("ragChat: an embedding provider is configured but no embedding model is set. " + "Pass `embeddingModel` to ragChat() or set `defaultModel` on the embedding provider. " + "The chat model cannot be used for embeddings.");
|
|
22231
|
+
};
|
|
22198
22232
|
var ragChat = (config) => {
|
|
22233
|
+
assertEmbeddingModelConfigured(config);
|
|
22199
22234
|
const path = config.path ?? DEFAULT_PATH;
|
|
22200
22235
|
const authorizeRAGAction = config.authorizeRAGAction;
|
|
22201
22236
|
const resolveRAGAccessScope = config.resolveRAGAccessScope;
|
|
@@ -22657,53 +22692,57 @@ var ragChat = (config) => {
|
|
|
22657
22692
|
}));
|
|
22658
22693
|
};
|
|
22659
22694
|
const handleMessage = async (ws, rawContent, rawConversationId, rawAttachments) => {
|
|
22660
|
-
const parsed = parseProvider(rawContent);
|
|
22661
|
-
const { content, providerName } = parsed;
|
|
22662
|
-
const userMessageId = generateId2();
|
|
22663
22695
|
const assistantMessageId = generateId2();
|
|
22664
22696
|
const conversationId = rawConversationId ?? generateId2();
|
|
22665
|
-
|
|
22666
|
-
|
|
22667
|
-
|
|
22668
|
-
|
|
22669
|
-
|
|
22670
|
-
|
|
22671
|
-
|
|
22672
|
-
|
|
22673
|
-
|
|
22674
|
-
|
|
22675
|
-
|
|
22676
|
-
|
|
22677
|
-
|
|
22678
|
-
|
|
22679
|
-
|
|
22680
|
-
|
|
22681
|
-
|
|
22682
|
-
|
|
22683
|
-
|
|
22684
|
-
|
|
22685
|
-
|
|
22686
|
-
|
|
22687
|
-
|
|
22688
|
-
|
|
22689
|
-
|
|
22690
|
-
|
|
22691
|
-
|
|
22692
|
-
|
|
22693
|
-
|
|
22694
|
-
|
|
22695
|
-
|
|
22696
|
-
|
|
22697
|
-
|
|
22698
|
-
|
|
22699
|
-
|
|
22700
|
-
|
|
22701
|
-
|
|
22702
|
-
|
|
22703
|
-
|
|
22704
|
-
|
|
22705
|
-
|
|
22706
|
-
|
|
22697
|
+
try {
|
|
22698
|
+
const parsed = parseProvider(rawContent);
|
|
22699
|
+
const { content, providerName } = parsed;
|
|
22700
|
+
const userMessageId = generateId2();
|
|
22701
|
+
const conversation = await store.getOrCreate(conversationId);
|
|
22702
|
+
const history = buildHistory(conversation);
|
|
22703
|
+
const model = resolveModel(config, parsed);
|
|
22704
|
+
appendMessage(conversation, {
|
|
22705
|
+
attachments: rawAttachments,
|
|
22706
|
+
content,
|
|
22707
|
+
conversationId,
|
|
22708
|
+
id: userMessageId,
|
|
22709
|
+
role: "user",
|
|
22710
|
+
timestamp: Date.now()
|
|
22711
|
+
});
|
|
22712
|
+
await store.set(conversationId, conversation);
|
|
22713
|
+
const retrievalStartedAt = Date.now();
|
|
22714
|
+
handleRAGRetrieving(ws, conversationId, assistantMessageId, retrievalStartedAt);
|
|
22715
|
+
const provider = config.provider(providerName);
|
|
22716
|
+
const rag = await buildRAGContextFromQuery(config, topK, scoreThreshold, content, config.embedding, config.embeddingModel);
|
|
22717
|
+
const controller = new AbortController;
|
|
22718
|
+
abortControllers.set(conversationId, controller);
|
|
22719
|
+
const { ragContext, sources, trace } = rag;
|
|
22720
|
+
const retrievedAt = Date.now();
|
|
22721
|
+
const retrievalDurationMs = retrievedAt - retrievalStartedAt;
|
|
22722
|
+
handleRAGRetrieved(ws, conversationId, assistantMessageId, sources, retrievalStartedAt, retrievedAt, retrievalDurationMs, trace);
|
|
22723
|
+
await streamAI(ws, conversationId, assistantMessageId, {
|
|
22724
|
+
completeMeta: includeCompleteSources ? { sources } : undefined,
|
|
22725
|
+
maxTurns: config.maxTurns,
|
|
22726
|
+
messages: [
|
|
22727
|
+
...history,
|
|
22728
|
+
buildUserMessage(content, rawAttachments, ragContext)
|
|
22729
|
+
],
|
|
22730
|
+
model,
|
|
22731
|
+
provider,
|
|
22732
|
+
signal: controller.signal,
|
|
22733
|
+
systemPrompt: config.systemPrompt,
|
|
22734
|
+
thinking: resolveThinking(config, providerName, model),
|
|
22735
|
+
tools: resolveTools(config, providerName, model),
|
|
22736
|
+
onComplete: async (fullResponse, usage) => {
|
|
22737
|
+
await appendAssistantMessage(conversationId, assistantMessageId, fullResponse, sources, usage, model, retrievalStartedAt, retrievedAt, retrievalDurationMs, trace);
|
|
22738
|
+
abortControllers.delete(conversationId);
|
|
22739
|
+
config.onComplete?.(conversationId, fullResponse, usage, sources);
|
|
22740
|
+
}
|
|
22741
|
+
});
|
|
22742
|
+
} catch (error) {
|
|
22743
|
+
abortControllers.delete(conversationId);
|
|
22744
|
+
sendWebSocketError(ws, error, conversationId, assistantMessageId);
|
|
22745
|
+
}
|
|
22707
22746
|
};
|
|
22708
22747
|
const resolveCollection = () => config.collection ?? (ragStore ? createRAGCollection({
|
|
22709
22748
|
defaultModel: config.embeddingModel,
|
|
@@ -29422,7 +29461,6 @@ var ragChat = (config) => {
|
|
|
29422
29461
|
const parsed = parseProvider(lastMessage.content);
|
|
29423
29462
|
const { content, providerName } = parsed;
|
|
29424
29463
|
const model = resolveModel(config, parsed);
|
|
29425
|
-
const ragModel = parsed.model ?? model;
|
|
29426
29464
|
const assistantMessageId = generateId2();
|
|
29427
29465
|
const retrievalStartedAt = Date.now();
|
|
29428
29466
|
yield {
|
|
@@ -29434,7 +29472,7 @@ var ragChat = (config) => {
|
|
|
29434
29472
|
event: "retrieval"
|
|
29435
29473
|
};
|
|
29436
29474
|
const provider = config.provider(providerName);
|
|
29437
|
-
const { ragContext, sources, trace } = await buildRAGContextFromQuery(config, topK, scoreThreshold, content,
|
|
29475
|
+
const { ragContext, sources, trace } = await buildRAGContextFromQuery(config, topK, scoreThreshold, content, config.embedding, config.embeddingModel);
|
|
29438
29476
|
const retrievedAt = Date.now();
|
|
29439
29477
|
const retrievalDurationMs = retrievedAt - retrievalStartedAt;
|
|
29440
29478
|
yield {
|
|
@@ -29485,16 +29523,20 @@ var ragChat = (config) => {
|
|
|
29485
29523
|
if (!message) {
|
|
29486
29524
|
return;
|
|
29487
29525
|
}
|
|
29488
|
-
|
|
29489
|
-
|
|
29490
|
-
|
|
29491
|
-
|
|
29492
|
-
|
|
29493
|
-
|
|
29494
|
-
|
|
29495
|
-
|
|
29496
|
-
|
|
29497
|
-
|
|
29526
|
+
try {
|
|
29527
|
+
if (message.type === "cancel") {
|
|
29528
|
+
handleCancel(message.conversationId);
|
|
29529
|
+
return;
|
|
29530
|
+
}
|
|
29531
|
+
if (message.type === "branch") {
|
|
29532
|
+
await handleBranch(ws, message.messageId, message.conversationId);
|
|
29533
|
+
return;
|
|
29534
|
+
}
|
|
29535
|
+
if (message.type === "message") {
|
|
29536
|
+
await handleMessage(ws, message.content, message.conversationId, message.attachments);
|
|
29537
|
+
}
|
|
29538
|
+
} catch (error) {
|
|
29539
|
+
sendWebSocketError(ws, error, "conversationId" in message ? message.conversationId : undefined);
|
|
29498
29540
|
}
|
|
29499
29541
|
}
|
|
29500
29542
|
}).post(`${path}/search`, async ({ body, request, set }) => {
|
|
@@ -30863,10 +30905,10 @@ var ragChat = (config) => {
|
|
|
30863
30905
|
return { ok: true };
|
|
30864
30906
|
}).use(htmxRoutes());
|
|
30865
30907
|
};
|
|
30866
|
-
// src/
|
|
30908
|
+
// src/rag/htmxConfig.ts
|
|
30867
30909
|
var createRAGHTMXConfig = (config) => config;
|
|
30868
30910
|
var createRAGHTMXWorkflowRenderConfig = (config) => config;
|
|
30869
|
-
// src/
|
|
30911
|
+
// src/rag/rerankerProviders.ts
|
|
30870
30912
|
var rowScore = (row) => row.relevance_score ?? row.relevanceScore ?? row.score ?? 0;
|
|
30871
30913
|
var applyRanking = (candidates, rows, topK) => {
|
|
30872
30914
|
const ranked = [];
|
|
@@ -30954,7 +30996,7 @@ var createJinaRAGReranker = (config) => createHttpCrossEncoderReranker({
|
|
|
30954
30996
|
fallbackModel: "jina-reranker-v2-base-multilingual",
|
|
30955
30997
|
providerName: "jina"
|
|
30956
30998
|
});
|
|
30957
|
-
// src/
|
|
30999
|
+
// src/rag/retrievalStrategies.ts
|
|
30958
31000
|
var tokenize4 = (value) => value.toLowerCase().split(/[^a-z0-9]+/i).map((token) => token.trim()).filter((token) => token.length > 0);
|
|
30959
31001
|
var hasAnyToken2 = (tokens, values) => values.some((value) => tokens.includes(value));
|
|
30960
31002
|
var buildSelectorMetadata = (selector, extra = {}) => ({
|
|
@@ -31040,7 +31082,7 @@ var createHeuristicRAGRetrievalStrategy = (options = {}) => ({
|
|
|
31040
31082
|
return;
|
|
31041
31083
|
}
|
|
31042
31084
|
});
|
|
31043
|
-
// src/
|
|
31085
|
+
// src/rag/accessControl.ts
|
|
31044
31086
|
var createRAGAccessControl = (options) => {
|
|
31045
31087
|
const authorize = options.authorize;
|
|
31046
31088
|
const contextCache = new WeakMap;
|
|
@@ -31065,7 +31107,7 @@ var createRAGAccessControl = (options) => {
|
|
|
31065
31107
|
}) : undefined
|
|
31066
31108
|
};
|
|
31067
31109
|
};
|
|
31068
|
-
// src/
|
|
31110
|
+
// src/rag/embeddingProviders.ts
|
|
31069
31111
|
var DEFAULT_OPENAI_BASE_URL = "https://api.openai.com";
|
|
31070
31112
|
var DEFAULT_GEMINI_BASE_URL = "https://generativelanguage.googleapis.com";
|
|
31071
31113
|
var DEFAULT_OLLAMA_BASE_URL = "http://127.0.0.1:11434";
|
|
@@ -31234,7 +31276,7 @@ var xaiEmbeddings = (config) => openaiCompatibleEmbeddings({
|
|
|
31234
31276
|
apiKey: config.apiKey,
|
|
31235
31277
|
baseUrl: "https://api.x.ai"
|
|
31236
31278
|
});
|
|
31237
|
-
// src/
|
|
31279
|
+
// src/rag/extractorProviders.ts
|
|
31238
31280
|
var DEFAULT_OPENAI_BASE_URL2 = "https://api.openai.com";
|
|
31239
31281
|
var DEFAULT_GEMINI_BASE_URL2 = "https://generativelanguage.googleapis.com";
|
|
31240
31282
|
var DEFAULT_OLLAMA_BASE_URL2 = "http://127.0.0.1:11434";
|
|
@@ -31581,7 +31623,7 @@ var openaiTranscriber = (config) => {
|
|
|
31581
31623
|
}
|
|
31582
31624
|
});
|
|
31583
31625
|
};
|
|
31584
|
-
// src/
|
|
31626
|
+
// src/rag/emailProviders.ts
|
|
31585
31627
|
import { connect as connectTls } from "tls";
|
|
31586
31628
|
var defaultFetch = (...args) => fetch(...args);
|
|
31587
31629
|
var stripHtml2 = (value) => value.replace(/<style[\s\S]*?<\/style>/gi, " ").replace(/<script[\s\S]*?<\/script>/gi, " ").replace(/<[^>]+>/g, " ").replace(/ /gi, " ").replace(/&/gi, "&").replace(/\s+/g, " ").trim();
|
|
@@ -31958,7 +32000,7 @@ ${tag} OK`) || chunk.startsWith(`${tag} OK`));
|
|
|
31958
32000
|
return { messages };
|
|
31959
32001
|
}
|
|
31960
32002
|
});
|
|
31961
|
-
// src/
|
|
32003
|
+
// src/rag/contactProviders.ts
|
|
31962
32004
|
var defaultFetch2 = Object.assign((...args) => fetch(...args), { preconnect: fetch.preconnect });
|
|
31963
32005
|
var GOOGLE_PEOPLE_BASE_URL = "https://people.googleapis.com/v1";
|
|
31964
32006
|
var DEFAULT_GOOGLE_CONTACTS_PAGE_SIZE = 200;
|
|
@@ -31977,7 +32019,9 @@ var toErrorMessage3 = async (response, label) => {
|
|
|
31977
32019
|
return new Error(`${label}: ${response.status} ${response.statusText}${detailMessage ? ` (${detailMessage})` : ""}`);
|
|
31978
32020
|
};
|
|
31979
32021
|
var normalizeString = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
31980
|
-
var toUniqueStringArray = (values) => [
|
|
32022
|
+
var toUniqueStringArray = (values) => [
|
|
32023
|
+
...new Set(values.filter((value) => typeof value === "string" && value.length > 0))
|
|
32024
|
+
];
|
|
31981
32025
|
var toContactTitle = (person, fallbackId) => {
|
|
31982
32026
|
const primaryName = person.names?.find((name) => normalizeString(name.displayName) !== undefined);
|
|
31983
32027
|
const displayName = normalizeString(primaryName?.displayName);
|
|
@@ -32091,7 +32135,7 @@ var createRAGGoogleContactsConnector = (input) => ({
|
|
|
32091
32135
|
};
|
|
32092
32136
|
}
|
|
32093
32137
|
});
|
|
32094
|
-
// src/
|
|
32138
|
+
// src/rag/socialProviders.ts
|
|
32095
32139
|
var defaultFetch3 = Object.assign((...args) => fetch(...args), { preconnect: fetch.preconnect });
|
|
32096
32140
|
var META_GRAPH_BASE_URL = "https://graph.facebook.com/v22.0";
|
|
32097
32141
|
var DEFAULT_META_PAGE_SIZE = 25;
|
|
@@ -32260,7 +32304,7 @@ var createRAGInstagramBusinessConnector = (input) => ({
|
|
|
32260
32304
|
};
|
|
32261
32305
|
}
|
|
32262
32306
|
});
|
|
32263
|
-
// src/
|
|
32307
|
+
// src/rag/sync.ts
|
|
32264
32308
|
var {S3Client } = globalThis.Bun;
|
|
32265
32309
|
import { createHash } from "crypto";
|
|
32266
32310
|
import { mkdir as mkdir2, readFile as readFile3, readdir as readdir2 } from "fs/promises";
|
|
@@ -34810,7 +34854,7 @@ var createRAGSyncScheduler = (input) => {
|
|
|
34810
34854
|
listSchedules: () => [...input.schedules]
|
|
34811
34855
|
};
|
|
34812
34856
|
};
|
|
34813
|
-
// src/
|
|
34857
|
+
// src/rag/jobState.ts
|
|
34814
34858
|
import { mkdir as mkdir3, readFile as readFile4 } from "fs/promises";
|
|
34815
34859
|
import { dirname as dirname4, resolve as resolve3 } from "path";
|
|
34816
34860
|
var parseJobState = (content) => {
|
|
@@ -34852,7 +34896,7 @@ var createRAGFileJobStateStore = (path) => {
|
|
|
34852
34896
|
}
|
|
34853
34897
|
};
|
|
34854
34898
|
};
|
|
34855
|
-
// src/
|
|
34899
|
+
// src/rag/adapters/utils.ts
|
|
34856
34900
|
var vectorDimensionDefault = 24;
|
|
34857
34901
|
var createRAGVector = (text, dimensions = vectorDimensionDefault) => {
|
|
34858
34902
|
const bucket = new Array(dimensions).fill(0);
|
|
@@ -34897,7 +34941,7 @@ var RAG_NATIVE_QUERY_CANDIDATE_LIMIT = 1000;
|
|
|
34897
34941
|
var RAG_VECTOR_DIMENSIONS_DEFAULT = 24;
|
|
34898
34942
|
var TWO_THIRDS = 2 / 3;
|
|
34899
34943
|
|
|
34900
|
-
// src/
|
|
34944
|
+
// src/rag/adapters/filtering.ts
|
|
34901
34945
|
var isObjectRecord4 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
34902
34946
|
var valuesMatch = (expected, actual) => {
|
|
34903
34947
|
if (actual === expected) {
|
|
@@ -34974,7 +35018,7 @@ var matchesMetadataFilterRecord = (record, filter) => {
|
|
|
34974
35018
|
});
|
|
34975
35019
|
};
|
|
34976
35020
|
|
|
34977
|
-
// src/
|
|
35021
|
+
// src/rag/adapters/inMemory.ts
|
|
34978
35022
|
var createInMemoryStatus = (dimensions) => ({
|
|
34979
35023
|
backend: "in_memory",
|
|
34980
35024
|
dimensions,
|
|
@@ -35111,7 +35155,7 @@ var createInMemoryRAGStore = (options = {}) => {
|
|
|
35111
35155
|
getStatus: () => createInMemoryStatus(dimensions)
|
|
35112
35156
|
};
|
|
35113
35157
|
};
|
|
35114
|
-
// src/
|
|
35158
|
+
// src/rag/adapters/queryPlanning.ts
|
|
35115
35159
|
var planNativeCandidateSearchK = (input) => {
|
|
35116
35160
|
const base = Math.min(Math.max(input.topK * input.queryMultiplier, input.topK), input.candidateLimit);
|
|
35117
35161
|
if (input.filteredCandidateCount === undefined || !Number.isFinite(input.filteredCandidateCount)) {
|
|
@@ -35163,7 +35207,7 @@ var summarizeSQLiteCandidateCoverage = (input) => {
|
|
|
35163
35207
|
return "target_sized";
|
|
35164
35208
|
};
|
|
35165
35209
|
|
|
35166
|
-
// src/
|
|
35210
|
+
// src/rag/adapters/postgres.ts
|
|
35167
35211
|
var DEFAULT_DIMENSIONS = RAG_VECTOR_DIMENSIONS_DEFAULT;
|
|
35168
35212
|
var DEFAULT_TABLE_NAME = "rag_chunks";
|
|
35169
35213
|
var DEFAULT_SCHEMA_NAME = "public";
|
|
@@ -36073,11 +36117,11 @@ var createPostgresRAGStore = (options = {}) => {
|
|
|
36073
36117
|
upsert
|
|
36074
36118
|
};
|
|
36075
36119
|
};
|
|
36076
|
-
// src/
|
|
36120
|
+
// src/rag/adapters/sqlite.ts
|
|
36077
36121
|
import { Database } from "bun:sqlite";
|
|
36078
36122
|
import { existsSync as existsSync2 } from "fs";
|
|
36079
36123
|
|
|
36080
|
-
// src/
|
|
36124
|
+
// src/rag/resolveAbsoluteSQLiteVec.ts
|
|
36081
36125
|
import { existsSync, readFileSync } from "fs";
|
|
36082
36126
|
import { arch, platform } from "os";
|
|
36083
36127
|
import { dirname as dirname5, join as join3 } from "path";
|
|
@@ -36176,7 +36220,7 @@ var resolveAbsoluteSQLiteVecExtensionPath = () => {
|
|
|
36176
36220
|
return resolution.status === "resolved" ? resolution.libraryPath ?? null : null;
|
|
36177
36221
|
};
|
|
36178
36222
|
|
|
36179
|
-
// src/
|
|
36223
|
+
// src/rag/adapters/sqlite.ts
|
|
36180
36224
|
var DEFAULT_DIMENSIONS2 = RAG_VECTOR_DIMENSIONS_DEFAULT;
|
|
36181
36225
|
var DEFAULT_TABLE_NAME2 = "rag_chunks";
|
|
36182
36226
|
var DEFAULT_NATIVE_TABLE_SUFFIX = "_vec0";
|
|
@@ -37605,5 +37649,5 @@ export {
|
|
|
37605
37649
|
addRAGEvaluationSuiteCase
|
|
37606
37650
|
};
|
|
37607
37651
|
|
|
37608
|
-
//# debugId=
|
|
37652
|
+
//# debugId=AFC9E59FEEA03C7364756E2164756E21
|
|
37609
37653
|
//# sourceMappingURL=index.js.map
|