@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.
Files changed (72) hide show
  1. package/index.js +790 -916
  2. package/index.js.map +4 -4
  3. package/index.mjs +728 -850
  4. package/index.mjs.map +4 -4
  5. package/inline/inline.service.d.ts +1 -0
  6. package/inline/node/chat/main/index.d.ts +7 -12
  7. package/inline/node/chat/main/runner.d.ts +35 -0
  8. package/inline/node/chat/{chat.node.define.d.ts → node.define.d.ts} +3 -0
  9. package/inline/node/chat/util/useChat.d.ts +31 -0
  10. package/inline/node/index.browser.d.ts +2 -0
  11. package/inline/node/index.node.d.ts +2 -0
  12. package/inline/node/input-params/common.d.ts +2 -0
  13. package/inline/node/input-params/main/index.d.ts +29 -0
  14. package/inline/node/input-params/main/runner.d.ts +5 -0
  15. package/inline/node/input-params/node.define.d.ts +9 -0
  16. package/inline/node/input-params/webview/index.d.ts +2 -0
  17. package/inline/node/iteration/common.d.ts +2 -0
  18. package/inline/node/iteration/main/index.d.ts +29 -0
  19. package/inline/node/iteration/main/iteration-start.runner.d.ts +5 -0
  20. package/inline/node/iteration/main/runner.d.ts +6 -0
  21. package/inline/node/iteration/node.define.d.ts +11 -0
  22. package/inline/node/iteration/webview/index.d.ts +2 -0
  23. package/inline/node/text/main/index.d.ts +6 -11
  24. package/inline/node/text/main/runner.d.ts +14 -0
  25. package/inline/node/text/text.node.define.d.ts +2 -4
  26. package/module.d.ts +1 -3
  27. package/package.json +4 -3
  28. package/plugin/plugin.service.d.ts +1 -0
  29. package/preset/context-build.service.d.ts +2 -50
  30. package/runner/define.d.ts +3 -7
  31. package/runner/runner-item.d.ts +5 -20
  32. package/runner/workflow-runner.service.d.ts +9 -17
  33. package/share/common/const.d.ts +3 -2
  34. package/share/common/define.d.ts +3 -10
  35. package/share/const.d.ts +0 -1
  36. package/share/handle-node.d.ts +47 -18
  37. package/share/index.d.ts +0 -1
  38. package/share/index.js +27 -48
  39. package/share/index.js.map +4 -4
  40. package/share/index.mjs +25 -42
  41. package/share/index.mjs.map +3 -3
  42. package/share/type.d.ts +11 -30
  43. package/share/type2.d.ts +4 -8
  44. package/share/workflow.const.d.ts +1 -4
  45. package/test/util/chat-fixture.d.ts +44 -0
  46. package/test/util/text-input/common.d.ts +2 -0
  47. package/test/util/text-input/main/index.d.ts +25 -0
  48. package/test/util/text-input/main/runner.d.ts +6 -0
  49. package/test/util/text-input/text.node.define.d.ts +4 -0
  50. package/token.d.ts +8 -6
  51. package/type/type.d.ts +1 -1
  52. package/util/serialize-text-template.d.ts +16 -0
  53. package/webview/index.js +128 -41
  54. package/webview/index.js.map +4 -4
  55. package/webview/index.mjs +127 -43
  56. package/webview/index.mjs.map +4 -4
  57. package/workflow-exec.service.d.ts +14 -24
  58. package/workflow-parser.service.d.ts +0 -1
  59. package/inline/node/chat/main/llm.runner.d.ts +0 -41
  60. package/inline/node/text/main/textarea.runner.d.ts +0 -7
  61. package/preset/inline-build.service.d.ts +0 -11
  62. package/preset/inline-runner.service.d.ts +0 -16
  63. package/runner/inline-input-item.runner.d.ts +0 -8
  64. package/runner/input-params.runner.d.ts +0 -7
  65. package/runner/iteration-start.runner.d.ts +0 -7
  66. package/runner/iteration.runner.d.ts +0 -7
  67. package/runner/parameters.runner.d.ts +0 -10
  68. package/share/util.d.ts +0 -5
  69. package/test/chat.spec.d.ts +0 -1
  70. package/test/file.spec.d.ts +0 -1
  71. package/test/hello.spec.d.ts +0 -1
  72. package/test/plugin.spec.d.ts +0 -1
@@ -1,8 +1,5 @@
1
1
  export declare const enum WorkflowNodeType {
2
2
  'iteration' = "iteration",
3
3
  'iterationStart' = "iteration-start",
4
- 'inputParams' = "input-params",
5
- 'serialize' = "serialize",
6
- parameters = "parameters",
7
- inlineInputItem = "inlineInputItem"
4
+ 'inputParams' = "input-params"
8
5
  }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Chat fixture utilities for testing chat node configurations
