import * as axios7 from "axios"; import * as axios0 from "axios"; import * as axios12 from "axios"; import * as axios15 from "axios"; import { AxiosInstance } from "axios"; //#region src/utils/streamResponse/handler/type.d.ts type EventType = 'workflow_started' | 'workflow_finished' | 'node_started' | 'node_finished' | 'message' | 'message_file' | 'message_end' | 'tts_message' | 'tts_message_end' | 'text_chunk' | 'message_replace' | 'error'; interface BaseEvent { event: T; task_id: string; } interface WorkflowStartedEvent extends BaseEvent<'workflow_started'> { workflow_run_id: string; data: { id: string; workflow_id: string; sequence_number: number; created_at: number; }; } interface WorkflowFinishedEvent extends BaseEvent<'workflow_finished'> { workflow_run_id: string; data: { id: string; workflow_id: string; outputs: Record; status: Status; error: string; elapsed_time: number; total_tokens: number; total_steps: string; created_at: number; finished_at: number; }; } interface NodeStartedEvent extends BaseEvent<'node_started'> { workflow_run_id: string; data: { id: string; node_id: string; node_type: string; title: string; index: number; predecessor_node_id: string; inputs: AnyObject; created_at: number; }; } interface NodeFinishedEvent extends BaseEvent<'node_finished'> { workflow_run_id: string; data: { id: string; node_id: string; node_type: string; title: string; index: number; predecessor_node_id: string; process_data?: AnyObject; inputs: AnyObject; outputs?: AnyObject; status: Status; error: string; elapsed_time?: number; execution_metadata: { total_tokens?: number; total_price?: number; currency?: string; }; created_at: number; }; } interface MessageEvent extends BaseEvent<'message'> { message_id: string; conversation_id: string; answer: string; created_at: number; } interface MessageFileEvent extends BaseEvent<'message_file'> { conversation_id: string; type: string; belongs_to: 'assistant'; url: string; } interface MessageEndEvent extends BaseEvent<'message_end'> { id: string; message_id: string; conversation_id: string; metadata: { usage: Usage; retriever_resources?: RetrieverResource[]; }; } interface TTSMessageEvent extends BaseEvent<'tts_message'> { message_id: string; audio: string; created_at: number; } interface TTSMessageEndEvent extends BaseEvent<'tts_message_end'> { message_id: string; audio: ''; created_at: number; } interface TextChunkEvent extends BaseEvent<'text_chunk'> { workflow_run_id: string; data: { text: string; from_variable_selector: string[]; }; } interface MessageReplaceEvent extends BaseEvent<'message_replace'> { message_id: string; conversation_id: string; answer: string; created_at: number; } interface ErrorEvent extends BaseEvent<'error'> { error: string; message_id: string; status: number; code: string; message: string; } type ChatStreamEvent = WorkflowStartedEvent | WorkflowFinishedEvent | NodeStartedEvent | NodeFinishedEvent | MessageEvent | MessageFileEvent | MessageEndEvent | TTSMessageEvent | TTSMessageEndEvent | ErrorEvent; type WorkflowStreamEvent = WorkflowStartedEvent | NodeStartedEvent | TextChunkEvent | NodeFinishedEvent | WorkflowFinishedEvent | TTSMessageEvent | TTSMessageEndEvent; type CompletionStreamEvent = MessageEvent | MessageEndEvent | TTSMessageEvent | TTSMessageEndEvent | MessageReplaceEvent | ErrorEvent; //#endregion //#region src/utils/streamResponse/handler/base.d.ts /** * 通用错误处理器 */ type ErrorHandler = (error: Error) => void; /** * 完成处理器 */ type CompletionHandler = () => void; /** * 事件处理器类型 */ type EventHandler> = (event: T) => void; /** * 基础流处理器 - 提供通用的流处理机制 */ declare abstract class BaseStreamHandler> { protected readonly eventHandlers: Map[]>; protected readonly errorHandlers: ErrorHandler[]; protected readonly completionHandlers: CompletionHandler[]; protected readonly stream: NodeJS.ReadableStream; protected isStopped: boolean; protected isStart: boolean; /** * 创建流处理器 * @param stream 响应流对象 */ constructor(stream: NodeJS.ReadableStream); start(): void; /** * 处理流内容 */ protected processStream(): void; /** * 处理单条数据 * @param data 数据字符串 */ /** * 处理接收到的数据 */ protected processData(data: string): void; /** * 分发事件 * @param event 事件对象 */ protected dispatchEvent(event: T): void; /** * 触发错误 * @param error 错误对象 */ protected emitError(error: Error): void; /** * 触发完成 */ protected emitCompletion(): void; /** * 清理资源 */ protected cleanUp(): void; /** * 注册事件处理器 * @param eventType 事件类型 * @param handler 处理函数 */ protected registerEventHandler(eventType: E, handler: EventHandler): void; /** * 注册错误处理器 * @param handler 错误处理函数 */ onError(handler: ErrorHandler): this; /** * 注册完成处理器 * @param handler 完成处理函数 */ onFinished(handler: CompletionHandler): this; /** * 等待流完成 * @returns Promise 当流完成时解析 */ waitForCompletion(): Promise; } //#endregion //#region src/utils/streamResponse/handler/chat.d.ts /** * 聊天流处理器 */ declare class ChatStreamHandler extends BaseStreamHandler { /** * 注册消息事件处理器 */ onMessage(handler: EventHandler): this; /** * 注册消息文件事件处理器 */ onMessageFile(handler: EventHandler): this; /** * 注册消息结束事件处理器 */ onMessageEnd(handler: EventHandler): this; /** * 注册文本转语音消息事件处理器 */ onTtsMessage(handler: EventHandler): this; /** * 注册文本转语音结束事件处理器 */ onTtsMessageEnd(handler: EventHandler): this; /** * 注册消息替换事件处理器 */ onMessageReplace(handler: EventHandler): this; /** * 注册错误事件处理器 */ onErrorEvent(handler: EventHandler): this; } //#endregion //#region src/utils/streamResponse/handler/completion.d.ts /** * 完成流处理器类型 */ type CompletionEvent = MessageEvent | MessageEndEvent | TTSMessageEvent | TTSMessageEndEvent | MessageReplaceEvent | ErrorEvent; /** * 完成流处理器 */ declare class CompletionStreamHandler extends BaseStreamHandler { /** * 注册消息事件处理器 */ onMessage(handler: EventHandler): this; /** * 注册消息结束事件处理器 */ onMessageEnd(handler: EventHandler): this; /** * 注册文本转语音消息事件处理器 */ onTtsMessage(handler: EventHandler): this; /** * 注册文本转语音结束事件处理器 */ onTtsMessageEnd(handler: EventHandler): this; /** * 注册消息替换事件处理器 */ onMessageReplace(handler: EventHandler): this; /** * 注册错误事件处理器 */ onErrorEvent(handler: EventHandler): this; } //#endregion //#region src/utils/streamResponse/handler/workflow.d.ts /** * 工作流流处理器 */ declare class WorkflowStreamHandler extends BaseStreamHandler { /** * 注册工作流开始事件处理器 */ onWorkflowStarted(handler: EventHandler): this; /** * 注册工作流完成事件处理器 */ onWorkflowFinished(handler: EventHandler): this; /** * 注册节点开始事件处理器 */ onNodeStarted(handler: EventHandler): this; /** * 注册节点完成事件处理器 */ onNodeFinished(handler: EventHandler): this; /** * 注册文本块事件处理器 */ onTextChunk(handler: EventHandler): this; /** * 注册文本转语音消息事件处理器 */ onTtsMessage(handler: EventHandler): this; /** * 注册文本转语音结束事件处理器 */ onTtsMessageEnd(handler: EventHandler): this; } //#endregion //#region src/client/type.d.ts interface Usage { prompt_tokens: number; prompt_unit_price: string; prompt_price_unit: string; prompt_price: string; completion_tokens: number; completion_unit_price: string; completion_price_unit: string; completion_price: string; total_tokens: number; total_price: string; currency: string; latency: number; } interface RetrieverResource { id: string; content: string; source?: string; score?: number; metadata?: Record; } /** inputs var */ type AnyObject = Record; type Status = 'running' | 'succeeded' | 'failed' | 'stopped'; type ResponseModeType = 'streaming' | 'blocking'; type FeedbackRating = 'like' | 'dislike' | null; /** * 用户标识 * @description 不管是什么类型,最终都会被dify的 python代码 转换为字符串 */ type User = T; type AppParameters = { opening_statement: string; suggested_questions: string[]; suggested_questions_after_answer: { enable: boolean; }; speech_to_text: { enable: boolean; }; text_to_speech: { enable: boolean; voice: string; language: string; autoPlay: 'disabled' | 'enabled'; }; retriever_resource: { enable: boolean; }; annotation_reply: { enable: boolean; }; user_input_form: [{ 'text-input': { label: string; variable: string; required: boolean; max_length: number; default: ''; }; }, { paragraph: { label: string; variable: string; required: boolean; default: ''; }; }, { select: { label: string; variable: string; required: boolean; default: string; options: string[]; }; }]; file_upload: { image: { enabled: boolean; number_limits: number; transfer_methods: string[]; }; allowed_file_types: string[]; allowed_file_extensions: string[]; allowed_file_upload_methods: string[]; number_limits: number; fileUploadConfig: { file_size_limit: number; batch_count_limit: number; image_file_size_limit: number; video_file_size_limit: number; audio_file_size_limit: number; workflow_file_upload_limit: number; }; }; system_parameters: { image_file_size_limit: number; video_file_size_limit: number; audio_file_size_limit: number; file_size_limit: number; workflow_file_upload_limit: number; }; }; interface AppMeta { tool_icons: { [key: string]: string | { background: string; content: string; }; }; } interface FileUploadResponse { id: string; name: string; size: number; extension: string; mime_type: string; created_by: string; created_at: number; preview_url: string | null; } interface VisionFile { type: 'document' | 'image' | 'audio' | 'video' | 'custom'; name: string; transfer_method: 'remote_url' | 'local_file'; /** 当transfer_method为remote_url时,url为必填 */ url?: string; /** 当transfer_method为local_file时,upload_file_id为必填 */ upload_file_id?: string; } interface ChatMessageParams { inputs?: AnyObject; query: string; user: string; conversation_id?: string; files?: VisionFile[]; response_mode?: T; auto_generate_name?: boolean; } type ChatResponseType = T extends 'streaming' ? ChatStreamHandler : ChatCompletionResponse; interface ChatCompletionResponse { event: 'message'; task_id: string; id: string; message_id: string; conversation_id: string; mode: 'chat'; answer: string; metadata: { usage: Usage; retriever_resources: RetrieverResource[]; }; created_at: number; } type ChatCompletionChunkResponse = string; type SuggestedResponse = { result: 'success'; data: string[]; }; type RenameConversationParams = { conversation_id: string; name?: string; user: User; /** default false */ auto_generate?: boolean; }; type RenameConversationResponse = { id: string; name: string; inputs: AnyObject; status: 'normal' | string; introduction: string; created_at: number; updated_at: number; }; type DeleteConversationParams = { conversation_id: string; user: User; }; type DeleteConversationResponse = { result: 'success'; }; type ConversationParams = { user: User; last_id?: string; /** int_range(1, 100), default 20 */ limit?: number; /** default -updated_at */ sort_by?: 'created_at' | '-created_at' | 'updated_at' | '-updated_at'; }; type Conversations = { id: string; inputs: AnyObject; introduction: string; name: string; status: 'normal' | string; created_at: number; updated_at: number; }; type ConversationResponse = { limit: number; has_more: boolean; data: Conversations[]; }; type ConversationMessageParams = { user: User; conversation_id: string; last_id?: string; /** int_range(1, 100), default 20 */ limit?: number; }; type Message = { agent_thoughts: []; answer: string; conversation_id: string; created_at: number; error: null; feedback: FeedbackRating | null; id: string; inputs: AnyObject; message_files: { id: string; type: 'image' | string; url: string; belongs_to: 'assistant' | 'user'; }[]; metadata: Record; parent_message_id: string | null; query: string; retriever_resources: RetrieverResource[]; status: 'normal' | string; }; type ConversationMessageResponse = { limit: number; has_more: boolean; data: Message[]; }; type RunWorkflowParams = { inputs?: Record; user: User; response_mode?: T; }; interface WorkflowCompletionResponse { workflow_run_id: string; task_id: string; data: { id: string; workflow_id: string; status: Status; outputs?: AnyObject; error?: string; elapsed_time?: number; total_tokens?: number; total_steps: number; created_at: number; finished_at: number; }; } type WorkflowResponse = T extends 'streaming' ? WorkflowStreamHandler : WorkflowCompletionResponse; type WorkflowRunStatus = 'succeeded' | 'failed' | 'stopped'; type GetLogsParams = { keyword?: string; status?: WorkflowRunStatus; page?: number; limit?: number; }; type WorkflowLog = { id: string; workflow_run: { id: string; version: string; status: WorkflowRunStatus; error: string | null; elapsed_time: number; total_tokens: number; total_steps: number; created_at: number; finished_at: number; }; created_from: string; created_by_role: string; created_by_account: string | null; created_by_end_user: { id: string; type: string; is_anonymous: boolean; session_id: string; }; created_at: number; }; type WorkflowLogResponse = { page: number; limit: number; total: number; has_more: boolean; data: WorkflowLog[]; }; type CreateCompletionMessageParams = { inputs: { query: string; [key: string]: any; }; user: User; files?: VisionFile[]; response_mode?: T; }; type CompletionResponse = T extends 'streaming' ? CompletionStreamHandler : CompletionCompletionResponse; interface CompletionCompletionResponse { event: 'message'; task_id: string; id: string; message_id: string; conversation_id: string; } //#endregion //#region src/client/dify.d.ts /** * Dify API Base Class */ declare class DifyClient { protected apiKey: string; protected baseUrl: string; protected request: AxiosInstance; /** * Create Dify Client Instance * @param apiKey API Key * @param baseUrl API Base URL, default to official API address */ constructor(apiKey: string, baseUrl?: string); messageFeedback(messageId: string, rating: FeedbackRating, user: User): Promise>; getApplicationParameters(): Promise>; getMeta(): Promise>; fileUpload(file: File, user: string): Promise>; /** * @deprecated dify 源码中还接受了voice参数,同时源码中貌似并未对streaming参数进行处理 */ textToVideo(data: { message_id?: string; text?: string; user: User; streaming?: boolean; }): Promise>; } //#endregion //#region src/client/chat.d.ts declare class ChatClient extends DifyClient { createChatMessage(params: ChatMessageParams): Promise>; getSuggested(messageId: string, user: User): Promise>; /** * @param taskId get it from chunk response * @param user */ stopMessage(taskId: string, user: User): Promise>; getConversations(params: ConversationParams): Promise>; getConversationMessages(params: ConversationMessageParams): Promise>; renameConversation(data: RenameConversationParams): Promise>; deleteConversation(data: DeleteConversationParams): Promise>; /** * @param file file support ["mp3", "m4a", "wav", "webm", "amr"], limit 15MB * @param user 用户 */ audioToText(file: File, user: User): Promise>; } //#endregion //#region src/client/workflow.d.ts declare class WorkflowClient extends DifyClient { run(data: RunWorkflowParams): Promise>; getRunDetail(workflowRunId: string): Promise>; stop(taskId: string, user: User): Promise>; getLogs(params: GetLogsParams): Promise>; } //#endregion //#region src/client/completion.d.ts declare class CompletionClient extends DifyClient { createCompletionMessage(data: CreateCompletionMessageParams): Promise>; stop(taskId: string, user: User): Promise>; } //#endregion export { AnyObject, AppMeta, AppParameters, BaseEvent, ChatClient, ChatCompletionChunkResponse, ChatCompletionResponse, ChatMessageParams, ChatResponseType, ChatStreamEvent, CompletionClient, CompletionCompletionResponse, CompletionResponse, CompletionStreamEvent, ConversationMessageParams, ConversationMessageResponse, ConversationParams, ConversationResponse, Conversations, CreateCompletionMessageParams, DeleteConversationParams, DeleteConversationResponse, DifyClient, ErrorEvent, EventType, FeedbackRating, FileUploadResponse, GetLogsParams, Message, MessageEndEvent, MessageEvent, MessageFileEvent, MessageReplaceEvent, NodeFinishedEvent, NodeStartedEvent, RenameConversationParams, RenameConversationResponse, ResponseModeType, RetrieverResource, RunWorkflowParams, Status, SuggestedResponse, TTSMessageEndEvent, TTSMessageEvent, TextChunkEvent, Usage, User, VisionFile, WorkflowClient, WorkflowCompletionResponse, WorkflowFinishedEvent, WorkflowLog, WorkflowLogResponse, WorkflowResponse, WorkflowRunStatus, WorkflowStartedEvent, WorkflowStreamEvent };