Flowise/packages/server/src/Interface.ts

434 lines
8.6 KiB
TypeScript

import {
IAction,
ICommonObject,
IFileUpload,
IHumanInput,
INode,
INodeData as INodeDataFromComponent,
INodeExecutionData,
INodeParams,
IServerSideEventStreamer
} from 'flowise-components'
import { DataSource } from 'typeorm'
import { CachePool } from './CachePool'
import { Telemetry } from './utils/telemetry'
import { UsageCacheManager } from './UsageCacheManager'
export type MessageType = 'apiMessage' | 'userMessage'
export type ChatflowType = 'CHATFLOW' | 'MULTIAGENT' | 'ASSISTANT' | 'AGENTFLOW'
export type AssistantType = 'CUSTOM' | 'OPENAI' | 'AZURE'
export type ExecutionState = 'INPROGRESS' | 'FINISHED' | 'ERROR' | 'TERMINATED' | 'TIMEOUT' | 'STOPPED'
export enum MODE {
QUEUE = 'queue',
MAIN = 'main'
}
export enum ChatType {
INTERNAL = 'INTERNAL',
EXTERNAL = 'EXTERNAL',
EVALUATION = 'EVALUATION'
}
export enum ChatMessageRatingType {
THUMBS_UP = 'THUMBS_UP',
THUMBS_DOWN = 'THUMBS_DOWN'
}
export enum Platform {
OPEN_SOURCE = 'open source',
CLOUD = 'cloud',
ENTERPRISE = 'enterprise'
}
export enum UserPlan {
STARTER = 'STARTER',
PRO = 'PRO',
FREE = 'FREE'
}
/**
* Databases
*/
export interface IChatFlow {
id: string
name: string
flowData: string
updatedDate: Date
createdDate: Date
deployed?: boolean
isPublic?: boolean
apikeyid?: string
analytic?: string
speechToText?: string
chatbotConfig?: string
followUpPrompts?: string
apiConfig?: string
category?: string
type?: ChatflowType
workspaceId?: string
}
export interface IChatMessage {
id: string
role: MessageType
content: string
chatflowid: string
executionId?: string
sourceDocuments?: string
usedTools?: string
fileAnnotations?: string
agentReasoning?: string
fileUploads?: string
artifacts?: string
chatType: string
chatId: string
memoryType?: string
sessionId?: string
createdDate: Date
leadEmail?: string
action?: string | null
followUpPrompts?: string
}
export interface IChatMessageFeedback {
id: string
content?: string
chatflowid: string
chatId: string
messageId: string
rating: ChatMessageRatingType
createdDate: Date
}
export interface ITool {
id: string
name: string
description: string
color: string
iconSrc?: string
schema?: string
func?: string
updatedDate: Date
createdDate: Date
workspaceId?: string
}
export interface IAssistant {
id: string
details: string
credential: string
iconSrc?: string
updatedDate: Date
createdDate: Date
workspaceId?: string
}
export interface ICredential {
id: string
name: string
credentialName: string
encryptedData: string
updatedDate: Date
createdDate: Date
workspaceId?: string
}
export interface IVariable {
id: string
name: string
value: string
type: string
updatedDate: Date
createdDate: Date
workspaceId?: string
}
export interface ILead {
id: string
name?: string
email?: string
phone?: string
chatflowid: string
chatId: string
createdDate: Date
}
export interface IUpsertHistory {
id: string
chatflowid: string
result: string
flowData: string
date: Date
}
export interface IExecution {
id: string
executionData: string
state: ExecutionState
agentflowId: string
sessionId: string
isPublic?: boolean
action?: string
createdDate: Date
updatedDate: Date
stoppedDate: Date
workspaceId?: string
}
export interface IComponentNodes {
[key: string]: INode
}
export interface IComponentCredentials {
[key: string]: INode
}
export interface IVariableDict {
[key: string]: string
}
export interface INodeDependencies {
[key: string]: number
}
export interface INodeDirectedGraph {
[key: string]: string[]
}
export interface INodeData extends INodeDataFromComponent {
inputAnchors: INodeParams[]
inputParams: INodeParams[]
outputAnchors: INodeParams[]
}
export interface IReactFlowNode {
id: string
position: {
x: number
y: number
}
type: string
data: INodeData
positionAbsolute: {
x: number
y: number
}
z: number
handleBounds: {
source: any
target: any
}
width: number
height: number
selected: boolean
dragging: boolean
parentNode?: string
extent?: string
}
export interface IReactFlowEdge {
source: string
sourceHandle: string
target: string
targetHandle: string
type: string
id: string
data: {
label: string
}
}
export interface IReactFlowObject {
nodes: IReactFlowNode[]
edges: IReactFlowEdge[]
viewport: {
x: number
y: number
zoom: number
}
}
export interface IExploredNode {
[key: string]: {
remainingLoop: number
lastSeenDepth: number
}
}
export interface INodeQueue {
nodeId: string
depth: number
}
export interface IDepthQueue {
[key: string]: number
}
export interface IAgentflowExecutedData {
nodeLabel: string
nodeId: string
data: INodeExecutionData
previousNodeIds: string[]
status?: ExecutionState
}
export interface IMessage {
message: string
type: MessageType
role?: MessageType
content?: string
}
export interface IncomingInput {
question: string
overrideConfig?: ICommonObject
chatId?: string
sessionId?: string
stopNodeId?: string
uploads?: IFileUpload[]
leadEmail?: string
history?: IMessage[]
action?: IAction
streaming?: boolean
}
export interface IncomingAgentflowInput extends Omit<IncomingInput, 'question'> {
question?: string
form?: Record<string, any>
humanInput?: IHumanInput
}
export interface IActiveChatflows {
[key: string]: {
startingNodes: IReactFlowNode[]
endingNodeData?: INodeData
inSync: boolean
overrideConfig?: ICommonObject
chatId?: string
}
}
export interface IActiveCache {
[key: string]: Map<any, any>
}
export interface IOverrideConfig {
node: string
nodeId: string
label: string
name: string
type: string
schema?: ICommonObject[] | Record<string, string>
}
export type ICredentialDataDecrypted = ICommonObject
// Plain credential object sent to server
export interface ICredentialReqBody {
name: string
credentialName: string
plainDataObj: ICredentialDataDecrypted
workspaceId?: string
}
// Decrypted credential object sent back to client
export interface ICredentialReturnResponse extends ICredential {
plainDataObj: ICredentialDataDecrypted
}
export interface IUploadFileSizeAndTypes {
fileTypes: string[]
maxUploadSize: number
}
export interface IApiKey {
id: string
keyName: string
apiKey: string
apiSecret: string
updatedDate: Date
workspaceId?: string
}
export interface ICustomTemplate {
id: string
name: string
flowData: string
updatedDate: Date
createdDate: Date
description?: string
type?: string
badge?: string
framework?: string
usecases?: string
workspaceId?: string
}
export interface IFlowConfig {
chatflowid: string
chatId: string
sessionId: string
chatHistory: IMessage[]
apiMessageId: string
overrideConfig?: ICommonObject
state?: ICommonObject
runtimeChatHistoryLength?: number
}
export interface IPredictionQueueAppServer {
appDataSource: DataSource
componentNodes: IComponentNodes
sseStreamer: IServerSideEventStreamer
telemetry: Telemetry
cachePool: CachePool
usageCacheManager: UsageCacheManager
}
export interface IExecuteFlowParams extends IPredictionQueueAppServer {
incomingInput: IncomingInput
chatflow: IChatFlow
chatId: string
orgId: string
workspaceId: string
subscriptionId: string
baseURL: string
isInternal: boolean
isEvaluation?: boolean
evaluationRunId?: string
signal?: AbortController
files?: Express.Multer.File[]
fileUploads?: IFileUpload[]
uploadedFilesContent?: string
isUpsert?: boolean
isRecursive?: boolean
parentExecutionId?: string
iterationContext?: ICommonObject
isTool?: boolean
}
export interface INodeOverrides {
[key: string]: {
label: string
name: string
type: string
enabled: boolean
}[]
}
export interface IVariableOverride {
id: string
name: string
type: 'static' | 'runtime'
enabled: boolean
}
// DocumentStore related
export * from './Interface.DocumentStore'
// Evaluations related
export * from './Interface.Evaluation'