3
+ */
4
+ export declare function createTextTemplate(paragraphs: Array<{
5
+ text: string;
6
+ } | {
7
+ label: string;
8
+ value: string[];
9
+ type?: 'custom' | (string & {});
10
+ }>[]): {
11
+ root: {
12
+ children: {
13
+ children: ({
14
+ text: string;
15
+ detail: 0;
16
+ format: 0;
17
+ mode: "normal";
18
+ style: "";
19
+ type: "text";
20
+ version: 1;
21
+ } | {
22
+ type: "variable";
23
+ version: number;
24
+ item: {
25
+ label: string;
26
+ value: string[];
27
+ type: string | undefined;
28
+ };
29
+ })[];
30
+ direction: null;
31
+ format: "";
32
+ indent: 0;
33
+ type: "paragraph";
34
+ version: 1;
35
+ textFormat: 0;
36
+ textStyle: "";
37
+ }[];
38
+ direction: null;
39
+ format: "";
40
+ indent: 0;
41
+ type: "root";
42
+ version: 1;
43
+ };
44
+ };
@@ -0,0 +1,2 @@
1
+ import { NodeComponentType } from '../../../share/type';
2
+ export declare const NODE_COMMON: NodeComponentType;
@@ -0,0 +1,25 @@
1
+ import { TextInputRunner } from './runner';
2
+ export declare const TextInputTestConfig: {
3
+ readonly runner: typeof TextInputRunner;
4
+ readonly configDefine: import("valibot").ObjectSchema<{
5
+ readonly value: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("@piying/valibot-visit").RawConfigAction<"viewRawConfig", string, import("@piying/view-angular-core").AnyCoreSchemaHandle>]>;
6
+ }, undefined>;
7
+ readonly afterAdd?: (node: import("../../../..").CustomNode, injector: import("static-injector").Injector) => any;
8
+ readonly priority?: number;
9
+ readonly type: string;
10
+ readonly label?: string | undefined;
11
+ readonly icon?: {
12
+ fontIcon: string;
13
+ fontSet?: string | undefined;
14
+ } | {
15
+ fontIcon: string;
16
+ fontSet: undefined;
17
+ } | undefined;
18
+ readonly color?: "warn" | "primary" | "accent" | undefined;
19
+ readonly help?: string | undefined;
20
+ readonly outputs?: import("../../../..").HandleNode[][] | undefined;
21
+ readonly disableHead: boolean;
22
+ readonly disableConnect: boolean;
23
+ readonly disableContext?: boolean | undefined;
24
+ readonly nodeMode?: "default" | "condition" | undefined;
25
+ };
@@ -0,0 +1,6 @@
1
+ import { NodeRunnerBase } from '../../../../runner/runner-item';
2
+ import { TEXT_NODE_DEFINE } from '../text.node.define';
3
+ export declare class TextInputRunner extends NodeRunnerBase<typeof TEXT_NODE_DEFINE> {
4
+ environmentContext: import("../../../..").WorkflowRunnerEnvironmentParams;
5
+ run(): Promise<() => Promise<string>>;
6
+ }
@@ -0,0 +1,4 @@
1
+ import * as v from 'valibot';
2
+ export declare const TEXT_NODE_DEFINE: v.ObjectSchema<{
3
+ readonly value: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, import("@piying/valibot-visit").RawConfigAction<"viewRawConfig", string, import("@piying/view-angular-core").AnyCoreSchemaHandle>]>;
4
+ }, undefined>;
package/token.d.ts CHANGED
@@ -1,20 +1,22 @@
1
1
  import { InjectionToken, Signal } from 'static-injector';
2
2
  import { WorkflowRunnerContext } from './runner/workflow-runner.service';
3
- import { WorkflowRunnerEnvironmentParams, WorkflowRunnerInputs } from './share/type2';
3
+ import { WorkflowRunnerEnvironmentParams } from './share/type2';
4
4
  import { ChatModelOptions, ChatParamsListDefine } from '@shenghuabi/openai';
5
- import { ParsedNode, ResolvedInputNode, ResolvedWorkflow } from './share/handle-node';
5
+ import { InputInvalidItem, ParsedNode, ResolvedWorkflow } from './share/handle-node';
6
6
  import { ChatProviderService } from '@shenghuabi/openai';
7
7
  import { ChatMetadata } from './share/type';
8
8
  import * as v from 'valibot';
9
9
  export declare const CurrentWorkflowToken: InjectionToken<ResolvedWorkflow>;
10
- export declare const InputsToken: InjectionToken<WorkflowRunnerInputs>;
10
+ export declare const InputsToken: InjectionToken<Record<string, (InputInvalidItem & {
11
+ value: any;
12
+ })[]>>;
13
+ export declare const NodeInputsToken: InjectionToken<any>;
14
+ export declare const NodeContextToken: InjectionToken<() => Promise<Record<string, any>>>;
15
+ export declare const NodeParentMapToken: InjectionToken<Map<string, Record<string, any>>>;
11
16
  export declare const CurrentNodeToken: InjectionToken<ParsedNode>;
12
17
  export declare const CurrentCallNodeToken: InjectionToken<ParsedNode>;
13
18
  export declare const CurrentContextToken: InjectionToken<WorkflowRunnerContext>;
14
- export declare const InputParamsToken: InjectionToken<WorkflowRunnerInputs>;
15
19
  export declare const ParentContextToken: InjectionToken<WorkflowRunnerContext | undefined>;
16
- /** 把输出当作什么来用, */
17
- export declare const UseInputToken: InjectionToken<ResolvedInputNode>;
18
20
  export declare const AbortSignalToken: InjectionToken<AbortSignal | undefined>;
19
21
  /** 环境变量 自动注入, */
20
22
  export declare const EnviromentParametersToken: InjectionToken<WorkflowRunnerEnvironmentParams | undefined>;
