@nocobase/plugin-ai 2.1.12 → 2.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/docs/nocobase/api/cli/env/auth.md +53 -5
- package/dist/ai/docs/nocobase/ops-management/version-control/index.md +1 -0
- package/dist/client/{559.a0f2f1cc2be3c039.js → 559.9061f1f36be7b76c.js} +1 -1
- package/dist/client/index.js +3 -3
- package/dist/client/llm-providers/mistral/ModelSettings.d.ts +10 -0
- package/dist/client/llm-providers/mistral/index.d.ts +10 -0
- package/dist/externalVersion.js +16 -16
- package/dist/locale/en-US.json +1 -0
- package/dist/locale/zh-CN.json +1 -0
- package/dist/node_modules/@langchain/mistralai/LICENSE +21 -0
- package/dist/node_modules/@langchain/mistralai/dist/_virtual/rolldown_runtime.cjs +25 -0
- package/dist/node_modules/@langchain/mistralai/dist/chat_models.cjs +859 -0
- package/dist/node_modules/@langchain/mistralai/dist/chat_models.d.cts +541 -0
- package/dist/node_modules/@langchain/mistralai/dist/chat_models.d.ts +541 -0
- package/dist/node_modules/@langchain/mistralai/dist/chat_models.js +857 -0
- package/dist/node_modules/@langchain/mistralai/dist/embeddings.cjs +140 -0
- package/dist/node_modules/@langchain/mistralai/dist/embeddings.d.cts +116 -0
- package/dist/node_modules/@langchain/mistralai/dist/embeddings.d.ts +116 -0
- package/dist/node_modules/@langchain/mistralai/dist/embeddings.js +139 -0
- package/dist/node_modules/@langchain/mistralai/dist/index.cjs +21 -0
- package/dist/node_modules/@langchain/mistralai/dist/index.d.cts +4 -0
- package/dist/node_modules/@langchain/mistralai/dist/index.d.ts +4 -0
- package/dist/node_modules/@langchain/mistralai/dist/index.js +5 -0
- package/dist/node_modules/@langchain/mistralai/dist/llms.cjs +275 -0
- package/dist/node_modules/@langchain/mistralai/dist/llms.d.cts +147 -0
- package/dist/node_modules/@langchain/mistralai/dist/llms.d.ts +147 -0
- package/dist/node_modules/@langchain/mistralai/dist/llms.js +274 -0
- package/dist/node_modules/@langchain/mistralai/dist/utils.cjs +61 -0
- package/dist/node_modules/@langchain/mistralai/dist/utils.js +59 -0
- package/dist/node_modules/@langchain/mistralai/package.json +1 -0
- package/dist/node_modules/@langchain/xai/dist/index.cjs +2 -2
- 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-employee.js +7 -5
- package/dist/server/ai-employees/middleware/conversation.d.ts +2 -0
- package/dist/server/ai-employees/middleware/conversation.js +2 -1
- package/dist/server/ai-employees/utils.d.ts +3 -1
- package/dist/server/ai-employees/utils.js +2 -0
- package/dist/server/llm-providers/mistral.d.ts +62 -0
- package/dist/server/llm-providers/mistral.js +265 -0
- package/dist/server/llm-providers/provider.d.ts +6 -2
- package/dist/server/llm-providers/provider.js +2 -0
- package/dist/server/plugin.js +2 -0
- package/dist/server/workflow/nodes/employee/index.js +91 -45
- package/package.json +3 -2
|
@@ -319,6 +319,8 @@ ${parsed.text}
|
|
|
319
319
|
parseResponseError(err) {
|
|
320
320
|
return (err == null ? void 0 : err.message) ?? "Unexpected LLM service error";
|
|
321
321
|
}
|
|
322
|
+
reshapeAIMessage(_options) {
|
|
323
|
+
}
|
|
322
324
|
get documentLoader() {
|
|
323
325
|
return this.aiPlugin.documentLoaders.cached;
|
|
324
326
|
}
|
package/dist/server/plugin.js
CHANGED
|
@@ -74,6 +74,7 @@ var import_xai = require("./llm-providers/xai");
|
|
|
74
74
|
var import_document_loader = require("./document-loader");
|
|
75
75
|
var import_checkpoints = require("./ai-employees/checkpoints");
|
|
76
76
|
var import_mimo = require("./llm-providers/mimo");
|
|
77
|
+
var import_mistral = require("./llm-providers/mistral");
|
|
77
78
|
var import_sub_agents = require("./ai-employees/sub-agents");
|
|
78
79
|
var import_employee = require("./workflow/nodes/employee");
|
|
79
80
|
var import_ai_knowledge_base = require("./ai-employees/ai-knowledge-base");
|
|
@@ -180,6 +181,7 @@ class PluginAIServer extends import_server.Plugin {
|
|
|
180
181
|
this.aiManager.registerLLMProvider("dashscope", import_dashscope.dashscopeProviderOptions);
|
|
181
182
|
this.aiManager.registerLLMProvider("kimi", import_kimi.kimiProviderOptions);
|
|
182
183
|
this.aiManager.registerLLMProvider("mimo", import_mimo.mimoProviderOptions);
|
|
184
|
+
this.aiManager.registerLLMProvider("mistral", import_mistral.mistralProviderOptions);
|
|
183
185
|
this.aiManager.registerLLMProvider("ollama", import_ollama.ollamaProviderOptions);
|
|
184
186
|
this.aiManager.registerLLMProvider("openai-completions", import_openai2.openaiCompletionsProviderOptions);
|
|
185
187
|
this.aiManager.registerLLMProvider("kimi", import_kimi.kimiProviderOptions);
|
|
@@ -120,27 +120,29 @@ ${typeof message.system === "object" ? JSON.stringify(message.system) : message.
|
|
|
120
120
|
});
|
|
121
121
|
const plugin = this.workflow.app.pm.get("ai");
|
|
122
122
|
const resolvedModel = await plugin.aiEmployeesManager.resolveModel(employee, model);
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
user:
|
|
132
|
-
id: ((_e = (_d = input == null ? void 0 : input.result) == null ? void 0 : _d.user) == null ? void 0 : _e.id) ?? userId
|
|
133
|
-
}
|
|
134
|
-
},
|
|
135
|
-
action: {
|
|
136
|
-
params: {
|
|
137
|
-
values: {
|
|
138
|
-
sessionId: conversation.sessionId,
|
|
139
|
-
model: resolvedModel
|
|
140
|
-
}
|
|
141
|
-
}
|
|
123
|
+
const aiEmployeeContext = {
|
|
124
|
+
app: this.workflow.app,
|
|
125
|
+
db: this.workflow.app.db,
|
|
126
|
+
log: this.workflow.app.log,
|
|
127
|
+
logger: this.workflow.app.log,
|
|
128
|
+
state: { currentRoles },
|
|
129
|
+
auth: {
|
|
130
|
+
user: {
|
|
131
|
+
id: ((_e = (_d = input == null ? void 0 : input.result) == null ? void 0 : _d.user) == null ? void 0 : _e.id) ?? userId
|
|
142
132
|
}
|
|
143
133
|
},
|
|
134
|
+
action: {
|
|
135
|
+
params: {
|
|
136
|
+
values: {
|
|
137
|
+
sessionId: conversation.sessionId,
|
|
138
|
+
model: resolvedModel
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
const aiEmployeeActionValues = aiEmployeeContext.action.params.values;
|
|
144
|
+
const aiEmployee = new import_ai_employee.AIEmployee({
|
|
145
|
+
ctx: aiEmployeeContext,
|
|
144
146
|
employee,
|
|
145
147
|
sessionId: conversation.sessionId,
|
|
146
148
|
systemMessage,
|
|
@@ -158,6 +160,7 @@ ${typeof message.system === "object" ? JSON.stringify(message.system) : message.
|
|
|
158
160
|
}
|
|
159
161
|
let result;
|
|
160
162
|
let isToolInvoke = false;
|
|
163
|
+
let recoveredFromGraphRecursion = false;
|
|
161
164
|
let retry = 0;
|
|
162
165
|
do {
|
|
163
166
|
const userMessages = [
|
|
@@ -170,36 +173,76 @@ ${typeof message.system === "object" ? JSON.stringify(message.system) : message.
|
|
|
170
173
|
...attachmentPart
|
|
171
174
|
}
|
|
172
175
|
];
|
|
173
|
-
|
|
174
|
-
if (retry
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
176
|
+
try {
|
|
177
|
+
if (retry > 0) {
|
|
178
|
+
if (retry < 2) {
|
|
179
|
+
abortHandle.throwIfAborted();
|
|
180
|
+
const firstUserMessage = await this.workflow.db.getRepository("aiConversations.messages", conversation.sessionId).findOne({
|
|
181
|
+
filter: {
|
|
182
|
+
role: "user"
|
|
183
|
+
},
|
|
184
|
+
sort: ["messageId"]
|
|
185
|
+
});
|
|
186
|
+
const messageId = firstUserMessage == null ? void 0 : firstUserMessage.messageId;
|
|
187
|
+
result = await aiEmployee.invoke({ messageId, userMessages, signal: abortHandle.signal });
|
|
188
|
+
} else {
|
|
189
|
+
result = await aiEmployee.invoke({
|
|
190
|
+
signal: abortHandle.signal,
|
|
191
|
+
userMessages: [
|
|
192
|
+
{
|
|
193
|
+
role: "user",
|
|
194
|
+
content: {
|
|
195
|
+
type: "text",
|
|
196
|
+
content: `You failed to call the required tool "${toolName}" in your previous response.
|
|
197
|
+
Call "${toolName}" now to submit the workflow outcome.
|
|
194
198
|
Do not send another normal assistant response without invoking it.
|
|
195
199
|
`
|
|
200
|
+
}
|
|
196
201
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
}
|
|
202
|
+
]
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
} else {
|
|
206
|
+
result = await aiEmployee.invoke({ userMessages, signal: abortHandle.signal });
|
|
200
207
|
}
|
|
201
|
-
}
|
|
202
|
-
|
|
208
|
+
} catch (error) {
|
|
209
|
+
if (!isGraphRecursionError(error) || recoveredFromGraphRecursion) {
|
|
210
|
+
throw error;
|
|
211
|
+
}
|
|
212
|
+
recoveredFromGraphRecursion = true;
|
|
213
|
+
processor.logger.warn(`ai employee invoke reached graph recursion limit, trying workflow output recovery`, {
|
|
214
|
+
node: node.id,
|
|
215
|
+
stack: error.stack,
|
|
216
|
+
chatOptions: node.config
|
|
217
|
+
});
|
|
218
|
+
const latestMessage = await this.workflow.db.getRepository("aiConversations.messages", conversation.sessionId).findOne({
|
|
219
|
+
sort: ["-messageId"]
|
|
220
|
+
});
|
|
221
|
+
const recoveryAIEmployee = new import_ai_employee.AIEmployee({
|
|
222
|
+
ctx: {
|
|
223
|
+
...aiEmployeeContext,
|
|
224
|
+
action: {
|
|
225
|
+
params: {
|
|
226
|
+
values: {
|
|
227
|
+
...aiEmployeeActionValues,
|
|
228
|
+
important: "GraphRecursionError"
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
employee,
|
|
234
|
+
sessionId: conversation.sessionId,
|
|
235
|
+
systemMessage,
|
|
236
|
+
skillSettings,
|
|
237
|
+
webSearch,
|
|
238
|
+
model: resolvedModel,
|
|
239
|
+
tools: [{ name: toolName }]
|
|
240
|
+
});
|
|
241
|
+
abortHandle.throwIfAborted();
|
|
242
|
+
result = await recoveryAIEmployee.invoke({
|
|
243
|
+
messageId: latestMessage == null ? void 0 : latestMessage.messageId,
|
|
244
|
+
signal: abortHandle.signal
|
|
245
|
+
});
|
|
203
246
|
}
|
|
204
247
|
abortHandle.throwIfAborted();
|
|
205
248
|
isToolInvoke = result.messages.filter((it) => it.type === "ai").flatMap((it) => it.tool_calls).some((it) => it.name === toolName);
|
|
@@ -464,6 +507,9 @@ async function parseAssignees(node, processor) {
|
|
|
464
507
|
}
|
|
465
508
|
return assignees;
|
|
466
509
|
}
|
|
510
|
+
function isGraphRecursionError(error) {
|
|
511
|
+
return typeof error === "object" && error !== null && ("name" in error || "lc_error_code" in error) && (error.name === "GraphRecursionError" || error.lc_error_code === "GRAPH_RECURSION_LIMIT");
|
|
512
|
+
}
|
|
467
513
|
// Annotate the CommonJS export names for ESM import in node:
|
|
468
514
|
0 && (module.exports = {
|
|
469
515
|
AIEmployeeInstruction,
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"description": "Create AI employees with diverse skills to collaborate with humans, build systems, and handle business operations.",
|
|
7
7
|
"description.ru-RU": "Поддержка интеграции с AI-сервисами: предоставляются AI-узлы для рабочих процессов, расширяя возможности бизнес-обработки.",
|
|
8
8
|
"description.zh-CN": "创建各种技能的 AI 员工,与人类协同,搭建系统,处理业务。",
|
|
9
|
-
"version": "2.1.
|
|
9
|
+
"version": "2.1.15",
|
|
10
10
|
"main": "dist/server/index.js",
|
|
11
11
|
"homepage": "https://docs.nocobase.com/handbook/action-ai",
|
|
12
12
|
"homepage.ru-RU": "https://docs-ru.nocobase.com/handbook/action-ai",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"@langchain/google-genai": "2.1.18",
|
|
42
42
|
"@langchain/langgraph": "1.4.4",
|
|
43
43
|
"@langchain/langgraph-checkpoint": "1.1.2",
|
|
44
|
+
"@langchain/mistralai": "1.0.0",
|
|
44
45
|
"@langchain/ollama": "1.2.7",
|
|
45
46
|
"@langchain/openai": "1.4.7",
|
|
46
47
|
"@langchain/xai": "1.3.19",
|
|
@@ -65,5 +66,5 @@
|
|
|
65
66
|
"keywords": [
|
|
66
67
|
"AI"
|
|
67
68
|
],
|
|
68
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "1219585bbb4f5ebb6378be99fa2ff04b3376e6a2"
|
|
69
70
|
}
|