import type { AnyObject } from '../_util/type'; import { AbstractChatProvider } from '../chat-providers'; import { ConversationData } from '../x-conversations'; import type { SSEOutput } from '../x-stream'; export type SimpleType = string | number | boolean | object; declare enum MessageStatusEnum { local = "local", loading = "loading", updating = "updating", success = "success", error = "error", abort = "abort" } export type MessageStatus = `${MessageStatusEnum}`; type RequestPlaceholderFn = (requestParams: Partial, info: { messages: Message[]; }) => Message; type RequestFallbackFn = (requestParams: Partial, info: { error: Error; errorInfo?: any; messages: Message[]; messageInfo: MessageInfo; }) => Message | Promise; export type RequestParams = { [Key: PropertyKey]: Message; } & AnyObject; export interface XChatConfig { provider?: AbstractChatProvider; conversationKey?: ConversationData['key']; defaultMessages?: DefaultMessageInfo[] | ((info: { conversationKey?: ConversationData['key']; }) => Promise[]>) | ((info?: { conversationKey?: ConversationData['key']; }) => DefaultMessageInfo[]); /** Convert agent message to bubble usage message type */ parser?: (message: ChatMessage) => BubbleMessage | BubbleMessage[]; requestPlaceholder?: ChatMessage | RequestPlaceholderFn; requestFallback?: ChatMessage | RequestFallbackFn, ChatMessage>; } export interface MessageInfo { id: number | string; message: Message; status: MessageStatus; extraInfo?: AnyObject; } export type DefaultMessageInfo = Pick, 'message'> & Partial, 'message'>>; export type RequestResultObject = { message: Message | Message[]; status: MessageStatus; }; export type StandardRequestResult = Omit, 'message' | 'status'> & { message: Message; status?: MessageStatus; }; export default function useXChat, Output = SSEOutput>(config: XChatConfig): { readonly onRequest: (requestParams: Partial, opts?: { extraInfo: AnyObject; }) => void; readonly isDefaultMessagesRequesting: boolean; readonly messages: MessageInfo[]; readonly parsedMessages: MessageInfo[]; readonly setMessages: (messages: MessageInfo[] | ((ori: MessageInfo[]) => MessageInfo[])) => boolean; readonly removeMessage: (id: string | number) => boolean; readonly setMessage: (id: string | number, message: Partial> | ((message: MessageInfo) => Partial>)) => boolean; readonly abort: () => void; readonly isRequesting: boolean; readonly onReload: (id: string | number, requestParams: Partial, opts?: { extraInfo: AnyObject; }) => void; readonly queueRequest: (currentConversationKey: string | symbol, requestParams: Partial, opts?: { extraInfo: AnyObject; }) => void; }; export {};