@nocobase/plugin-ai 2.1.0-beta.30 → 2.1.0-beta.32
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/client-v2.d.ts +1 -0
- package/client-v2.js +1 -0
- package/dist/ai/docs/nocobase/ai/index.md +1 -1
- package/dist/ai/docs/nocobase/ai-employees/built-in/atlas.md +24 -0
- package/dist/ai/docs/nocobase/ai-employees/built-in/dara.md +22 -0
- package/dist/ai/docs/nocobase/ai-employees/built-in/dex.md +32 -0
- package/dist/ai/docs/nocobase/ai-employees/built-in/ellis.md +22 -0
- package/dist/ai/docs/nocobase/ai-employees/built-in/index.md +25 -0
- package/dist/ai/docs/nocobase/ai-employees/built-in/lexi.md +26 -0
- package/dist/ai/docs/nocobase/ai-employees/built-in/lina.md +142 -0
- package/dist/ai/docs/nocobase/ai-employees/built-in/nathan.md +36 -0
- package/dist/ai/docs/nocobase/ai-employees/built-in/vera.md +22 -0
- package/dist/ai/docs/nocobase/ai-employees/built-in/viz.md +25 -0
- package/dist/ai/docs/nocobase/ai-employees/features/built-in-employee.md +1 -29
- package/dist/ai/docs/nocobase/ai-employees/features/collaborate.md +17 -7
- package/dist/ai/docs/nocobase/ai-employees/features/enable-ai-employee.md +4 -4
- package/dist/ai/docs/nocobase/ai-employees/features/model-settings.md +87 -0
- package/dist/ai/docs/nocobase/ai-employees/index.md +1 -1
- package/dist/ai/docs/nocobase/ai-employees/scenarios/localization-hy-mt.md +241 -0
- package/dist/ai/docs/nocobase/ai-employees/workflow/nodes/employee/configuration.md +1 -1
- package/dist/ai/docs/nocobase/interface-builder/actions/types/js-action.md +1 -1
- package/dist/ai/docs/nocobase/interface-builder/actions/types/js-item.md +1 -1
- package/dist/ai/docs/nocobase/interface-builder/blocks/other-blocks/js-block.md +1 -1
- package/dist/ai/docs/nocobase/interface-builder/fields/specific/js-column.md +1 -1
- package/dist/ai/docs/nocobase/interface-builder/fields/specific/js-field.md +1 -1
- package/dist/ai/docs/nocobase/interface-builder/fields/specific/js-item.md +1 -1
- package/dist/ai/docs/nocobase/security/guide.md +13 -1
- package/dist/ai/docs/nocobase/system-management/localization/index.md +25 -1
- package/dist/client/462.1708385b148779cd.js +10 -0
- package/dist/client/{559.39872901b9053629.js → 559.585f80c3bcea0bed.js} +1 -1
- package/dist/client/646.b0ed728921b007d4.js +10 -0
- package/dist/client/{927.ac9ee9a8c1cb4f1d.js → 927.d95c74ebb8fd51c9.js} +1 -1
- package/dist/client/ai-employees/admin/ModelSettings.d.ts +10 -0
- package/dist/client/ai-employees/admin/hooks.d.ts +1 -1
- package/dist/client/ai-employees/avatars.d.ts +9 -783
- package/dist/client/ai-employees/chatbox/model.d.ts +6 -3
- package/dist/client/ai-employees/types.d.ts +23 -0
- package/dist/client/features/vector-database-provider.d.ts +1 -1
- package/dist/client/index.js +4 -4
- package/dist/client/llm-services/component/EnabledModelsSelect.d.ts +1 -14
- package/dist/client-v2/ai-employees/AIEmployeeShortcut.d.ts +21 -0
- package/dist/client-v2/ai-employees/ProfileCard.d.ts +17 -0
- package/dist/client-v2/ai-employees/avatars.d.ts +783 -0
- package/dist/client-v2/ai-employees/types.d.ts +20 -0
- package/dist/client-v2/index.d.ts +17 -0
- package/dist/client-v2/index.js +10 -0
- package/dist/client-v2/llm-services/model-label.d.ts +22 -0
- package/dist/collections/ai-employees.d.ts +2 -1
- package/dist/collections/ai-employees.js +1 -1
- package/dist/externalVersion.js +17 -17
- package/dist/locale/en-US.json +15 -1
- package/dist/locale/zh-CN.json +15 -1
- package/dist/node_modules/@langchain/xai/package.json +1 -1
- package/dist/node_modules/fs-extra/package.json +1 -1
- package/dist/node_modules/jsonrepair/package.json +1 -1
- package/dist/node_modules/just-bash/package.json +1 -1
- package/dist/node_modules/nodejs-snowflake/package.json +1 -1
- package/dist/node_modules/openai/package.json +1 -1
- package/dist/node_modules/zod/package.json +1 -1
- package/dist/server/ai-employees/ai-conversations.d.ts +1 -0
- package/dist/server/ai-employees/ai-conversations.js +4 -1
- package/dist/server/ai-employees/ai-employee.d.ts +15 -1
- package/dist/server/ai-employees/ai-employee.js +140 -9
- package/dist/server/ai-employees/ai-employees-manager.d.ts +4 -0
- package/dist/server/ai-employees/ai-employees-manager.js +41 -0
- package/dist/server/ai-employees/ai-knowledge-base.js +7 -7
- package/dist/server/ai-employees/middleware/conversation.d.ts +1 -0
- package/dist/server/ai-employees/middleware/conversation.js +4 -2
- package/dist/server/ai-employees/sub-agents/dispatcher.js +2 -4
- package/dist/server/ai-employees/utils.d.ts +6 -3
- package/dist/server/ai-employees/utils.js +7 -1
- package/dist/server/features/knowledge-base.d.ts +3 -2
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.js +3 -0
- package/dist/server/llm-providers/common/reasoning.d.ts +2 -0
- package/dist/server/llm-providers/common/reasoning.js +15 -2
- package/dist/server/llm-providers/dashscope.d.ts +2 -1
- package/dist/server/llm-providers/dashscope.js +39 -0
- package/dist/server/llm-providers/deepseek.js +2 -0
- package/dist/server/llm-providers/provider.d.ts +15 -1
- package/dist/server/llm-providers/provider.js +21 -2
- package/dist/server/manager/ai-chat-conversation.js +3 -4
- package/dist/server/manager/ai-manager.d.ts +17 -0
- package/dist/server/manager/ai-manager.js +65 -0
- package/dist/server/migrations/20260407170416-ai-employee-knowledge-base-add-key.d.ts +14 -0
- package/dist/server/migrations/20260407170416-ai-employee-knowledge-base-add-key.js +61 -0
- package/dist/server/resource/ai.js +1 -41
- package/dist/server/resource/aiConversations.js +12 -8
- package/dist/server/resource/aiEmployees.js +32 -1
- package/dist/server/types/knowledge-base.type.d.ts +3 -2
- package/dist/server/workflow/nodes/employee/index.js +4 -2
- package/package.json +2 -2
- package/dist/client/343.6f36d97dd122c5b6.js +0 -10
- package/dist/client/646.5860101cb28c8272.js +0 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"openai","version":"6.22.0","description":"The official TypeScript library for the OpenAI API","author":"OpenAI <support@openai.com>","types":"./index.d.ts","main":"./index.js","type":"commonjs","repository":"github:openai/openai-node","license":"Apache-2.0","packageManager":"yarn@1.22.22","files":["**/*"],"private":false,"publishConfig":{"access":"public"},"scripts":{"test":"./scripts/test","build":"./scripts/build","format":"./scripts/format","tsn":"ts-node -r tsconfig-paths/register","lint":"./scripts/lint","fix":"./scripts/format"},"dependencies":{},"bin":{"openai":"bin/cli"},"exports":{".":{"require":{"types":"./index.d.ts","default":"./index.js"},"types":"./index.d.mts","default":"./index.mjs"},"./_vendor/*.mjs":{"default":"./_vendor/*.mjs"},"./_vendor/*.js":{"default":"./_vendor/*.js"},"./_vendor/*":{"import":"./_vendor/*.mjs","require":"./_vendor/*.js"},"./api-promise":{"import":"./api-promise.mjs","require":"./api-promise.js"},"./api-promise.js":{"default":"./api-promise.js"},"./api-promise.mjs":{"default":"./api-promise.mjs"},"./azure":{"import":"./azure.mjs","require":"./azure.js"},"./azure.js":{"default":"./azure.js"},"./azure.mjs":{"default":"./azure.mjs"},"./beta/*.mjs":{"default":"./beta/*.mjs"},"./beta/*.js":{"default":"./beta/*.js"},"./beta/*":{"import":"./beta/*.mjs","require":"./beta/*.js"},"./client":{"import":"./client.mjs","require":"./client.js"},"./client.js":{"default":"./client.js"},"./client.mjs":{"default":"./client.mjs"},"./core/*.mjs":{"default":"./core/*.mjs"},"./core/*.js":{"default":"./core/*.js"},"./core/*":{"import":"./core/*.mjs","require":"./core/*.js"},"./error":{"import":"./error.mjs","require":"./error.js"},"./error.js":{"default":"./error.js"},"./error.mjs":{"default":"./error.mjs"},"./helpers/*.mjs":{"default":"./helpers/*.mjs"},"./helpers/*.js":{"default":"./helpers/*.js"},"./helpers/*":{"import":"./helpers/*.mjs","require":"./helpers/*.js"},"./index":{"import":"./index.mjs","require":"./index.js"},"./index.js":{"default":"./index.js"},"./index.mjs":{"default":"./index.mjs"},"./lib/*.mjs":{"default":"./lib/*.mjs"},"./lib/*.js":{"default":"./lib/*.js"},"./lib/*":{"import":"./lib/*.mjs","require":"./lib/*.js"},"./pagination":{"import":"./pagination.mjs","require":"./pagination.js"},"./pagination.js":{"default":"./pagination.js"},"./pagination.mjs":{"default":"./pagination.mjs"},"./realtime/*.mjs":{"default":"./realtime/*.mjs"},"./realtime/*.js":{"default":"./realtime/*.js"},"./realtime/*":{"import":"./realtime/*.mjs","require":"./realtime/*.js"},"./resource":{"import":"./resource.mjs","require":"./resource.js"},"./resource.js":{"default":"./resource.js"},"./resource.mjs":{"default":"./resource.mjs"},"./resources/*.mjs":{"default":"./resources/*.mjs"},"./resources/*.js":{"default":"./resources/*.js"},"./resources/*":{"import":"./resources/*.mjs","require":"./resources/*.js"},"./resources":{"import":"./resources.mjs","require":"./resources.js"},"./resources.js":{"default":"./resources.js"},"./resources.mjs":{"default":"./resources.mjs"},"./streaming":{"import":"./streaming.mjs","require":"./streaming.js"},"./streaming.js":{"default":"./streaming.js"},"./streaming.mjs":{"default":"./streaming.mjs"},"./uploads":{"import":"./uploads.mjs","require":"./uploads.js"},"./uploads.js":{"default":"./uploads.js"},"./uploads.mjs":{"default":"./uploads.mjs"},"./version":{"import":"./version.mjs","require":"./version.js"},"./version.js":{"default":"./version.js"},"./version.mjs":{"default":"./version.mjs"}},"peerDependencies":{"ws":"^8.18.0","zod":"^3.25 || ^4.0"},"peerDependenciesMeta":{"ws":{"optional":true},"zod":{"optional":true}},"_lastModified":"2026-05-
|
|
1
|
+
{"name":"openai","version":"6.22.0","description":"The official TypeScript library for the OpenAI API","author":"OpenAI <support@openai.com>","types":"./index.d.ts","main":"./index.js","type":"commonjs","repository":"github:openai/openai-node","license":"Apache-2.0","packageManager":"yarn@1.22.22","files":["**/*"],"private":false,"publishConfig":{"access":"public"},"scripts":{"test":"./scripts/test","build":"./scripts/build","format":"./scripts/format","tsn":"ts-node -r tsconfig-paths/register","lint":"./scripts/lint","fix":"./scripts/format"},"dependencies":{},"bin":{"openai":"bin/cli"},"exports":{".":{"require":{"types":"./index.d.ts","default":"./index.js"},"types":"./index.d.mts","default":"./index.mjs"},"./_vendor/*.mjs":{"default":"./_vendor/*.mjs"},"./_vendor/*.js":{"default":"./_vendor/*.js"},"./_vendor/*":{"import":"./_vendor/*.mjs","require":"./_vendor/*.js"},"./api-promise":{"import":"./api-promise.mjs","require":"./api-promise.js"},"./api-promise.js":{"default":"./api-promise.js"},"./api-promise.mjs":{"default":"./api-promise.mjs"},"./azure":{"import":"./azure.mjs","require":"./azure.js"},"./azure.js":{"default":"./azure.js"},"./azure.mjs":{"default":"./azure.mjs"},"./beta/*.mjs":{"default":"./beta/*.mjs"},"./beta/*.js":{"default":"./beta/*.js"},"./beta/*":{"import":"./beta/*.mjs","require":"./beta/*.js"},"./client":{"import":"./client.mjs","require":"./client.js"},"./client.js":{"default":"./client.js"},"./client.mjs":{"default":"./client.mjs"},"./core/*.mjs":{"default":"./core/*.mjs"},"./core/*.js":{"default":"./core/*.js"},"./core/*":{"import":"./core/*.mjs","require":"./core/*.js"},"./error":{"import":"./error.mjs","require":"./error.js"},"./error.js":{"default":"./error.js"},"./error.mjs":{"default":"./error.mjs"},"./helpers/*.mjs":{"default":"./helpers/*.mjs"},"./helpers/*.js":{"default":"./helpers/*.js"},"./helpers/*":{"import":"./helpers/*.mjs","require":"./helpers/*.js"},"./index":{"import":"./index.mjs","require":"./index.js"},"./index.js":{"default":"./index.js"},"./index.mjs":{"default":"./index.mjs"},"./lib/*.mjs":{"default":"./lib/*.mjs"},"./lib/*.js":{"default":"./lib/*.js"},"./lib/*":{"import":"./lib/*.mjs","require":"./lib/*.js"},"./pagination":{"import":"./pagination.mjs","require":"./pagination.js"},"./pagination.js":{"default":"./pagination.js"},"./pagination.mjs":{"default":"./pagination.mjs"},"./realtime/*.mjs":{"default":"./realtime/*.mjs"},"./realtime/*.js":{"default":"./realtime/*.js"},"./realtime/*":{"import":"./realtime/*.mjs","require":"./realtime/*.js"},"./resource":{"import":"./resource.mjs","require":"./resource.js"},"./resource.js":{"default":"./resource.js"},"./resource.mjs":{"default":"./resource.mjs"},"./resources/*.mjs":{"default":"./resources/*.mjs"},"./resources/*.js":{"default":"./resources/*.js"},"./resources/*":{"import":"./resources/*.mjs","require":"./resources/*.js"},"./resources":{"import":"./resources.mjs","require":"./resources.js"},"./resources.js":{"default":"./resources.js"},"./resources.mjs":{"default":"./resources.mjs"},"./streaming":{"import":"./streaming.mjs","require":"./streaming.js"},"./streaming.js":{"default":"./streaming.js"},"./streaming.mjs":{"default":"./streaming.mjs"},"./uploads":{"import":"./uploads.mjs","require":"./uploads.js"},"./uploads.js":{"default":"./uploads.js"},"./uploads.mjs":{"default":"./uploads.mjs"},"./version":{"import":"./version.mjs","require":"./version.js"},"./version.js":{"default":"./version.js"},"./version.mjs":{"default":"./version.mjs"}},"peerDependencies":{"ws":"^8.18.0","zod":"^3.25 || ^4.0"},"peerDependenciesMeta":{"ws":{"optional":true},"zod":{"optional":true}},"_lastModified":"2026-05-13T05:25:52.727Z"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"zod","version":"4.3.5","type":"module","license":"MIT","author":"Colin McDonnell <zod@colinhacks.com>","description":"TypeScript-first schema declaration and validation library with static type inference","homepage":"https://zod.dev","llms":"https://zod.dev/llms.txt","llmsFull":"https://zod.dev/llms-full.txt","mcpServer":"https://mcp.inkeep.com/zod/mcp","funding":"https://github.com/sponsors/colinhacks","sideEffects":false,"files":["src","**/*.js","**/*.mjs","**/*.cjs","**/*.d.ts","**/*.d.mts","**/*.d.cts","**/package.json"],"keywords":["typescript","schema","validation","type","inference"],"main":"./index.cjs","types":"./index.d.cts","module":"./index.js","zshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./mini":"./src/mini/index.ts","./locales":"./src/locales/index.ts","./v3":"./src/v3/index.ts","./v4":"./src/v4/index.ts","./v4-mini":"./src/v4-mini/index.ts","./v4/mini":"./src/v4/mini/index.ts","./v4/core":"./src/v4/core/index.ts","./v4/locales":"./src/v4/locales/index.ts","./v4/locales/*":"./src/v4/locales/*"},"conditions":{"@zod/source":"src"}},"exports":{"./package.json":"./package.json",".":{"@zod/source":"./src/index.ts","types":"./index.d.cts","import":"./index.js","require":"./index.cjs"},"./mini":{"@zod/source":"./src/mini/index.ts","types":"./mini/index.d.cts","import":"./mini/index.js","require":"./mini/index.cjs"},"./locales":{"@zod/source":"./src/locales/index.ts","types":"./locales/index.d.cts","import":"./locales/index.js","require":"./locales/index.cjs"},"./v3":{"@zod/source":"./src/v3/index.ts","types":"./v3/index.d.cts","import":"./v3/index.js","require":"./v3/index.cjs"},"./v4":{"@zod/source":"./src/v4/index.ts","types":"./v4/index.d.cts","import":"./v4/index.js","require":"./v4/index.cjs"},"./v4-mini":{"@zod/source":"./src/v4-mini/index.ts","types":"./v4-mini/index.d.cts","import":"./v4-mini/index.js","require":"./v4-mini/index.cjs"},"./v4/mini":{"@zod/source":"./src/v4/mini/index.ts","types":"./v4/mini/index.d.cts","import":"./v4/mini/index.js","require":"./v4/mini/index.cjs"},"./v4/core":{"@zod/source":"./src/v4/core/index.ts","types":"./v4/core/index.d.cts","import":"./v4/core/index.js","require":"./v4/core/index.cjs"},"./v4/locales":{"@zod/source":"./src/v4/locales/index.ts","types":"./v4/locales/index.d.cts","import":"./v4/locales/index.js","require":"./v4/locales/index.cjs"},"./v4/locales/*":{"@zod/source":"./src/v4/locales/*","types":"./v4/locales/*","import":"./v4/locales/*","require":"./v4/locales/*"}},"repository":{"type":"git","url":"git+https://github.com/colinhacks/zod.git"},"bugs":{"url":"https://github.com/colinhacks/zod/issues"},"support":{"backing":{"npm-funding":true}},"scripts":{"clean":"git clean -xdf . -e node_modules","build":"zshy --project tsconfig.build.json","postbuild":"tsx ../../scripts/write-stub-package-jsons.ts && pnpm biome check --write .","test:watch":"pnpm vitest","test":"pnpm vitest run","prepublishOnly":"tsx ../../scripts/check-versions.ts"},"_lastModified":"2026-05-
|
|
1
|
+
{"name":"zod","version":"4.3.5","type":"module","license":"MIT","author":"Colin McDonnell <zod@colinhacks.com>","description":"TypeScript-first schema declaration and validation library with static type inference","homepage":"https://zod.dev","llms":"https://zod.dev/llms.txt","llmsFull":"https://zod.dev/llms-full.txt","mcpServer":"https://mcp.inkeep.com/zod/mcp","funding":"https://github.com/sponsors/colinhacks","sideEffects":false,"files":["src","**/*.js","**/*.mjs","**/*.cjs","**/*.d.ts","**/*.d.mts","**/*.d.cts","**/package.json"],"keywords":["typescript","schema","validation","type","inference"],"main":"./index.cjs","types":"./index.d.cts","module":"./index.js","zshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./mini":"./src/mini/index.ts","./locales":"./src/locales/index.ts","./v3":"./src/v3/index.ts","./v4":"./src/v4/index.ts","./v4-mini":"./src/v4-mini/index.ts","./v4/mini":"./src/v4/mini/index.ts","./v4/core":"./src/v4/core/index.ts","./v4/locales":"./src/v4/locales/index.ts","./v4/locales/*":"./src/v4/locales/*"},"conditions":{"@zod/source":"src"}},"exports":{"./package.json":"./package.json",".":{"@zod/source":"./src/index.ts","types":"./index.d.cts","import":"./index.js","require":"./index.cjs"},"./mini":{"@zod/source":"./src/mini/index.ts","types":"./mini/index.d.cts","import":"./mini/index.js","require":"./mini/index.cjs"},"./locales":{"@zod/source":"./src/locales/index.ts","types":"./locales/index.d.cts","import":"./locales/index.js","require":"./locales/index.cjs"},"./v3":{"@zod/source":"./src/v3/index.ts","types":"./v3/index.d.cts","import":"./v3/index.js","require":"./v3/index.cjs"},"./v4":{"@zod/source":"./src/v4/index.ts","types":"./v4/index.d.cts","import":"./v4/index.js","require":"./v4/index.cjs"},"./v4-mini":{"@zod/source":"./src/v4-mini/index.ts","types":"./v4-mini/index.d.cts","import":"./v4-mini/index.js","require":"./v4-mini/index.cjs"},"./v4/mini":{"@zod/source":"./src/v4/mini/index.ts","types":"./v4/mini/index.d.cts","import":"./v4/mini/index.js","require":"./v4/mini/index.cjs"},"./v4/core":{"@zod/source":"./src/v4/core/index.ts","types":"./v4/core/index.d.cts","import":"./v4/core/index.js","require":"./v4/core/index.cjs"},"./v4/locales":{"@zod/source":"./src/v4/locales/index.ts","types":"./v4/locales/index.d.cts","import":"./v4/locales/index.js","require":"./v4/locales/index.cjs"},"./v4/locales/*":{"@zod/source":"./src/v4/locales/*","types":"./v4/locales/*","import":"./v4/locales/*","require":"./v4/locales/*"}},"repository":{"type":"git","url":"git+https://github.com/colinhacks/zod.git"},"bugs":{"url":"https://github.com/colinhacks/zod/issues"},"support":{"backing":{"npm-funding":true}},"scripts":{"clean":"git clean -xdf . -e node_modules","build":"zshy --project tsconfig.build.json","postbuild":"tsx ../../scripts/write-stub-package-jsons.ts && pnpm biome check --write .","test:watch":"pnpm vitest","test":"pnpm vitest run","prepublishOnly":"tsx ../../scripts/check-versions.ts"},"_lastModified":"2026-05-13T05:25:51.099Z"}
|
|
@@ -90,7 +90,7 @@ class AIConversationsManager {
|
|
|
90
90
|
if (!conversation) {
|
|
91
91
|
throw new Error("invalid sessionId");
|
|
92
92
|
}
|
|
93
|
-
const { systemMessage, skillSettings, conversationSettings } = inputOptions ?? {};
|
|
93
|
+
const { systemMessage, skillSettings, conversationSettings, modelSettings } = inputOptions ?? {};
|
|
94
94
|
const options = conversation.options ?? {};
|
|
95
95
|
if (systemMessage) {
|
|
96
96
|
options["systemMessage"] = systemMessage;
|
|
@@ -101,6 +101,9 @@ class AIConversationsManager {
|
|
|
101
101
|
if (conversationSettings) {
|
|
102
102
|
options["conversationSettings"] = conversationSettings;
|
|
103
103
|
}
|
|
104
|
+
if (modelSettings) {
|
|
105
|
+
options["modelSettings"] = modelSettings;
|
|
106
|
+
}
|
|
104
107
|
const values = { options };
|
|
105
108
|
if (title) {
|
|
106
109
|
values.title = title;
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
import { Model, Transaction } from '@nocobase/database';
|
|
10
10
|
import { LLMProvider } from '../llm-providers/provider';
|
|
11
11
|
import { AIChatContext, AIChatConversation, AIMessageInput, AIToolCall, UserDecision } from '../types';
|
|
12
|
+
import { DocumentSegmentedWithScore } from '../features';
|
|
13
|
+
import { KnowledgeBaseGroup } from '../types';
|
|
12
14
|
import { ToolsEntry } from '@nocobase/ai';
|
|
13
15
|
import { AIToolMessage } from '../types/ai-message.type';
|
|
14
16
|
import { Context } from '@nocobase/actions';
|
|
@@ -48,6 +50,10 @@ export declare class AIEmployee {
|
|
|
48
50
|
private inWorkflow?;
|
|
49
51
|
private streamCached;
|
|
50
52
|
constructor({ ctx, employee, sessionId, systemMessage, skillSettings, webSearch, model, legacy, from, tools, }: AIEmployeeOptions);
|
|
53
|
+
private get chatSettings();
|
|
54
|
+
private get systemPromptMode();
|
|
55
|
+
private areSkillsEnabled;
|
|
56
|
+
private areToolsEnabled;
|
|
51
57
|
getFormatMessages(userMessages: AIMessageInput[]): Promise<{
|
|
52
58
|
role: "user" | "assistant" | "tool" | "system";
|
|
53
59
|
content: any;
|
|
@@ -100,6 +106,7 @@ export declare class AIEmployee {
|
|
|
100
106
|
processChatStream(stream: any, options: {
|
|
101
107
|
signal: AbortSignal;
|
|
102
108
|
providerName: string;
|
|
109
|
+
llmService?: string;
|
|
103
110
|
model: string;
|
|
104
111
|
provider: LLMProvider;
|
|
105
112
|
allowEmpty?: boolean;
|
|
@@ -107,7 +114,14 @@ export declare class AIEmployee {
|
|
|
107
114
|
}): Promise<void>;
|
|
108
115
|
private handleInterruptedToolCalls;
|
|
109
116
|
getEmployeeDataSourceContext(): string;
|
|
110
|
-
getSystemPrompt(userMessages: AIMessageInput[]): Promise<
|
|
117
|
+
getSystemPrompt(userMessages: AIMessageInput[]): Promise<any>;
|
|
118
|
+
retrieveKnowledgeBase(userMessage: AIMessageInput): Promise<DocumentSegmentedWithScore[]>;
|
|
119
|
+
isEnabledKnowledgeBase(): boolean;
|
|
120
|
+
getAIEmployeeKnowledgeBaseConfig(): {
|
|
121
|
+
topK: number;
|
|
122
|
+
score: string;
|
|
123
|
+
};
|
|
124
|
+
getKnowledgeBaseGroup(): Promise<KnowledgeBaseGroup[]>;
|
|
111
125
|
initToolCall(transaction: Transaction, messageId: string, toolCalls: {
|
|
112
126
|
id: string;
|
|
113
127
|
name: string;
|
|
@@ -45,6 +45,7 @@ var import_utils = require("../utils");
|
|
|
45
45
|
var import_prompts = require("./prompts");
|
|
46
46
|
var import_lodash = __toESM(require("lodash"));
|
|
47
47
|
var import_ai_chat_conversation = require("../manager/ai-chat-conversation");
|
|
48
|
+
var import_ai_feature_manager = require("../manager/ai-feature-manager");
|
|
48
49
|
var import_middleware = require("./middleware");
|
|
49
50
|
var import_ai = require("@nocobase/ai");
|
|
50
51
|
var import_checkpoints = require("./checkpoints");
|
|
@@ -107,6 +108,19 @@ class AIEmployee {
|
|
|
107
108
|
}
|
|
108
109
|
});
|
|
109
110
|
}
|
|
111
|
+
get chatSettings() {
|
|
112
|
+
var _a, _b, _c;
|
|
113
|
+
return ((_b = (_a = this.employee) == null ? void 0 : _a.get) == null ? void 0 : _b.call(_a, "chatSettings")) ?? ((_c = this.employee) == null ? void 0 : _c.chatSettings) ?? {};
|
|
114
|
+
}
|
|
115
|
+
get systemPromptMode() {
|
|
116
|
+
return this.chatSettings.systemPromptMode ?? "default";
|
|
117
|
+
}
|
|
118
|
+
areSkillsEnabled() {
|
|
119
|
+
return this.chatSettings.enableSkills !== false;
|
|
120
|
+
}
|
|
121
|
+
areToolsEnabled() {
|
|
122
|
+
return this.chatSettings.enableTools !== false;
|
|
123
|
+
}
|
|
110
124
|
async getFormatMessages(userMessages) {
|
|
111
125
|
const { provider } = await this.plugin.aiManager.getLLMService({
|
|
112
126
|
...this.model
|
|
@@ -136,7 +150,7 @@ class AIEmployee {
|
|
|
136
150
|
}
|
|
137
151
|
};
|
|
138
152
|
}
|
|
139
|
-
async initSession({ messageId, provider, model, providerName }) {
|
|
153
|
+
async initSession({ messageId, provider, model, providerName, llmService }) {
|
|
140
154
|
const { tools, baseToolNames } = await this.getAgentTools();
|
|
141
155
|
const resolvedTools = provider.resolveTools(tools.map(import_utils.buildTool));
|
|
142
156
|
if (!messageId && this.legacy !== true) {
|
|
@@ -144,7 +158,7 @@ class AIEmployee {
|
|
|
144
158
|
historyMessages: [],
|
|
145
159
|
tools,
|
|
146
160
|
resolvedTools,
|
|
147
|
-
middleware: await this.getMiddleware({ tools, baseToolNames, model, providerName }),
|
|
161
|
+
middleware: await this.getMiddleware({ tools, baseToolNames, model, providerName, llmService }),
|
|
148
162
|
config: void 0,
|
|
149
163
|
state: void 0
|
|
150
164
|
};
|
|
@@ -162,6 +176,7 @@ class AIEmployee {
|
|
|
162
176
|
baseToolNames,
|
|
163
177
|
model,
|
|
164
178
|
providerName,
|
|
179
|
+
llmService,
|
|
165
180
|
messageId,
|
|
166
181
|
agentThread
|
|
167
182
|
}),
|
|
@@ -178,6 +193,7 @@ class AIEmployee {
|
|
|
178
193
|
userMessages,
|
|
179
194
|
userDecisions
|
|
180
195
|
}) {
|
|
196
|
+
var _a, _b;
|
|
181
197
|
const { provider, model, service } = await this.plugin.aiManager.getLLMService({
|
|
182
198
|
...this.model
|
|
183
199
|
});
|
|
@@ -185,7 +201,8 @@ class AIEmployee {
|
|
|
185
201
|
messageId,
|
|
186
202
|
provider,
|
|
187
203
|
model,
|
|
188
|
-
providerName: service.provider
|
|
204
|
+
providerName: service.provider,
|
|
205
|
+
llmService: ((_a = service.get) == null ? void 0 : _a.call(service, "name")) || service.name
|
|
189
206
|
});
|
|
190
207
|
const chatContext = await this.aiChatConversation.getChatContext({
|
|
191
208
|
userMessages: [...historyMessages, ...userMessages ?? []],
|
|
@@ -195,7 +212,15 @@ class AIEmployee {
|
|
|
195
212
|
getSystemPrompt: (userMessages2) => this.getSystemPrompt(userMessages2),
|
|
196
213
|
formatMessages: (messages) => this.formatMessages({ messages, provider })
|
|
197
214
|
});
|
|
198
|
-
return {
|
|
215
|
+
return {
|
|
216
|
+
providerName: service.provider,
|
|
217
|
+
llmService: ((_b = service.get) == null ? void 0 : _b.call(service, "name")) || service.name,
|
|
218
|
+
model,
|
|
219
|
+
provider,
|
|
220
|
+
chatContext,
|
|
221
|
+
config,
|
|
222
|
+
state
|
|
223
|
+
};
|
|
199
224
|
}
|
|
200
225
|
async stream({
|
|
201
226
|
messageId,
|
|
@@ -210,7 +235,7 @@ class AIEmployee {
|
|
|
210
235
|
}
|
|
211
236
|
});
|
|
212
237
|
try {
|
|
213
|
-
const { providerName, model, provider, chatContext, config, state } = await this.buildChatContext({
|
|
238
|
+
const { providerName, llmService, model, provider, chatContext, config, state } = await this.buildChatContext({
|
|
214
239
|
messageId,
|
|
215
240
|
userMessages,
|
|
216
241
|
userDecisions
|
|
@@ -226,6 +251,7 @@ class AIEmployee {
|
|
|
226
251
|
await this.processChatStream(stream, {
|
|
227
252
|
signal,
|
|
228
253
|
providerName,
|
|
254
|
+
llmService,
|
|
229
255
|
model,
|
|
230
256
|
provider,
|
|
231
257
|
responseMetadata
|
|
@@ -375,7 +401,7 @@ class AIEmployee {
|
|
|
375
401
|
async processChatStream(stream, options) {
|
|
376
402
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
|
|
377
403
|
const aiMessageIdMap = /* @__PURE__ */ new Map();
|
|
378
|
-
const { signal, providerName, model, provider, responseMetadata, allowEmpty = false } = options;
|
|
404
|
+
const { signal, providerName, llmService, model, provider, responseMetadata, allowEmpty = false } = options;
|
|
379
405
|
let isReasoning = false;
|
|
380
406
|
let gathered;
|
|
381
407
|
signal.addEventListener("abort", async () => {
|
|
@@ -384,6 +410,7 @@ class AIEmployee {
|
|
|
384
410
|
const values = (0, import_utils2.convertAIMessage)({
|
|
385
411
|
aiEmployee: this,
|
|
386
412
|
providerName,
|
|
413
|
+
llmService,
|
|
387
414
|
model,
|
|
388
415
|
aiMessage: gathered
|
|
389
416
|
});
|
|
@@ -651,13 +678,19 @@ Field: ${field.name}, Title: ${(_a = field.options.uiSchema) == null ? void 0 :
|
|
|
651
678
|
}
|
|
652
679
|
async getSystemPrompt(userMessages) {
|
|
653
680
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
681
|
+
if (this.systemPromptMode === "none") {
|
|
682
|
+
return "";
|
|
683
|
+
}
|
|
684
|
+
const about = await (0, import_utils.parseVariables)(this.ctx, this.employee.about ?? this.employee.defaultPrompt ?? "");
|
|
685
|
+
if (this.systemPromptMode === "raw") {
|
|
686
|
+
return about;
|
|
687
|
+
}
|
|
654
688
|
const userConfig = await this.db.getRepository("usersAiEmployees").findOne({
|
|
655
689
|
filter: {
|
|
656
690
|
userId: ((_a = this.ctx.auth) == null ? void 0 : _a.user.id) ?? 0,
|
|
657
691
|
aiEmployee: this.employee.username
|
|
658
692
|
}
|
|
659
693
|
});
|
|
660
|
-
const about = await (0, import_utils.parseVariables)(this.ctx, this.employee.about ?? this.employee.defaultPrompt ?? "");
|
|
661
694
|
let background = "";
|
|
662
695
|
if (this.systemMessage) {
|
|
663
696
|
background = await (0, import_utils.parseVariables)(this.ctx, this.systemMessage);
|
|
@@ -721,6 +754,92 @@ If information is missing, clearly state it in the summary.</Important>`;
|
|
|
721
754
|
return systemPrompt;
|
|
722
755
|
}
|
|
723
756
|
}
|
|
757
|
+
async retrieveKnowledgeBase(userMessage) {
|
|
758
|
+
const vectorStoreProvider = this.plugin.features.vectorStoreProvider;
|
|
759
|
+
let queryResult = [];
|
|
760
|
+
const queryString = userMessage.content.content;
|
|
761
|
+
if (!queryString || import_lodash.default.isEmpty(queryString)) {
|
|
762
|
+
return queryResult;
|
|
763
|
+
}
|
|
764
|
+
const { topK, score } = this.getAIEmployeeKnowledgeBaseConfig();
|
|
765
|
+
const knowledgeBaseGroup = await this.getKnowledgeBaseGroup();
|
|
766
|
+
for (const entry of knowledgeBaseGroup) {
|
|
767
|
+
const { vectorStoreConfig, knowledgeBaseType, knowledgeBaseList } = entry;
|
|
768
|
+
if (!knowledgeBaseList || import_lodash.default.isEmpty(knowledgeBaseList)) {
|
|
769
|
+
continue;
|
|
770
|
+
}
|
|
771
|
+
if (knowledgeBaseType === "LOCAL") {
|
|
772
|
+
const vectorStoreService = await vectorStoreProvider.createVectorStoreService(
|
|
773
|
+
vectorStoreConfig.vectorStoreProvider,
|
|
774
|
+
[
|
|
775
|
+
{
|
|
776
|
+
key: "vectorStoreConfigKey",
|
|
777
|
+
value: vectorStoreConfig.vectorStoreConfigKey
|
|
778
|
+
}
|
|
779
|
+
]
|
|
780
|
+
);
|
|
781
|
+
const knowledgeBaseOuterIds = knowledgeBaseList.map((x) => x.knowledgeBaseOuterId);
|
|
782
|
+
const result = await vectorStoreService.search(queryString, {
|
|
783
|
+
topK,
|
|
784
|
+
score,
|
|
785
|
+
filter: {
|
|
786
|
+
knowledgeBaseOuterId: { in: knowledgeBaseOuterIds }
|
|
787
|
+
}
|
|
788
|
+
});
|
|
789
|
+
queryResult = [...queryResult, ...result];
|
|
790
|
+
} else if (knowledgeBaseType === "READONLY") {
|
|
791
|
+
for (const knowledgeBase of knowledgeBaseList) {
|
|
792
|
+
const vectorStoreService = await vectorStoreProvider.createVectorStoreService(
|
|
793
|
+
vectorStoreConfig.vectorStoreProvider,
|
|
794
|
+
[
|
|
795
|
+
...knowledgeBase.vectorStoreProps,
|
|
796
|
+
{
|
|
797
|
+
key: "vectorStoreConfigKey",
|
|
798
|
+
value: vectorStoreConfig.vectorStoreConfigKey
|
|
799
|
+
}
|
|
800
|
+
]
|
|
801
|
+
);
|
|
802
|
+
const result = await vectorStoreService.search(queryString, {
|
|
803
|
+
topK,
|
|
804
|
+
score
|
|
805
|
+
});
|
|
806
|
+
queryResult = [...queryResult, ...result];
|
|
807
|
+
}
|
|
808
|
+
} else if (knowledgeBaseType === "EXTERNAL") {
|
|
809
|
+
for (const knowledgeBase of knowledgeBaseList) {
|
|
810
|
+
const vectorStoreService = await vectorStoreProvider.createVectorStoreService(
|
|
811
|
+
vectorStoreConfig.vectorStoreProvider,
|
|
812
|
+
knowledgeBase.vectorStoreProps
|
|
813
|
+
);
|
|
814
|
+
const result = await vectorStoreService.search(queryString, {
|
|
815
|
+
topK,
|
|
816
|
+
score
|
|
817
|
+
});
|
|
818
|
+
queryResult = [...queryResult, ...result];
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
return queryResult;
|
|
823
|
+
}
|
|
824
|
+
isEnabledKnowledgeBase() {
|
|
825
|
+
const featureEnabled = this.plugin.features.isFeaturesEnabled(Object.values(import_ai_feature_manager.EEFeatures));
|
|
826
|
+
const knowledgeBaseEnabled = this.employee.enableKnowledgeBase;
|
|
827
|
+
return featureEnabled && knowledgeBaseEnabled;
|
|
828
|
+
}
|
|
829
|
+
getAIEmployeeKnowledgeBaseConfig() {
|
|
830
|
+
const { topK, score } = this.employee.knowledgeBase ?? {};
|
|
831
|
+
return {
|
|
832
|
+
topK,
|
|
833
|
+
score
|
|
834
|
+
};
|
|
835
|
+
}
|
|
836
|
+
async getKnowledgeBaseGroup() {
|
|
837
|
+
const { knowledgeBaseKeys } = this.employee.knowledgeBase ?? {};
|
|
838
|
+
if (!knowledgeBaseKeys || import_lodash.default.isEmpty(knowledgeBaseKeys)) {
|
|
839
|
+
return [];
|
|
840
|
+
}
|
|
841
|
+
return await this.plugin.features.knowledgeBase.getKnowledgeBaseGroup(knowledgeBaseKeys);
|
|
842
|
+
}
|
|
724
843
|
// === Tool calls ===
|
|
725
844
|
async initToolCall(transaction, messageId, toolCalls) {
|
|
726
845
|
const nowTime = /* @__PURE__ */ new Date();
|
|
@@ -1147,6 +1266,9 @@ If information is missing, clearly state it in the summary.</Important>`;
|
|
|
1147
1266
|
}
|
|
1148
1267
|
async getAIEmployeeTools() {
|
|
1149
1268
|
var _a;
|
|
1269
|
+
if (!this.areToolsEnabled()) {
|
|
1270
|
+
return [];
|
|
1271
|
+
}
|
|
1150
1272
|
const tools = await this.listTools({ scope: "GENERAL" });
|
|
1151
1273
|
if (this.webSearch === true) {
|
|
1152
1274
|
const subAgentWebSearch = await this.toolsManager.getTools(import_ai.SYSTEM_TOOLS.WEB_SEARCH);
|
|
@@ -1191,6 +1313,9 @@ If information is missing, clearly state it in the summary.</Important>`;
|
|
|
1191
1313
|
}
|
|
1192
1314
|
async getAvailableSkills() {
|
|
1193
1315
|
var _a;
|
|
1316
|
+
if (!this.areSkillsEnabled()) {
|
|
1317
|
+
return [];
|
|
1318
|
+
}
|
|
1194
1319
|
const { skillsManager } = this.plugin.ai;
|
|
1195
1320
|
const aIEmployeeTools = await this.getAIEmployeeTools();
|
|
1196
1321
|
const getSkill = aIEmployeeTools.find((it) => it.definition.name === "getSkill");
|
|
@@ -1216,6 +1341,12 @@ If information is missing, clearly state it in the summary.</Important>`;
|
|
|
1216
1341
|
}
|
|
1217
1342
|
}
|
|
1218
1343
|
async getAgentTools() {
|
|
1344
|
+
if (!this.areToolsEnabled()) {
|
|
1345
|
+
return {
|
|
1346
|
+
tools: [],
|
|
1347
|
+
baseToolNames: /* @__PURE__ */ new Set()
|
|
1348
|
+
};
|
|
1349
|
+
}
|
|
1219
1350
|
const baseTools = await this.getAIEmployeeTools();
|
|
1220
1351
|
const toolMap = await this.getToolsMap();
|
|
1221
1352
|
const availableSkills = await this.getAvailableSkills();
|
|
@@ -1286,7 +1417,7 @@ If information is missing, clearly state it in the summary.</Important>`;
|
|
|
1286
1417
|
return availableAIEmployees;
|
|
1287
1418
|
}
|
|
1288
1419
|
async getMiddleware(options) {
|
|
1289
|
-
const { providerName, model, tools, baseToolNames, messageId, agentThread } = options;
|
|
1420
|
+
const { providerName, llmService, model, tools, baseToolNames, messageId, agentThread } = options;
|
|
1290
1421
|
const inWorkflow = await this.isInWorkflow();
|
|
1291
1422
|
return [
|
|
1292
1423
|
(0, import_middleware.skillToolBindingMiddleware)(this, {
|
|
@@ -1295,7 +1426,7 @@ If information is missing, clearly state it in the summary.</Important>`;
|
|
|
1295
1426
|
(0, import_middleware.toolInteractionMiddleware)(this, tools),
|
|
1296
1427
|
(0, import_middleware.toolCallStatusMiddleware)(this),
|
|
1297
1428
|
...inWorkflow ? [(0, import_middleware.workflowHistoryMiddleware)(this, this.db)] : [],
|
|
1298
|
-
(0, import_middleware.conversationMiddleware)(this, { providerName, model, messageId, agentThread })
|
|
1429
|
+
(0, import_middleware.conversationMiddleware)(this, { providerName, llmService, model, messageId, agentThread })
|
|
1299
1430
|
];
|
|
1300
1431
|
}
|
|
1301
1432
|
async getCurrentThread() {
|
|
@@ -7,10 +7,14 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
import PluginAIServer from '../plugin';
|
|
10
|
+
import type { Model } from '@nocobase/database';
|
|
11
|
+
import type { ModelRef } from './ai-employee';
|
|
10
12
|
export declare class AIEmployeesManager {
|
|
11
13
|
protected plugin: PluginAIServer;
|
|
12
14
|
conversationController: Map<string, AbortController>;
|
|
13
15
|
constructor(plugin: PluginAIServer);
|
|
16
|
+
getEmployee(username: string): Promise<Model | null>;
|
|
17
|
+
resolveModel(employee: Model, model?: ModelRef | null): Promise<ModelRef>;
|
|
14
18
|
onAbortConversation(sessionId: string): boolean;
|
|
15
19
|
abortConversation(sessionId: string): void;
|
|
16
20
|
}
|
|
@@ -34,6 +34,47 @@ class AIEmployeesManager {
|
|
|
34
34
|
this.plugin = plugin;
|
|
35
35
|
}
|
|
36
36
|
conversationController = /* @__PURE__ */ new Map();
|
|
37
|
+
async getEmployee(username) {
|
|
38
|
+
return await this.plugin.db.getRepository("aiEmployees").findOne({
|
|
39
|
+
filter: {
|
|
40
|
+
username
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
async resolveModel(employee, model) {
|
|
45
|
+
var _a;
|
|
46
|
+
const modelSettings = ((_a = employee.get) == null ? void 0 : _a.call(employee, "modelSettings")) || employee.modelSettings;
|
|
47
|
+
if (modelSettings == null ? void 0 : modelSettings.enabled) {
|
|
48
|
+
const models = Array.isArray(modelSettings.models) ? modelSettings.models : [];
|
|
49
|
+
const configuredModels = models.filter((item) => (item == null ? void 0 : item.llmService) && (item == null ? void 0 : item.model)).map((item) => ({
|
|
50
|
+
llmService: item.llmService,
|
|
51
|
+
model: item.model
|
|
52
|
+
}));
|
|
53
|
+
if (!configuredModels.length && modelSettings.llmService && modelSettings.model) {
|
|
54
|
+
configuredModels.push({
|
|
55
|
+
llmService: modelSettings.llmService,
|
|
56
|
+
model: modelSettings.model
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
if (!configuredModels.length) {
|
|
60
|
+
throw new Error("AI employee model not configured");
|
|
61
|
+
}
|
|
62
|
+
if ((model == null ? void 0 : model.llmService) && (model == null ? void 0 : model.model) && configuredModels.some((item) => item.llmService === model.llmService && item.model === model.model)) {
|
|
63
|
+
return model;
|
|
64
|
+
}
|
|
65
|
+
const firstModel = configuredModels[0];
|
|
66
|
+
if ((firstModel == null ? void 0 : firstModel.llmService) && (firstModel == null ? void 0 : firstModel.model)) {
|
|
67
|
+
return {
|
|
68
|
+
llmService: firstModel.llmService,
|
|
69
|
+
model: firstModel.model
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if ((model == null ? void 0 : model.llmService) && (model == null ? void 0 : model.model)) {
|
|
74
|
+
return model;
|
|
75
|
+
}
|
|
76
|
+
return await this.plugin.aiManager.resolveModel();
|
|
77
|
+
}
|
|
37
78
|
onAbortConversation(sessionId) {
|
|
38
79
|
const controller = this.conversationController.get(sessionId);
|
|
39
80
|
if (controller) {
|
|
@@ -86,8 +86,8 @@ class KnowledgeBaseManager {
|
|
|
86
86
|
vectorStoreConfig.vectorStoreProvider,
|
|
87
87
|
[
|
|
88
88
|
{
|
|
89
|
-
key: "
|
|
90
|
-
value: vectorStoreConfig.
|
|
89
|
+
key: "vectorStoreConfigKey",
|
|
90
|
+
value: vectorStoreConfig.vectorStoreConfigKey
|
|
91
91
|
}
|
|
92
92
|
]
|
|
93
93
|
);
|
|
@@ -107,8 +107,8 @@ class KnowledgeBaseManager {
|
|
|
107
107
|
[
|
|
108
108
|
...knowledgeBase.vectorStoreProps,
|
|
109
109
|
{
|
|
110
|
-
key: "
|
|
111
|
-
value: vectorStoreConfig.
|
|
110
|
+
key: "vectorStoreConfigKey",
|
|
111
|
+
value: vectorStoreConfig.vectorStoreConfigKey
|
|
112
112
|
}
|
|
113
113
|
]
|
|
114
114
|
);
|
|
@@ -148,11 +148,11 @@ class KnowledgeBaseManager {
|
|
|
148
148
|
};
|
|
149
149
|
}
|
|
150
150
|
async getKnowledgeBaseGroup(employee) {
|
|
151
|
-
const {
|
|
152
|
-
if (!
|
|
151
|
+
const { knowledgeBaseKeys } = (employee == null ? void 0 : employee.knowledgeBase) ?? {};
|
|
152
|
+
if (!knowledgeBaseKeys || import_lodash.default.isEmpty(knowledgeBaseKeys)) {
|
|
153
153
|
return [];
|
|
154
154
|
}
|
|
155
|
-
return await this.plugin.features.knowledgeBase.getKnowledgeBaseGroup(
|
|
155
|
+
return await this.plugin.features.knowledgeBase.getKnowledgeBaseGroup(knowledgeBaseKeys);
|
|
156
156
|
}
|
|
157
157
|
async getEmployee(username) {
|
|
158
158
|
return await this.aiEmployeeRepo.findOne({ filter: { username } });
|
|
@@ -43,16 +43,18 @@ var import_langchain = require("langchain");
|
|
|
43
43
|
var import_zod = __toESM(require("zod"));
|
|
44
44
|
var import_utils = require("../utils");
|
|
45
45
|
const conversationMiddleware = (aiEmployee, options) => {
|
|
46
|
-
const { providerName, model, messageId, agentThread } = options;
|
|
46
|
+
const { providerName, llmService, model, messageId, agentThread } = options;
|
|
47
47
|
const convertAIMessage = (aiMessage) => (0, import_utils.convertAIMessage)({
|
|
48
48
|
aiEmployee,
|
|
49
49
|
providerName,
|
|
50
|
+
llmService,
|
|
50
51
|
model,
|
|
51
52
|
aiMessage
|
|
52
53
|
});
|
|
53
|
-
const convertHumanMessage = (humanMessage) => (0, import_utils.convertHumanMessage)({ providerName, model, humanMessage });
|
|
54
|
+
const convertHumanMessage = (humanMessage) => (0, import_utils.convertHumanMessage)({ providerName, llmService, model, humanMessage });
|
|
54
55
|
const convertToolMessage = (toolMessage) => (0, import_utils.convertToolMessage)({
|
|
55
56
|
providerName,
|
|
57
|
+
llmService,
|
|
56
58
|
model,
|
|
57
59
|
toolMessage
|
|
58
60
|
});
|
|
@@ -114,16 +114,14 @@ class SubAgentsDispatcher {
|
|
|
114
114
|
if (!userId) {
|
|
115
115
|
throw new Error("User not authenticated");
|
|
116
116
|
}
|
|
117
|
-
|
|
118
|
-
throw new Error("LLM service not configured");
|
|
119
|
-
}
|
|
117
|
+
const resolvedModel = await plugin.aiEmployeesManager.resolveModel(employee, model);
|
|
120
118
|
const aiEmployee = new import_ai_employee.AIEmployee({
|
|
121
119
|
ctx,
|
|
122
120
|
employee,
|
|
123
121
|
sessionId,
|
|
124
122
|
skillSettings,
|
|
125
123
|
webSearch,
|
|
126
|
-
model,
|
|
124
|
+
model: resolvedModel,
|
|
127
125
|
from: "sub-agent"
|
|
128
126
|
});
|
|
129
127
|
const lastMessage = await ctx.db.getRepository("aiMessages").findOne({
|
|
@@ -9,19 +9,22 @@
|
|
|
9
9
|
import { AIMessage, HumanMessage, ToolMessage } from 'langchain';
|
|
10
10
|
import { AIMessageInput } from '../types';
|
|
11
11
|
import { AIEmployee } from './ai-employee';
|
|
12
|
-
export declare const convertAIMessage: ({ aiEmployee, providerName: provider, model, aiMessage, }: {
|
|
12
|
+
export declare const convertAIMessage: ({ aiEmployee, providerName: provider, llmService, model, aiMessage, }: {
|
|
13
13
|
aiEmployee: AIEmployee;
|
|
14
14
|
providerName: string;
|
|
15
|
+
llmService?: string;
|
|
15
16
|
model: string;
|
|
16
17
|
aiMessage: AIMessage;
|
|
17
18
|
}) => AIMessageInput;
|
|
18
|
-
export declare const convertHumanMessage: ({ providerName: provider, model, humanMessage, }: {
|
|
19
|
+
export declare const convertHumanMessage: ({ providerName: provider, llmService, model, humanMessage, }: {
|
|
19
20
|
providerName: string;
|
|
21
|
+
llmService?: string;
|
|
20
22
|
model: string;
|
|
21
23
|
humanMessage: HumanMessage;
|
|
22
24
|
}) => AIMessageInput;
|
|
23
|
-
export declare const convertToolMessage: ({ providerName: provider, model, toolMessage, }: {
|
|
25
|
+
export declare const convertToolMessage: ({ providerName: provider, llmService, model, toolMessage, }: {
|
|
24
26
|
providerName: string;
|
|
27
|
+
llmService?: string;
|
|
25
28
|
model: string;
|
|
26
29
|
toolMessage: ToolMessage;
|
|
27
30
|
}) => AIMessageInput;
|
|
@@ -34,6 +34,7 @@ module.exports = __toCommonJS(utils_exports);
|
|
|
34
34
|
const convertAIMessage = ({
|
|
35
35
|
aiEmployee,
|
|
36
36
|
providerName: provider,
|
|
37
|
+
llmService,
|
|
37
38
|
model,
|
|
38
39
|
aiMessage
|
|
39
40
|
}) => {
|
|
@@ -71,6 +72,7 @@ const convertAIMessage = ({
|
|
|
71
72
|
id: aiMessage.id,
|
|
72
73
|
model,
|
|
73
74
|
provider,
|
|
75
|
+
llmService,
|
|
74
76
|
usage_metadata: {}
|
|
75
77
|
},
|
|
76
78
|
toolCalls: null
|
|
@@ -94,6 +96,7 @@ const convertAIMessage = ({
|
|
|
94
96
|
};
|
|
95
97
|
const convertHumanMessage = ({
|
|
96
98
|
providerName: provider,
|
|
99
|
+
llmService,
|
|
97
100
|
model,
|
|
98
101
|
humanMessage
|
|
99
102
|
}) => {
|
|
@@ -107,7 +110,8 @@ const convertHumanMessage = ({
|
|
|
107
110
|
metadata: {
|
|
108
111
|
id: humanMessage.id,
|
|
109
112
|
model,
|
|
110
|
-
provider
|
|
113
|
+
provider,
|
|
114
|
+
llmService
|
|
111
115
|
}
|
|
112
116
|
};
|
|
113
117
|
values.attachments = humanMessage.additional_kwargs.attachments;
|
|
@@ -116,6 +120,7 @@ const convertHumanMessage = ({
|
|
|
116
120
|
};
|
|
117
121
|
const convertToolMessage = ({
|
|
118
122
|
providerName: provider,
|
|
123
|
+
llmService,
|
|
119
124
|
model,
|
|
120
125
|
toolMessage
|
|
121
126
|
}) => {
|
|
@@ -129,6 +134,7 @@ const convertToolMessage = ({
|
|
|
129
134
|
id: toolMessage.id,
|
|
130
135
|
model,
|
|
131
136
|
provider,
|
|
137
|
+
llmService,
|
|
132
138
|
toolCallId: toolMessage.tool_call_id,
|
|
133
139
|
toolName: toolMessage.name
|
|
134
140
|
}
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
|
-
import { KnowledgeBaseGroup } from '../types';
|
|
9
|
+
import { KnowledgeBase, KnowledgeBaseGroup } from '../types';
|
|
10
10
|
export interface KnowledgeBaseFeature {
|
|
11
|
-
|
|
11
|
+
getKnowledgeBase(knowledgeBaseKeys: string[]): Promise<KnowledgeBase[]>;
|
|
12
|
+
getKnowledgeBaseGroup(knowledgeBaseKeys: string[]): Promise<KnowledgeBaseGroup[]>;
|
|
12
13
|
}
|