@shenghuabi/workflow 1.1.4 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/index.d.ts +1 -0
  2. package/index.js +794 -918
  3. package/index.js.map +4 -4
  4. package/index.mjs +730 -851
  5. package/index.mjs.map +4 -4
  6. package/inline/inline.service.d.ts +1 -0
  7. package/inline/node/chat/main/index.d.ts +7 -12
  8. package/inline/node/chat/main/runner.d.ts +35 -0
  9. package/inline/node/chat/{chat.node.define.d.ts → node.define.d.ts} +3 -0
  10. package/inline/node/chat/util/useChat.d.ts +31 -0
  11. package/inline/node/index.browser.d.ts +2 -0
  12. package/inline/node/index.node.d.ts +2 -0
  13. package/inline/node/input-params/common.d.ts +2 -0
  14. package/inline/node/input-params/main/index.d.ts +29 -0
  15. package/inline/node/input-params/main/runner.d.ts +5 -0
  16. package/inline/node/input-params/node.define.d.ts +9 -0
  17. package/inline/node/input-params/webview/index.d.ts +2 -0
  18. package/inline/node/iteration/common.d.ts +2 -0
  19. package/inline/node/iteration/main/index.d.ts +29 -0
  20. package/inline/node/iteration/main/iteration-start.runner.d.ts +5 -0
  21. package/inline/node/iteration/main/runner.d.ts +6 -0
  22. package/inline/node/iteration/node.define.d.ts +11 -0
  23. package/inline/node/iteration/webview/index.d.ts +2 -0
  24. package/inline/node/text/main/index.d.ts +6 -11
  25. package/inline/node/text/main/runner.d.ts +14 -0
  26. package/inline/node/text/text.node.define.d.ts +2 -4
  27. package/module.d.ts +1 -3
  28. package/package.json +4 -3
  29. package/plugin/plugin.service.d.ts +1 -0
  30. package/preset/context-build.service.d.ts +2 -50
  31. package/runner/define.d.ts +3 -7
  32. package/runner/runner-item.d.ts +5 -20
  33. package/runner/workflow-runner.service.d.ts +9 -17
  34. package/share/common/const.d.ts +3 -2
  35. package/share/common/define.d.ts +3 -10
  36. package/share/const.d.ts +0 -1
  37. package/share/handle-node.d.ts +47 -18
  38. package/share/index.d.ts +0 -1
  39. package/share/index.js +27 -48
  40. package/share/index.js.map +4 -4
  41. package/share/index.mjs +25 -42
  42. package/share/index.mjs.map +3 -3
  43. package/share/type.d.ts +11 -29
  44. package/share/type2.d.ts +4 -8
  45. package/share/workflow.const.d.ts +1 -4
  46. package/test/util/chat-fixture.d.ts +44 -0
  47. package/test/util/text-input/common.d.ts +2 -0
  48. package/test/util/text-input/main/index.d.ts +25 -0
  49. package/test/util/text-input/main/runner.d.ts +6 -0
  50. package/test/util/text-input/text.node.define.d.ts +4 -0
  51. package/token.d.ts +8 -6
  52. package/type/type.d.ts +1 -1
  53. package/util/serialize-text-template.d.ts +16 -0
  54. package/webview/index.js +128 -41
  55. package/webview/index.js.map +4 -4
  56. package/webview/index.mjs +127 -43
  57. package/webview/index.mjs.map +4 -4
  58. package/workflow-exec.service.d.ts +14 -24
  59. package/workflow-parser.service.d.ts +0 -1
  60. package/inline/node/chat/main/llm.runner.d.ts +0 -41
  61. package/inline/node/text/main/textarea.runner.d.ts +0 -7
  62. package/preset/inline-build.service.d.ts +0 -11
  63. package/preset/inline-runner.service.d.ts +0 -16
  64. package/runner/inline-input-item.runner.d.ts +0 -8
  65. package/runner/input-params.runner.d.ts +0 -7
  66. package/runner/iteration-start.runner.d.ts +0 -7
  67. package/runner/iteration.runner.d.ts +0 -7
  68. package/runner/parameters.runner.d.ts +0 -10
  69. package/share/util.d.ts +0 -5
  70. package/test/chat.spec.d.ts +0 -1
  71. package/test/file.spec.d.ts +0 -1
  72. package/test/hello.spec.d.ts +0 -1
  73. package/test/plugin.spec.d.ts +0 -1