package/type/type.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { NodeRunnerBase } from '../runner/runner-item';
2
2
  import { NodeComponentType } from '../share/type';
3
3
  export type NodeItemDefine = NodeComponentType & {
4
- runner: typeof NodeRunnerBase;
4
+ runner: typeof NodeRunnerBase<any>;
5
5
  };
@@ -0,0 +1,16 @@
1
+ import type { ChatMetadata } from '../share/type';
2
+ export interface SerializeContextOptions {
3
+ /** 节点上下文 */
4
+ context: Record<string, unknown>;
5
+ /** 环境参数上下文 */
6
+ environmentContext: Record<string, unknown>;
7
+ /** 元数据回调:解析后调用,传入收集到的元数据 */
8
+ onMetadata?: (metadata: ChatMetadata[]) => void;
9
+ }
10
+ /**
11
+ * 序列化模板并解析上下文引用
12
+ * @param input - 输入内容(字符串或模板对象)
13
+ * @param options - 上下文选项
14
+ * @returns 序列化后的字符串
15
+ */
16
+ export declare function serializeWithContext(input: unknown, options: SerializeContextOptions): string;
package/webview/index.js CHANGED
@@ -38,10 +38,12 @@ module.exports = __toCommonJS(webview_exports);
38
38
  var index_browser_exports = {};
39
39
  __export(index_browser_exports, {
40
40
  ChatWebviewConfig: () => ChatWebviewConfig,
41
+ InputParamsWebviewConfig: () => InputParamsWebviewConfig,
42
+ IterationWebviewConfig: () => IterationWebviewConfig,
41
43
  TextWebviewConfig: () => TextWebviewConfig
42
44
  });
43
45
 
44
- // packages/workflow/inline/node/chat/chat.node.define.ts
46
+ // packages/workflow/inline/node/chat/node.define.ts
45
47
  var v3 = __toESM(require("valibot"), 1);
46
48
  var import_view_angular_core4 = require("@piying/view-angular-core");
47
49
 
@@ -146,10 +148,12 @@ function llmModelConfig(item) {
146
148
  }
147
149
 
148
150
  // packages/workflow/share/common/const.ts
149
- var DEFAULT_CHAT_SCHEMA_KEY = `[JsonSchema]`;
150
- var RUNNER_ORIGIN_OUTPUT_KEY = `[Origin]`;
151
+ var RUNNER_ORIGIN_OUTPUT = [
152
+ { id: "default", label: "默认", name: `default` }
153
+ ];
151
154
 
152
- // packages/workflow/inline/node/chat/chat.node.define.ts
155
+ // packages/workflow/inline/node/chat/node.define.ts
156
+ var import_util = require("@cyia/util");
153
157
  var ResponseList = ["json", "markdown", "yaml"];
154
158
  var ResponseFormat = ["text", "json_object", "json_schema"];
155
159
  var CHAT_NODE_DEFINE = v3.pipe(
@@ -221,6 +225,18 @@ var CHAT_NODE_DEFINE = v3.pipe(
221
225
  value: v3.pipe(
222
226
  v3.custom(Boolean),
223
227
  (0, import_view_angular_core4.setComponent)("prompt-list")
228
+ ),
229
+ jsonSchema: v3.pipe(
230
+ v3.optional(
231
+ v3.pipe(
232
+ v3.any(),
233
+ v3.check(
234
+ (value) => (0, import_util.isChatSchema)(value),
235
+ (issue) => `jsonSchema 格式异常:输入 ${issue.input};需要类型 {name:string,schema:object}`
236
+ )
237
+ )
238
+ ),
239
+ (0, import_view_angular_core4.setComponent)("jsonSchema")
224
240
  )
225
241
  }),
226
242
  import_view_angular_core4.actions.wrappers.patch(["div"]),
@@ -259,31 +275,34 @@ var NODE_COMMON = {
259
275
  "> 不清楚是否所有模型都遵循此规则,所以并没有限制输入"
260
276
  ].join("\n"),
261
277
  // config: defineConfig,
262
- inputs: [
263
- [],
264
- [
265
- {
266
- label: "JsonSchema",
267
- value: DEFAULT_CHAT_SCHEMA_KEY,
268
- inputType: "schema",
269
- optional: true
270
- }
271
- ]
272
- ],
273
- outputs: [[{ label: "原始输出", value: RUNNER_ORIGIN_OUTPUT_KEY }]]
278
+ // inputs: [
279
+ // [],
280
+ // [
281
+ // {
282
+ // label: 'JsonSchema',
283
+ // value: DEFAULT_CHAT_SCHEMA_KEY,
284
+ // inputType: 'schema',
285
+ // optional: true,
286
+ // },
287
+ // ],
288
+ // ],
289
+ outputs: [
290
+ RUNNER_ORIGIN_OUTPUT,
291
+ [{ id: "format", label: "格式化", name: "format" }]
292
+ ]
274
293
  };
275
294
 
276
295
  // packages/workflow/inline/node/chat/util.ts
277
- var import_util = require("@cyia/util");
296
+ var import_util2 = require("@cyia/util");
278
297
  var INIT_TEMPLATE = { role: "user", content: [] };
279
298
  function getSystemTemplate() {
280
- return (0, import_util.deepClone)({ ...INIT_TEMPLATE, role: "system" });
299
+ return (0, import_util2.deepClone)({ ...INIT_TEMPLATE, role: "system" });
281
300
  }
