@nocobase/plugin-ai 2.1.0-beta.29 → 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/api/cli/api/dynamic.md +7 -0
- package/dist/ai/docs/nocobase/api/cli/api/resource/index.md +3 -0
- package/dist/ai/docs/nocobase/api/cli/app/down.md +7 -3
- package/dist/ai/docs/nocobase/api/cli/app/index.md +1 -1
- package/dist/ai/docs/nocobase/api/cli/app/logs.md +3 -0
- package/dist/ai/docs/nocobase/api/cli/app/restart.md +4 -0
- package/dist/ai/docs/nocobase/api/cli/app/start.md +4 -0
- package/dist/ai/docs/nocobase/api/cli/app/stop.md +3 -0
- package/dist/ai/docs/nocobase/api/cli/app/upgrade.md +5 -0
- package/dist/ai/docs/nocobase/api/cli/env/add.md +11 -3
- package/dist/ai/docs/nocobase/api/cli/env/auth.md +1 -1
- package/dist/ai/docs/nocobase/api/cli/env/current.md +29 -0
- package/dist/ai/docs/nocobase/api/cli/env/index.md +22 -4
- package/dist/ai/docs/nocobase/api/cli/env/info.md +1 -5
- package/dist/ai/docs/nocobase/api/cli/env/list.md +11 -6
- package/dist/ai/docs/nocobase/api/cli/env/remove.md +4 -1
- package/dist/ai/docs/nocobase/api/cli/env/status.md +52 -0
- package/dist/ai/docs/nocobase/api/cli/env/update.md +1 -1
- package/dist/ai/docs/nocobase/api/cli/env/use.md +11 -1
- package/dist/ai/docs/nocobase/api/cli/index.md +13 -1
- package/dist/ai/docs/nocobase/api/cli/license/activate.md +4 -1
- package/dist/ai/docs/nocobase/api/cli/license/id.md +4 -0
- package/dist/ai/docs/nocobase/api/cli/license/plugins/clean.md +5 -1
- package/dist/ai/docs/nocobase/api/cli/license/plugins/list.md +4 -0
- package/dist/ai/docs/nocobase/api/cli/license/plugins/sync.md +5 -1
- package/dist/ai/docs/nocobase/api/cli/license/status.md +4 -0
- package/dist/ai/docs/nocobase/api/cli/plugin/disable.md +4 -0
- package/dist/ai/docs/nocobase/api/cli/plugin/enable.md +4 -0
- package/dist/ai/docs/nocobase/api/cli/plugin/list.md +4 -0
- package/dist/ai/docs/nocobase/api/cli/session/id.md +28 -0
- package/dist/ai/docs/nocobase/api/cli/session/index.md +41 -0
- package/dist/ai/docs/nocobase/api/cli/session/remove.md +35 -0
- package/dist/ai/docs/nocobase/api/cli/session/setup.md +47 -0
- 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/119.c6bf8c6433167d81.js +10 -0
- package/dist/client/228.b4b709f93b86b6b9.js +10 -0
- package/dist/client/462.1708385b148779cd.js +10 -0
- package/dist/client/{486.afbed6b132b3c0dd.js → 486.dcac8f3fcec19c33.js} +1 -1
- package/dist/client/{559.39872901b9053629.js → 559.585f80c3bcea0bed.js} +1 -1
- package/dist/client/597.b0d64948d74cf6cb.js +10 -0
- package/dist/client/646.b0ed728921b007d4.js +10 -0
- package/dist/client/711.92cd94681fde7e05.js +10 -0
- package/dist/client/768.5177bff46ae71a5b.js +10 -0
- package/dist/client/792.abb57765453bcbcc.js +10 -0
- package/dist/client/820.f72ef2462b61d812.js +10 -0
- package/dist/client/927.d95c74ebb8fd51c9.js +10 -0
- 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/conversations/ConversationsList.d.ts +1 -15
- package/dist/client/ai-employees/chatbox/conversations/WorkflowTasksList.d.ts +1 -21
- package/dist/client/ai-employees/chatbox/hooks/useChat.d.ts +125 -0
- package/dist/client/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +1 -1
- package/dist/client/ai-employees/chatbox/hooks/useChatConversationActions.d.ts +13 -1
- package/dist/client/ai-employees/chatbox/hooks/useChatMessageActions.d.ts +8 -8
- package/dist/client/ai-employees/chatbox/model.d.ts +6 -3
- package/dist/client/ai-employees/chatbox/stores/chat-conversations.d.ts +4 -0
- package/dist/client/ai-employees/chatbox/stores/chat-messages.d.ts +77 -50
- package/dist/client/ai-employees/chatbox/stores/chat-tool-call.d.ts +24 -16
- package/dist/client/ai-employees/types.d.ts +24 -0
- package/dist/client/features/vector-database-provider.d.ts +1 -1
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.js +3 -3
- 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 -16
- package/dist/locale/en-US.json +16 -1
- package/dist/locale/zh-CN.json +16 -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 +4 -1
- package/dist/server/ai-employees/ai-conversations.js +44 -4
- package/dist/server/ai-employees/ai-employee.d.ts +31 -15
- package/dist/server/ai-employees/ai-employee.js +205 -52
- 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 +15 -11
- 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/collections/ai-conversations.js +6 -0
- 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/manager/llm-stream-manager.d.ts +37 -0
- package/dist/server/manager/llm-stream-manager.js +142 -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/plugin.d.ts +2 -0
- package/dist/server/plugin.js +3 -0
- package/dist/server/resource/ai.js +1 -41
- package/dist/server/resource/aiConversations.d.ts +8 -0
- package/dist/server/resource/aiConversations.js +141 -10
- 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/119.78774f3ad953af49.js +0 -10
- package/dist/client/228.a3df2921c8beb766.js +0 -10
- package/dist/client/343.6f36d97dd122c5b6.js +0 -10
- package/dist/client/597.aa363881a325b5c0.js +0 -10
- package/dist/client/646.217a40387efbd163.js +0 -10
- package/dist/client/711.266b8f1c520d467a.js +0 -10
- package/dist/client/768.973ce32e15099a48.js +0 -10
- package/dist/client/792.2e48eab4767d662a.js +0 -10
- package/dist/client/820.6a26239ea96c075a.js +0 -10
- package/dist/client/927.ff5cd05b14901ae6.js +0 -10
|
@@ -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
|
});
|
|
@@ -109,6 +111,9 @@ const conversationMiddleware = (aiEmployee, options) => {
|
|
|
109
111
|
}
|
|
110
112
|
});
|
|
111
113
|
},
|
|
114
|
+
afterAgent: async () => {
|
|
115
|
+
aiEmployee.removeAbortController();
|
|
116
|
+
},
|
|
112
117
|
beforeModel: async (state, runtime) => {
|
|
113
118
|
var _a;
|
|
114
119
|
const { messageId: messageId2 } = state;
|
|
@@ -159,7 +164,6 @@ const conversationMiddleware = (aiEmployee, options) => {
|
|
|
159
164
|
if ((lastMessage == null ? void 0 : lastMessage.type) !== "ai") {
|
|
160
165
|
return newState;
|
|
161
166
|
}
|
|
162
|
-
aiEmployee.removeAbortController();
|
|
163
167
|
if ((_a = runtime.signal) == null ? void 0 : _a.aborted) {
|
|
164
168
|
return newState;
|
|
165
169
|
}
|
|
@@ -180,19 +184,19 @@ const conversationMiddleware = (aiEmployee, options) => {
|
|
|
180
184
|
fillToolCall(result, toolsMap, initializedToolCalls, toolCalls);
|
|
181
185
|
}
|
|
182
186
|
});
|
|
183
|
-
(
|
|
187
|
+
if (toolCalls == null ? void 0 : toolCalls.length) {
|
|
188
|
+
(_b = runtime.writer) == null ? void 0 : _b.call(runtime, {
|
|
189
|
+
action: "initToolCalls",
|
|
190
|
+
body: { toolCalls },
|
|
191
|
+
currentConversation
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
(_c = runtime.writer) == null ? void 0 : _c.call(runtime, {
|
|
184
195
|
action: "AfterAIMessageSaved",
|
|
185
196
|
body: { id: aiMessage.id, messageId: newState.messageId },
|
|
186
197
|
currentConversation
|
|
187
198
|
});
|
|
188
199
|
}
|
|
189
|
-
if (toolCalls == null ? void 0 : toolCalls.length) {
|
|
190
|
-
(_c = runtime.writer) == null ? void 0 : _c.call(runtime, {
|
|
191
|
-
action: "initToolCalls",
|
|
192
|
-
body: { toolCalls },
|
|
193
|
-
currentConversation
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
200
|
return newState;
|
|
197
201
|
} catch (e) {
|
|
198
202
|
(_f = (_e = (_d = runtime.context) == null ? void 0 : _d.ctx) == null ? void 0 : _e.logger) == null ? void 0 : _f.error(e);
|
|
@@ -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
|
}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export { LLMProvider, LLMProviderOptions } from './llm-providers/provider';
|
|
|
11
11
|
export { LLMProviderMeta } from './manager/ai-manager';
|
|
12
12
|
export { ToolOptions } from './manager/tool-manager';
|
|
13
13
|
export { DocumentLoader } from './document-loader';
|
|
14
|
+
export { AIEmployee } from './ai-employees/ai-employee';
|
|
15
|
+
export type { AIEmployeeOptions, ModelRef } from './ai-employees/ai-employee';
|
|
14
16
|
export type { ParsedDocumentResult, ParseableFile, DocumentParseMeta } from './document-loader';
|
|
15
17
|
export type * from './features';
|
|
16
18
|
export type * from './types';
|
package/dist/server/index.js
CHANGED
|
@@ -36,6 +36,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
36
36
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
37
37
|
var server_exports = {};
|
|
38
38
|
__export(server_exports, {
|
|
39
|
+
AIEmployee: () => import_ai_employee.AIEmployee,
|
|
39
40
|
DocumentLoader: () => import_document_loader.DocumentLoader,
|
|
40
41
|
LLMProvider: () => import_provider.LLMProvider,
|
|
41
42
|
LLMProviderMeta: () => import_ai_manager.LLMProviderMeta,
|
|
@@ -49,8 +50,10 @@ var import_provider = require("./llm-providers/provider");
|
|
|
49
50
|
var import_ai_manager = require("./manager/ai-manager");
|
|
50
51
|
var import_tool_manager = require("./manager/tool-manager");
|
|
51
52
|
var import_document_loader = require("./document-loader");
|
|
53
|
+
var import_ai_employee = require("./ai-employees/ai-employee");
|
|
52
54
|
// Annotate the CommonJS export names for ESM import in node:
|
|
53
55
|
0 && (module.exports = {
|
|
56
|
+
AIEmployee,
|
|
54
57
|
DocumentLoader,
|
|
55
58
|
LLMProvider,
|
|
56
59
|
LLMProviderMeta,
|
|
@@ -10,8 +10,10 @@ import { BaseMessage } from '@langchain/core/messages';
|
|
|
10
10
|
import { ChatOpenAICompletions } from '@langchain/openai';
|
|
11
11
|
import type OpenAI from 'openai';
|
|
12
12
|
export declare const REASONING_MAP_KEY = "__nb_reasoning_map";
|
|
13
|
+
export declare const MODEL_KWARGS_KEY = "__nb_model_kwargs";
|
|
13
14
|
export declare const collectReasoningMap: (messages: BaseMessage[]) => Map<string, string>;
|
|
14
15
|
export declare const patchRequestMessagesReasoning: (request: any, reasoningMap?: Map<string, string>) => void;
|
|
16
|
+
export declare const patchRequestModelKwargs: (request: any, modelKwargs?: Record<string, any>) => void;
|
|
15
17
|
export declare class ReasoningChatOpenAI extends ChatOpenAICompletions {
|
|
16
18
|
_generate(messages: BaseMessage[], options: any, runManager?: any): Promise<import("@langchain/core/dist/outputs").ChatResult>;
|
|
17
19
|
_streamResponseChunks(messages: BaseMessage[], options: any, runManager?: any): AsyncGenerator<import("@langchain/core/dist/outputs").ChatGenerationChunk, void, unknown>;
|
|
@@ -26,15 +26,18 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
26
26
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
27
|
var reasoning_exports = {};
|
|
28
28
|
__export(reasoning_exports, {
|
|
29
|
+
MODEL_KWARGS_KEY: () => MODEL_KWARGS_KEY,
|
|
29
30
|
REASONING_MAP_KEY: () => REASONING_MAP_KEY,
|
|
30
31
|
ReasoningChatOpenAI: () => ReasoningChatOpenAI,
|
|
31
32
|
collectReasoningMap: () => collectReasoningMap,
|
|
32
|
-
patchRequestMessagesReasoning: () => patchRequestMessagesReasoning
|
|
33
|
+
patchRequestMessagesReasoning: () => patchRequestMessagesReasoning,
|
|
34
|
+
patchRequestModelKwargs: () => patchRequestModelKwargs
|
|
33
35
|
});
|
|
34
36
|
module.exports = __toCommonJS(reasoning_exports);
|
|
35
37
|
var import_messages = require("@langchain/core/messages");
|
|
36
38
|
var import_openai = require("@langchain/openai");
|
|
37
39
|
const REASONING_MAP_KEY = "__nb_reasoning_map";
|
|
40
|
+
const MODEL_KWARGS_KEY = "__nb_model_kwargs";
|
|
38
41
|
const collectReasoningMap = (messages) => {
|
|
39
42
|
var _a;
|
|
40
43
|
const reasoningMap = /* @__PURE__ */ new Map();
|
|
@@ -69,6 +72,12 @@ const patchRequestMessagesReasoning = (request, reasoningMap) => {
|
|
|
69
72
|
}
|
|
70
73
|
}
|
|
71
74
|
};
|
|
75
|
+
const patchRequestModelKwargs = (request, modelKwargs) => {
|
|
76
|
+
if (!modelKwargs || typeof modelKwargs !== "object") {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
Object.assign(request, modelKwargs);
|
|
80
|
+
};
|
|
72
81
|
class ReasoningChatOpenAI extends import_openai.ChatOpenAICompletions {
|
|
73
82
|
async _generate(messages, options, runManager) {
|
|
74
83
|
const reasoningMap = collectReasoningMap(messages);
|
|
@@ -108,7 +117,9 @@ class ReasoningChatOpenAI extends import_openai.ChatOpenAICompletions {
|
|
|
108
117
|
}
|
|
109
118
|
async completionWithRetry(request, requestOptions) {
|
|
110
119
|
const reasoningMap = requestOptions == null ? void 0 : requestOptions[REASONING_MAP_KEY];
|
|
120
|
+
const modelKwargs = requestOptions == null ? void 0 : requestOptions[MODEL_KWARGS_KEY];
|
|
111
121
|
patchRequestMessagesReasoning(request, reasoningMap);
|
|
122
|
+
patchRequestModelKwargs(request, modelKwargs);
|
|
112
123
|
if (request.stream) {
|
|
113
124
|
return super.completionWithRetry(request, requestOptions);
|
|
114
125
|
}
|
|
@@ -117,8 +128,10 @@ class ReasoningChatOpenAI extends import_openai.ChatOpenAICompletions {
|
|
|
117
128
|
}
|
|
118
129
|
// Annotate the CommonJS export names for ESM import in node:
|
|
119
130
|
0 && (module.exports = {
|
|
131
|
+
MODEL_KWARGS_KEY,
|
|
120
132
|
REASONING_MAP_KEY,
|
|
121
133
|
ReasoningChatOpenAI,
|
|
122
134
|
collectReasoningMap,
|
|
123
|
-
patchRequestMessagesReasoning
|
|
135
|
+
patchRequestMessagesReasoning,
|
|
136
|
+
patchRequestModelKwargs
|
|
124
137
|
});
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
import { AIMessageChunk } from '@langchain/core/messages';
|
|
10
|
-
import { EmbeddingProvider, LLMProvider } from './provider';
|
|
10
|
+
import { EmbeddingProvider, LLMModelRequestBuilder, LLMProvider } from './provider';
|
|
11
11
|
import { EmbeddingsInterface } from '@langchain/core/embeddings';
|
|
12
12
|
import { SupportedModel } from '../manager/ai-manager';
|
|
13
13
|
import { Model } from '@nocobase/database';
|
|
@@ -19,6 +19,7 @@ export declare class DashscopeProvider extends LLMProvider {
|
|
|
19
19
|
createModel(): ReasoningChatOpenAI;
|
|
20
20
|
isToolConflict(): boolean;
|
|
21
21
|
resolveTools(toolDefinitions: any[]): any[];
|
|
22
|
+
protected getModelRequestBuilder(model?: string): LLMModelRequestBuilder | null;
|
|
22
23
|
parseResponseMessage(message: Model): {
|
|
23
24
|
key: any;
|
|
24
25
|
createdAt: any;
|
|
@@ -41,6 +41,7 @@ __export(dashscope_exports, {
|
|
|
41
41
|
dashscopeProviderOptions: () => dashscopeProviderOptions
|
|
42
42
|
});
|
|
43
43
|
module.exports = __toCommonJS(dashscope_exports);
|
|
44
|
+
var import_messages = require("@langchain/core/messages");
|
|
44
45
|
var import_openai = require("@langchain/openai");
|
|
45
46
|
var import_provider = require("./provider");
|
|
46
47
|
var import_ai_manager = require("../manager/ai-manager");
|
|
@@ -94,6 +95,44 @@ class DashscopeProvider extends import_provider.LLMProvider {
|
|
|
94
95
|
return toolDefinitions;
|
|
95
96
|
}
|
|
96
97
|
}
|
|
98
|
+
getModelRequestBuilder(model) {
|
|
99
|
+
if (!/^qwen-mt-/i.test(model || "")) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
return ({ context, options }) => {
|
|
103
|
+
var _a, _b;
|
|
104
|
+
const { sourceText, sourceLang, targetLang, terms } = (options == null ? void 0 : options.modelRequestParams) || {};
|
|
105
|
+
if (!sourceText || !sourceLang || !targetLang) {
|
|
106
|
+
return {
|
|
107
|
+
context,
|
|
108
|
+
options
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
(_b = this.app.logger) == null ? void 0 : _b.debug("Dashscope Qwen-MT model request builder matched", {
|
|
112
|
+
model: (_a = this.modelOptions) == null ? void 0 : _a.model,
|
|
113
|
+
sourceTextLength: (sourceText == null ? void 0 : sourceText.length) ?? 0,
|
|
114
|
+
sourceLang,
|
|
115
|
+
targetLang,
|
|
116
|
+
terms: Array.isArray(terms) ? terms.length : 0
|
|
117
|
+
});
|
|
118
|
+
return {
|
|
119
|
+
context: {
|
|
120
|
+
messages: [new import_messages.HumanMessage(sourceText)]
|
|
121
|
+
},
|
|
122
|
+
options: {
|
|
123
|
+
...options,
|
|
124
|
+
modelKwargs: {
|
|
125
|
+
...(options == null ? void 0 : options.modelKwargs) || {},
|
|
126
|
+
translation_options: {
|
|
127
|
+
source_lang: sourceLang,
|
|
128
|
+
target_lang: targetLang,
|
|
129
|
+
...Array.isArray(terms) && terms.length ? { terms } : {}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
}
|
|
97
136
|
parseResponseMessage(message) {
|
|
98
137
|
var _a;
|
|
99
138
|
const result = super.parseResponseMessage(message);
|
|
@@ -64,7 +64,9 @@ class ReasoningDeepSeek extends import_deepseek.ChatDeepSeek {
|
|
|
64
64
|
}
|
|
65
65
|
async completionWithRetry(request, requestOptions) {
|
|
66
66
|
const reasoningMap = requestOptions == null ? void 0 : requestOptions[import_reasoning.REASONING_MAP_KEY];
|
|
67
|
+
const modelKwargs = requestOptions == null ? void 0 : requestOptions[import_reasoning.MODEL_KWARGS_KEY];
|
|
67
68
|
(0, import_reasoning.patchRequestMessagesReasoning)(request, reasoningMap);
|
|
69
|
+
(0, import_reasoning.patchRequestModelKwargs)(request, modelKwargs);
|
|
68
70
|
if (request.stream) {
|
|
69
71
|
return super.completionWithRetry(request, requestOptions);
|
|
70
72
|
}
|
|
@@ -22,6 +22,19 @@ export type ParsedAttachmentResult = {
|
|
|
22
22
|
placement: string;
|
|
23
23
|
content: any;
|
|
24
24
|
};
|
|
25
|
+
export type LLMProviderInvokeOptions = {
|
|
26
|
+
modelKwargs?: Record<string, any>;
|
|
27
|
+
modelRequestParams?: Record<string, any>;
|
|
28
|
+
[key: string]: any;
|
|
29
|
+
};
|
|
30
|
+
export type LLMModelRequestBuilderResult = {
|
|
31
|
+
context: AIChatContext;
|
|
32
|
+
options?: LLMProviderInvokeOptions;
|
|
33
|
+
};
|
|
34
|
+
export type LLMModelRequestBuilder = (input: {
|
|
35
|
+
context: AIChatContext;
|
|
36
|
+
options?: LLMProviderInvokeOptions;
|
|
37
|
+
}) => LLMModelRequestBuilderResult;
|
|
25
38
|
export interface LLMProviderOptions {
|
|
26
39
|
app: Application;
|
|
27
40
|
serviceOptions?: Record<string, any>;
|
|
@@ -35,8 +48,9 @@ export declare abstract class LLMProvider {
|
|
|
35
48
|
abstract createModel(): BaseChatModel | any;
|
|
36
49
|
get baseURL(): string | null;
|
|
37
50
|
constructor(opts: LLMProviderOptions);
|
|
51
|
+
protected getModelRequestBuilder(_model?: string): LLMModelRequestBuilder | null;
|
|
38
52
|
prepareChain(context: AIChatContext): any;
|
|
39
|
-
invoke(context: AIChatContext, options?:
|
|
53
|
+
invoke(context: AIChatContext, options?: LLMProviderInvokeOptions): Promise<any>;
|
|
40
54
|
stream(context: AIChatContext, options?: any): Promise<any>;
|
|
41
55
|
listModels(): Promise<{
|
|
42
56
|
models?: {
|
|
@@ -45,6 +45,7 @@ var import_utils = require("../utils");
|
|
|
45
45
|
var import_stream = require("@langchain/core/utils/stream");
|
|
46
46
|
var import_document_loader = require("../document-loader");
|
|
47
47
|
var import_node_path = __toESM(require("node:path"));
|
|
48
|
+
var import_reasoning = require("./common/reasoning");
|
|
48
49
|
class LLMProvider {
|
|
49
50
|
app;
|
|
50
51
|
serviceOptions;
|
|
@@ -62,6 +63,9 @@ class LLMProvider {
|
|
|
62
63
|
this.chatModel = this.createModel();
|
|
63
64
|
}
|
|
64
65
|
}
|
|
66
|
+
getModelRequestBuilder(_model) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
65
69
|
prepareChain(context) {
|
|
66
70
|
var _a, _b, _c, _d;
|
|
67
71
|
let chain = this.chatModel;
|
|
@@ -84,8 +88,23 @@ class LLMProvider {
|
|
|
84
88
|
return chain;
|
|
85
89
|
}
|
|
86
90
|
async invoke(context, options) {
|
|
87
|
-
|
|
88
|
-
|
|
91
|
+
var _a;
|
|
92
|
+
const builder = this.getModelRequestBuilder((_a = this.modelOptions) == null ? void 0 : _a.model);
|
|
93
|
+
const request = (builder == null ? void 0 : builder({ context, options })) || { context, options };
|
|
94
|
+
const chain = this.prepareChain(request.context);
|
|
95
|
+
const { modelKwargs, modelRequestParams, options: requestOptions, ...restOptions } = request.options || {};
|
|
96
|
+
const invokeOptions = modelKwargs ? {
|
|
97
|
+
...restOptions,
|
|
98
|
+
[import_reasoning.MODEL_KWARGS_KEY]: modelKwargs,
|
|
99
|
+
options: {
|
|
100
|
+
...requestOptions || {},
|
|
101
|
+
[import_reasoning.MODEL_KWARGS_KEY]: modelKwargs
|
|
102
|
+
}
|
|
103
|
+
} : {
|
|
104
|
+
...restOptions,
|
|
105
|
+
...requestOptions ? { options: requestOptions } : {}
|
|
106
|
+
};
|
|
107
|
+
return chain.invoke(request.context.messages, invokeOptions);
|
|
89
108
|
}
|
|
90
109
|
async stream(context, options) {
|
|
91
110
|
const chain = this.prepareChain(context);
|
|
@@ -138,11 +138,10 @@ class AIChatConversationImpl {
|
|
|
138
138
|
formatMessages
|
|
139
139
|
} = options ?? {};
|
|
140
140
|
let messages = userMessages ? await (formatMessages == null ? void 0 : formatMessages(userMessages)) ?? [] : void 0;
|
|
141
|
-
const additionSystemPrompt = messages == null ? void 0 : messages.filter((it) => it.role === "system").map((it) => it.content).join("\n");
|
|
141
|
+
const additionSystemPrompt = messages == null ? void 0 : messages.filter((it) => it.role === "system").map((it) => it.content).filter(Boolean).join("\n");
|
|
142
142
|
messages = messages == null ? void 0 : messages.filter((it) => it.role !== "system");
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
${additionSystemPrompt}`;
|
|
143
|
+
const baseSystemPrompt = await (getSystemPrompt == null ? void 0 : getSystemPrompt(userMessages ?? []));
|
|
144
|
+
const systemPrompt = [baseSystemPrompt, additionSystemPrompt].filter(Boolean).join("\n\n") || void 0;
|
|
146
145
|
const chatContext = {
|
|
147
146
|
systemPrompt,
|
|
148
147
|
messages,
|
|
@@ -26,6 +26,19 @@ export type LLMModelOptions = {
|
|
|
26
26
|
model: string;
|
|
27
27
|
webSearch?: boolean;
|
|
28
28
|
};
|
|
29
|
+
export type EnabledLLMModel = {
|
|
30
|
+
label: string;
|
|
31
|
+
value: string;
|
|
32
|
+
};
|
|
33
|
+
export type EnabledLLMService = {
|
|
34
|
+
llmService: string;
|
|
35
|
+
llmServiceTitle: string;
|
|
36
|
+
provider: string;
|
|
37
|
+
providerTitle?: string;
|
|
38
|
+
enabledModels: EnabledLLMModel[];
|
|
39
|
+
supportWebSearch: boolean;
|
|
40
|
+
isToolConflict: boolean;
|
|
41
|
+
};
|
|
29
42
|
export declare class AIManager {
|
|
30
43
|
protected plugin: PluginAIServer;
|
|
31
44
|
llmProviders: Map<string, LLMProviderMeta>;
|
|
@@ -39,6 +52,10 @@ export declare class AIManager {
|
|
|
39
52
|
supportWebSearch: boolean;
|
|
40
53
|
}[];
|
|
41
54
|
getSupportedProvider(model: SupportedModel): string[];
|
|
55
|
+
listAllEnabledModels(): Promise<EnabledLLMService[]>;
|
|
56
|
+
resolveModel(model?: LLMModelOptions | null): Promise<LLMModelOptions>;
|
|
57
|
+
private toEnabledLLMService;
|
|
58
|
+
private getEnabledModels;
|
|
42
59
|
getLLMService(options: LLMModelOptions): Promise<{
|
|
43
60
|
provider: LLMProvider;
|
|
44
61
|
model: string;
|
|
@@ -31,6 +31,7 @@ __export(ai_manager_exports, {
|
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(ai_manager_exports);
|
|
33
33
|
var import_tool_manager = require("./tool-manager");
|
|
34
|
+
var import_recommended_models = require("../../common/recommended-models");
|
|
34
35
|
var SupportedModel = /* @__PURE__ */ ((SupportedModel2) => {
|
|
35
36
|
SupportedModel2["LLM"] = "LLM";
|
|
36
37
|
SupportedModel2["EMBEDDING"] = "EMBEDDING";
|
|
@@ -57,6 +58,70 @@ class AIManager {
|
|
|
57
58
|
getSupportedProvider(model) {
|
|
58
59
|
return Array.from(this.llmProviders.entries()).filter(([_2, { supportedModel }]) => supportedModel && supportedModel.includes(model)).map(([name]) => name);
|
|
59
60
|
}
|
|
61
|
+
async listAllEnabledModels() {
|
|
62
|
+
const services = await this.plugin.db.getRepository("llmServices").find({ sort: "sort" });
|
|
63
|
+
return services.filter((service) => service.enabled !== false).map((service) => this.toEnabledLLMService(service)).filter(Boolean);
|
|
64
|
+
}
|
|
65
|
+
async resolveModel(model) {
|
|
66
|
+
var _a;
|
|
67
|
+
if ((model == null ? void 0 : model.llmService) && (model == null ? void 0 : model.model)) {
|
|
68
|
+
return model;
|
|
69
|
+
}
|
|
70
|
+
const services = await this.listAllEnabledModels();
|
|
71
|
+
const service = services.find((service2) => service2.enabledModels.length);
|
|
72
|
+
const firstModel = (_a = service == null ? void 0 : service.enabledModels[0]) == null ? void 0 : _a.value;
|
|
73
|
+
if ((service == null ? void 0 : service.llmService) && firstModel) {
|
|
74
|
+
return {
|
|
75
|
+
llmService: service.llmService,
|
|
76
|
+
model: firstModel
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
throw new Error("LLM service not configured");
|
|
80
|
+
}
|
|
81
|
+
toEnabledLLMService(service) {
|
|
82
|
+
var _a, _b, _c;
|
|
83
|
+
const provider = ((_a = service.get) == null ? void 0 : _a.call(service, "provider")) || service.provider;
|
|
84
|
+
const providerMeta = this.llmProviders.get(provider);
|
|
85
|
+
if (!providerMeta) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
const enabledModels = this.getEnabledModels(service);
|
|
89
|
+
if (!enabledModels.length) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
const Provider = providerMeta.provider;
|
|
93
|
+
const providerClient = new Provider({ app: this.plugin.app });
|
|
94
|
+
return {
|
|
95
|
+
llmService: ((_b = service.get) == null ? void 0 : _b.call(service, "name")) || service.name,
|
|
96
|
+
llmServiceTitle: ((_c = service.get) == null ? void 0 : _c.call(service, "title")) || service.title,
|
|
97
|
+
provider,
|
|
98
|
+
providerTitle: providerMeta.title,
|
|
99
|
+
enabledModels,
|
|
100
|
+
supportWebSearch: providerMeta.supportWebSearch ?? false,
|
|
101
|
+
isToolConflict: providerClient.isToolConflict()
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
getEnabledModels(service) {
|
|
105
|
+
var _a, _b;
|
|
106
|
+
const provider = ((_a = service.get) == null ? void 0 : _a.call(service, "provider")) || service.provider;
|
|
107
|
+
const raw = ((_b = service.get) == null ? void 0 : _b.call(service, "enabledModels")) || service.enabledModels;
|
|
108
|
+
if (raw && typeof raw === "object" && !Array.isArray(raw) && raw.mode) {
|
|
109
|
+
if (raw.mode === "recommended") {
|
|
110
|
+
return (0, import_recommended_models.getRecommendedModels)(provider);
|
|
111
|
+
}
|
|
112
|
+
return (raw.models || []).filter((model) => model.value).map((model) => ({
|
|
113
|
+
label: model.label || model.value,
|
|
114
|
+
value: model.value
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
if (Array.isArray(raw)) {
|
|
118
|
+
if (!raw.length) {
|
|
119
|
+
return (0, import_recommended_models.getRecommendedModels)(provider);
|
|
120
|
+
}
|
|
121
|
+
return raw.map((id) => ({ label: id, value: id }));
|
|
122
|
+
}
|
|
123
|
+
return (0, import_recommended_models.getRecommendedModels)(provider);
|
|
124
|
+
}
|
|
60
125
|
async getLLMService(options) {
|
|
61
126
|
const { llmService, model, webSearch } = options ?? {};
|
|
62
127
|
if (!llmService || !model) {
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
import PluginAIServer from '../plugin';
|
|
10
|
+
export declare class LLMStreamCachedManager {
|
|
11
|
+
private readonly plugin;
|
|
12
|
+
private cachePromise?;
|
|
13
|
+
constructor(plugin: PluginAIServer);
|
|
14
|
+
getCached(sessionId: string): LLMStreamCached;
|
|
15
|
+
clear(sessionId: string): Promise<void>;
|
|
16
|
+
append(sessionId: string, chunk: string): Promise<void>;
|
|
17
|
+
stream(sessionId: string, options?: {
|
|
18
|
+
pollInterval?: number;
|
|
19
|
+
initialWaitTimeout?: number;
|
|
20
|
+
}): AsyncGenerator<string, void, void>;
|
|
21
|
+
private getChunks;
|
|
22
|
+
private getCache;
|
|
23
|
+
private withLock;
|
|
24
|
+
private getLockKey;
|
|
25
|
+
}
|
|
26
|
+
export declare class LLMStreamCached {
|
|
27
|
+
private readonly sessionId;
|
|
28
|
+
private readonly manager;
|
|
29
|
+
constructor(sessionId: string, manager: LLMStreamCachedManager);
|
|
30
|
+
clear(): Promise<void>;
|
|
31
|
+
append(chunk: string): Promise<void>;
|
|
32
|
+
skipped(): Promise<void>;
|
|
33
|
+
stream(options?: {
|
|
34
|
+
pollInterval?: number;
|
|
35
|
+
initialWaitTimeout?: number;
|
|
36
|
+
}): AsyncGenerator<string, void, void>;
|
|
37
|
+
}
|