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 {};