@shenghuabi/workflow 1.1.3 → 1.1.5
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/index.js +790 -916
- package/index.js.map +4 -4
- package/index.mjs +728 -850
- package/index.mjs.map +4 -4
- package/inline/inline.service.d.ts +1 -0
- package/inline/node/chat/main/index.d.ts +7 -12
- package/inline/node/chat/main/runner.d.ts +35 -0
- package/inline/node/chat/{chat.node.define.d.ts → node.define.d.ts} +3 -0
- package/inline/node/chat/util/useChat.d.ts +31 -0
- package/inline/node/index.browser.d.ts +2 -0
- package/inline/node/index.node.d.ts +2 -0
- package/inline/node/input-params/common.d.ts +2 -0
- package/inline/node/input-params/main/index.d.ts +29 -0
- package/inline/node/input-params/main/runner.d.ts +5 -0
- package/inline/node/input-params/node.define.d.ts +9 -0
- package/inline/node/input-params/webview/index.d.ts +2 -0
- package/inline/node/iteration/common.d.ts +2 -0
- package/inline/node/iteration/main/index.d.ts +29 -0
- package/inline/node/iteration/main/iteration-start.runner.d.ts +5 -0
- package/inline/node/iteration/main/runner.d.ts +6 -0
- package/inline/node/iteration/node.define.d.ts +11 -0
- package/inline/node/iteration/webview/index.d.ts +2 -0
- package/inline/node/text/main/index.d.ts +6 -11
- package/inline/node/text/main/runner.d.ts +14 -0
- package/inline/node/text/text.node.define.d.ts +2 -4
- package/module.d.ts +1 -3
- package/package.json +4 -3
- package/plugin/plugin.service.d.ts +1 -0
- package/preset/context-build.service.d.ts +2 -50
- package/runner/define.d.ts +3 -7
- package/runner/runner-item.d.ts +5 -20
- package/runner/workflow-runner.service.d.ts +9 -17
- package/share/common/const.d.ts +3 -2
- package/share/common/define.d.ts +3 -10
- package/share/const.d.ts +0 -1
- package/share/handle-node.d.ts +47 -18
- package/share/index.d.ts +0 -1
- package/share/index.js +27 -48
- package/share/index.js.map +4 -4
- package/share/index.mjs +25 -42
- package/share/index.mjs.map +3 -3
- package/share/type.d.ts +11 -30
- package/share/type2.d.ts +4 -8
- package/share/workflow.const.d.ts +1 -4
- package/test/util/chat-fixture.d.ts +44 -0
- package/test/util/text-input/common.d.ts +2 -0
- package/test/util/text-input/main/index.d.ts +25 -0
- package/test/util/text-input/main/runner.d.ts +6 -0
- package/test/util/text-input/text.node.define.d.ts +4 -0
- package/token.d.ts +8 -6
- package/type/type.d.ts +1 -1
- package/util/serialize-text-template.d.ts +16 -0
- package/webview/index.js +128 -41
- package/webview/index.js.map +4 -4
- package/webview/index.mjs +127 -43
- package/webview/index.mjs.map +4 -4
- package/workflow-exec.service.d.ts +14 -24
- package/workflow-parser.service.d.ts +0 -1
- package/inline/node/chat/main/llm.runner.d.ts +0 -41
- package/inline/node/text/main/textarea.runner.d.ts +0 -7
- package/preset/inline-build.service.d.ts +0 -11
- package/preset/inline-runner.service.d.ts +0 -16
- package/runner/inline-input-item.runner.d.ts +0 -8
- package/runner/input-params.runner.d.ts +0 -7
- package/runner/iteration-start.runner.d.ts +0 -7
- package/runner/iteration.runner.d.ts +0 -7
- package/runner/parameters.runner.d.ts +0 -10
- package/share/util.d.ts +0 -5
- package/test/chat.spec.d.ts +0 -1
- package/test/file.spec.d.ts +0 -1
- package/test/hello.spec.d.ts +0 -1
- package/test/plugin.spec.d.ts +0 -1
package/share/handle-node.d.ts
CHANGED
|
@@ -1,31 +1,56 @@
|
|
|
1
1
|
import { ChatInput2, ChatInputType } from './type';
|
|
2
2
|
import { WorkflowNodeType } from './workflow.const';
|
|
3
3
|
import type { Node, ReactFlowJsonObject } from '@xyflow/react';
|
|
4
|
+
export type InputInvalidItem = {
|
|
5
|
+
key: (string | number)[];
|
|
6
|
+
};
|
|
7
|
+
export type InputRefItem = {
|
|
8
|
+
/** 上游节点 id */
|
|
9
|
+
value: string;
|
|
10
|
+
/** 出口名 */
|
|
11
|
+
outlet?: string;
|
|
12
|
+
/** 键 */
|
|
13
|
+
key: (string | number)[];
|
|
14
|
+
};
|
|
15
|
+
export type InputContextItem = {
|
|
16
|
+
/** 容器节点 id */
|
|
17
|
+
value: string;
|
|
18
|
+
/** 上下文中提供的 */
|
|
19
|
+
contextKey: string;
|
|
20
|
+
/** 键 */
|
|
21
|
+
key: (string | number)[];
|
|
22
|
+
};
|
|
23
|
+
export type InputItem = InputRefItem | InputInvalidItem | InputContextItem;
|
|
4
24
|
export interface HandleNode {
|
|
25
|
+
/** 唯一,用来查询 */
|
|
5
26
|
id: string;
|
|
6
|
-
/**
|
|
7
|
-
|
|
27
|
+
/** 一般表示key */
|
|
28
|
+
name?: string;
|
|
8
29
|
/** 应该应用于tooltip显示,不应该被其他显示 */
|
|
9
|
-
label
|
|
10
|
-
type?: 'connect';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
optional?: boolean;
|
|
30
|
+
label?: string;
|
|
31
|
+
type?: 'connect' | (string & {});
|
|
32
|
+
/** todo */
|
|
33
|
+
validateType?: ChatInputType[];
|
|
14
34
|
}
|
|
15
35
|
/** 将handle节点全部拍平 */
|
|
16
36
|
export declare function flatFilterHandleList(list: HandleNode[][] | undefined): HandleNode[];
|
|
17
|
-
/** 继承 handleNode */
|
|
18
|
-
export type ResolvedInputNode = Omit<HandleNode, 'label'> & {
|
|
19
|
-
nodeId?: string;
|
|
20
|
-
outputName?: string;
|
|
21
|
-
};
|
|
22
37
|
export interface WorkflowNodeData {
|
|
23
|
-
|
|
38
|
+
config?: {
|
|
39
|
+
refList?: InputRefItem[];
|
|
40
|
+
invalidList?: InputInvalidItem[];
|
|
41
|
+
value?: Record<string, any>;
|
|
42
|
+
};
|
|
43
|
+
style?: Record<string, any>;
|
|
24
44
|
handle?: {
|
|
25
|
-
input: HandleNode[][];
|
|
26
45
|
output: HandleNode[][];
|
|
27
46
|
};
|
|
28
|
-
|
|
47
|
+
minSize?: {
|
|
48
|
+
height: number;
|
|
49
|
+
width: number;
|
|
50
|
+
};
|
|
51
|
+
transform?: {
|
|
52
|
+
resizable?: boolean;
|
|
53
|
+
};
|
|
29
54
|
title?: string;
|
|
30
55
|
outputName?: string;
|
|
31
56
|
/** 在工作流中禁止使用 @internal */
|
|
@@ -37,13 +62,17 @@ export interface WorkflowData {
|
|
|
37
62
|
flow: ReactFlowJsonObject<Node<WorkflowNodeData>>;
|
|
38
63
|
version: number;
|
|
39
64
|
}
|
|
40
|
-
|
|
65
|
+
/** 解析后runner使用 */
|
|
41
66
|
export interface ParsedNode {
|
|
42
67
|
id: string;
|
|
68
|
+
parentId?: string;
|
|
43
69
|
type: WorkflowNodeType;
|
|
44
70
|
data: WorkflowNodeData;
|
|
45
|
-
|
|
46
|
-
|
|
71
|
+
context: {
|
|
72
|
+
id: string;
|
|
73
|
+
output: string;
|
|
74
|
+
rest: boolean;
|
|
75
|
+
}[];
|
|
47
76
|
/** 可能是多出口 */
|
|
48
77
|
outputs: HandleNode[];
|
|
49
78
|
subFlowList?: {
|
package/share/index.d.ts
CHANGED
package/share/index.js
CHANGED
|
@@ -31,27 +31,22 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
31
31
|
var share_exports = {};
|
|
32
32
|
__export(share_exports, {
|
|
33
33
|
CommonDataDefine: () => CommonDataDefine,
|
|
34
|
-
DEFAULT_CHAT_SCHEMA_KEY: () => DEFAULT_CHAT_SCHEMA_KEY,
|
|
35
|
-
DEFAULT_INPUT_KEY: () => DEFAULT_INPUT_KEY,
|
|
36
34
|
EXAMPLES_DEFINE: () => EXAMPLES_DEFINE,
|
|
37
35
|
HelpObj: () => HelpObj,
|
|
38
36
|
INLINE_Template: () => INLINE_Template,
|
|
39
37
|
INLINE_Template2: () => INLINE_Template2,
|
|
40
38
|
LLMDataDefine: () => LLMDataDefine,
|
|
41
|
-
|
|
39
|
+
RUNNER_ORIGIN_OUTPUT: () => RUNNER_ORIGIN_OUTPUT,
|
|
42
40
|
WorkflowEmitter: () => WorkflowEmitter,
|
|
43
41
|
WorkflowNodeType: () => WorkflowNodeType,
|
|
44
42
|
createLLMData: () => createLLMData,
|
|
45
43
|
createResultData: () => createResultData,
|
|
46
44
|
flatFilterHandleList: () => flatFilterHandleList,
|
|
47
|
-
generateHandle: () => generateHandle,
|
|
48
|
-
isChatStream: () => isChatStream,
|
|
49
45
|
llmModelConfig: () => llmModelConfig
|
|
50
46
|
});
|
|
51
47
|
module.exports = __toCommonJS(share_exports);
|
|
52
48
|
|
|
53
49
|
// packages/workflow/share/const.ts
|
|
54
|
-
var DEFAULT_INPUT_KEY = `[INPUT]`;
|
|
55
50
|
var HelpObj = {
|
|
56
51
|
templateVarLine: `- 变量定义格式: {{xx}},{{xx.yy}}`,
|
|
57
52
|
pathTodoLine: `- **TODO** 接收传入路径而不是指定`
|
|
@@ -65,21 +60,11 @@ function flatFilterHandleList(list) {
|
|
|
65
60
|
return list.flat().filter(Boolean);
|
|
66
61
|
}
|
|
67
62
|
|
|
68
|
-
// packages/workflow/share/util.ts
|
|
69
|
-
var import_uuid = require("uuid");
|
|
70
|
-
var UUID_NS = "404cfae8-94e7-41a6-acec-1037dd1fdaad";
|
|
71
|
-
function generateHandle(value, label = value) {
|
|
72
|
-
return { id: (0, import_uuid.v5)(value, UUID_NS), label, value };
|
|
73
|
-
}
|
|
74
|
-
|
|
75
63
|
// packages/workflow/share/workflow.const.ts
|
|
76
64
|
var WorkflowNodeType = /* @__PURE__ */ ((WorkflowNodeType2) => {
|
|
77
65
|
WorkflowNodeType2["iteration"] = "iteration";
|
|
78
66
|
WorkflowNodeType2["iterationStart"] = "iteration-start";
|
|
79
67
|
WorkflowNodeType2["inputParams"] = "input-params";
|
|
80
|
-
WorkflowNodeType2["serialize"] = "serialize";
|
|
81
|
-
WorkflowNodeType2["parameters"] = "parameters";
|
|
82
|
-
WorkflowNodeType2["inlineInputItem"] = "inlineInputItem";
|
|
83
68
|
return WorkflowNodeType2;
|
|
84
69
|
})(WorkflowNodeType || {});
|
|
85
70
|
|
|
@@ -229,50 +214,48 @@ function llmModelConfig(item) {
|
|
|
229
214
|
}
|
|
230
215
|
|
|
231
216
|
// packages/workflow/share/common/const.ts
|
|
232
|
-
var
|
|
233
|
-
|
|
217
|
+
var RUNNER_ORIGIN_OUTPUT = [
|
|
218
|
+
{ id: "default", label: "默认", name: `default` }
|
|
219
|
+
];
|
|
234
220
|
|
|
235
221
|
// packages/workflow/share/type2.ts
|
|
236
|
-
var
|
|
237
|
-
var
|
|
238
|
-
var extraData =
|
|
239
|
-
references:
|
|
222
|
+
var import_uuid = require("uuid");
|
|
223
|
+
var v5 = __toESM(require("valibot"), 1);
|
|
224
|
+
var extraData = v5.looseObject({
|
|
225
|
+
references: v5.optional(v5.array(v5.custom(Boolean)))
|
|
240
226
|
});
|
|
241
|
-
var baseDataDefine =
|
|
242
|
-
node:
|
|
243
|
-
nodeResult:
|
|
244
|
-
dataId:
|
|
245
|
-
extra:
|
|
227
|
+
var baseDataDefine = v5.object({
|
|
228
|
+
node: v5.object({ type: v5.string(), id: v5.string() }),
|
|
229
|
+
nodeResult: v5.pipe(v5.optional(v5.boolean(), false)),
|
|
230
|
+
dataId: v5.optional(v5.string(), () => (0, import_uuid.v4)()),
|
|
231
|
+
extra: v5.optional(extraData)
|
|
246
232
|
});
|
|
247
|
-
var CommonDataDefine =
|
|
233
|
+
var CommonDataDefine = v5.object({
|
|
248
234
|
...baseDataDefine.entries,
|
|
249
|
-
value:
|
|
235
|
+
value: v5.any()
|
|
250
236
|
});
|
|
251
|
-
var LLMDataDefine =
|
|
237
|
+
var LLMDataDefine = v5.object({
|
|
252
238
|
...baseDataDefine.entries,
|
|
253
|
-
type:
|
|
239
|
+
type: v5.optional(v5.literal("chat-stream"), "chat-stream"),
|
|
254
240
|
// 用来进行普通查询
|
|
255
|
-
value:
|
|
256
|
-
extra:
|
|
241
|
+
value: v5.string(),
|
|
242
|
+
extra: v5.object({
|
|
257
243
|
...extraData.entries,
|
|
258
|
-
content:
|
|
259
|
-
thinkContent:
|
|
260
|
-
isThinking:
|
|
261
|
-
delta:
|
|
262
|
-
historyList:
|
|
244
|
+
content: v5.string(),
|
|
245
|
+
thinkContent: v5.optional(v5.string()),
|
|
246
|
+
isThinking: v5.optional(v5.boolean()),
|
|
247
|
+
delta: v5.string(),
|
|
248
|
+
historyList: v5.custom(Boolean)
|
|
263
249
|
})
|
|
264
250
|
});
|
|
265
251
|
function createLLMData(data) {
|
|
266
|
-
return
|
|
252
|
+
return v5.parse(LLMDataDefine, data);
|
|
267
253
|
}
|
|
268
254
|
function createResultData(data) {
|
|
269
|
-
const result =
|
|
255
|
+
const result = v5.parse(CommonDataDefine, data);
|
|
270
256
|
result.nodeResult = true;
|
|
271
257
|
return result;
|
|
272
258
|
}
|
|
273
|
-
function isChatStream(data) {
|
|
274
|
-
return !!data.extra && "content" in data.extra && "thinkContent" in data.extra;
|
|
275
|
-
}
|
|
276
259
|
|
|
277
260
|
// packages/workflow/share/workflow.emit.ts
|
|
278
261
|
var WorkflowEmitter = class {
|
|
@@ -293,21 +276,17 @@ var WorkflowEmitter = class {
|
|
|
293
276
|
// Annotate the CommonJS export names for ESM import in node:
|
|
294
277
|
0 && (module.exports = {
|
|
295
278
|
CommonDataDefine,
|
|
296
|
-
DEFAULT_CHAT_SCHEMA_KEY,
|
|
297
|
-
DEFAULT_INPUT_KEY,
|
|
298
279
|
EXAMPLES_DEFINE,
|
|
299
280
|
HelpObj,
|
|
300
281
|
INLINE_Template,
|
|
301
282
|
INLINE_Template2,
|
|
302
283
|
LLMDataDefine,
|
|
303
|
-
|
|
284
|
+
RUNNER_ORIGIN_OUTPUT,
|
|
304
285
|
WorkflowEmitter,
|
|
305
286
|
WorkflowNodeType,
|
|
306
287
|
createLLMData,
|
|
307
288
|
createResultData,
|
|
308
289
|
flatFilterHandleList,
|
|
309
|
-
generateHandle,
|
|
310
|
-
isChatStream,
|
|
311
290
|
llmModelConfig
|
|
312
291
|
});
|
|
313
292
|
//# sourceMappingURL=index.js.map
|
package/share/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/workflow/share/index.ts", "../../../packages/workflow/share/const.ts", "../../../packages/workflow/share/handle-node.ts", "../../../packages/workflow/share/
|
|
4
|
-
"sourcesContent": ["export * from './type';\nexport * from './const';\nexport * from './handle-node';\nexport * from './
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA
|
|
6
|
-
"names": ["WorkflowNodeType", "import_view_angular_core", "import_view_angular_core", "v", "import_view_angular_core", "v", "
|
|
3
|
+
"sources": ["../../../packages/workflow/share/index.ts", "../../../packages/workflow/share/const.ts", "../../../packages/workflow/share/handle-node.ts", "../../../packages/workflow/share/workflow.const.ts", "../../../packages/workflow/share/common/examples.define.ts", "../../../packages/workflow/share/util/layout.ts", "../../../packages/workflow/share/common/inline-template.define.ts", "../../../packages/workflow/share/common/llm.define.ts", "../../../packages/workflow/share/common/const.ts", "../../../packages/workflow/share/type2.ts", "../../../packages/workflow/share/workflow.emit.ts"],
|
|
4
|
+
"sourcesContent": ["export * from './type';\nexport * from './const';\nexport * from './handle-node';\nexport * from './workflow.const';\nexport * from './common';\nexport * from './type2';\nexport * from './workflow.emit';\n", "export const HelpObj = {\n templateVarLine: `- 变量定义格式: {{xx}},{{xx.yy}}`,\n pathTodoLine: `- **TODO** 接收传入路径而不是指定`,\n};\n", "import { ChatInput2, ChatInputType } from './type';\nimport { WorkflowNodeType } from './workflow.const';\nimport type { Node, ReactFlowJsonObject } from '@xyflow/react';\nexport type InputInvalidItem = { key: (string | number)[] };\n\nexport type InputRefItem = {\n /** 上游节点 id */\n value: string;\n /** 出口名 */\n outlet?: string;\n /** 键 */\n key: (string | number)[];\n};\nexport type InputContextItem = {\n /** 容器节点 id */\n value: string;\n /** 上下文中提供的 */\n contextKey: string;\n /** 键 */\n key: (string | number)[];\n};\n\nexport type InputItem = InputRefItem | InputInvalidItem | InputContextItem;\n// todo 优化\nexport interface HandleNode {\n /** 唯一,用来查询 */\n id: string;\n /** 一般表示key */\n name?: string;\n /** 应该应用于tooltip显示,不应该被其他显示 */\n label?: string;\n type?: 'connect' | (string & {});\n /** todo */\n validateType?: ChatInputType[];\n}\n/** 将handle节点全部拍平 */\nexport function flatFilterHandleList(list: HandleNode[][] | undefined) {\n if (!list) {\n return [];\n }\n return list.flat().filter(Boolean) as HandleNode[];\n}\n\nexport interface WorkflowNodeData {\n config?: {\n refList?: InputRefItem[];\n invalidList?: InputInvalidItem[];\n value?: Record<string, any>;\n };\n style?: Record<string, any>;\n handle?: {\n output: HandleNode[][];\n };\n minSize?: {\n height: number;\n width: number;\n };\n transform?: {\n resizable?: boolean;\n };\n title?: string;\n outputName?: string;\n /** 在工作流中禁止使用 @internal */\n excludeUsage?: boolean;\n [name: string]: any;\n}\n/** 工作流定义 */\nexport interface WorkflowData {\n flow: ReactFlowJsonObject<Node<WorkflowNodeData>>;\n version: number;\n}\n\n/** 解析后runner使用 */\nexport interface ParsedNode {\n id: string;\n parentId?: string;\n type: WorkflowNodeType;\n // todo 因为加上Omit会导致类型不识别\n data: WorkflowNodeData;\n context: { id: string; output: string; rest: boolean }[];\n /** 可能是多出口 */\n outputs: HandleNode[];\n subFlowList?: { key: any; flow: ResolvedWorkflow; startId?: string }[];\n}\nexport interface ResolvedWorkflow {\n nodes: Record<string, ParsedNode>;\n /** 出口 */\n end: string;\n inputList: ChatInput2[];\n}\n", "export const enum WorkflowNodeType {\n 'iteration' = 'iteration',\n 'iterationStart' = 'iteration-start',\n 'inputParams' = 'input-params',\n}\n", "import { actions } from '@piying/view-angular-core';\nimport * as v from 'valibot';\nimport { asColumn } from '../util/layout';\n\nexport const EXAMPLES_DEFINE = v.pipe(\n v.optional(\n v.array(\n v.pipe(\n v.object({\n input: v.pipe(\n v.object({\n format: v.pipe(\n v.optional(v.boolean(), false),\n v.description(\n '选中后会尝试使用yaml解析为对象,再序列化为对应的响应类型',\n ),\n actions.wrappers.set(['tooltip']),\n ),\n value: v.pipe(\n v.string(),\n v.title('问题'),\n actions.class.top('flex-1'),\n ),\n }),\n // todo 待修复\n actions.class.top('flex gap-2 items-center'),\n ),\n\n output: v.pipe(\n v.object({\n format: v.pipe(\n v.optional(v.boolean(), false),\n v.description('是否需要格式化'),\n actions.wrappers.set(['tooltip']),\n ),\n value: v.pipe(\n v.string(),\n v.title('回答'),\n actions.class.top('flex-1'),\n ),\n }),\n actions.class.top('flex gap-2 items-center'),\n ),\n }),\n asColumn(),\n ),\n ),\n [],\n ),\n v.title('用例'),\n v.description('回答问题之前,会参考定义的用例格式进行回复,用于规范回答'),\n);\n", "import { actions } from '@piying/view-angular-core';\n\nexport function asRow<TInput>(count?: number) {\n return actions.wrappers.patch<TInput>([\n {\n type: 'div',\n attributes: {\n class:\n typeof count === 'number'\n ? `grid gap-2 grid-cols-${count}`\n : 'flex gap-2 *:flex-1 items-center',\n },\n },\n ]);\n}\nexport function asColumn<TInput>() {\n return actions.wrappers.patch<TInput>([\n {\n type: 'div',\n attributes: {\n class: 'grid gap-2',\n },\n },\n ]);\n}\n", "import { actions, disableWhen } from '@piying/view-angular-core';\nimport { map } from 'rxjs';\nimport * as v from 'valibot';\n\nexport const INLINE_Template = v.pipe(\n v.object({\n enable: v.optional(v.boolean(), true),\n // 经用条件\n value: v.pipe(\n v.optional(v.string(), '{{NODE.description}}'),\n v.title('模板'),\n v.description('允许使用变量:{{NODE.xxx}}(参考节点帮助)'),\n actions.wrappers.set(['tooltip', 'label']),\n actions.class.top('flex-1'),\n\n disableWhen({\n listen: (fn) =>\n fn({\n list: [['..', 'enable']],\n }).pipe(map(({ list }) => !list[0])),\n }),\n ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('flex gap-2'),\n);\nexport const INLINE_Template2 = v.pipe(\n v.object({\n enable: v.optional(v.boolean(), false),\n // 经用条件\n value: v.pipe(\n v.optional(v.string()),\n v.title('模板'),\n v.description('允许使用变量:{{ENTRY.xxx}}(参考节点帮助)'),\n actions.wrappers.set(['tooltip', 'label']),\n\n actions.class.top('flex-1'),\n\n disableWhen({\n listen: (fn) =>\n fn({\n list: [['..', 'enable']],\n }).pipe(map(({ list }) => !list[0])),\n }),\n ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('flex gap-2 items-center'),\n);\n", "import {\n asVirtualGroup,\n actions,\n setComponent,\n} from '@piying/view-angular-core';\nimport * as v from 'valibot';\nimport { asColumn } from '../util/layout';\nexport function llmModelConfig(item?: { label: string }) {\n return v.pipe(\n v.intersect([\n v.pipe(\n v.intersect([\n v.pipe(\n v.object({\n name: v.pipe(\n v.optional(v.string()),\n v.title('预定义模型配置'),\n setComponent('select'),\n actions.inputs.patchAsync({\n options: (field) => field.context!.getModelList(),\n }),\n ),\n model: v.pipe(v.optional(v.string()), v.title('模型')),\n // todo 配置变化configuration层被去掉.这里应该更详细支持更多参数\n\n baseURL: v.pipe(v.optional(v.string()), v.title('地址')),\n }),\n asColumn(),\n ),\n ]),\n v.title(item?.label ?? '对话模型'),\n asVirtualGroup(),\n ),\n ]),\n asVirtualGroup(),\n setComponent('accordion'),\n );\n}\n\nexport type ModelInputConfig = v.InferOutput<ReturnType<typeof llmModelConfig>>;\n", "import { HandleNode } from '../handle-node';\n\n/** 导出使用,默认给所有节点加一个出口, */\nexport const RUNNER_ORIGIN_OUTPUT: HandleNode[] = [\n { id: 'default', label: '默认', name: `default` },\n];\n", "import { v4 } from 'uuid';\nimport type { ChatMessageListOutputType } from '@shenghuabi/openai';\nimport * as v from 'valibot';\nimport { ChatMetadata } from './type';\nimport { InputInvalidItem } from './handle-node';\n\nexport type WorkflowRunnerEnvironmentParams = Record<string, any>;\nexport type WorkflowRunnerInputsWithContext = {\n inputs: Record<string, (InputInvalidItem & { value: any })[]>;\n environmentParameters?: WorkflowRunnerEnvironmentParams;\n};\n\nexport interface WorkflowExtraMetadata {\n metadata: ChatMetadata;\n}\nconst extraData = v.looseObject({\n references: v.optional(v.array(v.custom<ChatMetadata>(Boolean))),\n});\nconst baseDataDefine = v.object({\n node: v.object({ type: v.string(), id: v.string() }),\n nodeResult: v.pipe(v.optional(v.boolean(), false)),\n dataId: v.optional(v.string(), () => v4()),\n extra: v.optional(extraData),\n});\nexport const CommonDataDefine = v.object({\n ...baseDataDefine.entries,\n value: v.any(),\n});\nexport type CommonDataType = v.InferOutput<typeof CommonDataDefine>;\n\nexport const LLMDataDefine = v.object({\n ...baseDataDefine.entries,\n type: v.optional(v.literal('chat-stream'), 'chat-stream'),\n // 用来进行普通查询\n value: v.string(),\n extra: v.object({\n ...extraData.entries,\n content: v.string(),\n thinkContent: v.optional(v.string()),\n isThinking: v.optional(v.boolean()),\n delta: v.string(),\n historyList: v.custom<ChatMessageListOutputType>(Boolean),\n }),\n});\nexport type LLMWorkflowData = v.InferOutput<typeof LLMDataDefine>;\nexport function createLLMData(data: v.InferInput<typeof LLMDataDefine>) {\n return v.parse(LLMDataDefine, data);\n}\nexport function createResultData(data: v.InferInput<typeof CommonDataDefine>) {\n const result = v.parse(CommonDataDefine, data);\n result.nodeResult = true;\n return result;\n}\nexport type WorkflowStreamData =\n | v.InferOutput<typeof CommonDataDefine>\n | v.InferOutput<typeof LLMDataDefine>;\n", "import { Observer } from './type';\nimport { createLLMData, WorkflowStreamData } from './type2';\n\nexport class WorkflowEmitter {\n #ob?: Observer<WorkflowStreamData, any>;\n setObserver(ob: Observer<any, any>) {\n this.#ob = ob;\n }\n getObserver() {\n return this.#ob;\n }\n\n createLLMData = createLLMData;\n send(data: WorkflowStreamData) {\n if (this.#ob) {\n this.#ob.next(data);\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["WorkflowNodeType", "import_view_angular_core", "import_view_angular_core", "v", "import_view_angular_core", "v", "v"]
|
|
7
7
|
}
|
package/share/index.mjs
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
// packages/workflow/share/const.ts
|
|
2
|
-
var DEFAULT_INPUT_KEY = `[INPUT]`;
|
|
3
2
|
var HelpObj = {
|
|
4
3
|
templateVarLine: `- 变量定义格式: {{xx}},{{xx.yy}}`,
|
|
5
4
|
pathTodoLine: `- **TODO** 接收传入路径而不是指定`
|
|
@@ -13,21 +12,11 @@ function flatFilterHandleList(list) {
|
|
|
13
12
|
return list.flat().filter(Boolean);
|
|
14
13
|
}
|
|
15
14
|
|
|
16
|
-
// packages/workflow/share/util.ts
|
|
17
|
-
import { v5 } from "uuid";
|
|
18
|
-
var UUID_NS = "404cfae8-94e7-41a6-acec-1037dd1fdaad";
|
|
19
|
-
function generateHandle(value, label = value) {
|
|
20
|
-
return { id: v5(value, UUID_NS), label, value };
|
|
21
|
-
}
|
|
22
|
-
|
|
23
15
|
// packages/workflow/share/workflow.const.ts
|
|
24
16
|
var WorkflowNodeType = /* @__PURE__ */ ((WorkflowNodeType2) => {
|
|
25
17
|
WorkflowNodeType2["iteration"] = "iteration";
|
|
26
18
|
WorkflowNodeType2["iterationStart"] = "iteration-start";
|
|
27
19
|
WorkflowNodeType2["inputParams"] = "input-params";
|
|
28
|
-
WorkflowNodeType2["serialize"] = "serialize";
|
|
29
|
-
WorkflowNodeType2["parameters"] = "parameters";
|
|
30
|
-
WorkflowNodeType2["inlineInputItem"] = "inlineInputItem";
|
|
31
20
|
return WorkflowNodeType2;
|
|
32
21
|
})(WorkflowNodeType || {});
|
|
33
22
|
|
|
@@ -181,50 +170,48 @@ function llmModelConfig(item) {
|
|
|
181
170
|
}
|
|
182
171
|
|
|
183
172
|
// packages/workflow/share/common/const.ts
|
|
184
|
-
var
|
|
185
|
-
|
|
173
|
+
var RUNNER_ORIGIN_OUTPUT = [
|
|
174
|
+
{ id: "default", label: "默认", name: `default` }
|
|
175
|
+
];
|
|
186
176
|
|
|
187
177
|
// packages/workflow/share/type2.ts
|
|
188
178
|
import { v4 } from "uuid";
|
|
189
|
-
import * as
|
|
190
|
-
var extraData =
|
|
191
|
-
references:
|
|
179
|
+
import * as v5 from "valibot";
|
|
180
|
+
var extraData = v5.looseObject({
|
|
181
|
+
references: v5.optional(v5.array(v5.custom(Boolean)))
|
|
192
182
|
});
|
|
193
|
-
var baseDataDefine =
|
|
194
|
-
node:
|
|
195
|
-
nodeResult:
|
|
196
|
-
dataId:
|
|
197
|
-
extra:
|
|
183
|
+
var baseDataDefine = v5.object({
|
|
184
|
+
node: v5.object({ type: v5.string(), id: v5.string() }),
|
|
185
|
+
nodeResult: v5.pipe(v5.optional(v5.boolean(), false)),
|
|
186
|
+
dataId: v5.optional(v5.string(), () => v4()),
|
|
187
|
+
extra: v5.optional(extraData)
|
|
198
188
|
});
|
|
199
|
-
var CommonDataDefine =
|
|
189
|
+
var CommonDataDefine = v5.object({
|
|
200
190
|
...baseDataDefine.entries,
|
|
201
|
-
value:
|
|
191
|
+
value: v5.any()
|
|
202
192
|
});
|
|
203
|
-
var LLMDataDefine =
|
|
193
|
+
var LLMDataDefine = v5.object({
|
|
204
194
|
...baseDataDefine.entries,
|
|
205
|
-
type:
|
|
195
|
+
type: v5.optional(v5.literal("chat-stream"), "chat-stream"),
|
|
206
196
|
// 用来进行普通查询
|
|
207
|
-
value:
|
|
208
|
-
extra:
|
|
197
|
+
value: v5.string(),
|
|
198
|
+
extra: v5.object({
|
|
209
199
|
...extraData.entries,
|
|
210
|
-
content:
|
|
211
|
-
thinkContent:
|
|
212
|
-
isThinking:
|
|
213
|
-
delta:
|
|
214
|
-
historyList:
|
|
200
|
+
content: v5.string(),
|
|
201
|
+
thinkContent: v5.optional(v5.string()),
|
|
202
|
+
isThinking: v5.optional(v5.boolean()),
|
|
203
|
+
delta: v5.string(),
|
|
204
|
+
historyList: v5.custom(Boolean)
|
|
215
205
|
})
|
|
216
206
|
});
|
|
217
207
|
function createLLMData(data) {
|
|
218
|
-
return
|
|
208
|
+
return v5.parse(LLMDataDefine, data);
|
|
219
209
|
}
|
|
220
210
|
function createResultData(data) {
|
|
221
|
-
const result =
|
|
211
|
+
const result = v5.parse(CommonDataDefine, data);
|
|
222
212
|
result.nodeResult = true;
|
|
223
213
|
return result;
|
|
224
214
|
}
|
|
225
|
-
function isChatStream(data) {
|
|
226
|
-
return !!data.extra && "content" in data.extra && "thinkContent" in data.extra;
|
|
227
|
-
}
|
|
228
215
|
|
|
229
216
|
// packages/workflow/share/workflow.emit.ts
|
|
230
217
|
var WorkflowEmitter = class {
|
|
@@ -244,21 +231,17 @@ var WorkflowEmitter = class {
|
|
|
244
231
|
};
|
|
245
232
|
export {
|
|
246
233
|
CommonDataDefine,
|
|
247
|
-
DEFAULT_CHAT_SCHEMA_KEY,
|
|
248
|
-
DEFAULT_INPUT_KEY,
|
|
249
234
|
EXAMPLES_DEFINE,
|
|
250
235
|
HelpObj,
|
|
251
236
|
INLINE_Template,
|
|
252
237
|
INLINE_Template2,
|
|
253
238
|
LLMDataDefine,
|
|
254
|
-
|
|
239
|
+
RUNNER_ORIGIN_OUTPUT,
|
|
255
240
|
WorkflowEmitter,
|
|
256
241
|
WorkflowNodeType,
|
|
257
242
|
createLLMData,
|
|
258
243
|
createResultData,
|
|
259
244
|
flatFilterHandleList,
|
|
260
|
-
generateHandle,
|
|
261
|
-
isChatStream,
|
|
262
245
|
llmModelConfig
|
|
263
246
|
};
|
|
264
247
|
//# sourceMappingURL=index.mjs.map
|
package/share/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/workflow/share/const.ts", "../../../packages/workflow/share/handle-node.ts", "../../../packages/workflow/share/
|
|
4
|
-
"sourcesContent": ["export const
|
|
5
|
-
"mappings": ";AAAO,IAAM,
|
|
3
|
+
"sources": ["../../../packages/workflow/share/const.ts", "../../../packages/workflow/share/handle-node.ts", "../../../packages/workflow/share/workflow.const.ts", "../../../packages/workflow/share/common/examples.define.ts", "../../../packages/workflow/share/util/layout.ts", "../../../packages/workflow/share/common/inline-template.define.ts", "../../../packages/workflow/share/common/llm.define.ts", "../../../packages/workflow/share/common/const.ts", "../../../packages/workflow/share/type2.ts", "../../../packages/workflow/share/workflow.emit.ts"],
|
|
4
|
+
"sourcesContent": ["export const HelpObj = {\n templateVarLine: `- 变量定义格式: {{xx}},{{xx.yy}}`,\n pathTodoLine: `- **TODO** 接收传入路径而不是指定`,\n};\n", "import { ChatInput2, ChatInputType } from './type';\nimport { WorkflowNodeType } from './workflow.const';\nimport type { Node, ReactFlowJsonObject } from '@xyflow/react';\nexport type InputInvalidItem = { key: (string | number)[] };\n\nexport type InputRefItem = {\n /** 上游节点 id */\n value: string;\n /** 出口名 */\n outlet?: string;\n /** 键 */\n key: (string | number)[];\n};\nexport type InputContextItem = {\n /** 容器节点 id */\n value: string;\n /** 上下文中提供的 */\n contextKey: string;\n /** 键 */\n key: (string | number)[];\n};\n\nexport type InputItem = InputRefItem | InputInvalidItem | InputContextItem;\n// todo 优化\nexport interface HandleNode {\n /** 唯一,用来查询 */\n id: string;\n /** 一般表示key */\n name?: string;\n /** 应该应用于tooltip显示,不应该被其他显示 */\n label?: string;\n type?: 'connect' | (string & {});\n /** todo */\n validateType?: ChatInputType[];\n}\n/** 将handle节点全部拍平 */\nexport function flatFilterHandleList(list: HandleNode[][] | undefined) {\n if (!list) {\n return [];\n }\n return list.flat().filter(Boolean) as HandleNode[];\n}\n\nexport interface WorkflowNodeData {\n config?: {\n refList?: InputRefItem[];\n invalidList?: InputInvalidItem[];\n value?: Record<string, any>;\n };\n style?: Record<string, any>;\n handle?: {\n output: HandleNode[][];\n };\n minSize?: {\n height: number;\n width: number;\n };\n transform?: {\n resizable?: boolean;\n };\n title?: string;\n outputName?: string;\n /** 在工作流中禁止使用 @internal */\n excludeUsage?: boolean;\n [name: string]: any;\n}\n/** 工作流定义 */\nexport interface WorkflowData {\n flow: ReactFlowJsonObject<Node<WorkflowNodeData>>;\n version: number;\n}\n\n/** 解析后runner使用 */\nexport interface ParsedNode {\n id: string;\n parentId?: string;\n type: WorkflowNodeType;\n // todo 因为加上Omit会导致类型不识别\n data: WorkflowNodeData;\n context: { id: string; output: string; rest: boolean }[];\n /** 可能是多出口 */\n outputs: HandleNode[];\n subFlowList?: { key: any; flow: ResolvedWorkflow; startId?: string }[];\n}\nexport interface ResolvedWorkflow {\n nodes: Record<string, ParsedNode>;\n /** 出口 */\n end: string;\n inputList: ChatInput2[];\n}\n", "export const enum WorkflowNodeType {\n 'iteration' = 'iteration',\n 'iterationStart' = 'iteration-start',\n 'inputParams' = 'input-params',\n}\n", "import { actions } from '@piying/view-angular-core';\nimport * as v from 'valibot';\nimport { asColumn } from '../util/layout';\n\nexport const EXAMPLES_DEFINE = v.pipe(\n v.optional(\n v.array(\n v.pipe(\n v.object({\n input: v.pipe(\n v.object({\n format: v.pipe(\n v.optional(v.boolean(), false),\n v.description(\n '选中后会尝试使用yaml解析为对象,再序列化为对应的响应类型',\n ),\n actions.wrappers.set(['tooltip']),\n ),\n value: v.pipe(\n v.string(),\n v.title('问题'),\n actions.class.top('flex-1'),\n ),\n }),\n // todo 待修复\n actions.class.top('flex gap-2 items-center'),\n ),\n\n output: v.pipe(\n v.object({\n format: v.pipe(\n v.optional(v.boolean(), false),\n v.description('是否需要格式化'),\n actions.wrappers.set(['tooltip']),\n ),\n value: v.pipe(\n v.string(),\n v.title('回答'),\n actions.class.top('flex-1'),\n ),\n }),\n actions.class.top('flex gap-2 items-center'),\n ),\n }),\n asColumn(),\n ),\n ),\n [],\n ),\n v.title('用例'),\n v.description('回答问题之前,会参考定义的用例格式进行回复,用于规范回答'),\n);\n", "import { actions } from '@piying/view-angular-core';\n\nexport function asRow<TInput>(count?: number) {\n return actions.wrappers.patch<TInput>([\n {\n type: 'div',\n attributes: {\n class:\n typeof count === 'number'\n ? `grid gap-2 grid-cols-${count}`\n : 'flex gap-2 *:flex-1 items-center',\n },\n },\n ]);\n}\nexport function asColumn<TInput>() {\n return actions.wrappers.patch<TInput>([\n {\n type: 'div',\n attributes: {\n class: 'grid gap-2',\n },\n },\n ]);\n}\n", "import { actions, disableWhen } from '@piying/view-angular-core';\nimport { map } from 'rxjs';\nimport * as v from 'valibot';\n\nexport const INLINE_Template = v.pipe(\n v.object({\n enable: v.optional(v.boolean(), true),\n // 经用条件\n value: v.pipe(\n v.optional(v.string(), '{{NODE.description}}'),\n v.title('模板'),\n v.description('允许使用变量:{{NODE.xxx}}(参考节点帮助)'),\n actions.wrappers.set(['tooltip', 'label']),\n actions.class.top('flex-1'),\n\n disableWhen({\n listen: (fn) =>\n fn({\n list: [['..', 'enable']],\n }).pipe(map(({ list }) => !list[0])),\n }),\n ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('flex gap-2'),\n);\nexport const INLINE_Template2 = v.pipe(\n v.object({\n enable: v.optional(v.boolean(), false),\n // 经用条件\n value: v.pipe(\n v.optional(v.string()),\n v.title('模板'),\n v.description('允许使用变量:{{ENTRY.xxx}}(参考节点帮助)'),\n actions.wrappers.set(['tooltip', 'label']),\n\n actions.class.top('flex-1'),\n\n disableWhen({\n listen: (fn) =>\n fn({\n list: [['..', 'enable']],\n }).pipe(map(({ list }) => !list[0])),\n }),\n ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('flex gap-2 items-center'),\n);\n", "import {\n asVirtualGroup,\n actions,\n setComponent,\n} from '@piying/view-angular-core';\nimport * as v from 'valibot';\nimport { asColumn } from '../util/layout';\nexport function llmModelConfig(item?: { label: string }) {\n return v.pipe(\n v.intersect([\n v.pipe(\n v.intersect([\n v.pipe(\n v.object({\n name: v.pipe(\n v.optional(v.string()),\n v.title('预定义模型配置'),\n setComponent('select'),\n actions.inputs.patchAsync({\n options: (field) => field.context!.getModelList(),\n }),\n ),\n model: v.pipe(v.optional(v.string()), v.title('模型')),\n // todo 配置变化configuration层被去掉.这里应该更详细支持更多参数\n\n baseURL: v.pipe(v.optional(v.string()), v.title('地址')),\n }),\n asColumn(),\n ),\n ]),\n v.title(item?.label ?? '对话模型'),\n asVirtualGroup(),\n ),\n ]),\n asVirtualGroup(),\n setComponent('accordion'),\n );\n}\n\nexport type ModelInputConfig = v.InferOutput<ReturnType<typeof llmModelConfig>>;\n", "import { HandleNode } from '../handle-node';\n\n/** 导出使用,默认给所有节点加一个出口, */\nexport const RUNNER_ORIGIN_OUTPUT: HandleNode[] = [\n { id: 'default', label: '默认', name: `default` },\n];\n", "import { v4 } from 'uuid';\nimport type { ChatMessageListOutputType } from '@shenghuabi/openai';\nimport * as v from 'valibot';\nimport { ChatMetadata } from './type';\nimport { InputInvalidItem } from './handle-node';\n\nexport type WorkflowRunnerEnvironmentParams = Record<string, any>;\nexport type WorkflowRunnerInputsWithContext = {\n inputs: Record<string, (InputInvalidItem & { value: any })[]>;\n environmentParameters?: WorkflowRunnerEnvironmentParams;\n};\n\nexport interface WorkflowExtraMetadata {\n metadata: ChatMetadata;\n}\nconst extraData = v.looseObject({\n references: v.optional(v.array(v.custom<ChatMetadata>(Boolean))),\n});\nconst baseDataDefine = v.object({\n node: v.object({ type: v.string(), id: v.string() }),\n nodeResult: v.pipe(v.optional(v.boolean(), false)),\n dataId: v.optional(v.string(), () => v4()),\n extra: v.optional(extraData),\n});\nexport const CommonDataDefine = v.object({\n ...baseDataDefine.entries,\n value: v.any(),\n});\nexport type CommonDataType = v.InferOutput<typeof CommonDataDefine>;\n\nexport const LLMDataDefine = v.object({\n ...baseDataDefine.entries,\n type: v.optional(v.literal('chat-stream'), 'chat-stream'),\n // 用来进行普通查询\n value: v.string(),\n extra: v.object({\n ...extraData.entries,\n content: v.string(),\n thinkContent: v.optional(v.string()),\n isThinking: v.optional(v.boolean()),\n delta: v.string(),\n historyList: v.custom<ChatMessageListOutputType>(Boolean),\n }),\n});\nexport type LLMWorkflowData = v.InferOutput<typeof LLMDataDefine>;\nexport function createLLMData(data: v.InferInput<typeof LLMDataDefine>) {\n return v.parse(LLMDataDefine, data);\n}\nexport function createResultData(data: v.InferInput<typeof CommonDataDefine>) {\n const result = v.parse(CommonDataDefine, data);\n result.nodeResult = true;\n return result;\n}\nexport type WorkflowStreamData =\n | v.InferOutput<typeof CommonDataDefine>\n | v.InferOutput<typeof LLMDataDefine>;\n", "import { Observer } from './type';\nimport { createLLMData, WorkflowStreamData } from './type2';\n\nexport class WorkflowEmitter {\n #ob?: Observer<WorkflowStreamData, any>;\n setObserver(ob: Observer<any, any>) {\n this.#ob = ob;\n }\n getObserver() {\n return this.#ob;\n }\n\n createLLMData = createLLMData;\n send(data: WorkflowStreamData) {\n if (this.#ob) {\n this.#ob.next(data);\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["WorkflowNodeType", "actions", "actions", "actions", "v", "actions", "v", "actions", "v"]
|
|
7
7
|
}
|
package/share/type.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Node } from '@xyflow/react';
|
|
2
|
-
import type {
|
|
2
|
+
import type { WorkflowNodeData } from './handle-node';
|
|
3
3
|
import type { Injector } from 'static-injector';
|
|
4
4
|
import type * as v from 'valibot';
|
|
5
5
|
import { WorkflowNodeConfigOutputType } from './common/define';
|
|
@@ -31,6 +31,12 @@ export interface ChatMetadata {
|
|
|
31
31
|
tooltip?: string;
|
|
32
32
|
reference?: ChatMetadataReference;
|
|
33
33
|
}
|
|
34
|
+
export type ChatDataRef = {
|
|
35
|
+
toString(): string;
|
|
36
|
+
ref: ChatMetadata | ChatMetadata[];
|
|
37
|
+
};
|
|
38
|
+
/** 对话插入数据 */
|
|
39
|
+
export type ChatInsertData = string | ChatDataRef;
|
|
34
40
|
export type ChatInputType = 'object' | 'string' | 'image' | 'schema';
|
|
35
41
|
/** 准备 context/workflow 通用 */
|
|
36
42
|
export type ChatInput2 = {
|
|
@@ -47,40 +53,15 @@ export interface Observer<TValue, TError> {
|
|
|
47
53
|
error: (err: TError) => void;
|
|
48
54
|
complete: () => void;
|
|
49
55
|
}
|
|
50
|
-
export type CustomNode<T extends Record<string, any> = Record<string, any>> = Node<
|
|
51
|
-
value?: any;
|
|
52
|
-
style?: Record<string, any>;
|
|
53
|
-
handle?: {
|
|
54
|
-
/** 0 必须是连接点,否则空掉,1必须是value,否则空掉,之后随意 */
|
|
55
|
-
input: HandleNode[][];
|
|
56
|
-
output: HandleNode[][];
|
|
57
|
-
};
|
|
58
|
-
minSize?: {
|
|
59
|
-
height: number;
|
|
60
|
-
width: number;
|
|
61
|
-
};
|
|
62
|
-
transform?: {
|
|
63
|
-
resizable?: boolean;
|
|
64
|
-
};
|
|
65
|
-
title?: string;
|
|
66
|
-
config?: Record<string, any>;
|
|
67
|
-
/** 默认输出 */
|
|
68
|
-
outputName?: string;
|
|
69
|
-
/** 在工作流中禁止使用 */
|
|
70
|
-
excludeUsage?: boolean;
|
|
71
|
-
/** 用于前端部分 */
|
|
72
|
-
options?: {
|
|
73
|
-
/** 禁止自动打开配置 */
|
|
74
|
-
disableOpenConfig?: boolean;
|
|
75
|
-
};
|
|
76
|
-
} & T>;
|
|
56
|
+
export type CustomNode<T extends Record<string, any> = Record<string, any>> = Node<WorkflowNodeData & T>;
|
|
77
57
|
export type InitDataFunction = () => Partial<CustomNode>;
|
|
78
58
|
export type NodeComponentType = {
|
|
79
59
|
afterAdd?: (node: CustomNode, injector: Injector) => any;
|
|
80
60
|
priority?: number;
|
|
61
|
+
configDefine?: v.BaseSchema<any, any, any>;
|
|
81
62
|
} & WorkflowNodeConfigOutputType;
|
|
82
63
|
export type WebviewNodeConfig = NodeComponentType & {
|
|
83
|
-
|
|
84
|
-
initData
|
|
64
|
+
configDefine?: v.BaseSchema<any, any, any>;
|
|
65
|
+
initData?: InitDataFunction;
|
|
85
66
|
component?: any;
|
|
86
67
|
};
|
package/share/type2.d.ts
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
import type { ChatModelOptions } from '@shenghuabi/openai';
|
|
2
1
|
import * as v from 'valibot';
|
|
3
2
|
import { ChatMetadata } from './type';
|
|
4
|
-
|
|
5
|
-
value: any;
|
|
6
|
-
extra?: any;
|
|
7
|
-
}>;
|
|
3
|
+
import { InputInvalidItem } from './handle-node';
|
|
8
4
|
export type WorkflowRunnerEnvironmentParams = Record<string, any>;
|
|
9
5
|
export type WorkflowRunnerInputsWithContext = {
|
|
10
|
-
|
|
6
|
+
inputs: Record<string, (InputInvalidItem & {
|
|
7
|
+
value: any;
|
|
8
|
+
})[]>;
|
|
11
9
|
environmentParameters?: WorkflowRunnerEnvironmentParams;
|
|
12
|
-
modelOptions?: ChatModelOptions;
|
|
13
10
|
};
|
|
14
11
|
export interface WorkflowExtraMetadata {
|
|
15
12
|
metadata: ChatMetadata;
|
|
@@ -129,4 +126,3 @@ export declare function createResultData(data: v.InferInput<typeof CommonDataDef
|
|
|
129
126
|
}) | undefined;
|
|
130
127
|
};
|
|
131
128
|
export type WorkflowStreamData = v.InferOutput<typeof CommonDataDefine> | v.InferOutput<typeof LLMDataDefine>;
|
|
132
|
-
export declare function isChatStream(data: WorkflowStreamData): data is LLMWorkflowData;
|