import { BaseMessage } from '@langchain/core/messages' import { BufferMemory, BufferWindowMemory, ConversationSummaryMemory, ConversationSummaryBufferMemory } from 'langchain/memory' import { Moderation } from '../nodes/moderation/Moderation' /** * Types */ export type NodeParamsType = | 'asyncOptions' | 'asyncMultiOptions' | 'options' | 'multiOptions' | 'datagrid' | 'string' | 'number' | 'boolean' | 'password' | 'json' | 'code' | 'date' | 'file' | 'folder' | 'tabs' export type CommonType = string | number | boolean | undefined | null export type MessageType = 'apiMessage' | 'userMessage' export type ImageDetail = 'auto' | 'low' | 'high' /** * Others */ export interface ICommonObject { [key: string]: any | CommonType | ICommonObject | CommonType[] | ICommonObject[] } export interface IVariable { name: string value: string type: string } export type IDatabaseEntity = { [key: string]: any } export interface IAttachment { content: string contentType: string size?: number filename?: string } export interface INodeOptionsValue { label: string name: string description?: string imageSrc?: string } export interface INodeOutputsValue { label: string name: string baseClasses?: string[] description?: string hidden?: boolean isAnchor?: boolean } export interface INodeParams { label: string name: string type: NodeParamsType | string default?: CommonType | ICommonObject | ICommonObject[] description?: string warning?: string options?: Array datagrid?: Array credentialNames?: Array optional?: boolean | INodeDisplay step?: number rows?: number list?: boolean acceptVariable?: boolean acceptNodeOutputAsVariable?: boolean placeholder?: string fileType?: string additionalParams?: boolean loadMethod?: string loadConfig?: boolean hidden?: boolean hideCodeExecute?: boolean codeExample?: string hint?: Record tabIdentifier?: string tabs?: Array refresh?: boolean freeSolo?: boolean loadPreviousNodes?: boolean array?: Array show?: INodeDisplay hide?: INodeDisplay generateDocStoreDescription?: boolean generateInstruction?: boolean } export interface INodeExecutionData { [key: string]: CommonType | CommonType[] | ICommonObject | ICommonObject[] } export interface INodeDisplay { [key: string]: string[] | string | boolean | number | ICommonObject } export interface INodeProperties { label: string name: string type: string icon: string version: number category: string // TODO: use enum instead of string baseClasses: string[] tags?: string[] description?: string filePath?: string badge?: string deprecateMessage?: string hideOutput?: boolean hideInput?: boolean author?: string documentation?: string color?: string hint?: string } export interface INode extends INodeProperties { credential?: INodeParams inputs?: INodeParams[] output?: INodeOutputsValue[] loadMethods?: { [key: string]: (nodeData: INodeData, options?: ICommonObject) => Promise } vectorStoreMethods?: { upsert: (nodeData: INodeData, options?: ICommonObject) => Promise search: (nodeData: INodeData, options?: ICommonObject) => Promise delete: (nodeData: INodeData, ids: string[], options?: ICommonObject) => Promise } init?(nodeData: INodeData, input: string, options?: ICommonObject): Promise run?(nodeData: INodeData, input: string, options?: ICommonObject): Promise } export interface INodeData extends INodeProperties { id: string inputs?: ICommonObject outputs?: ICommonObject credential?: string instance?: any loadMethod?: string // method to load async options } export interface INodeCredential { label: string name: string description?: string inputs?: INodeParams[] } export interface IMessage { message: string type: MessageType role?: MessageType content?: string } export interface IUsedTool { tool: string toolInput: object toolOutput: string | object sourceDocuments?: ICommonObject[] error?: string } export interface IMultiAgentNode { node: any name: string label: string type: 'supervisor' | 'worker' llm?: any parentSupervisorName?: string workers?: string[] workerPrompt?: string workerInputVariables?: string[] recursionLimit?: number moderations?: Moderation[] multiModalMessageContent?: MessageContentImageUrl[] checkpointMemory?: any } type SeqAgentType = 'agent' | 'condition' | 'end' | 'start' | 'tool' | 'state' | 'llm' | 'utilities' export type ConversationHistorySelection = 'user_question' | 'last_message' | 'all_messages' | 'empty' export interface ISeqAgentNode { id: string node: any name: string label: string type: SeqAgentType output: string llm?: any startLLM?: any predecessorAgents?: ISeqAgentNode[] recursionLimit?: number moderations?: Moderation[] multiModalMessageContent?: MessageContentImageUrl[] checkpointMemory?: any agentInterruptToolNode?: any agentInterruptToolFunc?: any } export interface ITeamState { messages: { value: (x: BaseMessage[], y: BaseMessage[]) => BaseMessage[] default: () => BaseMessage[] } team_members: string[] next: string instructions: string summarization?: string } export interface ISeqAgentsState { messages: { value: (x: BaseMessage[], y: BaseMessage[]) => BaseMessage[] default: () => BaseMessage[] } } export interface IAgentReasoning { agentName: string messages: string[] next?: string instructions?: string usedTools?: IUsedTool[] sourceDocuments?: ICommonObject[] state?: ICommonObject nodeName?: string } export interface IAction { id?: string elements?: Array<{ type: string; label: string }> mapping?: { approve: string; reject: string; toolCalls: any[] } } export interface IFileUpload { data?: string type: string name: string mime: string } export interface IMultiModalOption { image?: Record audio?: Record } export type MessageContentText = { type: 'text' text: string } export type MessageContentImageUrl = { type: 'image_url' image_url: | string | { url: string detail?: ImageDetail } } export interface IDocument = Record> { pageContent: string metadata: Metadata } /** * Classes */ import { PromptTemplate as LangchainPromptTemplate, PromptTemplateInput } from '@langchain/core/prompts' import { VectorStore } from '@langchain/core/vectorstores' import { Document } from '@langchain/core/documents' export class PromptTemplate extends LangchainPromptTemplate { promptValues: ICommonObject constructor(input: PromptTemplateInput) { super(input) } } export interface PromptRetrieverInput { name: string description: string systemMessage: string } const fixedTemplate = `Here is a question: {input} ` export class PromptRetriever { name: string description: string systemMessage: string constructor(fields: PromptRetrieverInput) { this.name = fields.name this.description = fields.description this.systemMessage = `${fields.systemMessage}\n${fixedTemplate}` } } export interface VectorStoreRetrieverInput { name: string description: string vectorStore: VectorStore } export class VectorStoreRetriever { name: string description: string vectorStore: VectorStore constructor(fields: VectorStoreRetrieverInput) { this.name = fields.name this.description = fields.description this.vectorStore = fields.vectorStore } } /** * Implement abstract classes and interface for memory */ export interface MemoryMethods { getChatMessages( overrideSessionId?: string, returnBaseMessages?: boolean, prependMessages?: IMessage[] ): Promise addChatMessages(msgArray: { text: string; type: MessageType }[], overrideSessionId?: string): Promise clearChatMessages(overrideSessionId?: string): Promise } export abstract class FlowiseMemory extends BufferMemory implements MemoryMethods { abstract getChatMessages( overrideSessionId?: string, returnBaseMessages?: boolean, prependMessages?: IMessage[] ): Promise abstract addChatMessages(msgArray: { text: string; type: MessageType }[], overrideSessionId?: string): Promise abstract clearChatMessages(overrideSessionId?: string): Promise } export abstract class FlowiseWindowMemory extends BufferWindowMemory implements MemoryMethods { abstract getChatMessages( overrideSessionId?: string, returnBaseMessages?: boolean, prependMessages?: IMessage[] ): Promise abstract addChatMessages(msgArray: { text: string; type: MessageType }[], overrideSessionId?: string): Promise abstract clearChatMessages(overrideSessionId?: string): Promise } export abstract class FlowiseSummaryMemory extends ConversationSummaryMemory implements MemoryMethods { abstract getChatMessages( overrideSessionId?: string, returnBaseMessages?: boolean, prependMessages?: IMessage[] ): Promise abstract addChatMessages(msgArray: { text: string; type: MessageType }[], overrideSessionId?: string): Promise abstract clearChatMessages(overrideSessionId?: string): Promise } export abstract class FlowiseSummaryBufferMemory extends ConversationSummaryBufferMemory implements MemoryMethods { abstract getChatMessages( overrideSessionId?: string, returnBaseMessages?: boolean, prependMessages?: IMessage[] ): Promise abstract addChatMessages(msgArray: { text: string; type: MessageType }[], overrideSessionId?: string): Promise abstract clearChatMessages(overrideSessionId?: string): Promise } export type IndexingResult = { numAdded: number numDeleted: number numUpdated: number numSkipped: number totalKeys: number addedDocs: Document[] } export interface IVisionChatModal { id: string configuredModel: string multiModalOption: IMultiModalOption configuredMaxToken?: number setVisionModel(): void revertToOriginalModel(): void setMultiModalOption(multiModalOption: IMultiModalOption): void } export interface IStateWithMessages extends ICommonObject { messages: BaseMessage[] [key: string]: any } export * from './Interface.Evaluation' export interface IServerSideEventStreamer { streamStartEvent(chatId: string, data: any): void streamTokenEvent(chatId: string, data: string): void streamCustomEvent(chatId: string, eventType: string, data: any): void streamSourceDocumentsEvent(chatId: string, data: any): void streamUsedToolsEvent(chatId: string, data: any): void streamCalledToolsEvent(chatId: string, data: any): void streamFileAnnotationsEvent(chatId: string, data: any): void streamToolEvent(chatId: string, data: any): void streamAgentReasoningEvent(chatId: string, data: any): void streamAgentFlowExecutedDataEvent(chatId: string, data: any): void streamAgentFlowEvent(chatId: string, data: any): void streamNextAgentEvent(chatId: string, data: any): void streamNextAgentFlowEvent(chatId: string, data: any): void streamActionEvent(chatId: string, data: any): void streamArtifactsEvent(chatId: string, data: any): void streamAbortEvent(chatId: string): void streamEndEvent(chatId: string): void streamUsageMetadataEvent(chatId: string, data: any): void streamAudioEvent(chatId: string, audioData: string): void } export enum FollowUpPromptProvider { ANTHROPIC = 'chatAnthropic', AZURE_OPENAI = 'azureChatOpenAI', GOOGLE_GENAI = 'chatGoogleGenerativeAI', MISTRALAI = 'chatMistralAI', OPENAI = 'chatOpenAI', GROQ = 'groqChat', OLLAMA = 'ollama' } export type FollowUpPromptProviderConfig = { [key in FollowUpPromptProvider]: { credentialId: string modelName: string baseUrl: string prompt: string temperature: string } } export type FollowUpPromptConfig = { status: boolean selectedProvider: FollowUpPromptProvider } & FollowUpPromptProviderConfig export interface ICondition { type: string value1: CommonType operation: string value2: CommonType isFulfilled?: boolean } export interface IHumanInput { type: 'proceed' | 'reject' startNodeId: string feedback?: string }