import { MessageStore } from './store/message'; import type { AIMessageContent, ChatMessagesData, ChatMessageSetterMode, ChatRequestParams, ChatServiceConfigSetter, ChatStatus, IChatEngine, ToolCall } from './type'; export default class ChatEngine implements IChatEngine { messageStore: MessageStore; private messageProcessor; private llmService; private config; private lastRequestParams; private stopReceive; private aguiAdapter; constructor(); /** * 获取当前所有消息 * @returns 消息数组 * @description 返回消息存储中的所有消息 */ get messages(): ChatMessagesData[]; /** * 获取当前聊天状态 * @returns 聊天状态:'idle'、'pending'、'streaming'、'complete'、'stop'或'error' * @description 返回最后一条消息的状态,如果没有消息则返回'idle' */ get status(): ChatStatus; /** * 销毁聊天引擎实例 * @description 中止请求,清理消息存储和适配器,释放资源 */ destroy(): void; /** * 初始化聊天引擎 * @param configSetter 聊天服务配置或配置生成函数 * @param initialMessages 初始消息列表,用于恢复历史对话 * @description 设置初始消息、配置服务参数,并根据协议类型初始化适配器 */ init(configSetter: ChatServiceConfigSetter, initialMessages?: ChatMessagesData[]): void; /** * 发送用户消息并获取AI回复 * @param requestParams 请求参数,包含用户输入的文本和附件 * @param sendRequest 是否立即发送 * @description 创建用户消息和AI消息,并发送请求获取AI回复 */ sendUserMessage(requestParams: ChatRequestParams, sendRequest?: boolean): Promise; /** * 发送系统消息 * @param msg 系统消息文本内容 * @description 创建并存储一条系统消息,通常用于设置上下文或控制对话流程 */ sendSystemMessage(msg: string): Promise; /** * 手动发送AI消息 * @param options 包含请求参数params、发送消息内容content和是否发送请求的标志sendRequest * @description 创建并存储一条AI消息,可选择是否同时发送请求 */ sendAIMessage(options?: { params?: ChatRequestParams; content?: AIMessageContent[]; sendRequest?: boolean; }): Promise; /** * 中止当前进行中的聊天请求 * @description 停止接收流式响应,关闭连接,并调用配置的onAbort回调 */ abortChat(): Promise; /** * 注册内容块合并策略 * @param type 内容类型,如'text'、'markdown'等 * @param handler 合并处理函数,接收新块和现有块,返回合并后的内容块 * @description 用于自定义不同类型内容的增量更新逻辑 */ registerMergeStrategy(type: T['type'], // 使用类型中定义的type字段作为参数类型 handler: (chunk: T, existing?: T) => T): void; /** * 设置消息列表 * @param messages 要设置的消息数组 * @param mode 设置模式:'replace'(替换)、'prepend'(前置)、'append'(追加),默认为'replace' * @description 用于批量更新消息,如加载历史消息或重置对话 */ setMessages(messages: ChatMessagesData[], mode?: ChatMessageSetterMode): void; /** * 清空所有消息 * @description 清除消息存储中的所有历史记录 */ clearMessages(): void; /** * 重新生成AI回复 * @param keepVersion 是否保留历史版本,默认为false * @description * - 当keepVersion=false时:删除最后一条AI消息,创建新消息并重新请求 * - 当keepVersion=true时:保留旧消息,创建分支消息并重新请求 */ regenerateAIMessage(keepVersion?: boolean): Promise; /** * 发送请求获取AI回复 * @param params 请求参数 * @description 根据配置选择流式或批量请求模式,处理响应并更新消息状态 */ sendRequest(params: ChatRequestParams): Promise; /** * 根据名称获取工具调用 * @param name 工具调用名称 * @returns 匹配的工具调用对象,如果未找到则返回undefined * @description 用于获取特定名称的工具调用信息,仅在AGUI协议下可用 */ getToolcallByName(name: string): ToolCall | undefined; private handleBatchRequest; private handleError; private handleComplete; /** * 处理流式请求 * 根据协议类型选择不同的处理策略 */ private handleStreamRequest; /** * 处理AGUI协议的流式请求 */ private handleAGUIStreamRequest; /** * 处理默认协议的流式请求 */ private handleDefaultStreamRequest; /** * 统一处理消息结果 * 支持单个内容块、多个内容块和增量更新 */ private processMessageResult; private convertMessages; private setMessageStatus; private processContentUpdate; } export * from './utils'; export * from './adapters/agui'; export type * from './type';