plugin-knowledge-base 1.0.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.
Files changed (39) hide show
  1. package/README.md +24 -0
  2. package/client.d.ts +2 -0
  3. package/client.js +1 -0
  4. package/dist/client/index.js +10 -0
  5. package/dist/externalVersion.js +22 -0
  6. package/dist/index.js +48 -0
  7. package/dist/locale/en-US.json +44 -0
  8. package/dist/locale/vi-VN.json +44 -0
  9. package/dist/node_modules/@langchain/textsplitters/LICENSE +21 -0
  10. package/dist/node_modules/@langchain/textsplitters/dist/_virtual/rolldown_runtime.cjs +25 -0
  11. package/dist/node_modules/@langchain/textsplitters/dist/index.cjs +7 -0
  12. package/dist/node_modules/@langchain/textsplitters/dist/index.d.cts +2 -0
  13. package/dist/node_modules/@langchain/textsplitters/dist/index.d.ts +2 -0
  14. package/dist/node_modules/@langchain/textsplitters/dist/index.js +3 -0
  15. package/dist/node_modules/@langchain/textsplitters/dist/text_splitter.cjs +539 -0
  16. package/dist/node_modules/@langchain/textsplitters/dist/text_splitter.d.cts +84 -0
  17. package/dist/node_modules/@langchain/textsplitters/dist/text_splitter.d.ts +84 -0
  18. package/dist/node_modules/@langchain/textsplitters/dist/text_splitter.js +532 -0
  19. package/dist/node_modules/@langchain/textsplitters/package.json +1 -0
  20. package/dist/server/collections/ai-knowledge-base-documents.js +88 -0
  21. package/dist/server/collections/ai-knowledge-bases.js +105 -0
  22. package/dist/server/collections/ai-vector-databases.js +63 -0
  23. package/dist/server/collections/ai-vector-stores.js +72 -0
  24. package/dist/server/features/knowledge-base-impl.js +94 -0
  25. package/dist/server/features/vector-database-impl.js +75 -0
  26. package/dist/server/features/vector-database-provider-impl.js +63 -0
  27. package/dist/server/features/vector-store-provider-impl.js +141 -0
  28. package/dist/server/index.js +49 -0
  29. package/dist/server/pipeline/text-splitter.js +69 -0
  30. package/dist/server/pipeline/vectorization.js +144 -0
  31. package/dist/server/plugin.js +131 -0
  32. package/dist/server/providers/pgvector.js +134 -0
  33. package/dist/server/resources/ai-knowledge-base-documents.js +134 -0
  34. package/dist/server/resources/ai-knowledge-base.js +168 -0
  35. package/dist/server/resources/ai-vector-databases.js +122 -0
  36. package/dist/server/resources/ai-vector-stores.js +95 -0
  37. package/package.json +40 -0
  38. package/server.d.ts +2 -0
  39. package/server.js +1 -0
