@fllf/agent-sdk 0.1.0
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/README.md +240 -0
- package/dist/agent/Agent.d.ts +34 -0
- package/dist/agent/Agent.d.ts.map +1 -0
- package/dist/agent/Agent.js +168 -0
- package/dist/agent/Agent.js.map +1 -0
- package/dist/agent/createAgent.d.ts +4 -0
- package/dist/agent/createAgent.d.ts.map +1 -0
- package/dist/agent/createAgent.js +8 -0
- package/dist/agent/createAgent.js.map +1 -0
- package/dist/agent/index.d.ts +4 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +8 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/types.d.ts +23 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +3 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/config/config.d.ts +35 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +123 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/executors/base.d.ts +44 -0
- package/dist/executors/base.d.ts.map +1 -0
- package/dist/executors/base.js +3 -0
- package/dist/executors/base.js.map +1 -0
- package/dist/executors/index.d.ts +7 -0
- package/dist/executors/index.d.ts.map +1 -0
- package/dist/executors/index.js +10 -0
- package/dist/executors/index.js.map +1 -0
- package/dist/executors/rag-executor.d.ts +16 -0
- package/dist/executors/rag-executor.d.ts.map +1 -0
- package/dist/executors/rag-executor.js +120 -0
- package/dist/executors/rag-executor.js.map +1 -0
- package/dist/executors/simple-chat-executor.d.ts +5 -0
- package/dist/executors/simple-chat-executor.d.ts.map +1 -0
- package/dist/executors/simple-chat-executor.js +77 -0
- package/dist/executors/simple-chat-executor.js.map +1 -0
- package/dist/executors/tool-calling-executor.d.ts +10 -0
- package/dist/executors/tool-calling-executor.d.ts.map +1 -0
- package/dist/executors/tool-calling-executor.js +151 -0
- package/dist/executors/tool-calling-executor.js.map +1 -0
- package/dist/history/base.d.ts +16 -0
- package/dist/history/base.d.ts.map +1 -0
- package/dist/history/base.js +10 -0
- package/dist/history/base.js.map +1 -0
- package/dist/history/in-memory.d.ts +26 -0
- package/dist/history/in-memory.d.ts.map +1 -0
- package/dist/history/in-memory.js +88 -0
- package/dist/history/in-memory.js.map +1 -0
- package/dist/history/index.d.ts +5 -0
- package/dist/history/index.d.ts.map +1 -0
- package/dist/history/index.js +10 -0
- package/dist/history/index.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/LLM.d.ts +23 -0
- package/dist/llm/LLM.d.ts.map +1 -0
- package/dist/llm/LLM.js +404 -0
- package/dist/llm/LLM.js.map +1 -0
- package/dist/llm/errors.d.ts +43 -0
- package/dist/llm/errors.d.ts.map +1 -0
- package/dist/llm/errors.js +128 -0
- package/dist/llm/errors.js.map +1 -0
- package/dist/llm/factory.d.ts +9 -0
- package/dist/llm/factory.d.ts.map +1 -0
- package/dist/llm/factory.js +28 -0
- package/dist/llm/factory.js.map +1 -0
- package/dist/llm/index.d.ts +6 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +18 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/providers/base.d.ts +3 -0
- package/dist/llm/providers/base.d.ts.map +1 -0
- package/dist/llm/providers/base.js +3 -0
- package/dist/llm/providers/base.js.map +1 -0
- package/dist/llm/providers/local.d.ts +6 -0
- package/dist/llm/providers/local.d.ts.map +1 -0
- package/dist/llm/providers/local.js +19 -0
- package/dist/llm/providers/local.js.map +1 -0
- package/dist/llm/providers/openai-compatible.d.ts +13 -0
- package/dist/llm/providers/openai-compatible.d.ts.map +1 -0
- package/dist/llm/providers/openai-compatible.js +176 -0
- package/dist/llm/providers/openai-compatible.js.map +1 -0
- package/dist/llm/providers/openai.d.ts +6 -0
- package/dist/llm/providers/openai.d.ts.map +1 -0
- package/dist/llm/providers/openai.js +23 -0
- package/dist/llm/providers/openai.js.map +1 -0
- package/dist/llm/types.d.ts +116 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +3 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/messages/index.d.ts +3 -0
- package/dist/messages/index.d.ts.map +1 -0
- package/dist/messages/index.js +6 -0
- package/dist/messages/index.js.map +1 -0
- package/dist/messages/message.d.ts +25 -0
- package/dist/messages/message.d.ts.map +1 -0
- package/dist/messages/message.js +110 -0
- package/dist/messages/message.js.map +1 -0
- package/dist/messages/types.d.ts +20 -0
- package/dist/messages/types.d.ts.map +1 -0
- package/dist/messages/types.js +3 -0
- package/dist/messages/types.js.map +1 -0
- package/dist/observability/console-observer.d.ts +10 -0
- package/dist/observability/console-observer.d.ts.map +1 -0
- package/dist/observability/console-observer.js +28 -0
- package/dist/observability/console-observer.js.map +1 -0
- package/dist/observability/index.d.ts +5 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +11 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/observer.d.ts +8 -0
- package/dist/observability/observer.d.ts.map +1 -0
- package/dist/observability/observer.js +46 -0
- package/dist/observability/observer.js.map +1 -0
- package/dist/observability/types.d.ts +34 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability/types.js +3 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/rag/chunking/auto-chunker.d.ts +25 -0
- package/dist/rag/chunking/auto-chunker.d.ts.map +1 -0
- package/dist/rag/chunking/auto-chunker.js +101 -0
- package/dist/rag/chunking/auto-chunker.js.map +1 -0
- package/dist/rag/chunking/chunker.d.ts +44 -0
- package/dist/rag/chunking/chunker.d.ts.map +1 -0
- package/dist/rag/chunking/chunker.js +162 -0
- package/dist/rag/chunking/chunker.js.map +1 -0
- package/dist/rag/chunking/index.d.ts +6 -0
- package/dist/rag/chunking/index.d.ts.map +1 -0
- package/dist/rag/chunking/index.js +22 -0
- package/dist/rag/chunking/index.js.map +1 -0
- package/dist/rag/chunking/markdown-chunker.d.ts +13 -0
- package/dist/rag/chunking/markdown-chunker.d.ts.map +1 -0
- package/dist/rag/chunking/markdown-chunker.js +144 -0
- package/dist/rag/chunking/markdown-chunker.js.map +1 -0
- package/dist/rag/chunking/parent-child.d.ts +16 -0
- package/dist/rag/chunking/parent-child.d.ts.map +1 -0
- package/dist/rag/chunking/parent-child.js +76 -0
- package/dist/rag/chunking/parent-child.js.map +1 -0
- package/dist/rag/chunking/recursive-chunker.d.ts +11 -0
- package/dist/rag/chunking/recursive-chunker.d.ts.map +1 -0
- package/dist/rag/chunking/recursive-chunker.js +27 -0
- package/dist/rag/chunking/recursive-chunker.js.map +1 -0
- package/dist/rag/embeddings/embedder.d.ts +24 -0
- package/dist/rag/embeddings/embedder.d.ts.map +1 -0
- package/dist/rag/embeddings/embedder.js +73 -0
- package/dist/rag/embeddings/embedder.js.map +1 -0
- package/dist/rag/embeddings/embedding-cache.d.ts +40 -0
- package/dist/rag/embeddings/embedding-cache.d.ts.map +1 -0
- package/dist/rag/embeddings/embedding-cache.js +118 -0
- package/dist/rag/embeddings/embedding-cache.js.map +1 -0
- package/dist/rag/embeddings/fake-embedder.d.ts +20 -0
- package/dist/rag/embeddings/fake-embedder.d.ts.map +1 -0
- package/dist/rag/embeddings/fake-embedder.js +55 -0
- package/dist/rag/embeddings/fake-embedder.js.map +1 -0
- package/dist/rag/embeddings/index.d.ts +5 -0
- package/dist/rag/embeddings/index.d.ts.map +1 -0
- package/dist/rag/embeddings/index.js +21 -0
- package/dist/rag/embeddings/index.js.map +1 -0
- package/dist/rag/embeddings/openai-compatible-embedder.d.ts +46 -0
- package/dist/rag/embeddings/openai-compatible-embedder.d.ts.map +1 -0
- package/dist/rag/embeddings/openai-compatible-embedder.js +145 -0
- package/dist/rag/embeddings/openai-compatible-embedder.js.map +1 -0
- package/dist/rag/generation/context-builder.d.ts +22 -0
- package/dist/rag/generation/context-builder.d.ts.map +1 -0
- package/dist/rag/generation/context-builder.js +166 -0
- package/dist/rag/generation/context-builder.js.map +1 -0
- package/dist/rag/generation/generator.d.ts +25 -0
- package/dist/rag/generation/generator.d.ts.map +1 -0
- package/dist/rag/generation/generator.js +185 -0
- package/dist/rag/generation/generator.js.map +1 -0
- package/dist/rag/generation/index.d.ts +4 -0
- package/dist/rag/generation/index.d.ts.map +1 -0
- package/dist/rag/generation/index.js +20 -0
- package/dist/rag/generation/index.js.map +1 -0
- package/dist/rag/generation/verifier.d.ts +13 -0
- package/dist/rag/generation/verifier.d.ts.map +1 -0
- package/dist/rag/generation/verifier.js +43 -0
- package/dist/rag/generation/verifier.js.map +1 -0
- package/dist/rag/index.d.ts +9 -0
- package/dist/rag/index.d.ts.map +1 -0
- package/dist/rag/index.js +25 -0
- package/dist/rag/index.js.map +1 -0
- package/dist/rag/ingestion/index.d.ts +4 -0
- package/dist/rag/ingestion/index.d.ts.map +1 -0
- package/dist/rag/ingestion/index.js +20 -0
- package/dist/rag/ingestion/index.js.map +1 -0
- package/dist/rag/ingestion/loaders.d.ts +69 -0
- package/dist/rag/ingestion/loaders.d.ts.map +1 -0
- package/dist/rag/ingestion/loaders.js +653 -0
- package/dist/rag/ingestion/loaders.js.map +1 -0
- package/dist/rag/ingestion/metadata.d.ts +31 -0
- package/dist/rag/ingestion/metadata.d.ts.map +1 -0
- package/dist/rag/ingestion/metadata.js +81 -0
- package/dist/rag/ingestion/metadata.js.map +1 -0
- package/dist/rag/ingestion/normalizer.d.ts +20 -0
- package/dist/rag/ingestion/normalizer.d.ts.map +1 -0
- package/dist/rag/ingestion/normalizer.js +161 -0
- package/dist/rag/ingestion/normalizer.js.map +1 -0
- package/dist/rag/pipeline.d.ts +62 -0
- package/dist/rag/pipeline.d.ts.map +1 -0
- package/dist/rag/pipeline.js +75 -0
- package/dist/rag/pipeline.js.map +1 -0
- package/dist/rag/retrieval/dense-retriever.d.ts +17 -0
- package/dist/rag/retrieval/dense-retriever.d.ts.map +1 -0
- package/dist/rag/retrieval/dense-retriever.js +21 -0
- package/dist/rag/retrieval/dense-retriever.js.map +1 -0
- package/dist/rag/retrieval/fusion.d.ts +12 -0
- package/dist/rag/retrieval/fusion.d.ts.map +1 -0
- package/dist/rag/retrieval/fusion.js +54 -0
- package/dist/rag/retrieval/fusion.js.map +1 -0
- package/dist/rag/retrieval/http-rerank-model-client.d.ts +41 -0
- package/dist/rag/retrieval/http-rerank-model-client.d.ts.map +1 -0
- package/dist/rag/retrieval/http-rerank-model-client.js +130 -0
- package/dist/rag/retrieval/http-rerank-model-client.js.map +1 -0
- package/dist/rag/retrieval/hybrid-retriever.d.ts +22 -0
- package/dist/rag/retrieval/hybrid-retriever.d.ts.map +1 -0
- package/dist/rag/retrieval/hybrid-retriever.js +49 -0
- package/dist/rag/retrieval/hybrid-retriever.js.map +1 -0
- package/dist/rag/retrieval/index.d.ts +8 -0
- package/dist/rag/retrieval/index.d.ts.map +1 -0
- package/dist/rag/retrieval/index.js +24 -0
- package/dist/rag/retrieval/index.js.map +1 -0
- package/dist/rag/retrieval/reranker.d.ts +30 -0
- package/dist/rag/retrieval/reranker.d.ts.map +1 -0
- package/dist/rag/retrieval/reranker.js +85 -0
- package/dist/rag/retrieval/reranker.js.map +1 -0
- package/dist/rag/retrieval/sparse-retriever.d.ts +14 -0
- package/dist/rag/retrieval/sparse-retriever.d.ts.map +1 -0
- package/dist/rag/retrieval/sparse-retriever.js +18 -0
- package/dist/rag/retrieval/sparse-retriever.js.map +1 -0
- package/dist/rag/retrieval/types.d.ts +11 -0
- package/dist/rag/retrieval/types.d.ts.map +1 -0
- package/dist/rag/retrieval/types.js +10 -0
- package/dist/rag/retrieval/types.js.map +1 -0
- package/dist/rag/retrieval/utils.d.ts +8 -0
- package/dist/rag/retrieval/utils.d.ts.map +1 -0
- package/dist/rag/retrieval/utils.js +114 -0
- package/dist/rag/retrieval/utils.js.map +1 -0
- package/dist/rag/stores/in-memory-document-store.d.ts +14 -0
- package/dist/rag/stores/in-memory-document-store.d.ts.map +1 -0
- package/dist/rag/stores/in-memory-document-store.js +64 -0
- package/dist/rag/stores/in-memory-document-store.js.map +1 -0
- package/dist/rag/stores/in-memory-keyword-store.d.ts +10 -0
- package/dist/rag/stores/in-memory-keyword-store.d.ts.map +1 -0
- package/dist/rag/stores/in-memory-keyword-store.js +99 -0
- package/dist/rag/stores/in-memory-keyword-store.js.map +1 -0
- package/dist/rag/stores/in-memory-vector-store.d.ts +14 -0
- package/dist/rag/stores/in-memory-vector-store.d.ts.map +1 -0
- package/dist/rag/stores/in-memory-vector-store.js +61 -0
- package/dist/rag/stores/in-memory-vector-store.js.map +1 -0
- package/dist/rag/stores/index.d.ts +6 -0
- package/dist/rag/stores/index.d.ts.map +1 -0
- package/dist/rag/stores/index.js +22 -0
- package/dist/rag/stores/index.js.map +1 -0
- package/dist/rag/stores/postgres/index.d.ts +6 -0
- package/dist/rag/stores/postgres/index.d.ts.map +1 -0
- package/dist/rag/stores/postgres/index.js +22 -0
- package/dist/rag/stores/postgres/index.js.map +1 -0
- package/dist/rag/stores/postgres/pg-vector-store.d.ts +16 -0
- package/dist/rag/stores/postgres/pg-vector-store.d.ts.map +1 -0
- package/dist/rag/stores/postgres/pg-vector-store.js +77 -0
- package/dist/rag/stores/postgres/pg-vector-store.js.map +1 -0
- package/dist/rag/stores/postgres/postgres-document-store.d.ts +15 -0
- package/dist/rag/stores/postgres/postgres-document-store.d.ts.map +1 -0
- package/dist/rag/stores/postgres/postgres-document-store.js +174 -0
- package/dist/rag/stores/postgres/postgres-document-store.js.map +1 -0
- package/dist/rag/stores/postgres/postgres-keyword-store.d.ts +15 -0
- package/dist/rag/stores/postgres/postgres-keyword-store.d.ts.map +1 -0
- package/dist/rag/stores/postgres/postgres-keyword-store.js +163 -0
- package/dist/rag/stores/postgres/postgres-keyword-store.js.map +1 -0
- package/dist/rag/stores/postgres/schema.d.ts +8 -0
- package/dist/rag/stores/postgres/schema.d.ts.map +1 -0
- package/dist/rag/stores/postgres/schema.js +91 -0
- package/dist/rag/stores/postgres/schema.js.map +1 -0
- package/dist/rag/stores/postgres/sql.d.ts +23 -0
- package/dist/rag/stores/postgres/sql.d.ts.map +1 -0
- package/dist/rag/stores/postgres/sql.js +177 -0
- package/dist/rag/stores/postgres/sql.js.map +1 -0
- package/dist/rag/stores/postgres/types.d.ts +17 -0
- package/dist/rag/stores/postgres/types.d.ts.map +1 -0
- package/dist/rag/stores/postgres/types.js +3 -0
- package/dist/rag/stores/postgres/types.js.map +1 -0
- package/dist/rag/stores/types.d.ts +36 -0
- package/dist/rag/stores/types.d.ts.map +1 -0
- package/dist/rag/stores/types.js +3 -0
- package/dist/rag/stores/types.js.map +1 -0
- package/dist/rag/stores/utils.d.ts +11 -0
- package/dist/rag/stores/utils.d.ts.map +1 -0
- package/dist/rag/stores/utils.js +200 -0
- package/dist/rag/stores/utils.js.map +1 -0
- package/dist/rag/types.d.ts +174 -0
- package/dist/rag/types.d.ts.map +1 -0
- package/dist/rag/types.js +3 -0
- package/dist/rag/types.js.map +1 -0
- package/dist/tools/base.d.ts +28 -0
- package/dist/tools/base.d.ts.map +1 -0
- package/dist/tools/base.js +68 -0
- package/dist/tools/base.js.map +1 -0
- package/dist/tools/builtin/advancedSearchTool.d.ts +24 -0
- package/dist/tools/builtin/advancedSearchTool.d.ts.map +1 -0
- package/dist/tools/builtin/advancedSearchTool.js +134 -0
- package/dist/tools/builtin/advancedSearchTool.js.map +1 -0
- package/dist/tools/builtin/ragSearchTool.d.ts +29 -0
- package/dist/tools/builtin/ragSearchTool.d.ts.map +1 -0
- package/dist/tools/builtin/ragSearchTool.js +91 -0
- package/dist/tools/builtin/ragSearchTool.js.map +1 -0
- package/dist/tools/executor.d.ts +10 -0
- package/dist/tools/executor.d.ts.map +1 -0
- package/dist/tools/executor.js +86 -0
- package/dist/tools/executor.js.map +1 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +16 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/registry.d.ts +16 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +35 -0
- package/dist/tools/registry.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolvePostgresTableNames = resolvePostgresTableNames;
|
|
4
|
+
exports.quoteIdentifier = quoteIdentifier;
|
|
5
|
+
exports.createJson = createJson;
|
|
6
|
+
exports.createOptionalJson = createOptionalJson;
|
|
7
|
+
exports.readJsonObject = readJsonObject;
|
|
8
|
+
exports.readJsonArray = readJsonArray;
|
|
9
|
+
exports.readJson = readJson;
|
|
10
|
+
exports.toVectorLiteral = toVectorLiteral;
|
|
11
|
+
exports.buildChunkSearchWhere = buildChunkSearchWhere;
|
|
12
|
+
exports.assignIfDefined = assignIfDefined;
|
|
13
|
+
exports.normalizeTopK = normalizeTopK;
|
|
14
|
+
exports.rowToChunkMetadata = rowToChunkMetadata;
|
|
15
|
+
exports.readOptionalString = readOptionalString;
|
|
16
|
+
exports.readOptionalNumber = readOptionalNumber;
|
|
17
|
+
exports.readOptionalStringArray = readOptionalStringArray;
|
|
18
|
+
const DEFAULT_TABLE_PREFIX = 'rag';
|
|
19
|
+
const IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
20
|
+
function resolvePostgresTableNames(tablePrefix = DEFAULT_TABLE_PREFIX) {
|
|
21
|
+
assertSafeIdentifier(tablePrefix, 'tablePrefix');
|
|
22
|
+
return {
|
|
23
|
+
documents: quoteIdentifier(`${tablePrefix}_documents`),
|
|
24
|
+
chunks: quoteIdentifier(`${tablePrefix}_chunks`),
|
|
25
|
+
embeddings: quoteIdentifier(`${tablePrefix}_embeddings`),
|
|
26
|
+
keywordEntries: quoteIdentifier(`${tablePrefix}_keyword_entries`),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function quoteIdentifier(identifier) {
|
|
30
|
+
assertSafeIdentifier(identifier, 'identifier');
|
|
31
|
+
return `"${identifier}"`;
|
|
32
|
+
}
|
|
33
|
+
function createJson(value) {
|
|
34
|
+
return JSON.stringify(value ?? null);
|
|
35
|
+
}
|
|
36
|
+
function createOptionalJson(value) {
|
|
37
|
+
return value === undefined ? null : JSON.stringify(value);
|
|
38
|
+
}
|
|
39
|
+
function readJsonObject(value) {
|
|
40
|
+
const parsed = readJson(value);
|
|
41
|
+
return isRecord(parsed) ? parsed : undefined;
|
|
42
|
+
}
|
|
43
|
+
function readJsonArray(value) {
|
|
44
|
+
const parsed = readJson(value);
|
|
45
|
+
return Array.isArray(parsed) ? parsed : undefined;
|
|
46
|
+
}
|
|
47
|
+
function readJson(value) {
|
|
48
|
+
if (typeof value === 'string') {
|
|
49
|
+
return JSON.parse(value);
|
|
50
|
+
}
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
function toVectorLiteral(vector) {
|
|
54
|
+
return `[${vector.map((value) => String(value)).join(',')}]`;
|
|
55
|
+
}
|
|
56
|
+
function buildChunkSearchWhere(options, startIndex = 1, alias = 'c') {
|
|
57
|
+
const clauses = [];
|
|
58
|
+
const values = [];
|
|
59
|
+
const column = (name) => `${alias}.${quoteIdentifier(name)}`;
|
|
60
|
+
const nextPlaceholder = (value) => {
|
|
61
|
+
values.push(value);
|
|
62
|
+
return `$${startIndex + values.length - 1}`;
|
|
63
|
+
};
|
|
64
|
+
if (options.tenantId !== undefined) {
|
|
65
|
+
clauses.push(`${column('tenant_id')} = ${nextPlaceholder(options.tenantId)}`);
|
|
66
|
+
}
|
|
67
|
+
if (options.knowledgeBaseId !== undefined) {
|
|
68
|
+
clauses.push(`${column('knowledge_base_id')} = ${nextPlaceholder(options.knowledgeBaseId)}`);
|
|
69
|
+
}
|
|
70
|
+
if (options.documentIds !== undefined) {
|
|
71
|
+
clauses.push(`${column('document_id')} = ANY(${nextPlaceholder(options.documentIds)}::text[])`);
|
|
72
|
+
}
|
|
73
|
+
if (options.sources !== undefined) {
|
|
74
|
+
clauses.push(`${column('source')} = ANY(${nextPlaceholder(options.sources)}::text[])`);
|
|
75
|
+
}
|
|
76
|
+
if (options.acl !== undefined) {
|
|
77
|
+
clauses.push(`(${column('acl')} IS NULL OR cardinality(${column('acl')}) = 0 OR ${column('acl')} && ${nextPlaceholder(options.acl)}::text[])`);
|
|
78
|
+
}
|
|
79
|
+
for (const [key, expected] of Object.entries(options.metadataFilter ?? {})) {
|
|
80
|
+
clauses.push(buildMetadataFilterClause({
|
|
81
|
+
key,
|
|
82
|
+
expected,
|
|
83
|
+
metadataAlias: alias,
|
|
84
|
+
nextPlaceholder,
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
clause: clauses.length > 0 ? `WHERE ${clauses.join(' AND ')}` : '',
|
|
89
|
+
values,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function buildMetadataFilterClause(input) {
|
|
93
|
+
const coreColumn = toMetadataColumn(input.key);
|
|
94
|
+
if (coreColumn !== undefined) {
|
|
95
|
+
const column = `${input.metadataAlias}.${quoteIdentifier(coreColumn)}`;
|
|
96
|
+
if (Array.isArray(input.expected)) {
|
|
97
|
+
return `${column} = ANY(${input.nextPlaceholder(input.expected)}::text[])`;
|
|
98
|
+
}
|
|
99
|
+
return `${column} = ${input.nextPlaceholder(input.expected)}`;
|
|
100
|
+
}
|
|
101
|
+
if (Array.isArray(input.expected)) {
|
|
102
|
+
const clauses = input.expected.map((value) => (`${input.metadataAlias}.${quoteIdentifier('extra')} @> ${input.nextPlaceholder(createJson({ [input.key]: value }))}::jsonb`));
|
|
103
|
+
return `(${clauses.join(' OR ')})`;
|
|
104
|
+
}
|
|
105
|
+
return `${input.metadataAlias}.${quoteIdentifier('extra')} @> ${input.nextPlaceholder(createJson({ [input.key]: input.expected }))}::jsonb`;
|
|
106
|
+
}
|
|
107
|
+
function toMetadataColumn(key) {
|
|
108
|
+
const columns = {
|
|
109
|
+
source: 'source',
|
|
110
|
+
title: 'title',
|
|
111
|
+
tenantId: 'tenant_id',
|
|
112
|
+
knowledgeBaseId: 'knowledge_base_id',
|
|
113
|
+
page: 'page',
|
|
114
|
+
startOffset: 'start_offset',
|
|
115
|
+
endOffset: 'end_offset',
|
|
116
|
+
chunkIndex: 'chunk_index',
|
|
117
|
+
};
|
|
118
|
+
return columns[key];
|
|
119
|
+
}
|
|
120
|
+
function assignIfDefined(target, key, value) {
|
|
121
|
+
if (value !== undefined) {
|
|
122
|
+
target[key] = value;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function normalizeTopK(topK) {
|
|
126
|
+
if (topK === undefined) {
|
|
127
|
+
return 10;
|
|
128
|
+
}
|
|
129
|
+
if (!Number.isFinite(topK) || topK <= 0) {
|
|
130
|
+
return 0;
|
|
131
|
+
}
|
|
132
|
+
return Math.floor(topK);
|
|
133
|
+
}
|
|
134
|
+
function rowToChunkMetadata(row) {
|
|
135
|
+
const metadata = {
|
|
136
|
+
source: String(row.source ?? 'inline'),
|
|
137
|
+
chunkIndex: Number(row.chunk_index ?? 0),
|
|
138
|
+
};
|
|
139
|
+
assignIfDefined(metadata, 'title', readOptionalString(row.title));
|
|
140
|
+
assignIfDefined(metadata, 'tenantId', readOptionalString(row.tenant_id));
|
|
141
|
+
assignIfDefined(metadata, 'knowledgeBaseId', readOptionalString(row.knowledge_base_id));
|
|
142
|
+
assignIfDefined(metadata, 'page', readOptionalNumber(row.page));
|
|
143
|
+
assignIfDefined(metadata, 'startOffset', readOptionalNumber(row.start_offset));
|
|
144
|
+
assignIfDefined(metadata, 'endOffset', readOptionalNumber(row.end_offset));
|
|
145
|
+
assignIfDefined(metadata, 'headingPath', readOptionalStringArray(row.heading_path));
|
|
146
|
+
assignIfDefined(metadata, 'acl', readOptionalStringArray(row.acl));
|
|
147
|
+
assignIfDefined(metadata, 'extra', readJsonObject(row.extra));
|
|
148
|
+
return metadata;
|
|
149
|
+
}
|
|
150
|
+
function readOptionalString(value) {
|
|
151
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
152
|
+
}
|
|
153
|
+
function readOptionalNumber(value) {
|
|
154
|
+
if (typeof value === 'number') {
|
|
155
|
+
return value;
|
|
156
|
+
}
|
|
157
|
+
if (typeof value === 'string' && value.length > 0) {
|
|
158
|
+
const parsed = Number(value);
|
|
159
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
160
|
+
}
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
function readOptionalStringArray(value) {
|
|
164
|
+
if (!Array.isArray(value)) {
|
|
165
|
+
return undefined;
|
|
166
|
+
}
|
|
167
|
+
return value.filter((item) => typeof item === 'string');
|
|
168
|
+
}
|
|
169
|
+
function assertSafeIdentifier(value, label) {
|
|
170
|
+
if (!IDENTIFIER_PATTERN.test(value)) {
|
|
171
|
+
throw new Error(`Invalid PostgreSQL ${label}: ${value}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function isRecord(value) {
|
|
175
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../../../src/rag/stores/postgres/sql.ts"],"names":[],"mappings":";;AAaA,8DASC;AAED,0CAIC;AAED,gCAEC;AAED,gDAEC;AAED,wCAIC;AAED,sCAIC;AAED,4BAMC;AAED,0CAEC;AAOD,sDA0CC;AA4CD,0CAQC;AAED,sCASC;AAED,gDAiBC;AAED,gDAEC;AAED,gDAWC;AAED,0DAMC;AA9MD,MAAM,oBAAoB,GAAG,KAAK,CAAC;AACnC,MAAM,kBAAkB,GAAG,0BAA0B,CAAC;AAEtD,SAAgB,yBAAyB,CAAC,WAAW,GAAG,oBAAoB;IACxE,oBAAoB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAEjD,OAAO;QACH,SAAS,EAAE,eAAe,CAAC,GAAG,WAAW,YAAY,CAAC;QACtD,MAAM,EAAE,eAAe,CAAC,GAAG,WAAW,SAAS,CAAC;QAChD,UAAU,EAAE,eAAe,CAAC,GAAG,WAAW,aAAa,CAAC;QACxD,cAAc,EAAE,eAAe,CAAC,GAAG,WAAW,kBAAkB,CAAC;KACpE,CAAC;AACN,CAAC;AAED,SAAgB,eAAe,CAAC,UAAkB;IAC9C,oBAAoB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAE/C,OAAO,IAAI,UAAU,GAAG,CAAC;AAC7B,CAAC;AAED,SAAgB,UAAU,CAAC,KAAc;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAc;IAC7C,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,SAAgB,cAAc,CAAC,KAAc;IACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE/B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED,SAAgB,aAAa,CAAc,KAAc;IACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE/B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAa,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED,SAAgB,QAAQ,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC;IACxC,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAgB,eAAe,CAAC,MAAyB;IACrD,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACjE,CAAC;AAOD,SAAgB,qBAAqB,CACjC,OAAsB,EACtB,UAAU,GAAG,CAAC,EACd,KAAK,GAAG,GAAG;IAEX,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;IACrE,MAAM,eAAe,GAAG,CAAC,KAAc,EAAU,EAAE;QAC/C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnB,OAAO,IAAI,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IAChD,CAAC,CAAC;IAEF,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,eAAe,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,UAAU,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,2BAA2B,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACnJ,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC;YACnC,GAAG;YACH,QAAQ;YACR,aAAa,EAAE,KAAK;YACpB,eAAe;SAClB,CAAC,CAAC,CAAC;IACR,CAAC;IAED,OAAO;QACH,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QAClE,MAAM;KACT,CAAC;AACN,CAAC;AAED,SAAS,yBAAyB,CAAC,KAKlC;IACG,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;QACvE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,OAAO,GAAG,MAAM,UAAU,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC/E,CAAC;QAED,OAAO,GAAG,MAAM,MAAM,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC1C,GAAG,KAAK,CAAC,aAAa,IAAI,eAAe,CAAC,OAAO,CAAC,OAAO,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAC9H,CAAC,CAAC;QAEH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACvC,CAAC;IAED,OAAO,GAAG,KAAK,CAAC,aAAa,IAAI,eAAe,CAAC,OAAO,CAAC,OAAO,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC;AAChJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACjC,MAAM,OAAO,GAA2B;QACpC,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,WAAW;QACrB,eAAe,EAAE,mBAAmB;QACpC,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,cAAc;QAC3B,SAAS,EAAE,YAAY;QACvB,UAAU,EAAE,aAAa;KAC5B,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,SAAgB,eAAe,CAC3B,MAAS,EACT,GAAM,EACN,KAAuB;IAEvB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACxB,CAAC;AACL,CAAC;AAED,SAAgB,aAAa,CAAC,IAAwB;IAClD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACd,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAgB,kBAAkB,CAAC,GAA4B;IAC3D,MAAM,QAAQ,GAAkB;QAC5B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,QAAQ,CAAC;QACtC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;KAC3C,CAAC;IAEF,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACzE,eAAe,CAAC,QAAQ,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACxF,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/E,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3E,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,uBAAuB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IACpF,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAE9D,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAE7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAgB,uBAAuB,CAAC,KAAc;IAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa,EAAE,KAAa;IACtD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface PostgresQueryResult<Row = Record<string, unknown>> {
|
|
2
|
+
rows: Row[];
|
|
3
|
+
}
|
|
4
|
+
export interface PostgresQueryExecutor {
|
|
5
|
+
query<Row = Record<string, unknown>>(text: string, values?: unknown[]): Promise<PostgresQueryResult<Row>>;
|
|
6
|
+
}
|
|
7
|
+
export interface PostgresRagStoreOptions {
|
|
8
|
+
db: PostgresQueryExecutor;
|
|
9
|
+
tablePrefix?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface PostgresTableNames {
|
|
12
|
+
documents: string;
|
|
13
|
+
chunks: string;
|
|
14
|
+
embeddings: string;
|
|
15
|
+
keywordEntries: string;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/rag/stores/postgres/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9D,IAAI,EAAE,GAAG,EAAE,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IAClC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,OAAO,EAAE,GACnB,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,uBAAuB;IACpC,EAAE,EAAE,qBAAqB,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/rag/stores/postgres/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Chunk, EmbeddedChunk, RawDocument } from '../types';
|
|
2
|
+
export interface SearchOptions {
|
|
3
|
+
topK?: number;
|
|
4
|
+
minScore?: number;
|
|
5
|
+
tenantId?: string;
|
|
6
|
+
knowledgeBaseId?: string;
|
|
7
|
+
acl?: string[];
|
|
8
|
+
documentIds?: string[];
|
|
9
|
+
sources?: string[];
|
|
10
|
+
metadataFilter?: Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
export interface ScoredChunkRef {
|
|
13
|
+
chunkId: string;
|
|
14
|
+
documentId: string;
|
|
15
|
+
score: number;
|
|
16
|
+
metadata?: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
export interface DocumentStore {
|
|
19
|
+
upsertDocuments(documents: RawDocument[]): Promise<void>;
|
|
20
|
+
upsertChunks(chunks: Chunk[]): Promise<void>;
|
|
21
|
+
getChunks(ids: string[]): Promise<Chunk[]>;
|
|
22
|
+
getChunksByDocument(documentId: string): Promise<Chunk[]>;
|
|
23
|
+
deleteDocument(documentId: string): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export interface VectorStore {
|
|
26
|
+
readonly dimensions: number;
|
|
27
|
+
upsert(items: EmbeddedChunk[]): Promise<void>;
|
|
28
|
+
search(vector: number[], options?: SearchOptions): Promise<ScoredChunkRef[]>;
|
|
29
|
+
deleteByDocument(documentId: string): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
export interface KeywordStore {
|
|
32
|
+
upsert(chunks: Chunk[]): Promise<void>;
|
|
33
|
+
search(query: string, options?: SearchOptions): Promise<ScoredChunkRef[]>;
|
|
34
|
+
deleteByDocument(documentId: string): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/rag/stores/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,KAAK,EACL,aAAa,EACb,WAAW,EACd,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,aAAa;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC1B,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3C,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1D,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC7E,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,YAAY;IACzB,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC1E,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/rag/stores/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Chunk, EmbeddedChunk, RawDocument } from '../types';
|
|
2
|
+
import type { ScoredChunkRef, SearchOptions } from './types';
|
|
3
|
+
export declare const DEFAULT_SEARCH_TOP_K = 10;
|
|
4
|
+
export declare function cloneRawDocument(document: RawDocument): RawDocument;
|
|
5
|
+
export declare function cloneChunk(chunk: Chunk): Chunk;
|
|
6
|
+
export declare function cloneEmbeddedChunk(item: EmbeddedChunk): EmbeddedChunk;
|
|
7
|
+
export declare function cloneScoredChunkRef(ref: ScoredChunkRef): ScoredChunkRef;
|
|
8
|
+
export declare function normalizeTopK(topK: number | undefined): number;
|
|
9
|
+
export declare function matchesSearchOptions(chunk: Chunk, options?: SearchOptions): boolean;
|
|
10
|
+
export declare function applyScoreOptions(refs: ScoredChunkRef[], options?: SearchOptions): ScoredChunkRef[];
|
|
11
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/rag/stores/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,KAAK,EAIL,aAAa,EACb,WAAW,EACd,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACR,cAAc,EACd,aAAa,EAChB,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,CAYnE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAY9C;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,CAKrE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CAYvE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAU9D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CA8BvF;AAED,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,cAAc,EAAE,EACtB,OAAO,GAAE,aAAkB,GAC5B,cAAc,EAAE,CAiBlB"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_SEARCH_TOP_K = void 0;
|
|
4
|
+
exports.cloneRawDocument = cloneRawDocument;
|
|
5
|
+
exports.cloneChunk = cloneChunk;
|
|
6
|
+
exports.cloneEmbeddedChunk = cloneEmbeddedChunk;
|
|
7
|
+
exports.cloneScoredChunkRef = cloneScoredChunkRef;
|
|
8
|
+
exports.normalizeTopK = normalizeTopK;
|
|
9
|
+
exports.matchesSearchOptions = matchesSearchOptions;
|
|
10
|
+
exports.applyScoreOptions = applyScoreOptions;
|
|
11
|
+
exports.DEFAULT_SEARCH_TOP_K = 10;
|
|
12
|
+
function cloneRawDocument(document) {
|
|
13
|
+
const clone = {
|
|
14
|
+
id: document.id,
|
|
15
|
+
content: document.content,
|
|
16
|
+
metadata: cloneDocumentMetadata(document.metadata),
|
|
17
|
+
};
|
|
18
|
+
if (document.blocks !== undefined) {
|
|
19
|
+
clone.blocks = document.blocks.map(cloneDocumentBlock);
|
|
20
|
+
}
|
|
21
|
+
return clone;
|
|
22
|
+
}
|
|
23
|
+
function cloneChunk(chunk) {
|
|
24
|
+
const clone = {
|
|
25
|
+
id: chunk.id,
|
|
26
|
+
documentId: chunk.documentId,
|
|
27
|
+
content: chunk.content,
|
|
28
|
+
kind: chunk.kind,
|
|
29
|
+
metadata: cloneChunkMetadata(chunk.metadata),
|
|
30
|
+
};
|
|
31
|
+
assignIfDefined(clone, 'parentId', chunk.parentId);
|
|
32
|
+
return clone;
|
|
33
|
+
}
|
|
34
|
+
function cloneEmbeddedChunk(item) {
|
|
35
|
+
return {
|
|
36
|
+
chunk: cloneChunk(item.chunk),
|
|
37
|
+
embedding: [...item.embedding],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function cloneScoredChunkRef(ref) {
|
|
41
|
+
const clone = {
|
|
42
|
+
chunkId: ref.chunkId,
|
|
43
|
+
documentId: ref.documentId,
|
|
44
|
+
score: ref.score,
|
|
45
|
+
};
|
|
46
|
+
if (ref.metadata !== undefined) {
|
|
47
|
+
clone.metadata = { ...ref.metadata };
|
|
48
|
+
}
|
|
49
|
+
return clone;
|
|
50
|
+
}
|
|
51
|
+
function normalizeTopK(topK) {
|
|
52
|
+
if (topK === undefined) {
|
|
53
|
+
return exports.DEFAULT_SEARCH_TOP_K;
|
|
54
|
+
}
|
|
55
|
+
if (!Number.isFinite(topK) || topK <= 0) {
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
return Math.floor(topK);
|
|
59
|
+
}
|
|
60
|
+
function matchesSearchOptions(chunk, options = {}) {
|
|
61
|
+
if (options.tenantId !== undefined && chunk.metadata.tenantId !== options.tenantId) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
if (options.knowledgeBaseId !== undefined
|
|
65
|
+
&& chunk.metadata.knowledgeBaseId !== options.knowledgeBaseId) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
if (options.documentIds !== undefined
|
|
69
|
+
&& !options.documentIds.includes(chunk.documentId)) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
if (options.sources !== undefined
|
|
73
|
+
&& !options.sources.includes(chunk.metadata.source)) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
if (!matchesAcl(chunk.metadata.acl, options.acl)) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
if (!matchesMetadataFilter(chunk.metadata, options.metadataFilter)) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
function applyScoreOptions(refs, options = {}) {
|
|
85
|
+
const minScore = options.minScore;
|
|
86
|
+
const topK = normalizeTopK(options.topK);
|
|
87
|
+
if (topK === 0) {
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
return refs
|
|
91
|
+
.filter((ref) => minScore === undefined || ref.score >= minScore)
|
|
92
|
+
.sort((left, right) => (right.score - left.score
|
|
93
|
+
|| left.documentId.localeCompare(right.documentId)
|
|
94
|
+
|| left.chunkId.localeCompare(right.chunkId)))
|
|
95
|
+
.slice(0, topK)
|
|
96
|
+
.map(cloneScoredChunkRef);
|
|
97
|
+
}
|
|
98
|
+
function cloneDocumentMetadata(metadata) {
|
|
99
|
+
const clone = {
|
|
100
|
+
source: metadata.source,
|
|
101
|
+
};
|
|
102
|
+
assignIfDefined(clone, 'title', metadata.title);
|
|
103
|
+
assignIfDefined(clone, 'mimeType', metadata.mimeType);
|
|
104
|
+
assignIfDefined(clone, 'tenantId', metadata.tenantId);
|
|
105
|
+
assignIfDefined(clone, 'knowledgeBaseId', metadata.knowledgeBaseId);
|
|
106
|
+
assignIfDefined(clone, 'version', metadata.version);
|
|
107
|
+
assignIfDefined(clone, 'checksum', metadata.checksum);
|
|
108
|
+
assignIfDefined(clone, 'createdAt', metadata.createdAt);
|
|
109
|
+
assignIfDefined(clone, 'updatedAt', metadata.updatedAt);
|
|
110
|
+
if (metadata.acl !== undefined) {
|
|
111
|
+
clone.acl = [...metadata.acl];
|
|
112
|
+
}
|
|
113
|
+
if (metadata.extra !== undefined) {
|
|
114
|
+
clone.extra = { ...metadata.extra };
|
|
115
|
+
}
|
|
116
|
+
return clone;
|
|
117
|
+
}
|
|
118
|
+
function cloneChunkMetadata(metadata) {
|
|
119
|
+
const clone = {
|
|
120
|
+
source: metadata.source,
|
|
121
|
+
chunkIndex: metadata.chunkIndex,
|
|
122
|
+
};
|
|
123
|
+
assignIfDefined(clone, 'title', metadata.title);
|
|
124
|
+
assignIfDefined(clone, 'tenantId', metadata.tenantId);
|
|
125
|
+
assignIfDefined(clone, 'knowledgeBaseId', metadata.knowledgeBaseId);
|
|
126
|
+
assignIfDefined(clone, 'page', metadata.page);
|
|
127
|
+
assignIfDefined(clone, 'startOffset', metadata.startOffset);
|
|
128
|
+
assignIfDefined(clone, 'endOffset', metadata.endOffset);
|
|
129
|
+
if (metadata.headingPath !== undefined) {
|
|
130
|
+
clone.headingPath = [...metadata.headingPath];
|
|
131
|
+
}
|
|
132
|
+
if (metadata.acl !== undefined) {
|
|
133
|
+
clone.acl = [...metadata.acl];
|
|
134
|
+
}
|
|
135
|
+
if (metadata.extra !== undefined) {
|
|
136
|
+
clone.extra = { ...metadata.extra };
|
|
137
|
+
}
|
|
138
|
+
return clone;
|
|
139
|
+
}
|
|
140
|
+
function cloneDocumentBlock(block) {
|
|
141
|
+
switch (block.type) {
|
|
142
|
+
case 'heading':
|
|
143
|
+
return { ...block };
|
|
144
|
+
case 'paragraph':
|
|
145
|
+
return { ...block };
|
|
146
|
+
case 'table': {
|
|
147
|
+
const clone = {
|
|
148
|
+
type: 'table',
|
|
149
|
+
markdown: block.markdown,
|
|
150
|
+
};
|
|
151
|
+
if (block.rows !== undefined) {
|
|
152
|
+
clone.rows = [...block.rows];
|
|
153
|
+
}
|
|
154
|
+
return clone;
|
|
155
|
+
}
|
|
156
|
+
case 'code':
|
|
157
|
+
return { ...block };
|
|
158
|
+
case 'image':
|
|
159
|
+
return { ...block };
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
function matchesAcl(chunkAcl, requestedAcl) {
|
|
163
|
+
if (requestedAcl === undefined) {
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
if (chunkAcl === undefined || chunkAcl.length === 0) {
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
return chunkAcl.some((acl) => requestedAcl.includes(acl));
|
|
170
|
+
}
|
|
171
|
+
function matchesMetadataFilter(metadata, filter) {
|
|
172
|
+
if (filter === undefined) {
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
return Object.entries(filter).every(([key, expected]) => {
|
|
176
|
+
const actual = readMetadataValue(metadata, key);
|
|
177
|
+
return matchesFilterValue(actual, expected);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
function readMetadataValue(metadata, key) {
|
|
181
|
+
if (key in metadata) {
|
|
182
|
+
return metadata[key];
|
|
183
|
+
}
|
|
184
|
+
return metadata.extra?.[key];
|
|
185
|
+
}
|
|
186
|
+
function matchesFilterValue(actual, expected) {
|
|
187
|
+
if (Array.isArray(expected)) {
|
|
188
|
+
return expected.some((value) => matchesFilterValue(actual, value));
|
|
189
|
+
}
|
|
190
|
+
if (Array.isArray(actual)) {
|
|
191
|
+
return actual.some((value) => Object.is(value, expected));
|
|
192
|
+
}
|
|
193
|
+
return Object.is(actual, expected);
|
|
194
|
+
}
|
|
195
|
+
function assignIfDefined(target, key, value) {
|
|
196
|
+
if (value !== undefined) {
|
|
197
|
+
target[key] = value;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/rag/stores/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import type { ChatModel, TokenUsage } from '../llm';
|
|
2
|
+
import type { TraceContext } from '../observability';
|
|
3
|
+
export type ChunkKind = 'text' | 'table' | 'code' | 'image_text';
|
|
4
|
+
export type RetrievalSource = 'dense' | 'sparse' | 'hybrid' | 'rerank';
|
|
5
|
+
export type RagConfidence = 'high' | 'medium' | 'low';
|
|
6
|
+
/**
|
|
7
|
+
* RawDocument 是文档进入 RAG 系统后的标准形态。
|
|
8
|
+
* Loader / Parser 可以处理不同来源,但进入切块层前必须归一成这个结构。
|
|
9
|
+
*/
|
|
10
|
+
export interface RawDocument {
|
|
11
|
+
id: string;
|
|
12
|
+
content: string;
|
|
13
|
+
metadata: DocumentMetadata;
|
|
14
|
+
blocks?: DocumentBlock[];
|
|
15
|
+
}
|
|
16
|
+
export interface DocumentMetadata {
|
|
17
|
+
source: string;
|
|
18
|
+
title?: string;
|
|
19
|
+
mimeType?: string;
|
|
20
|
+
tenantId?: string;
|
|
21
|
+
knowledgeBaseId?: string;
|
|
22
|
+
acl?: string[];
|
|
23
|
+
version?: string;
|
|
24
|
+
checksum?: string;
|
|
25
|
+
createdAt?: string;
|
|
26
|
+
updatedAt?: string;
|
|
27
|
+
extra?: Record<string, unknown>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 结构化 block 用来保留 Markdown、表格、代码等文档语义。
|
|
31
|
+
* 初始实现可以只用 content,后续 chunker 可逐步利用 blocks 做更精细切割。
|
|
32
|
+
*/
|
|
33
|
+
export type DocumentBlock = {
|
|
34
|
+
type: 'heading';
|
|
35
|
+
text: string;
|
|
36
|
+
level: number;
|
|
37
|
+
} | {
|
|
38
|
+
type: 'paragraph';
|
|
39
|
+
text: string;
|
|
40
|
+
} | {
|
|
41
|
+
type: 'table';
|
|
42
|
+
markdown: string;
|
|
43
|
+
rows?: unknown[];
|
|
44
|
+
} | {
|
|
45
|
+
type: 'code';
|
|
46
|
+
language?: string;
|
|
47
|
+
code: string;
|
|
48
|
+
} | {
|
|
49
|
+
type: 'image';
|
|
50
|
+
alt?: string;
|
|
51
|
+
text?: string;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Chunk 是检索和引用的最小稳定单元。
|
|
55
|
+
* parentId 预留给 parent-child chunk:小 chunk 负责召回,大 chunk 负责提供上下文。
|
|
56
|
+
*/
|
|
57
|
+
export interface Chunk {
|
|
58
|
+
id: string;
|
|
59
|
+
documentId: string;
|
|
60
|
+
parentId?: string;
|
|
61
|
+
content: string;
|
|
62
|
+
kind: ChunkKind;
|
|
63
|
+
metadata: ChunkMetadata;
|
|
64
|
+
}
|
|
65
|
+
export interface ChunkMetadata {
|
|
66
|
+
source: string;
|
|
67
|
+
title?: string;
|
|
68
|
+
tenantId?: string;
|
|
69
|
+
knowledgeBaseId?: string;
|
|
70
|
+
headingPath?: string[];
|
|
71
|
+
page?: number;
|
|
72
|
+
startOffset?: number;
|
|
73
|
+
endOffset?: number;
|
|
74
|
+
chunkIndex: number;
|
|
75
|
+
acl?: string[];
|
|
76
|
+
extra?: Record<string, unknown>;
|
|
77
|
+
}
|
|
78
|
+
export interface EmbeddedChunk {
|
|
79
|
+
chunk: Chunk;
|
|
80
|
+
embedding: number[];
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* RetrievedChunk 只表达“证据片段及其分数”,不表达最终答案。
|
|
84
|
+
* 这样 retrieve() 可以被工具调用、调试和评测复用。
|
|
85
|
+
*/
|
|
86
|
+
export interface RetrievedChunk {
|
|
87
|
+
chunk: Chunk;
|
|
88
|
+
score: number;
|
|
89
|
+
source: RetrievalSource;
|
|
90
|
+
metadata?: Record<string, unknown>;
|
|
91
|
+
}
|
|
92
|
+
export interface Citation {
|
|
93
|
+
/**
|
|
94
|
+
* 生成上下文中的稳定引用编号,通常渲染为 [1]、[2]。
|
|
95
|
+
*/
|
|
96
|
+
index: number;
|
|
97
|
+
chunkId: string;
|
|
98
|
+
documentId: string;
|
|
99
|
+
source: string;
|
|
100
|
+
title?: string;
|
|
101
|
+
headingPath?: string[];
|
|
102
|
+
page?: number;
|
|
103
|
+
quote?: string;
|
|
104
|
+
metadata?: Record<string, unknown>;
|
|
105
|
+
}
|
|
106
|
+
export interface RagContextItem {
|
|
107
|
+
citation: Citation;
|
|
108
|
+
chunk: Chunk;
|
|
109
|
+
content: string;
|
|
110
|
+
score: number;
|
|
111
|
+
source: RetrievalSource;
|
|
112
|
+
tokenEstimate: number;
|
|
113
|
+
}
|
|
114
|
+
export interface RagContext {
|
|
115
|
+
query: string;
|
|
116
|
+
text: string;
|
|
117
|
+
items: RagContextItem[];
|
|
118
|
+
citations: Citation[];
|
|
119
|
+
estimatedTokens: number;
|
|
120
|
+
}
|
|
121
|
+
export interface RagAnswer {
|
|
122
|
+
answer: string;
|
|
123
|
+
citations: Citation[];
|
|
124
|
+
confidence: RagConfidence;
|
|
125
|
+
retrieved: RetrievedChunk[];
|
|
126
|
+
usage?: TokenUsage;
|
|
127
|
+
metadata?: Record<string, unknown>;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* ingest() 先支持直接传标准文档,也预留 content/source 给后续 Loader 层。
|
|
131
|
+
* 具体实现应在写入索引前补齐 id、checksum、tenantId、acl 等元数据。
|
|
132
|
+
*/
|
|
133
|
+
export interface IngestInput {
|
|
134
|
+
documents?: RawDocument[];
|
|
135
|
+
content?: string;
|
|
136
|
+
data?: Uint8Array | ArrayBuffer;
|
|
137
|
+
source?: string;
|
|
138
|
+
mimeType?: string;
|
|
139
|
+
metadata?: Partial<DocumentMetadata>;
|
|
140
|
+
tenantId?: string;
|
|
141
|
+
knowledgeBaseId?: string;
|
|
142
|
+
acl?: string[];
|
|
143
|
+
replaceExisting?: boolean;
|
|
144
|
+
}
|
|
145
|
+
export interface IngestResult {
|
|
146
|
+
documentCount: number;
|
|
147
|
+
chunkCount: number;
|
|
148
|
+
documentIds: string[];
|
|
149
|
+
chunkIds: string[];
|
|
150
|
+
skippedDocumentIds?: string[];
|
|
151
|
+
metadata?: Record<string, unknown>;
|
|
152
|
+
}
|
|
153
|
+
export interface RetrieveOptions {
|
|
154
|
+
topK?: number;
|
|
155
|
+
minScore?: number;
|
|
156
|
+
tenantId?: string;
|
|
157
|
+
knowledgeBaseId?: string;
|
|
158
|
+
acl?: string[];
|
|
159
|
+
documentIds?: string[];
|
|
160
|
+
sources?: string[];
|
|
161
|
+
metadataFilter?: Record<string, unknown>;
|
|
162
|
+
trace?: TraceContext;
|
|
163
|
+
}
|
|
164
|
+
export interface AnswerOptions extends RetrieveOptions {
|
|
165
|
+
/**
|
|
166
|
+
* RAG 本身不拥有模型实例,生成阶段使用调用方传入的 ChatModel。
|
|
167
|
+
*/
|
|
168
|
+
llm?: ChatModel;
|
|
169
|
+
maxContextTokens?: number;
|
|
170
|
+
requireCitations?: boolean;
|
|
171
|
+
systemPrompt?: string;
|
|
172
|
+
metadata?: Record<string, unknown>;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=types.d.ts.map
|