@shenghuabi/workflow 1.0.10 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +8 -0
- package/index.js.map +2 -2
- package/index.mjs +10 -1
- package/index.mjs.map +3 -3
- package/inline/node/chat/chat.node.define.d.ts +4 -0
- package/inline/node/chat/main/index.d.ts +4 -0
- package/package.json +2 -2
- package/share/common/llm.define.d.ts +4 -0
- package/share/index.js +8 -0
- package/share/index.js.map +2 -2
- package/share/index.mjs +10 -1
- package/share/index.mjs.map +3 -3
- package/webview/index.js +8 -0
- package/webview/index.js.map +2 -2
- package/webview/index.mjs +10 -1
- package/webview/index.mjs.map +3 -3
package/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/workflow/workflow-parser.service.ts", "../../packages/workflow/share/workflow.const.ts", "../../packages/workflow/share/handle-node.ts", "../../packages/workflow/inline/inline.service.ts", "../../packages/workflow/plugin/plugin.service.ts", "../../packages/workflow/inline/node/index.node.ts", "../../packages/workflow/share/const.ts", "../../packages/workflow/share/util.ts", "../../packages/workflow/share/common/examples.define.ts", "../../packages/workflow/share/util/layout.ts", "../../packages/workflow/share/common/handle.define.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", "../../packages/workflow/inline/node/chat/common.ts", "../../packages/workflow/inline/node/chat/chat.node.define.ts", "../../packages/workflow/inline/node/chat/main/llm.runner.ts", "../../packages/openai/chat/util/create.ts", "../../packages/workflow/runner/runner-item.ts", "../../packages/workflow/token.ts", "../../packages/workflow/template-format.service.ts", "../../packages/workflow/inline/node/chat/main/index.ts", "../../packages/workflow/inline/node/text/common.ts", "../../packages/workflow/inline/node/text/main/textarea.runner.ts", "../../packages/workflow/inline/node/text/main/index.ts", "../../packages/workflow/workflow-exec.service.ts", "../../packages/workflow/preset/inline-runner.service.ts", "../../packages/workflow/preset/inline-build.service.ts", "../../packages/workflow/runner/parameters.runner.ts", "../../packages/workflow/runner/workflow-runner.service.ts", "../../packages/workflow/runner/inline-input-item.runner.ts", "../../packages/workflow/runner/input-params.runner.ts", "../../packages/workflow/runner/iteration-start.runner.ts", "../../packages/workflow/runner/iteration.runner.ts", "../../packages/workflow/runner/define.ts", "../../packages/workflow/runner/runner-error.ts", "../../packages/workflow/preset/context-build.service.ts", "../../packages/workflow/workflow-select.service.ts", "../../packages/workflow/workflow-file.service.ts", "../../packages/workflow/module.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n computed,\n createInjector,\n inject,\n InjectionToken,\n Injector,\n} from 'static-injector';\n\nimport Graph from 'graphology';\nimport {\n getConnectedEdges,\n getIncomers,\n getOutgoers,\n Node,\n} from '@xyflow/react';\nimport { WorkflowNodeType } from './share/workflow.const';\nimport { uniqBy } from 'es-toolkit';\n// 自定义可拓展\n\nimport {\n flatFilterHandleList,\n HandleNode,\n ResolvedWorkflow,\n WorkflowData,\n WorkflowNodeData,\n} from './share/handle-node';\nimport { InlineNodeService } from './inline/inline.service';\nimport { WorkflowPluginService } from './plugin/plugin.service';\nimport * as InlineNodeObj from './inline/node/index.node';\nexport interface ResolvedWorkflowResult {\n data?: ResolvedWorkflow;\n /** todo 应该更详细,进行错误定位 */\n error?: {\n message?: string;\n nodeId?: string;\n };\n manualInput?: boolean;\n}\ntype SubGroupList = Record<\n string,\n { key: string; startId?: string; nodeList: Node<WorkflowNodeData>[] }[]\n>;\nclass WorkflowParserContext {\n // fixme 或许可以分离,单独调用,然后加上children查找,不过那样就太慢了\n #childUseNodeSet = new Set<string>();\n\n constructor(\n /** 主列表或者说某一级的列表 */\n public list: Node<WorkflowNodeData>[],\n private subObject: SubGroupList,\n private data: Pick<WorkflowData, 'flow'>,\n /** 父级节点 */\n private parentNode?: Node<WorkflowNodeData>,\n /** inputList 使用,全局统计 */\n private userInputParams: HandleNode[] = [],\n /** 父级上下文 */\n private parent?: WorkflowParserContext,\n ) {}\n /** 只能子级在本级找不到节点时调用父级使用 */\n protected childUseDefine(\n id: string,\n parentId?: string,\n ): Node<WorkflowNodeData> | undefined {\n const define = this.list.find((item) => item.id === id);\n if (!define) {\n return this.parent?.childUseDefine(id, parentId);\n }\n if (id !== parentId) {\n this.#childUseNodeSet.add(id);\n }\n return define;\n }\n #getParentNodeDefine(id: string) {\n return this.parent?.childUseDefine(id, this.parentNode?.id);\n }\n parseItem(): ResolvedWorkflowResult {\n const graph = new Graph({ multi: true });\n const { nodes, edges } = this.data.flow;\n const nodeData: ResolvedWorkflow = { nodes: {}, end: undefined } as any;\n this.list.forEach((node) => {\n graph.addNode(node.id);\n });\n for (const node of this.list) {\n const handle = {\n output: flatFilterHandleList(node.data.handle?.output),\n };\n /** 连接的所有边,包括input+output */\n const cEdges = getConnectedEdges([node], edges);\n /** 输入连接点,可以理解为参数 */\n const inputNodes = getIncomers(node, nodes, cEdges);\n /** 定义输入,大于等于边,因为可能有没连接的 */\n const inputHandleList = flatFilterHandleList(node.data.handle?.input);\n /** 保存的是handle和对应的nodeid? */\n const inputParams = [];\n // 其实就是找依赖,以及确定输入\n for (const item of inputHandleList) {\n const targetHandle = item.id;\n /** 连接到当前节点的边 */\n const linkedEdges = cEdges.filter(\n (item) =>\n item.targetHandle === targetHandle && item.target === node.id,\n );\n // 未来可以改成多个节点就变成数组?\n if (linkedEdges.length > 1) {\n return {\n error: {\n message: `${node.id}:不支持多个节点连接一个输入点`,\n nodeId: node.id,\n },\n };\n }\n if (linkedEdges.length === 1) {\n const linkedEdge = linkedEdges[0];\n /** 找到连接的输入节点 */\n const linkedNode = inputNodes.find(\n (item) => item.id === linkedEdge.source,\n )!;\n const linkedOuput = flatFilterHandleList(\n linkedNode.data.handle?.output,\n ).find((item) => item.id === linkedEdge.sourceHandle);\n\n inputParams.push({\n ...item,\n nodeId: linkedNode.id,\n outputName: linkedOuput!.value,\n });\n //这个节点只能是当前或者说是它的祖先提供,不能是其他的地方的\n if (!graph.hasNode(linkedNode.id)) {\n // 只允许在父级查找\n if (!this.#getParentNodeDefine(linkedNode.id)) {\n return {\n error: {\n message: `${linkedNode.id}:未找到连接节点,只能读取到当前及祖先范围内的节点`,\n nodeId: linkedNode.id,\n },\n };\n }\n graph.addNode(linkedNode.id);\n }\n graph.addEdge(linkedNode.id, node.id);\n } else {\n // 没有输入节点就需要统计\n inputParams.push({ ...item });\n // 过滤连接点\n if (item.type) {\n continue;\n }\n this.userInputParams.push(item);\n }\n }\n nodeData.nodes[node.id] = {\n data: node.data,\n //输入用\n inputs: inputParams,\n outputs: handle.output,\n type: node.type! as any,\n id: node.id,\n };\n // 如果这个节点是一个块级节点\n if (this.subObject[node.id]) {\n // 多出口\n for (let index = 0; index < this.subObject[node.id].length; index++) {\n const { key, startId, nodeList } = this.subObject[node.id][index];\n const instance = new WorkflowParserContext(\n nodeList,\n this.subObject,\n this.data,\n node,\n this.userInputParams,\n this,\n );\n const result = instance.parseItem();\n if (result.error) {\n return { error: { ...result.error } };\n }\n nodeData.nodes[node.id].subFlowList ??= [];\n // todo 一个输出只能有一个连接?\n nodeData.nodes[node.id].subFlowList!.push({\n key: key,\n flow: result.data!,\n startId: startId,\n });\n }\n }\n }\n const outList: string[] = [];\n graph.forEachNode((node) => {\n // 排除自己使用过的节点和有输出连接的的节点\n if (!this.#childUseNodeSet.has(node) && graph.outDegree(node) === 0) {\n outList.push(node);\n }\n });\n if (outList.length > 1) {\n return { error: { message: `计算时存在多个出口` } };\n } else if (outList.length === 0) {\n return { error: { message: `可能出现循环依赖,没有出口` } };\n } else {\n nodeData.end = outList[0];\n nodeData.inputList = uniqBy(\n this.userInputParams,\n (item) => `${item.inputType || 'string'}|${item.value}`,\n ).map((item) => ({\n inputType: item.inputType || 'string',\n value: item.value,\n label: item.label || item.value,\n optional: item.optional,\n }));\n return { data: nodeData };\n }\n }\n}\nclass NodeGroup {\n #group = new Map<string, Node<WorkflowNodeData>[]>();\n #iterationMap = new Map<string, Node<WorkflowNodeData>>();\n addContainerStart(node: Node<WorkflowNodeData>) {\n this.#iterationMap.set(node.parentId!, node);\n }\n getContainerStart(node: Node<WorkflowNodeData>) {\n return this.#iterationMap.get(node.id)!;\n }\n add(node: Node<WorkflowNodeData>) {\n const nodeMap = this.#group.get(node.type! as any) || [];\n nodeMap.push(node);\n this.#group.set(node.type! as any, nodeMap);\n }\n getList(type: string) {\n return this.#group.get(type) || [];\n }\n}\nconst WorkflowDataToken = new InjectionToken<Pick<WorkflowData, 'flow'>>(\n 'WorkflowData',\n);\n/** 预解析,确定范围 */\nclass WorkflowPreParser {\n /**\n * 迭代块:直接找父级parentid就行了\n * 分类块:所有后面的都算他的\n * 重构,所有节点进行迭代\n * 找迭代快,找到后找子级item块,找到后进行output查找+parent==迭代快\n * 找分类,找到后output查找\n * 所有独立块都是找到独立节点后终止\n */\n #nodeGroup = new NodeGroup();\n #data = inject(WorkflowDataToken);\n #plugin = inject(WorkflowPluginService);\n #inlineNodeService = inject(InlineNodeService);\n\n #fullBlockObject$$ = computed(\n () =>\n ({\n ...this.#inlineNodeService.conditionNodeList(),\n ...this.#plugin.conditionNodeList$$(),\n [WorkflowNodeType.iteration]: true,\n }) as Record<string, boolean>,\n );\n #conditionBlockObject$$ = computed(\n () =>\n ({\n ...this.#inlineNodeService.conditionNodeList(),\n ...this.#plugin.conditionNodeList$$(),\n }) as Record<string, boolean>,\n );\n\n parse() {\n const { nodes, edges } = this.#data.flow;\n /** 迭代块内部的 */\n const mainList = [];\n /** 节点的多出口 */\n const subObjectGroup: SubGroupList = {};\n const excludeSet = new Set<string>();\n /** 判断节点是否是块级 */\n const isBlock = (item: Node<WorkflowNodeData>) =>\n this.#fullBlockObject$$()[item.type!];\n const removedList = new Set<string>();\n const getSubNode = (\n node: Node<WorkflowNodeData>,\n subNodeList: Node<WorkflowNodeData>[],\n ) => {\n subNodeList.push(node);\n excludeSet.add(node.id);\n if (!isBlock(node)) {\n getOutgoers(node, nodes, edges).forEach((item) => {\n getSubNode(item, subNodeList);\n });\n }\n };\n let manualInput = false;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (node.data.excludeUsage) {\n removedList.add(node.id);\n nodes.splice(i, 1);\n i--;\n continue;\n }\n if (node.type === 'input-params') {\n manualInput ||= !!node.data.config?.['manualInput'];\n } else if (isBlock(node)) {\n this.#nodeGroup.add(node);\n } else if (node.type === WorkflowNodeType.iterationStart) {\n this.#nodeGroup.addContainerStart(node);\n }\n }\n\n Object.keys(this.#fullBlockObject$$())\n .flatMap((key) => this.#nodeGroup.getList(key))\n .forEach((node) => {\n const outputList = subObjectGroup[node.id] || [];\n subObjectGroup[node.id] = outputList;\n // 这个是包裹级块\n if (node.type === WorkflowNodeType.iteration) {\n const subNodeList: Node<WorkflowNodeData>[] = [];\n const startNode = this.#nodeGroup.getContainerStart(node);\n getSubNode(startNode, subNodeList);\n outputList.push({\n nodeList: uniqBy(subNodeList, (item) => item.id),\n startId: startNode.id,\n key: `[default]`,\n });\n }\n // 这个是分支级块\n else if (this.#conditionBlockObject$$()[node.type!]) {\n const cEdges = getConnectedEdges([node], edges);\n const children = getOutgoers(node, nodes, cEdges);\n const outputHandleList = flatFilterHandleList(\n node.data.handle!.output,\n );\n for (const outputHandle of outputHandleList) {\n // 一个出口可能被多次使用\n const outputEdgeList = cEdges.filter(\n (edge) => edge.sourceHandle === outputHandle.id,\n );\n\n if (!outputEdgeList.length) {\n throw new Error(`[${node.data.title || ''}]节点上发现未连接出口`);\n }\n for (const childNode of children.filter(({ id }) =>\n outputEdgeList.some(({ target }) => target === id),\n )) {\n const subNodeList: Node<WorkflowNodeData>[] = [];\n getSubNode(childNode, subNodeList);\n outputList.push({\n nodeList: uniqBy(subNodeList, (item) => item.id),\n startId: childNode.id,\n key: outputHandle.value,\n });\n }\n }\n }\n });\n\n for (const node of nodes) {\n if (excludeSet.has(node.id)) {\n continue;\n }\n mainList.push(node);\n }\n\n return {\n list: mainList,\n subObjectGroup,\n manualInput,\n edges: edges.filter(\n (edge) =>\n !removedList.has(edge.source) && !removedList.has(edge.target),\n ),\n };\n }\n}\n/** 先将图解析为定义 */\nexport class WorkflowParserService {\n #injector = inject(Injector);\n #inlineNode = inject(InlineNodeService);\n constructor() {\n this.#inlineNode.register(InlineNodeObj);\n }\n /**\n * 1.如果出现孤立节点,那么需要判断是不是子级引用\n * 2.子级引用本级别找不到,那么需要找父级\n */\n /**\n * 边有id,通过source 找到连接的节点\n *\n */\n parse(data: Pick<WorkflowData, 'flow'>): ResolvedWorkflowResult {\n const injector = createInjector({\n providers: [\n WorkflowPreParser,\n { provide: WorkflowDataToken, useValue: data },\n ],\n parent: this.#injector,\n });\n const preInstance = injector.get(WorkflowPreParser);\n\n const result = preInstance.parse();\n if (!result.list.length) {\n return {\n error: {\n message: '无可用节点',\n },\n };\n }\n const instance = new WorkflowParserContext(\n result.list,\n result.subObjectGroup,\n { ...data, flow: { ...data.flow, edges: result.edges } },\n );\n return { ...instance.parseItem(), manualInput: result.manualInput };\n }\n}\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 { 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 { NodeItemDefine } from '../type/type';\n\nexport class InlineNodeService {\n inlineList: NodeItemDefine[] = [];\n register(obj: Record<string, NodeItemDefine>) {\n Object.values(obj).forEach((item) => {\n this.inlineList.push(item);\n });\n }\n getInlineList() {\n return this.inlineList;\n }\n conditionNodeList() {\n return this.inlineList\n .filter((item) => item.nodeMode === 'condition')\n .reduce(\n (obj, item) => {\n obj[item.type] = true;\n return obj;\n },\n {} as Record<string, boolean>,\n );\n }\n // todo 类型\n getNodeRunner(type: string) {\n return this.inlineList.find((item) => item.type === type)?.runner;\n }\n}\n", "import { computed, signal } from 'static-injector';\nimport { NodeItemDefine } from '../type/type';\n\nexport class WorkflowPluginService {\n nodeList = signal<NodeItemDefine[]>([]);\n setNodeObject(obj: NodeItemDefine[]) {\n this.nodeList.set(obj);\n }\n\n conditionNodeList$$ = computed(() =>\n this.nodeList()\n .filter((item) => item.nodeMode === 'condition')\n .reduce(\n (obj, item) => {\n obj[item.type] = true;\n return obj;\n },\n {} as Record<string, any>,\n ),\n );\n // todo 类型\n getNodeRunner(type: string) {\n return this.nodeList().find((item) => item.type === type)!.runner;\n }\n}\n", "export * from './chat/main';\nexport * from './text/main';\n", "export const DEFAULT_INPUT_KEY = `[INPUT]`;\nexport const HelpObj = {\n templateVarLine: `- 变量定义格式: {{xx}},{{xx.yy}}`,\n pathTodoLine: `- **TODO** 接收传入路径而不是指定`,\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", "import {\n actions,\n condition,\n renderConfig,\n} 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(v.string(), v.title('问题'), actions.class.top('flex-1')),\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(v.string(), v.title('回答'), actions.class.top('flex-1')),\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 condition({\n environments: ['display'],\n actions: [\n renderConfig({\n hidden: true,\n }),\n ],\n }),\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 * as v from 'valibot';\nimport { renderConfig, setComponent } from '@piying/view-angular-core';\nimport { condition } from '@piying/valibot-visit';\nconst HiddenAction = condition<any>({\n environments: ['display', 'default'],\n actions: [setComponent(''), renderConfig({ hidden: true })],\n});\nconst AnyHiddenList = v.pipe(\n v.array(v.pipe(v.optional(v.any()), HiddenAction)),\n setComponent(''),\n renderConfig({ hidden: true }),\n);\nexport const HandleDataDefine = v.pipe(\n v.optional(\n v.object({\n output: AnyHiddenList,\n input: AnyHiddenList,\n }),\n ),\n HiddenAction,\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 { condition } from '@piying/valibot-visit';\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 condition({\n environments: ['display', 'config'],\n actions: [asVirtualGroup()],\n }),\n ),\n ]),\n condition({\n environments: ['display', 'config'],\n actions: [asVirtualGroup()],\n }),\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", "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 * as v from 'valibot';\n\nimport {\n actions,\n condition,\n setComponent,\n valueChange,\n} 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.looseObject({\n data: v.looseObject({\n config: 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 }),\n actions.wrappers.patch(['div']),\n actions.class.top('grid auto-rows-auto gap-2'),\n ),\n value: v.pipe(\n v.custom<ChatMessageListInputType>(Boolean),\n setComponent(''),\n condition({\n environments: ['display'],\n actions: [\n setComponent('prompt-list'),\n valueChange((fn) => {\n fn({ list: [undefined] }).subscribe(({ list: [value], field }) => {\n if (!Array.isArray(value)) {\n return;\n }\n const inputValue: ChatMessageListInputType = value ?? [];\n field.context\n .parseTemplate(\n inputValue.flatMap((item) =>\n item.content.map((item) =>\n item.type === 'text' ? item.text : '',\n ),\n ),\n )\n .then((value: any) => {\n if (!value) {\n return;\n }\n field.context.changeHandleData(field, 'input', 1, value);\n });\n\n const list = inputValue\n .flatMap((item) =>\n item.content.map((item) =>\n item.type === 'image_url' ? item.image_url.url : undefined,\n ),\n )\n .filter(Boolean)\n .map((item) => ({\n value: `${item}`,\n label: `${item}`,\n inputType: `image` as const,\n }));\n field.context.changeHandleData(field, 'input', 3, list ?? []);\n });\n }),\n ],\n }),\n ),\n }),\n});\n", "import { inject } from 'static-injector';\n\nimport { parse } from 'yaml';\n\nimport { ChatMessageListOutputType } from '@shenghuabi/openai';\n\nimport { uniqBy } from 'es-toolkit';\n\nimport { CHAT_NODE_DEFINE, ResponseType } from '../chat.node.define';\nimport { createAssistantMessage } from '@shenghuabi/openai';\n\nimport { LogService } from '@cyia/external-call';\nimport { NodeRunnerBase } from '../../../../runner/runner-item';\nimport { TemplateFormatService } from '../../../../template-format.service';\nimport { AbortSignalToken, ChatServiceToken } from '../../../../token';\nimport { createLLMData } from '../../../../share/type2';\nimport {\n DEFAULT_CHAT_SCHEMA_KEY,\n RUNNER_ORIGIN_OUTPUT_KEY,\n} from '../../../../share/common/const';\nimport { jsonParse, yamlParse, markdownParse, isChatSchema } from '@cyia/util';\n\nexport class LlmRunner extends NodeRunnerBase {\n #format = inject(TemplateFormatService);\n #chatService = inject(ChatServiceToken);\n #abort = inject(AbortSignalToken);\n #channel = inject(LogService).getToken('chat');\n\n override async run() {\n const { metadataList, obj } = await this.getInputChat();\n const inputJsonSchema = this.inputParams.get(DEFAULT_CHAT_SCHEMA_KEY);\n const nodeResult = this.getParsedNode(CHAT_NODE_DEFINE);\n const config = nodeResult.data.config;\n\n const examples = config.examples;\n const list = nodeResult.data.value;\n const historyList = list.map((item) => {\n const content = this.#format.interpolate(\n item.content\n .map((item) => (item.type === 'text' ? item.text : ''))\n .join('\\n'),\n obj,\n );\n return {\n role: item.role,\n content: [\n { type: 'text', text: content },\n ...item.content\n .filter((item) => item.type === 'image_url')\n .flatMap((item) => {\n if (item.type === 'image_url') {\n return obj[item.image_url.url].map((item: any) => ({\n type: 'image_url',\n image_url: { url: item.data },\n }));\n }\n return item;\n }),\n ],\n };\n }) as ChatMessageListOutputType;\n const schema = isChatSchema(inputJsonSchema?.value);\n if (inputJsonSchema?.value && !schema) {\n throw new Error(\n `JsonSchema传入格式异常,需要: {name:string,schema:object},传入: ${JSON.stringify(inputJsonSchema.value)}`,\n );\n } else if (schema) {\n config.parseBy ??= 'json';\n config.responseFormat ??= 'json_schema';\n }\n if (examples.length) {\n const examplesTemplate: ChatMessageListOutputType = examples\n .filter((item) => item.input.value && item.output.value)\n .flatMap((item) => [\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: this.#exampleFormat(item.input, config.parseBy),\n },\n ],\n },\n {\n role: 'assistant',\n content: [\n {\n type: 'text',\n text: this.#exampleFormat(item.output, config.parseBy),\n },\n ],\n },\n ]);\n let index = historyList.findIndex((item) => item.role === 'system');\n index = index === -1 ? 0 : index + 1;\n historyList.splice(index, 0, ...(examplesTemplate as any[]));\n }\n this.#channel?.info('节点对话配置', config.llm);\n const llm = await this.#chatService.chat(this.mergeChatModel(config.llm));\n\n // doc 用于调试\n // console.log(historyList);\n // 调用位置\n const result = await llm.stream(\n {\n messages: historyList,\n response_format:\n config.responseFormat === 'json_schema'\n ? { type: 'json_schema', json_schema: inputJsonSchema?.value }\n : config.responseFormat === 'json_object'\n ? { type: 'json_object' }\n : undefined,\n },\n { signal: this.#abort },\n );\n\n const streamData = createLLMData({\n node: this.node,\n value: '',\n extra: {\n references: uniqBy(\n metadataList,\n (item) => item.type + item.description + item.tooltip || '',\n ),\n historyList: [],\n delta: '',\n content: '',\n },\n });\n const endRef = this.#chatService.getMetadataEndRef(\n streamData.extra!.references,\n );\n for await (const item of result) {\n const value = endRef ? item.content + endRef : item.content;\n streamData.value = value;\n streamData.extra = { ...streamData.extra, ...item, content: value };\n\n this.emitter.send(streamData);\n }\n const resultContent = streamData.value;\n streamData.extra.delta = '';\n historyList.push(createAssistantMessage(resultContent));\n streamData.extra.historyList = historyList;\n this.emitter.send(streamData);\n return async (outputName: string) => {\n if (outputName === RUNNER_ORIGIN_OUTPUT_KEY) {\n return {\n value: streamData.value,\n dataId: streamData.dataId,\n extra: streamData.extra,\n };\n }\n let value: any;\n switch (config.parseBy) {\n case 'markdown':\n value = markdownParse(resultContent);\n break;\n case 'json':\n value = jsonParse(resultContent);\n break;\n case 'yaml':\n value = yamlParse(resultContent);\n break;\n default:\n value = resultContent;\n break;\n }\n if (typeof value === 'undefined') {\n throw new Error(`解析${config.parseBy}失败`);\n }\n return { value, dataId: streamData.dataId, extra: streamData.extra };\n };\n }\n #exampleFormat(\n data: { format: boolean; value: string },\n format: ResponseType | undefined,\n ) {\n if (data.format) {\n if (format === 'json') {\n return JSON.stringify(parse(data.value));\n }\n return data.value;\n } else {\n return data.value;\n }\n }\n}\n", "import {\n AssistantChatMessageType,\n SystemChatMessageType,\n UserChatMessageType,\n} from '../message.define';\n\nexport function createSystemMessage() {\n return { role: 'system' } as SystemChatMessageType;\n}\nexport function createUserMessage(text?: string) {\n return {\n role: 'user',\n content:\n typeof text === 'string' ? [{ type: 'text', text: '' }] : undefined,\n } as UserChatMessageType;\n}\nexport function createAssistantMessage(text: string = '') {\n return {\n role: 'assistant',\n content: [{ type: 'text', text }],\n } as AssistantChatMessageType;\n}\n", "import { computed, inject, Injector } from 'static-injector';\nimport {\n AbortSignalToken,\n ChatServiceToken,\n CurrentCallNodeToken,\n CurrentContextToken,\n CurrentNodeToken,\n InputParamsToken,\n ModelOptionsToken,\n} from '../token';\nexport type RunnerResult = Promise<\n (output: string) => Promise<{ extra?: any; value: any }>\n>;\nexport type OutputResult = ReturnType<Awaited<RunnerResult>>;\nimport * as v from 'valibot';\nimport { WorkflowEmitter } from '../share';\n\nimport { isEmptyInput, isStringArray } from '@cyia/util';\nimport { ChatMetadata } from '../share/type';\nimport { ChatModelOptions } from '@shenghuabi/openai';\nimport { omitBy } from 'es-toolkit';\nimport { defaultsDeep } from 'es-toolkit/compat';\nimport { ModelInputConfig } from '../share/common';\nexport class NodeRunnerBase {\n protected node = inject(CurrentNodeToken);\n protected callNode = inject(CurrentCallNodeToken);\n protected context = inject(CurrentContextToken);\n // protected useInput = inject(UseInputToken);\n protected inputParams = inject(InputParamsToken);\n protected injector = inject(Injector);\n protected emitter = inject(WorkflowEmitter);\n protected abortSignal = inject(AbortSignalToken);\n async run(): RunnerResult {\n throw new Error('待实现');\n }\n\n inputs$$ = computed(() => {\n const obj = {} as Record<string, { value: any; extra?: any }>;\n for (const input of this.node.inputs) {\n if (!input.type) {\n const data = this.inputParams.get(input.value);\n if (!data) {\n if (input.optional) {\n continue;\n } else {\n throw new Error(`缺少输入参数: ${input.value}`);\n }\n }\n obj[input.value] = data;\n }\n }\n return obj;\n });\n inputValueObject$$ = computed(() =>\n Object.entries(this.inputs$$()).reduce(\n (obj, item) => {\n obj[item[0]] = item[1].value;\n return obj;\n },\n {} as Record<string, any>,\n ),\n );\n inputMetadataList$$ = computed(() =>\n Object.values(this.inputs$$()).map((item) => item.extra?.metadata),\n );\n getInputMetadata(input: string) {\n return this.inputs$$()[input].extra?.metadata;\n }\n async getInputChat() {\n const metadataList: ChatMetadata[] = [];\n const obj = {} as Record<string, any>;\n const errorList: string[] = [];\n for (const input of this.node.inputs) {\n if (!input.type) {\n const data = this.inputParams.get(input.value)!;\n if (!data) {\n if (input.optional) {\n continue;\n } else {\n errorList.push(input.value);\n continue;\n }\n }\n\n if (input.inputType === 'image') {\n obj[input.value] = data?.value;\n } else if (isStringArray(data?.value)) {\n obj[input.value] = data.value.join('\\n');\n } else {\n obj[input.value] = data?.value ?? '';\n }\n\n const extra = data?.extra;\n if (extra) {\n if (Array.isArray(extra)) {\n for (const { metadata } of extra) {\n if (!metadata) {\n continue;\n }\n metadataList.push(metadata);\n }\n } else {\n if (extra.metadata) {\n metadataList.push(extra.metadata);\n }\n }\n }\n }\n }\n if (errorList.length) {\n throw new Error(`缺少输入参数: ${errorList.join(',')}`);\n }\n return { metadataList, obj };\n }\n #modelConfig = inject(ModelOptionsToken);\n mergeChatModel(input?: ModelInputConfig): Partial<ChatModelOptions> {\n const chatService = this.injector.get(ChatServiceToken);\n let presetConfig = {};\n if (input?.name) {\n presetConfig = chatService.getModelConfig(input.name) ?? {};\n }\n return input\n ? defaultsDeep(\n omitBy(\n {\n model: input.model,\n baseURL: input?.baseURL,\n },\n isEmptyInput,\n ),\n omitBy(presetConfig, isEmptyInput),\n omitBy(this.#modelConfig ?? {}, isEmptyInput),\n )\n : this.#modelConfig;\n }\n\n getParsedNode<T extends v.BaseSchema<any, any, any>>(schema: T) {\n const result = v.safeParse(schema, this.node);\n if (result.success) {\n return result.output;\n }\n if (!PROD_ENV) {\n console.log(result.issues);\n }\n throw new Error(JSON.stringify(result.issues));\n }\n}\n", "import { InjectionToken, Signal } from 'static-injector';\nimport { WorkflowRunnerContext } from './runner/workflow-runner.service';\nimport {\n WorkflowRunnerEnvironmentParams,\n WorkflowRunnerInputs,\n} from './share/type2';\n\nimport { ChatModelOptions, ChatParamsListDefine } from '@shenghuabi/openai';\nimport {\n ParsedNode,\n ResolvedInputNode,\n ResolvedWorkflow,\n} from './share/handle-node';\nimport { ChatProviderService } from '@shenghuabi/openai';\nimport { ChatMetadata } from './share/type';\nimport * as v from 'valibot';\n\nexport const CurrentWorkflowToken = new InjectionToken<ResolvedWorkflow>(\n 'CurrentWorkflow',\n);\nexport const InputsToken = new InjectionToken<WorkflowRunnerInputs>('Input');\nexport const CurrentNodeToken = new InjectionToken<ParsedNode>('CurrentNode');\nexport const CurrentCallNodeToken = new InjectionToken<ParsedNode>(\n 'CurrentCallNode',\n);\nexport const CurrentContextToken = new InjectionToken<WorkflowRunnerContext>(\n 'CurrentContext',\n);\nexport const InputParamsToken = new InjectionToken<WorkflowRunnerInputs>(\n 'InputParams',\n);\nexport const ParentContextToken = new InjectionToken<\n WorkflowRunnerContext | undefined\n>('ParentContext');\n/** 把输出当作什么来用, */\nexport const UseInputToken = new InjectionToken<ResolvedInputNode>('UseInput');\nexport const AbortSignalToken = new InjectionToken<AbortSignal | undefined>(\n 'AbortSignal',\n);\n/** 环境变量 自动注入, */\nexport const EnviromentParametersToken = new InjectionToken<\n WorkflowRunnerEnvironmentParams | undefined\n>('EnviromentParameters');\nexport const ModelOptionsToken = new InjectionToken<ChatModelOptions>(\n 'ModelOptions',\n);\nexport const WorkflowConfigToken = new InjectionToken<\n Signal<{\n /** 工作流保存的位置 */\n dir: string;\n }>\n>('WorkflowConfig');\n// 对话的服务\nexport const ChatServiceToken = new InjectionToken<{\n chat: (\n input: Partial<ChatModelOptions>,\n ) => ReturnType<ChatProviderService['create']>;\n getMetadataEndRef: (list?: ChatMetadata[]) => string;\n getModelConfig: (name?: string) => v.InferOutput<typeof ChatParamsListDefine>;\n}>('ChatServiceToken');\n", "import hbs1 from 'handlebars';\nimport { RootStaticInjectOptions } from 'static-injector';\nimport { uniqBy } from 'es-toolkit';\nimport { Liquid } from 'liquidjs';\nimport { ChatInput2 } from './share';\nconst engine = new Liquid({ jsTruthy: true });\ntype hbsStat = hbs.AST.BlockStatement | hbs.AST.MustacheStatement;\nexport class TemplateFormatService extends RootStaticInjectOptions {\n interpolate(input: string, value: Record<string, any>) {\n return hbs1.compile(input, { noEscape: true, preventIndent: true })(value, {\n allowProtoPropertiesByDefault: true,\n });\n }\n entryInterpolate(\n payload: Record<string, any>,\n knowledge: string,\n content: string,\n embedingTemplate?: {\n value?: string;\n enable: boolean;\n },\n ) {\n return embedingTemplate?.enable\n ? this.interpolate(embedingTemplate!.value ?? '', {\n ENTRY: { ...payload, knowledge },\n })\n : content;\n }\n /** 用于模板格式化 */\n parse(input: string) {\n let list;\n try {\n list = hbs1.parse(input).body;\n } catch (error) {\n return { list: [], error: true };\n }\n const result = this.#getActionInputVariable(list as any, new Set());\n return {\n list: [...result.set].map((item) => {\n if (result.object.has(item)) {\n return { inputType: 'object' as const, value: item };\n }\n return { inputType: 'string' as const, value: item };\n }) as ChatInput2[],\n error: false,\n };\n }\n // 只有条件用,没太大用途\n async parserJs(input: string) {\n const { createCssSelectorForTs } =\n await import('@cyia/code-util/selector/ts');\n try {\n const selector = createCssSelectorForTs(input, { scriptKind: 1 });\n\n // 1.无法准确区分object和string难度过大,即使区分了endsWith这种方法还是会被认为是Object<浪费时间\n const objectList = selector.queryAll(\n `:not(DotToken)+Identifier,*::children(0)[tag=Identifier]`,\n );\n\n return {\n list: uniqBy(objectList, (item) => item.value).map((item) => ({\n inputType: 'object' as const,\n value: item.value,\n })),\n error: false,\n };\n } catch (error) {\n return {\n error: true,\n list: [],\n };\n }\n }\n async parserLiquid(input: string) {\n try {\n const result = engine.parse(input);\n const varList = new Set<string>();\n const proxyObj = new Proxy(\n {},\n {\n getOwnPropertyDescriptor(target, p) {\n return undefined;\n },\n has(target, p) {\n varList.add(p as any);\n return true;\n },\n },\n );\n await engine.render(result, proxyObj);\n return {\n list: [...varList].map((item) => ({\n inputType: 'object' as const,\n value: item,\n })),\n error: false,\n };\n } catch (error) {\n return { error: true, list: [] };\n }\n }\n #getActionInputVariable(body: hbsStat[], nowSet: Set<string>) {\n const obj = {\n set: new Set<string>(),\n block: {} as Record<string, any>,\n object: new Set<string>(),\n };\n for (const item of body) {\n if (item.type === 'MustacheStatement') {\n if (item.path.type === 'PathExpression') {\n const path = item.path as hbs.AST.PathExpression;\n // 仅记录父级变量,也就是说允许传入对象,输入之类的\n obj.set.add(path.parts[0]);\n if (path.parts.length > 1) {\n obj.object.add(path.parts[0]);\n }\n } else {\n }\n } else {\n //if (item.type === 'BlockStatement')\n // if (item.path.original === 'if') {\n // const ifVar = item.params[0].original as string;\n // const result = getActionInputVariable(\n // item.program.body,\n // new Set([...nowSet, ...obj.set]) as any,\n // );\n // obj.block[ifVar] = result;\n // }\n // throw new Error(`不支持:${item.type}`);\n }\n }\n return obj;\n }\n}\n", "import { NODE_COMMON } from '../common';\nimport { CHAT_NODE_DEFINE } from '../chat.node.define';\nimport { LlmRunner } from './llm.runner';\n\nexport const ChatMainConfig = {\n ...NODE_COMMON,\n runner: LlmRunner,\n define: CHAT_NODE_DEFINE,\n} as const;\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 { inject } from 'static-injector';\nimport { NodeRunnerBase } from '../../../../runner/runner-item';\nimport { TemplateFormatService } from '../../../../template-format.service';\n\nexport class TextareaRunner extends NodeRunnerBase {\n #format = inject(TemplateFormatService);\n override async run() {\n const obj = this.inputValueObject$$();\n const str = this.node.data.value as string;\n return async () => ({ value: this.#format.interpolate(str, obj) });\n }\n}\n", "import { NODE_COMMON } from '../common';\nimport { TextareaRunner } from './textarea.runner';\n\nexport const TextMainConfig = {\n ...NODE_COMMON,\n runner: TextareaRunner,\n} as const;\n", "import { inject } from 'static-injector';\n\nimport { WorkflowParserService } from './workflow-parser.service';\nimport { InlineParametersService } from './preset/inline-runner.service';\nimport { WorkflowRunnerService } from './runner/workflow-runner.service';\nimport {\n WorkflowRunnerEnvironmentParams,\n WorkflowStreamData,\n} from './share/type2';\nimport { ChatMessageListInputType, ChatModelOptions } from '@shenghuabi/openai';\nimport { Subject } from 'rxjs';\nimport { ContextBuildService } from './preset/context-build.service';\nimport {\n RawWorkflowNode,\n ResolvedWorkflow,\n WorkflowData,\n} from './share/handle-node';\nimport { Observer } from './share/type';\n\nexport class WorkflowExecService {\n #parser = inject(WorkflowParserService);\n #parameterResolve = inject(InlineParametersService);\n #runner = inject(WorkflowRunnerService);\n parse(data: WorkflowData) {\n return this.#parser.parse(data);\n }\n\n async runParse(\n define: ResolvedWorkflow,\n input: {\n input?: Record<string, any>;\n context?: Record<string, any>;\n modelOptions?: ChatModelOptions;\n environmentParameters?: WorkflowRunnerEnvironmentParams;\n },\n ob?: Observer<any, any>,\n abortSignal?: AbortSignal,\n ) {\n const parameters = await this.#parameterResolve.run(input);\n return this.#runner.run(\n define!,\n {\n input: new Map(\n Object.entries(parameters.value).map(([key, value]) => [key, value]),\n ),\n environmentParameters: input.environmentParameters,\n modelOptions: input.modelOptions,\n },\n ob,\n abortSignal,\n );\n }\n async exec(\n data: Pick<WorkflowData, 'flow'> & { define?: ResolvedWorkflow },\n input: {\n input?: Record<string, any>;\n context?: Record<string, any>;\n modelOptions?: ChatModelOptions;\n environmentParameters?: WorkflowRunnerEnvironmentParams;\n },\n options: { showError?: boolean },\n ob?: Observer<any, any>,\n abortSignal?: AbortSignal,\n ) {\n let define;\n if (data.define) {\n define = data.define;\n } else {\n const res = this.#parser.parse(data);\n if (res.error) {\n throw res.error;\n }\n define = res.data;\n }\n\n try {\n return await this.runParse(define!, input, ob, abortSignal);\n } catch (error) {\n if (options.showError) {\n // vscode.window.showErrorMessage(errorFormatByNode(error));\n // todo 异常抛出\n }\n throw error;\n }\n }\n #contextBuild = inject(ContextBuildService);\n async agentChat(\n input: {\n input: Record<string, any>;\n context: Record<string, RawWorkflowNode>;\n template: ChatMessageListInputType;\n modelOptions?: ChatModelOptions;\n environmentParameters?: WorkflowRunnerEnvironmentParams;\n inlineMode: boolean;\n },\n fn: (item: WorkflowStreamData) => any,\n abort?: AbortSignal,\n ) {\n const workflow = this.#contextBuild.createWorkflow(input, input.inlineMode);\n const subject = new Subject();\n subject.subscribe({\n next: (value) => {\n fn(value as any);\n },\n });\n const result2 = await this.exec(\n { flow: workflow as any },\n {\n ...input,\n },\n { showError: true },\n subject,\n abort,\n );\n\n return result2;\n }\n}\n", "import { inject } from 'static-injector';\nimport { InlineBuilderService } from './inline-build.service';\nimport { WorkflowRunnerService } from '../runner/workflow-runner.service';\nimport { WorkflowRunnerEnvironmentParams } from '../share/type2';\nimport { ChatModelOptions } from '@shenghuabi/openai';\n\nexport class InlineParametersService {\n #inlineBuild = inject(InlineBuilderService);\n #workflowRunner = inject(WorkflowRunnerService);\n async run(input: {\n input?: Record<string, any>;\n context?: Record<string, any>;\n modelOptions?: ChatModelOptions;\n environmentParameters?: WorkflowRunnerEnvironmentParams;\n }) {\n const define = this.#inlineBuild.createDefine({\n ...input,\n input: input.input ?? {},\n context: input.context ?? {},\n });\n const result2 = await this.#workflowRunner.run(define.data!, {\n input: new Map(\n Object.entries(input.input || {}).map(([key, value]) => [\n key,\n { value: value },\n ]),\n ),\n environmentParameters: input.environmentParameters,\n modelOptions: input.modelOptions,\n });\n return result2 as { value: Record<string, { value: any; extra?: any }> };\n }\n}\n", "import { inject } from 'static-injector';\nimport { TemplateFormatService } from '../template-format.service';\nimport { WorkflowParserService } from '../workflow-parser.service';\nimport { ParametersRunner } from '../runner/parameters.runner';\nimport { RawWorkflowNode } from '../share/handle-node';\n\nexport class InlineBuilderService {\n template = inject(TemplateFormatService);\n parser = inject(WorkflowParserService);\n #createLLMNode(input: {\n input: Record<string, any>;\n context: any;\n }): RawWorkflowNode {\n return {\n id: '1',\n data: {\n handle: {\n input: [\n Object.keys({ ...input.input, ...input.context }).map(\n (value, i) => ({\n id: `${i}`,\n value: value,\n label: ``,\n }),\n ),\n ],\n output: [\n [\n {\n id: '1',\n label: '',\n value: '输出',\n },\n ],\n ],\n },\n },\n type: ParametersRunner.runnerName,\n };\n }\n #createEdge(\n llmNode: RawWorkflowNode,\n context: Record<string, RawWorkflowNode>,\n ) {\n const edgeList: {\n source: string;\n sourceHandle: string;\n target: string;\n targetHandle: string;\n }[] = [];\n const addEdge = (node: RawWorkflowNode) => {\n const inputHandleList = node.data.handle?.input.flat() || [];\n for (const inputHandle of inputHandleList) {\n const item = context[inputHandle.value];\n if (!item) {\n continue;\n }\n // todo 其实应该可以选择的\n // 必须存在至少一个输出,否则没法返回\n const sourceHandle = item.data.handle!.output[0][0];\n edgeList.push({\n source: item.id,\n sourceHandle: sourceHandle!.id,\n // 自身\n target: node.id,\n targetHandle: inputHandle.id,\n });\n }\n };\n for (const ctxKey in context) {\n const node = context[ctxKey];\n addEdge(node);\n }\n addEdge(llmNode);\n\n return edgeList;\n }\n #createWorkflow(input: { input: Record<string, any>; context: any }) {\n const chatNode = this.#createLLMNode(input);\n const edges = this.#createEdge(chatNode, input.context);\n return {\n nodes: [chatNode, ...Object.values(input.context)],\n edges: edges,\n };\n }\n createDefine(input: {\n input: Record<string, any>;\n context: Record<string, any>;\n }) {\n return this.parser.parse({ flow: this.#createWorkflow(input) as any });\n }\n}\n", "import { NodeRunnerBase } from './runner-item';\n// 内部使用,用于预计算\nexport class ParametersRunner extends NodeRunnerBase {\n static runnerName = 'parameters' as const;\n\n override async run() {\n return async () => ({ value: this.inputs$$() });\n }\n}\n", "import { createInjector, inject, Injector } from 'static-injector';\n\nimport {\n AbortSignalToken,\n CurrentCallNodeToken,\n CurrentContextToken,\n CurrentNodeToken,\n CurrentWorkflowToken,\n InputParamsToken,\n ModelOptionsToken,\n ParentContextToken,\n EnviromentParametersToken,\n UseInputToken,\n InputsToken,\n} from '../token';\nimport { ItemRunnerObject } from './define';\nimport {\n createResultData,\n WorkflowRunnerInputs,\n WorkflowRunnerInputsWithContext,\n} from '../share/type2';\nimport { WorkflowEmitter } from '../share/workflow.emit';\nimport { NodeRunnerBase, OutputResult, RunnerResult } from './runner-item';\nimport { AbortSignalError, RunnerError } from './runner-error';\n\n// 内联\n\nimport {\n ParsedNode,\n ResolvedInputNode,\n ResolvedWorkflow,\n} from '../share/handle-node';\nimport { LogService, LogType } from '@cyia/external-call';\nimport { Observer } from '../share';\nimport { WorkflowPluginService } from '../plugin/plugin.service';\nimport { InlineNodeService } from '../inline/inline.service';\n/** 用于上下文start */\nexport const ITERATION_ITEM_SYMBOL = Symbol('ITERATION_ITEM');\nexport class WorkflowRunnerContext {\n #injector = inject(Injector);\n data = inject(CurrentWorkflowToken);\n parent = inject(ParentContextToken);\n #callCache = new Map<string, Awaited<RunnerResult>>();\n #outputCache = new Map<string, Awaited<OutputResult>>();\n inputs = inject(InputsToken);\n #plugin = inject(WorkflowPluginService);\n #emitter = inject(WorkflowEmitter);\n #inlineNode = inject(InlineNodeService);\n\n async #getNodeRunner(type: string) {\n return (\n this.#inlineNode.getNodeRunner(type) ??\n (ItemRunnerObject as any)[type] ??\n (await this.#plugin.getNodeRunner(type))\n );\n }\n getNodeById(id: string): ParsedNode {\n const result = this.data.nodes[id];\n if (!result) {\n return this.parent?.getNodeById(id)!;\n }\n return result;\n }\n /** 调用缓存,同一个上下文内容不可能变化 */\n #getCallCache(id: string): { result: Awaited<RunnerResult> } | undefined {\n if (this.#callCache.has(id)) {\n return { result: this.#callCache.get(id)! };\n }\n return this.parent ? this.parent.#getCallCache(id) : undefined;\n }\n #getOuputCache(id: string): { result: any } | undefined {\n if (this.#outputCache.has(id)) {\n return { result: this.#outputCache.get(id) };\n }\n return this.parent ? this.parent.#getOuputCache(id) : undefined;\n }\n async startRun() {\n // 从最后一个节点开始,反向查询\n const node = this.getNodeById(this.data.end);\n\n return this.#runItem(node);\n }\n async run() {\n // 从最后一个节点开始,反向查询\n const node = this.getNodeById(this.data.end);\n return this.#runItem(node);\n }\n // 当前node 调用 node context\n async #createNodeRunner(\n item: ParsedNode,\n inputParams: WorkflowRunnerInputs,\n callNode?: ParsedNode,\n input?: ResolvedInputNode,\n ) {\n const define = await this.#getNodeRunner(item.type);\n return createInjector({\n providers: [\n define,\n { provide: CurrentNodeToken, useValue: item },\n { provide: CurrentCallNodeToken, useValue: callNode },\n { provide: CurrentContextToken, useValue: this },\n { provide: UseInputToken, useValue: input },\n { provide: InputParamsToken, useValue: inputParams },\n ],\n parent: this.#injector,\n }).get(define as any as typeof NodeRunnerBase);\n }\n #abort = inject(AbortSignalToken);\n async #runItem(\n node: ParsedNode,\n callNode?: ParsedNode,\n input?: ResolvedInputNode,\n ): OutputResult {\n try {\n if (this.#abort?.aborted) {\n throw new AbortSignalError();\n }\n /** 融合了全局输入和上下文传递\n * 手动输入的一般都是对话传递,使用label\n * 非手动的一般都是基于节点传递\n */\n const inputParams: WorkflowRunnerInputs = new Map<any, any>(this.inputs);\n for (const input of node.inputs) {\n if (input.nodeId) {\n const inputNode = this.getNodeById(input.nodeId!);\n // 如果是分类器的起点那么跳过,因为是分类器调用的\n if (\n inputNode.subFlowList?.some(\n (subItem) => subItem.startId === node.id,\n )\n ) {\n // 如果未来要使用,那么就在上下文中加一个symbol,提前传入,在这里get\n continue;\n }\n const result = await this.#runItem(inputNode, node, input);\n\n inputParams.set(input.value, result);\n }\n }\n const nodeRunner = await this.#createNodeRunner(\n node,\n inputParams,\n callNode,\n input,\n );\n const outputList = node.outputs;\n const outputName =\n input?.outputName ?? node.data.outputName ?? outputList[0].value;\n let dataResult = this.#getCallCache(node.id);\n if (dataResult === undefined) {\n {\n const res = await nodeRunner.run();\n dataResult = { result: res };\n this.#callCache.set(node.id, res);\n }\n }\n const outputKey = `${node.id}|${outputName}`;\n const outputResult = this.#getOuputCache(outputKey);\n let returnData;\n if (outputResult === undefined) {\n const res = await dataResult.result(outputName);\n this.#outputCache.set(outputKey, res);\n returnData = res;\n } else {\n returnData = outputResult.result;\n }\n // todo 发射\n this.#emitter.send(\n createResultData({\n ...returnData,\n node: node,\n }),\n );\n return returnData;\n } catch (error) {\n if (\n (error instanceof Error && error.message === 'Request was aborted.') ||\n error instanceof AbortSignalError\n ) {\n return { value: undefined };\n }\n const item = { title: node.data.title || '' };\n if (error instanceof RunnerError) {\n throw error.create(item);\n } else {\n if (error instanceof Error && error.message === 'Connection error.') {\n const newError = new RunnerError(error.cause, [\n { ...item, message: '接口请求失败' },\n ]);\n delete newError.stack;\n throw newError;\n }\n throw new RunnerError(error, [item]);\n }\n }\n }\n}\n\nexport class WorkflowRunnerService {\n #injector = inject(Injector);\n /** 自己使用\n * @internal\n */\n createContext(\n data: ResolvedWorkflow,\n inputs: WorkflowRunnerInputs,\n parent?: WorkflowRunnerContext,\n parentInjector?: Injector,\n ) {\n return createInjector({\n providers: [\n WorkflowRunnerContext,\n { provide: CurrentWorkflowToken, useValue: data },\n { provide: InputsToken, useValue: inputs },\n { provide: ParentContextToken, useValue: parent },\n ],\n parent: parentInjector ?? this.#injector,\n }).get(WorkflowRunnerContext);\n }\n #log?: LogType;\n get log() {\n return (\n this.#log ??\n (this.#log = this.#injector\n .get(LogService, undefined, { optional: true })\n ?.getToken('workflow'))\n );\n }\n\n /** 入口 */\n run(\n data: ResolvedWorkflow,\n input: WorkflowRunnerInputsWithContext,\n ob?: Observer<any, any>,\n signal?: AbortSignal,\n ) {\n this.log?.info('工作流默认对话配置', input.modelOptions);\n const injector = createInjector({\n providers: [\n WorkflowEmitter,\n { provide: AbortSignalToken, useValue: signal },\n {\n provide: EnviromentParametersToken,\n useValue: input.environmentParameters,\n },\n { provide: ModelOptionsToken, useValue: input.modelOptions },\n ],\n parent: this.#injector,\n });\n\n const runner = this.createContext(data, input.input, undefined, injector);\n if (ob) {\n injector.get(WorkflowEmitter).setObserver(ob);\n }\n return runner.startRun();\n }\n}\n", "import { inject } from 'static-injector';\nimport { NodeRunnerBase } from './runner-item';\nimport { EnviromentParametersToken } from '../token';\n// 用于对话桥接使用\nexport class InlineInputItemRunner extends NodeRunnerBase {\n static runnerName = 'inlineInputItem' as const;\n #env = inject(EnviromentParametersToken);\n\n override async run() {\n return async () => {\n const key = this.node.inputs[0].value;\n const result = this.#env;\n if (!result) {\n throw new Error(`读取上下文参数[${key}]失败`);\n }\n return { value: result![key] };\n };\n }\n}\n", "import { inject } from 'static-injector';\nimport { NodeRunnerBase } from './runner-item';\nimport { EnviromentParametersToken } from '../token';\nexport class InputParamsRunner extends NodeRunnerBase {\n #env = inject(EnviromentParametersToken);\n override async run() {\n return async () => {\n const value = this.#env;\n if (!value) {\n throw new Error(`读取上下文失败`);\n }\n return {\n value: value,\n };\n };\n }\n}\n", "import { NodeRunnerBase } from './runner-item';\nimport { ITERATION_ITEM_SYMBOL } from './workflow-runner.service';\nexport class IterationStartRunner extends NodeRunnerBase {\n override async run() {\n return async () => this.inputParams.get(ITERATION_ITEM_SYMBOL)!;\n }\n}\n", "import { NodeRunnerBase } from './runner-item';\nimport {\n ITERATION_ITEM_SYMBOL,\n WorkflowRunnerService,\n} from './workflow-runner.service';\nimport { isIterable } from '@cyia/util';\nexport class IterationRunner extends NodeRunnerBase {\n override async run() {\n const data = this.inputParams.get(this.node.inputs[0].value);\n if (!data) {\n throw new Error('输入节点为空');\n }\n const extra = data.extra;\n const value = data.value;\n if (!isIterable(value)) {\n throw new Error(`输入值不是可迭代(数组)类型: ${JSON.stringify(value)}`);\n }\n const resultList: {\n extra?: any;\n value: any;\n }[] = [];\n let index = 0;\n for (const item of value) {\n const newInputs = new Map(this.inputParams);\n newInputs.set(ITERATION_ITEM_SYMBOL, {\n value: item,\n extra: extra?.[index],\n });\n try {\n resultList.push(\n await this.injector\n .get(WorkflowRunnerService)\n .createContext(\n //迭代只有一个子流\n this.node.subFlowList![0].flow!,\n newInputs,\n this.context,\n this.injector,\n )\n .run(),\n );\n } catch (error) {\n throw new Error(`执行第${index}出现异常`, { cause: error });\n }\n index++;\n }\n\n const list = resultList.reduce(\n (obj, item) => {\n obj.value.push(item.value);\n obj.extra.push(item.extra);\n return obj;\n },\n { value: [], extra: [] },\n );\n return async (outputName: string) => {\n if (outputName === 'flat') {\n return { value: list.value.flat(999), extra: list.extra.flat(999) };\n }\n return list;\n };\n }\n}\n", "import { WorkflowNodeType } from '../share/workflow.const';\nimport { InlineInputItemRunner } from './inline-input-item.runner';\nimport { InputParamsRunner } from './input-params.runner';\nimport { IterationStartRunner } from './iteration-start.runner';\nimport { IterationRunner } from './iteration.runner';\nimport { ParametersRunner } from './parameters.runner';\n\nexport const ItemRunnerObject = {\n [WorkflowNodeType.iteration]: IterationRunner,\n [WorkflowNodeType.iterationStart]: IterationStartRunner,\n [WorkflowNodeType.inputParams]: InputParamsRunner,\n [WorkflowNodeType.parameters]: ParametersRunner,\n [WorkflowNodeType.inlineInputItem]: InlineInputItemRunner,\n};\n", "export class RunnerError extends Error {\n #origin: any;\n #list;\n constructor(origin: any, list: { title: string; message?: string }[]) {\n super(\n `${list\n .map(\n (item) => `[${item.title}]${item.message ? ': ' + item.message : ''}`,\n )\n .join('<-')}`,\n { cause: origin },\n );\n this.#origin = origin;\n this.#list = list;\n delete this.stack;\n this.name = `节点运行异常`;\n }\n create(item: { title: string }) {\n this.#list.push(item);\n return new RunnerError(this.#origin, this.#list);\n }\n}\nexport class AbortSignalError extends Error {}\n", "import { inject } from 'static-injector';\nimport { TemplateFormatService } from '../template-format.service';\nimport { WorkflowParserService } from '../workflow-parser.service';\nimport { uniq } from 'es-toolkit';\nimport { InlineInputItemRunner } from '../runner/inline-input-item.runner';\nimport { WorkflowNodeType } from '../share/workflow.const';\nimport { ChatMessageListInputType } from '@shenghuabi/openai/define';\nimport { generateHandle } from '../share/util';\nimport { DEFAULT_INPUT_KEY } from '../share/const';\n/** 对话使用 */\nexport class ContextBuildService {\n template = inject(TemplateFormatService);\n parser = inject(WorkflowParserService);\n createWorkflow(\n input: {\n template: ChatMessageListInputType;\n input: Record<string, any>;\n context: any;\n },\n inlineMode: boolean,\n ) {\n // 每一个输入都变成一个节点\n const result = this.template\n .parse(\n input.template\n .flatMap((item) =>\n item.content.map((item) => (item.type === 'text' ? item.text : '')),\n )\n .join('\\n'),\n )\n .list.map((item) => item.value);\n // 改成一个input(所有的进入)输入\n const inputList = [\n uniq([\n ...Object.keys({ ...input.input, ...input.context }),\n ...result,\n ]).map((value, i) => ({\n id: `${i}`,\n value: value,\n label: ``,\n })),\n ];\n\n /** 自建出口 */\n const chatNode = {\n id: '2',\n data: {\n title: '对话',\n handle: {\n input: inputList,\n output: [\n [\n {\n id: '1',\n label: '',\n value: '输出',\n },\n ],\n ],\n },\n value: input.template,\n config: {},\n },\n type: 'chat',\n };\n if (!inlineMode) {\n return {\n nodes: [chatNode],\n edges: [],\n };\n }\n /** 自建入口 */\n const inputParamsNode = {\n id: '1',\n type: WorkflowNodeType.inputParams,\n data: {\n handle: {\n input: [\n [\n {\n ...generateHandle(DEFAULT_INPUT_KEY, ''),\n inputType: 'object',\n },\n ],\n ],\n output: [[{ id: '1', value: 'default', label: '' }]],\n },\n },\n };\n /** 自建中间节点 */\n const bridgeNodeList = inputList.flat().map((item, i) => ({\n id: `${InlineInputItemRunner.runnerName}-${i}`,\n type: InlineInputItemRunner.runnerName,\n data: {\n handle: {\n input: [[{ id: '1', value: item.value, label: '' }]],\n output: [\n [\n {\n id: '1',\n label: '',\n value: '输出',\n },\n ],\n ],\n },\n },\n }));\n const bridgeEdgeList1 = inputList.flat().map((item, i) => ({\n source: inputParamsNode.id,\n sourceHandle: '1',\n target: `${InlineInputItemRunner.runnerName}-${i}`,\n targetHandle: '1',\n }));\n const bridgeEdgeList2 = inputList.flat().map((item, i) => ({\n source: `${InlineInputItemRunner.runnerName}-${i}`,\n sourceHandle: '1',\n target: chatNode.id,\n targetHandle: item.id,\n }));\n return {\n nodes: [inputParamsNode, chatNode, ...bridgeNodeList],\n edges: [...bridgeEdgeList1, ...bridgeEdgeList2],\n };\n }\n}\n", "import { computed, inject } from 'static-injector';\nimport { createNormalizeVfs, path } from '@cyia/vfs2';\nimport { WorkflowFileService } from './workflow-file.service';\nimport { Stats } from 'fs';\nimport { WorkflowData } from './share/handle-node';\nimport { WorkflowConfigToken } from './token';\nexport class WorkflowSelectService {\n #fileService = inject(WorkflowFileService);\n #config = inject(WorkflowConfigToken);\n #vfs = computed(() =>\n createNormalizeVfs({\n dir: this.#config().dir,\n }),\n );\n async get({ workflowName }: { workflowName: string }): Promise<WorkflowData> {\n const wfPath = path.join(this.#config().dir, `${workflowName}.workflow`);\n if (!(await this.#vfs().exists(wfPath))) {\n const isDefulat = workflowName.startsWith('default/');\n throw new Error(\n `工作流: [${workflowName}] 不存在;${isDefulat ? '您可以尝试[同步内置工作流]更新' : ''}`,\n );\n }\n const file = this.#fileService.getFile(wfPath);\n return await file.readOriginData();\n }\n\n async getList() {\n const rootDir = this.#config().dir;\n const list: { relPath: string; name: string; stat: Stats }[] = [];\n const listG = this.#vfs().glob('**/*.workflow', { cwd: rootDir });\n for await (const item of listG) {\n const relFilePath = item.replace(/\\.workflow$/, '');\n list.push({\n relPath: relFilePath,\n name: path.basename(relFilePath),\n stat: await this.#vfs().stat(item),\n });\n }\n return list;\n }\n}\n", "import { inject } from 'static-injector';\n// 一块迁移\nimport { path } from '@cyia/vfs2';\n// 注入\nimport { WorkflowData } from './share/handle-node';\nimport { WorkflowConfigToken } from './token';\nimport { RawFile } from '@cyia/bundle-file';\n/** 工作流文件 */\nexport class WorkflowFileService {\n #config = inject(WorkflowConfigToken);\n #fileMap = new Map<string, RawFile>();\n\n getFile(filePath: string) {\n const nFilePath = path.normalize(filePath);\n let file = this.#fileMap.get(nFilePath);\n if (!file) {\n file = new RawFile<WorkflowData>(nFilePath);\n this.#fileMap.set(nFilePath, file);\n }\n return file;\n }\n /** 关闭已打开的默认工作流文件 */\n async closeDefulatFile() {\n // 注入目录\n const dir = path.join(this.#config().dir, 'default');\n for (const [filePath, file] of this.#fileMap) {\n if (filePath.startsWith(dir)) {\n await file.close();\n this.#fileMap.delete(filePath);\n }\n }\n }\n async remove(filePath: string) {\n const nFilePath = path.normalize(filePath);\n const file = this.#fileMap.get(nFilePath);\n if (!file) {\n return;\n }\n await file.close();\n this.#fileMap.delete(nFilePath);\n }\n}\n", "import { InlineNodeService } from './inline/inline.service';\nimport { WorkflowPluginService } from './plugin/plugin.service';\nimport { ContextBuildService } from './preset/context-build.service';\nimport { InlineBuilderService } from './preset/inline-build.service';\nimport { InlineParametersService } from './preset/inline-runner.service';\nimport { WorkflowRunnerService } from './runner/workflow-runner.service';\nimport { WorkflowFileService } from './workflow-file.service';\nimport { ChatServiceToken, WorkflowConfigToken } from './token';\nimport { WorkflowExecService } from './workflow-exec.service';\nimport { WorkflowParserService } from './workflow-parser.service';\nimport { WorkflowSelectService } from './workflow-select.service';\n\nexport const WORKFLOW_MODULE = {\n provider: [\n WorkflowExecService,\n WorkflowParserService,\n WorkflowSelectService,\n WorkflowFileService,\n ContextBuildService,\n InlineBuilderService,\n WorkflowRunnerService,\n InlineParametersService,\n WorkflowPluginService,\n InlineNodeService,\n ],\n token: {\n ChatServiceToken,\n WorkflowConfigToken,\n },\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["computed", "inject", "InjectionToken", "Injector", "WorkflowNodeType", "uniqBy", "actions", "actions", "v", "renderConfig", "condition", "actions", "v", "actions", "setComponent", "condition", "v", "setComponent", "actions", "condition", "v4", "v", "v", "actions", "condition", "setComponent", "actions", "setComponent", "condition", "item", "value", "inject", "parse", "uniqBy", "computed", "v", "computed", "path", "inject", "item", "uniqBy", "parse", "NODE_COMMON", "inject", "inject", "NODE_COMMON", "item", "uniqBy", "InjectionToken", "inject", "computed", "Injector", "inject", "inject", "inject", "inject", "createInjector", "inject", "Injector", "inject", "inject", "inject", "inject", "LogService", "inject", "Injector", "createInjector", "input", "LogService", "signal", "inject", "inject", "inject", "item", "inject", "computed", "inject", "path", "inject", "inject", "inject", "computed", "path"]
|
|
4
|
+
"sourcesContent": ["import {\n computed,\n createInjector,\n inject,\n InjectionToken,\n Injector,\n} from 'static-injector';\n\nimport Graph from 'graphology';\nimport {\n getConnectedEdges,\n getIncomers,\n getOutgoers,\n Node,\n} from '@xyflow/react';\nimport { WorkflowNodeType } from './share/workflow.const';\nimport { uniqBy } from 'es-toolkit';\n// 自定义可拓展\n\nimport {\n flatFilterHandleList,\n HandleNode,\n ResolvedWorkflow,\n WorkflowData,\n WorkflowNodeData,\n} from './share/handle-node';\nimport { InlineNodeService } from './inline/inline.service';\nimport { WorkflowPluginService } from './plugin/plugin.service';\nimport * as InlineNodeObj from './inline/node/index.node';\nexport interface ResolvedWorkflowResult {\n data?: ResolvedWorkflow;\n /** todo 应该更详细,进行错误定位 */\n error?: {\n message?: string;\n nodeId?: string;\n };\n manualInput?: boolean;\n}\ntype SubGroupList = Record<\n string,\n { key: string; startId?: string; nodeList: Node<WorkflowNodeData>[] }[]\n>;\nclass WorkflowParserContext {\n // fixme 或许可以分离,单独调用,然后加上children查找,不过那样就太慢了\n #childUseNodeSet = new Set<string>();\n\n constructor(\n /** 主列表或者说某一级的列表 */\n public list: Node<WorkflowNodeData>[],\n private subObject: SubGroupList,\n private data: Pick<WorkflowData, 'flow'>,\n /** 父级节点 */\n private parentNode?: Node<WorkflowNodeData>,\n /** inputList 使用,全局统计 */\n private userInputParams: HandleNode[] = [],\n /** 父级上下文 */\n private parent?: WorkflowParserContext,\n ) {}\n /** 只能子级在本级找不到节点时调用父级使用 */\n protected childUseDefine(\n id: string,\n parentId?: string,\n ): Node<WorkflowNodeData> | undefined {\n const define = this.list.find((item) => item.id === id);\n if (!define) {\n return this.parent?.childUseDefine(id, parentId);\n }\n if (id !== parentId) {\n this.#childUseNodeSet.add(id);\n }\n return define;\n }\n #getParentNodeDefine(id: string) {\n return this.parent?.childUseDefine(id, this.parentNode?.id);\n }\n parseItem(): ResolvedWorkflowResult {\n const graph = new Graph({ multi: true });\n const { nodes, edges } = this.data.flow;\n const nodeData: ResolvedWorkflow = { nodes: {}, end: undefined } as any;\n this.list.forEach((node) => {\n graph.addNode(node.id);\n });\n for (const node of this.list) {\n const handle = {\n output: flatFilterHandleList(node.data.handle?.output),\n };\n /** 连接的所有边,包括input+output */\n const cEdges = getConnectedEdges([node], edges);\n /** 输入连接点,可以理解为参数 */\n const inputNodes = getIncomers(node, nodes, cEdges);\n /** 定义输入,大于等于边,因为可能有没连接的 */\n const inputHandleList = flatFilterHandleList(node.data.handle?.input);\n /** 保存的是handle和对应的nodeid? */\n const inputParams = [];\n // 其实就是找依赖,以及确定输入\n for (const item of inputHandleList) {\n const targetHandle = item.id;\n /** 连接到当前节点的边 */\n const linkedEdges = cEdges.filter(\n (item) =>\n item.targetHandle === targetHandle && item.target === node.id,\n );\n // 未来可以改成多个节点就变成数组?\n if (linkedEdges.length > 1) {\n return {\n error: {\n message: `${node.id}:不支持多个节点连接一个输入点`,\n nodeId: node.id,\n },\n };\n }\n if (linkedEdges.length === 1) {\n const linkedEdge = linkedEdges[0];\n /** 找到连接的输入节点 */\n const linkedNode = inputNodes.find(\n (item) => item.id === linkedEdge.source,\n )!;\n const linkedOuput = flatFilterHandleList(\n linkedNode.data.handle?.output,\n ).find((item) => item.id === linkedEdge.sourceHandle);\n\n inputParams.push({\n ...item,\n nodeId: linkedNode.id,\n outputName: linkedOuput!.value,\n });\n //这个节点只能是当前或者说是它的祖先提供,不能是其他的地方的\n if (!graph.hasNode(linkedNode.id)) {\n // 只允许在父级查找\n if (!this.#getParentNodeDefine(linkedNode.id)) {\n return {\n error: {\n message: `${linkedNode.id}:未找到连接节点,只能读取到当前及祖先范围内的节点`,\n nodeId: linkedNode.id,\n },\n };\n }\n graph.addNode(linkedNode.id);\n }\n graph.addEdge(linkedNode.id, node.id);\n } else {\n // 没有输入节点就需要统计\n inputParams.push({ ...item });\n // 过滤连接点\n if (item.type) {\n continue;\n }\n this.userInputParams.push(item);\n }\n }\n nodeData.nodes[node.id] = {\n data: node.data,\n //输入用\n inputs: inputParams,\n outputs: handle.output,\n type: node.type! as any,\n id: node.id,\n };\n // 如果这个节点是一个块级节点\n if (this.subObject[node.id]) {\n // 多出口\n for (let index = 0; index < this.subObject[node.id].length; index++) {\n const { key, startId, nodeList } = this.subObject[node.id][index];\n const instance = new WorkflowParserContext(\n nodeList,\n this.subObject,\n this.data,\n node,\n this.userInputParams,\n this,\n );\n const result = instance.parseItem();\n if (result.error) {\n return { error: { ...result.error } };\n }\n nodeData.nodes[node.id].subFlowList ??= [];\n // todo 一个输出只能有一个连接?\n nodeData.nodes[node.id].subFlowList!.push({\n key: key,\n flow: result.data!,\n startId: startId,\n });\n }\n }\n }\n const outList: string[] = [];\n graph.forEachNode((node) => {\n // 排除自己使用过的节点和有输出连接的的节点\n if (!this.#childUseNodeSet.has(node) && graph.outDegree(node) === 0) {\n outList.push(node);\n }\n });\n if (outList.length > 1) {\n return { error: { message: `计算时存在多个出口` } };\n } else if (outList.length === 0) {\n return { error: { message: `可能出现循环依赖,没有出口` } };\n } else {\n nodeData.end = outList[0];\n nodeData.inputList = uniqBy(\n this.userInputParams,\n (item) => `${item.inputType || 'string'}|${item.value}`,\n ).map((item) => ({\n inputType: item.inputType || 'string',\n value: item.value,\n label: item.label || item.value,\n optional: item.optional,\n }));\n return { data: nodeData };\n }\n }\n}\nclass NodeGroup {\n #group = new Map<string, Node<WorkflowNodeData>[]>();\n #iterationMap = new Map<string, Node<WorkflowNodeData>>();\n addContainerStart(node: Node<WorkflowNodeData>) {\n this.#iterationMap.set(node.parentId!, node);\n }\n getContainerStart(node: Node<WorkflowNodeData>) {\n return this.#iterationMap.get(node.id)!;\n }\n add(node: Node<WorkflowNodeData>) {\n const nodeMap = this.#group.get(node.type! as any) || [];\n nodeMap.push(node);\n this.#group.set(node.type! as any, nodeMap);\n }\n getList(type: string) {\n return this.#group.get(type) || [];\n }\n}\nconst WorkflowDataToken = new InjectionToken<Pick<WorkflowData, 'flow'>>(\n 'WorkflowData',\n);\n/** 预解析,确定范围 */\nclass WorkflowPreParser {\n /**\n * 迭代块:直接找父级parentid就行了\n * 分类块:所有后面的都算他的\n * 重构,所有节点进行迭代\n * 找迭代快,找到后找子级item块,找到后进行output查找+parent==迭代快\n * 找分类,找到后output查找\n * 所有独立块都是找到独立节点后终止\n */\n #nodeGroup = new NodeGroup();\n #data = inject(WorkflowDataToken);\n #plugin = inject(WorkflowPluginService);\n #inlineNodeService = inject(InlineNodeService);\n\n #fullBlockObject$$ = computed(\n () =>\n ({\n ...this.#inlineNodeService.conditionNodeList(),\n ...this.#plugin.conditionNodeList$$(),\n [WorkflowNodeType.iteration]: true,\n }) as Record<string, boolean>,\n );\n #conditionBlockObject$$ = computed(\n () =>\n ({\n ...this.#inlineNodeService.conditionNodeList(),\n ...this.#plugin.conditionNodeList$$(),\n }) as Record<string, boolean>,\n );\n\n parse() {\n const { nodes, edges } = this.#data.flow;\n /** 迭代块内部的 */\n const mainList = [];\n /** 节点的多出口 */\n const subObjectGroup: SubGroupList = {};\n const excludeSet = new Set<string>();\n /** 判断节点是否是块级 */\n const isBlock = (item: Node<WorkflowNodeData>) =>\n this.#fullBlockObject$$()[item.type!];\n const removedList = new Set<string>();\n const getSubNode = (\n node: Node<WorkflowNodeData>,\n subNodeList: Node<WorkflowNodeData>[],\n ) => {\n subNodeList.push(node);\n excludeSet.add(node.id);\n if (!isBlock(node)) {\n getOutgoers(node, nodes, edges).forEach((item) => {\n getSubNode(item, subNodeList);\n });\n }\n };\n let manualInput = false;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (node.data.excludeUsage) {\n removedList.add(node.id);\n nodes.splice(i, 1);\n i--;\n continue;\n }\n if (node.type === 'input-params') {\n manualInput ||= !!node.data.config?.['manualInput'];\n } else if (isBlock(node)) {\n this.#nodeGroup.add(node);\n } else if (node.type === WorkflowNodeType.iterationStart) {\n this.#nodeGroup.addContainerStart(node);\n }\n }\n\n Object.keys(this.#fullBlockObject$$())\n .flatMap((key) => this.#nodeGroup.getList(key))\n .forEach((node) => {\n const outputList = subObjectGroup[node.id] || [];\n subObjectGroup[node.id] = outputList;\n // 这个是包裹级块\n if (node.type === WorkflowNodeType.iteration) {\n const subNodeList: Node<WorkflowNodeData>[] = [];\n const startNode = this.#nodeGroup.getContainerStart(node);\n getSubNode(startNode, subNodeList);\n outputList.push({\n nodeList: uniqBy(subNodeList, (item) => item.id),\n startId: startNode.id,\n key: `[default]`,\n });\n }\n // 这个是分支级块\n else if (this.#conditionBlockObject$$()[node.type!]) {\n const cEdges = getConnectedEdges([node], edges);\n const children = getOutgoers(node, nodes, cEdges);\n const outputHandleList = flatFilterHandleList(\n node.data.handle!.output,\n );\n for (const outputHandle of outputHandleList) {\n // 一个出口可能被多次使用\n const outputEdgeList = cEdges.filter(\n (edge) => edge.sourceHandle === outputHandle.id,\n );\n\n if (!outputEdgeList.length) {\n throw new Error(`[${node.data.title || ''}]节点上发现未连接出口`);\n }\n for (const childNode of children.filter(({ id }) =>\n outputEdgeList.some(({ target }) => target === id),\n )) {\n const subNodeList: Node<WorkflowNodeData>[] = [];\n getSubNode(childNode, subNodeList);\n outputList.push({\n nodeList: uniqBy(subNodeList, (item) => item.id),\n startId: childNode.id,\n key: outputHandle.value,\n });\n }\n }\n }\n });\n\n for (const node of nodes) {\n if (excludeSet.has(node.id)) {\n continue;\n }\n mainList.push(node);\n }\n\n return {\n list: mainList,\n subObjectGroup,\n manualInput,\n edges: edges.filter(\n (edge) =>\n !removedList.has(edge.source) && !removedList.has(edge.target),\n ),\n };\n }\n}\n/** 先将图解析为定义 */\nexport class WorkflowParserService {\n #injector = inject(Injector);\n #inlineNode = inject(InlineNodeService);\n constructor() {\n this.#inlineNode.register(InlineNodeObj);\n }\n /**\n * 1.如果出现孤立节点,那么需要判断是不是子级引用\n * 2.子级引用本级别找不到,那么需要找父级\n */\n /**\n * 边有id,通过source 找到连接的节点\n *\n */\n parse(data: Pick<WorkflowData, 'flow'>): ResolvedWorkflowResult {\n const injector = createInjector({\n providers: [\n WorkflowPreParser,\n { provide: WorkflowDataToken, useValue: data },\n ],\n parent: this.#injector,\n });\n const preInstance = injector.get(WorkflowPreParser);\n\n const result = preInstance.parse();\n if (!result.list.length) {\n return {\n error: {\n message: '无可用节点',\n },\n };\n }\n const instance = new WorkflowParserContext(\n result.list,\n result.subObjectGroup,\n { ...data, flow: { ...data.flow, edges: result.edges } },\n );\n return { ...instance.parseItem(), manualInput: result.manualInput };\n }\n}\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 { 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 { NodeItemDefine } from '../type/type';\n\nexport class InlineNodeService {\n inlineList: NodeItemDefine[] = [];\n register(obj: Record<string, NodeItemDefine>) {\n Object.values(obj).forEach((item) => {\n this.inlineList.push(item);\n });\n }\n getInlineList() {\n return this.inlineList;\n }\n conditionNodeList() {\n return this.inlineList\n .filter((item) => item.nodeMode === 'condition')\n .reduce(\n (obj, item) => {\n obj[item.type] = true;\n return obj;\n },\n {} as Record<string, boolean>,\n );\n }\n // todo 类型\n getNodeRunner(type: string) {\n return this.inlineList.find((item) => item.type === type)?.runner;\n }\n}\n", "import { computed, signal } from 'static-injector';\nimport { NodeItemDefine } from '../type/type';\n\nexport class WorkflowPluginService {\n nodeList = signal<NodeItemDefine[]>([]);\n setNodeObject(obj: NodeItemDefine[]) {\n this.nodeList.set(obj);\n }\n\n conditionNodeList$$ = computed(() =>\n this.nodeList()\n .filter((item) => item.nodeMode === 'condition')\n .reduce(\n (obj, item) => {\n obj[item.type] = true;\n return obj;\n },\n {} as Record<string, any>,\n ),\n );\n // todo 类型\n getNodeRunner(type: string) {\n return this.nodeList().find((item) => item.type === type)!.runner;\n }\n}\n", "export * from './chat/main';\nexport * from './text/main';\n", "export const DEFAULT_INPUT_KEY = `[INPUT]`;\nexport const HelpObj = {\n templateVarLine: `- 变量定义格式: {{xx}},{{xx.yy}}`,\n pathTodoLine: `- **TODO** 接收传入路径而不是指定`,\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", "import {\n actions,\n condition,\n renderConfig,\n} 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(v.string(), v.title('问题'), actions.class.top('flex-1')),\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(v.string(), v.title('回答'), actions.class.top('flex-1')),\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 condition({\n environments: ['display'],\n actions: [\n renderConfig({\n hidden: true,\n }),\n ],\n }),\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 * as v from 'valibot';\nimport { renderConfig, setComponent } from '@piying/view-angular-core';\nimport { condition } from '@piying/valibot-visit';\nconst HiddenAction = condition<any>({\n environments: ['display', 'default'],\n actions: [setComponent(''), renderConfig({ hidden: true })],\n});\nconst AnyHiddenList = v.pipe(\n v.array(v.pipe(v.optional(v.any()), HiddenAction)),\n setComponent(''),\n renderConfig({ hidden: true }),\n);\nexport const HandleDataDefine = v.pipe(\n v.optional(\n v.object({\n output: AnyHiddenList,\n input: AnyHiddenList,\n }),\n ),\n HiddenAction,\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 renderConfig,\n} from '@piying/view-angular-core';\nimport { condition } from '@piying/valibot-visit';\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 condition({\n environments: ['display', 'config'],\n actions: [asVirtualGroup()],\n }),\n ),\n ]),\n condition({\n environments: ['display', 'config'],\n actions: [asVirtualGroup()],\n }),\n condition({\n environments: ['display'],\n actions: [\n renderConfig({\n hidden: true,\n }),\n ],\n }),\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", "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 * as v from 'valibot';\n\nimport {\n actions,\n condition,\n setComponent,\n valueChange,\n} 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.looseObject({\n data: v.looseObject({\n config: 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 }),\n actions.wrappers.patch(['div']),\n actions.class.top('grid auto-rows-auto gap-2'),\n ),\n value: v.pipe(\n v.custom<ChatMessageListInputType>(Boolean),\n setComponent(''),\n condition({\n environments: ['display'],\n actions: [\n setComponent('prompt-list'),\n valueChange((fn) => {\n fn({ list: [undefined] }).subscribe(({ list: [value], field }) => {\n if (!Array.isArray(value)) {\n return;\n }\n const inputValue: ChatMessageListInputType = value ?? [];\n field.context\n .parseTemplate(\n inputValue.flatMap((item) =>\n item.content.map((item) =>\n item.type === 'text' ? item.text : '',\n ),\n ),\n )\n .then((value: any) => {\n if (!value) {\n return;\n }\n field.context.changeHandleData(field, 'input', 1, value);\n });\n\n const list = inputValue\n .flatMap((item) =>\n item.content.map((item) =>\n item.type === 'image_url' ? item.image_url.url : undefined,\n ),\n )\n .filter(Boolean)\n .map((item) => ({\n value: `${item}`,\n label: `${item}`,\n inputType: `image` as const,\n }));\n field.context.changeHandleData(field, 'input', 3, list ?? []);\n });\n }),\n ],\n }),\n ),\n }),\n});\n", "import { inject } from 'static-injector';\n\nimport { parse } from 'yaml';\n\nimport { ChatMessageListOutputType } from '@shenghuabi/openai';\n\nimport { uniqBy } from 'es-toolkit';\n\nimport { CHAT_NODE_DEFINE, ResponseType } from '../chat.node.define';\nimport { createAssistantMessage } from '@shenghuabi/openai';\n\nimport { LogService } from '@cyia/external-call';\nimport { NodeRunnerBase } from '../../../../runner/runner-item';\nimport { TemplateFormatService } from '../../../../template-format.service';\nimport { AbortSignalToken, ChatServiceToken } from '../../../../token';\nimport { createLLMData } from '../../../../share/type2';\nimport {\n DEFAULT_CHAT_SCHEMA_KEY,\n RUNNER_ORIGIN_OUTPUT_KEY,\n} from '../../../../share/common/const';\nimport { jsonParse, yamlParse, markdownParse, isChatSchema } from '@cyia/util';\n\nexport class LlmRunner extends NodeRunnerBase {\n #format = inject(TemplateFormatService);\n #chatService = inject(ChatServiceToken);\n #abort = inject(AbortSignalToken);\n #channel = inject(LogService).getToken('chat');\n\n override async run() {\n const { metadataList, obj } = await this.getInputChat();\n const inputJsonSchema = this.inputParams.get(DEFAULT_CHAT_SCHEMA_KEY);\n const nodeResult = this.getParsedNode(CHAT_NODE_DEFINE);\n const config = nodeResult.data.config;\n\n const examples = config.examples;\n const list = nodeResult.data.value;\n const historyList = list.map((item) => {\n const content = this.#format.interpolate(\n item.content\n .map((item) => (item.type === 'text' ? item.text : ''))\n .join('\\n'),\n obj,\n );\n return {\n role: item.role,\n content: [\n { type: 'text', text: content },\n ...item.content\n .filter((item) => item.type === 'image_url')\n .flatMap((item) => {\n if (item.type === 'image_url') {\n return obj[item.image_url.url].map((item: any) => ({\n type: 'image_url',\n image_url: { url: item.data },\n }));\n }\n return item;\n }),\n ],\n };\n }) as ChatMessageListOutputType;\n const schema = isChatSchema(inputJsonSchema?.value);\n if (inputJsonSchema?.value && !schema) {\n throw new Error(\n `JsonSchema传入格式异常,需要: {name:string,schema:object},传入: ${JSON.stringify(inputJsonSchema.value)}`,\n );\n } else if (schema) {\n config.parseBy ??= 'json';\n config.responseFormat ??= 'json_schema';\n }\n if (examples.length) {\n const examplesTemplate: ChatMessageListOutputType = examples\n .filter((item) => item.input.value && item.output.value)\n .flatMap((item) => [\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: this.#exampleFormat(item.input, config.parseBy),\n },\n ],\n },\n {\n role: 'assistant',\n content: [\n {\n type: 'text',\n text: this.#exampleFormat(item.output, config.parseBy),\n },\n ],\n },\n ]);\n let index = historyList.findIndex((item) => item.role === 'system');\n index = index === -1 ? 0 : index + 1;\n historyList.splice(index, 0, ...(examplesTemplate as any[]));\n }\n this.#channel?.info('节点对话配置', config.llm);\n const llm = await this.#chatService.chat(this.mergeChatModel(config.llm));\n\n // doc 用于调试\n // console.log(historyList);\n // 调用位置\n const result = await llm.stream(\n {\n messages: historyList,\n response_format:\n config.responseFormat === 'json_schema'\n ? { type: 'json_schema', json_schema: inputJsonSchema?.value }\n : config.responseFormat === 'json_object'\n ? { type: 'json_object' }\n : undefined,\n },\n { signal: this.#abort },\n );\n\n const streamData = createLLMData({\n node: this.node,\n value: '',\n extra: {\n references: uniqBy(\n metadataList,\n (item) => item.type + item.description + item.tooltip || '',\n ),\n historyList: [],\n delta: '',\n content: '',\n },\n });\n const endRef = this.#chatService.getMetadataEndRef(\n streamData.extra!.references,\n );\n for await (const item of result) {\n const value = endRef ? item.content + endRef : item.content;\n streamData.value = value;\n streamData.extra = { ...streamData.extra, ...item, content: value };\n\n this.emitter.send(streamData);\n }\n const resultContent = streamData.value;\n streamData.extra.delta = '';\n historyList.push(createAssistantMessage(resultContent));\n streamData.extra.historyList = historyList;\n this.emitter.send(streamData);\n return async (outputName: string) => {\n if (outputName === RUNNER_ORIGIN_OUTPUT_KEY) {\n return {\n value: streamData.value,\n dataId: streamData.dataId,\n extra: streamData.extra,\n };\n }\n let value: any;\n switch (config.parseBy) {\n case 'markdown':\n value = markdownParse(resultContent);\n break;\n case 'json':\n value = jsonParse(resultContent);\n break;\n case 'yaml':\n value = yamlParse(resultContent);\n break;\n default:\n value = resultContent;\n break;\n }\n if (typeof value === 'undefined') {\n throw new Error(`解析${config.parseBy}失败`);\n }\n return { value, dataId: streamData.dataId, extra: streamData.extra };\n };\n }\n #exampleFormat(\n data: { format: boolean; value: string },\n format: ResponseType | undefined,\n ) {\n if (data.format) {\n if (format === 'json') {\n return JSON.stringify(parse(data.value));\n }\n return data.value;\n } else {\n return data.value;\n }\n }\n}\n", "import {\n AssistantChatMessageType,\n SystemChatMessageType,\n UserChatMessageType,\n} from '../message.define';\n\nexport function createSystemMessage() {\n return { role: 'system' } as SystemChatMessageType;\n}\nexport function createUserMessage(text?: string) {\n return {\n role: 'user',\n content:\n typeof text === 'string' ? [{ type: 'text', text: '' }] : undefined,\n } as UserChatMessageType;\n}\nexport function createAssistantMessage(text: string = '') {\n return {\n role: 'assistant',\n content: [{ type: 'text', text }],\n } as AssistantChatMessageType;\n}\n", "import { computed, inject, Injector } from 'static-injector';\nimport {\n AbortSignalToken,\n ChatServiceToken,\n CurrentCallNodeToken,\n CurrentContextToken,\n CurrentNodeToken,\n InputParamsToken,\n ModelOptionsToken,\n} from '../token';\nexport type RunnerResult = Promise<\n (output: string) => Promise<{ extra?: any; value: any }>\n>;\nexport type OutputResult = ReturnType<Awaited<RunnerResult>>;\nimport * as v from 'valibot';\nimport { WorkflowEmitter } from '../share';\n\nimport { isEmptyInput, isStringArray } from '@cyia/util';\nimport { ChatMetadata } from '../share/type';\nimport { ChatModelOptions } from '@shenghuabi/openai';\nimport { omitBy } from 'es-toolkit';\nimport { defaultsDeep } from 'es-toolkit/compat';\nimport { ModelInputConfig } from '../share/common';\nexport class NodeRunnerBase {\n protected node = inject(CurrentNodeToken);\n protected callNode = inject(CurrentCallNodeToken);\n protected context = inject(CurrentContextToken);\n // protected useInput = inject(UseInputToken);\n protected inputParams = inject(InputParamsToken);\n protected injector = inject(Injector);\n protected emitter = inject(WorkflowEmitter);\n protected abortSignal = inject(AbortSignalToken);\n async run(): RunnerResult {\n throw new Error('待实现');\n }\n\n inputs$$ = computed(() => {\n const obj = {} as Record<string, { value: any; extra?: any }>;\n for (const input of this.node.inputs) {\n if (!input.type) {\n const data = this.inputParams.get(input.value);\n if (!data) {\n if (input.optional) {\n continue;\n } else {\n throw new Error(`缺少输入参数: ${input.value}`);\n }\n }\n obj[input.value] = data;\n }\n }\n return obj;\n });\n inputValueObject$$ = computed(() =>\n Object.entries(this.inputs$$()).reduce(\n (obj, item) => {\n obj[item[0]] = item[1].value;\n return obj;\n },\n {} as Record<string, any>,\n ),\n );\n inputMetadataList$$ = computed(() =>\n Object.values(this.inputs$$()).map((item) => item.extra?.metadata),\n );\n getInputMetadata(input: string) {\n return this.inputs$$()[input].extra?.metadata;\n }\n async getInputChat() {\n const metadataList: ChatMetadata[] = [];\n const obj = {} as Record<string, any>;\n const errorList: string[] = [];\n for (const input of this.node.inputs) {\n if (!input.type) {\n const data = this.inputParams.get(input.value)!;\n if (!data) {\n if (input.optional) {\n continue;\n } else {\n errorList.push(input.value);\n continue;\n }\n }\n\n if (input.inputType === 'image') {\n obj[input.value] = data?.value;\n } else if (isStringArray(data?.value)) {\n obj[input.value] = data.value.join('\\n');\n } else {\n obj[input.value] = data?.value ?? '';\n }\n\n const extra = data?.extra;\n if (extra) {\n if (Array.isArray(extra)) {\n for (const { metadata } of extra) {\n if (!metadata) {\n continue;\n }\n metadataList.push(metadata);\n }\n } else {\n if (extra.metadata) {\n metadataList.push(extra.metadata);\n }\n }\n }\n }\n }\n if (errorList.length) {\n throw new Error(`缺少输入参数: ${errorList.join(',')}`);\n }\n return { metadataList, obj };\n }\n #modelConfig = inject(ModelOptionsToken);\n mergeChatModel(input?: ModelInputConfig): Partial<ChatModelOptions> {\n const chatService = this.injector.get(ChatServiceToken);\n let presetConfig = {};\n if (input?.name) {\n presetConfig = chatService.getModelConfig(input.name) ?? {};\n }\n return input\n ? defaultsDeep(\n omitBy(\n {\n model: input.model,\n baseURL: input?.baseURL,\n },\n isEmptyInput,\n ),\n omitBy(presetConfig, isEmptyInput),\n omitBy(this.#modelConfig ?? {}, isEmptyInput),\n )\n : this.#modelConfig;\n }\n\n getParsedNode<T extends v.BaseSchema<any, any, any>>(schema: T) {\n const result = v.safeParse(schema, this.node);\n if (result.success) {\n return result.output;\n }\n if (!PROD_ENV) {\n console.log(result.issues);\n }\n throw new Error(JSON.stringify(result.issues));\n }\n}\n", "import { InjectionToken, Signal } from 'static-injector';\nimport { WorkflowRunnerContext } from './runner/workflow-runner.service';\nimport {\n WorkflowRunnerEnvironmentParams,\n WorkflowRunnerInputs,\n} from './share/type2';\n\nimport { ChatModelOptions, ChatParamsListDefine } from '@shenghuabi/openai';\nimport {\n ParsedNode,\n ResolvedInputNode,\n ResolvedWorkflow,\n} from './share/handle-node';\nimport { ChatProviderService } from '@shenghuabi/openai';\nimport { ChatMetadata } from './share/type';\nimport * as v from 'valibot';\n\nexport const CurrentWorkflowToken = new InjectionToken<ResolvedWorkflow>(\n 'CurrentWorkflow',\n);\nexport const InputsToken = new InjectionToken<WorkflowRunnerInputs>('Input');\nexport const CurrentNodeToken = new InjectionToken<ParsedNode>('CurrentNode');\nexport const CurrentCallNodeToken = new InjectionToken<ParsedNode>(\n 'CurrentCallNode',\n);\nexport const CurrentContextToken = new InjectionToken<WorkflowRunnerContext>(\n 'CurrentContext',\n);\nexport const InputParamsToken = new InjectionToken<WorkflowRunnerInputs>(\n 'InputParams',\n);\nexport const ParentContextToken = new InjectionToken<\n WorkflowRunnerContext | undefined\n>('ParentContext');\n/** 把输出当作什么来用, */\nexport const UseInputToken = new InjectionToken<ResolvedInputNode>('UseInput');\nexport const AbortSignalToken = new InjectionToken<AbortSignal | undefined>(\n 'AbortSignal',\n);\n/** 环境变量 自动注入, */\nexport const EnviromentParametersToken = new InjectionToken<\n WorkflowRunnerEnvironmentParams | undefined\n>('EnviromentParameters');\nexport const ModelOptionsToken = new InjectionToken<ChatModelOptions>(\n 'ModelOptions',\n);\nexport const WorkflowConfigToken = new InjectionToken<\n Signal<{\n /** 工作流保存的位置 */\n dir: string;\n }>\n>('WorkflowConfig');\n// 对话的服务\nexport const ChatServiceToken = new InjectionToken<{\n chat: (\n input: Partial<ChatModelOptions>,\n ) => ReturnType<ChatProviderService['create']>;\n getMetadataEndRef: (list?: ChatMetadata[]) => string;\n getModelConfig: (name?: string) => v.InferOutput<typeof ChatParamsListDefine>;\n}>('ChatServiceToken');\n", "import hbs1 from 'handlebars';\nimport { RootStaticInjectOptions } from 'static-injector';\nimport { uniqBy } from 'es-toolkit';\nimport { Liquid } from 'liquidjs';\nimport { ChatInput2 } from './share';\nconst engine = new Liquid({ jsTruthy: true });\ntype hbsStat = hbs.AST.BlockStatement | hbs.AST.MustacheStatement;\nexport class TemplateFormatService extends RootStaticInjectOptions {\n interpolate(input: string, value: Record<string, any>) {\n return hbs1.compile(input, { noEscape: true, preventIndent: true })(value, {\n allowProtoPropertiesByDefault: true,\n });\n }\n entryInterpolate(\n payload: Record<string, any>,\n knowledge: string,\n content: string,\n embedingTemplate?: {\n value?: string;\n enable: boolean;\n },\n ) {\n return embedingTemplate?.enable\n ? this.interpolate(embedingTemplate!.value ?? '', {\n ENTRY: { ...payload, knowledge },\n })\n : content;\n }\n /** 用于模板格式化 */\n parse(input: string) {\n let list;\n try {\n list = hbs1.parse(input).body;\n } catch (error) {\n return { list: [], error: true };\n }\n const result = this.#getActionInputVariable(list as any, new Set());\n return {\n list: [...result.set].map((item) => {\n if (result.object.has(item)) {\n return { inputType: 'object' as const, value: item };\n }\n return { inputType: 'string' as const, value: item };\n }) as ChatInput2[],\n error: false,\n };\n }\n // 只有条件用,没太大用途\n async parserJs(input: string) {\n const { createCssSelectorForTs } =\n await import('@cyia/code-util/selector/ts');\n try {\n const selector = createCssSelectorForTs(input, { scriptKind: 1 });\n\n // 1.无法准确区分object和string难度过大,即使区分了endsWith这种方法还是会被认为是Object<浪费时间\n const objectList = selector.queryAll(\n `:not(DotToken)+Identifier,*::children(0)[tag=Identifier]`,\n );\n\n return {\n list: uniqBy(objectList, (item) => item.value).map((item) => ({\n inputType: 'object' as const,\n value: item.value,\n })),\n error: false,\n };\n } catch (error) {\n return {\n error: true,\n list: [],\n };\n }\n }\n async parserLiquid(input: string) {\n try {\n const result = engine.parse(input);\n const varList = new Set<string>();\n const proxyObj = new Proxy(\n {},\n {\n getOwnPropertyDescriptor(target, p) {\n return undefined;\n },\n has(target, p) {\n varList.add(p as any);\n return true;\n },\n },\n );\n await engine.render(result, proxyObj);\n return {\n list: [...varList].map((item) => ({\n inputType: 'object' as const,\n value: item,\n })),\n error: false,\n };\n } catch (error) {\n return { error: true, list: [] };\n }\n }\n #getActionInputVariable(body: hbsStat[], nowSet: Set<string>) {\n const obj = {\n set: new Set<string>(),\n block: {} as Record<string, any>,\n object: new Set<string>(),\n };\n for (const item of body) {\n if (item.type === 'MustacheStatement') {\n if (item.path.type === 'PathExpression') {\n const path = item.path as hbs.AST.PathExpression;\n // 仅记录父级变量,也就是说允许传入对象,输入之类的\n obj.set.add(path.parts[0]);\n if (path.parts.length > 1) {\n obj.object.add(path.parts[0]);\n }\n } else {\n }\n } else {\n //if (item.type === 'BlockStatement')\n // if (item.path.original === 'if') {\n // const ifVar = item.params[0].original as string;\n // const result = getActionInputVariable(\n // item.program.body,\n // new Set([...nowSet, ...obj.set]) as any,\n // );\n // obj.block[ifVar] = result;\n // }\n // throw new Error(`不支持:${item.type}`);\n }\n }\n return obj;\n }\n}\n", "import { NODE_COMMON } from '../common';\nimport { CHAT_NODE_DEFINE } from '../chat.node.define';\nimport { LlmRunner } from './llm.runner';\n\nexport const ChatMainConfig = {\n ...NODE_COMMON,\n runner: LlmRunner,\n define: CHAT_NODE_DEFINE,\n} as const;\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 { inject } from 'static-injector';\nimport { NodeRunnerBase } from '../../../../runner/runner-item';\nimport { TemplateFormatService } from '../../../../template-format.service';\n\nexport class TextareaRunner extends NodeRunnerBase {\n #format = inject(TemplateFormatService);\n override async run() {\n const obj = this.inputValueObject$$();\n const str = this.node.data.value as string;\n return async () => ({ value: this.#format.interpolate(str, obj) });\n }\n}\n", "import { NODE_COMMON } from '../common';\nimport { TextareaRunner } from './textarea.runner';\n\nexport const TextMainConfig = {\n ...NODE_COMMON,\n runner: TextareaRunner,\n} as const;\n", "import { inject } from 'static-injector';\n\nimport { WorkflowParserService } from './workflow-parser.service';\nimport { InlineParametersService } from './preset/inline-runner.service';\nimport { WorkflowRunnerService } from './runner/workflow-runner.service';\nimport {\n WorkflowRunnerEnvironmentParams,\n WorkflowStreamData,\n} from './share/type2';\nimport { ChatMessageListInputType, ChatModelOptions } from '@shenghuabi/openai';\nimport { Subject } from 'rxjs';\nimport { ContextBuildService } from './preset/context-build.service';\nimport {\n RawWorkflowNode,\n ResolvedWorkflow,\n WorkflowData,\n} from './share/handle-node';\nimport { Observer } from './share/type';\n\nexport class WorkflowExecService {\n #parser = inject(WorkflowParserService);\n #parameterResolve = inject(InlineParametersService);\n #runner = inject(WorkflowRunnerService);\n parse(data: WorkflowData) {\n return this.#parser.parse(data);\n }\n\n async runParse(\n define: ResolvedWorkflow,\n input: {\n input?: Record<string, any>;\n context?: Record<string, any>;\n modelOptions?: ChatModelOptions;\n environmentParameters?: WorkflowRunnerEnvironmentParams;\n },\n ob?: Observer<any, any>,\n abortSignal?: AbortSignal,\n ) {\n const parameters = await this.#parameterResolve.run(input);\n return this.#runner.run(\n define!,\n {\n input: new Map(\n Object.entries(parameters.value).map(([key, value]) => [key, value]),\n ),\n environmentParameters: input.environmentParameters,\n modelOptions: input.modelOptions,\n },\n ob,\n abortSignal,\n );\n }\n async exec(\n data: Pick<WorkflowData, 'flow'> & { define?: ResolvedWorkflow },\n input: {\n input?: Record<string, any>;\n context?: Record<string, any>;\n modelOptions?: ChatModelOptions;\n environmentParameters?: WorkflowRunnerEnvironmentParams;\n },\n options: { showError?: boolean },\n ob?: Observer<any, any>,\n abortSignal?: AbortSignal,\n ) {\n let define;\n if (data.define) {\n define = data.define;\n } else {\n const res = this.#parser.parse(data);\n if (res.error) {\n throw res.error;\n }\n define = res.data;\n }\n\n try {\n return await this.runParse(define!, input, ob, abortSignal);\n } catch (error) {\n if (options.showError) {\n // vscode.window.showErrorMessage(errorFormatByNode(error));\n // todo 异常抛出\n }\n throw error;\n }\n }\n #contextBuild = inject(ContextBuildService);\n async agentChat(\n input: {\n input: Record<string, any>;\n context: Record<string, RawWorkflowNode>;\n template: ChatMessageListInputType;\n modelOptions?: ChatModelOptions;\n environmentParameters?: WorkflowRunnerEnvironmentParams;\n inlineMode: boolean;\n },\n fn: (item: WorkflowStreamData) => any,\n abort?: AbortSignal,\n ) {\n const workflow = this.#contextBuild.createWorkflow(input, input.inlineMode);\n const subject = new Subject();\n subject.subscribe({\n next: (value) => {\n fn(value as any);\n },\n });\n const result2 = await this.exec(\n { flow: workflow as any },\n {\n ...input,\n },\n { showError: true },\n subject,\n abort,\n );\n\n return result2;\n }\n}\n", "import { inject } from 'static-injector';\nimport { InlineBuilderService } from './inline-build.service';\nimport { WorkflowRunnerService } from '../runner/workflow-runner.service';\nimport { WorkflowRunnerEnvironmentParams } from '../share/type2';\nimport { ChatModelOptions } from '@shenghuabi/openai';\n\nexport class InlineParametersService {\n #inlineBuild = inject(InlineBuilderService);\n #workflowRunner = inject(WorkflowRunnerService);\n async run(input: {\n input?: Record<string, any>;\n context?: Record<string, any>;\n modelOptions?: ChatModelOptions;\n environmentParameters?: WorkflowRunnerEnvironmentParams;\n }) {\n const define = this.#inlineBuild.createDefine({\n ...input,\n input: input.input ?? {},\n context: input.context ?? {},\n });\n const result2 = await this.#workflowRunner.run(define.data!, {\n input: new Map(\n Object.entries(input.input || {}).map(([key, value]) => [\n key,\n { value: value },\n ]),\n ),\n environmentParameters: input.environmentParameters,\n modelOptions: input.modelOptions,\n });\n return result2 as { value: Record<string, { value: any; extra?: any }> };\n }\n}\n", "import { inject } from 'static-injector';\nimport { TemplateFormatService } from '../template-format.service';\nimport { WorkflowParserService } from '../workflow-parser.service';\nimport { ParametersRunner } from '../runner/parameters.runner';\nimport { RawWorkflowNode } from '../share/handle-node';\n\nexport class InlineBuilderService {\n template = inject(TemplateFormatService);\n parser = inject(WorkflowParserService);\n #createLLMNode(input: {\n input: Record<string, any>;\n context: any;\n }): RawWorkflowNode {\n return {\n id: '1',\n data: {\n handle: {\n input: [\n Object.keys({ ...input.input, ...input.context }).map(\n (value, i) => ({\n id: `${i}`,\n value: value,\n label: ``,\n }),\n ),\n ],\n output: [\n [\n {\n id: '1',\n label: '',\n value: '输出',\n },\n ],\n ],\n },\n },\n type: ParametersRunner.runnerName,\n };\n }\n #createEdge(\n llmNode: RawWorkflowNode,\n context: Record<string, RawWorkflowNode>,\n ) {\n const edgeList: {\n source: string;\n sourceHandle: string;\n target: string;\n targetHandle: string;\n }[] = [];\n const addEdge = (node: RawWorkflowNode) => {\n const inputHandleList = node.data.handle?.input.flat() || [];\n for (const inputHandle of inputHandleList) {\n const item = context[inputHandle.value];\n if (!item) {\n continue;\n }\n // todo 其实应该可以选择的\n // 必须存在至少一个输出,否则没法返回\n const sourceHandle = item.data.handle!.output[0][0];\n edgeList.push({\n source: item.id,\n sourceHandle: sourceHandle!.id,\n // 自身\n target: node.id,\n targetHandle: inputHandle.id,\n });\n }\n };\n for (const ctxKey in context) {\n const node = context[ctxKey];\n addEdge(node);\n }\n addEdge(llmNode);\n\n return edgeList;\n }\n #createWorkflow(input: { input: Record<string, any>; context: any }) {\n const chatNode = this.#createLLMNode(input);\n const edges = this.#createEdge(chatNode, input.context);\n return {\n nodes: [chatNode, ...Object.values(input.context)],\n edges: edges,\n };\n }\n createDefine(input: {\n input: Record<string, any>;\n context: Record<string, any>;\n }) {\n return this.parser.parse({ flow: this.#createWorkflow(input) as any });\n }\n}\n", "import { NodeRunnerBase } from './runner-item';\n// 内部使用,用于预计算\nexport class ParametersRunner extends NodeRunnerBase {\n static runnerName = 'parameters' as const;\n\n override async run() {\n return async () => ({ value: this.inputs$$() });\n }\n}\n", "import { createInjector, inject, Injector } from 'static-injector';\n\nimport {\n AbortSignalToken,\n CurrentCallNodeToken,\n CurrentContextToken,\n CurrentNodeToken,\n CurrentWorkflowToken,\n InputParamsToken,\n ModelOptionsToken,\n ParentContextToken,\n EnviromentParametersToken,\n UseInputToken,\n InputsToken,\n} from '../token';\nimport { ItemRunnerObject } from './define';\nimport {\n createResultData,\n WorkflowRunnerInputs,\n WorkflowRunnerInputsWithContext,\n} from '../share/type2';\nimport { WorkflowEmitter } from '../share/workflow.emit';\nimport { NodeRunnerBase, OutputResult, RunnerResult } from './runner-item';\nimport { AbortSignalError, RunnerError } from './runner-error';\n\n// 内联\n\nimport {\n ParsedNode,\n ResolvedInputNode,\n ResolvedWorkflow,\n} from '../share/handle-node';\nimport { LogService, LogType } from '@cyia/external-call';\nimport { Observer } from '../share';\nimport { WorkflowPluginService } from '../plugin/plugin.service';\nimport { InlineNodeService } from '../inline/inline.service';\n/** 用于上下文start */\nexport const ITERATION_ITEM_SYMBOL = Symbol('ITERATION_ITEM');\nexport class WorkflowRunnerContext {\n #injector = inject(Injector);\n data = inject(CurrentWorkflowToken);\n parent = inject(ParentContextToken);\n #callCache = new Map<string, Awaited<RunnerResult>>();\n #outputCache = new Map<string, Awaited<OutputResult>>();\n inputs = inject(InputsToken);\n #plugin = inject(WorkflowPluginService);\n #emitter = inject(WorkflowEmitter);\n #inlineNode = inject(InlineNodeService);\n\n async #getNodeRunner(type: string) {\n return (\n this.#inlineNode.getNodeRunner(type) ??\n (ItemRunnerObject as any)[type] ??\n (await this.#plugin.getNodeRunner(type))\n );\n }\n getNodeById(id: string): ParsedNode {\n const result = this.data.nodes[id];\n if (!result) {\n return this.parent?.getNodeById(id)!;\n }\n return result;\n }\n /** 调用缓存,同一个上下文内容不可能变化 */\n #getCallCache(id: string): { result: Awaited<RunnerResult> } | undefined {\n if (this.#callCache.has(id)) {\n return { result: this.#callCache.get(id)! };\n }\n return this.parent ? this.parent.#getCallCache(id) : undefined;\n }\n #getOuputCache(id: string): { result: any } | undefined {\n if (this.#outputCache.has(id)) {\n return { result: this.#outputCache.get(id) };\n }\n return this.parent ? this.parent.#getOuputCache(id) : undefined;\n }\n async startRun() {\n // 从最后一个节点开始,反向查询\n const node = this.getNodeById(this.data.end);\n\n return this.#runItem(node);\n }\n async run() {\n // 从最后一个节点开始,反向查询\n const node = this.getNodeById(this.data.end);\n return this.#runItem(node);\n }\n // 当前node 调用 node context\n async #createNodeRunner(\n item: ParsedNode,\n inputParams: WorkflowRunnerInputs,\n callNode?: ParsedNode,\n input?: ResolvedInputNode,\n ) {\n const define = await this.#getNodeRunner(item.type);\n return createInjector({\n providers: [\n define,\n { provide: CurrentNodeToken, useValue: item },\n { provide: CurrentCallNodeToken, useValue: callNode },\n { provide: CurrentContextToken, useValue: this },\n { provide: UseInputToken, useValue: input },\n { provide: InputParamsToken, useValue: inputParams },\n ],\n parent: this.#injector,\n }).get(define as any as typeof NodeRunnerBase);\n }\n #abort = inject(AbortSignalToken);\n async #runItem(\n node: ParsedNode,\n callNode?: ParsedNode,\n input?: ResolvedInputNode,\n ): OutputResult {\n try {\n if (this.#abort?.aborted) {\n throw new AbortSignalError();\n }\n /** 融合了全局输入和上下文传递\n * 手动输入的一般都是对话传递,使用label\n * 非手动的一般都是基于节点传递\n */\n const inputParams: WorkflowRunnerInputs = new Map<any, any>(this.inputs);\n for (const input of node.inputs) {\n if (input.nodeId) {\n const inputNode = this.getNodeById(input.nodeId!);\n // 如果是分类器的起点那么跳过,因为是分类器调用的\n if (\n inputNode.subFlowList?.some(\n (subItem) => subItem.startId === node.id,\n )\n ) {\n // 如果未来要使用,那么就在上下文中加一个symbol,提前传入,在这里get\n continue;\n }\n const result = await this.#runItem(inputNode, node, input);\n\n inputParams.set(input.value, result);\n }\n }\n const nodeRunner = await this.#createNodeRunner(\n node,\n inputParams,\n callNode,\n input,\n );\n const outputList = node.outputs;\n const outputName =\n input?.outputName ?? node.data.outputName ?? outputList[0].value;\n let dataResult = this.#getCallCache(node.id);\n if (dataResult === undefined) {\n {\n const res = await nodeRunner.run();\n dataResult = { result: res };\n this.#callCache.set(node.id, res);\n }\n }\n const outputKey = `${node.id}|${outputName}`;\n const outputResult = this.#getOuputCache(outputKey);\n let returnData;\n if (outputResult === undefined) {\n const res = await dataResult.result(outputName);\n this.#outputCache.set(outputKey, res);\n returnData = res;\n } else {\n returnData = outputResult.result;\n }\n // todo 发射\n this.#emitter.send(\n createResultData({\n ...returnData,\n node: node,\n }),\n );\n return returnData;\n } catch (error) {\n if (\n (error instanceof Error && error.message === 'Request was aborted.') ||\n error instanceof AbortSignalError\n ) {\n return { value: undefined };\n }\n const item = { title: node.data.title || '' };\n if (error instanceof RunnerError) {\n throw error.create(item);\n } else {\n if (error instanceof Error && error.message === 'Connection error.') {\n const newError = new RunnerError(error.cause, [\n { ...item, message: '接口请求失败' },\n ]);\n delete newError.stack;\n throw newError;\n }\n throw new RunnerError(error, [item]);\n }\n }\n }\n}\n\nexport class WorkflowRunnerService {\n #injector = inject(Injector);\n /** 自己使用\n * @internal\n */\n createContext(\n data: ResolvedWorkflow,\n inputs: WorkflowRunnerInputs,\n parent?: WorkflowRunnerContext,\n parentInjector?: Injector,\n ) {\n return createInjector({\n providers: [\n WorkflowRunnerContext,\n { provide: CurrentWorkflowToken, useValue: data },\n { provide: InputsToken, useValue: inputs },\n { provide: ParentContextToken, useValue: parent },\n ],\n parent: parentInjector ?? this.#injector,\n }).get(WorkflowRunnerContext);\n }\n #log?: LogType;\n get log() {\n return (\n this.#log ??\n (this.#log = this.#injector\n .get(LogService, undefined, { optional: true })\n ?.getToken('workflow'))\n );\n }\n\n /** 入口 */\n run(\n data: ResolvedWorkflow,\n input: WorkflowRunnerInputsWithContext,\n ob?: Observer<any, any>,\n signal?: AbortSignal,\n ) {\n this.log?.info('工作流默认对话配置', input.modelOptions);\n const injector = createInjector({\n providers: [\n WorkflowEmitter,\n { provide: AbortSignalToken, useValue: signal },\n {\n provide: EnviromentParametersToken,\n useValue: input.environmentParameters,\n },\n { provide: ModelOptionsToken, useValue: input.modelOptions },\n ],\n parent: this.#injector,\n });\n\n const runner = this.createContext(data, input.input, undefined, injector);\n if (ob) {\n injector.get(WorkflowEmitter).setObserver(ob);\n }\n return runner.startRun();\n }\n}\n", "import { inject } from 'static-injector';\nimport { NodeRunnerBase } from './runner-item';\nimport { EnviromentParametersToken } from '../token';\n// 用于对话桥接使用\nexport class InlineInputItemRunner extends NodeRunnerBase {\n static runnerName = 'inlineInputItem' as const;\n #env = inject(EnviromentParametersToken);\n\n override async run() {\n return async () => {\n const key = this.node.inputs[0].value;\n const result = this.#env;\n if (!result) {\n throw new Error(`读取上下文参数[${key}]失败`);\n }\n return { value: result![key] };\n };\n }\n}\n", "import { inject } from 'static-injector';\nimport { NodeRunnerBase } from './runner-item';\nimport { EnviromentParametersToken } from '../token';\nexport class InputParamsRunner extends NodeRunnerBase {\n #env = inject(EnviromentParametersToken);\n override async run() {\n return async () => {\n const value = this.#env;\n if (!value) {\n throw new Error(`读取上下文失败`);\n }\n return {\n value: value,\n };\n };\n }\n}\n", "import { NodeRunnerBase } from './runner-item';\nimport { ITERATION_ITEM_SYMBOL } from './workflow-runner.service';\nexport class IterationStartRunner extends NodeRunnerBase {\n override async run() {\n return async () => this.inputParams.get(ITERATION_ITEM_SYMBOL)!;\n }\n}\n", "import { NodeRunnerBase } from './runner-item';\nimport {\n ITERATION_ITEM_SYMBOL,\n WorkflowRunnerService,\n} from './workflow-runner.service';\nimport { isIterable } from '@cyia/util';\nexport class IterationRunner extends NodeRunnerBase {\n override async run() {\n const data = this.inputParams.get(this.node.inputs[0].value);\n if (!data) {\n throw new Error('输入节点为空');\n }\n const extra = data.extra;\n const value = data.value;\n if (!isIterable(value)) {\n throw new Error(`输入值不是可迭代(数组)类型: ${JSON.stringify(value)}`);\n }\n const resultList: {\n extra?: any;\n value: any;\n }[] = [];\n let index = 0;\n for (const item of value) {\n const newInputs = new Map(this.inputParams);\n newInputs.set(ITERATION_ITEM_SYMBOL, {\n value: item,\n extra: extra?.[index],\n });\n try {\n resultList.push(\n await this.injector\n .get(WorkflowRunnerService)\n .createContext(\n //迭代只有一个子流\n this.node.subFlowList![0].flow!,\n newInputs,\n this.context,\n this.injector,\n )\n .run(),\n );\n } catch (error) {\n throw new Error(`执行第${index}出现异常`, { cause: error });\n }\n index++;\n }\n\n const list = resultList.reduce(\n (obj, item) => {\n obj.value.push(item.value);\n obj.extra.push(item.extra);\n return obj;\n },\n { value: [], extra: [] },\n );\n return async (outputName: string) => {\n if (outputName === 'flat') {\n return { value: list.value.flat(999), extra: list.extra.flat(999) };\n }\n return list;\n };\n }\n}\n", "import { WorkflowNodeType } from '../share/workflow.const';\nimport { InlineInputItemRunner } from './inline-input-item.runner';\nimport { InputParamsRunner } from './input-params.runner';\nimport { IterationStartRunner } from './iteration-start.runner';\nimport { IterationRunner } from './iteration.runner';\nimport { ParametersRunner } from './parameters.runner';\n\nexport const ItemRunnerObject = {\n [WorkflowNodeType.iteration]: IterationRunner,\n [WorkflowNodeType.iterationStart]: IterationStartRunner,\n [WorkflowNodeType.inputParams]: InputParamsRunner,\n [WorkflowNodeType.parameters]: ParametersRunner,\n [WorkflowNodeType.inlineInputItem]: InlineInputItemRunner,\n};\n", "export class RunnerError extends Error {\n #origin: any;\n #list;\n constructor(origin: any, list: { title: string; message?: string }[]) {\n super(\n `${list\n .map(\n (item) => `[${item.title}]${item.message ? ': ' + item.message : ''}`,\n )\n .join('<-')}`,\n { cause: origin },\n );\n this.#origin = origin;\n this.#list = list;\n delete this.stack;\n this.name = `节点运行异常`;\n }\n create(item: { title: string }) {\n this.#list.push(item);\n return new RunnerError(this.#origin, this.#list);\n }\n}\nexport class AbortSignalError extends Error {}\n", "import { inject } from 'static-injector';\nimport { TemplateFormatService } from '../template-format.service';\nimport { WorkflowParserService } from '../workflow-parser.service';\nimport { uniq } from 'es-toolkit';\nimport { InlineInputItemRunner } from '../runner/inline-input-item.runner';\nimport { WorkflowNodeType } from '../share/workflow.const';\nimport { ChatMessageListInputType } from '@shenghuabi/openai/define';\nimport { generateHandle } from '../share/util';\nimport { DEFAULT_INPUT_KEY } from '../share/const';\n/** 对话使用 */\nexport class ContextBuildService {\n template = inject(TemplateFormatService);\n parser = inject(WorkflowParserService);\n createWorkflow(\n input: {\n template: ChatMessageListInputType;\n input: Record<string, any>;\n context: any;\n },\n inlineMode: boolean,\n ) {\n // 每一个输入都变成一个节点\n const result = this.template\n .parse(\n input.template\n .flatMap((item) =>\n item.content.map((item) => (item.type === 'text' ? item.text : '')),\n )\n .join('\\n'),\n )\n .list.map((item) => item.value);\n // 改成一个input(所有的进入)输入\n const inputList = [\n uniq([\n ...Object.keys({ ...input.input, ...input.context }),\n ...result,\n ]).map((value, i) => ({\n id: `${i}`,\n value: value,\n label: ``,\n })),\n ];\n\n /** 自建出口 */\n const chatNode = {\n id: '2',\n data: {\n title: '对话',\n handle: {\n input: inputList,\n output: [\n [\n {\n id: '1',\n label: '',\n value: '输出',\n },\n ],\n ],\n },\n value: input.template,\n config: {},\n },\n type: 'chat',\n };\n if (!inlineMode) {\n return {\n nodes: [chatNode],\n edges: [],\n };\n }\n /** 自建入口 */\n const inputParamsNode = {\n id: '1',\n type: WorkflowNodeType.inputParams,\n data: {\n handle: {\n input: [\n [\n {\n ...generateHandle(DEFAULT_INPUT_KEY, ''),\n inputType: 'object',\n },\n ],\n ],\n output: [[{ id: '1', value: 'default', label: '' }]],\n },\n },\n };\n /** 自建中间节点 */\n const bridgeNodeList = inputList.flat().map((item, i) => ({\n id: `${InlineInputItemRunner.runnerName}-${i}`,\n type: InlineInputItemRunner.runnerName,\n data: {\n handle: {\n input: [[{ id: '1', value: item.value, label: '' }]],\n output: [\n [\n {\n id: '1',\n label: '',\n value: '输出',\n },\n ],\n ],\n },\n },\n }));\n const bridgeEdgeList1 = inputList.flat().map((item, i) => ({\n source: inputParamsNode.id,\n sourceHandle: '1',\n target: `${InlineInputItemRunner.runnerName}-${i}`,\n targetHandle: '1',\n }));\n const bridgeEdgeList2 = inputList.flat().map((item, i) => ({\n source: `${InlineInputItemRunner.runnerName}-${i}`,\n sourceHandle: '1',\n target: chatNode.id,\n targetHandle: item.id,\n }));\n return {\n nodes: [inputParamsNode, chatNode, ...bridgeNodeList],\n edges: [...bridgeEdgeList1, ...bridgeEdgeList2],\n };\n }\n}\n", "import { computed, inject } from 'static-injector';\nimport { createNormalizeVfs, path } from '@cyia/vfs2';\nimport { WorkflowFileService } from './workflow-file.service';\nimport { Stats } from 'fs';\nimport { WorkflowData } from './share/handle-node';\nimport { WorkflowConfigToken } from './token';\nexport class WorkflowSelectService {\n #fileService = inject(WorkflowFileService);\n #config = inject(WorkflowConfigToken);\n #vfs = computed(() =>\n createNormalizeVfs({\n dir: this.#config().dir,\n }),\n );\n async get({ workflowName }: { workflowName: string }): Promise<WorkflowData> {\n const wfPath = path.join(this.#config().dir, `${workflowName}.workflow`);\n if (!(await this.#vfs().exists(wfPath))) {\n const isDefulat = workflowName.startsWith('default/');\n throw new Error(\n `工作流: [${workflowName}] 不存在;${isDefulat ? '您可以尝试[同步内置工作流]更新' : ''}`,\n );\n }\n const file = this.#fileService.getFile(wfPath);\n return await file.readOriginData();\n }\n\n async getList() {\n const rootDir = this.#config().dir;\n const list: { relPath: string; name: string; stat: Stats }[] = [];\n const listG = this.#vfs().glob('**/*.workflow', { cwd: rootDir });\n for await (const item of listG) {\n const relFilePath = item.replace(/\\.workflow$/, '');\n list.push({\n relPath: relFilePath,\n name: path.basename(relFilePath),\n stat: await this.#vfs().stat(item),\n });\n }\n return list;\n }\n}\n", "import { inject } from 'static-injector';\n// 一块迁移\nimport { path } from '@cyia/vfs2';\n// 注入\nimport { WorkflowData } from './share/handle-node';\nimport { WorkflowConfigToken } from './token';\nimport { RawFile } from '@cyia/bundle-file';\n/** 工作流文件 */\nexport class WorkflowFileService {\n #config = inject(WorkflowConfigToken);\n #fileMap = new Map<string, RawFile>();\n\n getFile(filePath: string) {\n const nFilePath = path.normalize(filePath);\n let file = this.#fileMap.get(nFilePath);\n if (!file) {\n file = new RawFile<WorkflowData>(nFilePath);\n this.#fileMap.set(nFilePath, file);\n }\n return file;\n }\n /** 关闭已打开的默认工作流文件 */\n async closeDefulatFile() {\n // 注入目录\n const dir = path.join(this.#config().dir, 'default');\n for (const [filePath, file] of this.#fileMap) {\n if (filePath.startsWith(dir)) {\n await file.close();\n this.#fileMap.delete(filePath);\n }\n }\n }\n async remove(filePath: string) {\n const nFilePath = path.normalize(filePath);\n const file = this.#fileMap.get(nFilePath);\n if (!file) {\n return;\n }\n await file.close();\n this.#fileMap.delete(nFilePath);\n }\n}\n", "import { InlineNodeService } from './inline/inline.service';\nimport { WorkflowPluginService } from './plugin/plugin.service';\nimport { ContextBuildService } from './preset/context-build.service';\nimport { InlineBuilderService } from './preset/inline-build.service';\nimport { InlineParametersService } from './preset/inline-runner.service';\nimport { WorkflowRunnerService } from './runner/workflow-runner.service';\nimport { WorkflowFileService } from './workflow-file.service';\nimport { ChatServiceToken, WorkflowConfigToken } from './token';\nimport { WorkflowExecService } from './workflow-exec.service';\nimport { WorkflowParserService } from './workflow-parser.service';\nimport { WorkflowSelectService } from './workflow-select.service';\n\nexport const WORKFLOW_MODULE = {\n provider: [\n WorkflowExecService,\n WorkflowParserService,\n WorkflowSelectService,\n WorkflowFileService,\n ContextBuildService,\n InlineBuilderService,\n WorkflowRunnerService,\n InlineParametersService,\n WorkflowPluginService,\n InlineNodeService,\n ],\n token: {\n ChatServiceToken,\n WorkflowConfigToken,\n },\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["computed", "inject", "InjectionToken", "Injector", "WorkflowNodeType", "uniqBy", "actions", "actions", "v", "renderConfig", "condition", "actions", "v", "actions", "setComponent", "renderConfig", "condition", "v", "setComponent", "actions", "condition", "renderConfig", "v4", "v", "v", "actions", "condition", "setComponent", "actions", "setComponent", "condition", "item", "value", "inject", "parse", "uniqBy", "computed", "v", "computed", "path", "inject", "item", "uniqBy", "parse", "NODE_COMMON", "inject", "inject", "NODE_COMMON", "item", "uniqBy", "InjectionToken", "inject", "computed", "Injector", "inject", "inject", "inject", "inject", "createInjector", "inject", "Injector", "inject", "inject", "inject", "inject", "LogService", "inject", "Injector", "createInjector", "input", "LogService", "signal", "inject", "inject", "inject", "item", "inject", "computed", "inject", "path", "inject", "inject", "inject", "computed", "path"]
|
|
7
7
|
}
|