@@ -0,0 +1,105 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var ai_knowledge_bases_exports = {};
28
+ __export(ai_knowledge_bases_exports, {
29
+ default: () => ai_knowledge_bases_default
30
+ });
31
+ module.exports = __toCommonJS(ai_knowledge_bases_exports);
32
+ var import_database = require("@nocobase/database");
33
+ var ai_knowledge_bases_default = (0, import_database.defineCollection)({
34
+ name: "aiKnowledgeBases",
35
+ fields: [
36
+ {
37
+ type: "uid",
38
+ name: "id",
39
+ primaryKey: true
40
+ },
41
+ {
42
+ type: "string",
43
+ name: "name",
44
+ length: 255
45
+ },
46
+ {
47
+ type: "text",
48
+ name: "description"
49
+ },
50
+ {
51
+ // LOCAL | READONLY | EXTERNAL
52
+ type: "string",
53
+ name: "type",
54
+ defaultValue: "LOCAL"
55
+ },
56
+ {
57
+ // Reference to plugin-file-manager storage
58
+ type: "string",
59
+ name: "fileStorage"
60
+ },
61
+ {
62
+ type: "belongsTo",
63
+ name: "vectorStore",
64
+ target: "aiVectorStores",
65
+ foreignKey: "vectorStoreId"
66
+ },
67
+ {
68
+ type: "boolean",
69
+ name: "enabled",
70
+ defaultValue: true
71
+ },
72
+ {
73
+ // BASIC (per-user) | SHARED (role-based) | PUBLIC (system-wide)
74
+ type: "string",
75
+ name: "accessLevel",
76
+ defaultValue: "PUBLIC"
77
+ },
78
+ {
79
+ // Owner userId (for BASIC KBs — only this user can access)
80
+ type: "bigInt",
81
+ name: "ownerId"
82
+ },
83
+ {
84
+ // Roles allowed to query/view (for SHARED KBs)
85
+ type: "array",
86
+ name: "allowedRoles"
87
+ },
88
+ {
89
+ // Roles allowed to upload documents (for SHARED KBs)
90
+ type: "array",
91
+ name: "uploadRoles"
92
+ },
93
+ {
94
+ // Extra configuration per knowledge base type
95
+ type: "json",
96
+ name: "options"
97
+ },
98
+ {
99
+ type: "hasMany",
100
+ name: "documents",
101
+ target: "aiKnowledgeBaseDocuments",
102
+ foreignKey: "knowledgeBaseId"
103
+ }
104
+ ]
105
+ });
@@ -0,0 +1,63 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var ai_vector_databases_exports = {};
28
+ __export(ai_vector_databases_exports, {
29
+ default: () => ai_vector_databases_default
30
+ });
31
+ module.exports = __toCommonJS(ai_vector_databases_exports);
32
+ var import_database = require("@nocobase/database");
33
+ var ai_vector_databases_default = (0, import_database.defineCollection)({
34
+ name: "aiVectorDatabases",
35
+ fields: [
36
+ {
37
+ type: "uid",
38
+ name: "id",
39
+ primaryKey: true
40
+ },
41
+ {
42
+ type: "string",
43
+ name: "name",
44
+ length: 255
45
+ },
46
+ {
47
+ // Provider type: pgvector (extensible)
48
+ type: "string",
49
+ name: "provider",
50
+ defaultValue: "pgvector"
51
+ },
52
+ {
53
+ // Connection parameters: { host, port, username, password, database, tableName }
54
+ type: "json",
55
+ name: "connectParams"
56
+ },
57
+ {
58
+ type: "boolean",
59
+ name: "enabled",
60
+ defaultValue: true
61
+ }
62
+ ]
63
+ });
@@ -0,0 +1,72 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var ai_vector_stores_exports = {};
28
+ __export(ai_vector_stores_exports, {
29
+ default: () => ai_vector_stores_default
30
+ });
31
+ module.exports = __toCommonJS(ai_vector_stores_exports);
32
+ var import_database = require("@nocobase/database");
33
+ var ai_vector_stores_default = (0, import_database.defineCollection)({
34
+ name: "aiVectorStores",
35
+ fields: [
36
+ {
37
+ type: "uid",
38
+ name: "id",
39
+ primaryKey: true
40
+ },
41
+ {
42
+ type: "string",
43
+ name: "name",
44
+ length: 255
45
+ },
46
+ {
47
+ type: "belongsTo",
48
+ name: "vectorDatabase",
49
+ target: "aiVectorDatabases",
50
+ foreignKey: "vectorDatabaseId"
51
+ },
52
+ {
53
+ // LLM service name (references llmServices collection)
54
+ type: "string",
55
+ name: "llmService"
56
+ },
57
+ {
58
+ // Embedding model name, e.g. text-embedding-3-small
59
+ type: "string",
60
+ name: "embeddingModel"
61
+ },
62
+ {
63
+ type: "json",
64
+ name: "options"
65
+ },
66
+ {
67
+ type: "boolean",
68
+ name: "enabled",
69
+ defaultValue: true
70
+ }
71
+ ]
72
+ });
@@ -0,0 +1,94 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var knowledge_base_impl_exports = {};
28
+ __export(knowledge_base_impl_exports, {
29
+ KnowledgeBaseFeatureImpl: () => KnowledgeBaseFeatureImpl
30
+ });
31
+ module.exports = __toCommonJS(knowledge_base_impl_exports);
32
+ class KnowledgeBaseFeatureImpl {
33
+ constructor(plugin) {
34
+ this.plugin = plugin;
35
+ }
36
+ async getKnowledgeBaseGroup(knowledgeBaseIds) {
37
+ var _a, _b;
38
+ if (!knowledgeBaseIds || knowledgeBaseIds.length === 0) {
39
+ return [];
40
+ }
41
+ const repo = this.plugin.db.getRepository("aiKnowledgeBases");
42
+ const knowledgeBases = await repo.find({
43
+ filter: {
44
+ id: { $in: knowledgeBaseIds },
45
+ enabled: true
46
+ },
47
+ appends: ["vectorStore", "vectorStore.vectorDatabase"]
48
+ });
49
+ const groups = /* @__PURE__ */ new Map();
50
+ for (const kb of knowledgeBases) {
51
+ const kbData = kb.toJSON();
52
+ const vectorStore = kbData.vectorStore;
53
+ if (!vectorStore) {
54
+ continue;
55
+ }
56
+ const vectorStoreConfigId = vectorStore.id;
57
+ const vectorStoreProvider = ((_a = vectorStore.vectorDatabase) == null ? void 0 : _a.provider) ?? "pgvector";
58
+ const groupKey = `${vectorStoreProvider}:${vectorStoreConfigId}`;
59
+ if (!groups.has(groupKey)) {
60
+ groups.set(groupKey, {
61
+ vectorStoreConfig: {
62
+ vectorStoreProvider,
63
+ vectorStoreConfigId
64
+ },
65
+ knowledgeBaseType: kbData.type ?? "LOCAL",
66
+ knowledgeBaseList: []
67
+ });
68
+ }
69
+ const group = groups.get(groupKey);
70
+ const kbEntry = {
71
+ knowledgeBaseType: kbData.type ?? "LOCAL",
72
+ knowledgeBaseOuterId: kbData.id,
73
+ name: kbData.name,
74
+ description: kbData.description ?? "",
75
+ vectorStoreProvider,
76
+ vectorStoreConfigId,
77
+ vectorStoreProps: [
78
+ ...((_b = kbData.options) == null ? void 0 : _b.vectorStoreProps) ?? [],
79
+ // Pass accessLevel for downstream vector filtering (Fix #2)
80
+ { key: "accessLevel", value: kbData.accessLevel ?? "PUBLIC" },
81
+ // Pass ownerId for BASIC KB per-user vector filtering
82
+ ...kbData.accessLevel === "BASIC" && kbData.ownerId ? [{ key: "ownerId", value: String(kbData.ownerId) }] : []
83
+ ],
84
+ enabled: kbData.enabled
85
+ };
86
+ group.knowledgeBaseList.push(kbEntry);
87
+ }
88
+ return Array.from(groups.values());
89
+ }
90
+ }
91
+ // Annotate the CommonJS export names for ESM import in node:
92
+ 0 && (module.exports = {
93
+ KnowledgeBaseFeatureImpl
94
+ });
@@ -0,0 +1,75 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var vector_database_impl_exports = {};
28
+ __export(vector_database_impl_exports, {
29
+ VectorDatabaseFeatureImpl: () => VectorDatabaseFeatureImpl
30
+ });
31
+ module.exports = __toCommonJS(vector_database_impl_exports);
32
+ class VectorDatabaseFeatureImpl {
33
+ constructor(plugin) {
34
+ this.plugin = plugin;
35
+ }
36
+ async getVectorDatabaseInfo(id) {
37
+ const repo = this.plugin.db.getRepository("aiVectorDatabases");
38
+ const record = await repo.findOne({
39
+ filter: { id }
40
+ });
41
+ if (!record) {
42
+ throw new Error(`Vector database with id "${id}" not found`);
43
+ }
44
+ const data = record.toJSON();
45
+ return {
46
+ id: data.id,
47
+ name: data.name,
48
+ databaseSpec: data.provider,
49
+ provider: data.provider,
50
+ connectProps: data.connectParams,
51
+ enabled: data.enabled
52
+ };
53
+ }
54
+ async listVectorDatabasesInfo() {
55
+ const repo = this.plugin.db.getRepository("aiVectorDatabases");
56
+ const records = await repo.find({
57
+ filter: { enabled: true }
58
+ });
59
+ return records.map((record) => {
60
+ const data = record.toJSON();
61
+ return {
62
+ id: data.id,
63
+ name: data.name,
64
+ databaseSpec: data.provider,
65
+ provider: data.provider,
66
+ connectProps: data.connectParams,
67
+ enabled: data.enabled
68
+ };
69
+ });
70
+ }
71
+ }
72
+ // Annotate the CommonJS export names for ESM import in node:
73
+ 0 && (module.exports = {
74
+ VectorDatabaseFeatureImpl
75
+ });
@@ -0,0 +1,63 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var vector_database_provider_impl_exports = {};
28
+ __export(vector_database_provider_impl_exports, {
29
+ VectorDatabaseProviderImpl: () => VectorDatabaseProviderImpl
30
+ });
31
+ module.exports = __toCommonJS(vector_database_provider_impl_exports);
32
+ class VectorDatabaseProviderImpl {
33
+ providers = /* @__PURE__ */ new Map();
34
+ register(providerInfo) {
35
+ this.providers.set(providerInfo.name, providerInfo);
36
+ }
37
+ validateConnectParams(providerName, connectParams) {
38
+ const providerInfo = this.getProvider(providerName);
39
+ providerInfo.provider.validateConnectParams(connectParams);
40
+ }
41
+ async testConnection(providerName, connectParams) {
42
+ const providerInfo = this.getProvider(providerName);
43
+ return providerInfo.provider.testConnection(connectParams);
44
+ }
45
+ async createVectorStore(providerName, embeddings, connectParams) {
46
+ const providerInfo = this.getProvider(providerName);
47
+ return providerInfo.provider.createVectorStore(embeddings, connectParams);
48
+ }
49
+ listProviders() {
50
+ return Array.from(this.providers.values());
51
+ }
52
+ getProvider(name) {
53
+ const providerInfo = this.providers.get(name);
54
+ if (!providerInfo) {
55
+ throw new Error(`Vector database provider "${name}" is not registered`);
56
+ }
57
+ return providerInfo;
58
+ }
59
+ }
60
+ // Annotate the CommonJS export names for ESM import in node:
61
+ 0 && (module.exports = {
62
+ VectorDatabaseProviderImpl
63
+ });
@@ -0,0 +1,141 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var vector_store_provider_impl_exports = {};
28
+ __export(vector_store_provider_impl_exports, {
29
+ VectorStoreProviderImpl: () => VectorStoreProviderImpl
30
+ });
31
+ module.exports = __toCommonJS(vector_store_provider_impl_exports);
32
+ class VectorStoreProviderImpl {
33
+ constructor(plugin, aiPlugin) {
34
+ this.plugin = plugin;
35
+ this.aiPlugin = aiPlugin;
36
+ }
37
+ providers = /* @__PURE__ */ new Map();
38
+ register(vsp) {
39
+ this.providers.set(vsp.providerName, vsp);
40
+ }
41
+ async createVectorStoreService(providerName, vectorStoreProps) {
42
+ const provider = this.providers.get(providerName);
43
+ if (provider) {
44
+ return provider.createVectorStoreService(vectorStoreProps);
45
+ }
46
+ return this.createDefaultVectorStoreService(vectorStoreProps);
47
+ }
48
+ async createDefaultVectorStoreService(vectorStoreProps) {
49
+ const propsMap = new Map(
50
+ (vectorStoreProps ?? []).map((p) => [p.key, p.value])
51
+ );
52
+ const vectorStoreConfigId = propsMap.get("vectorStoreConfigId");
53
+ if (!vectorStoreConfigId) {
54
+ throw new Error("vectorStoreConfigId is required");
55
+ }
56
+ const vectorStoreRecord = await this.plugin.db.getRepository("aiVectorStores").findOne({
57
+ filter: { id: vectorStoreConfigId },
58
+ appends: ["vectorDatabase"]
59
+ });
60
+ if (!vectorStoreRecord) {
61
+ throw new Error(`Vector store "${vectorStoreConfigId}" not found`);
62
+ }
63
+ const vectorStoreConfig = vectorStoreRecord.toJSON();
64
+ const vectorDatabase = vectorStoreConfig.vectorDatabase;
65
+ if (!vectorDatabase) {
66
+ throw new Error("Vector store has no associated vector database");
67
+ }
68
+ const embeddings = await this.createEmbeddings(
69
+ vectorStoreConfig.llmService,
70
+ vectorStoreConfig.embeddingModel
71
+ );
72
+ const vdbProviderFeature = this.aiPlugin.features.vectorDatabaseProvider;
73
+ const vectorStore = await vdbProviderFeature.createVectorStore(
74
+ vectorDatabase.provider,
75
+ embeddings,
76
+ vectorDatabase.connectParams
77
+ );
78
+ const accessLevel = propsMap.get("accessLevel");
79
+ const ownerId = propsMap.get("ownerId");
80
+ return new DefaultVectorStoreService(vectorStore, { accessLevel, ownerId });
81
+ }
82
+ async createEmbeddings(llmServiceName, embeddingModel) {
83
+ const llmServiceRecord = await this.plugin.db.getRepository("llmServices").findOne({
84
+ filter: { name: llmServiceName }
85
+ });
86
+ if (!llmServiceRecord) {
87
+ throw new Error(`LLM service "${llmServiceName}" not found`);
88
+ }
89
+ const llmService = llmServiceRecord.toJSON();
90
+ const providerMeta = this.aiPlugin.aiManager.llmProviders.get(llmService.provider);
91
+ if (!(providerMeta == null ? void 0 : providerMeta.embedding)) {
92
+ throw new Error(
93
+ `LLM provider "${llmService.provider}" does not support embedding`
94
+ );
95
+ }
96
+ const embeddingProvider = new providerMeta.embedding({
97
+ app: this.plugin.app,
98
+ serviceOptions: llmService.options,
99
+ modelOptions: { model: embeddingModel }
100
+ });
101
+ return embeddingProvider.createEmbedding();
102
+ }
103
+ }
104
+ class DefaultVectorStoreService {
105
+ constructor(vectorStore, accessContext = {}) {
106
+ this.vectorStore = vectorStore;
107
+ this.accessContext = accessContext;
108
+ }
109
+ async getVectorStore() {
110
+ return this.vectorStore;
111
+ }
112
+ async search(query, options) {
113
+ const { topK = 3, score, filter } = options ?? {};
114
+ let mergedFilter = filter;
115
+ if (this.accessContext.accessLevel === "BASIC" && this.accessContext.ownerId) {
116
+ mergedFilter = {
117
+ ...filter,
118
+ userId: this.accessContext.ownerId
119
+ };
120
+ }
121
+ const results = await this.vectorStore.similaritySearchWithScore(
122
+ query,
123
+ topK,
124
+ mergedFilter
125
+ );
126
+ const scoreThreshold = score ? parseFloat(score) : 0;
127
+ return results.filter(([, resultScore]) => resultScore >= scoreThreshold).map(([doc, resultScore]) => {
128
+ var _a;
129
+ return {
130
+ content: doc.pageContent,
131
+ metadata: doc.metadata || {},
132
+ id: (_a = doc.metadata) == null ? void 0 : _a.id,
133
+ score: resultScore
134
+ };
135
+ });
136
+ }
137
+ }
138
+ // Annotate the CommonJS export names for ESM import in node:
139
+ 0 && (module.exports = {
140
+ VectorStoreProviderImpl
141
+ });
@@ -0,0 +1,49 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __create = Object.create;
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
+ var __getOwnPropNames = Object.getOwnPropertyNames;
14
+ var __getProtoOf = Object.getPrototypeOf;
15
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
16
+ var __export = (target, all) => {
17
+ for (var name2 in all)
18
+ __defProp(target, name2, { get: all[name2], enumerable: true });
19
+ };
20
+ var __copyProps = (to, from, except, desc) => {
21
+ if (from && typeof from === "object" || typeof from === "function") {
22
+ for (let key of __getOwnPropNames(from))
23
+ if (!__hasOwnProp.call(to, key) && key !== except)
24
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
25
+ }
26
+ return to;
27
+ };
28
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
29
+ // If the importer is in node compatibility mode or this is not an ESM
30
+ // file that has been converted to a CommonJS file using a Babel-
31
+ // compatible transform (i.e. "__esModule" has not been set), then set
32
+ // "default" to the CommonJS "module.exports" for node compatibility.
33
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
34
+ mod
35
+ ));
36
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
37
+ var server_exports = {};
38
+ __export(server_exports, {
39
+ default: () => import_plugin.default,
40
+ namespace: () => namespace
41
+ });
42
+ module.exports = __toCommonJS(server_exports);
43
+ var import_package = require("../../package.json");
44
+ var import_plugin = __toESM(require("./plugin"));
45
+ const namespace = import_package.name;
46
+ // Annotate the CommonJS export names for ESM import in node:
47
+ 0 && (module.exports = {
48
+ namespace
49
+ });