289 lines
6.8 KiB
TypeScript
289 lines
6.8 KiB
TypeScript
/**
|
|
* 节点类型枚举
|
|
*/
|
|
export enum NodeTypeEnum {
|
|
API = 'API',
|
|
POLL_API = 'POLL_API',
|
|
OUTPUT = 'OUTPUT',
|
|
INPUT = 'INPUT',
|
|
URL2FILE = 'URL2FILE',
|
|
OpenAIImage = 'OpenAIImage',
|
|
DrawApp = 'DrawApp',
|
|
Agent = 'Agent',
|
|
Preview = 'Preview',
|
|
ComponentInput = 'ComponentInput',
|
|
SAVETOLOCALFILE = 'SaveLocalFile',
|
|
ApiPlugin='ApiPlugin',
|
|
Markdown2Html='Markdown2Html'
|
|
}
|
|
|
|
|
|
/**
|
|
* 节点元数据
|
|
*/
|
|
export interface INodeMeta {
|
|
title: string
|
|
description?: string
|
|
icon?: string
|
|
}
|
|
|
|
/**
|
|
* 节点数据接口
|
|
*/
|
|
export interface INodeData<T extends NodeTypeEnum = NodeTypeEnum> {
|
|
class_type: T
|
|
plugin_type?: NodeTypeEnum.ApiPlugin // 插件节点,必填
|
|
_meta: INodeMeta
|
|
inputs?: {
|
|
[key: string]: any
|
|
}
|
|
output?: any
|
|
data?: NodeDataMap[T]
|
|
outputSpec?: INodeOutputSpec
|
|
}
|
|
|
|
export interface INodeOutputSpec {
|
|
type: FileType
|
|
defaultPath: string[]
|
|
}
|
|
|
|
/**
|
|
* 节点数据映射类型
|
|
* @type {NodeDataMap}
|
|
* @property {IAPINodeData} API - API 节点数据
|
|
* @property {IPollAPINodeData} POLL_API - 轮询 API 节点数据
|
|
* @property {IInputNodeData} INPUT - 输入节点数据
|
|
* @property {IOutputNodeData} OUTPUT - 输出节点数据
|
|
* @property {IUrl2FileNodeData} URL2FILE - URL转文件节点数据
|
|
* @property {IOpenAIImageNodeData} OpenAIImage - 云平台模型接口
|
|
* @property {IDrawAppNodeData} DrawApp - 绘图应用
|
|
* @property {IAgentNodeData} Agent - 智能体
|
|
* @property {IPreviewNodeData} Preview - 预览节点
|
|
*/
|
|
export type NodeDataMap = {
|
|
[NodeTypeEnum.API]: IAPINodeData
|
|
[NodeTypeEnum.POLL_API]: IPollAPINodeData
|
|
[NodeTypeEnum.INPUT]: IInputNodeData
|
|
[NodeTypeEnum.OUTPUT]: IOutputNodeData
|
|
[NodeTypeEnum.URL2FILE]: IUrl2FileNodeData
|
|
[NodeTypeEnum.OpenAIImage]: IOpenAIImageNodeData
|
|
[NodeTypeEnum.DrawApp]: IDrawAppNodeData
|
|
[NodeTypeEnum.Agent]: IAgentNodeData
|
|
[NodeTypeEnum.Preview]: IPreviewNodeData
|
|
[NodeTypeEnum.ComponentInput]: IComponentInputData
|
|
[NodeTypeEnum.ApiPlugin]: IApiPluginNodeData;
|
|
[NodeTypeEnum.Markdown2Html]: IApiPluginNodeData
|
|
}
|
|
|
|
|
|
/**
|
|
* API 节点数据类型
|
|
* @interface IAPINodeData
|
|
* @param userId - 用户 ID
|
|
* @param successCondition - 成功条件
|
|
* @param pollTime - 轮询时间
|
|
* @param pollTimeout - 轮询超时时间
|
|
* @param response - 响应数据
|
|
*/
|
|
export interface IAPINodeData {
|
|
headers?: { [key: string]: string }
|
|
params?: { [key: string]: string }
|
|
pathParams?: { [key: string]: string }
|
|
body?: { [key: string]: any }
|
|
successCondition?: { key: string[], value: string | number | boolean }[]
|
|
}
|
|
|
|
/**
|
|
* 轮询 API 节点数据类型
|
|
* @interface IPollAPINodeData
|
|
* @param headers - 请求头
|
|
* @param body - 请求体
|
|
* @param params - 请求参数
|
|
* @param pathParams - 请求路径参数
|
|
* @param successCondition - 成功条件
|
|
* @param pollTime - 轮询时间
|
|
* @param pollTimeout - 轮询超时时间
|
|
*/
|
|
export interface IPollAPINodeData {
|
|
headers?: { [key: string]: string }
|
|
body?: { [key: string]: any }
|
|
params?: { [key: string]: string }
|
|
pathParams?: { [key: string]: string }
|
|
successCondition?: { key: string[], value: string | number | boolean }[]
|
|
pollTime?: number
|
|
pollTimeout?: string
|
|
}
|
|
|
|
/**
|
|
* 输入字段类型枚举
|
|
* @enum {string} InputFieldTypeEnum
|
|
* @property {string} boolean - 布尔类型
|
|
* @property {string} string - 字符串类型
|
|
* @property {string} number - 数字类型
|
|
*/
|
|
export enum InputFieldTypeEnum {
|
|
boolean = 'boolean',
|
|
string = 'string',
|
|
number = 'number'
|
|
}
|
|
|
|
/**
|
|
* 输入节点数据类型
|
|
* @interface IInputNodeData
|
|
* @param schema - 输入数据结构
|
|
*/
|
|
export interface IInputNodeData {
|
|
schema: IInputNodeDataSchema
|
|
}
|
|
|
|
export interface IInputNodeDataSchema {
|
|
[key: string]: {
|
|
type: InputFieldTypeEnum
|
|
default?: any
|
|
required?: boolean
|
|
description?: string
|
|
}
|
|
}
|
|
|
|
export interface IOutputNodeDataSchema {
|
|
[key: string]: {
|
|
outputType?: OutputType
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 输出节点数据类型
|
|
* @interface IOutputNodeData
|
|
* @param schema - 输出数据
|
|
*/
|
|
export interface IOutputNodeData {
|
|
schema: IOutputNodeDataSchema
|
|
}
|
|
|
|
/**
|
|
* 输出节点数据类型
|
|
* @interface IUrl2FileNodeData
|
|
* @param output - 输出数据
|
|
*/
|
|
export interface IUrl2FileNodeData {
|
|
[key: string]: File
|
|
}
|
|
|
|
export type openAIImageNodeType =
|
|
| 'editImage'
|
|
| 'generateImage'
|
|
| 'generateVideo'
|
|
| 'multiViewGenerate3D'
|
|
| 'imageGenerate3D'
|
|
| 'textGenerate3D'
|
|
|
|
export interface IOpenAIImageNodeData extends INodeDataCondition {
|
|
type: openAIImageNodeType
|
|
}
|
|
|
|
export interface IDrawAppNodeData extends INodeDataCondition {
|
|
options: unknown
|
|
}
|
|
|
|
export interface IAgentNodeData extends INodeDataCondition {
|
|
agentId: string
|
|
model: string
|
|
systemPrompt: string // 系统提示词中含有变量
|
|
userPrompt: string // 用户提示词(变量)
|
|
params: Record<string, unknown>
|
|
}
|
|
|
|
export interface IPreviewNodeData {
|
|
sourceNode: {
|
|
id: string
|
|
}[]
|
|
}
|
|
export interface IComponentInputData {
|
|
component: string
|
|
params: {
|
|
value: string
|
|
type: FileType
|
|
}
|
|
}
|
|
|
|
// /**
|
|
// * 插件需要继承 IApiPluginNodeData
|
|
// */
|
|
// export interface IMarkdown2HtmlData extends IApiPluginNodeData {
|
|
// input: ''
|
|
// output: ''
|
|
// }
|
|
export interface IApiPluginNodeData extends INodeDataCondition {
|
|
method: 'POST' // 请求方法
|
|
url: string; // 请求地址
|
|
body: Record<string, unknown> // 请求体
|
|
headers: { [key: string]: string } // 请求头
|
|
}
|
|
|
|
|
|
export type INodeDataCondition = Partial<
|
|
INodeDataSuccessCondition & INodeDataFailureCondition
|
|
>
|
|
|
|
export interface INodeDataSuccessCondition {
|
|
successCondition?: { key: string[], value: string | number | boolean }[]
|
|
}
|
|
|
|
export interface INodeDataFailureCondition {
|
|
failureCondition: { key: string[], value: string | number | boolean }[]
|
|
}
|
|
|
|
export type FileType = 'image' | 'video' | 'audio' | '3d' | 'text' | 'file'
|
|
export type OutputType = 'image' | 'video' | 'text' | 'audio' | '3d'
|
|
|
|
|
|
export interface GeneralOutput {
|
|
/**
|
|
* The generated output type, defaults to `image`,support `image` and `video` etc.
|
|
*/
|
|
type?: FileType;
|
|
/**
|
|
* The base64-encoded JSON of the generated image. Default value for `gpt-image-1`,
|
|
* and only present if `response_format` is set to `b64_json` for `dall-e-2` and
|
|
* `dall-e-3`.
|
|
*/
|
|
b64_json?: string;
|
|
|
|
/**
|
|
* For `dall-e-3` only, the revised prompt that was used to generate the image.
|
|
*/
|
|
revised_prompt?: string;
|
|
|
|
/**
|
|
* When using `dall-e-2` or `dall-e-3`, the URL of the generated image if
|
|
* `response_format` is set to `url` (default value). Unsupported for
|
|
* `gpt-image-1`.
|
|
*/
|
|
url?: string;
|
|
/**
|
|
* The generated content.
|
|
*/
|
|
content?: string;
|
|
/**
|
|
* The role of the generated content.
|
|
*/
|
|
role?: string;
|
|
|
|
/** buffer */
|
|
buffer?: Buffer;
|
|
}
|
|
|
|
export interface IExecutionNodeStatusItem {
|
|
status: 'started' | 'process' | 'success' | 'failed'
|
|
result: unknown
|
|
message?: string
|
|
}
|
|
|
|
/**
|
|
* 节点输出类型
|
|
*/
|
|
export interface NodeOutput {
|
|
output_content: GeneralOutput[]
|
|
}
|
|
|