282
301
 
283
302
  // packages/workflow/inline/node/chat/webview/index.ts
284
303
  var ChatWebviewConfig = {
285
304
  ...NODE_COMMON,
286
- displayConfig: CHAT_NODE_DEFINE,
305
+ configDefine: CHAT_NODE_DEFINE,
287
306
  initData: () => ({
288
307
  data: {
289
308
  transform: {
@@ -310,33 +329,18 @@ var NODE_COMMON2 = {
310
329
  // packages/workflow/inline/node/text/text.node.define.ts
311
330
  var import_view_angular_core5 = require("@piying/view-angular-core");
312
331
  var v4 = __toESM(require("valibot"), 1);
313
- var TEXT_NODE_DEFINE = v4.looseObject({
314
- data: v4.looseObject({
315
- value: v4.pipe(
316
- v4.string(),
317
- (0, import_view_angular_core5.setComponent)("textarea-template"),
318
- import_view_angular_core5.actions.class.top("nodrag")
319
- // valueChange((fn) => {
320
- // fn({ list: [undefined] }).subscribe(({ list: [value], field }) => {
321
- // if (typeof value !== 'string') {
322
- // return;
323
- // }
324
- // field.context.parseTemplate([value]).then((value: any) => {
325
- // if (!value) {
326
- // return;
327
- // }
328
- // field.context.changeHandleData(field, 'input', 1, value);
329
- // });
330
- // });
331
- // }),
332
- )
333
- })
332
+ var TEXT_NODE_DEFINE = v4.object({
333
+ value: v4.pipe(
334
+ v4.any(),
335
+ (0, import_view_angular_core5.setComponent)("textarea-template"),
336
+ import_view_angular_core5.actions.class.top("nodrag")
337
+ )
334
338
  });
335
339
 
336
340
  // packages/workflow/inline/node/text/webview/index.ts
337
341
  var TextWebviewConfig = {
338
342
  ...NODE_COMMON2,
339
- displayConfig: TEXT_NODE_DEFINE,
343
+ configDefine: TEXT_NODE_DEFINE,
340
344
  initData: () => ({
341
345
  data: {
342
346
  transform: {
@@ -347,6 +351,89 @@ var TextWebviewConfig = {
347
351
  width: 300
348
352
  })
349
353
  };
354
+
355
+ // packages/workflow/inline/node/iteration/common.ts
356
+ var NODE_COMMON3 = {
357
+ priority: -100,
358
+ type: "iteration",
359
+ label: `迭代`,
360
+ icon: { fontIcon: "chat" },
361
+ disableHead: false,
362
+ disableConnect: false,
363
+ color: "accent",
364
+ help: [`- 列表循环`].join("\n"),
365
+ // 普通的和flat
366
+ outputs: [RUNNER_ORIGIN_OUTPUT]
367
+ };
368
+
369
+ // packages/workflow/inline/node/iteration/node.define.ts
370
+ var v5 = __toESM(require("valibot"), 1);
371
+ var import_view_angular_core6 = require("@piying/view-angular-core");
372
+ var ITERATION_NODE_DEFINE = v5.pipe(
373
+ v5.object({
374
+ list: v5.pipe(
375
+ v5.array(v5.any()),
376
+ (0, import_view_angular_core6.asControl)(),
377
+ import_view_angular_core6.actions.wrappers.patch(["use-ref"])
378
+ )
379
+ }),
380
+ import_view_angular_core6.actions.wrappers.patch(["div"]),
381
+ import_view_angular_core6.actions.class.top("grid auto-rows-auto gap-2")
382
+ );
383
+
384
+ // packages/workflow/inline/node/iteration/webview/index.ts
385
+ var IterationWebviewConfig = {
386
+ ...NODE_COMMON3,
387
+ configDefine: ITERATION_NODE_DEFINE
388
+ };
389
+
390
+ // packages/workflow/inline/node/input-params/common.ts
391
+ var NODE_COMMON4 = {
392
+ priority: -100,
393
+ type: "input-params",
394
+ label: `入口`,
395
+ icon: { fontIcon: "chat" },
396
+ disableHead: false,
397
+ disableConnect: false,
398
+ color: "accent",
399
+ help: [`- 入口`].join("\n"),
400
+ outputs: [RUNNER_ORIGIN_OUTPUT]
401
+ };
402
+
403
+ // packages/workflow/inline/node/input-params/node.define.ts
404
+ var v6 = __toESM(require("valibot"), 1);
405
+ var import_view_angular_core7 = require("@piying/view-angular-core");
406
+ var import_rxjs = require("rxjs");
407
+ var InputParams_NODE_DEFINE = v6.pipe(
408
+ // todo 输入参数应该禁止被引用
409
+ v6.object({
410
+ /** 入口点通过不同的选择,提供不同的数据 */
411
+ type: v6.pipe(
412
+ v6.string(),
413
+ (0, import_view_angular_core7.setComponent)("select"),
414
+ import_view_angular_core7.actions.inputs.patchAsync({
415
+ options: (field) => field.context["getUsageType"]()
416
+ }),
417
+ (0, import_view_angular_core7.valueChange)((fn) => {
418
+ fn().pipe((0, import_rxjs.filter)(Boolean)).subscribe(({ list: [value], field }) => {
419
+ field.context["getUsageOutputs"](value).then((list) => {
420
+ field.context.setOutputHandle(1, list);
421
+ });
422
+ field.context["usageChange"](value);
423
+ });
424
+ }),
425
+ v6.title("输入类型")
426
+ )
427
+ }),
428
+ import_view_angular_core7.actions.wrappers.patch(["div"]),
429
+ import_view_angular_core7.actions.class.top("grid auto-rows-auto gap-2")
430
+ );
431
+
432
+ // packages/workflow/inline/node/input-params/webview/index.ts
433
+ var InputParamsWebviewConfig = {
434
+ ...NODE_COMMON4,
435
+ configDefine: InputParams_NODE_DEFINE
436
+ };
350
437
  // Annotate the CommonJS export names for ESM import in node:
351
438
  0 && (module.exports = {
352
439
  WebviewNodeMap
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../packages/workflow/webview/index.ts", "../../../packages/workflow/inline/node/index.browser.ts", "../../../packages/workflow/inline/node/chat/chat.node.define.ts", "../../../packages/workflow/share/common/examples.define.ts", "../../../packages/workflow/share/util/layout.ts", "../../../packages/workflow/share/common/llm.define.ts", "../../../packages/workflow/share/common/const.ts", "../../../packages/workflow/share/const.ts", "../../../packages/workflow/inline/node/chat/common.ts", "../../../packages/workflow/inline/node/chat/util.ts", "../../../packages/workflow/inline/node/chat/webview/index.ts", "../../../packages/workflow/inline/node/text/common.ts", "../../../packages/workflow/inline/node/text/text.node.define.ts", "../../../packages/workflow/inline/node/text/webview/index.ts"],
4
- "sourcesContent": ["export * as WebviewNodeMap from '../inline/node/index.browser';\n", "export * from './chat/webview';\nexport * from './text/webview';\n", "import * as v from 'valibot';\n\nimport { actions, setComponent, valueChange } from '@piying/view-angular-core';\nimport { ChatMessageListInputType } from '@shenghuabi/openai';\nimport { EXAMPLES_DEFINE, llmModelConfig } from '../../../share/common';\nexport const ResponseList = ['json', 'markdown', 'yaml'] as const;\nexport const ResponseFormat = ['text', 'json_object', 'json_schema'] as const;\nexport type ResponseType = (typeof ResponseList)[number];\nexport const CHAT_NODE_DEFINE = v.pipe(\n v.object({\n llm: v.optional(llmModelConfig()),\n /** 处理时解析 */\n responseFormat: v.pipe(\n v.optional(v.picklist(ResponseFormat)),\n actions.inputs.patch({\n options: [\n // 有输入json时\n {\n label: '自动',\n value: undefined,\n description: `传入JsonSchema时为[json_schema],否则为[text]`,\n },\n { label: '文本', value: 'text' },\n {\n label: 'JSON对象',\n value: 'json_object',\n description: '只限制返回类型为JSON对象,不对字段进行限制',\n },\n {\n label: 'JSON格式定义',\n value: 'json_schema',\n description:\n '限制返回类型为JSON对象,同时限制字段,不建议手动指定,传入JsonSchema后自动启用',\n },\n ],\n }),\n v.title('响应格式'),\n ),\n /** 处理后解析 */\n parseBy: v.pipe(\n v.optional(v.picklist(ResponseList)),\n actions.inputs.patch({\n options: [\n { label: '直接返回', value: undefined },\n {\n label: 'json',\n value: 'json',\n description: `将返回的json代码块内容或原始内容解析为对象`,\n },\n {\n label: 'markdown',\n value: 'markdown',\n description: `[需要提示词约束]将返回其中的markdown代码块内容或原始内容`,\n },\n {\n label: 'yaml',\n value: 'yaml',\n description: `[需要提示词约束]将返回的yaml代码块内容或原始内容解析为对象`,\n },\n ],\n }),\n v.title('返回解析'),\n valueChange((fn) => {\n fn({ list: [['..', 'responseFormat']] }).subscribe(\n ({ list: [value], field }) => {\n if ((value ?? '').startsWith('json')) {\n if (!field.form.control!.value) {\n field.form.control!.updateValue('json');\n }\n }\n },\n );\n }),\n ),\n examples: EXAMPLES_DEFINE,\n value: v.pipe(\n v.custom<ChatMessageListInputType>(Boolean),\n setComponent('prompt-list'),\n ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('grid auto-rows-auto gap-2'),\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 {\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", "export const DEFAULT_INPUT_KEY = `[INPUT]`;\nexport const HelpObj = {\n templateVarLine: `- 变量定义格式: {{xx}},{{xx.yy}}`,\n pathTodoLine: `- **TODO** 接收传入路径而不是指定`,\n};\n", "import { HelpObj } from '../../../share';\nimport {\n DEFAULT_CHAT_SCHEMA_KEY,\n RUNNER_ORIGIN_OUTPUT_KEY,\n} from '../../../share';\nimport { NodeComponentType } from '../../../share';\n\nexport const NODE_COMMON: NodeComponentType = {\n priority: -100,\n type: 'chat',\n label: `对话`,\n icon: { fontIcon: 'chat' },\n disableHead: false,\n disableConnect: false,\n color: 'accent',\n help: [\n `- 点击输入框左侧图标可以切换或添加新行`,\n `${HelpObj.templateVarLine}`,\n '### 指定类型输出',\n '- `JsonSchema`为可选输入,需要使用`代码`节点生成',\n '> 设置后响应类型会自动变为json',\n '> 也可以使用任何符合`ChatJsonSchema`类型的数据结构传入(`代码`节点编辑时有声明)',\n '- 原始输出: 不进行任何格式化处理的输出',\n '### 定义图片变量',\n '- 只有支持图片传入的大语言模型才支持此选项',\n '> 如`minicpm-v:8b`',\n '- 定义后在对话中可以传入图片',\n '- 或者可以使用`图片输入`节点手动指定一张图片',\n '- 只有`用户提示词`可以使用图片输入',\n '> 不清楚是否所有模型都遵循此规则,所以并没有限制输入',\n ].join('\\n'),\n // config: defineConfig,\n inputs: [\n [],\n [\n {\n label: 'JsonSchema',\n value: DEFAULT_CHAT_SCHEMA_KEY,\n inputType: 'schema',\n optional: true,\n },\n ],\n ],\n outputs: [[{ label: '原始输出', value: RUNNER_ORIGIN_OUTPUT_KEY }]],\n};\n", "import { deepClone } from '@cyia/util';\n\nconst INIT_TEMPLATE = { role: 'user' as const, content: [] };\nexport function getHumanTemplate() {\n return deepClone(INIT_TEMPLATE);\n}\nexport function getSystemTemplate() {\n return deepClone({ ...INIT_TEMPLATE, role: 'system' });\n}\n", "import { WebviewNodeConfig } from '../../../../share/type';\nimport { CHAT_NODE_DEFINE } from '../chat.node.define';\nimport { NODE_COMMON } from '../common';\nimport { getSystemTemplate } from '../util';\n\nexport const ChatWebviewConfig: WebviewNodeConfig = {\n ...NODE_COMMON,\n displayConfig: CHAT_NODE_DEFINE,\n initData: () => ({\n data: {\n transform: {\n resizable: true,\n },\n value: [getSystemTemplate()],\n },\n width: 300,\n }),\n};\n", "import { HelpObj } from '../../../share';\nimport { NodeComponentType } from '../../../share/type';\n\nexport const NODE_COMMON: NodeComponentType = {\n type: 'textarea',\n label: `文本模板`,\n icon: { fontIcon: 'text_snippet' },\n disableHead: false,\n disableConnect: false,\n color: 'primary',\n help: `${HelpObj.templateVarLine}`,\n priority: -98,\n};\n", "import {\n actions,\n setComponent,\n} from '@piying/view-angular-core';\nimport * as v from 'valibot';\nexport const TEXT_NODE_DEFINE = v.looseObject({\n data: v.looseObject({\n value: v.pipe(\n v.string(),\n setComponent('textarea-template'),\n actions.class.top('nodrag'),\n // valueChange((fn) => {\n // fn({ list: [undefined] }).subscribe(({ list: [value], field }) => {\n // if (typeof value !== 'string') {\n // return;\n // }\n // field.context.parseTemplate([value]).then((value: any) => {\n // if (!value) {\n // return;\n // }\n // field.context.changeHandleData(field, 'input', 1, value);\n // });\n // });\n // }),\n ),\n }),\n});\n", "import { WebviewNodeConfig } from '../../../../share/type';\nimport { NODE_COMMON } from '../common';\nimport { TEXT_NODE_DEFINE } from '../text.node.define';\n\nexport const TextWebviewConfig: WebviewNodeConfig = {\n ...NODE_COMMON,\n displayConfig: TEXT_NODE_DEFINE,\n initData: () => ({\n data: {\n transform: {\n resizable: true,\n },\n\n value: '',\n },\n width: 300,\n }),\n};\n"],
5
- "mappings": "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",
6
- "names": ["v", "import_view_angular_core", "import_view_angular_core", "import_view_angular_core", "v", "NODE_COMMON", "import_view_angular_core", "v", "NODE_COMMON"]
3
+ "sources": ["../../../packages/workflow/webview/index.ts", "../../../packages/workflow/inline/node/index.browser.ts", "../../../packages/workflow/inline/node/chat/node.define.ts", "../../../packages/workflow/share/common/examples.define.ts", "../../../packages/workflow/share/util/layout.ts", "../../../packages/workflow/share/common/llm.define.ts", "../../../packages/workflow/share/common/const.ts", "../../../packages/workflow/share/const.ts", "../../../packages/workflow/inline/node/chat/common.ts", "../../../packages/workflow/inline/node/chat/util.ts", "../../../packages/workflow/inline/node/chat/webview/index.ts", "../../../packages/workflow/inline/node/text/common.ts", "../../../packages/workflow/inline/node/text/text.node.define.ts", "../../../packages/workflow/inline/node/text/webview/index.ts", "../../../packages/workflow/inline/node/iteration/common.ts", "../../../packages/workflow/inline/node/iteration/node.define.ts", "../../../packages/workflow/inline/node/iteration/webview/index.ts", "../../../packages/workflow/inline/node/input-params/common.ts", "../../../packages/workflow/inline/node/input-params/node.define.ts", "../../../packages/workflow/inline/node/input-params/webview/index.ts"],
4
+ "sourcesContent": ["export * as WebviewNodeMap from '../inline/node/index.browser';\n", "export * from './chat/webview';\nexport * from './text/webview';\nexport * from './iteration/webview'\nexport * from './input-params/webview'", "import * as v from 'valibot';\n\nimport { actions, setComponent, valueChange } from '@piying/view-angular-core';\nimport { ChatMessageListInputType } from '@shenghuabi/openai';\nimport { EXAMPLES_DEFINE, llmModelConfig } from '../../../share/common';\nimport { isChatSchema } from '@cyia/util';\nexport const ResponseList = ['json', 'markdown', 'yaml'] as const;\nexport const ResponseFormat = ['text', 'json_object', 'json_schema'] as const;\nexport type ResponseType = (typeof ResponseList)[number];\nexport const CHAT_NODE_DEFINE = v.pipe(\n v.object({\n llm: v.optional(llmModelConfig()),\n /** 处理时解析 */\n responseFormat: v.pipe(\n v.optional(v.picklist(ResponseFormat)),\n actions.inputs.patch({\n options: [\n // 有输入json时\n {\n label: '自动',\n value: undefined,\n description: `传入JsonSchema时为[json_schema],否则为[text]`,\n },\n { label: '文本', value: 'text' },\n {\n label: 'JSON对象',\n value: 'json_object',\n description: '只限制返回类型为JSON对象,不对字段进行限制',\n },\n {\n label: 'JSON格式定义',\n value: 'json_schema',\n description:\n '限制返回类型为JSON对象,同时限制字段,不建议手动指定,传入JsonSchema后自动启用',\n },\n ],\n }),\n v.title('响应格式'),\n ),\n /** 处理后解析 */\n parseBy: v.pipe(\n v.optional(v.picklist(ResponseList)),\n actions.inputs.patch({\n options: [\n { label: '直接返回', value: undefined },\n {\n label: 'json',\n value: 'json',\n description: `将返回的json代码块内容或原始内容解析为对象`,\n },\n {\n label: 'markdown',\n value: 'markdown',\n description: `[需要提示词约束]将返回其中的markdown代码块内容或原始内容`,\n },\n {\n label: 'yaml',\n value: 'yaml',\n description: `[需要提示词约束]将返回的yaml代码块内容或原始内容解析为对象`,\n },\n ],\n }),\n v.title('返回解析'),\n valueChange((fn) => {\n fn({ list: [['..', 'responseFormat']] }).subscribe(\n ({ list: [value], field }) => {\n if ((value ?? '').startsWith('json')) {\n if (!field.form.control!.value) {\n field.form.control!.updateValue('json');\n }\n }\n },\n );\n }),\n ),\n examples: EXAMPLES_DEFINE,\n value: v.pipe(\n v.custom<ChatMessageListInputType>(Boolean),\n setComponent('prompt-list'),\n ),\n jsonSchema: v.pipe(\n v.optional(\n v.pipe(\n v.any(),\n v.check(\n (value) => isChatSchema(value),\n (issue) =>\n `jsonSchema 格式异常:输入 ${issue.input};需要类型 {name:string,schema:object}`,\n ),\n ),\n ),\n setComponent('jsonSchema'),\n ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('grid auto-rows-auto gap-2'),\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 {\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", "export const HelpObj = {\n templateVarLine: `- 变量定义格式: {{xx}},{{xx.yy}}`,\n pathTodoLine: `- **TODO** 接收传入路径而不是指定`,\n};\n", "import { HelpObj, RUNNER_ORIGIN_OUTPUT } from '../../../share';\n\nimport { NodeComponentType } from '../../../share';\n\nexport const NODE_COMMON: NodeComponentType = {\n priority: -100,\n type: 'chat',\n label: `对话`,\n icon: { fontIcon: 'chat' },\n disableHead: false,\n disableConnect: false,\n color: 'accent',\n help: [\n `- 点击输入框左侧图标可以切换或添加新行`,\n `${HelpObj.templateVarLine}`,\n '### 指定类型输出',\n '- `JsonSchema`为可选输入,需要使用`代码`节点生成',\n '> 设置后响应类型会自动变为json',\n '> 也可以使用任何符合`ChatJsonSchema`类型的数据结构传入(`代码`节点编辑时有声明)',\n '- 原始输出: 不进行任何格式化处理的输出',\n '### 定义图片变量',\n '- 只有支持图片传入的大语言模型才支持此选项',\n '> 如`minicpm-v:8b`',\n '- 定义后在对话中可以传入图片',\n '- 或者可以使用`图片输入`节点手动指定一张图片',\n '- 只有`用户提示词`可以使用图片输入',\n '> 不清楚是否所有模型都遵循此规则,所以并没有限制输入',\n ].join('\\n'),\n // config: defineConfig,\n // inputs: [\n // [],\n // [\n // {\n // label: 'JsonSchema',\n // value: DEFAULT_CHAT_SCHEMA_KEY,\n // inputType: 'schema',\n // optional: true,\n // },\n // ],\n // ],\n outputs: [\n RUNNER_ORIGIN_OUTPUT,\n [{ id: 'format', label: '格式化', name: 'format' }],\n ],\n};\n", "import { deepClone } from '@cyia/util';\n\nconst INIT_TEMPLATE = { role: 'user' as const, content: [] };\nexport function getHumanTemplate() {\n return deepClone(INIT_TEMPLATE);\n}\nexport function getSystemTemplate() {\n return deepClone({ ...INIT_TEMPLATE, role: 'system' });\n}\n", "import { WebviewNodeConfig } from '../../../../share/type';\nimport { CHAT_NODE_DEFINE } from '../node.define';\nimport { NODE_COMMON } from '../common';\nimport { getSystemTemplate } from '../util';\n\nexport const ChatWebviewConfig: WebviewNodeConfig = {\n ...NODE_COMMON,\n configDefine: CHAT_NODE_DEFINE,\n initData: () => ({\n data: {\n transform: {\n resizable: true,\n },\n value: [getSystemTemplate()],\n },\n width: 300,\n }),\n};\n", "import { HelpObj } from '../../../share';\nimport { NodeComponentType } from '../../../share/type';\n\nexport const NODE_COMMON: NodeComponentType = {\n type: 'textarea',\n label: `文本模板`,\n icon: { fontIcon: 'text_snippet' },\n disableHead: false,\n disableConnect: false,\n color: 'primary',\n help: `${HelpObj.templateVarLine}`,\n priority: -98,\n};\n", "import { actions, setComponent } from '@piying/view-angular-core';\nimport * as v from 'valibot';\nexport const TEXT_NODE_DEFINE = v.object({\n value: v.pipe(\n v.any(),\n setComponent('textarea-template'),\n actions.class.top('nodrag'),\n ),\n});\n", "import { WebviewNodeConfig } from '../../../../share/type';\nimport { NODE_COMMON } from '../common';\nimport { TEXT_NODE_DEFINE } from '../text.node.define';\n\nexport const TextWebviewConfig: WebviewNodeConfig = {\n ...NODE_COMMON,\n configDefine: TEXT_NODE_DEFINE,\n initData: () => ({\n data: {\n transform: {\n resizable: true,\n },\n\n value: '',\n },\n width: 300,\n }),\n};\n", "import { RUNNER_ORIGIN_OUTPUT } from '../../../share';\n\nimport { NodeComponentType } from '../../../share';\n\nexport const NODE_COMMON: NodeComponentType = {\n priority: -100,\n type: 'iteration',\n label: `迭代`,\n icon: { fontIcon: 'chat' },\n disableHead: false,\n disableConnect: false,\n color: 'accent',\n help: [`- 列表循环`].join('\\n'),\n // 普通的和flat\n outputs: [RUNNER_ORIGIN_OUTPUT],\n};\n", "import * as v from 'valibot';\n\nimport { actions, asControl } from '@piying/view-angular-core';\nexport const ResponseList = ['json', 'markdown', 'yaml'] as const;\nexport const ResponseFormat = ['text', 'json_object', 'json_schema'] as const;\nexport type ResponseType = (typeof ResponseList)[number];\nexport const ITERATION_NODE_DEFINE = v.pipe(\n v.object({\n list: v.pipe(\n v.array(v.any()),\n asControl(),\n actions.wrappers.patch(['use-ref']),\n ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('grid auto-rows-auto gap-2'),\n);\n", "import { WebviewNodeConfig } from '../../../../share/type';\nimport { NODE_COMMON } from '../common';\nimport { ITERATION_NODE_DEFINE } from '../node.define';\n\nexport const IterationWebviewConfig: WebviewNodeConfig = {\n ...NODE_COMMON,\n configDefine: ITERATION_NODE_DEFINE,\n};\n", "import { RUNNER_ORIGIN_OUTPUT } from '../../../share';\n\nimport { NodeComponentType } from '../../../share';\n\nexport const NODE_COMMON: NodeComponentType = {\n priority: -100,\n type: 'input-params',\n label: `入口`,\n icon: { fontIcon: 'chat' },\n disableHead: false,\n disableConnect: false,\n color: 'accent',\n help: [`- 入口`].join('\\n'),\n outputs: [RUNNER_ORIGIN_OUTPUT],\n};\n", "import * as v from 'valibot';\n\nimport { actions, setComponent, valueChange } from '@piying/view-angular-core';\nimport { filter } from 'rxjs';\n\nexport const InputParams_NODE_DEFINE = v.pipe(\n // todo 输入参数应该禁止被引用\n v.object({\n /** 入口点通过不同的选择,提供不同的数据 */\n type: v.pipe(\n v.string(),\n setComponent('select'),\n actions.inputs.patchAsync({\n options: (field) => field.context['getUsageType'](),\n }),\n valueChange((fn) => {\n fn()\n .pipe(filter(Boolean))\n .subscribe(({ list: [value], field }) => {\n field.context['getUsageOutputs'](value).then((list: any[]) => {\n field.context.setOutputHandle(1, list);\n });\n field.context['usageChange'](value)\n });\n }),\n v.title('输入类型'),\n ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('grid auto-rows-auto gap-2'),\n);\n", "import { WebviewNodeConfig } from '../../../../share/type';\nimport { NODE_COMMON } from '../common';\nimport { InputParams_NODE_DEFINE } from '../node.define';\n\nexport const InputParamsWebviewConfig: WebviewNodeConfig = {\n ...NODE_COMMON,\n configDefine: InputParams_NODE_DEFINE,\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["v", "import_view_angular_core", "import_view_angular_core", "import_view_angular_core", "v", "import_util", "NODE_COMMON", "import_view_angular_core", "v", "NODE_COMMON", "NODE_COMMON", "v", "import_view_angular_core", "NODE_COMMON", "NODE_COMMON", "v", "import_view_angular_core", "NODE_COMMON"]
7
7
  }