Spaces:
Sleeping
Sleeping
| import { generateUUID } from "lib/utils"; | |
| import { NodeKind, UINode } from "./workflow.interface"; | |
| import { defaultObjectJsonSchema } from "./shared.workflow"; | |
| import { ObjectJsonSchema7 } from "app-types/util"; | |
| export function createUINode( | |
| kind: NodeKind, | |
| option?: Partial<{ | |
| position: { x: number; y: number }; | |
| name?: string; | |
| id?: string; | |
| }>, | |
| ): UINode { | |
| const id = option?.id ?? generateUUID(); | |
| const node: UINode = { | |
| ...option, | |
| id, | |
| position: option?.position ?? { x: 0, y: 0 }, | |
| data: { | |
| kind: kind as any, | |
| name: option?.name ?? kind.toUpperCase(), | |
| id, | |
| outputSchema: structuredClone(defaultObjectJsonSchema), | |
| runtime: { | |
| isNew: true, | |
| }, | |
| }, | |
| type: "default", | |
| }; | |
| if (node.data.kind === NodeKind.Output) { | |
| node.data.outputData = []; | |
| } else if (node.data.kind === NodeKind.LLM) { | |
| node.data.outputSchema = structuredClone(defaultLLMNodeOutputSchema); | |
| node.data.messages = [ | |
| { | |
| role: "user", | |
| }, | |
| ]; | |
| } else if (node.data.kind === NodeKind.Condition) { | |
| node.data.branches = { | |
| if: { | |
| id: "if", | |
| logicalOperator: "AND", | |
| type: "if", | |
| conditions: [], | |
| }, | |
| else: { | |
| id: "else", | |
| logicalOperator: "AND", | |
| type: "else", | |
| conditions: [], | |
| }, | |
| }; | |
| } else if (node.data.kind === NodeKind.Tool) { | |
| node.data.outputSchema.properties = { | |
| tool_result: { | |
| type: "object", | |
| }, | |
| }; | |
| } else if (node.data.kind === NodeKind.Http) { | |
| node.data.outputSchema.properties = { | |
| response: { | |
| type: "object", | |
| properties: { | |
| status: { | |
| type: "number", | |
| }, | |
| statusText: { | |
| type: "string", | |
| }, | |
| ok: { | |
| type: "boolean", | |
| }, | |
| headers: { | |
| type: "object", | |
| }, | |
| body: { | |
| type: "string", | |
| }, | |
| duration: { | |
| type: "number", | |
| }, | |
| size: { | |
| type: "number", | |
| }, | |
| }, | |
| }, | |
| }; | |
| // Set default values for HTTP node | |
| node.data.method = "GET"; | |
| node.data.headers = []; | |
| node.data.query = []; | |
| node.data.timeout = 30000; // 30 seconds default | |
| } else if (node.data.kind === NodeKind.Template) { | |
| node.data.outputSchema = structuredClone(defaultTemplateNodeOutputSchema); | |
| // Set default values for Template node | |
| node.data.template = { | |
| type: "tiptap", | |
| tiptap: { | |
| type: "doc", | |
| content: [], | |
| }, | |
| }; | |
| } | |
| return node; | |
| } | |
| export const defaultLLMNodeOutputSchema: ObjectJsonSchema7 = { | |
| type: "object", | |
| properties: { | |
| answer: { | |
| type: "string", | |
| }, | |
| totalTokens: { | |
| type: "number", | |
| }, | |
| }, | |
| }; | |
| export const defaultTemplateNodeOutputSchema: ObjectJsonSchema7 = { | |
| type: "object", | |
| properties: { | |
| template: { | |
| type: "string", | |
| }, | |
| }, | |
| }; | |