@@ -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
- value: string;
27
+ /** 一般表示key */
28
+ name?: string;
8
29
  /** 应该应用于tooltip显示,不应该被其他显示 */
9
- label: string;
10
- type?: 'connect';
11
- inputType?: ChatInputType;
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
- value?: any;
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
- config?: Record<string, any>;
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
- export type RawWorkflowNode = Omit<Node<WorkflowNodeData>, 'position'>;
65
+ /** 解析后runner使用 */
41
66
  export interface ParsedNode {
42
67
  id: string;
68
+ parentId?: string;
43
69
  type: WorkflowNodeType;
44
70
  data: WorkflowNodeData;
45
- /** 所有输入是都是需要节点连接的,如果没有节点连接会酌情处理 handleinput过来的 */
46
- inputs: ResolvedInputNode[];
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
@@ -1,7 +1,6 @@
1
1
  export * from './type';
2
2
  export * from './const';
3
3
  export * from './handle-node';
4
- export * from './util';
5
4
  export * from './workflow.const';
6
5
  export * from './common';
7
6
  export * from './type2';
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
- RUNNER_ORIGIN_OUTPUT_KEY: () => RUNNER_ORIGIN_OUTPUT_KEY,
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 DEFAULT_CHAT_SCHEMA_KEY = `[JsonSchema]`;
233
- var RUNNER_ORIGIN_OUTPUT_KEY = `[Origin]`;
217
+ var RUNNER_ORIGIN_OUTPUT = [
218
+ { id: "default", label: "默认", name: `default` }
219
+ ];
234
220
 
235
221
  // packages/workflow/share/type2.ts
236
- var import_uuid2 = require("uuid");
237
- var v6 = __toESM(require("valibot"), 1);
238
- var extraData = v6.looseObject({
239
- references: v6.optional(v6.array(v6.custom(Boolean)))
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 = v6.object({
242
- node: v6.object({ type: v6.string(), id: v6.string() }),
243
- nodeResult: v6.pipe(v6.optional(v6.boolean(), false)),
244
- dataId: v6.optional(v6.string(), () => (0, import_uuid2.v4)()),
245
- extra: v6.optional(extraData)
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 = v6.object({
233
+ var CommonDataDefine = v5.object({
248
234
  ...baseDataDefine.entries,
249
- value: v6.any()
235
+ value: v5.any()
250
236
  });
251
- var LLMDataDefine = v6.object({
237
+ var LLMDataDefine = v5.object({
252
238
  ...baseDataDefine.entries,
253
- type: v6.optional(v6.literal("chat-stream"), "chat-stream"),
239
+ type: v5.optional(v5.literal("chat-stream"), "chat-stream"),
254
240
  // 用来进行普通查询
255
- value: v6.string(),
256
- extra: v6.object({
241
+ value: v5.string(),
242
+ extra: v5.object({
257
243
  ...extraData.entries,
258
- content: v6.string(),
259
- thinkContent: v6.optional(v6.string()),
260
- isThinking: v6.optional(v6.boolean()),
261
- delta: v6.string(),
262
- historyList: v6.custom(Boolean)
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 v6.parse(LLMDataDefine, data);
252
+ return v5.parse(LLMDataDefine, data);
267
253
  }
268
254
  function createResultData(data) {
269
- const result = v6.parse(CommonDataDefine, data);
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
- RUNNER_ORIGIN_OUTPUT_KEY,
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
@@ -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/util.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 './util';\nexport * from './workflow.const';\nexport * from './common';\nexport * from './type2';\nexport * from './workflow.emit';\n", "export const DEFAULT_INPUT_KEY = `[INPUT]`;\nexport 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';\n\nexport interface HandleNode {\n id: string;\n /** 真正赋值使用 */\n value: string;\n /** 应该应用于tooltip显示,不应该被其他显示 */\n label: string;\n type?: 'connect';\n\n inputType?: ChatInputType;\n /** 是否可选,用于某些不用传入的参数 */\n optional?: boolean;\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/** 继承 handleNode */\nexport type ResolvedInputNode = Omit<HandleNode, 'label'> & {\n nodeId?: string;\n outputName?: string;\n};\nexport interface WorkflowNodeData {\n value?: any;\n\n handle?: {\n input: HandleNode[][];\n output: HandleNode[][];\n };\n config?: Record<string, any>;\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}\nexport type RawWorkflowNode = Omit<Node<WorkflowNodeData>, 'position'>;\nexport interface ParsedNode {\n id: string;\n type: WorkflowNodeType;\n // todo 因为加上Omit会导致类型不识别\n data: WorkflowNodeData;\n /** 所有输入是都是需要节点连接的,如果没有节点连接会酌情处理 handleinput过来的 */\n inputs: ResolvedInputNode[];\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", "import { v5 } from 'uuid';\nconst UUID_NS = '404cfae8-94e7-41a6-acec-1037dd1fdaad';\nexport function generateHandle(value: string, label = value) {\n return { id: v5(value, UUID_NS), label: label, value: value };\n}\n", "export const enum WorkflowNodeType {\n 'iteration' = 'iteration',\n 'iterationStart' = 'iteration-start',\n 'inputParams' = 'input-params',\n 'serialize' = 'serialize',\n parameters = 'parameters',\n inlineInputItem = 'inlineInputItem',\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", "export const DEFAULT_CHAT_SCHEMA_KEY = `[JsonSchema]`;\nexport const RUNNER_ORIGIN_OUTPUT_KEY = `[Origin]`;\n", "import { v4 } from 'uuid';\nimport type { ChatMessageListOutputType } from '@shenghuabi/openai';\nimport type { ChatModelOptions } from '@shenghuabi/openai';\nimport * as v from 'valibot';\nimport { ChatMetadata } from './type';\nexport type WorkflowRunnerInputs = Map<\n string | symbol,\n { value: any; extra?: any }\n>;\nexport type WorkflowRunnerEnvironmentParams = Record<string, any>;\nexport type WorkflowRunnerInputsWithContext = {\n input: WorkflowRunnerInputs;\n environmentParameters?: WorkflowRunnerEnvironmentParams;\n modelOptions?: ChatModelOptions;\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\nexport function isChatStream(\n data: WorkflowStreamData,\n): data is LLMWorkflowData {\n return (\n !!data.extra && 'content' in data.extra && 'thinkContent' in data.extra\n );\n}\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", "import_uuid", "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 DEFAULT_CHAT_SCHEMA_KEY = `[JsonSchema]`;
185
- var RUNNER_ORIGIN_OUTPUT_KEY = `[Origin]`;
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 v6 from "valibot";
190
- var extraData = v6.looseObject({
191
- references: v6.optional(v6.array(v6.custom(Boolean)))
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 = v6.object({
194
- node: v6.object({ type: v6.string(), id: v6.string() }),
195
- nodeResult: v6.pipe(v6.optional(v6.boolean(), false)),
196
- dataId: v6.optional(v6.string(), () => v4()),
197
- extra: v6.optional(extraData)
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 = v6.object({
189
+ var CommonDataDefine = v5.object({
200
190
  ...baseDataDefine.entries,
201
- value: v6.any()
191
+ value: v5.any()
202
192
  });
203
- var LLMDataDefine = v6.object({
193
+ var LLMDataDefine = v5.object({
204
194
  ...baseDataDefine.entries,
205
- type: v6.optional(v6.literal("chat-stream"), "chat-stream"),
195
+ type: v5.optional(v5.literal("chat-stream"), "chat-stream"),
206
196
  // 用来进行普通查询
207
- value: v6.string(),
208
- extra: v6.object({
197
+ value: v5.string(),
198
+ extra: v5.object({
209
199
  ...extraData.entries,
210
- content: v6.string(),
211
- thinkContent: v6.optional(v6.string()),
212
- isThinking: v6.optional(v6.boolean()),
213
- delta: v6.string(),
214
- historyList: v6.custom(Boolean)
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 v6.parse(LLMDataDefine, data);
208
+ return v5.parse(LLMDataDefine, data);
219
209
  }
220
210
  function createResultData(data) {
221
- const result = v6.parse(CommonDataDefine, data);
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
- RUNNER_ORIGIN_OUTPUT_KEY,
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
@@ -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/util.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 DEFAULT_INPUT_KEY = `[INPUT]`;\nexport 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';\n\nexport interface HandleNode {\n id: string;\n /** 真正赋值使用 */\n value: string;\n /** 应该应用于tooltip显示,不应该被其他显示 */\n label: string;\n type?: 'connect';\n\n inputType?: ChatInputType;\n /** 是否可选,用于某些不用传入的参数 */\n optional?: boolean;\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/** 继承 handleNode */\nexport type ResolvedInputNode = Omit<HandleNode, 'label'> & {\n nodeId?: string;\n outputName?: string;\n};\nexport interface WorkflowNodeData {\n value?: any;\n\n handle?: {\n input: HandleNode[][];\n output: HandleNode[][];\n };\n config?: Record<string, any>;\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}\nexport type RawWorkflowNode = Omit<Node<WorkflowNodeData>, 'position'>;\nexport interface ParsedNode {\n id: string;\n type: WorkflowNodeType;\n // todo 因为加上Omit会导致类型不识别\n data: WorkflowNodeData;\n /** 所有输入是都是需要节点连接的,如果没有节点连接会酌情处理 handleinput过来的 */\n inputs: ResolvedInputNode[];\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", "import { v5 } from 'uuid';\nconst UUID_NS = '404cfae8-94e7-41a6-acec-1037dd1fdaad';\nexport function generateHandle(value: string, label = value) {\n return { id: v5(value, UUID_NS), label: label, value: value };\n}\n", "export const enum WorkflowNodeType {\n 'iteration' = 'iteration',\n 'iterationStart' = 'iteration-start',\n 'inputParams' = 'input-params',\n 'serialize' = 'serialize',\n parameters = 'parameters',\n inlineInputItem = 'inlineInputItem',\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", "export const DEFAULT_CHAT_SCHEMA_KEY = `[JsonSchema]`;\nexport const RUNNER_ORIGIN_OUTPUT_KEY = `[Origin]`;\n", "import { v4 } from 'uuid';\nimport type { ChatMessageListOutputType } from '@shenghuabi/openai';\nimport type { ChatModelOptions } from '@shenghuabi/openai';\nimport * as v from 'valibot';\nimport { ChatMetadata } from './type';\nexport type WorkflowRunnerInputs = Map<\n string | symbol,\n { value: any; extra?: any }\n>;\nexport type WorkflowRunnerEnvironmentParams = Record<string, any>;\nexport type WorkflowRunnerInputsWithContext = {\n input: WorkflowRunnerInputs;\n environmentParameters?: WorkflowRunnerEnvironmentParams;\n modelOptions?: ChatModelOptions;\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\nexport function isChatStream(\n data: WorkflowStreamData,\n): data is LLMWorkflowData {\n return (\n !!data.extra && 'content' in data.extra && 'thinkContent' in data.extra\n );\n}\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": ";AAAO,IAAM,oBAAoB;AAC1B,IAAM,UAAU;AAAA,EACrB,iBAAiB;AAAA,EACjB,cAAc;AAChB;;;ACaO,SAAS,qBAAqB,MAAkC;AACrE,MAAI,CAAC,MAAM;AACT,WAAO,CAAC;AAAA,EACV;AACA,SAAO,KAAK,KAAK,EAAE,OAAO,OAAO;AACnC;;;ACtBA,SAAS,UAAU;AACnB,IAAM,UAAU;AACT,SAAS,eAAe,OAAe,QAAQ,OAAO;AAC3D,SAAO,EAAE,IAAI,GAAG,OAAO,OAAO,GAAG,OAAc,MAAa;AAC9D;;;ACJO,IAAW,mBAAX,kBAAWA,sBAAX;AACL,EAAAA,kBAAA,eAAc;AACd,EAAAA,kBAAA,oBAAmB;AACnB,EAAAA,kBAAA,iBAAgB;AAChB,EAAAA,kBAAA,eAAc;AACd,EAAAA,kBAAA,gBAAa;AACb,EAAAA,kBAAA,qBAAkB;AANF,SAAAA;AAAA,GAAA;;;ACAlB,SAAS,WAAAC,gBAAe;AACxB,YAAY,OAAO;;;ACDnB,SAAS,eAAe;AAejB,SAAS,WAAmB;AACjC,SAAO,QAAQ,SAAS,MAAc;AAAA,IACpC;AAAA,MACE,MAAM;AAAA,MACN,YAAY;AAAA,QACV,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ADpBO,IAAM,kBAAoB;AAAA,EAC7B;AAAA,IACE;AAAA,MACE;AAAA,QACE,SAAO;AAAA,UACP,OAAS;AAAA,YACL,SAAO;AAAA,cACP,QAAU;AAAA,gBACN,WAAW,UAAQ,GAAG,KAAK;AAAA,gBAC3B;AAAA,kBACA;AAAA,gBACF;AAAA,gBACAC,SAAQ,SAAS,IAAI,CAAC,SAAS,CAAC;AAAA,cAClC;AAAA,cACA,OAAS;AAAA,gBACL,SAAO;AAAA,gBACP,QAAM,IAAI;AAAA,gBACZA,SAAQ,MAAM,IAAI,QAAQ;AAAA,cAC5B;AAAA,YACF,CAAC;AAAA;AAAA,YAEDA,SAAQ,MAAM,IAAI,yBAAyB;AAAA,UAC7C;AAAA,UAEA,QAAU;AAAA,YACN,SAAO;AAAA,cACP,QAAU;AAAA,gBACN,WAAW,UAAQ,GAAG,KAAK;AAAA,gBAC3B,cAAY,SAAS;AAAA,gBACvBA,SAAQ,SAAS,IAAI,CAAC,SAAS,CAAC;AAAA,cAClC;AAAA,cACA,OAAS;AAAA,gBACL,SAAO;AAAA,gBACP,QAAM,IAAI;AAAA,gBACZA,SAAQ,MAAM,IAAI,QAAQ;AAAA,cAC5B;AAAA,YACF,CAAC;AAAA,YACDA,SAAQ,MAAM,IAAI,yBAAyB;AAAA,UAC7C;AAAA,QACF,CAAC;AAAA,QACD,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAAA,EACE,QAAM,IAAI;AAAA,EACV,cAAY,8BAA8B;AAC9C;;;AEnDA,SAAS,WAAAC,UAAS,mBAAmB;AACrC,SAAS,WAAW;AACpB,YAAYC,QAAO;AAEZ,IAAM,kBAAoB;AAAA,EAC7B,UAAO;AAAA,IACP,QAAU,YAAW,WAAQ,GAAG,IAAI;AAAA;AAAA,IAEpC,OAAS;AAAA,MACL,YAAW,UAAO,GAAG,sBAAsB;AAAA,MAC3C,SAAM,IAAI;AAAA,MACV,eAAY,6BAA6B;AAAA,MAC3CD,SAAQ,SAAS,IAAI,CAAC,WAAW,OAAO,CAAC;AAAA,MACzCA,SAAQ,MAAM,IAAI,QAAQ;AAAA,MAE1B,YAAY;AAAA,QACV,QAAQ,CAAC,OACP,GAAG;AAAA,UACD,MAAM,CAAC,CAAC,MAAM,QAAQ,CAAC;AAAA,QACzB,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAAA,MACvC,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAAA,EACDA,SAAQ,SAAS,MAAM,CAAC,KAAK,CAAC;AAAA,EAC9BA,SAAQ,MAAM,IAAI,YAAY;AAChC;AACO,IAAM,mBAAqB;AAAA,EAC9B,UAAO;AAAA,IACP,QAAU,YAAW,WAAQ,GAAG,KAAK;AAAA;AAAA,IAErC,OAAS;AAAA,MACL,YAAW,UAAO,CAAC;AAAA,MACnB,SAAM,IAAI;AAAA,MACV,eAAY,8BAA8B;AAAA,MAC5CA,SAAQ,SAAS,IAAI,CAAC,WAAW,OAAO,CAAC;AAAA,MAEzCA,SAAQ,MAAM,IAAI,QAAQ;AAAA,MAE1B,YAAY;AAAA,QACV,QAAQ,CAAC,OACP,GAAG;AAAA,UACD,MAAM,CAAC,CAAC,MAAM,QAAQ,CAAC;AAAA,QACzB,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAAA,MACvC,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAAA,EACDA,SAAQ,SAAS,MAAM,CAAC,KAAK,CAAC;AAAA,EAC9BA,SAAQ,MAAM,IAAI,yBAAyB;AAC7C;;;AChDA;AAAA,EACE;AAAA,EACA,WAAAE;AAAA,EACA;AAAA,OACK;AACP,YAAYC,QAAO;AAEZ,SAAS,eAAe,MAA0B;AACvD,SAAS;AAAA,IACL,aAAU;AAAA,MACR;AAAA,QACE,aAAU;AAAA,UACR;AAAA,YACE,UAAO;AAAA,cACP,MAAQ;AAAA,gBACJ,YAAW,UAAO,CAAC;AAAA,gBACnB,SAAM,SAAS;AAAA,gBACjB,aAAa,QAAQ;AAAA,gBACrBC,SAAQ,OAAO,WAAW;AAAA,kBACxB,SAAS,CAAC,UAAU,MAAM,QAAS,aAAa;AAAA,gBAClD,CAAC;AAAA,cACH;AAAA,cACA,OAAS,QAAO,YAAW,UAAO,CAAC,GAAK,SAAM,IAAI,CAAC;AAAA;AAAA,cAGnD,SAAW,QAAO,YAAW,UAAO,CAAC,GAAK,SAAM,IAAI,CAAC;AAAA,YACvD,CAAC;AAAA,YACD,SAAS;AAAA,UACX;AAAA,QACF,CAAC;AAAA,QACC,SAAM,MAAM,SAAS,MAAM;AAAA,QAC7B,eAAe;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,IACD,eAAe;AAAA,IACf,aAAa,WAAW;AAAA,EAC1B;AACF;;;ACrCO,IAAM,0BAA0B;AAChC,IAAM,2BAA2B;;;ACDxC,SAAS,UAAU;AAGnB,YAAYC,QAAO;AAgBnB,IAAM,YAAc,eAAY;AAAA,EAC9B,YAAc,YAAW,SAAQ,UAAqB,OAAO,CAAC,CAAC;AACjE,CAAC;AACD,IAAM,iBAAmB,UAAO;AAAA,EAC9B,MAAQ,UAAO,EAAE,MAAQ,UAAO,GAAG,IAAM,UAAO,EAAE,CAAC;AAAA,EACnD,YAAc,QAAO,YAAW,WAAQ,GAAG,KAAK,CAAC;AAAA,EACjD,QAAU,YAAW,UAAO,GAAG,MAAM,GAAG,CAAC;AAAA,EACzC,OAAS,YAAS,SAAS;AAC7B,CAAC;AACM,IAAM,mBAAqB,UAAO;AAAA,EACvC,GAAG,eAAe;AAAA,EAClB,OAAS,OAAI;AACf,CAAC;AAGM,IAAM,gBAAkB,UAAO;AAAA,EACpC,GAAG,eAAe;AAAA,EAClB,MAAQ,YAAW,WAAQ,aAAa,GAAG,aAAa;AAAA;AAAA,EAExD,OAAS,UAAO;AAAA,EAChB,OAAS,UAAO;AAAA,IACd,GAAG,UAAU;AAAA,IACb,SAAW,UAAO;AAAA,IAClB,cAAgB,YAAW,UAAO,CAAC;AAAA,IACnC,YAAc,YAAW,WAAQ,CAAC;AAAA,IAClC,OAAS,UAAO;AAAA,IAChB,aAAe,UAAkC,OAAO;AAAA,EAC1D,CAAC;AACH,CAAC;AAEM,SAAS,cAAc,MAA0C;AACtE,SAAS,SAAM,eAAe,IAAI;AACpC;AACO,SAAS,iBAAiB,MAA6C;AAC5E,QAAM,SAAW,SAAM,kBAAkB,IAAI;AAC7C,SAAO,aAAa;AACpB,SAAO;AACT;AAKO,SAAS,aACd,MACyB;AACzB,SACE,CAAC,CAAC,KAAK,SAAS,aAAa,KAAK,SAAS,kBAAkB,KAAK;AAEtE;;;AChEO,IAAM,kBAAN,MAAsB;AAAA,EAC3B;AAAA,EACA,YAAY,IAAwB;AAClC,SAAK,MAAM;AAAA,EACb;AAAA,EACA,cAAc;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,gBAAgB;AAAA,EAChB,KAAK,MAA0B;AAC7B,QAAI,KAAK,KAAK;AACZ,WAAK,IAAI,KAAK,IAAI;AAAA,IACpB;AAAA,EACF;AACF;",
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 { HandleNode } from './handle-node';
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,39 +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
- output: HandleNode[][];
56
- };
57
- minSize?: {
58
- height: number;
59
- width: number;
60
- };
61
- transform?: {
62
- resizable?: boolean;
63
- };
64
- title?: string;
65
- config?: Record<string, any>;
66
- /** 默认输出 */
67
- outputName?: string;
68
- /** 在工作流中禁止使用 */
69
- excludeUsage?: boolean;
70
- /** 用于前端部分 */
71
- options?: {
72
- /** 禁止自动打开配置 */
73
- disableOpenConfig?: boolean;
74
- };
75
- } & T>;
56
+ export type CustomNode<T extends Record<string, any> = Record<string, any>> = Node<WorkflowNodeData & T>;
76
57
  export type InitDataFunction = () => Partial<CustomNode>;
77
58
  export type NodeComponentType = {
78
59
  afterAdd?: (node: CustomNode, injector: Injector) => any;
79
60
  priority?: number;
61
+ configDefine?: v.BaseSchema<any, any, any>;
80
62
  } & WorkflowNodeConfigOutputType;
81
63
  export type WebviewNodeConfig = NodeComponentType & {
82
- displayConfig?: v.BaseSchema<any, any, any>;
83
- initData: InitDataFunction;
64
+ configDefine?: v.BaseSchema<any, any, any>;
65
+ initData?: InitDataFunction;
84
66
  component?: any;
85
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
- export type WorkflowRunnerInputs = Map<string | symbol, {
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
- input: WorkflowRunnerInputs;
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;